Example #1
0
 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;
 }