Ejemplo n.º 1
0
 /**
  * Method to get update for one-click update
  *
  * @param string $module
  * @param string $new
  * @param string $old
  * @param int    $id
  * @return void
  */
 public function getUpdate($module = null, $new = null, $old = null, $id = null)
 {
     if (null === $module) {
         if (file_exists(CONTENT_ABS_PATH . '/assets/phire')) {
             $dir = new Dir(CONTENT_ABS_PATH . '/assets/phire');
             $dir->emptyDir(true);
         }
         if (file_exists(CONTENT_ABS_PATH . '/assets/default')) {
             $dir = new Dir(CONTENT_ABS_PATH . '/assets/default');
             $dir->emptyDir(true);
         }
         if (file_exists(CONTENT_ABS_PATH . '/assets/default-flat')) {
             $dir = new Dir(CONTENT_ABS_PATH . '/assets/default-flat');
             $dir->emptyDir(true);
         }
         if (file_exists(CONTENT_ABS_PATH . '/assets/default-top')) {
             $dir = new Dir(CONTENT_ABS_PATH . '/assets/default-top');
             $dir->emptyDir(true);
         }
         if (file_exists(CONTENT_ABS_PATH . '/assets/default-top-flat')) {
             $dir = new Dir(CONTENT_ABS_PATH . '/assets/default-top-flat');
             $dir->emptyDir(true);
         }
         file_put_contents(CONTENT_ABS_PATH . '/updates/phirecms.zip', fopen('http://updates.phirecms.org/releases/phire/phirecms.zip', 'r'));
         $basePath = realpath(CONTENT_ABS_PATH . '/updates/');
         $archive = new Archive($basePath . '/phirecms.zip');
         $archive->extract($basePath);
         unlink(CONTENT_ABS_PATH . '/updates/phirecms.zip');
         $json = json_decode(stream_get_contents(fopen('http://updates.phirecms.org/releases/phire/phire.json', 'r')), true);
         foreach ($json as $file) {
             if (!file_exists(__DIR__ . '/../' . $file) && !file_exists(dirname(__DIR__ . '/../' . $file))) {
                 mkdir(dirname(__DIR__ . '/../' . $file), 0755, true);
             }
             copy(CONTENT_ABS_PATH . '/updates/phire-cms/' . $file, __DIR__ . '/../' . $file);
         }
         $dir = new Dir(CONTENT_ABS_PATH . '/updates/phire-cms/');
         $dir->emptyDir(true);
     } else {
         if (file_exists(MODULES_ABS_PATH . '/' . $module . '-' . $old . '.zip')) {
             unlink(MODULES_ABS_PATH . '/' . $module . '-' . $old . '.zip');
         }
         if (file_exists(MODULES_ABS_PATH . '/' . $module . '-' . $old)) {
             $dir = new Dir(MODULES_ABS_PATH . '/' . $module . '-' . $old);
             $dir->emptyDir(true);
         }
         if (file_exists(CONTENT_ABS_PATH . '/assets/' . $module)) {
             $dir = new Dir(CONTENT_ABS_PATH . '/assets/' . $module);
             $dir->emptyDir(true);
         }
         file_put_contents(MODULES_ABS_PATH . '/' . $module . '-' . $new . '.zip', fopen('http://updates.phirecms.org/releases/modules/' . $module . '-' . $new . '.zip', 'r'));
         $basePath = realpath(MODULES_ABS_PATH . '/');
         $archive = new Archive($basePath . '/' . $module . '-' . $new . '.zip');
         $archive->extract($basePath);
         $mod = Table\Modules::findById($id);
         $assets = unserialize($mod->assets);
         if (isset($assets['info']['version'])) {
             $assets['info']['version'] = $new;
         } else {
             if (isset($assets['info']['Version'])) {
                 $assets['info']['Version'] = $new;
             } else {
                 if (isset($assets['info']['VERSION'])) {
                     $assets['info']['VERSION'] = $new;
                 }
             }
         }
         $mod->file = $module . '-' . $new . '.zip';
         $mod->folder = $module . '-' . $new;
         $mod->assets = serialize($assets);
         $mod->save();
     }
 }
