public function get_events_select($selectwhere, array $params, $sort, $limitfrom, $limitnum) { global $DB; $sort = self::tweak_sort_by_id($sort); $events = array(); $records = $DB->get_records_select('logstore_standard_log', $selectwhere, $params, $sort, '*', $limitfrom, $limitnum); foreach ($records as $data) { $extra = array('origin' => $data->origin, 'ip' => $data->ip, 'realuserid' => $data->realuserid); $data = (array) $data; $id = $data['id']; $data['other'] = unserialize($data['other']); if ($data['other'] === false) { $data['other'] = array(); } unset($data['origin']); unset($data['ip']); unset($data['realuserid']); unset($data['id']); $event = \core\event\base::restore($data, $extra); // Add event to list if it's valid. if ($event) { $events[$id] = $event; } } return $events; }
public function test_restore_event() { $event1 = \core_tests\event\unittest_executed::create(array('context' => context_system::instance(), 'other' => array('sample' => 1, 'xx' => 10))); $data1 = $event1->get_data(); $data1['eventname'] = '\\mod_xx\\event\\xx_yy'; $data1['component'] = 'mod_xx'; $data1['action'] = 'yy'; $data1['target'] = 'xx'; $extra1 = array('origin' => 'cli'); $event2 = \core\event\base::restore($data1, $extra1); $data2 = $event2->get_data(); $extra2 = $event2->get_logextra(); $this->assertInstanceOf('core\\event\\unknown_logged', $event2); $this->assertTrue($event2->is_triggered()); $this->assertTrue($event2->is_restored()); $this->assertNull($event2->get_url()); $this->assertEquals($data1, $data2); $this->assertEquals($extra1, $extra2); }
/** * Returns an event from the log data. * * @param stdClass $data Log data * @return \core\event\base */ public function get_log_event($data) { $extra = array('origin' => $data->origin, 'ip' => $data->ip, 'realuserid' => $data->realuserid); $data = (array) $data; $id = $data['id']; $data['other'] = unserialize($data['other']); if ($data['other'] === false) { $data['other'] = array(); } unset($data['origin']); unset($data['ip']); unset($data['realuserid']); unset($data['id']); if (!($event = \core\event\base::restore($data, $extra))) { return null; } return $event; }
public function test_restore_event() { $event1 = \core_tests\event\unittest_executed::create(array('courseid' => 1, 'context' => \context_system::instance(), 'other' => array('sample' => 1, 'xx' => 10))); $data1 = $event1->get_data(); $event2 = \core\event\base::restore($data1, array('origin' => 'clid')); $data2 = $event2->get_data(); $this->assertTrue($event2->is_triggered()); $this->assertTrue($event2->is_restored()); $this->assertEquals($data1, $data2); $this->assertInstanceOf('core_tests\\event\\unittest_executed', $event2); $this->assertEquals($event1->get_context(), $event2->get_context()); // Now test problematic data. $data3 = $data1; $data3['eventname'] = '\\a\\b\\c'; $event3 = \core\event\base::restore($data3, array()); $this->assertFalse($event3, 'Class name must match'); $data4 = $data1; unset($data4['userid']); $event4 = \core\event\base::restore($data4, array()); $this->assertInstanceOf('core_tests\\event\\unittest_executed', $event4); $this->assertDebuggingCalled(); $data5 = $data1; $data5['xx'] = 'xx'; $event5 = \core\event\base::restore($data5, array()); $this->assertInstanceOf('core_tests\\event\\unittest_executed', $event5); $this->assertDebuggingCalled(); }
/** * There is no api involved so the best we can do is test legacy data by triggering event manually. */ public function test_course_viewed() { $user = $this->getDataGenerator()->create_user(); $course = $this->getDataGenerator()->create_course(); $context = context_course::instance($course->id); // First try with no optional parameters. $eventparams = array(); $eventparams['context'] = $context; $event = \core\event\course_viewed::create($eventparams); // Trigger and capture the event. $sink = $this->redirectEvents(); $event->trigger(); $events = $sink->get_events(); $event = reset($events); $this->assertInstanceOf('\\core\\event\\course_viewed', $event); $this->assertEquals(context_course::instance($course->id), $event->get_context()); $expected = array($course->id, 'course', 'view', 'view.php?id=' . $course->id, $course->id); $this->assertEventLegacyLogData($expected, $event); $this->assertEventContextNotUsed($event); // Now try with optional parameters. $sectionid = 34; $eventparams = array(); $eventparams['context'] = $context; $eventparams['other'] = array('coursesectionid' => $sectionid); $event = \core\event\course_viewed::create($eventparams); // Trigger and capture the event. $sink = $this->redirectEvents(); $event->trigger(); $loggeddata = $event->get_data(); $events = $sink->get_events(); $event = reset($events); $this->assertInstanceOf('\\core\\event\\course_viewed', $event); $this->assertEquals(context_course::instance($course->id), $event->get_context()); $expected = array($course->id, 'course', 'view section', 'view.php?id=' . $course->id . '&section=' . $sectionid, $sectionid); $this->assertEventLegacyLogData($expected, $event); $this->assertEventContextNotUsed($event); delete_course($course->id, false); $restored = \core\event\base::restore($loggeddata, array('origin' => 'web', 'ip' => '127.0.0.1')); $this->assertInstanceOf('\\core\\event\\course_viewed', $restored); $this->assertNull($restored->get_url()); }
/** * Get an array of events based on the passed on params. * * @param string $selectwhere select conditions. * @param array $params params. * @param string $sort sortorder. * @param int $limitfrom limit constraints. * @param int $limitnum limit constraints. * * @return array|\core\event\base[] array of events. */ public function get_events_select($selectwhere, array $params, $sort, $limitfrom, $limitnum) { if (!$this->init()) { return array(); } if (!($dbtable = $this->get_config('dbtable'))) { return array(); } $sort = self::tweak_sort_by_id($sort); $events = array(); $records = $this->extdb->get_records_select($dbtable, $selectwhere, $params, $sort, '*', $limitfrom, $limitnum); foreach ($records as $data) { $extra = array('origin' => $data->origin, 'realuserid' => $data->realuserid, 'ip' => $data->ip); $data = (array) $data; $id = $data['id']; $data['other'] = unserialize($data['other']); if ($data['other'] === false) { $data['other'] = array(); } unset($data['origin']); unset($data['ip']); unset($data['realuserid']); unset($data['id']); $event = \core\event\base::restore($data, $extra); // Add event to list if it's valid. if ($event) { $events[$id] = $event; } } return $events; }