MDL-55061 Grade_Export: Grade Export Logging
authorZane Karl <zkarl@oid.ucla.edu>
Wed, 29 Jun 2016 20:20:38 +0000 (13:20 -0700)
committerZane Karl <zkarl@oid.ucla.edu>
Thu, 4 Aug 2016 18:57:51 +0000 (11:57 -0700)
17 files changed:
grade/export/ods/classes/event/grade_exported.php [new file with mode: 0644]
grade/export/ods/export.php
grade/export/ods/lang/en/gradeexport_ods.php
grade/export/ods/tests/logging_test.php [new file with mode: 0644]
grade/export/txt/classes/event/grade_exported.php [new file with mode: 0644]
grade/export/txt/export.php
grade/export/txt/lang/en/gradeexport_txt.php
grade/export/txt/tests/logging_test.php [new file with mode: 0644]
grade/export/xls/classes/event/grade_exported.php [new file with mode: 0644]
grade/export/xls/export.php
grade/export/xls/lang/en/gradeexport_xls.php
grade/export/xls/tests/logging_test.php [new file with mode: 0644]
grade/export/xml/classes/event/grade_exported.php [new file with mode: 0644]
grade/export/xml/export.php
grade/export/xml/lang/en/gradeexport_xml.php
grade/export/xml/tests/logging_test.php [new file with mode: 0644]
lib/classes/event/grade_exported.php [new file with mode: 0644]

diff --git a/grade/export/ods/classes/event/grade_exported.php b/grade/export/ods/classes/event/grade_exported.php
new file mode 100644 (file)
index 0000000..56834f7
--- /dev/null
@@ -0,0 +1,38 @@
+<?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/>.
+
+/**
+ * Grade export event.
+ *
+ * @package    gradeexport_ods
+ * @copyright  2016 Zane Karl <zkarl@oid.ucla.edu>
+ * @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 <zkarl@oid.ucla.edu>
+ * @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
index 031f568..7ab7660 100644 (file)
@@ -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();
 }
index dd65582..18b7ce3 100644 (file)
@@ -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 (file)
index 0000000..67ce658
--- /dev/null
@@ -0,0 +1,65 @@
+<?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/>.
+
+/**
+ * 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 (file)
index 0000000..046d856
--- /dev/null
@@ -0,0 +1,38 @@
+<?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/>.
+
+/**
+ * Grade export event.
+ *
+ * @package    gradeexport_txt
+ * @copyright  2016 Zane Karl <zkarl@oid.ucla.edu>
+ * @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 <zkarl@oid.ucla.edu>
+ * @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
index d150e1a..903cfbf 100644 (file)
@@ -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();
 }
index db10755..fc0f415 100644 (file)
@@ -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 (file)
index 0000000..e2e7d7b
--- /dev/null
@@ -0,0 +1,65 @@
+<?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/>.
+
+/**
+ * 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 (file)
index 0000000..ccea485
--- /dev/null
@@ -0,0 +1,38 @@
+<?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/>.
+
+/**
+ * Grade export event.
+ *
+ * @package    gradeexport_xls
+ * @copyright  2016 Zane Karl <zkarl@oid.ucla.edu>
+ * @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 <zkarl@oid.ucla.edu>
+ * @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
index a844172..0855517 100644 (file)
@@ -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();
 }
 
index 32b96c5..706fe83 100644 (file)
@@ -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 (file)
index 0000000..fcada0d
--- /dev/null
@@ -0,0 +1,65 @@
+<?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/>.
+
+/**
+ * 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 (file)
index 0000000..d9943ec
--- /dev/null
@@ -0,0 +1,38 @@
+<?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/>.
+
+/**
+ * Grade export event.
+ *
+ * @package    gradeexport_xml
+ * @copyright  2016 Zane Karl <zkarl@oid.ucla.edu>
+ * @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 <zkarl@oid.ucla.edu>
+ * @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
index a2f1bb3..d7ae8e7 100644 (file)
@@ -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();
 }
 
index 7cb8dbc..babd5f3 100644 (file)
@@ -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 (file)
index 0000000..b88d953
--- /dev/null
@@ -0,0 +1,65 @@
+<?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/>.
+
+/**
+ * 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 (file)
index 0000000..88e1e31
--- /dev/null
@@ -0,0 +1,90 @@
+<?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/>.
+
+/**
+ * Grade report viewed event.
+ *
+ * @package    core
+ * @copyright  2016 Zane Karl <zkarl@oid.ucla.edu>
+ * @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 <zkarl@oid.ucla.edu>
+ * @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