public function getFrontEndFormValidator($flexi) { $validator = new RequiredFields(); foreach ($flexi->FlexiFormFields()->filter('Required', true) as $field) { $validator->addRequiredField($field->SafeName()); } return $validator; }
static function get_edit_fields($extraFields = null) { $fields = new FieldSet(new TextField('FirstName', _t('Member.FIRSTNAME', 'First Name')), new TextField('Surname', _t('Member.SURNAME', 'Surname')), new EmailField('Email', _t('Member.EMAIL', 'Email')), new ConfirmedPasswordField('Password', _t('Member.db_Password', 'Password') . ' *')); $requiredFields = new RequiredFields('FirstName', 'Surname', 'Email', 'Password'); if ($extraFields) { foreach ($extraFields as $name => $title) { $fields->push(new TextField($name, $title)); $requiredFields->addRequiredField($name); } } return array($fields, $requiredFields); }
public function __construct($controller, $product, $name = "AddItemForm") { $productID = $product ? $product->ID : 0; $fields = FieldList::create(HiddenField::create('ProductID')->setValue($productID)); $actions = FieldList::create(FormAction::create('doAddItemToCart', _t('Commerce.AddToCart', 'Add to Cart'))->addExtraClass('btn')); $requirements = new RequiredFields(array("Quantity")); // If product colour customisations are set, add them to the item form if ($product && $product->Customisations()->exists()) { foreach ($product->Customisations() as $customisation) { $field = $customisation->Field(); $fields->add($field); // Check if field required if ($customisation->Required) { $requirements->addRequiredField($field->getName()); } } } $quantity_fields = QuantityField::create('Quantity', _t('Commerce.CartQty', 'Qty'))->setValue('1')->addExtraClass('commerce-additem-quantity'); // Add quantity, so it appears at the end of the fields $fields->add($quantity_fields); parent::__construct($controller, $name, $fields, $actions, $requirements); }
/** * Get the required form fields for this form. Includes building the jQuery * validate structure * * @return RequiredFields */ public function getRequiredFields() { $required = new RequiredFields(); $rules = array(); $validation = array(); $messages = array(); $onfocusout = ""; $hidelabels = ""; if ($this->Fields()) { foreach ($this->Fields() as $field) { if (!in_array($field->ClassName, array('EditableEmailField', 'EditableNumericField'))) { $messages[$field->Name] = $field->getErrorMessage()->HTML(); } if ($field->Required) { $rules[$field->Name] = array_merge(array('required' => true), $field->getValidation()); $required->addRequiredField($field->Name); } } } // Enable live validation if ($this->EnableLiveValidation) { $onfocusout = ", onfocusout : function(element) { this.element(element); }"; } // Hide field labels (use HTML5 placeholder instead) if ($this->HideFieldLabels) { $hidelabels = '$("#Form_Form label.left").each(function(){$("#"+$(this).attr("for")).attr("placeholder",$(this).text());$(this).remove();});Placeholders.init();'; } // Set the Form Name $rules = $this->array2json($rules); $messages = $this->array2json($messages); // set the custom script for this form Requirements::customScript(<<<JS \t\t\t(function(\$) { \t\t\t\t\$(document).ready(function() { \t\t\t\t\t\$("#Form_Form").validate({ \t\t\t\t\t\tignore: ':hidden', \t\t\t\t\t\terrorClass: "required",\t \t\t\t\t\t\terrorPlacement: function(error, element) { \t\t\t\t\t\t\tif(element.is(":radio")) { \t\t\t\t\t\t\t\terror.insertAfter(element.closest("ul")); \t\t\t\t\t\t\t} else { \t\t\t\t\t\t\t\terror.insertAfter(element); \t\t\t\t\t\t\t} \t\t\t\t\t\t}, \t\t\t\t\t\tmessages: \t\t\t\t\t\t\t{$messages} \t\t\t\t\t\t, \t\t\t\t\t\trules: \t\t\t\t\t\t \t{$rules} \t\t\t\t\t\t{$onfocusout} \t\t\t\t\t}); \t\t\t\t\t{$hidelabels} \t\t\t\t}); \t\t\t})(jQuery); JS , 'UserFormsValidation'); $this->extend('updateRequiredFields', $required); return $required; }
public function RenderForm() { if ($form_fields = $this->FormFields()) { $fields = new FieldList(); if ($form_error = Session::get('FormError')) { Session::set('FormError', false); $fields->push(new LiteralField('form_error', '<p class="form-error">' . $form_error . '</p>')); } $validator = new RequiredFields(); $utils = new FormUtilities(); $fieldGroups = array(); foreach ($form_fields as $FieldName => $data) { if ($data['Value'] && is_string($data['Value'])) { $method_home = method_exists($this, $data['Value']) ? $this : (method_exists($utils, $data['Value']) ? $utils : false); $data['Value'] = $method_home ? $method_home->{$data}['Value']() : $data['Value']; } $Label = $data['Group'] ? '' : ($data['Label'] ? $data['Label'] : FormField::name_to_label($FieldName)); $field = new $data['FieldType']($FieldName, $Label, $data['Value'] ? $data['Value'] : null, $data['Default'] ? $data['Default'] : null); if ($data['ExtraClass']) { $field->addExtraClass($data['ExtraClass']); } if ($data['Config'] && is_array($data['Config'])) { foreach ($data['Config'] as $key => $value) { $field->setConfig($key, $value); } } if ($data['Required']) { $validator->addRequiredField($FieldName); $field->addExtraClass('required'); } if ($data['Group']) { if (!isset(${$data['Group']})) { ${$data['Group']} = new FieldGroup($data['Group']); $fields->push(${$data['Group']}); ${$data['Group']}->FieldCount = 0; $fieldGroups[] = ${$data['Group']}; } $field->setRightTitle($data['Label'] ? $data['Label'] : FormField::name_to_label($FieldName)); ${$data['Group']}->push($field); ${$data['Group']}->FieldCount++; } else { $fields->push($field); } } // update the class on the field groups to properly display the grouped fields horizontally foreach ($fieldGroups as $fieldGroup) { $fieldGroup->addExtraClass('stacked col' . $fieldGroup->FieldCount); } $submitText = "Submit"; if ($config = $this->FormConfig()) { $submitText = $config['submitText'] ? $config['submitText'] : $submitText; } $actions = new FieldList(new FormAction('SubmitForm', $submitText)); $form = new Form($this, 'RenderForm', $fields, $actions, $validator); if ($defaults = Session::get("FormInfo.Form_RenderForm.data")) { $form->loadDataFrom($defaults); Session::set("FormInfo.Form_RenderForm.data", false); } return $form; } return false; }
/** * Get the required form fields for this form. Includes building the jQuery * validate structure * * @return RequiredFields */ public function getRequiredFields() { $required = new RequiredFields(); $rules = array(); $validation = array(); $messages = array(); if ($this->Fields()) { foreach ($this->Fields() as $field) { $messages[$field->Name] = $field->getErrorMessage()->HTML(); if ($field->Required && $field->CustomRules()->Count() == 0) { $rules[$field->Name] = array_merge(array('required' => true), $field->getValidation()); $required->addRequiredField($field->Name); } } } // Set the Form Name $rules = $this->array2json($rules); $messages = $this->array2json($messages); // set the custom script for this form Requirements::customScript(<<<JS \t\t\t(function(\$) { \t\t\t\t\$(document).ready(function() { \t\t\t\t\t\$("#Form_Form").validate({ \t\t\t\t\t\tignore: [':hidden'], \t\t\t\t\t\terrorClass: "required",\t \t\t\t\t\t\terrorPlacement: function(error, element) { \t\t\t\t\t\t\tif(element.is(":radio")) { \t\t\t\t\t\t\t\terror.insertAfter(element.closest("ul")); \t\t\t\t\t\t\t} else { \t\t\t\t\t\t\t\terror.insertAfter(element); \t\t\t\t\t\t\t} \t\t\t\t\t\t}, \t\t\t\t\t\tmessages: \t\t\t\t\t\t\t{$messages} \t\t\t\t\t\t, \t\t\t\t\t\trules: \t\t\t\t\t\t \t{$rules} \t\t\t\t\t}); \t\t\t\t}); \t\t\t})(jQuery); JS , 'UserFormsValidation'); $this->extend('updateRequiredFields', $required); return $required; }
/** * Get the required form fields for this form. Includes building the jQuery * validate structure * * @return RequiredFields */ function getRequiredFields() { $required = new RequiredFields(); $rules = array(); $validation = array(); $messages = array(); if ($this->Fields()) { foreach ($this->Fields() as $field) { $messages[$field->Name] = $field->getErrorMessage()->HTML(); if ($field->Required) { $rules[$field->Name] = array_merge(array('required' => true), $field->getValidation()); $required->addRequiredField($field->Name); } } } // Set the Form Name $rules = $this->array2json($rules); $messages = $this->array2json($messages); // set the custom script for this form Requirements::customScript(<<<JS \t\t\t(function(\$) { \t\t\t\t\$(document).ready(function() { \t\t\t\t\t\$("#Form_Form").validate({ \t\t\t\t\t\terrorClass: "required",\t \t\t\t\t\t\tmessages: \t\t\t\t\t\t\t{$messages} \t\t\t\t\t\t, \t\t\t\t\t\trules: \t\t\t\t\t\t \t{$rules} \t\t\t\t\t}); \t\t\t\t}); \t\t\t})(jQuery); JS , 'UserFormsValidation'); $this->extend('updateRequiredFields', $required); return $required; }
public function testFieldIsRequired() { //get the validator $requiredFields = new RequiredFields($fieldNames = array('Title', 'Content', 'Image', 'AnotherField')); foreach ($fieldNames as $field) { $this->assertTrue($requiredFields->fieldIsRequired($field), sprintf("Failed to find '%s' field in required list", $field)); } //add a new field $requiredFields->addRequiredField('ExtraField1'); //check the new field is required $this->assertTrue($requiredFields->fieldIsRequired('ExtraField1'), "Failed to find 'ExtraField1' field in required list after adding it to the list"); //check a non-existant field returns false $this->assertFalse($requiredFields->fieldIsRequired('DoesntExist'), "Unexpectedly returned true for a non-existant field"); }
public function EnquiryForm() { if (!Email::validEmailAddress($this->EmailTo) || !Email::validEmailAddress($this->EmailFrom)) { return false; } if (!$this->EmailSubject) { $this->EmailSubject = 'Website Enquiry'; } $elements = $this->EnquiryFormFields(); if ($elements->count() == 0) { return false; } /* Build the fieldlist */ $fields = new FieldList(); $validator = new RequiredFields(); $jsValidator = array(); foreach ($elements as $el) { $key = $this->keyGen($el->FieldName, $el->SortOrder); $field = false; $type = false; if ($el->FieldType == 'Text') { if ($el->FieldOptions == 1) { $field = new TextField($key, htmlspecialchars($el->FieldName)); } else { $field = new TextareaField($key, htmlspecialchars($el->FieldName)); $field->setRows($el->FieldOptions); } } else { if ($el->FieldType == 'Email') { $field = new EmailField($key, htmlspecialchars($el->FieldName)); } else { if ($el->FieldType == 'Select') { $options = preg_split('/\\n\\r?/', $el->FieldOptions, -1, PREG_SPLIT_NO_EMPTY); if (count($options) > 0) { $tmp = array(); foreach ($options as $o) { $tmp[trim($o)] = trim($o); } $field = new DropdownField($key, htmlspecialchars($el->FieldName), $tmp); $field->setEmptyString('[ Please Select ]'); } } else { if ($el->FieldType == 'Checkbox') { $options = preg_split('/\\n\\r?/', $el->FieldOptions, -1, PREG_SPLIT_NO_EMPTY); if (count($options) > 0) { $tmp = array(); foreach ($options as $o) { $tmp[trim($o)] = trim($o); } $field = new CheckboxSetField($key, htmlspecialchars($el->FieldName), $tmp); } } else { if ($el->FieldType == 'Radio') { $options = preg_split('/\\n\\r?/', $el->FieldOptions, -1, PREG_SPLIT_NO_EMPTY); if (count($options) > 0) { $tmp = array(); foreach ($options as $o) { $tmp[trim($o)] = trim($o); } $field = new OptionsetField($key, htmlspecialchars($el->FieldName), $tmp); } } else { if ($el->FieldType == 'Header') { if ($el->FieldOptions) { $field = new LiteralField(htmlspecialchars($el->FieldName), '<h4>' . htmlspecialchars($el->FieldName) . '</h4> <p class="note">' . nl2br(htmlspecialchars($el->FieldOptions)) . '</p>'); } else { $field = new HeaderField(htmlspecialchars($el->FieldName), 4); } } else { if ($el->FieldType == 'Note') { if ($el->FieldOptions) { $field = new LiteralField(htmlspecialchars($el->FieldName), '<p class="note">' . nl2br(htmlspecialchars($el->FieldOptions)) . '</p>'); } else { $field = new LiteralField(htmlspecialchars($el->FieldName), '<p class="note">' . htmlspecialchars($el->FieldName) . '</p>'); } } } } } } } } if ($field) { if ($el->RequiredField == 1) { $field->addExtraClass('required'); /* Add "Required" next to field" */ $validator->addRequiredField($key); $jsValidator[$key] = $el->FieldType; } if ($el->PlaceholderText) { $field->setAttribute('placeholder', $el->PlaceholderText); } $fields->push($field); } } if ($this->AddCaptcha) { $label = $this->CaptchaLabel; $field = new CaptchaField('CaptchaImage', $label); $field->addExtraClass('required'); $validator->addRequiredField('CaptchaImage'); $jsValidator['CaptchaImage'] = 'Text'; if ($this->CaptchaHelp) { $field->setRightTitle('<span id="CaptchaHelp">' . htmlspecialchars($this->CaptchaHelp) . '</span>'); } $fields->push($field); } $actions = new FieldList(new FormAction('SendEnquiryForm', $this->EmailSubmitButtonText)); Requirements::customScript("var EnquiryFormValidator=" . json_encode($jsValidator) . ';'); Requirements::javascript(basename(dirname(dirname(__FILE__))) . "/templates/javascript/EnquiryForm.js"); $form = new Form($this, 'EnquiryForm', $fields, $actions, $validator); return $form; }