From a3acafa0ca131801f356f7f3f07428f2c419bbbf Mon Sep 17 00:00:00 2001 From: Serge Gauthier Date: Thu, 21 Jan 2016 11:36:42 -0500 Subject: [PATCH] MDL-52709 tool_lp: Create C(R)UD events for competency frameworks --- admin/tool/lp/classes/api.php | 18 ++- .../event/competency_framework_created.php | 108 +++++++++++++++ .../event/competency_framework_deleted.php | 101 ++++++++++++++ .../event/competency_framework_updated.php | 111 ++++++++++++++++ admin/tool/lp/lang/en/tool_lp.php | 3 + admin/tool/lp/tests/event_test.php | 125 ++++++++++++++++++ admin/tool/lp/version.php | 2 +- 7 files changed, 465 insertions(+), 3 deletions(-) create mode 100644 admin/tool/lp/classes/event/competency_framework_created.php create mode 100644 admin/tool/lp/classes/event/competency_framework_deleted.php create mode 100644 admin/tool/lp/classes/event/competency_framework_updated.php create mode 100644 admin/tool/lp/tests/event_test.php diff --git a/admin/tool/lp/classes/api.php b/admin/tool/lp/classes/api.php index e9d8970260a33..2fa7e596403fe 100644 --- a/admin/tool/lp/classes/api.php +++ b/admin/tool/lp/classes/api.php @@ -417,7 +417,11 @@ public static function create_framework(stdClass $record) { $framework->set_taxonomies($record->taxonomies); } - $id = $framework->create(); + $framework = $framework->create(); + + // Trigger a competency framework created event. + \tool_lp\event\competency_framework_created::create_from_framework($framework)->trigger(); + return $framework; } @@ -444,7 +448,7 @@ public static function duplicate_framework($id) { // Adding the suffix copy to the shortname. $framework->set_shortname(get_string('duplicateditemname', 'tool_lp', $framework->get_shortname())); $framework->set_id(0); - $framework->create(); + $framework = $framework->create(); // Array that match the old competencies ids with the new one to use when copying related competencies. $frameworkcompetency = competency::get_framework_tree($id); @@ -483,6 +487,9 @@ public static function duplicate_framework($id) { $transaction->rollback(new moodle_exception('Error while duplicating the competency framework.')); } + // Trigger a competency framework created event. + \tool_lp\event\competency_framework_created::create_from_framework($framework)->trigger(); + return $framework; } @@ -497,6 +504,10 @@ public static function duplicate_framework($id) { public static function delete_framework($id) { $framework = new competency_framework($id); require_capability('tool/lp:competencymanage', $framework->get_context()); + + // Trigger a competency framework deleted event. + \tool_lp\event\competency_framework_deleted::create_from_framework($framework)->trigger(); + return $framework->delete(); } @@ -520,6 +531,9 @@ public static function update_framework($record) { $framework->set_taxonomies($record->taxonomies); } + // Trigger a competency framework updated event. + \tool_lp\event\competency_framework_updated::create_from_framework($framework)->trigger(); + return $framework->update(); } diff --git a/admin/tool/lp/classes/event/competency_framework_created.php b/admin/tool/lp/classes/event/competency_framework_created.php new file mode 100644 index 0000000000000..7a563e60a9025 --- /dev/null +++ b/admin/tool/lp/classes/event/competency_framework_created.php @@ -0,0 +1,108 @@ +. + +/** + * Competency framework created event. + * + * @package tool_lp + * @copyright 2016 Serge Gauthier + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +namespace tool_lp\event; + +use core\event\base; +use tool_lp\competency_framework; + +defined('MOODLE_INTERNAL') || die(); + +/** + * Competency framework created event class. + * + * @property-read array $other { + * Extra information about event. + * } + * + * @package tool_lp + * @since Moodle 3.1 + * @copyright 2016 Serge Gauthier + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class competency_framework_created extends base { + + /** + * Convenience method to instantiate the event. + * + * @param competency_framework $framework The framework. + * @return self + */ + public static final function create_from_framework(competency_framework $framework) { + if (!$framework->get_id()) { + throw new \coding_exception('The competency framework ID must be set.'); + } + $event = static::create(array( + 'contextid' => $framework->get_contextid(), + 'objectid' => $framework->get_id() + )); + return $event; + } + + /** + * Returns localised general event name. + * + * @return string + */ + public static function get_name() { + return get_string('eventcompetencyframeworkcreated', 'tool_lp'); + } + + /** + * Returns non-localised description of what happened. + * + * @return string + */ + public function get_description() { + return "The user with id '$this->userid' created the competency framework with id '$this->objectid'."; + } + + /** + * Returns relevant URL. + * + * @return \moodle_url + */ + public function get_url() { + return new \moodle_url('/admin/tool/lp/editcompetencyframework.php', + array('id' => $this->objectid, 'pagecontextid' => $this->contextid)); + } + + /** + * Initialise the event data. + */ + protected function init() { + $this->data['objecttable'] = competency_framework::TABLE; + $this->data['crud'] = 'c'; + $this->data['edulevel'] = self::LEVEL_OTHER; + } + + /** + * Get_objectid_mapping method. + * + * @return string the name of the restore mapping the objectid links to + */ + public static function get_objectid_mapping() { + return base::NOT_MAPPED; + } + +} diff --git a/admin/tool/lp/classes/event/competency_framework_deleted.php b/admin/tool/lp/classes/event/competency_framework_deleted.php new file mode 100644 index 0000000000000..7f3beb93d348a --- /dev/null +++ b/admin/tool/lp/classes/event/competency_framework_deleted.php @@ -0,0 +1,101 @@ +. + +/** + * Competency framework deleted event. + * + * @package tool_lp + * @copyright 2016 Serge Gauthier + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace tool_lp\event; + +use core\event\base; +use tool_lp\competency_framework; + +defined('MOODLE_INTERNAL') || die(); + +/** + * Competency framework deleted event class. + * + * @property-read array $other { + * Extra information about event. + * } + * + * @package tool_lp + * @since Moodle 3.1 + * @copyright 2016 Serge Gauthier + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class competency_framework_deleted extends base { + + /** + * Convenience method to instantiate the event. + * + * @param competency_framework $framework The framework. + * @return self + */ + public static final function create_from_framework(competency_framework $framework) { + if (!$framework->get_id()) { + throw new \coding_exception('The competency framework ID must be set.'); + } + $event = static::create(array( + 'contextid' => $framework->get_contextid(), + 'objectid' => $framework->get_id() + )); + return $event; + } + + /** + * Returns description of what happened. + * + * @return string + */ + public function get_description() { + return "The user with id '$this->userid' deleted the competency framework with id '$this->objectid'."; + } + + /** + * Return localised event name. + * + * @return string + */ + public static function get_name() { + return get_string('eventcompetencyframeworkdeleted', 'tool_lp'); + } + + /** + * Init method. + * + * @return void + */ + protected function init() { + $this->data['crud'] = 'd'; + $this->data['edulevel'] = self::LEVEL_OTHER; + $this->data['objecttable'] = competency_framework::TABLE;; + } + + /** + * Get_objectid_mapping method. + * + * @return string the name of the restore mapping the objectid links to + */ + public static function get_objectid_mapping() { + return base::NOT_MAPPED; + } + +} diff --git a/admin/tool/lp/classes/event/competency_framework_updated.php b/admin/tool/lp/classes/event/competency_framework_updated.php new file mode 100644 index 0000000000000..adfaaa706e754 --- /dev/null +++ b/admin/tool/lp/classes/event/competency_framework_updated.php @@ -0,0 +1,111 @@ +. + +/** + * Competency framework updated event. + * + * @package tool_lp + * @copyright 2016 Serge Gauthier + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace tool_lp\event; + +use core\event\base; +use tool_lp\competency_framework; + +defined('MOODLE_INTERNAL') || die(); + +/** + * Competency framework updated event class. + * + * @property-read array $other { + * Extra information about event. + * } + * + * @package tool_lp + * @since Moodle 3.1 + * @copyright 2016 Serge Gauthier + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class competency_framework_updated extends base { + + /** + * Convenience method to instantiate the event. + * + * @param competency_framework $framework The framework. + * @return self + */ + public static final function create_from_framework(competency_framework $framework) { + if (!$framework->get_id()) { + throw new \coding_exception('The competency framework ID must be set.'); + } + $event = static::create(array( + 'contextid' => $framework->get_contextid(), + 'objectid' => $framework->get_id() + )); + return $event; + } + + /** + * Returns description of what happened. + * + * @return string + */ + public function get_description() { + return "The user with id '$this->userid' updated the competency framework with id '$this->objectid'."; + } + + /** + * Return localised event name. + * + * @return string + */ + public static function get_name() { + return get_string('eventcompetencyframeworkupdated', 'tool_lp'); + } + + /** + * Get URL related to the action + * + * @return \moodle_url + */ + public function get_url() { + return new \moodle_url('/admin/tool/lp/editcompetencyframework.php', + array('id' => $this->objectid, 'pagecontextid' => $this->contextid)); + } + + /** + * Init method. + * + * @return void + */ + protected function init() { + $this->data['crud'] = 'u'; + $this->data['edulevel'] = self::LEVEL_OTHER; + $this->data['objecttable'] = competency_framework::TABLE; + } + + /** + * Get_objectid_mapping method. + * + * @return string the name of the restore mapping the objectid links to + */ + public static function get_objectid_mapping() { + return base::NOT_MAPPED; + } + +} diff --git a/admin/tool/lp/lang/en/tool_lp.php b/admin/tool/lp/lang/en/tool_lp.php index 6b1b77ffcf2c2..9a734bebdce19 100644 --- a/admin/tool/lp/lang/en/tool_lp.php +++ b/admin/tool/lp/lang/en/tool_lp.php @@ -92,6 +92,9 @@ $string['editthisplan'] = 'Edit this learning plan'; $string['editthisuserevidence'] = 'Edit this evidence'; $string['edituserevidence'] = 'Edit evidence'; +$string['eventcompetencyframeworkcreated'] = 'Competency framework created.'; +$string['eventcompetencyframeworkdeleted'] = 'Competency framework deleted.'; +$string['eventcompetencyframeworkupdated'] = 'Competency framework updated.'; $string['evidence'] = 'Evidence'; $string['evidence_competencyrule'] = 'The rule of the competency was met.'; $string['evidence_coursecompleted'] = 'The course \'{$a}\' was completed.'; diff --git a/admin/tool/lp/tests/event_test.php b/admin/tool/lp/tests/event_test.php new file mode 100644 index 0000000000000..8818776b11ee6 --- /dev/null +++ b/admin/tool/lp/tests/event_test.php @@ -0,0 +1,125 @@ +. + +/** + * Event tests. + * + * @package tool_lp + * @copyright 2016 Serge Gauthier + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); +global $CFG; + +use tool_lp\api; + +/** + * Event tests. + * + * @package tool_lp + * @copyright 2016 Serge Gauthier + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class tool_lp_event_testcase extends advanced_testcase { + + /** + * Test the competency framework created event. + * + */ + public function test_competency_framework_created() { + $this->resetAfterTest(true); + $this->setAdminUser(); + $lpg = $this->getDataGenerator()->get_plugin_generator('tool_lp'); + + // Use DataGenerator to have a record framework with the right format. + $record = $lpg->create_framework()->to_record(); + $record->id = 0; + $record->shortname = "New shortname"; + $record->idnumber = "New idnumber"; + + // Trigger and capture the event. + $sink = $this->redirectEvents(); + $framework = api::create_framework((object) $record); + + // Get our event event. + $events = $sink->get_events(); + $event = reset($events); + + // Check that the event data is valid. + $this->assertInstanceOf('\tool_lp\event\competency_framework_created', $event); + $this->assertEquals($framework->get_id(), $event->objectid); + $this->assertEquals($framework->get_contextid(), $event->contextid); + $this->assertEventContextNotUsed($event); + $this->assertDebuggingNotCalled(); + } + + /** + * Test the competency framework deleted event. + * + */ + public function test_competency_framework_deleted() { + $this->resetAfterTest(true); + $this->setAdminUser(); + $lpg = $this->getDataGenerator()->get_plugin_generator('tool_lp'); + + $framework = $lpg->create_framework(); + + // Trigger and capture the event. + $sink = $this->redirectEvents(); + api::delete_framework($framework->get_id()); + + // Get our event event. + $events = $sink->get_events(); + $event = reset($events); + + // Check that the event data is valid. + $this->assertInstanceOf('\tool_lp\event\competency_framework_deleted', $event); + $this->assertEquals($framework->get_id(), $event->objectid); + $this->assertEquals($framework->get_contextid(), $event->contextid); + $this->assertEventContextNotUsed($event); + $this->assertDebuggingNotCalled(); + } + + /** + * Test the competency framework updated event. + * + */ + public function test_competency_framework_updated() { + $this->resetAfterTest(true); + $this->setAdminUser(); + $lpg = $this->getDataGenerator()->get_plugin_generator('tool_lp'); + + $framework = $lpg->create_framework(); + + // Trigger and capture the event. + $sink = $this->redirectEvents(); + $framework->set_shortname('Shortname modified'); + api::update_framework($framework->to_record()); + + // Get our event event. + $events = $sink->get_events(); + $event = reset($events); + + // Check that the event data is valid. + $this->assertInstanceOf('\tool_lp\event\competency_framework_updated', $event); + $this->assertEquals($framework->get_id(), $event->objectid); + $this->assertEquals($framework->get_contextid(), $event->contextid); + $this->assertEventContextNotUsed($event); + $this->assertDebuggingNotCalled(); + } + +} \ No newline at end of file diff --git a/admin/tool/lp/version.php b/admin/tool/lp/version.php index a6da720897884..33ba964a95cba 100644 --- a/admin/tool/lp/version.php +++ b/admin/tool/lp/version.php @@ -25,6 +25,6 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2015111041; // The current plugin version (Date: YYYYMMDDXX). +$plugin->version = 2015111043; // The current plugin version (Date: YYYYMMDDXX). $plugin->requires = 2014110400; // Requires this Moodle version. $plugin->component = 'tool_lp'; // Full name of the plugin (used for diagnostics).