Skip to content

Commit

Permalink
MDL-44911 use unknown_logged class when viewing unknown events in rep…
Browse files Browse the repository at this point in the history
…orts
  • Loading branch information
skodak committed Apr 14, 2014
1 parent 069fe26 commit d409944
Show file tree
Hide file tree
Showing 4 changed files with 116 additions and 1 deletion.
1 change: 1 addition & 0 deletions lang/en/moodle.php
Expand Up @@ -739,6 +739,7 @@
$string['eventcoursemoduleinstancelistviewed'] = 'Course module instance list viewed';
$string['eventemailfailed'] = 'Email failed to send';
$string['eventname'] = 'Event name';
$string['eventunknownlogged'] = 'Unknown event';
$string['eventusercreated'] = 'User created';
$string['eventuserdeleted'] = 'User deleted';
$string['eventuserlistviewed'] = 'User list viewed';
Expand Down
23 changes: 22 additions & 1 deletion lib/classes/event/base.php
Expand Up @@ -338,7 +338,7 @@ public static final function restore(array $data, array $logextra) {
}

if (!class_exists($classname)) {
return false;
return self::restore_unknown($data, $logextra);
}
$event = new $classname();
if (!($event instanceof \core\event\base)) {
Expand Down Expand Up @@ -370,6 +370,27 @@ public static final function restore(array $data, array $logextra) {
return $event;
}

/**
* Restore unknown event.
*
* @param array $data
* @param array $logextra
* @return unknown_logged
*/
protected static final function restore_unknown(array $data, array $logextra) {
$classname = '\core\event\unknown_logged';

/** @var unknown_logged $event */
$event = new $classname();
$event->restored = true;
$event->triggered = true;
$event->dispatched = true;
$event->data = $data;
$event->logextra = $logextra;

return $event;
}

/**
* Create fake event from legacy log data.
*
Expand Down
40 changes: 40 additions & 0 deletions lib/classes/event/unknown_logged.php
@@ -0,0 +1,40 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.

namespace core\event;

defined('MOODLE_INTERNAL') || die();

/**
* Unknown event class.
*
* @package core
* @copyright 2014 Petr Skoda
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class unknown_logged extends base {
public function init() {
throw new \coding_exception('unknown events cannot be triggered');
}

public static function get_name() {
return get_string('eventunknownlogged', 'core');
}

public function get_description() {
return 'Unknown event (' . $this->eventname . ')';
}
}
53 changes: 53 additions & 0 deletions lib/tests/event_unknown_logged_test.php
@@ -0,0 +1,53 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.

/**
* Tests for event manager, base event and observers.
*
* @package core
* @category phpunit
* @copyright 2014 Petr Skoda
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/

defined('MOODLE_INTERNAL') || die();

require_once(__DIR__.'/fixtures/event_fixtures.php');

class core_event_unknown_logged_testcase extends advanced_testcase {

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);
}
}

0 comments on commit d409944

Please sign in to comment.