-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMoodleInfiniteRoomsIntegration.php
160 lines (137 loc) · 3.83 KB
/
MoodleInfiniteRoomsIntegration.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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
<?php
require_once('InfiniteRoomsIntegration.php');
require_once('lib/CallbackMappingIterator.php');
class MoodleInfiniteRoomsIntegration extends InfiniteRoomsIntegration {
protected function get_config($key) {
return get_config('report_infiniterooms', $key);
}
protected function set_config($key, $value) {
set_config($key, $value, 'report_infiniterooms');
}
protected function get_access_key() {
return get_config(null, 'report_infiniterooms_accesskey');
}
public function get_site_name() {
global $SITE;
$cn = null;
if (empty($cn)) $cn = $SITE->fullname;
if (empty($cn)) $cn = $SITE->shortname;
if (empty($cn)) $cn = parent::get_site_name();
return $cn;
}
public function get_site_contact() {
global $CFG;
return $CFG->supportemail;
}
public function get_log_size() {
global $DB;
return $DB->count_records('log');
}
public function get_log_done() {
global $DB;
$server_time = $this->get_last_sync();
return $DB->count_records_select('log', 'time <= ?', array($server_time));
}
public function get_users($since_time) {
return $this->query("
SELECT id as sysid,
username,
nullif(idnumber, '#N/A') as idnumber,
concat_ws(' ', firstname, lastname) as name,
email
FROM {user}
WHERE timemodified >= ?
", array($since_time));
}
public function get_group_categories($since_time) {
return $this->query("
select cc.id as sysid,
cc.name,
cc.idnumber,
cc.parent,
cc.depth,
cc.path
from {course_categories} cc
");
}
public function get_groups($since_time) {
return $this->query("
SELECT concat('course_', id) as sysid,
'1' as type,
nullif(idnumber, '#N/A') as idnumber,
fullname as name,
category
FROM {course}
WHERE timemodified >= ?
", array($since_time));
}
public function get_user_groups($since_time) {
// warning: this isn't incremental, can we track deletes?
return $this->query("
SELECT ra.id as sysid,
ra.userid as `user`,
concat('course_', co.instanceid) as `group`,
r.name as role
FROM {role_assignments} ra
JOIN {role} r ON ra.roleid = r.id
JOIN {context} co ON ra.contextid = co.id AND co.contextlevel = 50
");
}
public function get_artefacts($since_time) {
return $this->query("
SELECT DISTINCT(module) as sysname
FROM {log}
");
}
public function get_modules($since_time) {
// this can be done more efficiently, but it would compromise portability
$metadata_rs = $this->query("
SELECT cm.id cmid, cm.instance, m.name module, ld.mtable, ld.field,
concat('course_', cm.course) as `group`
FROM {course_modules} cm
INNER JOIN {modules} m ON m.id = cm.module
LEFT JOIN {log_display} ld ON ld.module = m.name AND ld.action = 'view'
");
return new CallbackMappingIterator($metadata_rs, function($key, $metadata) {
global $DB;
$name = $DB->get_field(
$metadata->mtable ?: $metadata->module,
$metadata->field ?: 'name',
array('id' => $metadata->instance));
// need group and artefact here!
return (object) array(
'sysid' => $metadata->cmid,
'name' => $name,
'artefact' => $metadata->module,
'group' => $metadata->group
);
});
}
public function get_actions($since_time, $limit) {
return $this->query("
SELECT from_unixtime(l.time, '%Y-%m-%dT%H:%i:%sZ') as time,
l.action,
nullif(l.userid, 0) as user,
l.ip as user_ip,
l.module as artefact,
concat('course_', nullif(l.course, 0)) as `group`,
cm.id as module,
l.id as sysid,
l.info as sysinfo
FROM {log} l
left join {modules} m on m.name = l.module
left join {course_modules} cm on cm.module = m.id
WHERE l.time >= ?
LIMIT $limit
", array($since_time));
}
protected function query($query, $params = array()) {
global $DB;
$rs = $DB->get_recordset_sql($query, $params);
if (!$rs->valid()) {
$rs->close();
$rs = false;
}
return $rs;
}
}