Example #1
0
 /**
  * Descomprimimos el paquete para poder trabajar.
  * @param string $tmp_path Directorio temporal donde colocar la descompresion.
  * @return bool
  */
 protected function descomprimir($tmp_path)
 {
     // Obtenemos el tipo de compresion para el paquete.
     $c_type = Update_Utils::mime2compresor(Update_Utils::get_mime($this->package));
     // Cargamos el compresor.
     $c = Update_Compresion::get_instance($c_type);
     // Seteamos donde descomprimir.
     $c->set_temp_path($tmp_path);
     return $c->decompress($this->package);
 }
Example #2
0
 /**
  * Instalamos un nuevo tema.
  */
 public function action_instalar_tema()
 {
     // Cargamos la vista.
     $vista = View::factory('admin/configuracion/instalar_tema');
     // Valores por defecto.
     $vista->assign('error_carga', FALSE);
     if (Request::method() == 'POST') {
         $error = FALSE;
         // Verifico el envio correcto de datos.
         if (isset($_FILES['theme'])) {
             // Cargo los datos del archivo.
             $file = $_FILES['theme'];
             // Verifico el estado.
             if ($file['error'] !== UPLOAD_ERR_OK) {
                 $error = TRUE;
                 switch ($file['error']) {
                     case UPLOAD_ERR_INI_SIZE:
                     case UPLOAD_ERR_FORM_SIZE:
                         $vista->assign('error_carga', 'El tamaño del archivo es incorrecto.');
                         break;
                     case UPLOAD_ERR_PARTIAL:
                         $vista->assign('error_carga', 'Los datos enviados están corruptos.');
                         break;
                     case UPLOAD_ERR_NO_FILE:
                         $vista->assign('error_carga', 'No has seleccionado un archivo.');
                         break;
                     case UPLOAD_ERR_NO_TMP_DIR:
                     case UPLOAD_ERR_CANT_WRITE:
                         $vista->assign('error_carga', 'Error interno al cargar el archivo. Reintente. Si el error persiste contacte al administrador.');
                         break;
                     case UPLOAD_ERR_EXTENSION:
                         $vista->assign('error_carga', 'La configuración del servidor no permite archivo con esa extensión.');
                         break;
                 }
             } else {
                 // Cargo el mime.
                 $file['type'] = Update_Utils::get_mime($file['tmp_name']);
                 // Verifico esté dentro de los permitidos.
                 if (!in_array(Update_Utils::mime2compresor($file['type']), Update_Compresion::get_list())) {
                     $error = TRUE;
                     $vista->assign('error_carga', 'El tipo de archivo no es soportado. Verifique la configuración del servidor.');
                 }
             }
         } else {
             $error = TRUE;
             $vista->assign('error_carga', 'No has seleccionado un archivo.');
         }
         // Verifico el contenido de los datos.
         if (!$error) {
             // Armo directorio temporal para la descargar.
             $tmp_dir = TMP_PATH . uniqid('pkg_') . DS;
             mkdir($tmp_dir, 0777, TRUE);
             // Realizo la descompresión.
             $compresor = Update_Compresion::get_instance(Update_Utils::mime2compresor($file['type']));
             $compresor->set_temp_path($tmp_dir);
             if (!$compresor->decompress($file['tmp_name'])) {
                 // Limpio salidas.
                 Update_Utils::unlink($file['tmp_name']);
                 Update_Utils::unlink($tmp_dir);
                 // Informo del error.
                 $error = TRUE;
                 $vista->assign('error_carga', 'No se pudo descomprimir el archivo. Compruebe que sea correcto.');
             } else {
                 // Verifico que sea correcto.
                 if (is_dir($tmp_dir) && file_exists($tmp_dir . DS . 'theme.php') && file_exists($tmp_dir . DS . 'views') && $tmp_dir . DS . 'assets') {
                     // Cargo configuraciones.
                     $data = configuracion_obtener($tmp_dir . DS . 'theme.php');
                     // Verifico su contenido.
                     if (is_array($data)) {
                         if (isset($data['nombre']) && isset($data['author'])) {
                             $theme_name = preg_replace('/(\\s|[^a-z0-9])/', '', strtolower($data['nombre']));
                         }
                     }
                     if (!isset($theme_name)) {
                         // Limpio salidas.
                         Update_Utils::unlink($file['tmp_name']);
                         Update_Utils::unlink($tmp_dir);
                         // Informo del error.
                         $error = TRUE;
                         $vista->assign('error_carga', 'El archivo de descripción del tema es inválido.');
                     }
                 } else {
                     // Limpio salidas.
                     Update_Utils::unlink($file['tmp_name']);
                     Update_Utils::unlink($tmp_dir);
                     // Informo del error.
                     $error = TRUE;
                     $vista->assign('error_carga', 'No se trata de un tema válido.');
                 }
             }
         }
         // Genero directorios.
         if (!$error) {
             // Generamos el path donde se va a alojar.
             $target_path = APP_BASE . DS . VIEW_PATH . $theme_name . DS;
             // Verifico directorio donde alojar.
             if (!file_exists($target_path)) {
                 // Creo el directorio del tema.
                 if (!@mkdir($target_path, 0777, TRUE)) {
                     // Limpio salidas.
                     Update_Utils::unlink($target_path);
                     Update_Utils::unlink($file['tmp_name']);
                     Update_Utils::unlink($tmp_dir);
                     // Informo del error.
                     $vista->assign('error_carga', '1No se pudo alojar el tema en su lugar correspondiente. Verifica los permisos del directorio de temas.');
                     $error = TRUE;
                 }
             }
         }
         // Realizo actualizacion.
         if (!$error) {
             // Realizo el movimiento.
             if (!Update_Utils::copyr($tmp_dir, $target_path)) {
                 // Limpio salidas.
                 Update_Utils::unlink($file['tmp_name']);
                 Update_Utils::unlink($tmp_dir);
                 Update_Utils::unlink($target_path);
                 // Informo del error.
                 $vista->assign('error_carga', 'No se pudo alojar el tema en su lugar correspondiente. Verifica los permisos del directorio de temas.');
             } else {
                 // Limpio directorios.
                 Update_Utils::unlink($file['tmp_name']);
                 Update_Utils::unlink($tmp_dir);
                 // Informo resultado.
                 $_SESSION['flash_success'] = 'El tema se instaló correctamente.';
                 // Redireccionamos.
                 Request::redirect('/admin/configuracion/temas');
             }
         }
     }
     // Seteamos el menu.
     $this->template->assign('master_bar', parent::base_menu('admin'));
     // Cargamos plantilla administracion.
     $admin_template = View::factory('admin/template');
     $admin_template->assign('contenido', $vista->parse());
     unset($portada);
     $admin_template->assign('top_bar', Controller_Admin_Home::submenu('configuracion_temas'));
     // Asignamos la vista a la plantilla base.
     $this->template->assign('contenido', $admin_template->parse());
 }
