Пример #1
0
 /**
  * Valida la información cargada en las propiedades del objeto
  * respecto a las reglas pasadas en el array $rules y que
  * provienen del nodo <validator> del archivo config.yml
  * correspondiente al controller del objeto.
  *
  * Si alguna columna no cumple la regla, le carga el valor por defecto
  *
  * Tambien hace la validación lógica y el número máximo de records y
  * número máximo de páginas contra la tabla urlamigables
  *
  * Carga los array de errores y alertas si procede.
  *
  * @param array $rules Array con las reglas de validacion
  * @return boolean True si hay errores
  */
 public function valida(array $rules)
 {
     unset($this->_errores);
     if ($rules['GLOBALES']['numMaxRecords'] > 0) {
         if ($this->getNumberOfRecords() > $rules['GLOBALES']['numMaxRecords']) {
             $this->_errores[] = "Ha superado el número máximo de registros contratado. Por favor, consulte con el webmaster";
         }
     }
     if ($rules['GLOBALES']['numMaxPages'] > 0) {
         $urls = new CpanUrlAmigables();
         if ($urls->getNumberOfRecords() > $rules['GLOBALES']['numMaxPages']) {
             $this->_errores[] = "Ha superado el número máximo de páginas contratado. Por favor, consulte con el webmaster";
         }
         unset($urls);
     }
     unset($rules['GLOBALES']);
     if (count($this->_errores) == 0) {
         foreach ($rules as $key => $value) {
             // Si no tiene valor, le pongo el de por defecto
             if ($this->{$key} == '') {
                 $this->{$key} = $value['default'];
             }
             switch ($value['type']) {
                 case 'string':
                     //Validar los items que no pueden ser nulos
                     $this->{$key} = trim($this->{$key});
                     if ($this->{$key} == '') {
                         $this->_errores[] = $value['title'] . ": " . $value['message'];
                     }
                     break;
                 case 'integer':
                 case 'decimal':
                     $valor = $this->{$key};
                     $minimo = (int) $value['minimo'];
                     $maximo = (int) $value['maximo'];
                     $controlRango = $minimo || $maximo;
                     if (is_numeric($valor)) {
                         if ($controlRango) {
                             if ($valor < $minimo || $valor > $maximo) {
                                 $this->_errores[] = $value['title'] . ": Valor fuera del rango (" . $minimo . "-" . $maximo . ")";
                             }
                         }
                     } else {
                         $this->_errores[] = $value['title'] . ": " . $valor . " " . $value['message'];
                     }
                     break;
                 case 'date':
                     break;
                 case 'datetime':
                     break;
                 case 'cif':
                     break;
                 case 'email':
                     $email = new Mail();
                     if (!$email->compruebaEmail($this->{$key})) {
                         $this->_errores[] = $value['title'] . ": No cumple las reglas de un email correcto.";
                     }
                     unset($email);
                     break;
             }
         }
         $this->validaLogico();
     }
     return count($this->_errores) == 0;
 }