MDL-60959 calendar: use related course in calendar_event_exporter

This commit is contained in:
Ryan Wyllie
2018-01-09 01:51:12 +00:00
parent 013f0b2266
commit bb4691ec7b
2 changed files with 87 additions and 7 deletions
+5 -7
View File
@@ -93,6 +93,8 @@ class calendar_event_exporter extends event_exporter_base {
$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.
@@ -109,12 +111,9 @@ class calendar_event_exporter extends event_exporter_base {
$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);
@@ -165,11 +164,10 @@ class calendar_event_exporter extends event_exporter_base {
}
// 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'],
])
];
@@ -26,6 +26,9 @@ defined('MOODLE_INTERNAL') || die();
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.
@@ -147,4 +150,83 @@ class core_calendar_event_exporter_testcase extends advanced_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);
}
}