diff --git a/grade/export/ods/classes/event/grade_exported.php b/grade/export/ods/classes/event/grade_exported.php new file mode 100644 index 00000000000..56834f7b2a2 --- /dev/null +++ b/grade/export/ods/classes/event/grade_exported.php @@ -0,0 +1,38 @@ +. + +/** + * Grade export event. + * + * @package gradeexport_ods + * @copyright 2016 Zane Karl + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace gradeexport_ods\event; + +defined('MOODLE_INTERNAL') || die(); + +/** + * Grade export event class. + * + * @package gradeexport_ods + * @since Moodle 3.2 + * @copyright 2016 Zane Karl + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class grade_exported extends \core\event\grade_exported { +} \ No newline at end of file diff --git a/grade/export/ods/export.php b/grade/export/ods/export.php index 031f5681bc9..7ab7660b834 100644 --- a/grade/export/ods/export.php +++ b/grade/export/ods/export.php @@ -55,5 +55,7 @@ if (!empty($CFG->gradepublishing) && !empty($key)) { echo $export->get_grade_publishing_url(); echo $OUTPUT->footer(); } else { + $event = \gradeexport_ods\event\grade_exported::create(array('context' => $context)); + $event->trigger(); $export->print_grades(); } diff --git a/grade/export/ods/lang/en/gradeexport_ods.php b/grade/export/ods/lang/en/gradeexport_ods.php index dd65582a83e..18b7ce3ed95 100644 --- a/grade/export/ods/lang/en/gradeexport_ods.php +++ b/grade/export/ods/lang/en/gradeexport_ods.php @@ -23,6 +23,7 @@ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ +$string['eventgradeexported'] = 'OpenDocument grade exported'; $string['pluginname'] = 'OpenDocument spreadsheet'; $string['ods:publish'] = 'Publish ODS grade export'; $string['ods:view'] = 'Use OpenDocument grade export'; diff --git a/grade/export/ods/tests/logging_test.php b/grade/export/ods/tests/logging_test.php new file mode 100644 index 00000000000..67ce6584385 --- /dev/null +++ b/grade/export/ods/tests/logging_test.php @@ -0,0 +1,65 @@ +. + +/** + * Events test. + * + * @package gradeexport_ods + * @copyright 2016 Zane Karl zkarl@oid.ucla.edu + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); + +/** + * Resource events test cases. + * + * @package gradeexport_ods + * @copyright 2016 Zane Karl zkarl@oid.ucla.edu + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class ods_logging_events_testcase extends advanced_testcase { + + /** + * Setup is called before calling test case. + */ + public function setUp() { + $this->resetAfterTest(); + } + + /** + * Test course_module_instance_list_viewed event. + */ + public function test_logging() { + // There is no proper API to call to trigger this event, so what we are + // doing here is simply making sure that the events returns the right information. + $course = $this->getDataGenerator()->create_course(); + $params = array( + 'context' => context_course::instance($course->id) + ); + $event = \gradeexport_ods\event\grade_exported::create($params); + // Triggering and capturing the event. + $sink = $this->redirectEvents(); + $event->trigger(); + $events = $sink->get_events(); + $this->assertCount(1, $events); + $event = reset($events); + // Checking that the event contains the expected values. + $this->assertInstanceOf('\gradeexport_ods\event\grade_exported', $event); + $this->assertEquals(context_course::instance($course->id), $event->get_context()); + $this->assertEquals('ods', $event->get_export_type()); + } +} \ No newline at end of file diff --git a/grade/export/txt/classes/event/grade_exported.php b/grade/export/txt/classes/event/grade_exported.php new file mode 100644 index 00000000000..046d856a69c --- /dev/null +++ b/grade/export/txt/classes/event/grade_exported.php @@ -0,0 +1,38 @@ +. + +/** + * Grade export event. + * + * @package gradeexport_txt + * @copyright 2016 Zane Karl + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace gradeexport_txt\event; + +defined('MOODLE_INTERNAL') || die(); + +/** + * Grade export event class. + * + * @package gradeexport_txt + * @since Moodle 3.2 + * @copyright 2016 Zane Karl + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class grade_exported extends \core\event\grade_exported { +} \ No newline at end of file diff --git a/grade/export/txt/export.php b/grade/export/txt/export.php index d150e1ae6a5..903cfbfc4b2 100644 --- a/grade/export/txt/export.php +++ b/grade/export/txt/export.php @@ -62,5 +62,7 @@ if (!empty($CFG->gradepublishing) && !empty($key)) { echo $export->get_grade_publishing_url(); echo $OUTPUT->footer(); } else { + $event = \gradeexport_txt\event\grade_exported::create(array('context' => $context)); + $event->trigger(); $export->print_grades(); } diff --git a/grade/export/txt/lang/en/gradeexport_txt.php b/grade/export/txt/lang/en/gradeexport_txt.php index db10755c38c..fc0f415ad01 100644 --- a/grade/export/txt/lang/en/gradeexport_txt.php +++ b/grade/export/txt/lang/en/gradeexport_txt.php @@ -23,6 +23,7 @@ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ +$string['eventgradeexported'] = 'TXT grade exported'; $string['pluginname'] = 'Plain text file'; $string['timeexported'] = 'Last downloaded from this course'; $string['txt:publish'] = 'Publish TXT grade export'; diff --git a/grade/export/txt/tests/logging_test.php b/grade/export/txt/tests/logging_test.php new file mode 100644 index 00000000000..e2e7d7bed74 --- /dev/null +++ b/grade/export/txt/tests/logging_test.php @@ -0,0 +1,65 @@ +. + +/** + * Events test. + * + * @package gradeexport_txt + * @copyright 2016 Zane Karl zkarl@oid.ucla.edu + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); + +/** + * Resource events test cases. + * + * @package gradeexport_txt + * @copyright 2016 Zane Karl zkarl@oid.ucla.edu + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class txt_logging_events_testcase extends advanced_testcase { + + /** + * Setup is called before calling test case. + */ + public function setUp() { + $this->resetAfterTest(); + } + + /** + * Test course_module_instance_list_viewed event. + */ + public function test_logging() { + // There is no proper API to call to trigger this event, so what we are + // doing here is simply making sure that the events returns the right information. + $course = $this->getDataGenerator()->create_course(); + $params = array( + 'context' => context_course::instance($course->id) + ); + $event = \gradeexport_txt\event\grade_exported::create($params); + // Triggering and capturing the event. + $sink = $this->redirectEvents(); + $event->trigger(); + $events = $sink->get_events(); + $this->assertCount(1, $events); + $event = reset($events); + // Checking that the event contains the expected values. + $this->assertInstanceOf('\gradeexport_txt\event\grade_exported', $event); + $this->assertEquals(context_course::instance($course->id), $event->get_context()); + $this->assertEquals('txt', $event->get_export_type()); + } +} \ No newline at end of file diff --git a/grade/export/xls/classes/event/grade_exported.php b/grade/export/xls/classes/event/grade_exported.php new file mode 100644 index 00000000000..ccea48563f9 --- /dev/null +++ b/grade/export/xls/classes/event/grade_exported.php @@ -0,0 +1,38 @@ +. + +/** + * Grade export event. + * + * @package gradeexport_xls + * @copyright 2016 Zane Karl + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace gradeexport_xls\event; + +defined('MOODLE_INTERNAL') || die(); + +/** + * Grade export event class. + * + * @package gradeexport_xls + * @since Moodle 3.2 + * @copyright 2016 Zane Karl + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class grade_exported extends \core\event\grade_exported { +} \ No newline at end of file diff --git a/grade/export/xls/export.php b/grade/export/xls/export.php index a844172e634..08555171f75 100644 --- a/grade/export/xls/export.php +++ b/grade/export/xls/export.php @@ -55,6 +55,8 @@ if (!empty($CFG->gradepublishing) && !empty($key)) { echo $export->get_grade_publishing_url(); echo $OUTPUT->footer(); } else { + $event = \gradeexport_xls\event\grade_exported::create(array('context' => $context)); + $event->trigger(); $export->print_grades(); } diff --git a/grade/export/xls/lang/en/gradeexport_xls.php b/grade/export/xls/lang/en/gradeexport_xls.php index 32b96c58597..706fe8328e1 100644 --- a/grade/export/xls/lang/en/gradeexport_xls.php +++ b/grade/export/xls/lang/en/gradeexport_xls.php @@ -23,6 +23,7 @@ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ +$string['eventgradeexported'] = 'XLS grade exported'; $string['pluginname'] = 'Excel spreadsheet'; $string['timeexported'] = 'Last downloaded from this course'; $string['xls:publish'] = 'Publish XLS grade export'; diff --git a/grade/export/xls/tests/logging_test.php b/grade/export/xls/tests/logging_test.php new file mode 100644 index 00000000000..fcada0d9e1c --- /dev/null +++ b/grade/export/xls/tests/logging_test.php @@ -0,0 +1,65 @@ +. + +/** + * Events test. + * + * @package gradeexport_xls + * @copyright 2016 Zane Karl zkarl@oid.ucla.edu + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); + +/** + * Resource events test cases. + * + * @package gradeexport_xls + * @copyright 2016 Zane Karl zkarl@oid.ucla.edu + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class xls_logging_events_testcase extends advanced_testcase { + + /** + * Setup is called before calling test case. + */ + public function setUp() { + $this->resetAfterTest(); + } + + /** + * Test course_module_instance_list_viewed event. + */ + public function test_logging() { + // There is no proper API to call to trigger this event, so what we are + // doing here is simply making sure that the events returns the right information. + $course = $this->getDataGenerator()->create_course(); + $params = array( + 'context' => context_course::instance($course->id) + ); + $event = \gradeexport_xls\event\grade_exported::create($params); + // Triggering and capturing the event. + $sink = $this->redirectEvents(); + $event->trigger(); + $events = $sink->get_events(); + $this->assertCount(1, $events); + $event = reset($events); + // Checking that the event contains the expected values. + $this->assertInstanceOf('\gradeexport_xls\event\grade_exported', $event); + $this->assertEquals(context_course::instance($course->id), $event->get_context()); + $this->assertEquals('xls', $event->get_export_type()); + } +} \ No newline at end of file diff --git a/grade/export/xml/classes/event/grade_exported.php b/grade/export/xml/classes/event/grade_exported.php new file mode 100644 index 00000000000..d9943ec156e --- /dev/null +++ b/grade/export/xml/classes/event/grade_exported.php @@ -0,0 +1,38 @@ +. + +/** + * Grade export event. + * + * @package gradeexport_xml + * @copyright 2016 Zane Karl + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace gradeexport_xml\event; + +defined('MOODLE_INTERNAL') || die(); + +/** + * Grade export event class. + * + * @package gradeexport_xml + * @since Moodle 3.2 + * @copyright 2016 Zane Karl + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class grade_exported extends \core\event\grade_exported { +} \ No newline at end of file diff --git a/grade/export/xml/export.php b/grade/export/xml/export.php index a2f1bb3470f..d7ae8e7e755 100644 --- a/grade/export/xml/export.php +++ b/grade/export/xml/export.php @@ -56,6 +56,8 @@ if (!empty($CFG->gradepublishing) && !empty($key)) { echo $export->get_grade_publishing_url(); echo $OUTPUT->footer(); } else { + $event = \gradeexport_xml\event\grade_exported::create(array('context' => $context)); + $event->trigger(); $export->print_grades(); } diff --git a/grade/export/xml/lang/en/gradeexport_xml.php b/grade/export/xml/lang/en/gradeexport_xml.php index 7cb8dbc6e8f..babd5f31bc3 100644 --- a/grade/export/xml/lang/en/gradeexport_xml.php +++ b/grade/export/xml/lang/en/gradeexport_xml.php @@ -23,6 +23,7 @@ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ +$string['eventgradeexported'] = 'XML grade exported'; $string['pluginname'] = 'XML file'; $string['xml:publish'] = 'Publish XML grade export'; $string['xml:view'] = 'Use XML grade export'; diff --git a/grade/export/xml/tests/logging_test.php b/grade/export/xml/tests/logging_test.php new file mode 100644 index 00000000000..b88d953126d --- /dev/null +++ b/grade/export/xml/tests/logging_test.php @@ -0,0 +1,65 @@ +. + +/** + * Events test. + * + * @package gradeexport_xml + * @copyright 2016 Zane Karl zkarl@oid.ucla.edu + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); + +/** + * Resource events test cases. + * + * @package gradeexport_xml + * @copyright 2016 Zane Karl zkarl@oid.ucla.edu + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class xml_logging_events_testcase extends advanced_testcase { + + /** + * Setup is called before calling test case. + */ + public function setUp() { + $this->resetAfterTest(); + } + + /** + * Test course_module_instance_list_viewed event. + */ + public function test_logging() { + // There is no proper API to call to trigger this event, so what we are + // doing here is simply making sure that the events returns the right information. + $course = $this->getDataGenerator()->create_course(); + $params = array( + 'context' => context_course::instance($course->id) + ); + $event = \gradeexport_xml\event\grade_exported::create($params); + // Triggering and capturing the event. + $sink = $this->redirectEvents(); + $event->trigger(); + $events = $sink->get_events(); + $this->assertCount(1, $events); + $event = reset($events); + // Checking that the event contains the expected values. + $this->assertInstanceOf('\gradeexport_xml\event\grade_exported', $event); + $this->assertEquals(context_course::instance($course->id), $event->get_context()); + $this->assertEquals('xml', $event->get_export_type()); + } +} \ No newline at end of file diff --git a/lib/classes/event/grade_exported.php b/lib/classes/event/grade_exported.php new file mode 100644 index 00000000000..88e1e31fb29 --- /dev/null +++ b/lib/classes/event/grade_exported.php @@ -0,0 +1,90 @@ +. + +/** + * Grade report viewed event. + * + * @package core + * @copyright 2016 Zane Karl + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace core\event; + +defined('MOODLE_INTERNAL') || die(); + +/** + * Grade report viewed event class. + * + * @package core + * @since Moodle 3.2 + * @copyright 2016 Zane Karl + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +abstract class grade_exported extends base { + + /** + * Initialise the event data. + */ + protected function init() { + if (!($this instanceof grade_exported)) { + throw new Exception('grade_exported abstract is NOT extended by a valid component.'); + } + $this->data['crud'] = 'r'; + $this->data['edulevel'] = self::LEVEL_TEACHING; + } + + /** + * Returns localised export type. + * + * @return string + */ + public static function get_export_type() { + $classname = explode('\\', get_called_class()); + $exporttype = explode('_', $classname[0]); + return $exporttype[1]; + } + + /** + * Returns localised general event name. + * + * @return string + */ + public static function get_name() { + return get_string('eventgradeexported', 'gradeexport_'. self::get_export_type()); + } + + /** + * Returns non-localised description of what happened. + * + * @return string + */ + public function get_description() { + return "The user with id '$this->userid'" + . " exported grades using the ". + $this->get_export_type() ." export in the gradebook."; + } + + /** + * Returns relevant URL. + * + * @return \moodle_url + */ + public function get_url() { + $url = '/grade/export/' . $this->get_export_type() . '/export.php'; + return new \moodle_url($url, array('id' => $this->courseid)); + } +} \ No newline at end of file