Differences Between: [Versions 310 and 403] [Versions 311 and 403] [Versions 39 and 403] [Versions 400 and 403] [Versions 401 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 * Course completion criteria 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 require_once($CFG->dirroot.'/completion/completion_criteria_completion.php'); 30 31 /** 32 * Self completion criteria type 33 * Criteria type constant, primarily for storing criteria type in the database. 34 */ 35 define('COMPLETION_CRITERIA_TYPE_SELF', 1); 36 37 /** 38 * Date completion criteria type 39 * Criteria type constant, primarily for storing criteria type in the database. 40 */ 41 define('COMPLETION_CRITERIA_TYPE_DATE', 2); 42 43 /** 44 * Unenrol completion criteria type 45 * Criteria type constant, primarily for storing criteria type in the database. 46 */ 47 define('COMPLETION_CRITERIA_TYPE_UNENROL', 3); 48 49 /** 50 * Activity completion criteria type 51 * Criteria type constant, primarily for storing criteria type in the database. 52 */ 53 define('COMPLETION_CRITERIA_TYPE_ACTIVITY', 4); 54 55 /** 56 * Duration completion criteria type 57 * Criteria type constant, primarily for storing criteria type in the database. 58 */ 59 define('COMPLETION_CRITERIA_TYPE_DURATION', 5); 60 61 /** 62 * Grade completion criteria type 63 * Criteria type constant, primarily for storing criteria type in the database. 64 */ 65 define('COMPLETION_CRITERIA_TYPE_GRADE', 6); 66 67 /** 68 * Role completion criteria type 69 * Criteria type constant, primarily for storing criteria type in the database. 70 */ 71 define('COMPLETION_CRITERIA_TYPE_ROLE', 7); 72 73 /** 74 * Course completion criteria type 75 * Criteria type constant, primarily for storing criteria type in the database. 76 */ 77 define('COMPLETION_CRITERIA_TYPE_COURSE', 8); 78 79 /** 80 * Criteria type constant to class name mapping. 81 * 82 * This global variable would be improved if it was implemented as a cache. 83 */ 84 global $COMPLETION_CRITERIA_TYPES; 85 $COMPLETION_CRITERIA_TYPES = array( 86 COMPLETION_CRITERIA_TYPE_SELF => 'self', 87 COMPLETION_CRITERIA_TYPE_DATE => 'date', 88 COMPLETION_CRITERIA_TYPE_UNENROL => 'unenrol', 89 COMPLETION_CRITERIA_TYPE_ACTIVITY => 'activity', 90 COMPLETION_CRITERIA_TYPE_DURATION => 'duration', 91 COMPLETION_CRITERIA_TYPE_GRADE => 'grade', 92 COMPLETION_CRITERIA_TYPE_ROLE => 'role', 93 COMPLETION_CRITERIA_TYPE_COURSE => 'course', 94 ); 95 96 97 /** 98 * Completion criteria abstract definition 99 * 100 * @package core_completion 101 * @category completion 102 * @copyright 2009 Catalyst IT Ltd 103 * @author Aaron Barnes <aaronb@catalyst.net.nz> 104 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 105 */ 106 abstract class completion_criteria extends data_object { 107 108 /* @var string Database table name that stores completion criteria information */ 109 public $table = 'course_completion_criteria'; 110 111 /** 112 * Array of required table fields, must start with 'id'. 113 * Defaults to id, course, criteriatype, module, moduleinstane, courseinstance, 114 * enrolperiod, timeend, gradepass, role 115 * @var array 116 */ 117 public $required_fields = array('id', 'course', 'criteriatype', 'module', 'moduleinstance', 'courseinstance', 'enrolperiod', 'timeend', 'gradepass', 'role'); 118 119 /* @var int Course id */ 120 public $course; 121 122 /** 123 * Criteria type 124 * One of the COMPLETION_CRITERIA_TYPE_* constants 125 * @var int 126 */ 127 public $criteriatype; 128 129 /* @var string Module type this criteria relates to (for activity criteria) */ 130 public $module; 131 132 /* @var int Course module instance id this criteria relates to (for activity criteria) */ 133 public $moduleinstance; 134 135 /** 136 * Period after enrolment completion will be triggered (for period criteria) 137 * The value here is the number of days as an int. 138 * @var int 139 */ 140 public $enrolperiod; 141 142 /** 143 * Date of course completion (for date criteria) 144 * This is a timestamp value 145 * @var int 146 */ 147 public $date; 148 149 /* @var float Passing grade required to complete course (for grade completion) */ 150 public $gradepass; 151 152 /* @var int Role ID that has the ability to mark a user as complete (for role completion) */ 153 public $role; 154 155 /** @var string course instance. */ 156 public $courseinstance; 157 158 /** @var mixed time end. */ 159 public $timeend; 160 161 /** 162 * Finds and returns all data_object instances based on params. 163 * 164 * @param array $params associative arrays varname=>value 165 * @return array array of data_object insatnces or false if none found. 166 */ 167 public static function fetch_all($params) {} 168 169 /** 170 * Factory method for creating correct class object 171 * 172 * @param array $params associative arrays varname=>value 173 * @return completion_criteria 174 */ 175 public static function factory($params) { 176 global $CFG, $COMPLETION_CRITERIA_TYPES; 177 178 if (!isset($params['criteriatype']) || !isset($COMPLETION_CRITERIA_TYPES[$params['criteriatype']])) { 179 throw new \moodle_exception('invalidcriteriatype', 'completion'); 180 } 181 182 $class = 'completion_criteria_'.$COMPLETION_CRITERIA_TYPES[$params['criteriatype']]; 183 require_once($CFG->dirroot.'/completion/criteria/'.$class.'.php'); 184 185 return new $class($params, false); 186 } 187 188 /** 189 * Add appropriate form elements to the critieria form 190 * 191 * @param moodleform $mform Moodle forms object 192 * @param mixed $data optional Any additional data that can be used to set default values in the form 193 * @return void 194 */ 195 abstract public function config_form_display(&$mform, $data = null); 196 197 /** 198 * Update the criteria information stored in the database 199 * 200 * @param array $data Form data 201 * @return void 202 */ 203 abstract public function update_config(&$data); 204 205 /** 206 * Review this criteria and decide if the user has completed 207 * 208 * @param object $completion The user's completion record 209 * @param boolean $mark Optionally set false to not save changes to database 210 * @return boolean 211 */ 212 abstract public function review($completion, $mark = true); 213 214 /** 215 * Return criteria title for display in reports 216 * 217 * @return string 218 */ 219 abstract public function get_title(); 220 221 /** 222 * Return a more detailed criteria title for display in reports 223 * 224 * @return string 225 */ 226 abstract public function get_title_detailed(); 227 228 /** 229 * Return criteria type title for display in reports 230 * 231 * @return string 232 */ 233 abstract public function get_type_title(); 234 235 /** 236 * Return criteria progress details for display in reports 237 * 238 * @param completion_completion $completion The user's completion record 239 * @return array 240 */ 241 abstract public function get_details($completion); 242 243 /** 244 * Return pix_icon for display in reports. 245 * 246 * @param string $alt The alt text to use for the icon 247 * @param array $attributes html attributes 248 * @return pix_icon 249 */ 250 public function get_icon($alt, array $attributes = null) { 251 global $COMPLETION_CRITERIA_TYPES; 252 253 $criteriatype = $COMPLETION_CRITERIA_TYPES[$this->criteriatype]; 254 return new pix_icon('i/'.$criteriatype, $alt, 'moodle', $attributes); 255 } 256 257 /** 258 * Return criteria status text for display in reports 259 * 260 * @param completion_completion $completion The user's completion record 261 * @return string 262 */ 263 public function get_status($completion) { 264 return $completion->is_complete() ? get_string('yes') : get_string('no'); 265 } 266 267 /** 268 * Return true if the criteria's current status is different to what is sorted 269 * in the database, e.g. pending an update 270 * 271 * @param completion_completion $completion The user's criteria completion record 272 * @return bool 273 */ 274 public function is_pending($completion) { 275 $review = $this->review($completion, false); 276 277 return $review !== $completion->is_complete(); 278 } 279 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body