See Release Notes
Long Term Support Release
<?php /////////////////////////////////////////////////////////////////////////// // // // NOTICE OF COPYRIGHT // // // // Moodle - Modular Object-Oriented Dynamic Learning Environment // // http://moodle.org // // // // Copyright (C) 1999 onwards Martin Dougiamas http://dougiamas.com // // // // This program 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 2 of the License, or // // (at your option) any later version. // // // // This program 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: // // // // http://www.gnu.org/copyleft/gpl.html // // // /////////////////////////////////////////////////////////////////////////// /** * Allow the administrator to look through a list of course requests and approve or reject them. * * @license http://www.gnu.org/copyleft/gpl.html GNU Public License * @package course */ require_once(__DIR__ . '/../config.php'); require_once($CFG->libdir . '/adminlib.php'); require_once($CFG->dirroot . '/course/lib.php'); require_once($CFG->dirroot . '/course/request_form.php'); $approve = optional_param('approve', 0, PARAM_INT); $reject = optional_param('reject', 0, PARAM_INT); $baseurl = $CFG->wwwroot . '/course/pending.php'; $context = context_system::instance(); if (has_capability('moodle/site:approvecourse', $context)) { // Similar to course management capabilities, if user has approve capability in system context // we add the link to the admin menu. Otherwise we check if user has capability anywhere. admin_externalpage_setup('coursespending'); } else { require_login(null, false); $categories = core_course_category::make_categories_list('moodle/site:approvecourse'); if (!$categories) { require_capability('moodle/site:approvecourse', $context); } $PAGE->set_context($context); $PAGE->set_url(new moodle_url('/course/pending.php')); } /// Process approval of a course. if (!empty($approve) and confirm_sesskey()) { /// Load the request. $course = new course_request($approve); $courseid = $course->approve(); if ($courseid !== false) { if (has_capability('moodle/course:update', context_course::instance($courseid))) { redirect(new moodle_url('/course/edit.php', ['id' => $courseid, 'returnto' => 'pending'])); } else { redirect(new moodle_url('/course/view.php', ['id' => $courseid])); } } else {< print_error('courseapprovedfailed');> throw new \moodle_exception('courseapprovedfailed');} } /// Process rejection of a course. if (!empty($reject)) { // Load the request. $course = new course_request($reject); // Prepare the form. $rejectform = new reject_request_form($baseurl); $default = new stdClass(); $default->reject = $course->id; $rejectform->set_data($default); /// Standard form processing if statement. if ($rejectform->is_cancelled()){ redirect($baseurl); } else if ($data = $rejectform->get_data()) { /// Reject the request $course->reject($data->rejectnotice); /// Redirect back to the course listing. redirect($baseurl, get_string('courserejected')); } /// Display the form for giving a reason for rejecting the request. echo $OUTPUT->header($rejectform->focus()); $rejectform->display(); echo $OUTPUT->footer(); exit; } /// Print a list of all the pending requests. echo $OUTPUT->header(); $pending = $DB->get_records('course_request'); if (empty($pending)) { echo $OUTPUT->heading(get_string('nopendingcourses')); } else { echo $OUTPUT->heading(get_string('coursespending'));< $role = $DB->get_record('role', array('id' => $CFG->creatornewroleid), '*', MUST_EXIST);> > $role = $DB->get_record('role', ['id' => $CFG->creatornewroleid]); > if ($role) {echo $OUTPUT->notification(get_string('courserequestwarning', 'core', role_get_name($role)), 'notifyproblem');> } else { > $userpoliciesurl = new moodle_url('/admin/settings.php', ['section' => 'userpolicies']); /// Build a table of all the requests. > echo $OUTPUT->notification(get_string('courserequestroleerror', 'core', (string) $userpoliciesurl), 'notifyerror'); $table = new html_table(); > }$table->attributes['class'] = 'pendingcourserequests generaltable'; $table->align = array('center', 'center', 'center', 'center', 'center', 'center');< $table->head = array(get_string('shortnamecourse'), get_string('fullnamecourse'), get_string('requestedby'),> $table->head = array(get_string('requestedby'), get_string('shortnamecourse'), get_string('fullnamecourse'),get_string('summary'), get_string('category'), get_string('requestreason'), get_string('action')); foreach ($pending as $course) { $course = new course_request($course); // Check here for shortname collisions and warn about them. $course->check_shortname_collision(); if (!$course->can_approve()) { continue; } $category = $course->get_category();> // Fullname of the user who requested the course (with link to profile if current user can view it). $row = array(); > $requesterfullname = $OUTPUT->user_picture($course->get_requester(), [ $row[] = format_string($course->shortname); > 'includefullname' => true, $row[] = format_string($course->fullname); > 'link' => user_can_view_profile($course->get_requester()), $row[] = fullname($course->get_requester()); > ]); $row[] = format_text($course->summary, $course->summaryformat); >$row[] = $category->get_formatted_name();> $row[] = $requesterfullname;< $row[] = fullname($course->get_requester());$row[] = $OUTPUT->single_button(new moodle_url($baseurl, array('approve' => $course->id, 'sesskey' => sesskey())), get_string('approve'), 'get') . $OUTPUT->single_button(new moodle_url($baseurl, array('reject' => $course->id)), get_string('rejectdots'), 'get'); /// Add the row to the table. $table->data[] = $row; } /// Display the table. echo html_writer::table($table); /// Message about name collisions, if necessary. if (!empty($collision)) { print_string('shortnamecollisionwarning'); } } /// Finish off the page. echo $OUTPUT->single_button($CFG->wwwroot . '/course/index.php', get_string('backtocourselisting')); echo $OUTPUT->footer();