javascriptValidationHandler. * Set with Validator::set_javascript_validation_handler(); * @var string */ protected static $javascript_validation_handler = "prototype"; /** * Handler for javascript validation. Can be "prototype" or "none". * @var string */ protected $javascriptValidationHandler = null; /** * Call this function to set the javascript validation handler for all valdiation on your site. * This could be called from _config.php to set site-wide javascript validation, or from Controller::init() * to affect only the front-end site. * Use instance method {@link setJavascriptValidationHandler()} to * only set handler for a specific form instance. * * @param $handler A string representing the handler to use: 'prototype' or 'none'. * @todo Add 'jquery' as a handler option. */ public static function set_javascript_validation_handler($handler) { if($handler == 'prototype' || $handler == 'none') { self::$javascript_validation_handler = $handler; } else { user_error("Validator::setJavascriptValidationHandler() passed bad handler '$handler'", E_USER_WARNING); } } /** * Returns global validation handler used for all forms by default, * unless overwritten by {@link setJavascriptValidationHandler()}. * * @return string */ public static function get_javascript_validator_handler() { return self::$javascript_validation_handler; } /** * Set JavaScript validation for this validator. * Use static method {@link set_javascript_validation_handler()} * to set handlers globally. * * @param string $handler */ public function setJavascriptValidationHandler($handler) { if($handler == 'prototype' || $handler == 'none') { $this->javascriptValidationHandler = $handler; } else { user_error("Validator::setJavascriptValidationHandler() passed bad handler '$handler'", E_USER_WARNING); } } /** * Gets the current javascript validation handler for this form. * If not set, falls back to the global static {@link self::$javascript_validation_handler}. * * @return string */ public function getJavascriptValidationHandler() { return ($this->javascriptValidationHandler) ? $this->javascriptValidationHandler : self::$javascript_validation_handler; } /** * @param Form $form */ function setForm($form) { $this->form = $form; } /** * @return array Errors (if any) */ function validate(){ $this->errors = null; $this->php($this->form->getData()); return $this->errors; } /** * Callback to register an error on a field (Called from implementations of {@link FormField::validate}) * * @param $fieldName name of the field * @param $message error message to display * @param $messageType optional parameter, gets loaded into the HTML class attribute in the rendered output. See {@link getErrors()} for details. */ function validationError($fieldName, $message, $messageType='') { $this->errors[] = array( 'fieldName' => $fieldName, 'message' => $message, 'messageType' => $messageType, ); } /** * @deprecated 2.4 Use Validator->getErrors() and custom code */ function showError() { Deprecation::notice('2.4', 'Use Validator->getErrors() and custom code instead.'); Debug::show($this->errors); } /** * @deprecated 2.4 Use custom code */ function getCombinedError(){ Deprecation::notice('2.4', 'Use custom code instead.'); if($this->errors) { foreach($this->errors as $error){ $ret['message'] .= $error['message']."
"; $ret['messageType'] .= $error['messageType']."
"; } return $ret; } } /** * @deprecated 2.4 Use getErrors() */ function getError(){ Deprecation::notice('2.4', 'Use getErrors() instead.'); return $this->getErrors(); } /** * Returns all errors found by a previous call to {@link validate()}. * The array contains the following keys for each error: * - 'fieldName': the name of the FormField instance * - 'message': Validation message (optionally localized) * - 'messageType': Arbitrary type of the message which is rendered as a CSS class in the FormField template, * e.g. . Usually "bad|message|validation|required", which renders differently * if sapphire/css/Form.css is included. * * @return array */ function getErrors() { return $this->errors; } function requireField($fieldName, $data) { if(is_array($data[$fieldName]) && count($data[$fieldName])) { foreach($data[$fieldName] as $componentkey => $componentVal){ if(!strlen($componentVal)) $this->validationError($fieldName, "$fieldName $componentkey is required.", "required"); } }else if(!strlen($data[$fieldName])) $this->validationError($fieldName, "$fieldName is required.", "required"); } function includeJavascriptValidation() { if($this->getJavascriptValidationHandler() == 'prototype') { Requirements::javascript(SAPPHIRE_DIR . "/thirdparty/prototype/prototype.js"); Requirements::javascript(SAPPHIRE_DIR . "/thirdparty/behaviour/behaviour.js"); Requirements::javascript(SAPPHIRE_DIR . "/javascript/prototype_improvements.js"); Requirements::add_i18n_javascript(SAPPHIRE_DIR . '/javascript/lang'); Requirements::javascript(SAPPHIRE_DIR . "/javascript/Validator.js"); $code = $this->javascript(); $formID = $this->form->FormName(); $js = <<form) $this->form->jsValidationIncluded = true; } } /** * Returns true if the named field is "required". * Used by FormField to return a value for FormField::Required(), to do things like show *s on the form template. * By default, it always returns false. */ function fieldIsRequired($fieldName) { return false; } abstract function javascript(); abstract function php($data); } ?>