forked from moodle/moodle
-
Notifications
You must be signed in to change notification settings - Fork 0
/
pending.php
129 lines (117 loc) · 6.16 KB
/
pending.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
<?php // $Id$
// allow the administrators to look through a list of course requests and either approve them or reject them.
require_once('../config.php');
require_once($CFG->libdir.'/pagelib.php');
require_once($CFG->libdir.'/blocklib.php');
require_once('lib.php');
require_login();
require_capability('moodle/site:approvecourse', get_context_instance(CONTEXT_SYSTEM, SITEID));
$approve = optional_param('approve', 0, PARAM_INT);
$reject = optional_param('reject', 0, PARAM_INT);
$rejectnotice = optional_param('rejectnotice', '', PARAM_CLEANHTML);
if (!empty($approve) and confirm_sesskey()) {
if ($course = get_record("course_request","id",$approve)) {
foreach (array_keys((array)$course) as $key) {
$course->$key = addslashes($course->$key);
}
// place at beginning of category
fix_course_sortorder();
if (empty($CFG->defaultrequestedcategory)) {
$CFG->defaultrequestedcategory = 1; //yuk, but default to miscellaneous.
}
$course->category = $CFG->defaultrequestedcategory;
$course->sortorder = get_field_sql("SELECT min(sortorder)-1 FROM {$CFG->prefix}course WHERE category=$course->category");
if (empty($course->sortorder)) {
$course->sortorder = 1000;
}
$course->requested = 1;
unset($course->reason);
unset($course->id);
$teacherid = $course->requester;
unset($course->requester);
$course->teacher = get_string("defaultcourseteacher");
$course->teachers = get_string("defaultcourseteachers");
$course->student = get_string("defaultcoursestudent");
$course->students = get_string("defaultcoursestudents");
if (!empty($CFG->restrictmodulesfor) && $CFG->restrictmodulesfor != 'none' && !empty($CFG->restrictbydefault)) {
$course->restrictmodules = 1;
}
if ($courseid = insert_record("course",$course)) {
$page = page_create_object(PAGE_COURSE_VIEW, $courseid);
blocks_repopulate_page($page); // Return value not checked because you can always edit later
add_teacher($teacherid,$courseid);
$course->id = $courseid;
if (!empty($CFG->restrictmodulesfor) && $CFG->restrictmodulesfor != 'none' && !empty($CFG->restrictbydefault)) { // if we're all or requested we're ok.
$allowedmods = explode(',',$CFG->defaultallowedmodules);
update_restricted_mods($course,$allowedmods);
}
delete_records('course_request','id',$approve);
$success = 1;
}
if (!empty($success)) {
$user = get_record('user','id',$teacherid);
$a->name = $course->fullname;
$a->url = $CFG->wwwroot.'/course/view.php?id='.$courseid;
$a->teacher = $course->teacher;
email_to_user($user,$USER,get_string('courseapprovedsubject'),get_string('courseapprovedemail','moodle',$a));
redirect($CFG->wwwroot.'/course/edit.php?id='.$courseid);
exit;
}
else {
error(get_string('courseapprovedfailed'));
exit;
}
}
}
$strtitle = get_string('coursespending');
$strheading = get_string(((!empty($reject)) ? 'coursereject' : 'coursespending'));
print_header($strtitle,$strheading,$strheading);
if (!empty($reject) and confirm_sesskey()) {
if ($reject = get_record("course_request","id",$reject)) {
if (empty($rejectnotice)) {
// display a form for writing a reason
print_simple_box_start('center');
print_string('courserejectreason');
include('pending-reject.html');
print_simple_box_end();
}
else {
$user = get_record("user","id",$reject->requester);
email_to_user($user,$USER,get_string('courserejectsubject'),get_string('courserejectemail','moodle',$rejectnotice));
delete_records("course_request","id",$reject->id);
notice(get_string('courserejected'),'pending.php');
}
}
} else if ($pending = get_records("course_request")) {
// loop through
$table->cellpadding = 4;
$table->cellspacing = 3;
$table->align = array('center','center','center','center','center','center','center');
$table->head = array(' ',get_string('shortname'),get_string('fullname'),get_string('requestedby'),get_string('summary'),
get_string('requestreason'),'');
$strrequireskey = get_string('requireskey');
foreach ($pending as $course) {
$requester = get_record('user','id',$course->requester);
// check here for shortname collisions and warn about them.
if ($match = get_record("course","shortname",$course->shortname)) {
$course->shortname .= ' [*]';
$collision = 1;
}
//do not output raw html from request, quote html entities using s()!!
$table->data[] = array(((!empty($course->password)) ?
'<img hspace="1" alt="'.$strrequireskey.'" height="16" width="16" border="0" src="'.$CFG->pixpath.'/i/key.gif" />' : ''),
s($course->shortname),s($course->fullname),fullname($requester),
s($course->summary),s($course->reason),
'<a href="pending.php?approve='.$course->id.'&sesskey='.sesskey().'">'.get_string('approve').'</a> | '
.'<a href="pending.php?reject='.$course->id.'&sesskey='.sesskey().'">'.get_string('reject').'</a>');
}
print_table($table);
if (!empty($collision)) {
print_string('shortnamecollisionwarning');
}
} else {
notice(get_string('nopendingcourses'));
// no pending messages.
}
print_footer();
?>