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