diff --git a/calendar/classes/local/event/forms/managesubscriptions.php b/calendar/classes/local/event/forms/managesubscriptions.php index 102761f7116..61ef73f087c 100644 --- a/calendar/classes/local/event/forms/managesubscriptions.php +++ b/calendar/classes/local/event/forms/managesubscriptions.php @@ -40,6 +40,7 @@ class managesubscriptions extends \moodleform { * Defines the form used to add calendar subscriptions. */ public function definition() { + global $PAGE; $mform = $this->_form; $eventtypes = calendar_get_allowed_event_types(); if (in_array(true, $eventtypes, true) === false) { @@ -86,6 +87,9 @@ class managesubscriptions extends \moodleform { // Eventtype: 0 = user, 1 = global, anything else = course ID. $mform->addElement('submit', 'add', get_string('add')); + + // Add the javascript required to enhance this mform. + $PAGE->requires->js_call_amd('core_calendar/event_form', 'init', [$mform->getAttribute('id')]); } /** diff --git a/calendar/lib.php b/calendar/lib.php index a91e4f2eca8..2e78d15b6b5 100644 --- a/calendar/lib.php +++ b/calendar/lib.php @@ -2783,14 +2783,6 @@ function calendar_add_subscription($sub) { unset($sub->groupcourseid); } - // Pull the group id back out of the value. The form saves the value - // as "-" to allow the javascript to work correctly. - if (!empty($sub->groupid)) { - list($courseid, $groupid) = explode('-', $sub->groupid); - $sub->courseid = $courseid; - $sub->groupid = $groupid; - } - // Default course id if none is set. if (empty($sub->courseid)) { if ($sub->eventtype === 'site') { diff --git a/calendar/managesubscriptions.php b/calendar/managesubscriptions.php index 87289a6c9be..93457043525 100644 --- a/calendar/managesubscriptions.php +++ b/calendar/managesubscriptions.php @@ -33,6 +33,7 @@ $categoryid = optional_param('category', null, PARAM_INT); // Used for processing subscription actions. $subscriptionid = optional_param('id', 0, PARAM_INT); $pollinterval = optional_param('pollinterval', 0, PARAM_INT); +$groupcourseid = optional_param('groupcourseid', 0, PARAM_INT); $action = optional_param('action', '', PARAM_INT); $url = new moodle_url('/calendar/managesubscriptions.php'); @@ -61,7 +62,22 @@ if (!calendar_user_can_add_event($course)) { print_error('errorcannotimport', 'calendar'); } -$form = new \core_calendar\local\event\forms\managesubscriptions(null, ['courseid' => $course->id]); +// Populate the 'group' select box based on the given 'groupcourseid', if necessary. +$groups = []; +if (!empty($groupcourseid)) { + require_once($CFG->libdir . '/grouplib.php'); + $groupcoursedata = groups_get_course_data($groupcourseid); + if (!empty($groupcoursedata->groups)) { + foreach ($groupcoursedata->groups as $groupid => $groupdata) { + $groups[$groupid] = $groupdata->name; + } + } +} +$customdata = [ + 'courseid' => $course->id, + 'groups' => $groups, +]; +$form = new \core_calendar\local\event\forms\managesubscriptions(null, $customdata); $form->set_data(array( 'course' => $course->id )); diff --git a/calendar/tests/events_test.php b/calendar/tests/events_test.php index 5750d507f55..76f8374effc 100644 --- a/calendar/tests/events_test.php +++ b/calendar/tests/events_test.php @@ -533,7 +533,8 @@ class core_calendar_events_testcase extends advanced_testcase { $subscription = new stdClass(); $subscription->eventtype = 'group'; $subscription->name = 'test'; - $subscription->groupid = "{$courseid}-{$groupid}"; + $subscription->courseid = $courseid; + $subscription->groupid = $groupid; // Trigger and capture the event. $sink = $this->redirectEvents(); @@ -668,7 +669,9 @@ class core_calendar_events_testcase extends advanced_testcase { $subscription = new stdClass(); $subscription->eventtype = 'group'; $subscription->name = 'test'; - $subscription->groupid = "{$courseid}-{$groupid}"; + $subscription->courseid = $courseid; + $subscription->groupid = $groupid; + $subscription->id = calendar_add_subscription($subscription); // Now edit it. $subscription->name = 'awesome'; @@ -797,7 +800,8 @@ class core_calendar_events_testcase extends advanced_testcase { $subscription = new stdClass(); $subscription->eventtype = 'group'; $subscription->name = 'test'; - $subscription->groupid = "{$courseid}-{$groupid}"; + $subscription->groupid = $groupid; + $subscription->courseid = $courseid; $subscription->id = calendar_add_subscription($subscription); // Trigger and capture the event.