MDL-60959 calendar: use related course in calendar_event_exporter
This commit is contained in:
+5
-7
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user