Proyectos de Subversion Moodle

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 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
}