diff --git a/main/admin/index.php b/main/admin/index.php index bbc83292db..3a5ac68b7a 100644 --- a/main/admin/index.php +++ b/main/admin/index.php @@ -484,13 +484,7 @@ if (api_is_platform_admin()) { if (isset($_plugins['menu_administrator']) && count($_plugins['menu_administrator']) > 0 ) { - $menuAdministratorItems = []; - - $plugin_obj = new AppPlugin(); - $items = array(); - foreach ($_plugins['menu_administrator'] as $pluginName) { - $menuAdministratorItems[] = $pluginName; - } + $menuAdministratorItems = $_plugins['menu_administrator']; if ($menuAdministratorItems) { $blocks['plugins']['icon'] = Display::return_icon( @@ -500,45 +494,27 @@ if (api_is_platform_admin()) { ICON_SIZE_MEDIUM, false ); - $blocks['plugins']['label'] = api_ucfirst(get_lang('Plugins')); + $blocks['plugins']['label'] = get_lang('Plugins'); $blocks['plugins']['class'] = 'block-admin-platform'; $blocks['plugins']['editable'] = true; $plugin_obj = new AppPlugin(); $items = array(); - foreach ($menuAdministratorItems as $plugin_name) { - $plugin_info = $plugin_obj->getPluginInfo($plugin_name); + foreach ($menuAdministratorItems as $pluginName) { + $pluginInfo = $plugin_obj->getPluginInfo($pluginName); + /** @var \Plugin $plugin */ + $plugin = $pluginInfo['obj']; + $pluginUrl = $plugin->getAdminUrl(); - if ($plugin_info['is_admin_plugin'] === false) { + if (!$pluginUrl) { continue; } - if ($plugin_info['is_admin_plugin']) { - $itemUrl = '/admin.php'; - } elseif ($plugin_info['is_admin_plugin']) { - $itemUrl = '/start.php'; - } - - $itemUrl = $pluginName.'/start.php'; - - if (file_exists(api_get_path(SYS_PLUGIN_PATH).$itemUrl)) { - $items[] = array( - 'url' => api_get_path(WEB_PLUGIN_PATH).$itemUrl, - 'label' => $plugin_info['title'] - ); - - continue; - } - - $itemUrl = $pluginName.'/admin.php'; - - if (file_exists(api_get_path(SYS_PLUGIN_PATH).$itemUrl)) { - $items[] = array( - 'url' => api_get_path(WEB_PLUGIN_PATH).$itemUrl, - 'label' => $plugin_info['title'] - ); - } + $items[] = array( + 'url' => $pluginUrl, + 'label' => $pluginInfo['title'] + ); } $blocks['plugins']['items'] = $items; diff --git a/main/inc/lib/plugin.class.php b/main/inc/lib/plugin.class.php index 39edbbcaa8..139469a45d 100755 --- a/main/inc/lib/plugin.class.php +++ b/main/inc/lib/plugin.class.php @@ -894,4 +894,29 @@ class Plugin { return $this; } + + /** + * Get the admin URL for the plugin if Plugin::isAdminPlugin is true + * @return null|string + */ + public function getAdminUrl() + { + if (!$this->isAdminPlugin) { + return null; + } + + $name = $this->get_name(); + $sysPath = api_get_path(SYS_PLUGIN_PATH).$name; + $webPath = api_get_path(WEB_PLUGIN_PATH).$name; + + if (file_exists("$sysPath/admin.php")) { + return "$webPath/admin.php"; + } + + if (file_exists("$sysPath/start.php")) { + return "$webPath/start.php"; + } + + return null; + } }