/** * Synchronizes the packages with the file system. */ public static function synchronizeWithFileSystem() { $config = rex::getConfig('package-config'); $addons = self::readPackageFolder(rex_path::src('addons')); $registeredAddons = array_keys(rex_addon::getRegisteredAddons()); foreach (array_diff($registeredAddons, $addons) as $addonName) { $manager = rex_addon_manager::factory(rex_addon::get($addonName)); $manager->_delete(true); unset($config[$addonName]); } foreach ($addons as $addonName) { if (!rex_addon::exists($addonName)) { $config[$addonName]['install'] = false; $config[$addonName]['status'] = false; $registeredPlugins = []; } else { $addon = rex_addon::get($addonName); $config[$addonName]['install'] = $addon->isInstalled(); $config[$addonName]['status'] = $addon->isAvailable(); $registeredPlugins = array_keys($addon->getRegisteredPlugins()); } $plugins = self::readPackageFolder(rex_path::addon($addonName, 'plugins')); foreach (array_diff($registeredPlugins, $plugins) as $pluginName) { $manager = rex_plugin_manager::factory(rex_plugin::get($addonName, $pluginName)); $manager->_delete(true); unset($config[$addonName]['plugins'][$pluginName]); } foreach ($plugins as $pluginName) { $plugin = rex_plugin::get($addonName, $pluginName); $config[$addonName]['plugins'][$pluginName]['install'] = $plugin->isInstalled(); $config[$addonName]['plugins'][$pluginName]['status'] = $plugin->getProperty('status'); } if (isset($config[$addonName]['plugins']) && is_array($config[$addonName]['plugins'])) { ksort($config[$addonName]['plugins']); } } ksort($config); rex::setConfig('package-config', $config); rex_addon::initialize(); }
</tr>'; $class = ' mark'; } $version = trim($package->getVersion()) != '' ? ' <span class="rex-' . $type . '-version">' . trim($package->getVersion()) . '</span>' : ''; return $message . ' <tr class="rex-package-is-' . $type . $class . '"> <td class="rex-table-icon"><i class="rex-icon rex-icon-package-' . $type . '"></i></td> <td data-title="' . rex_i18n::msg('package_hname') . '">' . $name . '</td> <td data-title="' . rex_i18n::msg('package_hversion') . '">' . $version . '</td> <td class="rex-table-slim" data-title="' . rex_i18n::msg('package_hhelp') . '"><a href="' . rex_url::currentBackendPage(['subpage' => 'help', 'package' => $packageId]) . '" title="' . rex_i18n::msg('package_help') . ' ' . htmlspecialchars($package->getName()) . '"><i class="rex-icon rex-icon-help"></i> <span class="sr-only">' . rex_i18n::msg('package_help') . ' ' . htmlspecialchars($package->getName()) . '</span></a></td> <td class="rex-table-action" data-pjax-container="#rex-js-page-container">' . $install . '</td> <td class="rex-table-action" data-pjax-container="#rex-js-page-container">' . $status . '</td> <td class="rex-table-action" data-pjax-container="#rex-js-page-container">' . $uninstall . '</td> <td class="rex-table-action" data-pjax-container="#rex-js-page-container">' . $delete . '</td> </tr>' . "\n "; }; foreach (rex_addon::getRegisteredAddons() as $addonName => $addon) { $content .= $getTableRow($addon); if ($addon->isActivated()) { foreach ($addon->getRegisteredPlugins() as $pluginName => $plugin) { $content .= $getTableRow($plugin); } } } $content .= '</tbody> </table>'; $fragment = new rex_fragment(); $fragment->setVar('title', rex_i18n::msg('package_caption'), false); $fragment->setVar('content', $content, false); echo $fragment->parse('core/page/section.php'); }