public function validate($data) { $type = strtoupper(basename(str_replace('\\', '/', get_class($this)))); // No se valida los campos FILE o IMAGEN que estan vacios y son de un objeto viejo // En este punto no se actualiza el valor del campo y se utiliza facilmente en save() if ($type == 'FILE' || $type == 'IMAGE') { if (!$this->form->isNew() && ($data == '' || $data == null)) { return true; } } /* Todos los campos menos Editor, File, Image y Table - se valida el minimo y maximo de caracteres */ if (!in_array($type, array('EDITOR', 'FILE', 'IMAGE', 'TABLE'))) { if ($this->max_length && strlen($data) > $this->max_length) { $msg = !$this->msg_max_length ? $this->I18n->get('form.max_length', 'Is Invalid.') : $this->msg_max_length; $this->msg_error = strtr($msg, array('%name%' => $this->getValueLabel(), '%max%' => $this->max_length)); return false; } if ($this->min_length && strlen($data) < $this->min_length) { $msg = !$this->msg_min_length ? $this->I18n->get('form.min_length', 'Is Invalid.') : $this->msg_min_length; $this->msg_error = strtr($msg, array('%name%' => $this->getValueLabel(), '%min%' => $this->min_length)); return false; } } // Envia el valor para ser procesado por le metodo valid() de cada campo $this->value = $data; // Llama al validador del widget if (!$this->valid()) { $this->msg_error = $this->msg_error ? $this->msg_error : $this->I18n->get('form.' . strtolower($type), 'Is Invalid.'); $this->value = null; return false; } if ($this->is_unique) { /** * @var $db Model */ $Model = Service::get('database.manager')->model($this->form->getNameModel()); if ($this->form->isNew()) { $exist = $Model->where($this->name, '=', $this->value)->exist(); } else { $instanceModelo = $this->form->getModel(); $fieldPrimary = $instanceModelo::primary; $exist = $Model->where($this->name, '=', $this->value)->andWhere($fieldPrimary, '<>', $instanceModelo->{$fieldPrimary})->exist(); } if ($exist) { $this->msg_error = $this->I18n->get('form.unique', 'Is unique.'); return false; } } // Si pasa las validaciones transforma la data para evitar inyeccion sql if (!in_array($type, array('EDITOR', 'NOTE', 'FILE', 'IMAGE', 'FOREIGN', 'TABLE'))) { $this->value = htmlentities($this->value, ENT_QUOTES, 'UTF-8'); } return true; }