/** * Checks all form rules * * @return null */ public function validate() { $attribs = $this->formHandler->getAttributes(); foreach ($attribs as $key => $attributes) { if (!array_key_exists($key, $attribs)) { throw new Exception("The field '{$key}' does not exists!"); } $label = array_key_exists('label', array_keys($this->options)) ? $attributes["label"] : $key; $all_attribs = array(); foreach ($attributes as $attr) { $all_attribs[$attr->getName()] = $attr->getValue(); } foreach ($attributes as $name => $attr) { $name = $attr->getName(); $value = $attr->getValue(); $attrib = $this->formHandler->getAttribute($label, "value"); $form_value = !is_null($attrib) ? $attrib->getValue() : null; switch ($name) { case 'required': $validator = new Zend_Validate_NotEmpty(); break; case 'minlength': $validator = new Zend_Validate_StringLength(array('min' => $value)); break; case 'maxlength': $validator = new Zend_Validate_StringLength(array('max' => $value)); break; case 'type': switch ($value) { case 'number': $validator = new Zend_Validate_Digits(); break; case 'email': $validator = new Zend_Validate_EmailAddress(); break; case 'date': $validator = new Zend_Validate_Date(); break; case 'url': $validator = new Drone_Validate_Uri(); break; } break; case 'min': if (array_key_exists('type', $all_attribs) && in_array($all_attribs['type'], array('number', 'range'))) { $validator = new Drone_Validate_GreaterThan(array('min' => $value, 'inclusive' => true)); } else { throw new Exception("The input type must be 'range' or 'number'"); } break; case 'max': if (array_key_exists('type', $all_attribs) && in_array($all_attribs['type'], array('number', 'range'))) { $validator = new Drone_Validate_LessThan(array('max' => $value, 'inclusive' => true)); } else { throw new Exception("The input type must be 'range' or 'number'"); } break; case 'step': $baseValue = array_key_exists('min', $all_attribs) ? $all_attribs['min'] : 0; if (array_key_exists('type', $all_attribs) && in_array($all_attribs['type'], array('range'))) { $validator = new Drone_Validate_Step(array('baseValue' => $baseValue, 'step' => $value)); } else { throw new Exception("The input type must be 'range'"); } break; } if (in_array($name, array('required', 'digits', 'minlength', 'maxlength', 'type', 'min', 'max', 'date', 'step'))) { $validator->setTranslator($this->translator); if (gettype($form_value) == 'array') { foreach ($form_value as $val) { $valid = $validator->isValid($val); $this->setValid($valid); if (!$valid) { if (!in_array($key, array_keys($this->messages))) { $this->messages[$key] = array(); } $this->messages[$key] = array_merge($this->messages[$key], $validator->getMessages()); } } } else { $valid = $validator->isValid($form_value); $this->setValid($valid); if (!$valid) { if (!in_array($key, array_keys($this->messages))) { $this->messages[$key] = array(); } $this->messages[$key] = array_merge($this->messages[$key], $validator->getMessages()); } } } } } foreach ($this->options as $key => $options) { if (isset($options["validators"]) and is_array($options["validators"])) { $attrib = $this->formHandler->getAttribute($key, "required"); $isRequired = !is_null($attrib) ? $attrib = $attrib->getValue() : false; $validator = new Zend_Validate_NotEmpty(); $validator->setTranslator($this->translator); $value = $this->formHandler->getAttribute($key, "value")->getValue(); if ($isRequired || $validator->isValid($value)) { foreach ($options["validators"] as $class => $params) { $className = 'Zend_Validate_' . $class; if (!class_exists($className)) { throw new Exception("The class '{$className}' does not exists"); } $validator = new $className($params); $form_value = $this->formHandler->getAttribute($key, "value")->getValue(); $validator->setTranslator($this->translator); $valid = $validator->isValid($form_value); $this->setValid($valid); if (!$valid) { if (!in_array($key, array_keys($this->messages))) { $this->messages[$key] = array(); } $this->messages[$key] = array_merge($this->messages[$key], $validator->getMessages()); } } } } } }