Search moodle.org's
Developer Documentation


   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   * Edit course completion settings
  20   *
  21   * @package     core_completion
  22   * @category    completion
  23   * @copyright   2009 Catalyst IT Ltd
  24   * @author      Aaron Barnes <aaronb@catalyst.net.nz>
  25   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  26   */
  27  
  28  require_once(__DIR__.'/../config.php');
  29  require_once($CFG->dirroot.'/course/lib.php');
  30  require_once($CFG->libdir.'/completionlib.php');
  31  require_once($CFG->dirroot.'/completion/criteria/completion_criteria_self.php');
  32  require_once($CFG->dirroot.'/completion/criteria/completion_criteria_date.php');
  33  require_once($CFG->dirroot.'/completion/criteria/completion_criteria_unenrol.php');
  34  require_once($CFG->dirroot.'/completion/criteria/completion_criteria_activity.php');
  35  require_once($CFG->dirroot.'/completion/criteria/completion_criteria_duration.php');
  36  require_once($CFG->dirroot.'/completion/criteria/completion_criteria_grade.php');
  37  require_once($CFG->dirroot.'/completion/criteria/completion_criteria_role.php');
  38  require_once($CFG->dirroot.'/completion/criteria/completion_criteria_course.php');
  39  require_once $CFG->libdir.'/gradelib.php';
  40  require_once($CFG->dirroot.'/course/completion_form.php');
  41  
  42  $id = required_param('id', PARAM_INT);       // course id
  43  
  44  // Perform some basic access control checks.
  45  if ($id) {
  46  
  47      if($id == SITEID){
  48          // Don't allow editing of 'site course' using this form.
  49          print_error('cannoteditsiteform');
  50      }
  51  
  52      if (!$course = $DB->get_record('course', array('id'=>$id))) {
  53          print_error('invalidcourseid');
  54      }
  55      require_login($course);
  56      require_capability('moodle/course:update', context_course::instance($course->id));
  57  
  58  } else {
  59      require_login();
  60      print_error('needcourseid');
  61  }
  62  
  63  // Set up the page.
  64  $PAGE->set_course($course);
  65  $PAGE->set_url('/course/completion.php', array('id' => $course->id));
  66  $PAGE->set_title($course->shortname);
  67  $PAGE->set_heading($course->fullname);
  68  $PAGE->set_pagelayout('admin');
  69  
  70  // Create the settings form instance.
  71  $form = new course_completion_form('completion.php?id='.$id, array('course' => $course));
  72  
  73  if ($form->is_cancelled()){
  74      redirect($CFG->wwwroot.'/course/view.php?id='.$course->id);
  75  
  76  } else if ($data = $form->get_data()) {
  77      $completion = new completion_info($course);
  78  
  79      // Process criteria unlocking if requested.
  80      if (!empty($data->settingsunlock)) {
  81          $completion->delete_course_completion_data();
  82  
  83          // Return to form (now unlocked).
  84          redirect($PAGE->url);
  85      }
  86  
  87      // Delete old criteria.
  88      $completion->clear_criteria();
  89  
  90      // Loop through each criteria type and run its update_config() method.
  91      global $COMPLETION_CRITERIA_TYPES;
  92      foreach ($COMPLETION_CRITERIA_TYPES as $type) {
  93          $class = 'completion_criteria_'.$type;
  94          $criterion = new $class();
  95          $criterion->update_config($data);
  96      }
  97  
  98      // Handle overall aggregation.
  99      $aggdata = array(
 100          'course'        => $data->id,
 101          'criteriatype'  => null
 102      );
 103      $aggregation = new completion_aggregation($aggdata);
 104      $aggregation->setMethod($data->overall_aggregation);
 105      $aggregation->save();
 106  
 107      // Handle activity aggregation.
 108      if (empty($data->activity_aggregation)) {
 109          $data->activity_aggregation = 0;
 110      }
 111  
 112      $aggdata['criteriatype'] = COMPLETION_CRITERIA_TYPE_ACTIVITY;
 113      $aggregation = new completion_aggregation($aggdata);
 114      $aggregation->setMethod($data->activity_aggregation);
 115      $aggregation->save();
 116  
 117      // Handle course aggregation.
 118      if (empty($data->course_aggregation)) {
 119          $data->course_aggregation = 0;
 120      }
 121  
 122      $aggdata['criteriatype'] = COMPLETION_CRITERIA_TYPE_COURSE;
 123      $aggregation = new completion_aggregation($aggdata);
 124      $aggregation->setMethod($data->course_aggregation);
 125      $aggregation->save();
 126  
 127      // Handle role aggregation.
 128      if (empty($data->role_aggregation)) {
 129          $data->role_aggregation = 0;
 130      }
 131  
 132      $aggdata['criteriatype'] = COMPLETION_CRITERIA_TYPE_ROLE;
 133      $aggregation = new completion_aggregation($aggdata);
 134      $aggregation->setMethod($data->role_aggregation);
 135      $aggregation->save();
 136  
 137      // Trigger an event for course module completion changed.
 138      $event = \core\event\course_completion_updated::create(
 139              array(
 140                  'courseid' => $course->id,
 141                  'context' => context_course::instance($course->id)
 142                  )
 143              );
 144      $event->trigger();
 145  
 146      // Redirect to the course main page.
 147      $url = new moodle_url('/course/view.php', array('id' => $course->id));
 148      redirect($url);
 149  }
 150  
 151  // Print the form.
 152  echo $OUTPUT->header();
 153  echo $OUTPUT->heading(get_string('editcoursecompletionsettings', 'core_completion'));
 154  
 155  $form->display();
 156  
 157  echo $OUTPUT->footer();

Search This Site: