/** * Validates the current model's data * * @throws Jelly_Validation_Exception * @param Validation|null $extra_validation * @return Jelly_Core_Model */ public function check($extra_validation = NULL) { $key = $this->_original[$this->_meta->primary_key()]; // Determine if any external validation failed $extra_errors = ($extra_validation instanceof Validation and !$extra_validation->check()); // For loaded models, we're only checking what's changed, otherwise we check it all $data = $key ? $this->_changed : $this->_changed + $this->_original; // Always build a new validation object $this->_validation($data, (bool) $key); // Run validation if (!$this->_valid) { $array = $this->_validation; $this->_meta->events()->trigger('model.before_validate', $this, array($this->_validation)); if (($this->_valid = $array->check()) === FALSE or $extra_errors) { $exception = new Jelly_Validation_Exception($this->_meta->errors_filename(), $array); if ($extra_errors) { // Merge any possible errors from the external object $exception->add_object('_external', $extra_validation); } throw $exception; } $this->_meta->events()->trigger('model.after_validate', $this, array($this->_validation)); } else { $this->_valid = TRUE; } return $this; }