See Release Notes
Long Term Support Release
Differences Between: [Versions 39 and 400] [Versions 39 and 401] [Versions 39 and 402] [Versions 39 and 403]
1 <?php 2 3 // This file is part of Moodle - http://moodle.org/ 4 // 5 // Moodle is free software: you can redistribute it and/or modify 6 // it under the terms of the GNU General Public License as published by 7 // the Free Software Foundation, either version 3 of the License, or 8 // (at your option) any later version. 9 // 10 // Moodle is distributed in the hope that it will be useful, 11 // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 // GNU General Public License for more details. 14 // 15 // You should have received a copy of the GNU General Public License 16 // along with Moodle. If not, see <http://www.gnu.org/licenses/>. 17 18 /** 19 * UI for general plugins management 20 * 21 * @package core 22 * @subpackage admin 23 * @copyright 2011 David Mudrak <david@moodle.com> 24 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 25 */ 26 27 require_once(__DIR__ . '/../config.php'); 28 require_once($CFG->libdir . '/adminlib.php'); 29 require_once($CFG->libdir . '/filelib.php'); 30 31 $fetchupdates = optional_param('fetchupdates', false, PARAM_BOOL); // Check for available plugins updates. 32 $updatesonly = optional_param('updatesonly', false, PARAM_BOOL); // Show updateable plugins only. 33 $contribonly = optional_param('contribonly', false, PARAM_BOOL); // Show additional plugins only. 34 $uninstall = optional_param('uninstall', '', PARAM_COMPONENT); // Uninstall the plugin. 35 $delete = optional_param('delete', '', PARAM_COMPONENT); // Delete the plugin folder after it is uninstalled. 36 $confirmed = optional_param('confirm', false, PARAM_BOOL); // Confirm the uninstall/delete action. 37 $return = optional_param('return', 'overview', PARAM_ALPHA); // Where to return after uninstall. 38 $installupdate = optional_param('installupdate', null, PARAM_COMPONENT); // Install given available update. 39 $installupdateversion = optional_param('installupdateversion', null, PARAM_INT); // Version of the available update to install. 40 $installupdatex = optional_param('installupdatex', false, PARAM_BOOL); // Install all available plugin updates. 41 $confirminstallupdate = optional_param('confirminstallupdate', false, PARAM_BOOL); // Available update(s) install confirmed? 42 43 // NOTE: do not use admin_externalpage_setup() here because it loads 44 // full admin tree which is not possible during uninstallation. 45 46 require_admin(); 47 $syscontext = context_system::instance(); 48 49 // URL params we want to maintain on redirects. 50 $pageparams = array('updatesonly' => $updatesonly, 'contribonly' => $contribonly); 51 $pageurl = new moodle_url('/admin/plugins.php', $pageparams); 52 53 $pluginman = core_plugin_manager::instance(); 54 55 if ($uninstall) { 56 57 if (!$confirmed) { 58 admin_externalpage_setup('pluginsoverview', '', $pageparams); 59 } else { 60 $PAGE->set_url($pageurl); 61 $PAGE->set_context($syscontext); 62 $PAGE->set_pagelayout('maintenance'); 63 $PAGE->set_popup_notification_allowed(false); 64 } 65 66 /** @var core_admin_renderer $output */ 67 $output = $PAGE->get_renderer('core', 'admin'); 68 69 $pluginfo = $pluginman->get_plugin_info($uninstall); 70 71 // Make sure we know the plugin. 72 if (is_null($pluginfo)) { 73 throw new moodle_exception('err_uninstalling_unknown_plugin', 'core_plugin', '', array('plugin' => $uninstall), 74 'core_plugin_manager::get_plugin_info() returned null for the plugin to be uninstalled'); 75 } 76 77 $pluginname = $pluginman->plugin_name($pluginfo->component); 78 $PAGE->set_title($pluginname); 79 $PAGE->navbar->add(get_string('uninstalling', 'core_plugin', array('name' => $pluginname))); 80 81 if (!$pluginman->can_uninstall_plugin($pluginfo->component)) { 82 throw new moodle_exception('err_cannot_uninstall_plugin', 'core_plugin', '', 83 array('plugin' => $pluginfo->component), 84 'core_plugin_manager::can_uninstall_plugin() returned false'); 85 } 86 87 if (!$confirmed) { 88 $continueurl = new moodle_url($PAGE->url, array('uninstall' => $pluginfo->component, 'sesskey' => sesskey(), 'confirm' => 1, 'return'=>$return)); 89 $cancelurl = $pluginfo->get_return_url_after_uninstall($return); 90 echo $output->plugin_uninstall_confirm_page($pluginman, $pluginfo, $continueurl, $cancelurl); 91 exit(); 92 93 } else { 94 require_sesskey(); 95 $SESSION->pluginuninstallreturn = $pluginfo->get_return_url_after_uninstall($return); 96 $progress = new progress_trace_buffer(new text_progress_trace(), false); 97 $pluginman->uninstall_plugin($pluginfo->component, $progress); 98 $progress->finished(); 99 100 if ($pluginman->is_plugin_folder_removable($pluginfo->component)) { 101 $continueurl = new moodle_url($PAGE->url, array('delete' => $pluginfo->component, 'sesskey' => sesskey(), 'confirm' => 1)); 102 echo $output->plugin_uninstall_results_removable_page($pluginman, $pluginfo, $progress, $continueurl); 103 // Reset op code caches. 104 if (function_exists('opcache_reset')) { 105 opcache_reset(); 106 } 107 exit(); 108 109 } else { 110 echo $output->plugin_uninstall_results_page($pluginman, $pluginfo, $progress); 111 // Reset op code caches. 112 if (function_exists('opcache_reset')) { 113 opcache_reset(); 114 } 115 exit(); 116 } 117 } 118 } 119 120 if ($delete and $confirmed) { 121 require_sesskey(); 122 123 $PAGE->set_url($pageurl); 124 $PAGE->set_context($syscontext); 125 $PAGE->set_pagelayout('maintenance'); 126 $PAGE->set_popup_notification_allowed(false); 127 128 /** @var core_admin_renderer $output */ 129 $output = $PAGE->get_renderer('core', 'admin'); 130 131 $pluginfo = $pluginman->get_plugin_info($delete); 132 133 // Make sure we know the plugin. 134 if (is_null($pluginfo)) { 135 throw new moodle_exception('err_removing_unknown_plugin', 'core_plugin', '', array('plugin' => $delete), 136 'core_plugin_manager::get_plugin_info() returned null for the plugin to be deleted'); 137 } 138 139 $pluginname = $pluginman->plugin_name($pluginfo->component); 140 $PAGE->set_title($pluginname); 141 $PAGE->navbar->add(get_string('uninstalling', 'core_plugin', array('name' => $pluginname))); 142 143 // Make sure it is not installed. 144 if (!is_null($pluginfo->versiondb)) { 145 throw new moodle_exception('err_removing_installed_plugin', 'core_plugin', '', 146 array('plugin' => $pluginfo->component, 'versiondb' => $pluginfo->versiondb), 147 'core_plugin_manager::get_plugin_info() returned not-null versiondb for the plugin to be deleted'); 148 } 149 150 // Make sure the folder is within Moodle installation tree. 151 if (strpos($pluginfo->rootdir, $CFG->dirroot) !== 0) { 152 throw new moodle_exception('err_unexpected_plugin_rootdir', 'core_plugin', '', 153 array('plugin' => $pluginfo->component, 'rootdir' => $pluginfo->rootdir, 'dirroot' => $CFG->dirroot), 154 'plugin root folder not in the moodle dirroot'); 155 } 156 157 // So long, and thanks for all the bugs. 158 $pluginman->remove_plugin_folder($pluginfo); 159 160 // We need to execute upgrade to make sure everything including caches is up to date. 161 redirect(new moodle_url('/admin/index.php')); 162 } 163 164 // Install all avilable updates. 165 if ($installupdatex) { 166 require_once($CFG->libdir.'/upgradelib.php'); 167 require_sesskey(); 168 169 $PAGE->set_url($pageurl); 170 $PAGE->set_context($syscontext); 171 $PAGE->set_pagelayout('maintenance'); 172 $PAGE->set_popup_notification_allowed(false); 173 174 $installable = $pluginman->filter_installable($pluginman->available_updates()); 175 upgrade_install_plugins($installable, $confirminstallupdate, 176 get_string('updateavailableinstallallhead', 'core_admin'), 177 new moodle_url($PAGE->url, array('installupdatex' => 1, 'confirminstallupdate' => 1)) 178 ); 179 } 180 181 // Install single available update. 182 if ($installupdate and $installupdateversion) { 183 require_once($CFG->libdir.'/upgradelib.php'); 184 require_sesskey(); 185 186 $PAGE->set_url($pageurl); 187 $PAGE->set_context($syscontext); 188 $PAGE->set_pagelayout('maintenance'); 189 $PAGE->set_popup_notification_allowed(false); 190 191 if ($pluginman->is_remote_plugin_installable($installupdate, $installupdateversion)) { 192 $installable = array($pluginman->get_remote_plugin_info($installupdate, $installupdateversion, true)); 193 upgrade_install_plugins($installable, $confirminstallupdate, 194 get_string('updateavailableinstallallhead', 'core_admin'), 195 new moodle_url($PAGE->url, array('installupdate' => $installupdate, 196 'installupdateversion' => $installupdateversion, 'confirminstallupdate' => 1) 197 ) 198 ); 199 } 200 } 201 202 admin_externalpage_setup('pluginsoverview', '', $pageparams); 203 204 /** @var core_admin_renderer $output */ 205 $output = $PAGE->get_renderer('core', 'admin'); 206 207 $checker = \core\update\checker::instance(); 208 209 if ($fetchupdates) { 210 require_sesskey(); 211 $checker->fetch(); 212 redirect($PAGE->url); 213 } 214 215 echo $output->plugin_management_page($pluginman, $checker, $pageparams);
title
Description
Body
title
Description
Body
title
Description
Body
title
Body