$values = parent::get_other_values($output);
$event = $this->event;
+ $course = $this->related['course'];
+ $hascourse = !empty($course);
// By default all events that can be edited are
// draggable.
$values['editurl'] = $editurl->out(false);
} else if ($event->get_type() == 'category') {
$url = $event->get_category()->get_proxied_instance()->get_view_link();
- } else if ($event->get_type() == 'course') {
- $url = course_get_url($event->get_course()->get('id') ?: SITEID);
} else {
// TODO MDL-58866 We do not have any way to find urls for events outside of course modules.
- $course = $event->get_course()->get('id') ?: SITEID;
- $url = course_get_url($course);
+ $url = course_get_url($hascourse ? $course : SITEID);
}
$values['url'] = $url->out(false);
}
// Include course's shortname into the event name, if applicable.
- $course = $this->event->get_course();
- if ($course && $course->get('id') && $course->get('id') !== SITEID) {
+ if ($hascourse && $course->id !== SITEID) {
$eventnameparams = (object) [
'name' => $values['popupname'],
- 'course' => format_string($course->get('shortname'), true, [
+ 'course' => format_string($course->shortname, true, [
'context' => $this->related['context'],
])
];
use core_calendar\external\calendar_event_exporter;
use core_calendar\local\event\container;
+use core_calendar\type_factory;
+
+require_once(__DIR__ . '/helpers.php');
/**
* Calendar event exporter testcase.
$this->assertEquals($expected, $result['maxdaytimestamp']);
$this->assertEquals($max[1], $result['maxdayerror']);
}
+
+ /**
+ * Exporting a course event should generate the course URL.
+ */
+ public function test_calendar_event_exporter_course_url_course_event() {
+ global $CFG, $PAGE;
+ require_once($CFG->dirroot . '/course/lib.php');
+
+ $this->resetAfterTest(true);
+ $this->setAdminUser();
+ $generator = $this->getDataGenerator();
+ $user = $generator->create_user();
+ $course = $generator->create_course();
+ $context = context_course::instance($course->id);
+ $now = time();
+ $mapper = container::get_event_mapper();
+ $legacyevent = create_event([
+ 'courseid' => $course->id,
+ 'userid' => 1,
+ 'eventtype' => 'course',
+ 'timestart' => $now
+ ]);
+ $event = $mapper->from_legacy_event_to_event($legacyevent);
+ $exporter = new calendar_event_exporter($event, [
+ 'context' => $context,
+ 'course' => $course,
+ 'moduleinstance' => null,
+ 'daylink' => new moodle_url(''),
+ 'type' => type_factory::get_calendar_instance(),
+ 'today' => $now
+ ]);
+
+ $courseurl = course_get_url($course->id);
+ $expected = $courseurl->out(false);
+ $renderer = $PAGE->get_renderer('core_calendar');
+ $exportedevent = $exporter->export($renderer);
+
+ // The exported URL should be for the course.
+ $this->assertEquals($expected, $exportedevent->url);
+ }
+
+ /**
+ * Exporting a user event should generate the site course URL.
+ */
+ public function test_calendar_event_exporter_course_url_user_event() {
+ global $CFG, $PAGE;
+ require_once($CFG->dirroot . '/course/lib.php');
+
+ $this->resetAfterTest(true);
+ $this->setAdminUser();
+ $generator = $this->getDataGenerator();
+ $user = $generator->create_user();
+ $context = context_user::instance($user->id);
+ $now = time();
+ $mapper = container::get_event_mapper();
+ $legacyevent = create_event([
+ 'courseid' => 0,
+ 'userid' => $user->id,
+ 'eventtype' => 'user',
+ 'timestart' => $now
+ ]);
+ $event = $mapper->from_legacy_event_to_event($legacyevent);
+ $exporter = new calendar_event_exporter($event, [
+ 'context' => $context,
+ 'course' => null,
+ 'moduleinstance' => null,
+ 'daylink' => new moodle_url(''),
+ 'type' => type_factory::get_calendar_instance(),
+ 'today' => $now
+ ]);
+
+ $courseurl = course_get_url(SITEID);
+ $expected = $courseurl->out(false);
+ $renderer = $PAGE->get_renderer('core_calendar');
+ $exportedevent = $exporter->export($renderer);
+
+ // The exported URL should be for the site course.
+ $this->assertEquals($expected, $exportedevent->url);
+ }
}