From 6d82ef49ea4164629232b2cd18cec1079f1597c2 Mon Sep 17 00:00:00 2001 From: Cameron Ball Date: Wed, 22 Mar 2017 15:56:12 +0800 Subject: [PATCH] MDL-58087 core_calendar: Event mapper learned to map to stdClass and array Part of MDL-55611 epic. --- .../local/event/mappers/event_mapper.php | 25 ++++++++++--- .../interfaces/event_mapper_interface.php | 16 +++++++++ calendar/tests/event_mapper_test.php | 36 +++++++++++++++++++ 3 files changed, 72 insertions(+), 5 deletions(-) diff --git a/calendar/classes/local/event/mappers/event_mapper.php b/calendar/classes/local/event/mappers/event_mapper.php index e72edc81d8a..d88b23b5465 100644 --- a/calendar/classes/local/event/mappers/event_mapper.php +++ b/calendar/classes/local/event/mappers/event_mapper.php @@ -85,7 +85,21 @@ class event_mapper implements event_mapper_interface { $action = ($event instanceof action_event_interface) ? $event->get_action() : null; $timeduration = $event->get_times()->get_end_time()->getTimestamp() - $event->get_times()->get_start_time()->getTimestamp(); - return new event((object) [ + return new event($this->from_event_to_stdclass($event)); + } + + public function from_event_to_stdclass(event_interface $event) { + $action = ($event instanceof action_event_interface) ? $event->get_action() : null; + $timeduration = $event->get_times()->get_end_time()->getTimestamp() - $event->get_times()->get_start_time()->getTimestamp(); + + return (object)$this->from_event_to_assoc_array($event); + } + + public function from_event_to_assoc_array(event_interface $event) { + $action = ($event instanceof action_event_interface) ? $event->get_action() : null; + $timeduration = $event->get_times()->get_end_time()->getTimestamp() - $event->get_times()->get_start_time()->getTimestamp(); + + return [ 'id' => $event->get_id(), 'name' => $event->get_name(), 'description' => $event->get_description()->get_value(), @@ -94,8 +108,8 @@ class event_mapper implements event_mapper_interface { 'groupid' => $event->get_group() ? $event->get_group()->get_id() : null, 'userid' => $event->get_user() ? $event->get_user()->get_id() : null, 'repeatid' => $event->get_repeats()->get_id(), - 'modulename' => $event->get_course_module()->get('modname'), - 'instance' => $event->get_course_module()->get('instance'), + 'modulename' => $event->get_course_module() ? $event->get_course_module()->get('modname') : null, + 'instance' => $event->get_course_module() ? $event->get_course_module()->get('instance') : null, 'eventtype' => $event->get_type(), 'timestart' => $event->get_times()->get_start_time()->getTimestamp(), 'timeduration' => $timeduration, @@ -106,7 +120,8 @@ class event_mapper implements event_mapper_interface { 'actionname' => $action ? $action->get_name() : null, 'actionurl' => $action ? $action->get_url() : null, 'actionnum' => $action ? $action->get_item_count() : null, - 'actionactionable' => $action ? $action->is_actionable() : null - ]); + 'actionactionable' => $action ? $action->is_actionable() : null, + 'sequence' => 1 + ]; } } diff --git a/calendar/classes/local/interfaces/event_mapper_interface.php b/calendar/classes/local/interfaces/event_mapper_interface.php index 676da86fa6f..696e471f7b1 100644 --- a/calendar/classes/local/interfaces/event_mapper_interface.php +++ b/calendar/classes/local/interfaces/event_mapper_interface.php @@ -51,4 +51,20 @@ interface event_mapper_interface { * @return event The mapped legacy event. */ public function from_event_to_legacy_event(event_interface $event); + + /** + * Map an event to a stdClass + * + * @param event_interface $event The legacy event. + * @return \stdClass The mapped stdClass. + */ + public function from_event_to_stdclass(event_interface $event); + + /** + * Map an event to an associative array. + * + * @param event_interface $event The legacy event. + * @return array The mapped legacy event array. + */ + public function from_event_to_assoc_array(event_interface $event); } diff --git a/calendar/tests/event_mapper_test.php b/calendar/tests/event_mapper_test.php index 91742dc24bc..4efb33e7d61 100644 --- a/calendar/tests/event_mapper_test.php +++ b/calendar/tests/event_mapper_test.php @@ -71,6 +71,42 @@ class core_calendar_event_mapper_testcase extends advanced_testcase { $this->assertInstanceOf(event::class, $legacyevent); } + /** + * Test event -> stdClass + */ + public function test_from_event_to_stdclass() { + $this->resetAfterTest(true); + $this->setAdminUser(); + $legacyevent = $this->create_event(['modname' => 'assign', 'instance' => 1]); + $event = new event_mapper_test_event($legacyevent); + $mapper = new event_mapper( + new event_mapper_test_event_factory() + ); + $obj = $mapper->from_event_to_stdclass($event); + $this->assertInstanceOf(\stdClass::class, $obj); + $this->assertEquals($obj->name, $event->get_name()); + $this->assertEquals($obj->eventtype, $event->get_type()); + $this->assertEquals($obj->timestart, $event->get_times()->get_start_time()->getTimestamp()); + } + + /** + * Test event -> array + */ + public function test_from_event_to_assoc_array() { + $this->resetAfterTest(true); + $this->setAdminUser(); + $legacyevent = $this->create_event(['modname' => 'assign', 'instance' => 1]); + $event = new event_mapper_test_event($legacyevent); + $mapper = new event_mapper( + new event_mapper_test_event_factory() + ); + $arr = $mapper->from_event_to_assoc_array($event); + $this->assertTrue(is_array($arr)); + $this->assertEquals($arr['name'], $event->get_name()); + $this->assertEquals($arr['eventtype'], $event->get_type()); + $this->assertEquals($arr['timestart'], $event->get_times()->get_start_time()->getTimestamp()); + } + public function test_from_action_event_to_legacy_event() { $this->resetAfterTest(true); $this->setAdminUser();