/** * Dispatch a module view request. * * @return mixed */ public function dispatch() { if (!SecurityUtil::checkPermission('Extensions::', '::', ACCESS_ADMIN)) { return LogUtil::registerPermissionError(); } // Get input. $moduleName = $this->request->getGet()->filter('_module', null, FILTER_SANITIZE_STRING); $pluginName = $this->request->getGet()->filter('_plugin', null, FILTER_SANITIZE_STRING); $action = $this->request->getGet()->filter('_action', null, FILTER_SANITIZE_STRING); // Load plugins. if (!$moduleName) { $type = 'SystemPlugin'; PluginUtil::loadAllSystemPlugins(); } else { $type = 'ModulePlugin'; PluginUtil::loadAllModulePlugins(); } if ($moduleName) { $serviceId = PluginUtil::getServiceId("{$type}_{$moduleName}_{$pluginName}_Plugin"); } else { $serviceId = PluginUtil::getServiceId("{$type}_{$pluginName}_Plugin"); } $this->throwNotFoundUnless($this->serviceManager->hasService($serviceId)); $this->plugin = $this->serviceManager->getService($serviceId); // Sanity checks. $this->throwNotFoundUnless($this->plugin->isInstalled(), __f('Plugin "%s" is not installed', $this->plugin->getMetaDisplayName())); $this->throwForbiddenUnless($this->plugin instanceof Zikula_Plugin_ConfigurableInterface, __f('Plugin "%s" is not configurable', $this->plugin->getMetaDisplayName())); $this->pluginController = $this->plugin->getConfigurationController(); $this->throwNotFoundUnless($this->pluginController->getReflection()->hasMethod($action)); return $this->pluginController->{$action}(); }
public function uninstall() { // delete editor plugins $classes = PluginUtil::loadAllModulePlugins(); foreach ($classes as $class) { if (strpos($class, 'Scribite') !== false) { try { PluginUtil::uninstall($class); } catch (Exception $e) { LogUtil::registerError($e->getMessage()); } } } // delete module variables $this->delVars(); // remove hook HookUtil::unregisterProviderBundles($this->version->getHookProviderBundles()); // deletion successful return true; }
/** * Lists all plugins. * @return string HTML output string */ public function viewPlugins() { // Security check if (!SecurityUtil::checkPermission('Extensions::', '::', ACCESS_ADMIN)) { return LogUtil::registerPermissionError(); } $state = FormUtil::getPassedValue('state', -1, 'GETPOST'); $sort = FormUtil::getPassedValue('sort', null, 'GETPOST'); $module = FormUtil::getPassedValue('bymodule', null, 'GETPOST'); $systemplugins = FormUtil::getPassedValue('systemplugins', false, 'GETPOST')? true : null; $this->view->assign('state', $state); // generate an auth key to use in urls $csrfToken = SecurityUtil::generateCsrfToken($this->serviceManager, true); $plugins = array(); $pluginClasses = ($systemplugins) ? PluginUtil::loadAllSystemPlugins() : PluginUtil::loadAllModulePlugins(); foreach ($pluginClasses as $className) { $instance = PluginUtil::loadPlugin($className); $pluginstate = PluginUtil::getState($instance->getServiceId(), PluginUtil::getDefaultState()); // Tweak UI if the plugin is AlwaysOn if ($instance instanceof Zikula_Plugin_AlwaysOnInterface) { $pluginstate['state'] = PluginUtil::ENABLED; $pluginstate['version'] = $instance->getMetaVersion(); } // state filer if ($state >= 0 && $pluginstate['state'] != $state) { continue; } // module filter if (!empty($module) && $instance->getModuleName() != $module) { continue; } $actions = array(); // Translate state switch ($pluginstate['state']) { case PluginUtil::NOTINSTALLED: $status = $this->__('Not installed'); $statusimage = 'redled.png'; $actions[] = array('url' => ModUtil::url('Extensions', 'admin', 'initialisePlugin', array('plugin' => $className, 'state' => $state, 'bymodule' => $module, 'sort' => $sort, 'systemplugins' => $systemplugins, 'csrftoken' => $csrfToken) ), 'image' => 'folder_new.png', 'title' => $this->__('Install')); break; case PluginUtil::ENABLED: $status = $this->__('Active'); $statusimage = 'greenled.png'; $pluginLink = array(); if (!$systemplugins) { $pluginLink['_module'] = $instance->getModuleName(); } $pluginLink['_plugin'] = $instance->getPluginName(); $pluginLink['_action'] = 'configure'; if ($instance instanceof Zikula_Plugin_ConfigurableInterface) { $actions[] = array('url' => ModUtil::url('Extensions', 'adminplugin', 'dispatch', $pluginLink), 'image' => 'configure.png', 'title' => $this->__('Configure plugin')); } // Dont allow to disable/uninstall plugins that are AlwaysOn if (!$instance instanceof Zikula_Plugin_AlwaysOnInterface) { $actions[] = array('url' => ModUtil::url('Extensions', 'admin', 'deactivatePlugin', array('plugin' => $className, 'state' => $state, 'bymodule' => $module, 'sort' => $sort, 'systemplugins' => $systemplugins, 'csrftoken' => $csrfToken) ), 'image' => 'folder_red.png', 'title' => $this->__('Deactivate')); $actions[] = array('url' => ModUtil::url('Extensions', 'admin', 'removePlugin', array('plugin' => $className, 'state' => $state, 'bymodule' => $module, 'sort' => $sort, 'systemplugins' => $systemplugins, 'csrftoken' => $csrfToken) ), 'image' => '14_layer_deletelayer.png', 'title' => $this->__('Remove plugin')); } break; case PluginUtil::DISABLED: $status = $this->__('Inactive'); $statusimage = 'yellowled.png'; $actions[] = array('url' => ModUtil::url('Extensions', 'admin', 'activatePlugin', array('plugin' => $className, 'state' => $state, 'bymodule' => $module, 'sort' => $sort, 'systemplugins' => $systemplugins, 'csrftoken' => $csrfToken) ), 'image' => 'folder_green.png', 'title' => $this->__('Activate')); $actions[] = array('url' => ModUtil::url('Extensions', 'admin', 'removePlugin', array('plugin' => $className, 'state' => $state, 'bymodule' => $module, 'sort' => $sort, 'systemplugins' => $systemplugins, 'csrftoken' => $csrfToken) ), 'image' => '14_layer_deletelayer.png', 'title' => $this->__('Remove plugin')); break; } // upgrade ? if ($pluginstate['state'] != PluginUtil::NOTINSTALLED && $pluginstate['version'] != $instance->getMetaVersion()) { $status = $this->__('New version'); $statusimage = 'redled.png'; $actions = array(); $actions[] = array('url' => ModUtil::url('Extensions', 'admin', 'upgradePlugin', array('plugin' => $className, 'state' => $state, 'bymodule' => $module, 'sort' => $sort, 'systemplugins' => $systemplugins, 'csrftoken' => $csrfToken) ), 'image' => 'folder_favorites.png', 'title' => $this->__('Upgrade')); $actions[] = array('url' => ModUtil::url('Extensions', 'admin', 'removePlugin', array('plugin' => $className, 'state' => $state, 'bymodule' => $module, 'sort' => $sort, 'systemplugins' => $systemplugins, 'csrftoken' => $csrfToken) ), 'image' => '14_layer_deletelayer.png', 'title' => $this->__('Remove plugin')); } $info = array('instance' => $instance, 'status' => $status, 'statusimage' => $statusimage, 'actions' => $actions, 'version' => $pluginstate['state'] == PluginUtil::NOTINSTALLED ? $instance->getMetaVersion() : $pluginstate['version']); // new version of plugin? if ($pluginstate['state'] != PluginUtil::NOTINSTALLED && $pluginstate['version'] != $instance->getMetaVersion()) { $info['newversion'] = $instance->getMetaVersion(); } $plugins[] = $info; } // sort plugins array if (empty($sort) || $sort == 'module') { usort($plugins, array($this, 'viewPluginsSorter_byModule')); } elseif ($sort == 'name') { usort($plugins, array($this, 'viewPluginsSorter_byName')); } $this->view->assign('plugins', $plugins) ->assign('module', $module) ->assign('sort', $sort) ->assign('state', $state) ->assign('systemplugins', $systemplugins) ->assign('_type', ($systemplugins) ? 'system' : 'module'); // Return the output that has been generated by this function return $this->view->fetch('extensions_admin_viewPlugins.tpl'); }