/** * 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; }