Ejemplo n.º 2
0
 /**
  * Uninstall modules
  *
  * @param  array                $ids
  * @param  \Pop\Service\Locator $services
  * @return void
  */
 public function uninstall($ids, $services)
 {
     $modulesPath = MODULES_ABS_PATH;
     foreach ($ids as $id) {
         $module = Table\Modules::findById((int) $id);
         if (isset($module->id)) {
             $assets = unserialize($module->assets);
             if (isset($assets['tables']) && count($assets['tables']) > 0) {
                 $db = $services['database'];
                 if (DB_INTERFACE == 'mysql' || DB_TYPE == 'mysql') {
                     $db->query('SET foreign_key_checks = 0;');
                     foreach ($assets['tables'] as $table) {
                         $db->query('DROP TABLE ' . $table);
                     }
                     $db->query('SET foreign_key_checks = 1;');
                 } else {
                     if (DB_INTERFACE == 'pgsql' || DB_TYPE == 'pgsql') {
                         foreach ($assets['tables'] as $table) {
                             $db->query('DROP TABLE ' . $table . ' CASCADE');
                         }
                     } else {
                         foreach ($assets['tables'] as $table) {
                             $db->query('DROP TABLE ' . $table);
                         }
                     }
                 }
             }
             // Run any uninstall functions
             $config = (include $modulesPath . '/' . $module->folder . '/config/module.php');
             if (isset($config[$module->name]) && isset($config[$module->name]['uninstall']) && !empty($config[$module->name]['uninstall'])) {
                 call_user_func_array($config[$module->name]['uninstall'], [$services]);
             }
             // Remove any assets
             if (file_exists(__DIR__ . '/../../..' . CONTENT_PATH . '/assets/' . strtolower($module->name))) {
                 $dir = new Dir(__DIR__ . '/../../..' . CONTENT_PATH . '/assets/' . strtolower($module->name));
                 $dir->emptyDir(true);
             }
             if (strpos($modulesPath, 'vendor') === false) {
                 // Remove the module folder and files
                 if (file_exists($modulesPath . '/' . $module->folder)) {
                     $dir = new Dir($modulesPath . '/' . $module->folder);
                     $dir->emptyDir(true);
                 }
                 // Remove the module file
                 if (file_exists($modulesPath . '/' . $module->file) && is_writable($modulesPath . '/' . $module->file)) {
                     unlink($modulesPath . '/' . $module->file);
                 }
             }
             $module->delete();
         }
     }
 }
Ejemplo n.º 3
0
 /**
  * Update action method
  *
  * @param  int $id
  * @return void
  */
 public function update($id)
 {
     $module = new Model\Module();
     $module->getById($id);
     if (isset($module->id) && isset($this->sess->updates->modules[$module->name]) && version_compare($module->version, $this->sess->updates->modules[$module->name]) < 0) {
         if ($this->request->getQuery('update') == 2 && is_writable(MODULES_ABS_PATH) && is_writable(MODULES_ABS_PATH . '/' . $module->folder) && is_writable(MODULES_ABS_PATH . '/' . $module->folder . '.zip')) {
             clearstatcache();
             $updaterClass = $module->prefix . 'Updater';
             if (class_exists($updaterClass)) {
                 $updater = new $updaterClass($module->name);
                 $updater->runPost();
             }
             $mod = \Phire\Table\Modules::findById($id);
             if (isset($mod->id)) {
                 $mod->version = $this->sess->updates->modules[$module->name];
                 $mod->updated_on = date('Y-m-d H:i:s');
                 $mod->save();
             }
             $this->redirect(BASE_PATH . APP_URI . '/modules/complete/' . $id);
         } else {
             if ($this->request->getQuery('update') == 1 && is_writable(MODULES_ABS_PATH) && is_writable(MODULES_ABS_PATH . '/' . $module->folder) && is_writable(MODULES_ABS_PATH . '/' . $module->folder . '.zip')) {
                 $updater = new \Phire\Updater($module->name);
                 $updater->getUpdate($module->name, $this->sess->updates->modules[$module->name], $module->version, $id);
                 $this->redirect(BASE_PATH . APP_URI . '/modules/update/' . $id . '?update=2');
             } else {
                 $this->prepareView('phire/modules/update.phtml');
                 $this->view->title = 'Update ' . $module->name;
                 $this->view->module_id = $module->id;
                 $this->view->module_name = $module->name;
                 $this->view->module_update_version = $this->sess->updates->modules[$module->name];
                 if (is_writable(MODULES_ABS_PATH) && is_writable(MODULES_ABS_PATH . '/' . $module->folder) && is_writable(MODULES_ABS_PATH . '/' . $module->folder . '.zip')) {
                     $this->view->writable = true;
                 } else {
                     $this->view->writable = false;
                 }
                 $this->send();
             }
         }
     } else {
         $this->redirect(BASE_PATH . APP_URI . '/modules');
     }
 }
