[ Index ]

PHP Cross Reference of moodle-2.8

title

Body

[close]

/admin/ -> plugins.php (source)

   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   * Supported HTTP parameters:
  22   *
  23   *  ?fetchremote=1      - check for available updates
  24   *  ?updatesonly=1      - display plugins with available update only
  25   *  ?contribonly=1      - display non-standard add-ons only
  26   *  ?uninstall=foo_bar  - uninstall the given plugin
  27   *  ?delete=foo_bar     - delete the plugin folder (it must not be installed)
  28   *  &confirm=1          - confirm the uninstall or delete action
  29   *
  30   * @package    core
  31   * @subpackage admin
  32   * @copyright  2011 David Mudrak <[email protected]>
  33   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  34   */
  35  
  36  require_once(dirname(dirname(__FILE__)) . '/config.php');
  37  require_once($CFG->libdir . '/adminlib.php');
  38  require_once($CFG->libdir . '/filelib.php');
  39  
  40  $fetchremote = optional_param('fetchremote', false, PARAM_BOOL);
  41  $updatesonly = optional_param('updatesonly', false, PARAM_BOOL);
  42  $contribonly = optional_param('contribonly', false, PARAM_BOOL);
  43  $uninstall   = optional_param('uninstall', '', PARAM_COMPONENT);
  44  $delete      = optional_param('delete', '', PARAM_COMPONENT);
  45  $confirmed   = optional_param('confirm', false, PARAM_BOOL);
  46  $return      = optional_param('return', 'overview', PARAM_ALPHA);
  47  
  48  // NOTE: do not use admin_externalpage_setup() here because it loads
  49  //       full admin tree which is not possible during uninstallation.
  50  
  51  require_login();
  52  $syscontext = context_system::instance();
  53  require_capability('moodle/site:config', $syscontext);
  54  
  55  $pluginman = core_plugin_manager::instance();
  56  
  57  if ($uninstall) {
  58      require_sesskey();
  59  
  60      if (!$confirmed) {
  61          admin_externalpage_setup('pluginsoverview');
  62      } else {
  63          $PAGE->set_url('/admin/plugins.php');
  64          $PAGE->set_context($syscontext);
  65          $PAGE->set_pagelayout('maintenance');
  66          $PAGE->set_popup_notification_allowed(false);
  67      }
  68  
  69      /** @var core_admin_renderer $output */
  70      $output = $PAGE->get_renderer('core', 'admin');
  71  
  72      $pluginfo = $pluginman->get_plugin_info($uninstall);
  73  
  74      // Make sure we know the plugin.
  75      if (is_null($pluginfo)) {
  76          throw new moodle_exception('err_uninstalling_unknown_plugin', 'core_plugin', '', array('plugin' => $uninstall),
  77              'core_plugin_manager::get_plugin_info() returned null for the plugin to be uninstalled');
  78      }
  79  
  80      $pluginname = $pluginman->plugin_name($pluginfo->component);
  81      $PAGE->set_title($pluginname);
  82      $PAGE->navbar->add(get_string('uninstalling', 'core_plugin', array('name' => $pluginname)));
  83  
  84      if (!$pluginman->can_uninstall_plugin($pluginfo->component)) {
  85          throw new moodle_exception('err_cannot_uninstall_plugin', 'core_plugin', '',
  86              array('plugin' => $pluginfo->component),
  87              'core_plugin_manager::can_uninstall_plugin() returned false');
  88      }
  89  
  90      if (!$confirmed) {
  91          $continueurl = new moodle_url($PAGE->url, array('uninstall' => $pluginfo->component, 'sesskey' => sesskey(), 'confirm' => 1, 'return'=>$return));
  92          $cancelurl = $pluginfo->get_return_url_after_uninstall($return);
  93          echo $output->plugin_uninstall_confirm_page($pluginman, $pluginfo, $continueurl, $cancelurl);
  94          exit();
  95  
  96      } else {
  97          $SESSION->pluginuninstallreturn = $pluginfo->get_return_url_after_uninstall($return);
  98          $progress = new progress_trace_buffer(new text_progress_trace(), false);
  99          $pluginman->uninstall_plugin($pluginfo->component, $progress);
 100          $progress->finished();
 101  
 102          if ($pluginman->is_plugin_folder_removable($pluginfo->component)) {
 103              $continueurl = new moodle_url($PAGE->url, array('delete' => $pluginfo->component, 'sesskey' => sesskey(), 'confirm' => 1));
 104              echo $output->plugin_uninstall_results_removable_page($pluginman, $pluginfo, $progress, $continueurl);
 105              // Reset op code caches.
 106              if (function_exists('opcache_reset')) {
 107                  opcache_reset();
 108              }
 109              exit();
 110  
 111          } else {
 112              echo $output->plugin_uninstall_results_page($pluginman, $pluginfo, $progress);
 113              // Reset op code caches.
 114              if (function_exists('opcache_reset')) {
 115                  opcache_reset();
 116              }
 117              exit();
 118          }
 119      }
 120  }
 121  
 122  if ($delete and $confirmed) {
 123      require_sesskey();
 124  
 125      $PAGE->set_url('/admin/plugins.php');
 126      $PAGE->set_context($syscontext);
 127      $PAGE->set_pagelayout('maintenance');
 128      $PAGE->set_popup_notification_allowed(false);
 129  
 130      /** @var core_admin_renderer $output */
 131      $output = $PAGE->get_renderer('core', 'admin');
 132  
 133      $pluginfo = $pluginman->get_plugin_info($delete);
 134  
 135      // Make sure we know the plugin.
 136      if (is_null($pluginfo)) {
 137          throw new moodle_exception('err_removing_unknown_plugin', 'core_plugin', '', array('plugin' => $delete),
 138              'core_plugin_manager::get_plugin_info() returned null for the plugin to be deleted');
 139      }
 140  
 141      $pluginname = $pluginman->plugin_name($pluginfo->component);
 142      $PAGE->set_title($pluginname);
 143      $PAGE->navbar->add(get_string('uninstalling', 'core_plugin', array('name' => $pluginname)));
 144  
 145      // Make sure it is not installed.
 146      if (!is_null($pluginfo->versiondb)) {
 147          throw new moodle_exception('err_removing_installed_plugin', 'core_plugin', '',
 148              array('plugin' => $pluginfo->component, 'versiondb' => $pluginfo->versiondb),
 149              'core_plugin_manager::get_plugin_info() returned not-null versiondb for the plugin to be deleted');
 150      }
 151  
 152      // Make sure the folder is removable.
 153      if (!$pluginman->is_plugin_folder_removable($pluginfo->component)) {
 154          throw new moodle_exception('err_removing_unremovable_folder', 'core_plugin', '',
 155              array('plugin' => $pluginfo->component, 'rootdir' => $pluginfo->rootdir),
 156              'plugin root folder is not removable as expected');
 157      }
 158  
 159      // Make sure the folder is within Moodle installation tree.
 160      if (strpos($pluginfo->rootdir, $CFG->dirroot) !== 0) {
 161          throw new moodle_exception('err_unexpected_plugin_rootdir', 'core_plugin', '',
 162              array('plugin' => $pluginfo->component, 'rootdir' => $pluginfo->rootdir, 'dirroot' => $CFG->dirroot),
 163              'plugin root folder not in the moodle dirroot');
 164      }
 165  
 166      // So long, and thanks for all the bugs.
 167      fulldelete($pluginfo->rootdir);
 168      // Reset op code caches.
 169      if (function_exists('opcache_reset')) {
 170          opcache_reset();
 171      }
 172      // We need to execute upgrade to make sure everything including caches is up to date.
 173      redirect(new moodle_url('/admin/index.php'));
 174  }
 175  
 176  admin_externalpage_setup('pluginsoverview');
 177  
 178  /** @var core_admin_renderer $output */
 179  $output = $PAGE->get_renderer('core', 'admin');
 180  
 181  $checker = \core\update\checker::instance();
 182  
 183  // Filtering options.
 184  $options = array(
 185      'updatesonly' => $updatesonly,
 186      'contribonly' => $contribonly,
 187  );
 188  
 189  if ($fetchremote) {
 190      require_sesskey();
 191      $checker->fetch();
 192      redirect(new moodle_url($PAGE->url, $options));
 193  }
 194  
 195  $deployer = \core\update\deployer::instance();
 196  if ($deployer->enabled()) {
 197      $myurl = new moodle_url($PAGE->url, array('updatesonly' => $updatesonly, 'contribonly' => $contribonly));
 198      $deployer->initialize($myurl, new moodle_url('/admin'));
 199  
 200      $deploydata = $deployer->submitted_data();
 201      if (!empty($deploydata)) {
 202          echo $output->upgrade_plugin_confirm_deploy_page($deployer, $deploydata);
 203          die();
 204      }
 205  }
 206  
 207  echo $output->plugin_management_page($pluginman, $checker, $options);


Generated: Fri Nov 28 20:29:05 2014 Cross-referenced by PHPXref 0.7.1