From aa67b9da2fa061ebe129913c2eed4a588cada683 Mon Sep 17 00:00:00 2001 From: Will Rossiter Date: Sat, 14 Apr 2012 23:03:43 +1200 Subject: [PATCH] FEATURE: allow users to enter extra classes on form fields via the cms. PATCH via TotalNet. Fixes: #5791 --- code/model/UserDefinedForm.php | 7 +++ code/model/formfields/EditableFormField.php | 58 ++++++++++++++++++--- 2 files changed, 59 insertions(+), 6 deletions(-) diff --git a/code/model/UserDefinedForm.php b/code/model/UserDefinedForm.php index 4fabcd3..b7f950e 100755 --- a/code/model/UserDefinedForm.php +++ b/code/model/UserDefinedForm.php @@ -395,6 +395,13 @@ class UserDefinedForm_Controller extends Page_Controller { } } + // if this field has an extra class + if($editableField->getSetting('ExtraClass')) { + $field->addExtraClass(Convert::raw2att( + $editableField->getSetting('ExtraClass') + )); + } + // set the values passed by the url to the field $request = $this->getRequest(); $value = Convert::raw2att($request->getVar($field->name)); diff --git a/code/model/formfields/EditableFormField.php b/code/model/formfields/EditableFormField.php index f61503a..3dfd8cb 100755 --- a/code/model/formfields/EditableFormField.php +++ b/code/model/formfields/EditableFormField.php @@ -10,6 +10,13 @@ class EditableFormField extends DataObject { static $default_sort = "Sort"; + /** + * A list of CSS classes that can be added + * + * @var array + */ + public static $allowed_css = array(); + static $db = array( "Name" => "Varchar", "Title" => "Varchar(255)", @@ -143,7 +150,20 @@ class EditableFormField extends DataObject { $this->setSettings($settings); } - + + /** + * Set the allowed css classes for the extraClass custom setting + * + * @param array The permissible CSS classes to add + */ + public function setAllowedCss(array $allowed) { + if (is_array($allowed_css)){ + foreach ($allowed_css as $k => $v){ + self::$allowed_css[$k] = (!is_null($v)) ? $v : $k; + } + } + } + /** * Return just one custom setting or empty string if it does * not exist @@ -342,12 +362,38 @@ class EditableFormField extends DataObject { * @return FieldSet */ public function getFieldConfiguration() { + $extraClass = ($this->getSetting('ExtraClass')) ? $this->getSetting('ExtraClass') : ''; + + if (is_array(self::$allowed_css) && !empty(self::$allowed_css)) { + foreach(self::$allowed_css as $k => $v) { + if (!is_array($v)) $cssList[$k]=$v; + elseif ($k == $this->ClassName()) $cssList = array_merge($cssList, $v); + } + + $ec = new DropdownField( + $this->getSettingName('ExtraClass'), + _t('EditableFormField.EXTRACLASSA', 'Extra Styling/Layout'), + $cssList, $extraClass + ); + + } + else { + $ec = new TextField( + $this->getSettingName('ExtraClass'), + _t('EditableFormField.EXTRACLASSB', 'Extra css Class - separate multiples with a space'), + $extraClass + ); + } + + $right = new TextField( + $this->getSettingName('RightTitle'), + _t('EditableFormField.RIGHTTITLE', 'Right Title'), + $this->getSetting('RightTitle') + ); + return new FieldSet( - new TextField( - $this->getSettingName('RightTitle'), - _t('EditableFormField.RIGHTTITLE', 'Right Title'), - $this->getSetting('RightTitle') - ) + $ec, + $right ); }