-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlib.php
255 lines (232 loc) · 8.2 KB
/
lib.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
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Block "course overview (campus)" - Library
*
* @package block_course_overview_campus
* @copyright 2013 Alexander Bias, Ulm University <[email protected]>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
/**
* Display overview for courses (copied from /blocks/course_overview/locallib.php)
*
* @param array $courses courses for which overview needs to be shown
* @return array html overview
*/
function block_course_overview_campus_get_overviews($courses, $skip) {
$htmlarray = array();
if ($modules = get_plugin_list_with_function('mod', 'print_overview')) {
// Remove modules which should be skipped
$skipmodules = explode(',', $skip);
if (is_array($skipmodules)) {
foreach($skipmodules as $s) {
unset($modules[$s]);
}
}
// Split courses list into batches with no more than MAX_MODINFO_CACHE_SIZE courses in one batch.
// Otherwise we exceed the cache limit in get_fast_modinfo() and rebuild it too often.
if (defined('MAX_MODINFO_CACHE_SIZE') && MAX_MODINFO_CACHE_SIZE > 0 && count($courses) > MAX_MODINFO_CACHE_SIZE) {
$batches = array_chunk($courses, MAX_MODINFO_CACHE_SIZE, true);
} else {
$batches = array($courses);
}
foreach ($batches as $courses) {
foreach ($modules as $fname) {
$fname($courses, $htmlarray);
}
}
}
return $htmlarray;
}
/**
* Check if the configured term dates make sense
*
* @param object $coc_config The config object
* @return bool
*/
function block_course_overview_campus_check_term_config($coc_config) {
if ($coc_config->termmode == 1) {
return true;
}
else if ($coc_config->termmode == 2 &&
intval(date('z', strtotime('2003-'.$coc_config->term1startday))) < intval(date('z', strtotime('2003-'.$coc_config->term2startday)))) {
return true;
}
else if ($coc_config->termmode == 3 &&
intval(date('z', strtotime('2003-'.$coc_config->term1startday))) < intval(date('z', strtotime('2003-'.$coc_config->term2startday))) &&
intval(date('z', strtotime('2003-'.$coc_config->term2startday))) < intval(date('z', strtotime('2003-'.$coc_config->term3startday)))) {
return true;
}
else if ($coc_config->termmode == 4 &&
intval(date('z', strtotime('2003-'.$coc_config->term1startday))) < intval(date('z', strtotime('2003-'.$coc_config->term2startday))) &&
intval(date('z', strtotime('2003-'.$coc_config->term2startday))) < intval(date('z', strtotime('2003-'.$coc_config->term3startday))) &&
intval(date('z', strtotime('2003-'.$coc_config->term3startday))) < intval(date('z', strtotime('2003-'.$coc_config->term4startday)))) {
return true;
}
else {
return false;
}
}
/**
* Take array of teacher objects and return a string of names, sorted by relevance and name
*
* @param array $teachers Array of teachers
* @return string String with concatenated teacher names
*/
function block_course_overview_campus_get_teachername_string($teachers) {
global $coc_config;
// If given array is empty, return empty string
if (empty($teachers))
return '';
// Sort all teachers by relevance and name, return empty string when sorting fails
$success = usort($teachers, "block_course_overview_campus_compare_teachers");
if (!$success) {
return '';
}
// Get all teachers' names as an array according the teacher name style setting
$teachernames = array_map(function($obj) {
global $coc_config;
// Display fullname
if ($coc_config->secondrowshowteachernamestyle == 1) {
return $obj->firstname.' '.$obj->lastname;
}
// Display lastname
else if ($coc_config->secondrowshowteachernamestyle == 2) {
return $obj->lastname;
}
// Display firstname
else if ($coc_config->secondrowshowteachernamestyle == 3) {
return $obj->firstname;
}
// Display fullnamedisplay
else if ($coc_config->secondrowshowteachernamestyle == 4) {
return fullname($obj);
}
// Fallback: Display lastname
else {
return $obj->lastname;
}
}, $teachers);
// Implode teachers' names to a single string
$teachernames = implode(", ", $teachernames);
return $teachernames;
}
/**
* Take term name and year(s) and return displayname for term filter based on plugin configuration
*
* @param string $termname The term's name
* @param string $year The term's year
* @param string $year2 The term's second year (optional)(
* @return string String with the term's displayname
*/
function block_course_overview_campus_get_term_displayname($termname, $year, $year2='') {
global $coc_config;
// Build the first year - second year combination
$displayname = $year;
if ($year2 != '') {
// Hyphen separation
if ($coc_config->termyearseparation == 1) {
$displayname = $year.'-'.$year2;
}
// Slash separation
else if ($coc_config->termyearseparation == 2) {
$displayname = $year.'/'.$year2;
}
// Underscore separation
else if ($coc_config->termyearseparation == 3) {
$displayname = $year.'_'.$year2;
}
// No second year
else if ($coc_config->termyearseparation == 4) {
$displayname = $year;
}
// This shouldn't happen
else {
$displayname = $year.'/'.$year2;
}
}
// Add the term name
// Prefix with space
if ($coc_config->termyearpos == 1) {
$displayname = $displayname.' '.$termname;
}
// Prefix without space
else if ($coc_config->termyearpos == 2) {
$displayname = $displayname.$termname;
}
// Suffix with space
else if ($coc_config->termyearpos == 3) {
$displayname = $termname.' '.$displayname;
}
// Suffix without space
else if ($coc_config->termyearpos == 4) {
$displayname = $termname.$displayname;
}
// This shouldn't happen
else {
$displayname = $termname. ' '.$termname;
}
return $displayname;
}
/**
* Compare teacher by relevance helper function
*
* @param object $a Teacher A
* @param object $b Teacher B
* @return int
*/
function block_course_overview_campus_compare_teachers($a, $b) {
// compare relevance of teachers' roles
if ($a->sortorder < $b->sortorder) {
return -1;
}
else if ($a->sortorder > $b->sortorder) {
return 1;
}
else if ($a->sortorder == $b->sortorder) {
// teachers' roles are equal, then compare lastnames
return strcasecmp($a->lastname, $b->lastname);
}
else {
// This should never happen
return 0;
}
}
/**
* Compare category by sortorder helper function
*
* @param object $a Category A
* @param object $b Category B
* @return int
*/
function block_course_overview_campus_compare_categories($a, $b) {
// compare sortorder of categories
if ($a->sortorder < $b->sortorder) {
return -1;
}
else if ($a->sortorder > $b->sortorder) {
return 1;
}
else if ($a->sortorder == $b->sortorder) {
// Category sortorders are equal - this shouldn't happen, but if it does then compare category names alphabetically
return strcasecmp(format_string($a->name), format_string($b->name));
}
else {
// This should never happen
return 0;
}
}