[ Index ]

PHP Cross Reference of Unnamed Project

title

Body

[close]

/mod/lesson/ -> overrideedit.php (source)

   1  <?php
   2  // This file is part of Moodle - http://moodle.org/
   3  //
   4  // Moodle is free software: you can redistribute it and/or modify
   5  // it under the terms of the GNU General Public License as published by
   6  // the Free Software Foundation, either version 3 of the License, or
   7  // (at your option) any later version.
   8  //
   9  // Moodle is distributed in the hope that it will be useful,
  10  // but WITHOUT ANY WARRANTY; without even the implied warranty of
  11  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12  // GNU General Public License for more details.
  13  //
  14  // You should have received a copy of the GNU General Public License
  15  // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
  16  
  17  /**
  18   * This page handles editing and creation of lesson overrides
  19   *
  20   * @package   mod_lesson
  21   * @copyright 2015 Jean-Michel Vedrine
  22   * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  23   */
  24  
  25  
  26  require_once(__DIR__ . '/../../config.php');
  27  require_once($CFG->dirroot.'/mod/lesson/lib.php');
  28  require_once($CFG->dirroot.'/mod/lesson/locallib.php');
  29  require_once($CFG->dirroot.'/mod/lesson/override_form.php');
  30  
  31  
  32  $cmid = optional_param('cmid', 0, PARAM_INT);
  33  $overrideid = optional_param('id', 0, PARAM_INT);
  34  $action = optional_param('action', null, PARAM_ALPHA);
  35  $reset = optional_param('reset', false, PARAM_BOOL);
  36  
  37  $override = null;
  38  if ($overrideid) {
  39  
  40      if (! $override = $DB->get_record('lesson_overrides', array('id' => $overrideid))) {
  41          print_error('invalidoverrideid', 'lesson');
  42      }
  43  
  44      $lesson = new lesson($DB->get_record('lesson', array('id' => $override->lessonid), '*',  MUST_EXIST));
  45  
  46      list($course, $cm) = get_course_and_cm_from_instance($lesson, 'lesson');
  47  
  48  } else if ($cmid) {
  49      list($course, $cm) = get_course_and_cm_from_cmid($cmid, 'lesson');
  50      $lesson = new lesson($DB->get_record('lesson', array('id' => $cm->instance), '*', MUST_EXIST));
  51  
  52  } else {
  53      print_error('invalidcoursemodule');
  54  }
  55  $course = $DB->get_record('course', array('id' => $cm->course), '*', MUST_EXIST);
  56  
  57  $url = new moodle_url('/mod/lesson/overrideedit.php');
  58  if ($action) {
  59      $url->param('action', $action);
  60  }
  61  if ($overrideid) {
  62      $url->param('id', $overrideid);
  63  } else {
  64      $url->param('cmid', $cmid);
  65  }
  66  
  67  $PAGE->set_url($url);
  68  
  69  require_login($course, false, $cm);
  70  
  71  $context = context_module::instance($cm->id);
  72  
  73  // Add or edit an override.
  74  require_capability('mod/lesson:manageoverrides', $context);
  75  
  76  if ($overrideid) {
  77      // Editing an override.
  78      $data = clone $override;
  79  } else {
  80      // Creating a new override.
  81      $data = new stdClass();
  82  }
  83  
  84  // Merge lesson defaults with data.
  85  $keys = array('available', 'deadline', 'review', 'timelimit', 'maxattempts', 'retake', 'password');
  86  foreach ($keys as $key) {
  87      if (!isset($data->{$key}) || $reset) {
  88          $data->{$key} = $lesson->{$key};
  89      }
  90  }
  91  
  92  // True if group-based override.
  93  $groupmode = !empty($data->groupid) || ($action === 'addgroup' && empty($overrideid));
  94  
  95  // If we are duplicating an override, then clear the user/group and override id
  96  // since they will change.
  97  if ($action === 'duplicate') {
  98      $override->id = $data->id = null;
  99      $override->userid = $data->userid = null;
 100      $override->groupid = $data->groupid = null;
 101  }
 102  
 103  $overridelisturl = new moodle_url('/mod/lesson/overrides.php', array('cmid' => $cm->id));
 104  if (!$groupmode) {
 105      $overridelisturl->param('mode', 'user');
 106  }
 107  
 108  // Setup the form.
 109  $mform = new lesson_override_form($url, $cm, $lesson, $context, $groupmode, $override);
 110  $mform->set_data($data);
 111  
 112  if ($mform->is_cancelled()) {
 113      redirect($overridelisturl);
 114  
 115  } else if (optional_param('resetbutton', 0, PARAM_ALPHA)) {
 116      $url->param('reset', true);
 117      redirect($url);
 118  
 119  } else if ($fromform = $mform->get_data()) {
 120      // Process the data.
 121      $fromform->lessonid = $lesson->id;
 122  
 123      // Replace unchanged values with null.
 124      foreach ($keys as $key) {
 125          if ($fromform->{$key} == $lesson->{$key}) {
 126              $fromform->{$key} = null;
 127          }
 128      }
 129  
 130      // See if we are replacing an existing override.
 131      $userorgroupchanged = false;
 132      if (empty($override->id)) {
 133          $userorgroupchanged = true;
 134      } else if (!empty($fromform->userid)) {
 135          $userorgroupchanged = $fromform->userid !== $override->userid;
 136      } else {
 137          $userorgroupchanged = $fromform->groupid !== $override->groupid;
 138      }
 139  
 140      if ($userorgroupchanged) {
 141          $conditions = array(
 142                  'lessonid' => $lesson->id,
 143                  'userid' => empty($fromform->userid) ? null : $fromform->userid,
 144                  'groupid' => empty($fromform->groupid) ? null : $fromform->groupid);
 145          if ($oldoverride = $DB->get_record('lesson_overrides', $conditions)) {
 146              // There is an old override, so we merge any new settings on top of
 147              // the older override.
 148              foreach ($keys as $key) {
 149                  if (is_null($fromform->{$key})) {
 150                      $fromform->{$key} = $oldoverride->{$key};
 151                  }
 152              }
 153  
 154              $lesson->delete_override($oldoverride->id);
 155          }
 156      }
 157  
 158      // Set the common parameters for one of the events we may be triggering.
 159      $params = array(
 160          'context' => $context,
 161          'other' => array(
 162              'lessonid' => $lesson->id
 163          )
 164      );
 165      if (!empty($override->id)) {
 166          $fromform->id = $override->id;
 167          $DB->update_record('lesson_overrides', $fromform);
 168  
 169          // Determine which override updated event to fire.
 170          $params['objectid'] = $override->id;
 171          if (!$groupmode) {
 172              $params['relateduserid'] = $fromform->userid;
 173              $event = \mod_lesson\event\user_override_updated::create($params);
 174          } else {
 175              $params['other']['groupid'] = $fromform->groupid;
 176              $event = \mod_lesson\event\group_override_updated::create($params);
 177          }
 178  
 179          // Trigger the override updated event.
 180          $event->trigger();
 181      } else {
 182          unset($fromform->id);
 183          $fromform->id = $DB->insert_record('lesson_overrides', $fromform);
 184  
 185          // Determine which override created event to fire.
 186          $params['objectid'] = $fromform->id;
 187          if (!$groupmode) {
 188              $params['relateduserid'] = $fromform->userid;
 189              $event = \mod_lesson\event\user_override_created::create($params);
 190          } else {
 191              $params['other']['groupid'] = $fromform->groupid;
 192              $event = \mod_lesson\event\group_override_created::create($params);
 193          }
 194  
 195          // Trigger the override created event.
 196          $event->trigger();
 197      }
 198  
 199      lesson_update_events($lesson, $fromform);
 200  
 201      if (!empty($fromform->submitbutton)) {
 202          redirect($overridelisturl);
 203      }
 204  
 205      // The user pressed the 'again' button, so redirect back to this page.
 206      $url->remove_params('cmid');
 207      $url->param('action', 'duplicate');
 208      $url->param('id', $fromform->id);
 209      redirect($url);
 210  
 211  }
 212  
 213  // Print the form.
 214  $pagetitle = get_string('editoverride', 'lesson');
 215  $PAGE->navbar->add($pagetitle);
 216  $PAGE->set_pagelayout('admin');
 217  $PAGE->set_title($pagetitle);
 218  $PAGE->set_heading($course->fullname);
 219  echo $OUTPUT->header();
 220  echo $OUTPUT->heading(format_string($lesson->name, true, array('context' => $context)));
 221  
 222  $mform->display();
 223  
 224  echo $OUTPUT->footer();


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