Exemple #1
0
 public function subir()
 {
     self::ajaxCheck();
     $jinput = JFactory::getApplication()->input;
     /**
      * Esta tarea debe accionarse sólamente cuándo el artículo ha sido previamente guardado,
      * con el fin de evitar subir archivos huerfanos
      */
     $id = $jinput->get('id', null, null);
     if ($id == 0) {
         $data = array();
         $data['msg'] = JText::_("COM_CONTENT_ADJUNTOS_MSG_GUARDAR_ARTICULO_PRIMERO");
         $data['tipo'] = "warn";
         print_r(json_encode($data));
         return;
     }
     // Obtiene la variable @campo enviada en el request
     $campo = $jinput->get->get('campo', null, null);
     // Obtiene la variable @exts (extensiones) enviada en el request
     $exts = explode(',', $jinput->get->get('exts', null, null));
     // Obtiene datos del servidor
     $maxFileSize = ini_get("upload_max_filesize");
     $serverContent = $_SERVER['CONTENT_LENGTH'];
     // Obtiene los datos del archivo
     $archivo = $jinput->files->get($campo);
     // Verifica que el tamaño del request no supere el definido en la configuración PHP
     if ($maxFileSize > $serverContent && is_null($archivo['size'])) {
         $data = array();
         $data['msg'] = JText::_("COM_CONTENT_ADJUNTOS_MSG_ARCHIVO_SUPERA_TAMANO_PERMITIDO_SERVIDOR");
         $data['tipo'] = "error";
         print_r(json_encode($data));
         return;
     }
     if (isset($archivo)) {
         $mimeArchivo = $archivo['type'];
         // Valida el tip)o mime del archivo, si no es valido retorna mensaje de error
         // y detiene la ejecución
         if (!is_null($mimeArchivo)) {
             $esValido = self::validarTipoMime($exts, $mimeArchivo);
             if ($esValido['estado'] === false) {
                 $data = array('msg' => $esValido['msg'], 'tipo' => $esValido['tipo']);
                 print_r(json_encode($data));
                 return;
             }
         }
         // Sanea el nombre de archivo evitando caracteres no deseados
         $nombreArchivo = strtolower(JFile::makeSafe($archivo['name']));
         // Define el origen y destino del archivo
         // TODO: Crear directorio propio para los adjuntos del artículo
         // y usarlo como path destino.
         $src = $archivo['tmp_name'];
         $dest = JPATH_ROOT . DS . 'uploads' . DS . sha1(time()) . '-' . $nombreArchivo;
         if (JFile::upload($src, $dest)) {
             $archivo = array_merge(self::reformarArchivo($id, $dest), array('mimeType' => $mimeArchivo));
             $data = array_merge($archivo, self::guardar($archivo), $esValido);
             // TODO: es posible registrar logs en la gestión de adjuntos
             print_r(json_encode($data));
         } else {
             // Muestra el mensaje a partir del código de error generado durante la
             // subida del archivo
             $err = $archivo['error'];
             $data = array();
             switch ($err) {
                 case 1:
                     $data["msg"] = "#" . $err . ": " . JText::_('COM_CONTENT_ADJUNTOS_MSG_ARCHIVO_SUPERA_TAMANO_PERMITIDO_CONFIG');
                     break;
                 case 2:
                     $data["msg"] = "#" . $err . ": " . JTex::_('COM_CONTENT_ADJUNTOS_MSG_ARCHIVO_SUPERA_TAMANO_PERMITIDO_FORM');
                 case 3:
                     $data["msg"] = "#" . $err . ": " . JText::_("COM_CONTENT_ADJUNTOS_MSG_ARCHIVO_PARCIALMENTE_SUBIDO");
                     break;
                 case 4:
                     $data["msg"] = "#" . $err . ": " . JText::_("COM_CONTENT_ADJUNTOS_MSG_ARCHIVO_NO_SUBIDO");
                     break;
                 case 6:
                     $data["msg"] = "#" . $err . ": " . JText::_("COM_CONTENT_ADJUNTOS_MSG_NO_TEMPORAL_DIR");
                     break;
                 case 7:
                     $data["msg"] = "#" . $err . ": " . JText::_('COM_CONTENT_ADJUNTOS_MSG_FALLO_ESCRIBIR_EN_DISCO');
                     break;
                 case 8:
                     $data["msg"] = "#" . $err . ": " . JText::_('COM_CONTENT_ADJUNTOS_MSG_NO_EXTENSION_PHP');
                     break;
             }
             $data["tipo"] = "error";
             // Retorna un objeto JSON que puede ser utilizado en el cliente
             print_r(json_encode($data));
         }
     }
 }