예제 #1
0
파일: home.php 프로젝트: 4bs4/marifa
 /**
  * Prueba descarga de un plugin.
  */
 public function action_install()
 {
     Dispatcher::call('');
     // Prueba del uso de memoria.
     // Nombre del plugin.
     $p_nombre = "Test Plugin";
     // Borramos el plugin.
     // if (file_exists(Plugin_Manager::nombre_as_path($p_nombre)))
     // {
     // Update_Utils::unlink(Plugin_Manager::nombre_as_path($p_nombre));
     // }
     // Objeto manejador de plugins.
     $pkg_manager = Plugin_Manager::get_instance();
     // Verificamos su existencia
     $o_plugin = $pkg_manager->get(Plugin_Manager::make_name($p_nombre));
     if ($o_plugin === NULL) {
         // Realizamos la instalación.
         // Cargamos el actualizador.
         $o_updater = new Update_Updater();
         // Descargamos el paquete e instalamos el paquete. Se usa 1 para mostrar actualizaciones.
         if ($o_updater->install_package(Update_Utils::make_hash($p_nombre), 1)) {
             // Actualizamos la cache.
             $pkg_manager->regenerar_lista();
             // Cargamos el paquete.
             $o_plugin = new Plugin_Plugin($p_nombre);
             // Realizamos la actualizacion.
             $o_plugin->install();
             // Activamos el paquete.
             $pkg_manager->set_state(Plugin_Manager::make_name($p_nombre), TRUE, TRUE);
             echo "Instalación existosa";
         } else {
             echo "Problema al realizar la instalación";
         }
     } else {
         // Buscamos actualizaciones.
         $upd_id = $o_plugin->check_updates();
         if ($upd_id === FALSE) {
             echo "No hay actualizaciones";
         } else {
             // Instalamos la actualizacion.
             // Desactivo el plugin.
             if ($o_plugin->info()->estado) {
                 $o_plugin->remove();
             }
             // Directorio del plugin.
             $orig_path = Plugin_Manager::nombre_as_path($p_nombre);
             $tmp_path = rtrim($orig_path, '/') . '.bkp';
             // Realizamos una copia.
             Update_Utils::copyr($orig_path, $tmp_path);
             // Borramos el original.
             Update_Utils::unlink($orig_path);
             // Cargamos el actualizador.
             $o_updater = new Update_Updater();
             // Descargamos el paquete e instalamos el paquete.
             if (!$o_updater->install_package(Update_Utils::make_hash($p_nombre), $upd_id)) {
                 // Recuperamos el original.
                 Update_Utils::copyr($tmp_path, $orig_path);
                 echo "No se pudo actualizar a la versión {$upd_id}.";
             } else {
                 echo "Actualización a la versión {$upd_id} exitosa.";
             }
             // Realizamos la instalación.
             $o_plugin->install();
             // Borramos la copia.
             Update_Utils::unlink($tmp_path);
         }
     }
     if (!Request::is_cli()) {
         echo "<br />";
     }
 }
예제 #2
0
파일: plugin.php 프로젝트: 4bs4/marifa
 /**
  * Verificamos nuevas versiones del plugin.
  * Esta función no se recomienda por su costo, ya que para obtener las
  * actualizaciones de un plugin ha de enviarse la lista para que el servidor
  * resuelva dependencias (inclusivas o exclusivas).
  * @return FALSE|int Numero de versión o false si no hay actualizaciones.
  */
 public function check_updates()
 {
     // Cargamos objeto de actualizaciones.
     $o_update = new Update_Updater();
     // Obtenemos la lista de actualizaciones.
     $upd_list = $o_update->find_updates();
     if (is_object($upd_list)) {
         if ($upd_list instanceof stdClass) {
             $upd_list = (array) $upd_list;
         }
     }
     // Verificamos el resultado.
     if (is_array($upd_list)) {
         $k = (string) Update_Utils::make_hash($this->data->nombre);
         if (isset($upd_list[$k])) {
             return $upd_list[$k];
         } else {
             return FALSE;
         }
     } elseif (is_object($upd_list)) {
         $k = (string) Update_Utils::make_hash($this->data->nombre);
         if (isset($upd_list->{$k})) {
             return $upd_list->{$k};
         } else {
             return FALSE;
         }
     } else {
         //TODO: verificar que no sea un error.
         return FALSE;
     }
 }