From 08787fa3e664dbd3f362f1d104e2579999681e5d Mon Sep 17 00:00:00 2001 From: Brett Tasker Date: Thu, 9 Feb 2017 11:28:52 +1300 Subject: [PATCH 1/5] Update translations --- javascript/lang/sk.js | 2 +- javascript/lang/src/sk.js | 2 +- lang/ar.yml | 22 ++++++------- lang/ar_SA.yml | 2 +- lang/fa_IR.yml | 4 +-- lang/ja.yml | 18 +++++------ lang/sk.yml | 16 +++++++-- lang/zh.yml | 68 +++++++++++++++++++-------------------- 8 files changed, 73 insertions(+), 61 deletions(-) diff --git a/javascript/lang/sk.js b/javascript/lang/sk.js index 53e26c7..ee91d2f 100644 --- a/javascript/lang/sk.js +++ b/javascript/lang/sk.js @@ -16,7 +16,7 @@ if (typeof(ss) === 'undefined' || typeof(ss.i18n) === 'undefined') { "UserForms.ERROR_CREATING_FIELD": "Nastala chyba pri vytváraní poľa", "UserForms.ERROR_CREATING_OPTION": "Nastala chyba pri vytváraní voľby/možnosti", "UserForms.HIDE_OPTIONS": "Skryť možnosti", - "UserForms.LEAVE_CONFIRMATION": "You have unsaved changes!", + "UserForms.LEAVE_CONFIRMATION": "Máte neuložené zmeny!", "UserForms.REMOVED_OPTION": "Voľba/možnosť odstránená", "UserForms.SHOW_OPTIONS": "Zobraziť možnosti" }); diff --git a/javascript/lang/src/sk.js b/javascript/lang/src/sk.js index 7f1b1c4..74d7e7d 100644 --- a/javascript/lang/src/sk.js +++ b/javascript/lang/src/sk.js @@ -9,7 +9,7 @@ "UserForms.ERROR_CREATING_FIELD": "Nastala chyba pri vytváraní poľa", "UserForms.ERROR_CREATING_OPTION": "Nastala chyba pri vytváraní voľby/možnosti", "UserForms.HIDE_OPTIONS": "Skryť možnosti", - "UserForms.LEAVE_CONFIRMATION": "You have unsaved changes!", + "UserForms.LEAVE_CONFIRMATION": "Máte neuložené zmeny!", "UserForms.REMOVED_OPTION": "Voľba/možnosť odstránená", "UserForms.SHOW_OPTIONS": "Zobraziť možnosti" } \ No newline at end of file diff --git a/lang/ar.yml b/lang/ar.yml index 9cc984f..0699ede 100644 --- a/lang/ar.yml +++ b/lang/ar.yml @@ -11,8 +11,8 @@ ar: NOTBLANK: 'ليس بفراغ' NOTVALUE: 'ليست قيمة' SHOWTHISFIELD: 'إظهار هذا الحقل' - VALUE: 'القيمة' - WHEN: 'عندما' + VALUE: القيمة + WHEN: عندما EditableCheckbox: PLURALNAME: 'مربعات لوضع إشارة' SINGULARNAME: 'حقل ذات مربع لوضع إشارة' @@ -51,7 +51,7 @@ ar: FIELDONDEFAULT: 'القيمة المبدئية للحقل' GREATERTHAN: 'القيمة أكبر من' GREATERTHANEQUAL: 'القيمة أكبر من أو تساوي' - GROUP: 'مجموعة' + GROUP: مجموعة HIDE: إخفاء HIDETHISFIELD: 'إخفاء هذا الحقل' IS: إنه @@ -68,9 +68,9 @@ ar: SHOWOPTIONS: 'إظهار الخيارات' SHOWTHISFIELD: 'أعرض هذه الحقل' SINGULARNAME: 'حقل استمارة قابل للتحرير' - VALIDATION: 'المصادقة' - VALUE: 'القيمة' - WHEN: 'عندما' + VALIDATION: المصادقة + VALUE: القيمة + WHEN: عندما EditableFormHeading: LEVEL: 'حدد مستوى العنوان' PLURALNAME: عناوين @@ -122,16 +122,16 @@ ar: SINGULARNAME: 'حقل الاستمارة الذي تمّ تقديمه' UserDefinedForm: ADDEMAILRECIPIENT: 'أضف متلقي البريد الإلكتروني' - CONFIGURATION: 'مواصفات' + CONFIGURATION: مواصفات DESCRIPTION: 'يضيف استمارة مخصصة.' EMAILADDRESS: 'البريد الإلكتروني' EMAILBODY: هيئة - EMAILFROM: 'من' + EMAILFROM: من EMAILRECIPIENTS: 'متلقي البريد الإلكتروني' EMAILSUBJECT: 'موضوع البريد الإلكتروني' ENABLELIVEVALIDATION: 'تفعيل المصادقة الآنية' EmailFromContent: 'عنوان خانة المرسل يسمح لك بتعيين من الذي يأتي منه البريد الالكتروني. في معظم الخوادم هذا سوف يحتاج إلى أن يعين إلى عنوان بريد إلكتروني على نفس اسم مجال موقع الويب الخاص بك. على سبيل المثال على yoursite.com عنوان خانة المرسل قد يحتاج إلى أن يكون something@yoursite.com. يمكنك مع ذلك، تعيين أي عنوان بريد إلكتروني ترغب كعنوان للرد.' - FORM: 'نموذج' + FORM: نموذج FROMADDRESS: 'ارسل بريد إلكتروني من' HIDEFIELDLABELS: 'إخفاء تسميات الحقول' HIDEFORMDATA: 'إخفاء بيانات النموذج من البريد الإلكتروني؟' @@ -144,8 +144,8 @@ ar: SENDPLAIN: 'إرسال البريد الإلكتروني كنص عادي؟ (سيتم تجريد كود الHTML)' SHOWCLEARFORM: 'زر عرض النموذج ممسوحاً' SINGULARNAME: 'نموذج يحدده المستخدم' - SUBMISSIONS: 'التقديمات' - SUBMITBUTTON: 'تقديم' + SUBMISSIONS: التقديمات + SUBMITBUTTON: تقديم TEXTONSUBMIT: 'زر النص المتعلق بالتقديم:' UserDefinedForm_EmailRecipient: PLURALNAME: 'نموذج مستلمي البريد الإلكتروني يحدده المستخدم' diff --git a/lang/ar_SA.yml b/lang/ar_SA.yml index c78c718..3b11e0f 100644 --- a/lang/ar_SA.yml +++ b/lang/ar_SA.yml @@ -78,7 +78,7 @@ ar_SA: EMAILFROM: From EMAILRECIPIENTS: 'Email Recipients' EMAILSUBJECT: 'Email Subject' - FORM: 'النموذج' + FORM: النموذج FROMADDRESS: 'Send Email From' HIDEFORMDATA: 'Hide Form Data from Email' ONCOMPLETELABEL: 'عرض الطلبات المكتملة' diff --git a/lang/fa_IR.yml b/lang/fa_IR.yml index db56b65..7e2291e 100644 --- a/lang/fa_IR.yml +++ b/lang/fa_IR.yml @@ -46,12 +46,12 @@ fa_IR: UserDefinedForm: CLEARBUTTON: پاک‌کردن DISABLECSRFSECURITYTOKEN: 'غیر فعال کردن CSRF' - EMAILADDRESS: 'ایمیل' + EMAILADDRESS: ایمیل EMAILFROM: از EMAILSUBJECT: 'موضوع پست الکترونیک' EMAILTEMPLATE: 'قالب پست الکترونیک' FIELDS: فیلدها - FORM: 'فرم' + FORM: فرم PLURALNAME: 'صفحه اصلی' RECIPIENTS: 'دریافت کنندگان' SENDEMAILTO: 'ارسال ایمیل به' diff --git a/lang/ja.yml b/lang/ja.yml index 73468c4..b0f6f9c 100644 --- a/lang/ja.yml +++ b/lang/ja.yml @@ -12,23 +12,23 @@ ja: UserDefinedForm: EMAILADDRESS: メール EMAILBODY: ボディ - EMAILFROM: '送信者' + EMAILFROM: 送信者 EMAILSUBJECT: メールの件名 EmailFromContent: '送信元アドレスでどこからメールを送信するのか設定することができます。多くのサーバーではこれはあなたのサイトのドメイン名と同じメールアドレスに設定する必要があります。たとえば yoursite.com では送信元アドレスは something@yoursite.com としなければいけません。ただし、返信先アドレスは好きなメールアドレスを設定することができます。' - FORM: 'フォーム' - FROMADDRESS: 'メールの送信元' + FORM: フォーム + FROMADDRESS: メールの送信元 HIDEFORMDATA: 'メールからフォームデータを見えないようにしますか?' ONCOMPLETELABEL: 完成時に表示 - ORSELECTAFIELDTOUSEASFROM: '..またはフィールドを選択して返信先アドレスとして使用' - ORSELECTAFIELDTOUSEASTO: '..またはフィールドを選択して宛先アドレスとして使用' + ORSELECTAFIELDTOUSEASFROM: ..またはフィールドを選択して返信先アドレスとして使用 + ORSELECTAFIELDTOUSEASTO: ..またはフィールドを選択して宛先アドレスとして使用 REPLYADDRESS: 以下への返信メール SAVESUBMISSIONS: 提出物をサーバーに保存するのを無効化 SENDEMAILTO: メールを送信 SENDPLAIN: 'プレーンテキストとしてメールを送信しますか? (HTMLは取り除かれます)' - SHOWCLEARFORM: 'フォームをクリアーボタンを表示する' - SINGULARNAME: 'ユーザー定義フォーム' + SHOWCLEARFORM: フォームをクリアーボタンを表示する + SINGULARNAME: ユーザー定義フォーム SUBMITBUTTON: 送信 TEXTONSUBMIT: '送信ボタンのテキスト:' UserDefinedForm_EmailRecipient: - PLURALNAME: 'ユーザー定義フォームのメール受信者' - SINGULARNAME: 'ユーザー定義フォームのメール受信者' + PLURALNAME: ユーザー定義フォームのメール受信者 + SINGULARNAME: ユーザー定義フォームのメール受信者 diff --git a/lang/sk.yml b/lang/sk.yml index d42a955..2ac9b0a 100644 --- a/lang/sk.yml +++ b/lang/sk.yml @@ -57,6 +57,7 @@ sk: DEFAULT: 'Predvolená hodnota' DEFAULTTOTODAY: 'Zobraziť v predvolenom režime na dnešný dátum?' DELETE: Vymazať + DISPLAY_RULES_DISABLED: 'Pravidlá zobrazenia nie sú povolené pre povinné/vyžadované polia. Prosím odškrtnite "Je pole povinné/vyžadované?" na záložke "Validácia".' DRAG: 'Ťahaním preskupiť poradie polí' ENTERQUESTION: 'Zadajte otázku' EXTRACLASSA: 'Extra úprava/vzhľad' @@ -91,7 +92,7 @@ sk: SHOWOPTIONS: 'Zobraziť možnosti' SHOWTHISFIELD: 'Zobraziť toto pole' SINGULARNAME: 'Formulárové pole' - TITLE: Titulok + TITLE: Názov TYPE: Typ VALIDATION: Validácia VALUE: 'Zadanú hodnotu' @@ -111,7 +112,7 @@ sk: EditableLiteralField: CONTENT: HTML HIDEFROMREPORT: 'Skryť z reportu?' - HIDELABEL: 'Skryť titulok na FrontEnd-e?' + HIDELABEL: 'Skryť ''Názov'' na FrontEnd-e?' PLURALNAME: 'HTML bloky' SINGULARNAME: 'HTML blok' EditableMemberListField: @@ -119,8 +120,11 @@ sk: SINGULARNAME: 'Pole zoznamu členov' EditableMultipleOptionField: DEFAULT: 'Vybrané v predvolenom režime?' + OPTIONSTAB: Možnosti PLURALNAME: 'Polia s viacerými možnosťami' SINGULARNAME: 'Pole s viacerými možnosťami' + TITLE: Názov + VALUE: Hodnota EditableNumericField: PLURALNAME: 'Numerické/číselné polia' RANGE: 'Povolený rozsah' @@ -189,6 +193,7 @@ sk: FileUploadWarning: 'Súbory nahraté pomocou tohto políčka môžu byť verejné prístupné, pokiaľ je známa presná URL adresa.' HIDEFIELDLABELS: 'Skyť popisky (menovky) polí?' HIDEFORMDATA: 'Skryť dáta z e-mailu?' + NORECIPIENTS: 'Varovanie: Nemáte pridaných žiadnych príjemcov. Podané formuláre môžu chýbať.' ONCOMPLETELABEL: 'Správa po odoslaní formulára' ORSELECTAFIELDTOUSEASFROM: '... alebo vyberte poľe, ktoré sa použije na odpoveď' ORSELECTAFIELDTOUSEASTO: '... alebo vyberte poľe, ktoré sa použije ako E-mail príjemcu' @@ -205,6 +210,8 @@ sk: SENDEMAILTO: 'E-mail príjemcu' SENDEMAILTO_DESCRIPTION: 'Môžete zadať viac e-mailových adries, pričom jednotlivé adresy oddeľujte čiarkou.' SENDIF: 'Podmienka poslania' + SENDIFAND: 'Všetky podmienky sú splnené' + SENDIFOR: 'Akékoľvek podmienky sú splnené' SENDPLAIN: 'Poslať e-mail ako obyčajný text? (HTML značky budú odstránené)' SHOWCLEARFORM: 'Zobraziť resetovacie tlačidlo?' SINGULARNAME: 'Jednoduchý formulár' @@ -216,6 +223,9 @@ sk: TYPESUBJECT: 'Napíšte predmet' TYPETO: 'Napíšte adresu' UserDefinedForm_EmailRecipient: + CUSTOMRULESTAB: 'Vlastné pravidlá' + EMAILCONTENTTAB: 'Obsah e-mailu' + EMAILDETAILSTAB: 'Detaily e-mailu' PLURALNAME: 'Užívateľom definovaný formulár - príjemcovia e-mailu' SINGULARNAME: 'Užívateľom definovaný formulár - príjemca e-mailu' UserDefinedForm_EmailRecipientCondition: @@ -234,4 +244,6 @@ sk: WRONG_GROUP_END: '''{name}'' nájdený vrámci zle uzatvorenej obaľovacej skupiny ''{group}''' UserFormsGridFieldFilterHeader: FILTERSUBMISSIONS: 'Filtrovať ...' + FROM: Od + TILL: Do WHEREVALUEIS: 'kde hodnota je ...' diff --git a/lang/zh.yml b/lang/zh.yml index 6240a0b..2828192 100644 --- a/lang/zh.yml +++ b/lang/zh.yml @@ -1,7 +1,7 @@ zh: CustomRule: BLANK: 空白 - DELETE: '删除' + DELETE: 删除 GREATERTHAN: 值大于 GREATERTHANEQUAL: 值大于或等于 HIDETHISFIELD: 隐藏这个字段 @@ -32,22 +32,22 @@ zh: PLURALNAME: 电子邮件字段 SINGULARNAME: 电子邮件字段 EditableFileField: - PLURALNAME: '文件上传字段' - SINGULARNAME: '文件上传字段' + PLURALNAME: 文件上传字段 + SINGULARNAME: 文件上传字段 EditableFormField: - ADD: '添加' - ADDRULE: '添加规则' + ADD: 添加 + ADDRULE: 添加规则 BLANK: 空白 CHECKEDBYDEFAULT: 默认选中? CUSTOMERROR: 自定义错误消息 CUSTOMRULES: 自定义规则 DEFAULTTOTODAY: 默认为今天? - DELETE: '删除' + DELETE: 删除 DRAG: 拖放来对字段进行重新排序 - ENTERQUESTION: '键入问题' - EXTRACLASSA: '额外的造型/布局' + ENTERQUESTION: 键入问题 + EXTRACLASSA: 额外的造型/布局 EXTRACLASSB: '额外的 css 类别 - 用空格来分开多项' - FIELDCONFIGURATION: '字段配置' + FIELDCONFIGURATION: 字段配置 FIELDONDEFAULT: 默认字段 GREATERTHAN: 值大于 GREATERTHANEQUAL: 值大于或等于 @@ -61,20 +61,20 @@ zh: NOTBLANK: 不是空白 NOTVALUE: 没有值 OPTIONS: 选项 - PLURALNAME: '可编辑的表格字段' - REQUIRED: '这个字段是必须的吗?' - RIGHTTITLE: '右标题' + PLURALNAME: 可编辑的表格字段 + REQUIRED: 这个字段是必须的吗? + RIGHTTITLE: 右标题 SHOW: 显示 SHOWOPTIONS: 显示选项 SHOWTHISFIELD: 显示该字段 - SINGULARNAME: '可编辑的表格字段' + SINGULARNAME: 可编辑的表格字段 VALIDATION: 验证 VALUE: 值 WHEN: 当 EditableFormHeading: - LEVEL: '选择标题级别' - PLURALNAME: '标题' - SINGULARNAME: '标题' + LEVEL: 选择标题级别 + PLURALNAME: 标题 + SINGULARNAME: 标题 EditableLiteralField: HIDEFROMREPORT: 从报告中隐藏? PLURALNAME: 'HTML 模块' @@ -86,7 +86,7 @@ zh: PLURALNAME: 可编辑的多个选项字段 SINGULARNAME: 可编辑的多个选项字段 EditableOption: - DELETE: '删除这个选项' + DELETE: 删除这个选项 DRAG: 拖放来对选项进行重新排序 LOCKED: 这些字段不能被修改 PLURALNAME: 可编辑的选项 @@ -100,7 +100,7 @@ zh: SINGULARNAME: 文本字段 TEXTLENGTH: 文本长度 FieldEditor: - ADD: '添加' + ADD: 添加 SELECTAFIELD: 选择一个字段 Form: FIELDISREQUIRED: '%s 是必须的' @@ -115,41 +115,41 @@ zh: PLURALNAME: 已提交的文件字段 SINGULARNAME: 已提交的文件字段 SubmittedForm: - PLURALNAME: '已提交的表格' - SINGULARNAME: '已提交的表格' + PLURALNAME: 已提交的表格 + SINGULARNAME: 已提交的表格 SubmittedFormField: - PLURALNAME: '已提交的表格字段' - SINGULARNAME: '已提交的表格字段' + PLURALNAME: 已提交的表格字段 + SINGULARNAME: 已提交的表格字段 UserDefinedForm: - ADDEMAILRECIPIENT: '添加电子邮件收件人' - CONFIGURATION: '配置' - DESCRIPTION: '添加一个可定制的表格。' + ADDEMAILRECIPIENT: 添加电子邮件收件人 + CONFIGURATION: 配置 + DESCRIPTION: 添加一个可定制的表格。 EMAILADDRESS: 电子邮件 EMAILBODY: 正文 - EMAILFROM: '表格' + EMAILFROM: 表格 EMAILRECIPIENTS: 电子邮件收件人 EMAILSUBJECT: 电子邮件主题 ENABLELIVEVALIDATION: 启用现场验证 EmailFromContent: '表格地址允许您设置电子邮件的发送人。在大多数服务器上这必须要设置成域名与您的站点域名一致的电子邮件地址。例如在 yoursite.com 上,发送人的电子邮件地址必须为 something@yoursite.com。但是您可以随意设置回复的电子邮件地址。' - FORM: '表格' + FORM: 表格 FROMADDRESS: 发送人电子邮件 - HIDEFIELDLABELS: '隐藏字段标签' - HIDEFORMDATA: '从电子邮件中隐藏表格数据?' + HIDEFIELDLABELS: 隐藏字段标签 + HIDEFORMDATA: 从电子邮件中隐藏表格数据? ONCOMPLETELABEL: 完成时显示 ORSELECTAFIELDTOUSEASFROM: '.. 或选择某字段作为回复地址' ORSELECTAFIELDTOUSEASTO: '.. 或选择某字段作为地址使用' REPLYADDRESS: 用于回复的电子邮件 - SAVESUBMISSIONS: '禁用保存提交内容到服务器' + SAVESUBMISSIONS: 禁用保存提交内容到服务器 SENDEMAILTO: 发送电子邮件到 SENDPLAIN: '以纯文本形式发送电子邮件?(HTML 将会被去除)' - SHOWCLEARFORM: '显示清除表格按钮' - SINGULARNAME: '用户定义表格' + SHOWCLEARFORM: 显示清除表格按钮 + SINGULARNAME: 用户定义表格 SUBMISSIONS: 提交 SUBMITBUTTON: 提交 TEXTONSUBMIT: 提交按钮上的文本 UserDefinedForm_EmailRecipient: - PLURALNAME: '用户定义的表格电子邮件接受者' - SINGULARNAME: '用户定义的表格电子邮件接受者' + PLURALNAME: 用户定义的表格电子邮件接受者 + SINGULARNAME: 用户定义的表格电子邮件接受者 UserFormsGridFieldFilterHeader: FILTERSUBMISSIONS: 筛选器提交…… WHEREVALUEIS: 当值为…… From bb000ca893c4a98038becf9a51ad2ed9041b22f5 Mon Sep 17 00:00:00 2001 From: Danae Date: Tue, 14 Feb 2017 15:47:16 +1300 Subject: [PATCH 2/5] FIX: Change delete() to deleteFromStage() for EditableMultipleOptionField::doPublish(). This fixes the issue where options were being removed from the draft table instead of the Live table, effectively deleting them from the CMS (#545) --- code/model/editableformfields/EditableMultipleOptionField.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/model/editableformfields/EditableMultipleOptionField.php b/code/model/editableformfields/EditableMultipleOptionField.php index fb966a9..f5ed98f 100644 --- a/code/model/editableformfields/EditableMultipleOptionField.php +++ b/code/model/editableformfields/EditableMultipleOptionField.php @@ -95,7 +95,7 @@ class EditableMultipleOptionField extends EditableFormField if ($live) { foreach ($live as $option) { - $option->delete(); + $option->deleteFromStage('Live'); } } From ba3903142691abddbfae6034a80657dd8612efe8 Mon Sep 17 00:00:00 2001 From: robbyahn Date: Fri, 24 Feb 2017 04:06:06 +1300 Subject: [PATCH 3/5] issue-547 radio button group display fix --- code/model/UserDefinedForm.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/model/UserDefinedForm.php b/code/model/UserDefinedForm.php index 24c6336..786e617 100755 --- a/code/model/UserDefinedForm.php +++ b/code/model/UserDefinedForm.php @@ -503,7 +503,7 @@ class UserDefinedForm_Controller extends Page_Controller $expression = '$(this).prop("checked")'; } elseif ($radioField) { // We cannot simply get the value of the radio group, we need to find the checked option first. - $expression = '$(this).parents(".field, .control-group").find("input:checked").val()=="'. $rule->FieldValue .'"'; + $expression = '$(this).closest(".field, .control-group").find("input:checked").val()=="'. $rule->FieldValue .'"'; } else { $expression = '$(this).val() == "'. $rule->FieldValue .'"'; } From c349ae980e587bd27dcc0296ddc118715e7378df Mon Sep 17 00:00:00 2001 From: Damian Mooyman Date: Fri, 10 Mar 2017 17:48:47 +1300 Subject: [PATCH 4/5] BUG Use non-destructive pubilshing for editable options Fixes #544 --- .../editableformfields/EditableFormField.php | 48 ++++++++++++------ .../EditableMultipleOptionField.php | 50 +++++++++++++------ tests/UserFormsVersionedTest.php | 49 ++++++++++++++++++ 3 files changed, 116 insertions(+), 31 deletions(-) create mode 100644 tests/UserFormsVersionedTest.php diff --git a/code/model/editableformfields/EditableFormField.php b/code/model/editableformfields/EditableFormField.php index c241bc3..6c52592 100755 --- a/code/model/editableformfields/EditableFormField.php +++ b/code/model/editableformfields/EditableFormField.php @@ -16,6 +16,7 @@ use SilverStripe\Forms\SegmentField; * @property string $CustomErrorMessage * @method UserDefinedForm Parent() Parent page * @method DataList DisplayRules() List of EditableCustomRule objects + * @mixin Versioned */ class EditableFormField extends DataObject { @@ -482,32 +483,47 @@ class EditableFormField extends DataObject * Publish this Form Field to the live site * * Wrapper for the {@link Versioned} publish function + * + * @param string $fromStage + * @param string $toStage + * @param bool $createNewVersion */ public function doPublish($fromStage, $toStage, $createNewVersion = false) { $this->publish($fromStage, $toStage, $createNewVersion); + $this->publishRules($fromStage, $toStage, $createNewVersion); + } - $seenIDs = array(); + /** + * Publish all field rules + * + * @param string $fromStage + * @param string $toStage + * @param bool $createNewVersion + */ + protected function publishRules($fromStage, $toStage, $createNewVersion) + { + $seenRuleIDs = array(); - // Don't forget to publish the related custom rules... - foreach ($this->DisplayRules() as $rule) { - $seenIDs[] = $rule->ID; - $rule->doPublish($fromStage, $toStage, $createNewVersion); - $rule->destroy(); - } + // Don't forget to publish the related custom rules... + foreach ($this->DisplayRules() as $rule) { + $seenRuleIDs[] = $rule->ID; + $rule->doPublish($fromStage, $toStage, $createNewVersion); + $rule->destroy(); + } - // remove any orphans from the "fromStage" + // remove any orphans from the "fromStage" $rules = Versioned::get_by_stage('EditableCustomRule', $toStage) ->filter('ParentID', $this->ID); - if (!empty($seenIDs)) { - $rules = $rules->exclude('ID', $seenIDs); + if (!empty($seenRuleIDs)) { + $rules = $rules->exclude('ID', $seenRuleIDs); } - foreach ($rules as $rule) { - $rule->deleteFromStage($toStage); - } - } + foreach ($rules as $rule) { + $rule->deleteFromStage($toStage); + } + } /** * Delete this field from a given stage @@ -528,7 +544,7 @@ class EditableFormField extends DataObject } /** - * checks wether record is new, copied from Sitetree + * checks whether record is new, copied from SiteTree */ public function isNew() { @@ -593,7 +609,7 @@ class EditableFormField extends DataObject /** * Set the allowed css classes for the extraClass custom setting * - * @param array The permissible CSS classes to add + * @param array $allowed The permissible CSS classes to add */ public function setAllowedCss(array $allowed) { diff --git a/code/model/editableformfields/EditableMultipleOptionField.php b/code/model/editableformfields/EditableMultipleOptionField.php index f5ed98f..d29499e 100644 --- a/code/model/editableformfields/EditableMultipleOptionField.php +++ b/code/model/editableformfields/EditableMultipleOptionField.php @@ -87,25 +87,45 @@ class EditableMultipleOptionField extends EditableFormField * When publishing it needs to handle copying across / publishing * each of the individual field options * - * @return void + * @param string $fromStage + * @param string $toStage + * @param bool $createNewVersion */ public function doPublish($fromStage, $toStage, $createNewVersion = false) { - $live = Versioned::get_by_stage("EditableOption", "Live", "\"EditableOption\".\"ParentID\" = $this->ID"); - - if ($live) { - foreach ($live as $option) { - $option->deleteFromStage('Live'); - } - } - - if ($this->Options()) { - foreach ($this->Options() as $option) { - $option->publish($fromStage, $toStage, $createNewVersion); - } - } - parent::doPublish($fromStage, $toStage, $createNewVersion); + $this->publishOptions($fromStage, $toStage, $createNewVersion); + } + + + /** + * Publish list options + * + * @param string $fromStage + * @param string $toStage + * @param bool $createNewVersion + */ + protected function publishOptions($fromStage, $toStage, $createNewVersion) + { + $seenIDs = array(); + + // Publish all options + foreach ($this->Options() as $option) { + $seenIDs[] = $option->ID; + $option->publish($fromStage, $toStage, $createNewVersion); + } + + // remove any orphans from the "fromStage" + $options = Versioned::get_by_stage('EditableOption', $toStage) + ->filter('ParentID', $this->ID); + + if (!empty($seenIDs)) { + $options = $options->exclude('ID', $seenIDs); + } + + foreach ($options as $rule) { + $rule->deleteFromStage($toStage); + } } /** diff --git a/tests/UserFormsVersionedTest.php b/tests/UserFormsVersionedTest.php new file mode 100644 index 0000000..dfe0095 --- /dev/null +++ b/tests/UserFormsVersionedTest.php @@ -0,0 +1,49 @@ +objFromFixture('UserDefinedForm', 'filtered-form-page'); + + // Get id of options + $optionID = $this->idFromFixture('EditableOption', 'option-3'); + $this->assertEmpty(Versioned::get_one_by_stage('EditableOption', 'Live', array('"ID" = ?' => $optionID))); + + // Publishing writes this to live + $form->doPublish(); + $liveVersion = Versioned::get_versionnumber_by_stage('EditableOption', 'Live', $optionID, false); + $this->assertNotEmpty($liveVersion); + + // Add new option, and repeat publish process + /** @var EditableCheckboxGroupField $list */ + $list = $this->objFromFixture('EditableCheckboxGroupField', 'checkbox-group'); + $newOption = new EditableOption(); + $newOption->Title = 'New option'; + $newOption->Value = 'ok'; + $newOption->write(); + $newOptionID = $newOption->ID; + $list->Options()->add($newOption); + + $form->doPublish(); + + // Un-modified option should not create a new version + $newLiveVersion = Versioned::get_versionnumber_by_stage('EditableOption', 'Live', $optionID, false); + $this->assertNotEmpty($newLiveVersion); + $this->assertEquals($liveVersion, $newLiveVersion); + + // New option is successfully published + $newOptionLiveVersion = Versioned::get_versionnumber_by_stage('EditableOption', 'Live', $newOptionID, false); + $this->assertNotEmpty($newOptionLiveVersion); + } +} From bf391697fabb5444fec31de752c807afb6ff8646 Mon Sep 17 00:00:00 2001 From: Loz Calver Date: Sun, 2 Apr 2017 23:35:16 +0100 Subject: [PATCH 5/5] Fix casting bug with email previews (#549) --- code/model/recipients/UserFormRecipientItemRequest.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/code/model/recipients/UserFormRecipientItemRequest.php b/code/model/recipients/UserFormRecipientItemRequest.php index 7a03dc8..ef125da 100644 --- a/code/model/recipients/UserFormRecipientItemRequest.php +++ b/code/model/recipients/UserFormRecipientItemRequest.php @@ -39,10 +39,10 @@ class UserFormRecipientItemRequest extends GridFieldDetailForm_ItemRequest { foreach ($fields as $field) { $data->push(new ArrayData(array( - 'Name' => $field->Name, - 'Title' => $field->Title, - 'Value' => '$' . $field->Name, - 'FormattedValue' => '$' . $field->Name + 'Name' => $field->dbObject('Name'), + 'Title' => $field->dbObject('Title'), + 'Value' => DBField::create_field('Varchar', '$' . $field->Name), + 'FormattedValue' => DBField::create_field('Varchar', '$' . $field->Name) ))); }