/** * Comprueba que el archivo cumple las reglas de validación * respecto a tipo y tamaño * * Las propiedades del archivo a validar deben estar cargadas * en $this->_ArrayDoc * * @param array $rules Array con las reglas de validación * @return boolean TRUE si cumple las reglas de validación */ public function validaArchivo(array $rules) { if ($this->_ArrayDoc['error'] == '0') { // Comprar que no excede el número máximo de documentos permitidos if ($rules['numMaxDocs'] > 0) { $doc = new CpanDocs(); $nDocs = $doc->getNumberOfRecords("Type = '{$rules['type']}' and IsThumbNail='0'"); unset($doc); $limiteExcedido = $nDocs >= $rules['numMaxDocs']; } if (!$limiteExcedido) { // Comprobacion de tamaño $prohibidoTamano = ($rules['maxFileSize'] > 0 and $this->_ArrayDoc['size'] > $rules['maxFileSize']); // Comprobación de tipo $path_parts = pathinfo($this->_ArrayDoc['name']); $extension = strtolower($path_parts['extension']); $prohibidoTipo = !in_array($extension, $rules['allowTypes']); if ($prohibidoTipo) { $this->_errores[] = "El tipo de archivo '" . $this->_ArrayDoc['type'] . "' no está permitido."; } if ($prohibidoTamano) { $this->_errores[] = "El tamaño del archivo (" . round($this->_ArrayDoc['size'] / 1000, 2) . " Kb) supera el limite autorizado (" . $rules['maxFileSize'] / 1000 . " Kb)."; } } else { $this->_errores[] = "Se ha excedido el número máximo de archivos contratado. Por favor, contacte con el web master"; } } else { switch ($this->_ArrayDoc['error']) { case '': // No hay error, el archivo ya está subido break; case '1': $this->_errores[] = "El tamaño del archivo es superior al permitido por el hosting (Cod. Error: {$this->_ArrayDoc['error']})."; break; case '2': $this->_errores[] = "El tamaño del archivo es superior al permitido (Cod. Error: {$this->_ArrayDoc['error']})."; break; case '3': $this->_errores[] = "El archivo fue solo parcialmente subido (Cod. Error: {$this->_ArrayDoc['error']})."; break; case '4': $this->_errores[] = "El archivo no se ha cargado (Cod. Error: {$this->_ArrayDoc['error']})."; break; case '6': $this->_errores[] = "No se ha localizado la carpeta temporal de subidas (Cod. Error: {$this->_ArrayDoc['error']})."; break; case '7': $this->_errores[] = "Hubo un fallo al escribir en el disco (Cod. Error: {$this->_ArrayDoc['error']})."; break; case '8': $this->_errores[] = "La carga del archivo ha sido interrumpida (Cod. Error: {$this->_ArrayDoc['error']})."; break; } } return count($this->_errores) == 0; }