forked from moodle/moodle
-
Notifications
You must be signed in to change notification settings - Fork 0
/
delete.php
130 lines (110 loc) · 4.87 KB
/
delete.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
<?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/>.
/**
* This file is part of the Calendar section Moodle
* It is responsible for deleting a calendar entry + optionally its repeats
*
* @copyright 2009 Sam Hemelryk
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
* @package calendar
*/
require_once('../config.php');
require_once($CFG->dirroot.'/calendar/event_form.php');
require_once($CFG->dirroot.'/calendar/lib.php');
require_once($CFG->dirroot.'/course/lib.php');
require_once($CFG->dirroot.'/calendar/renderer.php');
$eventid = required_param('id', PARAM_INT);
$confirm = optional_param('confirm', false, PARAM_BOOL);
$repeats = optional_param('repeats', false, PARAM_BOOL);
$courseid = optional_param('course', 0, PARAM_INT);
$PAGE->set_url('/calendar/delete.php', array('id'=>$eventid));
if(!$site = get_site()) {
redirect(new moodle_url('/admin/index.php'));
}
$event = calendar_event::load($eventid);
/**
* We are going to be picky here, and require that any event types other than
* group and site be associated with a course. This means any code that is using
* custom event types (and there are a few) will need to associate thier event with
* a course
*/
if ($event->eventtype !== 'user' && $event->eventtype !== 'site') {
$courseid = $event->courseid;
}
$course = $DB->get_record('course', array('id'=>$courseid));
require_login($course);
if (!$course) {
$PAGE->set_context(context_system::instance()); //TODO: wrong
}
// Check the user has the required capabilities to edit an event
if (!calendar_edit_event_allowed($event)) {
print_error('nopermissions');
}
// Count the repeats, do we need to consider the possibility of deleting repeats
$event->timedurationuntil = $event->timestart + $event->timeduration;
$event->count_repeats();
// Is used several times, and sometimes with modification if required
$viewcalendarurl = new moodle_url(CALENDAR_URL.'view.php', array('view'=>'upcoming'));
$viewcalendarurl->param('time', $event->timestart, '%Y');
// If confirm is set (PARAM_BOOL) then we have confirmation of initention to delete
if ($confirm) {
// Confirm the session key to stop CSRF
if (!confirm_sesskey()) {
print_error('confirmsesskeybad');
}
// Delete the event and possibly repeats
$event->delete($repeats);
// If the event has an associated course then we need to include it in the redirect link
if (!empty($event->courseid) && $event->courseid > 0) {
$viewcalendarurl->param('course', $event->courseid);
}
// And redirect
redirect($viewcalendarurl);
}
// Prepare the page to show the confirmation form
$title = get_string('deleteevent', 'calendar');
$strcalendar = get_string('calendar', 'calendar');
$PAGE->navbar->add($strcalendar, $viewcalendarurl);
$PAGE->navbar->add($title);
$PAGE->set_title($site->shortname.': '.$strcalendar.': '.$title);
$PAGE->set_heading($COURSE->fullname);
echo $OUTPUT->header();
echo $OUTPUT->box_start('eventlist');
// Delete this event button is always shown
$url = new moodle_url(CALENDAR_URL.'delete.php', array('id'=>$event->id, 'confirm'=>true));
$buttons = $OUTPUT->single_button($url, get_string('delete'));
// If there are repeated events then add a Delete Repeated button
$repeatspan = '';
if (!empty($event->eventrepeats) && $event->eventrepeats > 0) {
$url = new moodle_url(CALENDAR_URL.'delete.php', array('id'=>$event->repeatid, 'confirm'=>true, 'repeats'=>true));
$buttons .= $OUTPUT->single_button($url, get_string('deleteall'));
$repeatspan = '<br /><br /><span>'.get_string('youcandeleteallrepeats', 'calendar', $event->eventrepeats).'</span>';
}
// And add the cancel button
$buttons .= $OUTPUT->single_button($viewcalendarurl, get_string('cancel'));
// And show the buttons and notes
echo $OUTPUT->box_start('generalbox', 'notice');
echo $OUTPUT->box(get_string('confirmeventdelete', 'calendar').$repeatspan);
echo $OUTPUT->box($buttons, 'buttons');
echo $OUTPUT->box_end();
// Print the event so that people can visually confirm they have the correct event
$event->time = calendar_format_event_time($event, time(), null, false);
$renderer = $PAGE->get_renderer('core_calendar');
echo $renderer->start_layout();
echo $renderer->event($event, false);
echo $renderer->complete_layout();
echo $OUTPUT->box_end();
echo $OUTPUT->footer();