[ Index ]

PHP Cross Reference of Unnamed Project

title

Body

[close]

/repository/ -> manage_instances.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  /**
  20   * This file is used to manage repositories
  21   *
  22   * @since Moodle 2.0
  23   * @package    core
  24   * @subpackage repository
  25   * @copyright  2009 Dongsheng Cai <dongsheng@moodle.com>
  26   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  27   */
  28  
  29  require_once(__DIR__ . '/../config.php');
  30  require_once($CFG->dirroot . '/repository/lib.php');
  31  
  32  $edit    = optional_param('edit', 0, PARAM_INT);
  33  $new     = optional_param('new', '', PARAM_ALPHANUMEXT);
  34  $delete  = optional_param('delete', 0, PARAM_INT);
  35  $sure    = optional_param('sure', '', PARAM_ALPHA);
  36  $contextid = optional_param('contextid', 0, PARAM_INT);
  37  $usercourseid = optional_param('usercourseid', SITEID, PARAM_INT);  // Extra: used for user context only
  38  
  39  $url = new moodle_url('/repository/manage_instances.php');
  40  
  41  $baseurl = new moodle_url('/repository/manage_instances.php');
  42  $baseurl->param('sesskey', sesskey());
  43  
  44  if ($edit){
  45      $url->param('edit', $edit);
  46      $pagename = 'repositoryinstanceedit';
  47  } else if ($delete) {
  48      $url->param('delete', $delete);
  49      $pagename = 'repositorydelete';
  50  } else if ($new) {
  51      $url->param('new', $new);
  52      $pagename = 'repositoryinstancenew';
  53  } else {
  54      $pagename = 'repositorylist';
  55  }
  56  
  57  if ($sure !== '') {
  58      $url->param('sure', $sure);
  59  }
  60  if ($contextid !== 0) {
  61      $url->param('contextid', $contextid);
  62      $baseurl->param('contextid', $contextid);
  63  }
  64  if ($usercourseid != SITEID) {
  65      $url->param('usercourseid', $usercourseid);
  66  }
  67  
  68  $context = context::instance_by_id($contextid);
  69  
  70  $PAGE->set_url($url);
  71  $PAGE->set_context($context);
  72  $PAGE->set_pagelayout('standard');
  73  
  74  /// Security: make sure we're allowed to do this operation
  75  if ($context->contextlevel == CONTEXT_COURSE) {
  76      $pagename = get_string("repositorycourse",'repository');
  77  
  78      if ( !$course = $DB->get_record('course', array('id'=>$context->instanceid))) {
  79          print_error('invalidcourseid');
  80      }
  81      require_login($course, false);
  82      // If the user is allowed to edit this course, he's allowed to edit list of repository instances
  83      require_capability('moodle/course:update',  $context);
  84  
  85  
  86  } else if ($context->contextlevel == CONTEXT_USER) {
  87      require_login();
  88      $pagename = get_string('manageinstances', 'repository');
  89      //is the user looking at its own repository instances
  90      if ($USER->id != $context->instanceid){
  91          print_error('notyourinstances', 'repository');
  92      }
  93      $user = $USER;
  94      $PAGE->set_pagelayout('mydashboard');
  95  } else {
  96      print_error('invalidcontext');
  97  }
  98  
  99  /// Security: we cannot perform any action if the type is not visible or if the context has been disabled
 100  if (!empty($new) && empty($edit)){
 101      $type = repository::get_type_by_typename($new);
 102  } else if (!empty($edit)){
 103      $instance = repository::get_instance($edit);
 104      $type = repository::get_type_by_id($instance->options['typeid']);
 105  } else if (!empty($delete)){
 106      $instance = repository::get_instance($delete);
 107      $type = repository::get_type_by_id($instance->options['typeid']);
 108  }
 109  
 110  if (isset($type)) {
 111      if (!$type->get_visible()) {
 112          print_error('typenotvisible', 'repository', $baseurl);
 113      }
 114      // Prevents the user from creating/editing an instance if the repository is not visible in
 115      // this context OR if the user does not have the capability to view this repository in this context.
 116      $canviewrepository = has_capability('repository/'.$type->get_typename().':view', $context);
 117      if (!$type->get_contextvisibility($context) || !$canviewrepository) {
 118          print_error('usercontextrepositorydisabled', 'repository', $baseurl);
 119      }
 120  }
 121  
 122  // We have an instance when we are going to edit, or delete. Several checks need to be done!
 123  if (!empty($instance)) {
 124      // The context passed MUST match the context of the repository. And as both have to be
 125      // similar, this also ensures that the context is either a user one, or a course one.
 126      if ($instance->instance->contextid != $context->id) {
 127          print_error('invalidcontext');
 128      }
 129      if ($instance->readonly) {
 130          // Cannot edit, or delete a readonly instance.
 131          throw new repository_exception('readonlyinstance', 'repository');
 132      } else if (!$instance->can_be_edited_by_user()) {
 133          // The user has to have the right to edit the instance.
 134          throw new repository_exception('nopermissiontoaccess', 'repository');
 135      }
 136  }
 137  
 138  // Create navigation links.
 139  if (!empty($course)) {
 140      $pageheading = $course->fullname;
 141  } else {
 142      $pageheading = $pagename;
 143  }
 144  
 145  // Display page header.
 146  $PAGE->set_title($pagename);
 147  $PAGE->set_heading($pageheading);
 148  
 149  $return = true;
 150  if (!empty($edit) || !empty($new)) {
 151      if (!empty($edit)) {
 152          $instancetype = repository::get_type_by_id($instance->options['typeid']);
 153          $classname = 'repository_' . $instancetype->get_typename();
 154          $configs  = $instance->get_instance_option_names();
 155          $plugin = $instancetype->get_typename();
 156          $typeid = $instance->options['typeid'];
 157      } else {
 158          $plugin = $new;
 159          $typeid = $new;
 160          $instance = null;
 161      }
 162  
 163  /// Create edit form for this instance
 164      $mform = new repository_instance_form('', array('plugin' => $plugin, 'typeid' => $typeid,'instance' => $instance, 'contextid' => $contextid));
 165  
 166  /// Process the form data if any, or display
 167      if ($mform->is_cancelled()){
 168          redirect($baseurl);
 169          exit;
 170  
 171      } else if ($fromform = $mform->get_data()){
 172          if (!confirm_sesskey()) {
 173              print_error('confirmsesskeybad', '', $baseurl);
 174          }
 175          if ($edit) {
 176              $settings = array();
 177              $settings['name'] = $fromform->name;
 178              foreach($configs as $config) {
 179                  $settings[$config] = isset($fromform->$config) ? $fromform->$config : null;
 180              }
 181              $success = $instance->set_option($settings);
 182          } else {
 183              $success = repository::static_function($plugin, 'create', $plugin, 0, context::instance_by_id($contextid), $fromform);
 184              $data = data_submitted();
 185          }
 186          if ($success) {
 187              $savedstr = get_string('configsaved', 'repository');
 188              redirect($baseurl);
 189          } else {
 190              print_error('instancenotsaved', 'repository', $baseurl);
 191          }
 192          exit;
 193      } else {     // Display the form
 194          echo $OUTPUT->header();
 195          echo $OUTPUT->heading(get_string('configplugin', 'repository_'.$plugin));
 196          $OUTPUT->box_start();
 197          $mform->display();
 198          $OUTPUT->box_end();
 199          $return = false;
 200      }
 201  } else if (!empty($delete)) {
 202      if ($sure) {
 203          if (!confirm_sesskey()) {
 204              print_error('confirmsesskeybad', '', $baseurl);
 205          }
 206          if ($instance->delete()) {
 207              $deletedstr = get_string('instancedeleted', 'repository');
 208              redirect($baseurl, $deletedstr, 3);
 209          } else {
 210              print_error('instancenotdeleted', 'repository', $baseurl);
 211          }
 212          exit;
 213      }
 214      echo $OUTPUT->header();
 215      $formcontinue = new single_button(new moodle_url($baseurl, array('delete' => $delete, 'sure' => 'yes')), get_string('yes'));
 216      $formcancel = new single_button($baseurl, get_string('no'));
 217      echo $OUTPUT->confirm(get_string('confirmdelete', 'repository', $instance->name), $formcontinue, $formcancel);
 218      $return = false;
 219  } else {
 220      echo $OUTPUT->header();
 221      repository::display_instances_list($context);
 222      $return = false;
 223  }
 224  
 225  if (!empty($return)) {
 226      redirect($baseurl);
 227  }
 228  
 229  echo $OUTPUT->footer();


Generated: Thu Aug 11 10:00:09 2016 Cross-referenced by PHPXref 0.7.1