Search moodle.org's
Developer Documentation


  • Bug fixes for general core bugs in 2.8.x ended 9 November 2015 (12 months).
  • Bug fixes for security issues in 2.8.x ended 9 May 2016 (18 months).
  • minimum PHP 5.4.4 (always use latest PHP 5.4.x or 5.5.x on Windows - http://windows.php.net/download/), PHP 7 is NOT supported
  • Differences Between: [Versions 28 and 33] [Versions 28 and 34] [Versions 28 and 35] [Versions 28 and 36] [Versions 28 and 37]

       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: