Completed
Push — MOODLE_31_STABLE ( 5aefc8 )
by Roberto
17:45 queued 11:39
created

locallib.php (4 issues)

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

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
 * Internal functions used to help manage the Relationship CRUD interface
19
 *
20
 * @package local_relationship
21
 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
22
 */
23
24
defined('MOODLE_INTERNAL') || die();
25
26
require_once($CFG->dirroot . '/user/selector/lib.php');
27
require_once($CFG->dirroot . '/tag/lib.php');
28
29
function relationship_set_header($context, $url, $relationship=null, $module=null) {
30
    global $PAGE, $COURSE, $DB;
31
32
    if ($context->contextlevel != CONTEXT_COURSECAT) {
33
        print_error('invalidcontext');
34
    }
35
    $category = $DB->get_record('course_categories', array('id'=>$context->instanceid), '*', MUST_EXIST);
36
    $navtitle = get_string('relationships', 'local_relationship');
37
38
    $PAGE->set_pagelayout('standard');
39
    $PAGE->set_context($context);
40
    $PAGE->set_url($url);
41
    $PAGE->set_heading($COURSE->fullname);
42
    $PAGE->set_title($navtitle);
43
44
    $PAGE->navbar->add($category->name, new moodle_url('/course/index.php', array('categoryid'=>$category->id)));
45
    $PAGE->navbar->add($navtitle, new moodle_url('/local/relationship/index.php', array('contextid'=>$context->id)));
46
    if($module) {
47
        $PAGE->navbar->add(get_string($module, 'local_relationship'),
48
                           new moodle_url("/local/relationship/{$module}.php", array('relationshipid'=>$relationship->id)));
0 ignored issues
show
This line exceeds maximum limit of 120 characters; contains 124 characters

Overly long lines are hard to read on any screen. Most code styles therefor impose a maximum limit on the number of characters in a line.

Loading history...
49
    }
50
}
51
52
function relationship_set_title($relationship=null, $action=null, $param=null) {
53
    global $OUTPUT;
54
55
    echo $OUTPUT->header();
56
    if($relationship) {
57
        echo $OUTPUT->heading(get_string('relationship', 'local_relationship') . ': ' . format_string($relationship->name));
0 ignored issues
show
This line exceeds maximum limit of 120 characters; contains 124 characters

Overly long lines are hard to read on any screen. Most code styles therefor impose a maximum limit on the number of characters in a line.

Loading history...
58
        echo html_writer::empty_tag('BR');
59
    }
60
    if($action) {
61
        echo $OUTPUT->heading(get_string($action, 'local_relationship', $param), '4');
62
    }
63
}
64
65
function relationship_groups_parse_name($format, $value, $value_is_a_name=false) {
66
    if($value_is_a_name) {
67
        if (strstr($format, '@') !== false) {
68
            $str = str_replace('@', $value, $format);
69
        } else {
70
            $str = str_replace('#', $value, $format);
71
        }
72
    } else {
73
        if (strstr($format, '@') !== false) { // Convert $value to a character series
74
            $letter = 'A';
75
            for($i=0; $i<$value; $i++) {
76
                $letter++;
77
            }
78
            $str = str_replace('@', $letter, $format);
79
        } else { // Convert $value to a number series
80
            $str = str_replace('#', $value+1, $format);
81
        }
82
    }
83
    return($str);
84
}
85
86
function relationship_get_role_options() {
87
    $all_roles = role_get_names();
88
    $ctx_roles = get_roles_for_contextlevels(CONTEXT_COURSE);
89
    $roles = array();
90
    foreach($ctx_roles AS $id=>$roleid) {
91
        if($roleid > 2) {
92
            $roles[$roleid] = $all_roles[$roleid]->localname;
93
        }
94
    }
95
    asort($roles);
96
    return $roles;
97
}
98
99
function relationship_get_cohort_options($relationshipid) {
100
    global $DB;
101
102
    $relationship = $DB->get_record('relationship', array('id' => $relationshipid), '*', MUST_EXIST);
103
    $context = context::instance_by_id($relationship->contextid);
104
105
    $contextids = array();
106
    foreach($context->get_parent_context_ids(true) as $ctxid) {
107
        $context = context::instance_by_id($ctxid);
108
        if (has_capability('moodle/cohort:view', $context)) {
109
            $contextids[] = $ctxid;
110
        }
111
    }
112
    list($in_sql, $params) = $DB->get_in_or_equal($contextids, SQL_PARAMS_NAMED);
113
    $sql = "SELECT id, name FROM {cohort} WHERE contextid {$in_sql} ORDER BY name";
114
    return $DB->get_records_sql_menu($sql, $params);
115
}
116
117
function relationship_get_courses($relationshipid) {
118
    global $DB;
119
120
    $sql = "SELECT DISTINCT c.id, c.shortname, c.fullname
121
              FROM {enrol} e
122
              JOIN {course} c ON (c.id = e.courseid)
123
             WHERE e.enrol = 'relationship'
124
               AND e.customint1 = :relationshipid
125
          ORDER BY c.fullname";
126
    return $DB->get_records_sql($sql, array('relationshipid'=>$relationshipid));
127
}
128
129
// Nomes de outros grupos que não os do próprio relacionamento
130
function relationship_get_other_courses_group_names($relationshipid) {
131
    global $DB;
132
133
    $sql = "SELECT DISTINCT g.name, e.courseid, c.fullname
134
              FROM {enrol} e
135
              JOIN {course} c ON (c.id = e.courseid)
136
              JOIN {groups} g ON (g.courseid = e.courseid)
137
             WHERE e.enrol = 'relationship'
138
               AND e.customint1 = :relationshipid
139
               AND g.idnumber NOT LIKE 'relationship_{$relationshipid}_%'
140
          ORDER BY g.name";
141
    $groups = array();
142
    foreach($DB->get_records_sql($sql, array('relationshipid'=>$relationshipid)) as $r) {
143
        $groups[$r->name][] = $r;
144
    }
145
    return $groups;
146
}
147
148
function relationship_is_in_use($relationshipid) {
149
    global $DB;
150
151
    return $DB->record_exists('enrol', array('enrol'=>'relationship', 'customint1'=>$relationshipid));
152
}
153
154
function relationship_courses_where_is_in_use($relationshipid) {
155
    global $DB;
156
157
    $sql = "SELECT DISTINCT c.id, c.shortname, c.fullname
158
              FROM {enrol} e
159
              JOIN {course} c ON (c.id = e.courseid)
160
             WHERE e.enrol = 'relationship'
161
               AND e.customint1 = :relationshipid";
162
    return $DB->get_records_sql($sql, array('relationshipid'=>$relationshipid));
163
}
164
165
/**
166
 * Somehow deal with relationships when deleting course category,
167
 * we can not just delete them because they might be used in enrol
168
 * plugins or referenced in external systems.
169
 * @param  stdClass|coursecat $category
170
 * @return void
171
 */
172
function relationship_delete_category($category) {
173
    global $DB;
174
    // TODO: make sure that relationships are really, really not used anywhere and delete, for now just move to parent or system context
0 ignored issues
show
This line exceeds maximum limit of 120 characters; contains 136 characters

Overly long lines are hard to read on any screen. Most code styles therefor impose a maximum limit on the number of characters in a line.

Loading history...
175
176
    $oldcontext = context_coursecat::instance($category->id);
177
178
    if ($category->parent and $parent = $DB->get_record('course_categories', array('id'=>$category->parent))) {
179
        $parentcontext = context_coursecat::instance($parent->id);
180
        $sql = "UPDATE {relationship} SET contextid = :newcontext WHERE contextid = :oldcontext";
181
        $params = array('oldcontext'=>$oldcontext->id, 'newcontext'=>$parentcontext->id);
182
    } else {
183
        $syscontext = context_system::instance();
184
        $sql = "UPDATE {relationship} SET contextid = :newcontext WHERE contextid = :oldcontext";
185
        $params = array('oldcontext'=>$oldcontext->id, 'newcontext'=>$syscontext->id);
186
    }
187
188
    $DB->execute($sql, $params);
189
}
190
191
/**
192
 * Get all the relationships defined in given context.
193
 *
194
 * @param int $contextid
195
 * @param int $page number of the current page
196
 * @param int $perpage items per page
197
 * @param string $search search string
198
 * @return array    Array(totalrelationships => int, relationships => array, allrelationships => int)
199
 */
200
function relationship_search_relationships($contextid, $page = 0, $perpage = 25, $search = '') {
201
    global $DB;
202
203
    // Add some additional sensible conditions
204
    $tests = array('contextid = ?');
205
    $params = array($contextid);
206
207
    if (!empty($search)) {
208
        $conditions = array('name', 'idnumber', 'description');
209
        $searchparam = '%' . $DB->sql_like_escape($search) . '%';
210
        foreach ($conditions as $key=>$condition) {
211
            $conditions[$key] = $DB->sql_like($condition, "?", false);
212
            $params[] = $searchparam;
213
        }
214
        $tests[] = '(' . implode(' OR ', $conditions) . ')';
215
    }
216
    $wherecondition = implode(' AND ', $tests);
217
218
    $fields = "SELECT *";
219
    $countfields = "SELECT COUNT(1)";
220
    $sql = " FROM {relationship}
221
             WHERE $wherecondition";
222
    $order = " ORDER BY name ASC";
223
    $allrelationships = $DB->count_records('relationship', array('contextid'=>$contextid));
224
    $totalrelationships = $DB->count_records_sql($countfields . $sql, $params);
225
    $relationships = $DB->get_records_sql($fields . $sql . $order, $params, $page*$perpage, $perpage);
226
    foreach($relationships as $rl) {
227
        $rl->tags = tag_get_tags_array('relationship', $rl->id);
228
    }
229
230
    return array('totalrelationships' => $totalrelationships, 'relationships' => $relationships, 'allrelationships'=>$allrelationships);
0 ignored issues
show
This line exceeds maximum limit of 120 characters; contains 136 characters

Overly long lines are hard to read on any screen. Most code styles therefor impose a maximum limit on the number of characters in a line.

Loading history...
231
}
232
233
234
235
236
237