From 457a8a75571808726c4506a8b6131e728ff699dd Mon Sep 17 00:00:00 2001 From: 3Dgoo Date: Fri, 28 Apr 2017 18:01:51 +0930 Subject: [PATCH] API Moving placeholder variable to EditableFormField (#581) --- .../editableformfields/EditableDateField.php | 2 + .../editableformfields/EditableEmailField.php | 23 +------ .../editableformfields/EditableFormField.php | 24 +++++++ .../EditableFormHeading.php | 0 .../EditableNumericField.php | 24 +------ .../editableformfields/EditableTextField.php | 15 +---- code/tasks/UserFormsUpgradeService.php | 64 +++++++++++++++++++ lang/de_DE.yml | 2 +- lang/en.yml | 2 +- lang/eo.yml | 2 +- lang/fi_FI.yml | 2 +- lang/it.yml | 2 +- lang/sk.yml | 2 +- 13 files changed, 102 insertions(+), 62 deletions(-) mode change 100755 => 100644 code/model/editableformfields/EditableEmailField.php mode change 100755 => 100644 code/model/editableformfields/EditableFormHeading.php mode change 100755 => 100644 code/model/editableformfields/EditableTextField.php diff --git a/code/model/editableformfields/EditableDateField.php b/code/model/editableformfields/EditableDateField.php index 676695e..bd911df 100755 --- a/code/model/editableformfields/EditableDateField.php +++ b/code/model/editableformfields/EditableDateField.php @@ -14,6 +14,8 @@ class EditableDateField extends EditableFormField private static $plural_name = 'Date Fields'; + private static $has_placeholder = true; + private static $db = array( 'DefaultToToday' => 'Boolean' // From customsettings ); diff --git a/code/model/editableformfields/EditableEmailField.php b/code/model/editableformfields/EditableEmailField.php old mode 100755 new mode 100644 index 7bf0446..d67a7c8 --- a/code/model/editableformfields/EditableEmailField.php +++ b/code/model/editableformfields/EditableEmailField.php @@ -14,24 +14,7 @@ class EditableEmailField extends EditableFormField private static $plural_name = 'Email Fields'; - private static $db = array( - 'Placeholder' => 'Varchar(255)' - ); - - public function getCMSFields() - { - $this->beforeUpdateCMSFields(function ($fields) { - $fields->addFieldToTab( - 'Root.Main', - TextField::create( - 'Placeholder', - _t('EditableTextField.PLACEHOLDER', 'Placeholder') - ) - ); - }); - - return parent::getCMSFields(); - } + private static $has_placeholder = true; public function getSetsOwnError() { @@ -59,9 +42,5 @@ class EditableEmailField extends EditableFormField parent::updateFormField($field); $field->setAttribute('data-rule-email', true); - - if ($this->Placeholder) { - $field->setAttribute('placeholder', $this->Placeholder); - } } } diff --git a/code/model/editableformfields/EditableFormField.php b/code/model/editableformfields/EditableFormField.php index 45ac497..673b6a5 100755 --- a/code/model/editableformfields/EditableFormField.php +++ b/code/model/editableformfields/EditableFormField.php @@ -61,6 +61,13 @@ class EditableFormField extends DataObject */ public static $allowed_css = array(); + /** + * Set this to true to enable placeholder field for any given class + * @config + * @var bool + */ + private static $has_placeholder = false; + /** * @config * @var array @@ -89,6 +96,7 @@ class EditableFormField extends DataObject "RightTitle" => "Varchar(255)", // from CustomSettings "ShowOnLoad" => "Boolean(1)", // from CustomSettings "ShowInSummary" => "Boolean", + "Placeholder" => "Varchar(255)", 'DisplayRulesConjunction' => 'Enum("And,Or","Or")', ); @@ -249,6 +257,17 @@ class EditableFormField extends DataObject $fields->addFieldsToTab('Root.DisplayRules', $displayFields); } + // Placeholder + if ($this->config()->has_placeholder) { + $fields->addFieldToTab( + 'Root.Main', + TextField::create( + 'Placeholder', + _t('EditableFormField.PLACEHOLDER', 'Placeholder') + ) + ); + } + $this->extend('updateCMSFields', $fields); return $fields; @@ -827,6 +846,11 @@ class EditableFormField extends DataObject if ($this->ExtraClass) { $field->addExtraClass($this->ExtraClass); } + + // if this field has a placeholder + if ($this->Placeholder) { + $field->setAttribute('placeholder', $this->Placeholder); + } } /** diff --git a/code/model/editableformfields/EditableFormHeading.php b/code/model/editableformfields/EditableFormHeading.php old mode 100755 new mode 100644 diff --git a/code/model/editableformfields/EditableNumericField.php b/code/model/editableformfields/EditableNumericField.php index 024f771..c2a1334 100755 --- a/code/model/editableformfields/EditableNumericField.php +++ b/code/model/editableformfields/EditableNumericField.php @@ -14,10 +14,11 @@ class EditableNumericField extends EditableFormField private static $plural_name = 'Numeric Fields'; + private static $has_placeholder = true; + private static $db = array( 'MinValue' => 'Int', - 'MaxValue' => 'Int', - 'Placeholder' => 'Varchar(255)' + 'MaxValue' => 'Int' ); public function getSetsOwnError() @@ -25,21 +26,6 @@ class EditableNumericField extends EditableFormField return true; } - public function getCMSFields() - { - $this->beforeUpdateCMSFields(function ($fields) { - $fields->addFieldToTab( - 'Root.Main', - TextField::create( - 'Placeholder', - _t('EditableTextField.PLACEHOLDER', 'Placeholder') - ) - ); - }); - - return parent::getCMSFields(); - } - /** * @return NumericField */ @@ -85,9 +71,5 @@ class EditableNumericField extends EditableFormField if ($this->MaxValue) { $field->setAttribute('data-rule-max', $this->MaxValue); } - - if ($this->Placeholder) { - $field->setAttribute('placeholder', $this->Placeholder); - } } } diff --git a/code/model/editableformfields/EditableTextField.php b/code/model/editableformfields/EditableTextField.php old mode 100755 new mode 100644 index 4983a64..b518446 --- a/code/model/editableformfields/EditableTextField.php +++ b/code/model/editableformfields/EditableTextField.php @@ -14,6 +14,8 @@ class EditableTextField extends EditableFormField private static $plural_name = 'Text Fields'; + private static $has_placeholder = true; + private static $autocomplete_options = array( 'off' => 'Off', 'on' => 'On', @@ -50,7 +52,6 @@ class EditableTextField extends EditableFormField 'MinLength' => 'Int', 'MaxLength' => 'Int', 'Rows' => 'Int(1)', - 'Placeholder' => 'Varchar(255)', 'Autocomplete' => 'Varchar(255)' ); @@ -72,14 +73,6 @@ class EditableTextField extends EditableFormField )) ); - $fields->addFieldToTab( - 'Root.Main', - TextField::create( - 'Placeholder', - _t('EditableTextField.PLACEHOLDER', 'Placeholder') - ) - ); - $fields->addFieldToTab( 'Root.Main', DropdownField::create( @@ -159,10 +152,6 @@ class EditableTextField extends EditableFormField $field->setAttribute('data-rule-maxlength', intval($this->MaxLength)); } - if ($this->Placeholder) { - $field->setAttribute('placeholder', $this->Placeholder); - } - if ($this->Autocomplete) { $field->setAttribute('autocomplete', $this->Autocomplete); } diff --git a/code/tasks/UserFormsUpgradeService.php b/code/tasks/UserFormsUpgradeService.php index 77f20de..eccda2f 100644 --- a/code/tasks/UserFormsUpgradeService.php +++ b/code/tasks/UserFormsUpgradeService.php @@ -131,6 +131,7 @@ class UserFormsUpgradeService // - MinLength (EditableTextField) // - MaxLength (EditableTextField) // - Rows (EditableTextField) + // - Placeholder (EditableTextField / EditableEmailField / EditableNumericField) $customSettings = $field->CustomSettings ? unserialize($field->CustomSettings) @@ -142,6 +143,11 @@ class UserFormsUpgradeService } $field->migrateSettings($customSettings); + + if ($field->config()->has_placeholder) { + $this->migratePlaceholder($field, $field->ClassName); + } + $field->write(); } @@ -224,4 +230,62 @@ class UserFormsUpgradeService { return $this->quiet; } + + + /** + * Migrate Placeholder data from field specific table to the EditableFormField table + * + * @param EditableFormField $field + * @param string $tableName + */ + private function migratePlaceholder($field, $tableName) + { + // Migrate Placeholder setting from $tableName table to EditableFormField table + if ($field->Placeholder) { + return; + } + // Check if draft table exists + if (!DB::get_schema()->hasTable($tableName)) { + // Check if _obsolete_ draft table exists + $tableName = '_obsolete_' . $tableName; + if (!DB::get_schema()->hasTable($tableName)) { + return; + } + } + // Check if old Placeholder column exists + if (!DB::get_schema()->hasField($tableName, 'Placeholder')) { + return; + } + // Fetch existing draft Placeholder value + $query = "SELECT \"Placeholder\" FROM \"$tableName\" WHERE \"ID\" = '$field->ID'"; + $draftPlaceholder = DB::query($query)->value(); + + if (!$draftPlaceholder) { + return; + } + // Update draft Placeholder value + DB::prepared_query( + "UPDATE \"EditableFormField\" SET \"Placeholder\" = ? WHERE \"ID\" = ?", + array($draftPlaceholder, $field->ID) + ); + + $livePlaceholder = $draftPlaceholder; + + // Check if live table exists + $tableName = $tableName . '_Live'; + if (DB::get_schema()->hasTable($tableName)) { + // Fetch existing live Placeholder value + $query = "SELECT \"Placeholder\" FROM \"$tableName\" WHERE \"ID\" = '" . $field->ID . "'"; + $livePlaceholder = DB::query($query)->value(); + if (!$livePlaceholder) { + $livePlaceholder = $draftPlaceholder; + } + } + + // Update live Placeholder value + DB::prepared_query( + "UPDATE \"EditableFormField_Live\" SET \"Placeholder\" = ? WHERE \"ID\" = ?", + array($draftPlaceholder, $field->ID) + ); + } } diff --git a/lang/de_DE.yml b/lang/de_DE.yml index 30eda7b..33bef6c 100644 --- a/lang/de_DE.yml +++ b/lang/de_DE.yml @@ -64,6 +64,7 @@ de_DE: NOTBLANK: 'Nicht leer' NOTVALUE: 'Kein Wert' OPTIONS: Optionen + PLACEHOLDER: Platzhalter PLURALNAME: 'Editierbare Formularfelder' REQUIRED: 'Pflichtfeld?' RIGHTTITLE: 'Titel rechts' @@ -111,7 +112,6 @@ de_DE: AUTOCOMPLETE: 'Automatisch vervollständigen' AUTOCOMPLETE_DESCRIPTION: 'Unterstützte Browser versuchen, dieses Feld automatisch mit den Benutzerinformationen zu füllen, verwenden, um den gefüllten Wert festzulegen' NUMBERROWS: 'Anzahl der Zeilen' - PLACEHOLDER: Platzhalter PLURALNAME: Textfelder SINGULARNAME: Textfeld TEXTLENGTH: Textlänge diff --git a/lang/en.yml b/lang/en.yml index baba2a6..883346f 100644 --- a/lang/en.yml +++ b/lang/en.yml @@ -83,6 +83,7 @@ en: NOTBLANK: 'Not Blank' NOTVALUE: 'Not Value' OPTIONS: Options + PLACEHOLDER: Placeholder PLURALNAME: 'Editable Form Fields' REQUIRED: 'Is this field Required?' REQUIRED_DESCRIPTION: 'Please note that conditional fields can''t be required' @@ -144,7 +145,6 @@ en: AUTOCOMPLETE_DESCRIPTION: 'Supported browsers will attempt to populate this field automatically with the users information, use to set the value populated' NUMBERROWS: 'Number of rows' NUMBERROWS_DESCRIPTION: 'Fields with more than one row will be generated as a textarea' - PLACEHOLDER: Placeholder PLURALNAME: 'Text Fields' RANGE_TO: to SINGULARNAME: 'Text Field' diff --git a/lang/eo.yml b/lang/eo.yml index fcb117e..0ffd070 100644 --- a/lang/eo.yml +++ b/lang/eo.yml @@ -83,6 +83,7 @@ eo: NOTBLANK: 'Ne vaka' NOTVALUE: 'Ne valoro' OPTIONS: Agordoj + PLACEHOLDER: Lokokupilo PLURALNAME: 'Redakteblaj formularaj kampoj' REQUIRED: 'Ĉu ĉi tiu kampo estas nepra?' REQUIRED_DESCRIPTION: 'Bonvolu noti ke kondiĉaj kampoj ne povas esti nepraj' @@ -142,7 +143,6 @@ eo: EditableTextField: NUMBERROWS: 'Nombro da vicoj' NUMBERROWS_DESCRIPTION: 'Kampoj kun pli ol unu vico generiĝos kiel tekstareo' - PLACEHOLDER: Lokokupilo PLURALNAME: 'Tekstaj kampoj' RANGE_TO: al SINGULARNAME: 'Teksta kampo' diff --git a/lang/fi_FI.yml b/lang/fi_FI.yml index 02d1945..dcce7dd 100644 --- a/lang/fi_FI.yml +++ b/lang/fi_FI.yml @@ -83,6 +83,7 @@ fi_FI: NOTBLANK: 'Ei ole tyhjä' NOTVALUE: 'Ei ole sama kuin' OPTIONS: Valinnat + PLACEHOLDER: Opastusteksti PLURALNAME: 'Muokattavat lomakekentät' REQUIRED: 'Onko tämä kenttä pakollinen?' REQUIRED_DESCRIPTION: 'Huomioithan, että ehdolliset kentät eivät voi olla pakollisia' @@ -142,7 +143,6 @@ fi_FI: EditableTextField: NUMBERROWS: 'Rivien määrä' NUMBERROWS_DESCRIPTION: 'Kenttät, joissa on enemmän kuin yksi rivi, luodaan tekstialueena.' - PLACEHOLDER: Opastusteksti PLURALNAME: Tekstikentät RANGE_TO: – SINGULARNAME: Tekstikenttä diff --git a/lang/it.yml b/lang/it.yml index a6e9c4c..8a2647d 100644 --- a/lang/it.yml +++ b/lang/it.yml @@ -83,6 +83,7 @@ it: NOTBLANK: 'Non vuoto' NOTVALUE: 'Non valore' OPTIONS: Opzioni + PLACEHOLDER: Segnaposto PLURALNAME: 'Campi modulo modificabili' REQUIRED: 'Questo campo è obbligatorio?' REQUIRED_DESCRIPTION: 'Prego nota che i campi condizionali non possono essere obbligatori' @@ -144,7 +145,6 @@ it: AUTOCOMPLETE_DESCRIPTION: 'I browser supportati cercheranno di popolare automaticamente questo campo con l'informazione agli utenti, usare per impostare il valore popolata' NUMBERROWS: 'Numero di righe' NUMBERROWS_DESCRIPTION: 'Campi con più di una riga verranno generati come area testo' - PLACEHOLDER: Segnaposto PLURALNAME: 'Campi testo' RANGE_TO: a SINGULARNAME: 'Campo testo' diff --git a/lang/sk.yml b/lang/sk.yml index d42a955..be194a3 100644 --- a/lang/sk.yml +++ b/lang/sk.yml @@ -82,6 +82,7 @@ sk: NOTBLANK: Vyplnené NOTVALUE: 'Nie zadanú hodnotu' OPTIONS: Voľba/možnosť + PLACEHOLDER: 'Zástupná/Ukážková hodnota (placeholder)' PLURALNAME: 'Formulárové polia' REQUIRED: 'Je pole povinné/vyžadované?' REQUIRED_DESCRIPTION: 'Všimnite si prosím, že podmienené polia nemôžu byť vyžadované.' @@ -138,7 +139,6 @@ sk: EditableTextField: NUMBERROWS: 'Počet riadkov' NUMBERROWS_DESCRIPTION: 'Políčka s viac ako jedným riadkom sú generované ako textarea.' - PLACEHOLDER: 'Zástupná/Ukážková hodnota (placeholder)' PLURALNAME: 'Textové polia' RANGE_TO: do SINGULARNAME: 'Textové pole'