/
togglecompletionlib.php
99 lines (78 loc) · 2.45 KB
/
togglecompletionlib.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
<?php
require_once('../../../config.php');
require_once($CFG->libdir.'/completionlib.php');
require_once('ChromePhp.php');
$operation = optional_param('op', '', PARAM_ALPHANUM);
$moduleid = optional_param('cmid', 0, PARAM_INT);
$userid = $USER->id;
if (!$cm = get_coursemodule_from_id('quiz', $moduleid)) {
print_error('invalidcoursemodule');
}
if (!$course = $DB->get_record('course', array('id' => $cm->course))) {
print_error('coursemisconf');
}
// Check login and get context.
require_login($course, false, $cm);
/* Updating quiz completion */
function toggle_quiz_completion($userid,$moduleid) {
global $DB ;
$count_quiz_sql = "SELECT count(*)
FROM {quiz_attempts}
WHERE userid = :userid
AND quiz = (SELECT cm.instance FROM {course_modules} cm WHERE cm.id = :cmid)";
$quiz_sql = "SELECT *
FROM {quiz_attempts}
WHERE userid = :userid
AND quiz = (SELECT cm.instance FROM {course_modules} cm WHERE cm.id = :cmid)";
$counter = $DB->count_records_sql($count_quiz_sql, array('userid'=>$userid,'cmid'=>$moduleid));
if($counter === 0) {
echo "empty";
}else {
$quiz_rs = $DB->get_recordset_sql($quiz_sql, array('userid'=>$userid,'cmid'=>$moduleid));
foreach ($quiz_rs as $record) {
if($record->state == 'finished'){
/* toggle check for the current quiz module */
auto_completion($moduleid);
break;
}else if($record->state == 'inprogress') {
break;
}
}
$quiz_rs->close();
}
}
function auto_completion($cmid) {
global $DB;
$targetstate = 1;
switch($targetstate) {
case COMPLETION_COMPLETE:
case COMPLETION_INCOMPLETE:
break;
default:
print_error('unsupportedstate');
}
// Get course-modules entry
$cm = get_coursemodule_from_id(null, $cmid, null, true, MUST_EXIST);
$course = $DB->get_record('course', array('id'=>$cm->course), '*', MUST_EXIST);
// Set up completion object and check it is enabled.
$completion = new completion_info($course);
if (!$completion->is_enabled()) {
throw new moodle_exception('completionnotenabled', 'completion');
}
if($cm->completion != COMPLETION_TRACKING_MANUAL) {
error_or_ajax('cannotmanualctrack');
}
$completion->update_state($cm, $targetstate);
echo 'OK';
}
function error_or_ajax($message) {
echo get_string($message, 'error');
exit;
}
/* update Video */
function toogle_video_completion() {
global $DB;
}
if($operation == 'quiz') {
toggle_quiz_completion($userid,$moduleid);
}