public function hasErrors(Result $errors) { if ($errors->isValid()) { return FALSE; } foreach ($this->fields as $field) { if ($errors->hasErrors($field->getName())) { return TRUE; } } return FALSE; }
/** * Run the validation * * @param Array $values Data to validate * @param Bool $partial Partial validation? (@see `validatePartial()`) * @return Result object */ protected function _validate($values, $partial = FALSE) { $result = new Result(); if (is_object($values)) { $values = $this->prepForObject($values); } foreach ($this->rules as $key => $rules) { $value = NULL; if (array_key_exists($key, $values)) { $value = $values[$key]; } $rules = $this->setupRules($rules); foreach ($rules as $rule) { if ($partial && $rule instanceof Rule\Required && $value === NULL) { continue; } $rule->setAllValues($values); $rule_return = $rule->validate($key, $value); // Skip the rest of the rules? // e.g. Presence failed if ($rule->isFailed()) { break; } // Hard stopping rule? Record the error and move on. // e.g. Required failed if ($rule->isStopped()) { $result->addFailed($key, $rule); break; } // Passed? Move on to the next rule if ($rule_return === TRUE) { continue; } // At this point: // // 1) The rule failed (`$rule_return` === FALSE) // 2) This field is *not* required (no self::STOP) // // This means we have an incorrect optional value. Accordingly, // empty values are ok (because optional) anything else is not. if (is_string($value) && trim($value) !== '' || is_array($value) && !empty($value)) { $result->addFailed($key, $rule); } } } return $result; }
/** * Combines the results of two different model validation calls * * @param bool|ValidationResult $one FALSE (if nothing was submitted) or a * ValidationResult object. * @param bool|ValidationResult $two FALSE (if nothing was submitted) or a * ValidationResult object. * @return bool|ValidationResult $one FALSE (if nothing was submitted) or a * ValidationResult object. */ private function combineResults($one, $two) { $result = FALSE; if ($one instanceof ValidationResult) { $result = $one; if ($two instanceof ValidationResult && $two->failed()) { foreach ($two->getFailed() as $field => $rules) { foreach ($rules as $rule) { $result->addFailed($field, $rule); } } } } elseif ($two instanceof ValidationResult) { $result = $two; } return $result; }
/** * Takes a model validation result object and checks for errors on the * posted 'ee_fv_field' and returns an error message, or success message * but only if the request was an AJAX request. * * @param EllisLab\ExpressionEngine\Service\Validation\Result $result A model validation result * @return array|NULL NULL if the request was not via AJAX, otherwise an * an array with an error message or a success notification. */ protected function ajaxValidation(ValidationResult $result) { if (ee()->input->is_ajax_request()) { $field = ee()->input->post('ee_fv_field'); if ($result->hasErrors($field)) { return array('error' => $result->renderError($field)); } else { return array('success'); } } return NULL; }
public function update() { if (empty($_POST)) { ee()->functions->redirect($this->base_url); } $errors = new ValidationResult(); $templates = ee()->api->get('Template')->with('TemplateGroup')->with('TemplateRoute')->filter('site_id', ee()->config->item('site_id'))->order('TemplateRoute.order', 'asc')->order('TemplateGroup.group_name', 'asc')->order('template_name', 'asc')->all(); $submitted = ee()->input->post('routes'); $order = array_keys($submitted); foreach ($templates as $template) { $id = $template->template_id; $submitted[$id]['route'] = trim($submitted[$id]['route']); if (!$template->TemplateRoute) { $template->TemplateRoute = ee('Model')->make('TemplateRoute'); } $route = $template->TemplateRoute; if (empty($submitted[$id]['route'])) { $template->TemplateRoute = NULL; continue; } $route->route_required = $submitted[$id]['required'] != 'n'; $route->route = $submitted[$id]['route']; $route->order = array_search($id, $order); $result = $route->validate(); if ($result->isNotValid()) { foreach ($result->getFailed() as $field => $rules) { foreach ($rules as $rule) { $errors->addFailed("routes[{$id}][route]", $rule); } } } } if ($errors->isValid()) { $templates->save(); ee('CP/Alert')->makeInline()->asSuccess()->withTitle(lang('template_routes_saved'))->addToBody(lang('template_routes_saved_desc'))->defer(); ee()->functions->redirect($this->base_url); } else { ee()->load->helper('html_helper'); ee('CP/Alert')->makeInline()->asIssue()->withTitle(lang('template_routes_not_saved'))->addToBody(lang('template_routes_not_saved_desc'))->now(); $this->index($templates, $errors); } }