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); }
function setProperty($plugin, $property, $value) { global $REX; // Plugin in Liste aufnehmen $plugins = OOPlugin::getRegisteredPlugins(); if (!in_array($plugin, $plugins)) { $plugins[$plugin] = $plugin; OOAddon::setProperty('community', 'pluginlist', $plugins); } if (!isset($REX['ADDON']['plugins']['community'][$plugin])) { $REX['ADDON']['plugins']['community'][$plugin] = array(); } // Property fuer das Plugin setzen $REX['ADDON']['plugins']['community'][$plugin][$property] = $value; }
exit; } } // ----------------- OUT if ($subpage == '') { // Vergleiche Addons aus dem Verzeichnis addons/ mit den Eintraegen in include/addons.inc.php // Wenn ein Addon in der Datei fehlt oder nicht mehr vorhanden ist, aendere den Dateiinhalt. if (count(array_diff($ADDONS, OOAddon::getRegisteredAddons())) > 0 || count(array_diff(OOAddon::getRegisteredAddons(), $ADDONS)) > 0) { if (($state = rex_generateAddons($ADDONS)) !== true) { $warning .= $state; } } // Vergleiche plugins aus dem Verzeichnis plugins/ mit den Eintraegen in include/plugins.inc.php // Wenn ein plugin in der Datei fehlt oder nicht mehr vorhanden ist, aendere den Dateiinhalt. foreach ($ADDONS as $addon) { if (count(array_diff($PLUGINS[$addon], OOPlugin::getRegisteredPlugins($addon))) > 0 || count(array_diff(OOPlugin::getRegisteredPlugins($addon), $PLUGINS[$addon])) > 0) { if (($state = rex_generateplugins($PLUGINS)) !== true) { $warning .= $state; break; } } } if ($info != '') { echo rex_info($info); } if ($warning != '' && $warning !== true) { echo rex_warning($warning); } if (!isset($user_id)) { $user_id = ''; }
$info = $I18N_COM->msg("plugin_activated", $pluginname); } } elseif ($activate == 0) { if (($warning = rex_deactivate_plugin($plugins, $pluginname)) === true) { $info = $I18N_COM->msg("plugin_deactivated", $pluginname); } } elseif ($uninstall == 1) { if (($warning = rex_uninstall_plugin($plugins, $pluginname)) === true) { $info = $I18N_COM->msg("plugin_uninstalled", $pluginname); } } } // ----------------- OUT // Vergleiche plugins aus dem Verzeichnis plugins/ mit den Eintraegen in include/plugins.inc.php // Wenn ein plugin in der Datei fehlt oder nicht mehr vorhanden ist, aendere den Dateiinhalt. if (count(array_diff($plugins, OOPlugin::getRegisteredPlugins())) > 0 || count(array_diff(OOPlugin::getRegisteredPlugins(), $plugins)) > 0) { if (($state = rex_generateplugins($plugins)) !== true) { $warning = $state; } } if ($info != '') { echo rex_info($info); } if ($warning != '' && $warning !== true) { echo rex_warning($warning); } // ----------------- HELPPAGE if ($function == 'help' && $pluginname != '') { $helpfile = rex_plugins_dir($pluginname) . 'help.inc.php'; echo '<p class="rex-hdl">' . $I18N_COM->msg("plugin_help") . ' ' . $pluginname . '</p> <div class="rex-adn-hlp">';
function getInstalledPlugins($addon) { $avail = array(); foreach (OOPlugin::getRegisteredPlugins($addon) as $plugin) { if (OOPlugin::isInstalled($addon, $plugin)) { $avail[] = $plugin; } } return $avail; }
function rex_generatePlugins($plugins) { global $REX; natsort($plugins); $content = ""; foreach ($plugins as $cur) { if (!OOPlugin::isInstalled($cur)) { OOPlugin::setProperty($cur, 'install', 0); } if (!OOPlugin::isActivated($cur)) { OOPlugin::setProperty($cur, 'status', 0); } $content .= sprintf("%s = %d;\n%s = %d;\n\n", OOPlugin::getAsPropertyString($cur, 'install'), OOPlugin::getProperty($cur, 'install'), OOPlugin::getAsPropertyString($cur, 'status'), OOPlugin::getProperty($cur, 'status')); } $content .= sprintf("\$REX['ADDON']['pluginlist']['community'] = \"%s\";", implode(',', OOPlugin::getRegisteredPlugins())); // Da dieser Funktion öfter pro request aufgerufen werden kann, // hier die caches löschen clearstatcache(); $file = rex_plugins_file(); if (!rex_replace_dynamic_contents($file, $content)) { return 'Datei "' . $file . '" hat keine Schreibrechte'; } return true; }