[ Index ]

PHP Cross Reference of moodle-2.8

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 <[email protected]>
  26   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  27   */
  28  
  29  require_once(dirname(dirname(__FILE__)) . '/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  
  73  /// Security: make sure we're allowed to do this operation
  74  if ($context->contextlevel == CONTEXT_COURSE) {
  75      $pagename = get_string("repositorycourse",'repository');
  76  
  77      if ( !$course = $DB->get_record('course', array('id'=>$context->instanceid))) {
  78          print_error('invalidcourseid');
  79      }
  80      require_login($course, false);
  81      // If the user is allowed to edit this course, he's allowed to edit list of repository instances
  82      require_capability('moodle/course:update',  $context);
  83  
  84  
  85  } else if ($context->contextlevel == CONTEXT_USER) {
  86      require_login();
  87      $pagename = get_string("personalrepositories",'repository');
  88      //is the user looking at its own repository instances
  89      if ($USER->id != $context->instanceid){
  90          print_error('notyourinstances', 'repository');
  91      }
  92      $user = $USER;
  93      $PAGE->set_pagelayout('mydashboard');
  94  } else {
  95      print_error('invalidcontext');
  96  }
  97  
  98  /// Security: we cannot perform any action if the type is not visible or if the context has been disabled
  99  if (!empty($new) && empty($edit)){
 100      $type = repository::get_type_by_typename($new);
 101  } else if (!empty($edit)){
 102      $instance = repository::get_instance($edit);
 103      $type = repository::get_type_by_id($instance->options['typeid']);
 104  } else if (!empty($delete)){
 105      $instance = repository::get_instance($delete);
 106      $type = repository::get_type_by_id($instance->options['typeid']);
 107  }
 108  
 109  if (isset($type)) {
 110      if (!$type->get_visible()) {
 111          print_error('typenotvisible', 'repository', $baseurl);
 112      }
 113      // Prevents the user from creating/editing an instance if the repository is not visible in
 114      // this context OR if the user does not have the capability to view this repository in this context.
 115      $canviewrepository = has_capability('repository/'.$type->get_typename().':view', $context);
 116      if (!$type->get_contextvisibility($context) || !$canviewrepository) {
 117          print_error('usercontextrepositorydisabled', 'repository', $baseurl);
 118      }
 119  }
 120  
 121  // We have an instance when we are going to edit, or delete. Several checks need to be done!
 122  if (!empty($instance)) {
 123      // The context passed MUST match the context of the repository. And as both have to be
 124      // similar, this also ensures that the context is either a user one, or a course one.
 125      if ($instance->instance->contextid != $context->id) {
 126          print_error('invalidcontext');
 127      }
 128      if ($instance->readonly) {
 129          // Cannot edit, or delete a readonly instance.
 130          throw new repository_exception('readonlyinstance', 'repository');
 131      } else if (!$instance->can_be_edited_by_user()) {
 132          // The user has to have the right to edit the instance.
 133          throw new repository_exception('nopermissiontoaccess', 'repository');
 134      }
 135  }
 136  
 137  /// Create navigation links
 138  if (!empty($course)) {
 139      $PAGE->navbar->add($pagename);
 140      $fullname = $course->fullname;
 141  } else {
 142      $fullname = fullname($user);
 143      $strrepos = get_string('repositories', 'repository');
 144      $PAGE->navbar->add($fullname, new moodle_url('/user/view.php', array('id'=>$user->id)));
 145      $PAGE->navbar->add($strrepos);
 146  }
 147  
 148  // Display page header.
 149  $PAGE->set_title($pagename);
 150  $PAGE->set_heading($fullname);
 151  
 152  $return = true;
 153  if (!empty($edit) || !empty($new)) {
 154      if (!empty($edit)) {
 155          $instancetype = repository::get_type_by_id($instance->options['typeid']);
 156          $classname = 'repository_' . $instancetype->get_typename();
 157          $configs  = $instance->get_instance_option_names();
 158          $plugin = $instancetype->get_typename();
 159          $typeid = $instance->options['typeid'];
 160      } else {
 161          $plugin = $new;
 162          $typeid = $new;
 163          $instance = null;
 164      }
 165  
 166  /// Create edit form for this instance
 167      $mform = new repository_instance_form('', array('plugin' => $plugin, 'typeid' => $typeid,'instance' => $instance, 'contextid' => $contextid));
 168  
 169  /// Process the form data if any, or display
 170      if ($mform->is_cancelled()){
 171          redirect($baseurl);
 172          exit;
 173  
 174      } else if ($fromform = $mform->get_data()){
 175          if (!confirm_sesskey()) {
 176              print_error('confirmsesskeybad', '', $baseurl);
 177          }
 178          if ($edit) {
 179              $settings = array();
 180              $settings['name'] = $fromform->name;
 181              foreach($configs as $config) {
 182                  $settings[$config] = isset($fromform->$config) ? $fromform->$config : null;
 183              }
 184              $success = $instance->set_option($settings);
 185          } else {
 186              $success = repository::static_function($plugin, 'create', $plugin, 0, context::instance_by_id($contextid), $fromform);
 187              $data = data_submitted();
 188          }
 189          if ($success) {
 190              $savedstr = get_string('configsaved', 'repository');
 191              redirect($baseurl);
 192          } else {
 193              print_error('instancenotsaved', 'repository', $baseurl);
 194          }
 195          exit;
 196      } else {     // Display the form
 197          echo $OUTPUT->header();
 198          echo $OUTPUT->heading(get_string('configplugin', 'repository_'.$plugin));
 199          $OUTPUT->box_start();
 200          $mform->display();
 201          $OUTPUT->box_end();
 202          $return = false;
 203      }
 204  } else if (!empty($delete)) {
 205      if ($sure) {
 206          if (!confirm_sesskey()) {
 207              print_error('confirmsesskeybad', '', $baseurl);
 208          }
 209          if ($instance->delete()) {
 210              $deletedstr = get_string('instancedeleted', 'repository');
 211              redirect($baseurl, $deletedstr, 3);
 212          } else {
 213              print_error('instancenotdeleted', 'repository', $baseurl);
 214          }
 215          exit;
 216      }
 217      echo $OUTPUT->header();
 218      $formcontinue = new single_button(new moodle_url($baseurl, array('delete' => $delete, 'sure' => 'yes')), get_string('yes'));
 219      $formcancel = new single_button($baseurl, get_string('no'));
 220      echo $OUTPUT->confirm(get_string('confirmdelete', 'repository', $instance->name), $formcontinue, $formcancel);
 221      $return = false;
 222  } else {
 223      echo $OUTPUT->header();
 224      repository::display_instances_list($context);
 225      $return = false;
 226  }
 227  
 228  if (!empty($return)) {
 229      redirect($baseurl);
 230  }
 231  
 232  echo $OUTPUT->footer();


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