Ejemplo n.º 4
0
 /**
  * Update action method
  *
  * @return void
  */
 public function update()
 {
     $config = new Model\Config();
     $updates = $config->getUpdates();
     $moduleId = $this->getModuleId();
     $module = Table\Modules::findById($moduleId);
     if (isset($module->id)) {
         if (isset($updates->modules[$module->folder]) && version_compare($updates->modules[$module->folder], $module->version) < 0) {
             $this->console->append();
             $this->console->append($this->console->colorize('The \'' . $module->folder . '\' module is available for update.', Console::BOLD_YELLOW));
             $this->console->append();
             $this->console->append($this->console->colorize('Please back up all of your files and your database before proceeding.', Console::BOLD_RED));
             $this->console->append();
             $this->console->send();
             $update = null;
             while (strtolower($update) != 'y' && strtolower($update) != 'n') {
                 $update = $this->console->prompt($this->console->getIndent() . 'Update the \'' . $module->folder . '\' module? (Y/N) ');
             }
             if (strtolower($update) == 'y') {
                 if (is_writable(__DIR__ . '/../../../') && is_writable(__DIR__ . '/../../../' . $module->folder) && is_writable(__DIR__ . '/../../../' . $module->folder . '.zip')) {
                     $updater = new \Phire\Updater($module->folder);
                     $updater->getUpdate($module->folder);
                     clearstatcache();
                     $updaterClass = $module->prefix . 'Updater';
                     if (class_exists($updaterClass)) {
                         $updater = new $updaterClass($module->folder);
                         $updater->runPost();
                     } else {
                         if (file_exists(__DIR__ . '/../../../' . $module->folder . '/src/Updater.php')) {
                             include __DIR__ . '/../../../' . $module->folder . '/src/Updater.php';
                             if (class_exists($updaterClass)) {
                                 $updater = new $updaterClass($module->folder);
                                 $updater->runPost();
                             }
                         } else {
                             $module->updated_on = date('Y-m-d H:i:s');
                             $module->save();
                         }
                     }
                     $this->console->append();
                     $this->console->append($this->console->colorize('Update completed successfully!', Console::BOLD_CYAN));
                     $this->console->append($this->console->colorize('You have updated \'' . $module->folder . '\' to version ' . $updates->modules[$module->folder] . '.', Console::BOLD_CYAN));
                     $this->console->send();
                 } else {
                     $this->console->append();
                     $this->console->append($this->console->colorize('The module folders are not writable. They must be writable to update the module.', Console::BOLD_RED));
                     $this->console->send();
                 }
             }
         } else {
             $this->console->append();
             $this->console->append($this->console->colorize('The \'' . $module->folder . '\' module is up-to-date!', Console::BOLD_GREEN));
             $this->console->send();
         }
     }
 }