/** * Plugins admin page * * @param App $a * @return string */ function admin_page_plugins(&$a) { /* * Single plugin */ if (\App::$argc == 3) { $plugin = \App::$argv[2]; if (!is_file("addon/{$plugin}/{$plugin}.php")) { notice(t("Item not found.")); return ''; } $enabled = in_array($plugin, \App::$plugins); $info = get_plugin_info($plugin); $x = check_plugin_versions($info); // disable plugins which are installed but incompatible versions if ($enabled && !$x) { $enabled = false; $idz = array_search($plugin, \App::$plugins); if ($idz !== false) { unset(\App::$plugins[$idz]); uninstall_plugin($plugin); set_config("system", "addon", implode(", ", \App::$plugins)); } } $info['disabled'] = 1 - intval($x); if (x($_GET, "a") && $_GET['a'] == "t") { check_form_security_token_redirectOnErr('/admin/plugins', 'admin_plugins', 't'); // Toggle plugin status $idx = array_search($plugin, \App::$plugins); if ($idx !== false) { unset(\App::$plugins[$idx]); uninstall_plugin($plugin); info(sprintf(t("Plugin %s disabled."), $plugin)); } else { \App::$plugins[] = $plugin; install_plugin($plugin); info(sprintf(t("Plugin %s enabled."), $plugin)); } set_config("system", "addon", implode(", ", \App::$plugins)); goaway(z_root() . '/admin/plugins'); } // display plugin details require_once 'library/markdown.php'; if (in_array($plugin, \App::$plugins)) { $status = 'on'; $action = t('Disable'); } else { $status = 'off'; $action = t('Enable'); } $readme = null; if (is_file("addon/{$plugin}/README.md")) { $readme = file_get_contents("addon/{$plugin}/README.md"); $readme = Markdown($readme); } else { if (is_file("addon/{$plugin}/README")) { $readme = "<pre>" . file_get_contents("addon/{$plugin}/README") . "</pre>"; } } $admin_form = ''; $r = q("select * from addon where plugin_admin = 1 and name = '%s' limit 1", dbesc($plugin)); if ($r) { @(require_once "addon/{$plugin}/{$plugin}.php"); if (function_exists($plugin . '_plugin_admin')) { $func = $plugin . '_plugin_admin'; $func($a, $admin_form); } } $t = get_markup_template('admin_plugins_details.tpl'); return replace_macros($t, array('$title' => t('Administration'), '$page' => t('Plugins'), '$toggle' => t('Toggle'), '$settings' => t('Settings'), '$baseurl' => z_root(), '$plugin' => $plugin, '$status' => $status, '$action' => $action, '$info' => $info, '$str_author' => t('Author: '), '$str_maintainer' => t('Maintainer: '), '$str_minversion' => t('Minimum project version: '), '$str_maxversion' => t('Maximum project version: '), '$str_minphpversion' => t('Minimum PHP version: '), '$str_requires' => t('Requires: '), '$disabled' => t('Disabled - version incompatibility'), '$admin_form' => $admin_form, '$function' => 'plugins', '$screenshot' => '', '$readme' => $readme, '$form_security_token' => get_form_security_token('admin_plugins'))); } /* * List plugins */ $plugins = array(); $files = glob('addon/*/'); if ($files) { foreach ($files as $file) { if (is_dir($file)) { list($tmp, $id) = array_map('trim', explode('/', $file)); $info = get_plugin_info($id); $enabled = in_array($id, \App::$plugins); $x = check_plugin_versions($info); // disable plugins which are installed but incompatible versions if ($enabled && !$x) { $enabled = false; $idz = array_search($id, \App::$plugins); if ($idz !== false) { unset(\App::$plugins[$idz]); uninstall_plugin($id); set_config("system", "addon", implode(", ", \App::$plugins)); } } $info['disabled'] = 1 - intval($x); $plugins[] = array($id, $enabled ? "on" : "off", $info); } } } usort($plugins, 'self::plugin_sort'); $admin_plugins_add_repo_form = replace_macros(get_markup_template('admin_plugins_addrepo.tpl'), array('$post' => 'admin/plugins/addrepo', '$desc' => t('Enter the public git repository URL of the plugin repo.'), '$repoURL' => array('repoURL', t('Plugin repo git URL'), '', ''), '$repoName' => array('repoName', t('Custom repo name'), '', '', t('(optional)')), '$submit' => t('Download Plugin Repo'))); $newRepoModalID = random_string(3); $newRepoModal = replace_macros(get_markup_template('generic_modal.tpl'), array('$id' => $newRepoModalID, '$title' => t('Install new repo'), '$ok' => t('Install'), '$cancel' => t('Cancel'))); $reponames = $this->listAddonRepos(); $addonrepos = []; foreach ($reponames as $repo) { $addonrepos[] = array('name' => $repo, 'description' => ''); // TODO: Parse repo info to provide more information about repos } $t = get_markup_template('admin_plugins.tpl'); return replace_macros($t, array('$title' => t('Administration'), '$page' => t('Plugins'), '$submit' => t('Submit'), '$baseurl' => z_root(), '$function' => 'plugins', '$plugins' => $plugins, '$disabled' => t('Disabled - version incompatibility'), '$form_security_token' => get_form_security_token('admin_plugins'), '$addrepo' => t('Add Plugin Repo'), '$expandform' => false, '$form' => $admin_plugins_add_repo_form, '$newRepoModal' => $newRepoModal, '$newRepoModalID' => $newRepoModalID, '$addonrepos' => $addonrepos, '$repoUpdateButton' => t('Update'), '$repoBranchButton' => t('Switch branch'), '$repoRemoveButton' => t('Remove'))); }
/** * Plugins admin page * * @param App $a * @return string */ function admin_page_plugins(&$a) { /* * Single plugin */ if ($a->argc == 3) { $plugin = $a->argv[2]; if (!is_file("addon/{$plugin}/{$plugin}.php")) { notice(t("Item not found.")); return ''; } $enabled = in_array($plugin, $a->plugins); $info = get_plugin_info($plugin); $x = check_plugin_versions($info); // disable plugins which are installed but incompatible versions if ($enabled && !$x) { $enabled = false; $idz = array_search($plugin, $a->plugins); if ($idz !== false) { unset($a->plugins[$idz]); uninstall_plugin($plugin); set_config("system", "addon", implode(", ", $a->plugins)); } } $info['disabled'] = 1 - intval($x); if (x($_GET, "a") && $_GET['a'] == "t") { check_form_security_token_redirectOnErr('/admin/plugins', 'admin_plugins', 't'); // Toggle plugin status $idx = array_search($plugin, $a->plugins); if ($idx !== false) { unset($a->plugins[$idx]); uninstall_plugin($plugin); info(sprintf(t("Plugin %s disabled."), $plugin)); } else { $a->plugins[] = $plugin; install_plugin($plugin); info(sprintf(t("Plugin %s enabled."), $plugin)); } set_config("system", "addon", implode(", ", $a->plugins)); goaway($a->get_baseurl(true) . '/admin/plugins'); } // display plugin details require_once 'library/markdown.php'; if (in_array($plugin, $a->plugins)) { $status = 'on'; $action = t('Disable'); } else { $status = 'off'; $action = t('Enable'); } $readme = null; if (is_file("addon/{$plugin}/README.md")) { $readme = file_get_contents("addon/{$plugin}/README.md"); $readme = Markdown($readme); } else { if (is_file("addon/{$plugin}/README")) { $readme = "<pre>" . file_get_contents("addon/{$plugin}/README") . "</pre>"; } } $admin_form = ''; $r = q("select * from addon where plugin_admin = 1 and name = '%s' limit 1", dbesc($plugin)); if ($r) { @(require_once "addon/{$plugin}/{$plugin}.php"); if (function_exists($plugin . '_plugin_admin')) { $func = $plugin . '_plugin_admin'; $func($a, $admin_form); } } $t = get_markup_template('admin_plugins_details.tpl'); return replace_macros($t, array('$title' => t('Administration'), '$page' => t('Plugins'), '$toggle' => t('Toggle'), '$settings' => t('Settings'), '$baseurl' => $a->get_baseurl(true), '$plugin' => $plugin, '$status' => $status, '$action' => $action, '$info' => $info, '$str_author' => t('Author: '), '$str_maintainer' => t('Maintainer: '), '$str_minversion' => t('Minimum project version: '), '$str_maxversion' => t('Maximum project version: '), '$str_minphpversion' => t('Minimum PHP version: '), '$disabled' => t('Disabled - version incompatibility'), '$admin_form' => $admin_form, '$function' => 'plugins', '$screenshot' => '', '$readme' => $readme, '$form_security_token' => get_form_security_token('admin_plugins'))); } /* * List plugins */ $plugins = array(); $files = glob('addon/*/'); if ($files) { foreach ($files as $file) { if (is_dir($file)) { list($tmp, $id) = array_map('trim', explode('/', $file)); $info = get_plugin_info($id); $enabled = in_array($id, $a->plugins); $x = check_plugin_versions($info); // disable plugins which are installed but incompatible versions if ($enabled && !$x) { $enabled = false; $idz = array_search($id, $a->plugins); if ($idz !== false) { unset($a->plugins[$idz]); uninstall_plugin($id); set_config("system", "addon", implode(", ", $a->plugins)); } } $info['disabled'] = 1 - intval($x); $plugins[] = array($id, $enabled ? "on" : "off", $info); } } } $t = get_markup_template('admin_plugins.tpl'); return replace_macros($t, array('$title' => t('Administration'), '$page' => t('Plugins'), '$submit' => t('Submit'), '$baseurl' => $a->get_baseurl(true), '$function' => 'plugins', '$plugins' => $plugins, '$disabled' => t('Disabled - version incompatibility'), '$form_security_token' => get_form_security_token('admin_plugins'))); }