Esempio n. 1
0
 public function testFormElementRender()
 {
     $element1 = new Text("name");
     $element1->setAttributes(array('class' => 'big-input'));
     $element2 = new \Phalcon\Forms\Element\Radio('radio');
     $element2->setAttributes(array('value' => 0));
     $this->assertEquals('<input type="text" id="name" name="name" class="big-input" />', $element1->render());
     $this->assertEquals('<input type="text" id="name" name="name" class="big-input" />', (string) $element1);
     $this->assertEquals('<input type="radio" id="radio" name="radio" value="0" />', (string) $element2);
 }
Esempio n. 2
0
 protected function _setUpField($field_key, $field_params)
 {
     $js_validation = array();
     if (isset($field_params[0])) {
         $field_type = strtolower($field_params[0]);
     } else {
         $field_type = 'text';
     }
     if (isset($field_params[1])) {
         $field_options = (array) $field_params[1];
     } else {
         $field_options = array();
     }
     // Make all field options lower-case.
     $field_options_new = array();
     foreach ($field_options as $field_option_key => $field_option_value) {
         $field_options_new[strtolower($field_option_key)] = $field_option_value;
     }
     $field_options = $field_options_new;
     // Handle rename of "multiOptions" to "options".
     if (isset($field_options['multioptions'])) {
         $field_options['options'] = $field_options['multioptions'];
         unset($field_options['multioptions']);
     }
     // Save for later lookup.
     $this->fields[$field_key] = array('type' => $field_type) + $field_options;
     // Clean up array.
     if (isset($field_options['options'])) {
         $select_options = $field_options['options'];
         unset($field_options['options']);
     } else {
         $select_options = array();
     }
     if (isset($field_options['label'])) {
         $element_label = $field_options['label'];
         unset($field_options['label']);
     } else {
         $element_label = NULL;
     }
     if (isset($field_options['default'])) {
         $element_default = $field_options['default'];
         unset($field_options['default']);
     } else {
         $element_default = NULL;
     }
     if (isset($field_options['description'])) {
         unset($field_options['description']);
     }
     $element_validators = array();
     // Set up file validation options.
     if ($field_type == 'file') {
         if (!empty($field_options['maxsize']) || !empty($field_options['allowedtypes'])) {
             $validate_params = array();
             if (!empty($field_options['maxsize'])) {
                 $validate_params['maxsize'] = $field_options['maxsize'];
                 $js_validation['size'] = array('max-size' => $field_options['maxsize']);
             }
             if (!empty($field_options['allowedtypes'])) {
                 $validate_params['allowedtypes'] = $field_options['allowedtypes'];
                 $field_options['accept'] = implode(', ', $field_options['allowedtypes']);
             }
             if (empty($field_options['required']) || !$field_options['required']) {
                 $validate_params['allowEmpty'] = true;
             }
             $element_validators[] = new \Phalcon\Validation\Validator\File($validate_params);
             unset($field_options['maxsize']);
             unset($field_options['allowedtypes']);
         }
     }
     if (isset($field_options['required'])) {
         if ($field_options['required']) {
             $element_validators[] = new \Phalcon\Validation\Validator\PresenceOf(array('message' => 'This field is required.', 'cancelOnFail' => true));
             $js_validation['required'] = array();
         }
         unset($field_options['required']);
     }
     if (isset($field_options['validators'])) {
         foreach ($field_options['validators'] as $validator) {
             if (!is_string($validator)) {
                 continue;
             }
             switch (strtolower($validator)) {
                 case 'emailaddress':
                 case 'email':
                     $element_validators[] = new \Phalcon\Validation\Validator\Email(array('message' => 'This field must be a valid e-mail address.', 'allowEmpty' => true));
                     $js_validation['email'] = array();
                     break;
                 case 'webaddress':
                 case 'url':
                     $element_validators[] = new \Phalcon\Validation\Validator\Url(array('message' => 'This field must be a valid web address.', 'allowEmpty' => true));
                     $js_validation['url'] = array();
                     break;
             }
         }
         unset($field_options['validators']);
     }
     // TODO: Implement filters.
     if (isset($field_options['filters'])) {
         unset($field_options['filters']);
     }
     // Minimum and Maximum Length Validation
     if (isset($field_options['minlength']) && isset($field_options['maxlength'])) {
         $element_validators[] = new \Phalcon\Validation\Validator\StringLength(array('min' => $field_options['minlength'], 'max' => $field_options['maxlength'], 'message' => 'This field must be between ' . $field_options['minlength'] . ' and ' . $field_options['maxlength'] . ' characters.'));
         $js_validation['length'] = array('length' => $field_options['minlength'] . '-' . $field_options['maxlength']);
         unset($field_options['minlength'], $field_options['maxlength']);
     } else {
         if (isset($field_options['minlength'])) {
             $element_validators[] = new \Phalcon\Validation\Validator\StringLength(array('min' => $field_options['minlength'], 'message' => 'This field must be at least ' . $field_options['minlength'] . ' characters.'));
             $js_validation['length'] = array('length' => 'min' . $field_options['minlength']);
             unset($field_options['minlength']);
         } else {
             if (isset($field_options['maxlength'])) {
                 $element_validators[] = new \Phalcon\Validation\Validator\StringLength(array('max' => $field_options['maxlength'], 'message' => 'This field must be less than ' . $field_options['maxlength'] . ' characters.'));
                 $js_validation['length'] = array('length' => 'max' . $field_options['maxlength']);
                 unset($field_options['maxlength']);
             }
         }
     }
     // Confirmation validation (with another field).
     if (isset($field_options['confirm'])) {
         $element_validators[] = new \Phalcon\Validation\Validator\Confirmation(array('with' => $field_options['confirm']));
         $js_validation['confirmation'] = array('confirm' => $field_options['confirm']);
         unset($field_options['confirm']);
     }
     // Set up JS validation.
     if (!empty($js_validation)) {
         $field_options['data-validation'] = implode(' ', array_keys($js_validation));
         foreach ($js_validation as $js_validation_item => $js_validation_options) {
             if (!empty($js_validation_options)) {
                 foreach ($js_validation_options as $validate_key => $validate_val) {
                     $field_options['data-validation-' . $validate_key] = $validate_val;
                 }
             }
         }
     }
     // Remove internal classes not needed for render.
     unset($field_options['belongsto']);
     unset($field_options['layout']);
     // Set up element object.
     switch ($field_type) {
         case 'password':
             $element = new \Phalcon\Forms\Element\Password($field_key, $field_options);
             break;
         case 'select':
             $element = new \Phalcon\Forms\Element\Select($field_key, $select_options, $field_options);
             $validator = new \FA\Forms\Validator\SelectOptionsValidator(array('domain' => Utilities::array_keys_recursive($select_options)));
             $element->addValidator($validator);
             break;
         case 'checkbox':
             $element = new \Phalcon\Forms\Element\Check($field_key, $field_options);
             break;
         case 'checkboxes':
         case 'multicheckbox':
             $element = new \FA\Forms\Element\MultiCheckbox($field_key, $select_options, $field_options);
             $validator = new \FA\Forms\Validator\SelectOptionsValidator(array('domain' => Utilities::array_keys_recursive($select_options)));
             $element->addValidator($validator);
             break;
         case 'radio':
             $element = new \Phalcon\Forms\Element\Radio($field_key, $field_options);
             $validator = new \FA\Forms\Validator\SelectOptionsValidator(array('domain' => Utilities::array_keys_recursive($select_options)));
             $element->addValidator($validator);
             break;
         case 'textarea':
             $element = new \Phalcon\Forms\Element\TextArea($field_key, $field_options);
             break;
         case 'hidden':
             $element = new \Phalcon\Forms\Element\Hidden($field_key, $field_options);
             break;
         case 'file':
             $element = new \FA\Forms\Element\File($field_key, $field_options);
             break;
         case 'image':
             $element = new \FA\Forms\Element\Image($field_key, $field_options);
             break;
         case 'date':
             $element = new \Phalcon\Forms\Element\Date($field_key, $field_options);
             break;
         case 'unixdate':
             $element = new \FA\Forms\Element\UnixDate($field_key, $field_options);
             break;
         case 'numeric':
             $element = new \Phalcon\Forms\Element\Numeric($field_key, $field_options);
             break;
         case 'submit':
             $field_options['value'] = $element_label;
             $element_label = NULL;
             $element = new \Phalcon\Forms\Element\Submit($field_key, $field_options);
             break;
         case 'markup':
             $element = new \FA\Forms\Element\Markup($field_key, $field_options['markup'], $field_options);
             break;
         case 'captcha':
         case 'recaptcha':
             $element = new \FA\Forms\Element\Recaptcha($field_key, $field_options);
             $validator = new \FA\Forms\Validator\RecaptchaValidator();
             $element->addValidator($validator);
             break;
         case 'csrf':
             $element = new \FA\Forms\Element\Csrf($field_key, $field_options);
             $validator = new \FA\Forms\Validator\CsrfValidator();
             $element->addValidator($validator);
             break;
         case 'text':
         default:
             $element = new \Phalcon\Forms\Element\Text($field_key, $field_options);
             break;
     }
     // Set element label and defaults.
     $element->setLabel($element_label);
     $element->setDefault($element_default);
     // Set up required or min-length validators.
     if ($element_validators) {
         $element->addValidators($element_validators);
     }
     $this->add($element);
     return $this;
 }