-
Notifications
You must be signed in to change notification settings - Fork 54
Expand file tree
/
Copy patheditoptions.php
More file actions
executable file
·130 lines (106 loc) · 4.68 KB
/
Copy patheditoptions.php
File metadata and controls
executable file
·130 lines (106 loc) · 4.68 KB
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/>.
/**
* Edit options form
*
* @package mod_booking
* @copyright 2021 Wunderbyte GmbH <info@wunderbyte.at>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
require_once(__DIR__ . '/../../config.php');
require_once($CFG->dirroot . '/mod/booking/locallib.php');
require_once($CFG->libdir . '/formslib.php');
use mod_booking\singleton_service;
use mod_booking\utils\wb_payment;
global $DB, $OUTPUT, $PAGE, $USER;
$cmid = required_param('id', PARAM_INT); // Course Module ID.
$optionid = required_param('optionid', PARAM_INT);
$copyoptionid = optional_param('copyoptionid', 0, PARAM_INT);
$createfromoptiondates = optional_param('createfromoptiondates', 0, PARAM_INT);
$confirm = optional_param('confirm', 0, PARAM_INT);
// Fallback url when there is no returnurl.
$returnurl = new moodle_url('/mod/booking/view.php', ['id' => $cmid]);
$returnurl = optional_param('returnurl', $returnurl->out(), PARAM_LOCALURL);
[$course, $cm] = get_course_and_cm_from_cmid($cmid);
require_course_login($course, false, $cm);
$url = new moodle_url('/mod/booking/editoptions.php', ['id' => $cmid, 'optionid' => $optionid]);
$PAGE->set_url($url);
// In Moodle 4.0+ we want to turn the instance description off on every page except view.php.
$PAGE->activityheader->disable();
$PAGE->set_pagelayout('admin');
$PAGE->add_body_class('limitedwidth');
// Initialize bookingid.
$bookingid = (int) $cm->instance;
$groupmode = groups_get_activity_groupmode($cm);
if (!$booking = singleton_service::get_instance_of_booking_by_cmid($cmid)) {
throw new invalid_parameter_exception("Course module id is incorrect");
}
if (!$context = context_module::instance($cmid)) {
throw new moodle_exception('badcontext');
}
if (
(
// Either the user has the general capability to update booking options...
has_capability('mod/booking:updatebooking', $context)
|| (
// ... or they have the capability to edit their own options and are actually editing their own option.
has_capability('mod/booking:addeditownoption', $context)
&& booking_check_if_teacher($optionid)
)
|| (
// ... or they have the capability to add options and are creating a new option (optionid is 0).
has_capability('mod/booking:addoption', $context)
&& empty($optionid)
)
) == false
) {
throw new moodle_exception('nopermissions');
}
// We don't need this anymore.
$optionid = $optionid < 0 ? 0 : $optionid;
$settings = singleton_service::get_instance_of_booking_option_settings($optionid);
if (!empty($settings->cmid) && $settings->cmid != $cmid) {
throw new moodle_exception('badcontext');
}
// New code.
$params = [
'cmid' => $cmid,
'id' => $optionid, // In the context of option_form class, id always refers to optionid.
'optionid' => $optionid, // Just kept on for legacy reasons.
'bookingid' => $bookingid,
'copyoptionid' => $copyoptionid,
'returnurl' => $returnurl,
];
// In this example the form has arguments ['arg1' => 'val1'].
$form = new mod_booking\form\option_form(null, null, 'post', '', [], true, $params);
// Set the form data with the same method that is called when loaded from JS.
// It should correctly set the data for the supplied arguments.
$form->set_data_for_dynamic_submission();
echo $OUTPUT->header();
if (!empty($optionid)) {
$settings = singleton_service::get_instance_of_booking_option_settings($optionid);
echo html_writer::div(
get_string('youareediting', 'mod_booking', $settings->get_title_with_prefix()),
'alert alert-info editoption-youareediting-alert'
);
if (!wb_payment::pro_version_is_activated()) {
echo html_writer::div(get_string('optionformconfiggetpro', 'mod_booking'), 'small mt-2');
}
}
// Render the form in a specific container, there should be nothing else in the same container.
echo html_writer::div($form->render(), '', ['id' => 'editoptionsformcontainer']);
$PAGE->requires->js_call_amd('mod_booking/dynamiceditoptionform', 'init', $params);
echo $OUTPUT->footer();