Search moodle.org's
Developer Documentation

See Release Notes
Long Term Support Release

  • Bug fixes for general core bugs in 3.9.x will end* 10 May 2021 (12 months).
  • Bug fixes for security issues in 3.9.x will end* 8 May 2023 (36 months).
  • PHP version: minimum PHP 7.2.0 Note: minimum PHP version has increased since Moodle 3.8. PHP 7.3.x and 7.4.x are supported too.

Differences Between: [Versions 39 and 310] [Versions 39 and 311] [Versions 39 and 400] [Versions 39 and 401] [Versions 39 and 402] [Versions 39 and 403]

   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   * Completion data for a specific user, course and critieria
  19   *
  20   * @package core_completion
  21   * @category completion
  22   * @copyright 2009 Catalyst IT Ltd
  23   * @author Aaron Barnes <aaronb@catalyst.net.nz>
  24   * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  25   */
  26  
  27  defined('MOODLE_INTERNAL') || die();
  28  require_once($CFG->dirroot.'/completion/data_object.php');
  29  
  30  /**
  31   * Completion data for a specific user, course and critieria
  32   *
  33   * @package core_completion
  34   * @category completion
  35   * @copyright 2009 Catalyst IT Ltd
  36   * @author Aaron Barnes <aaronb@catalyst.net.nz>
  37   * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  38   */
  39  class completion_criteria_completion extends data_object {
  40  
  41      /* @var string Database table that stores completion type criteria */
  42      public $table = 'course_completion_crit_compl';
  43  
  44      /* @var array Array of required table fields, must start with 'id'. */
  45      public $required_fields = array('id', 'userid', 'course', 'criteriaid', 'gradefinal', 'rpl', 'unenroled', 'timecompleted');
  46  
  47      /* @var array Array of unique fields, used in where clauses */
  48      public $unique_fields = array('userid', 'course', 'criteriaid');
  49  
  50      /* @var int User ID */
  51      public $userid;
  52  
  53      /* @var int course ID */
  54      public $course;
  55  
  56      /* @var int The id of the course completion criteria this completion references */
  57      public $criteriaid;
  58  
  59      /* @var float The final grade for the user in the course (if completing a grade criteria) */
  60      public $gradefinal;
  61  
  62      /* @var string Record of prior learning, leave blank if none */
  63      public $rpl;
  64  
  65      /* @var int Timestamp of user unenrolment (if completing a unenrol criteria) */
  66      public $unenroled;
  67  
  68      /* @var int Timestamp of course criteria completion {@link completion_criteria_completion::mark_complete()} */
  69      public $timecompleted;
  70  
  71      /* @var completion_criterria Associated criteria object */
  72      private $_criteria;
  73  
  74      /**
  75       * Finds and returns a data_object instance based on params.
  76       *
  77       * @param array $params associative arrays varname=>value
  78       * @return data_object instance of data_object or false if none found.
  79       */
  80      public static function fetch($params) {
  81          return self::fetch_helper('course_completion_crit_compl', __CLASS__, $params);
  82      }
  83  
  84      /**
  85       * Finds and returns all data_object instances based on params.
  86       *
  87       * @param array $params associative arrays varname=>value
  88       * @return array array of data_object insatnces or false if none found.
  89       */
  90      public static function fetch_all($params) {}
  91  
  92      /**
  93       * Return status of this criteria completion
  94       *
  95       * @return bool
  96       */
  97      public function is_complete() {
  98          return (bool) $this->timecompleted;
  99      }
 100  
 101      /**
 102       * Mark this criteria complete for the associated user
 103       *
 104       * This method creates a course_completion_crit_compl record
 105       */
 106      public function mark_complete() {
 107          // Create record
 108          $this->timecompleted = time();
 109  
 110          // Save record
 111          if ($this->id) {
 112              $this->update();
 113          } else {
 114              $this->insert();
 115          }
 116  
 117          // Mark course completion record as started (if not already)
 118          $cc = array(
 119              'course'    => $this->course,
 120              'userid'    => $this->userid
 121          );
 122          $ccompletion = new completion_completion($cc);
 123          $ccompletion->mark_inprogress($this->timecompleted);
 124      }
 125  
 126      /**
 127       * Attach a preloaded criteria object to this object
 128       *
 129       * @param   $criteria   object  completion_criteria
 130       */
 131      public function attach_criteria(completion_criteria $criteria) {
 132          $this->_criteria = $criteria;
 133      }
 134  
 135      /**
 136       * Return the associated criteria with this completion
 137       * If nothing attached, load from the db
 138       *
 139       * @return completion_criteria
 140       */
 141      public function get_criteria() {
 142  
 143          if (!$this->_criteria) {
 144              global $DB;
 145  
 146              $params = array(
 147                  'id'    => $this->criteriaid
 148              );
 149  
 150              $record = $DB->get_record('course_completion_criteria', $params);
 151  
 152              $this->attach_criteria(completion_criteria::factory((array) $record));
 153          }
 154  
 155          return $this->_criteria;
 156      }
 157  
 158      /**
 159       * Return criteria status text for display in reports {@link completion_criteria::get_status()}
 160       *
 161       * @return string
 162       */
 163      public function get_status() {
 164          return $this->_criteria->get_status($this);
 165      }
 166  }