public function execute() { global $I18N; $addonkey = rex_request('addonkey', 'string'); $upload = rex_request('upload', array(array('upload_file', 'bool'), array('oldversion', 'string'), array('redaxo', 'array[string]'), array('description', 'string'), array('status', 'int'), array('replace_assets', 'bool'), array('ignore_tests', 'bool'))); $file = array(); $archive = null; $file['version'] = $upload['upload_file'] ? OOAddon::getVersion($addonkey) : $upload['oldversion']; $file['redaxo_versions'] = $upload['redaxo']; $file['description'] = stripslashes($upload['description']); $file['status'] = $upload['status']; if ($upload['upload_file']) { $archive = rex_path::addonCache('install', md5($addonkey . time()) . '.zip'); $exclude = array(); if ($upload['replace_assets']) { $exclude[] = 'files'; } if ($upload['ignore_tests']) { $exclude[] = 'tests'; } rex_install_archive::copyDirToArchive(rex_path::addon($addonkey), $archive, null, $exclude); if ($upload['replace_assets']) { rex_install_archive::copyDirToArchive(rex_path::addonAssets($addonkey), $archive, $addonkey . '/files'); } $file['checksum'] = md5_file($archive); } rex_install_webservice::post(rex_install_packages::getPath('?package=' . $addonkey . '&file_id=' . rex_request('file', 'int', 0)), array('file' => $file), $archive); if ($archive) { rex_file::delete($archive); } unset($_REQUEST['addonkey']); unset($_REQUEST['file']); rex_install_packages::deleteCache(); return $I18N->msg('install_info_addon_uploaded', $addonkey); }
public static function deleteCache() { self::$updatePackages = null; self::$addPackages = null; self::$myPackages = null; rex_install_webservice::deleteCache('packages/'); }
protected function doAction() { if (($msg = $this->extractArchiveTo(rex_path::addon($this->addonkey))) !== true) { return $msg; } rex_package_manager::synchronizeWithFileSystem(); rex_install_packages::addedPackage($this->addonkey); }
public function doAction() { $path = rex_path::addon($this->addonkey); $temppath = rex_path::addon('.new.' . $this->addonkey); if (($msg = $this->extractArchiveTo($temppath)) !== true) { return $msg; } if ($this->addon->isAvailable() && ($msg = $this->checkRequirements()) !== true) { return $msg; } // ---- include update.php if ($this->addon->isInstalled() && file_exists($temppath . rex_package::FILE_UPDATE)) { try { $this->addon->includeFile('../.new.' . $this->addonkey . '/' . rex_package::FILE_UPDATE); } catch (rex_functional_exception $e) { return $e->getMessage(); } catch (rex_sql_exception $e) { return 'SQL error: ' . $e->getMessage(); } if (($msg = $this->addon->getProperty('updatemsg', '')) != '') { return $msg; } if (!$this->addon->getProperty('update', true)) { return rex_i18n::msg('package_no_reason'); } } // ---- backup $assets = $this->addon->getAssetsPath(); if (rex_addon::get('install')->getConfig('backups')) { $archivePath = rex_path::addonData('install', $this->addonkey . '/'); rex_dir::create($archivePath); $archive = $archivePath . strtolower(preg_replace('/[^a-z0-9-_.]/i', '_', $this->addon->getVersion('0'))) . '.zip'; rex_install_archive::copyDirToArchive($path, $archive); if (is_dir($assets)) { rex_install_archive::copyDirToArchive($assets, $archive, 'assets'); } } // ---- copy plugins to new addon dir foreach ($this->addon->getRegisteredPlugins() as $plugin) { $pluginPath = $temppath . '/plugins/' . $plugin->getName(); if (!is_dir($pluginPath)) { rex_dir::copy($plugin->getPath(), $pluginPath); } elseif ($plugin->isInstalled() && is_dir($pluginPath . '/assets')) { rex_dir::copy($pluginPath . '/assets', $plugin->getAssetsPath()); } } // ---- update main addon dir rex_dir::delete($path); rename($temppath, $path); // ---- update assets $origAssets = $this->addon->getPath('assets'); if ($this->addon->isInstalled() && is_dir($origAssets)) { rex_dir::copy($origAssets, $assets); } $this->addon->setProperty('version', $this->file['version']); rex_install_packages::updatedPackage($this->addonkey, $this->fileId); }
public function execute() { global $I18N; $addonkey = rex_request('addonkey', 'string'); rex_install_webservice::delete(rex_install_packages::getPath('?package=' . $addonkey . '&file_id=' . rex_request('file', 'int', 0))); unset($_REQUEST['addonkey']); unset($_REQUEST['file']); rex_install_packages::deleteCache(); return $I18N->msg('install_info_addon_deleted', $addonkey); }
public function doAction() { global $I18N, $REX; // $REX is needed for update.inc.php $path = rex_path::addon($this->addonkey); $temppath = rex_path::addon('.new.' . $this->addonkey); if (($msg = $this->extractArchiveTo($temppath)) !== true) { return $msg; } // ---- include update.php if (file_exists($temppath . 'update.inc.php')) { try { require $temppath . 'update.inc.php'; } catch (rex_install_functional_exception $e) { return $e->getMessage(); } if (($msg = OOAddon::getProperty($this->addonkey, 'updatemsg', '')) != '') { return $msg; } if (!OOAddon::getProperty($this->addonkey, 'update', true)) { return $I18N->msg('package_no_reason'); } } // ---- backup $assets = rex_path::addonAssets($this->addonkey); if (OOAddon::getProperty('install', 'backups')) { $archivePath = rex_path::addonData('install', $this->addonkey . '/'); rex_dir::create($archivePath); $archive = $archivePath . strtolower(preg_replace('/[^a-z0-9-_.]/i', '_', OOAddon::getVersion($this->addonkey))) . '.zip'; rex_install_archive::copyDirToArchive($path, $archive); if (is_dir($assets)) { rex_install_archive::copyDirToArchive($assets, $archive, 'assets'); } } // ---- copy plugins to new addon dir foreach (OOPlugin::getRegisteredPlugins($this->addonkey) as $plugin) { $pluginPath = $temppath . '/plugins/' . $plugin; if (!is_dir($pluginPath)) { rex_dir::copy(rex_path::plugin($this->addonkey, $plugin), $pluginPath); } elseif (OOPlugin::isInstalled($this->addonkey, $plugin) && is_dir($pluginPath . '/files')) { rex_dir::copy($pluginPath . '/files', rex_path::pluginAssets($this->addonkey, $plugin)); } } // ---- update main addon dir rex_dir::delete($path); rename($temppath, $path); // ---- update assets $origAssets = rex_path::addon($this->addonkey, 'assets'); if (is_dir($origAssets)) { rex_dir::copy($origAssets, $assets); } OOAddon::setProperty($this->addonkey, 'version', $this->file['version']); rex_install_packages::updatedPackage($this->addonkey, $this->fileId); }
public function execute() { if (!rex::getUser()->isAdmin()) { throw new rex_api_exception('You do not have the permission!'); } $addonkey = rex_request('addonkey', 'string'); try { rex_install_webservice::delete(rex_install_packages::getPath('?package=' . $addonkey . '&file_id=' . rex_request('file', 'int', 0))); } catch (rex_functional_exception $e) { throw new rex_api_exception($e->getMessage()); } unset($_REQUEST['addonkey']); unset($_REQUEST['file']); rex_install_packages::deleteCache(); return new rex_api_result(true, rex_i18n::msg('install_info_addon_deleted', $addonkey)); }
public function execute() { if (!rex::getUser()->isAdmin()) { throw new rex_api_exception('You do not have the permission!'); } $addonkey = rex_request('addonkey', 'string'); $upload = rex_request('upload', [['upload_file', 'bool'], ['oldversion', 'string'], ['redaxo', 'array[string]'], ['description', 'string'], ['status', 'int'], ['replace_assets', 'bool'], ['ignore_tests', 'bool']]); $file = []; $archive = null; $file['version'] = $upload['upload_file'] ? rex_addon::get($addonkey)->getVersion() : $upload['oldversion']; $file['redaxo_versions'] = $upload['redaxo']; $file['description'] = $upload['description']; $file['status'] = $upload['status']; try { if ($upload['upload_file']) { $archive = rex_path::addonCache('install', md5($addonkey . time()) . '.zip'); $exclude = []; if ($upload['replace_assets']) { $exclude[] = 'assets'; } if ($upload['ignore_tests']) { $exclude[] = 'tests'; } rex_install_archive::copyDirToArchive(rex_path::addon($addonkey), $archive, null, $exclude); if ($upload['replace_assets']) { rex_install_archive::copyDirToArchive(rex_url::addonAssets($addonkey), $archive, $addonkey . '/assets'); } $file['checksum'] = md5_file($archive); } rex_install_webservice::post(rex_install_packages::getPath('?package=' . $addonkey . '&file_id=' . rex_request('file', 'int', 0)), ['file' => $file], $archive); } catch (rex_functional_exception $e) { throw new rex_api_exception($e->getMessage()); } if ($archive) { rex_file::delete($archive); } unset($_REQUEST['addonkey']); unset($_REQUEST['file']); rex_install_packages::deleteCache(); return new rex_api_result(true, rex_i18n::msg('install_info_addon_uploaded', $addonkey)); }
/** @var i18n $I18N */ $addonkey = rex_request('addonkey', 'string'); $addons = array(); try { if ($func == 'add') { $api = new rex_api_install_package_add(); $info = $api->execute(); echo rex_info($info); $addonkey = ''; } } catch (rex_install_functional_exception $e) { echo rex_warning($e->getMessage()); $addonkey = ''; } try { $addons = rex_install_packages::getAddPackages(); } catch (rex_install_functional_exception $e) { echo rex_warning($e->getMessage()); $addonkey = ''; } if ($addonkey && isset($addons[$addonkey]) && !is_dir(rex_path::addon($addonkey))) { $addon = $addons[$addonkey]; $content = ' <div class="rex-addon-output"> <h2 class="rex-hl2">' . htmlspecialchars($addonkey) . '</small></h2> <table id="rex-table-install-packages-information" class="rex-table"> <colgroup> <col width="120" /> <col width="*" /> </colgroup>
public function execute() { if (!rex::getUser()->isAdmin()) { throw new rex_api_exception('You do not have the permission!'); } $installAddon = rex_addon::get('install'); $versions = self::getVersions(); $versionId = rex_request('version_id', 'int'); if (!isset($versions[$versionId])) { return null; } $version = $versions[$versionId]; if (!rex_string::versionCompare($version['version'], rex::getVersion(), '>')) { throw new rex_api_exception(sprintf('Existing version of Core (%s) is newer than %s', rex::getVersion(), $version['version'])); } try { $archivefile = rex_install_webservice::getArchive($version['path']); } catch (rex_functional_exception $e) { throw new rex_api_exception($e->getMessage()); } $message = ''; $temppath = rex_path::coreCache('.new.core/'); $coreAddons = []; /** @var rex_addon[] $updateAddons */ $updateAddons = []; try { if ($version['checksum'] != md5_file($archivefile)) { throw new rex_functional_exception($installAddon->i18n('warning_zip_wrong_checksum')); } if (!rex_install_archive::extract($archivefile, $temppath)) { throw new rex_functional_exception($installAddon->i18n('warning_core_zip_not_extracted')); } if (!is_dir($temppath . 'core')) { throw new rex_functional_exception($installAddon->i18n('warning_zip_wrong_format')); } if (is_dir($temppath . 'addons')) { foreach (rex_finder::factory($temppath . 'addons')->dirsOnly() as $dir) { $addonkey = $dir->getBasename(); $addonPath = $dir->getRealPath() . '/'; if (!file_exists($addonPath . rex_package::FILE_PACKAGE)) { continue; } $config = rex_file::getConfig($addonPath . rex_package::FILE_PACKAGE); if (!isset($config['version']) || rex_addon::exists($addonkey) && rex_string::versionCompare($config['version'], rex_addon::get($addonkey)->getVersion(), '<')) { continue; } $coreAddons[$addonkey] = $addonkey; if (rex_addon::exists($addonkey)) { $updateAddons[$addonkey] = rex_addon::get($addonkey); $updateAddonsConfig[$addonkey] = $config; } } } //$config = rex_file::getConfig($temppath . 'core/default.config.yml'); //foreach ($config['system_addons'] as $addonkey) { // if (is_dir($temppath . 'addons/' . $addonkey) && rex_addon::exists($addonkey)) { // $updateAddons[$addonkey] = rex_addon::get($addonkey); // } //} $this->checkRequirements($temppath, $version['version'], $updateAddonsConfig); if (file_exists($temppath . 'core/update.php')) { include $temppath . 'core/update.php'; } foreach ($updateAddons as $addonkey => $addon) { if ($addon->isInstalled() && file_exists($file = $temppath . 'addons/' . $addonkey . '/' . rex_package::FILE_UPDATE)) { try { $addon->includeFile($file); if ($msg = $addon->getProperty('updatemsg', '')) { throw new rex_functional_exception($msg); } if (!$addon->getProperty('update', true)) { throw new rex_functional_exception(rex_i18n::msg('package_no_reason')); } } catch (rex_functional_exception $e) { throw new rex_functional_exception($addonkey . ': ' . $e->getMessage(), $e); } catch (rex_sql_exception $e) { throw new rex_functional_exception($addonkey . ': SQL error: ' . $e->getMessage(), $e); } } } // create backup $installConfig = rex_file::getCache($installAddon->getDataPath('config.json')); if (isset($installConfig['backups']) && $installConfig['backups']) { rex_dir::create($installAddon->getDataPath()); $archive = $installAddon->getDataPath(strtolower(preg_replace('/[^a-z0-9-_.]/i', '_', rex::getVersion())) . '.zip'); rex_install_archive::copyDirToArchive(rex_path::core(), $archive); foreach ($updateAddons as $addonkey => $addon) { rex_install_archive::copyDirToArchive($addon->getPath(), $archive, 'addons/' . $addonkey); } } // copy plugins to new addon dirs foreach ($updateAddons as $addonkey => $addon) { foreach ($addon->getRegisteredPlugins() as $plugin) { $pluginPath = $temppath . 'addons/' . $addonkey . '/plugins/' . $plugin->getName(); if (!is_dir($pluginPath)) { rex_dir::copy($plugin->getPath(), $pluginPath); } elseif ($plugin->isInstalled() && is_dir($pluginPath . '/assets')) { rex_dir::copy($pluginPath . '/assets', $plugin->getAssetsPath()); } } } // move temp dirs to permanent destination rex_dir::delete(rex_path::core()); rename($temppath . 'core', rex_path::core()); if (is_dir(rex_path::core('assets'))) { rex_dir::copy(rex_path::core('assets'), rex_path::coreAssets()); } foreach ($coreAddons as $addonkey) { if (isset($updateAddons[$addonkey])) { rex_dir::delete(rex_path::addon($addonkey)); } rename($temppath . 'addons/' . $addonkey, rex_path::addon($addonkey)); if (is_dir(rex_path::addon($addonkey, 'assets'))) { rex_dir::copy(rex_path::addon($addonkey, 'assets'), rex_path::addonAssets($addonkey)); } } } catch (rex_functional_exception $e) { $message = $e->getMessage(); } catch (rex_sql_exception $e) { $message = 'SQL error: ' . $e->getMessage(); } rex_file::delete($archivefile); rex_dir::delete($temppath); if ($message) { $message = $installAddon->i18n('warning_core_not_updated') . '<br />' . $message; $success = false; } else { $message = $installAddon->i18n('info_core_updated'); $success = true; rex_delete_cache(); rex_install_webservice::deleteCache(); rex_install_packages::deleteCache(); rex::setConfig('version', $version['version']); // ---- update package order foreach ($updateAddons as $addon) { if ($addon->isAvailable()) { $addon->loadProperties(); foreach ($addon->getAvailablePlugins() as $plugin) { $plugin->loadProperties(); } rex_package_manager::generatePackageOrder(); } } } $result = new rex_api_result($success, $message); if ($success) { $result->setRequiresReboot(true); } return $result; }
<?php /** @var rex_addon $this */ $core = rex_request('core', 'boolean'); $addonkey = rex_request('addonkey', 'string'); $coreVersions = []; $addons = []; $message = rex_api_function::getMessage(); try { $coreVersions = rex_api_install_core_update::getVersions(); $addons = rex_install_packages::getUpdatePackages(); } catch (rex_functional_exception $e) { $message .= rex_view::warning($e->getMessage()); $addonkey = ''; } if ($core && !empty($coreVersions)) { $panel = ' <table class="table table-striped table-hover"> <thead> <tr> <th class="rex-table-icon"> </th> <th>' . $this->i18n('version') . '</th> <th>' . $this->i18n('description') . '</th> <th class="rex-table-action"></th> </tr> </thead> <tbody>'; foreach ($coreVersions as $id => $version) { $panel .= ' <tr> <td class="rex-table-icon"><i class="rex-icon rex-icon-package"></i></td>
<?php /** @var rex_addon $this */ $addonkey = rex_request('addonkey', 'string'); $addons = []; echo rex_api_function::getMessage(); try { $addons = rex_install_packages::getMyPackages(); } catch (rex_functional_exception $e) { echo rex_view::error($e->getMessage()); $addonkey = ''; } if ($addonkey && isset($addons[$addonkey])) { $addon = $addons[$addonkey]; $file_id = rex_request('file', 'string'); if ($file_id) { $new = $file_id == 'new'; $file = $new ? ['version' => '', 'description' => '', 'status' => 1] : $addon['files'][$file_id]; $newVersion = rex_addon::get($addonkey)->getVersion(); $uploadCheckboxDisabled = ''; $hiddenField = ''; if ($new || !rex_addon::exists($addonkey)) { $uploadCheckboxDisabled = ' disabled="disabled"'; $hiddenField = '<input type="hidden" name="upload[upload_file]" value="' . (int) $new . '" />'; } $panel = '<fieldset>'; $formElements = []; $n = []; $n['label'] = '<label for="rex-js-install-packages-upload-version">' . $this->i18n('version') . '</label>'; $n['field'] = '<p class="form-control-static" id="rex-js-install-packages-upload-version">' . ($new ? $newVersion : $file['version']) . '</p> <input type="hidden" name="upload[oldversion]" value="' . $file['version'] . '" />';