Example #3
0
 /**
  * Instalamos o actualizamos un paquete.
  * @param string $hash Hash del paquete a instalar.
  * @param int $version Número de version a descargar e instalar. Si no se
  * especifica utilizamos la última.
  * @return bool
  */
 public function install_package($hash, $version = NULL)
 {
     // Cliente para realizar las peticiones.
     $o_client = new Update_Client($this->server, $this->token);
     // Verificamos si hay versión especificada.
     if ($version === NULL) {
         // Obtenemos la última versión.
         $version = $o_client->get_last_version($hash);
     }
     // Obtenemos la compresion de descarga. (zip, tar, gz, bz2, etc)
     $compresion_list = $o_client->get_package_compresion_list($hash, $version);
     unset($o_client);
     if (!is_array($compresion_list)) {
         throw new Exception('Imposible obtener la lista de compresiones.');
         return FALSE;
     } else {
         // Verificamos la lista de compatibles.
         $compresiones = array_intersect($compresion_list, Update_Compresion::get_list());
         unset($compresion_list);
         if (count($compresiones) === 0) {
             throw new Exception('No hay una compresión compatible para utilizar.');
             return FALSE;
         }
     }
     // Seleccionamos la primer compresion.
     $type = array_shift($compresiones);
     unset($compresiones);
     // Armamos directorio temporal de la descarga.
     $temp_file = TMP_PATH . uniqid('upd_file_');
     // Descargamos el archivo.
     $rqs = new Update_Rest_Request($this->server);
     if (!$rqs->download("/paquete/get_update/{$this->token}/{$hash}/{$version}/{$type}", $temp_file)) {
         @unlink($temp_file);
         // No se pudo descargar.
         throw new Exception('No se pudo descargar el archivo.');
         return FALSE;
     }
     // Cargamos el paquete.
     $pkg = new Update_Package($temp_file);
     // Realizamos la instalación.
     return $pkg->install();
 }