From a65b53036ec3f4910f7f4106327a0bec15ee2135 Mon Sep 17 00:00:00 2001 From: Frederic Massart Date: Mon, 5 Aug 2013 17:02:20 +0800 Subject: [PATCH 01/15] MDL-40055 mod_assign: Replace add_to_log 'download all submissions' --- .../event/all_submissions_downloaded.php | 102 ++++++++++++++++++ mod/assign/lang/en/assign.php | 1 + mod/assign/locallib.php | 9 +- 3 files changed, 111 insertions(+), 1 deletion(-) create mode 100644 mod/assign/classes/event/all_submissions_downloaded.php diff --git a/mod/assign/classes/event/all_submissions_downloaded.php b/mod/assign/classes/event/all_submissions_downloaded.php new file mode 100644 index 00000000000..468d95e5fa0 --- /dev/null +++ b/mod/assign/classes/event/all_submissions_downloaded.php @@ -0,0 +1,102 @@ +. + +/** + * mod_assign all submissions downloaded event. + * + * @package mod_assign + * @copyright 2013 Frédéric Massart + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace mod_assign\event; + +defined('MOODLE_INTERNAL') || die(); + +/** + * mod_assign all submissions downloaded event class. + * + * @package mod_assign + * @copyright 2013 Frédéric Massart + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class all_submissions_downloaded extends \core\event\base { + + /** + * Legacy log data. + * + * @var array + */ + protected $legacylogdata; + + /** + * Returns description of what happened. + * + * @return string + */ + public function get_description() { + return "User {$this->userid} has downloaded all the submissions."; + } + + /** + * Return legacy data for add_to_log(). + * + * @return array + */ + public function get_legacy_logdata() { + return $this->legacylogdata; + } + + /** + * Return localised event name. + * + * @return \lang_string + */ + public static function get_name() { + return new \lang_string('event_all_submissions_downloaded', 'mod_assign'); + } + + /** + * Get URL related to the action. + * + * @return \moodle_url + */ + public function get_url() { + return new \moodle_url('/mod/assign/view.php', array('id' => $this->context->instanceid)); + } + + /** + * Sets the legacy event log data. + * + * @param stdClass $legacylogdata legacy log data. + * @return void + */ + public function set_legacy_logdata($legacylogdata) { + $this->legacylogdata = $legacylogdata; + } + + /** + * Init method. + * + * @return void + */ + protected function init() { + $this->data['crud'] = 'r'; + $this->data['level'] = 50; // TODO MDL-37658. + $this->data['objecttable'] = 'assign'; + } + +} diff --git a/mod/assign/lang/en/assign.php b/mod/assign/lang/en/assign.php index 65d305e9b72..140774373a3 100644 --- a/mod/assign/lang/en/assign.php +++ b/mod/assign/lang/en/assign.php @@ -141,6 +141,7 @@ $string['editsubmission_help'] = 'Make changes to your submission'; $string['editingstatus'] = 'Editing status'; $string['editaction'] = 'Actions...'; $string['event_assessable_submitted'] = 'A submission has been submitted.'; +$string['event_all_submissions_downloaded'] = 'All the submissions are being downloaded.'; $string['extensionduedate'] = 'Extension due date'; $string['extensionnotafterduedate'] = 'Extension date must be after the due date'; $string['extensionnotafterfromdate'] = 'Extension date must be after the allow submissions from date'; diff --git a/mod/assign/locallib.php b/mod/assign/locallib.php index be7eedb8a72..e9e098a338c 100644 --- a/mod/assign/locallib.php +++ b/mod/assign/locallib.php @@ -2389,7 +2389,14 @@ class assign { $result .= $this->get_renderer()->continue_button($url); $result .= $this->view_footer(); } else if ($zipfile = $this->pack_files($filesforzipping)) { - $this->add_to_log('download all submissions', get_string('downloadall', 'assign')); + $addtolog = $this->add_to_log('download all submissions', get_string('downloadall', 'assign'), '', true); + $params = array( + 'context' => $this->context, + 'objectid' => $this->get_instance()->id + ); + $event = \mod_assign\event\all_submissions_downloaded::create($params); + $event->set_legacy_logdata($addtolog); + $event->trigger(); // Send file and delete after sending. send_temp_file($zipfile, $filename); // We will not get here - send_temp_file calls exit. From 76e77b05eb08cdbaf0d16768110f9607beb3d0d0 Mon Sep 17 00:00:00 2001 From: Frederic Massart Date: Mon, 5 Aug 2013 17:51:30 +0800 Subject: [PATCH 02/15] MDL-40055 mod_assign: Replace add_to_log 'grant extension' --- .../classes/event/extension_granted.php | 113 ++++++++++++++++++ mod/assign/lang/en/assign.php | 1 + mod/assign/locallib.php | 10 +- mod/assign/tests/locallib_test.php | 32 +++++ 4 files changed, 155 insertions(+), 1 deletion(-) create mode 100644 mod/assign/classes/event/extension_granted.php diff --git a/mod/assign/classes/event/extension_granted.php b/mod/assign/classes/event/extension_granted.php new file mode 100644 index 00000000000..fe4e25ae4f2 --- /dev/null +++ b/mod/assign/classes/event/extension_granted.php @@ -0,0 +1,113 @@ +. + +/** + * mod_assign extension granted event. + * + * @package mod_assign + * @copyright 2013 Frédéric Massart + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace mod_assign\event; + +defined('MOODLE_INTERNAL') || die(); + +/** + * mod_assign extension granted event class. + * + * @package mod_assign + * @copyright 2013 Frédéric Massart + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class extension_granted extends \core\event\base { + + /** + * Legacy log data. + * + * @var array + */ + protected $legacylogdata; + + /** + * Returns description of what happened. + * + * @return string + */ + public function get_description() { + return "User {$this->userid} has granted an extension to {$this->relateduserid}."; + } + + /** + * Return legacy data for add_to_log(). + * + * @return array + */ + public function get_legacy_logdata() { + return $this->legacylogdata; + } + + /** + * Return localised event name. + * + * @return \lang_string + */ + public static function get_name() { + return new \lang_string('event_extension_granted', 'mod_assign'); + } + + /** + * Get URL related to the action + * + * @return \moodle_url + */ + public function get_url() { + return new \moodle_url('/mod/assign/view.php', array('id' => $this->context->instanceid)); + } + + /** + * Init method. + * + * @return void + */ + protected function init() { + $this->data['crud'] = 'u'; + $this->data['level'] = 50; // TODO MDL-37658. + $this->data['objecttable'] = 'assign'; + } + + /** + * Sets the legacy event log data. + * + * @param stdClass $legacylogdata legacy log data. + * @return void + */ + public function set_legacy_logdata($legacylogdata) { + $this->legacylogdata = $legacylogdata; + } + + /** + * Custom validation. + * + * @throws coding_exception + * @return void + */ + protected function validate_data() { + if (!isset($this->relateduserid)) { + throw new coding_exception('relateduserid is a mandatory property.'); + } + } +} diff --git a/mod/assign/lang/en/assign.php b/mod/assign/lang/en/assign.php index 140774373a3..7d9a49aab4d 100644 --- a/mod/assign/lang/en/assign.php +++ b/mod/assign/lang/en/assign.php @@ -142,6 +142,7 @@ $string['editingstatus'] = 'Editing status'; $string['editaction'] = 'Actions...'; $string['event_assessable_submitted'] = 'A submission has been submitted.'; $string['event_all_submissions_downloaded'] = 'All the submissions are being downloaded.'; +$string['event_extension_granted'] = 'An extension has been granted.'; $string['extensionduedate'] = 'Extension due date'; $string['extensionnotafterduedate'] = 'Extension date must be after the due date'; $string['extensionnotafterfromdate'] = 'Extension date must be after the allow submissions from date'; diff --git a/mod/assign/locallib.php b/mod/assign/locallib.php index e9e098a338c..1c6a283656f 100644 --- a/mod/assign/locallib.php +++ b/mod/assign/locallib.php @@ -4552,7 +4552,15 @@ class assign { $result = $this->update_user_flags($flags); if ($result) { - $this->add_to_log('grant extension', $userid); + $addtolog = $this->add_to_log('grant extension', $userid, '', true); + $params = array( + 'context' => $this->context, + 'objectid' => $flags->assignment, + 'relateduserid' => $userid + ); + $event = \mod_assign\event\extension_granted::create($params); + $event->set_legacy_logdata($addtolog); + $event->trigger(); } return $result; } diff --git a/mod/assign/tests/locallib_test.php b/mod/assign/tests/locallib_test.php index e7054db6d7f..3230d475e43 100644 --- a/mod/assign/tests/locallib_test.php +++ b/mod/assign/tests/locallib_test.php @@ -940,5 +940,37 @@ class mod_assign_locallib_testcase extends mod_assign_base_testcase { $output = $assign->get_renderer()->render($gradingtable); $this->assertNotEquals(true, strpos($output, $this->students[0]->lastname)); } + + public function test_extension_granted_event() { + $this->setUser($this->editingteachers[0]); + + $tomorrow = time() + 24*60*60; + $yesterday = time() - 24*60*60; + + $assign = $this->create_instance(array('duedate' => $yesterday, 'cutoffdate' => $yesterday)); + $sink = $this->redirectEvents(); + + $assign->testable_save_user_extension($this->students[0]->id, $tomorrow); + + $events = $sink->get_events(); + $this->assertCount(1, $events); + $event = reset($events); + $this->assertInstanceOf('\mod_assign\event\extension_granted', $event); + $this->assertEquals($assign->get_context(), $event->get_context()); + $this->assertEquals($assign->get_instance()->id, $event->objectid); + $this->assertEquals($this->students[0]->id, $event->relateduserid); + $expected = array( + $assign->get_course()->id, + 'assign', + 'grant extension', + 'view.php?id=' . $assign->get_course_module()->id, + $this->students[0]->id, + $assign->get_course_module()->id, + $this->editingteachers[0]->id + ); + $this->assertEventLegacyLogData($expected, $event); + $sink->close(); + } + } From 3d1331be34ee4a039d6525c0ae95fbbb1060f858 Mon Sep 17 00:00:00 2001 From: Frederic Massart Date: Mon, 5 Aug 2013 18:17:05 +0800 Subject: [PATCH 03/15] MDL-40055 mod_assign: Replace add_to_log 'lock submission' --- .../classes/event/submission_locked.php | 113 ++++++++++++++++++ mod/assign/lang/en/assign.php | 1 + mod/assign/locallib.php | 10 +- mod/assign/tests/base_test.php | 4 + mod/assign/tests/locallib_test.php | 33 +++++ 5 files changed, 160 insertions(+), 1 deletion(-) create mode 100644 mod/assign/classes/event/submission_locked.php diff --git a/mod/assign/classes/event/submission_locked.php b/mod/assign/classes/event/submission_locked.php new file mode 100644 index 00000000000..7430d574ceb --- /dev/null +++ b/mod/assign/classes/event/submission_locked.php @@ -0,0 +1,113 @@ +. + +/** + * mod_assign submission locked event. + * + * @package mod_assign + * @copyright 2013 Frédéric Massart + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace mod_assign\event; + +defined('MOODLE_INTERNAL') || die(); + +/** + * mod_assign submission locked event class. + * + * @package mod_assign + * @copyright 2013 Frédéric Massart + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class submission_locked extends \core\event\base { + + /** + * Legacy log data. + * + * @var array + */ + protected $legacylogdata; + + /** + * Returns description of what happened. + * + * @return string + */ + public function get_description() { + return "User {$this->userid} locked the submission for user {$this->relateduserid}."; + } + + /** + * Return legacy data for add_to_log(). + * + * @return array + */ + public function get_legacy_logdata() { + return $this->legacylogdata; + } + + /** + * Return localised event name. + * + * @return \lang_string + */ + public static function get_name() { + return new \lang_string('event_submission_locked', 'mod_assign'); + } + + /** + * Get URL related to the action + * + * @return \moodle_url + */ + public function get_url() { + return new \moodle_url('/mod/assign/view.php', array('id' => $this->context->instanceid)); + } + + /** + * Init method. + * + * @return void + */ + protected function init() { + $this->data['crud'] = 'u'; + $this->data['level'] = 50; // TODO MDL-37658. + $this->data['objecttable'] = 'assign'; + } + + /** + * Sets the legacy event log data. + * + * @param stdClass $legacylogdata legacy log data. + * @return void + */ + public function set_legacy_logdata($legacylogdata) { + $this->legacylogdata = $legacylogdata; + } + + /** + * Custom validation. + * + * @throws coding_exception + * @return void + */ + protected function validate_data() { + if (!isset($this->relateduserid)) { + throw new coding_exception('relateduserid is a mandatory property.'); + } + } +} diff --git a/mod/assign/lang/en/assign.php b/mod/assign/lang/en/assign.php index 7d9a49aab4d..bbdfb0dbb67 100644 --- a/mod/assign/lang/en/assign.php +++ b/mod/assign/lang/en/assign.php @@ -143,6 +143,7 @@ $string['editaction'] = 'Actions...'; $string['event_assessable_submitted'] = 'A submission has been submitted.'; $string['event_all_submissions_downloaded'] = 'All the submissions are being downloaded.'; $string['event_extension_granted'] = 'An extension has been granted.'; +$string['event_submission_locked'] = 'The submissions have been locked for a user.'; $string['extensionduedate'] = 'Extension due date'; $string['extensionnotafterduedate'] = 'Extension date must be after the due date'; $string['extensionnotafterfromdate'] = 'Extension date must be after the allow submissions from date'; diff --git a/mod/assign/locallib.php b/mod/assign/locallib.php index 1c6a283656f..9842c51cb04 100644 --- a/mod/assign/locallib.php +++ b/mod/assign/locallib.php @@ -5687,7 +5687,15 @@ class assign { $logmessage = get_string('locksubmissionforstudent', 'assign', array('id'=>$user->id, 'fullname'=>fullname($user))); - $this->add_to_log('lock submission', $logmessage); + $addtolog = $this->add_to_log('lock submission', $logmessage, '', true); + $params = array( + 'context' => $this->context, + 'objectid' => $flags->assignment, + 'relateduserid' => $user->id + ); + $event = \mod_assign\event\submission_locked::create($params); + $event->set_legacy_logdata($addtolog); + $event->trigger(); } diff --git a/mod/assign/tests/base_test.php b/mod/assign/tests/base_test.php index 84b597a04ff..b29e400d24f 100644 --- a/mod/assign/tests/base_test.php +++ b/mod/assign/tests/base_test.php @@ -255,6 +255,10 @@ class testable_assign extends assign { return parent::process_add_attempt($userid); } + public function testable_process_lock($userid = 0) { + return parent::process_lock($userid); + } + public function testable_submissions_open($userid = 0) { return parent::submissions_open($userid); } diff --git a/mod/assign/tests/locallib_test.php b/mod/assign/tests/locallib_test.php index 3230d475e43..badac41c23d 100644 --- a/mod/assign/tests/locallib_test.php +++ b/mod/assign/tests/locallib_test.php @@ -972,5 +972,38 @@ class mod_assign_locallib_testcase extends mod_assign_base_testcase { $sink->close(); } + public function test_submission_locked_event() { + $this->editingteachers[0]->ignoresesskey = true; + $this->setUser($this->editingteachers[0]); + + $assign = $this->create_instance(); + $sink = $this->redirectEvents(); + + $assign->testable_process_lock($this->students[0]->id); + + $events = $sink->get_events(); + $this->assertCount(1, $events); + $event = reset($events); + $this->assertInstanceOf('\mod_assign\event\submission_locked', $event); + $this->assertEquals($assign->get_context(), $event->get_context()); + $this->assertEquals($assign->get_instance()->id, $event->objectid); + $this->assertEquals($this->students[0]->id, $event->relateduserid); + $expected = array( + $assign->get_course()->id, + 'assign', + 'lock submission', + 'view.php?id=' . $assign->get_course_module()->id, + get_string('locksubmissionforstudent', 'assign', array('id' => $this->students[0]->id, + 'fullname' => fullname($this->students[0]))), + $assign->get_course_module()->id, + $this->editingteachers[0]->id + ); + $this->assertEventLegacyLogData($expected, $event); + $sink->close(); + + // Revert to defaults. + $this->editingteachers[0]->ignoresesskey = false; + } + } From ad10ad14153a22426eac5e587c44c5a6ccbd1606 Mon Sep 17 00:00:00 2001 From: Frederic Massart Date: Mon, 5 Aug 2013 18:52:31 +0800 Subject: [PATCH 04/15] MDL-40055 mod_assign: Replace add_to_log 'reveal identities' --- .../classes/event/identities_revealed.php | 102 ++++++++++++++++++ mod/assign/lang/en/assign.php | 1 + mod/assign/locallib.php | 9 +- mod/assign/tests/locallib_test.php | 31 ++++++ 4 files changed, 142 insertions(+), 1 deletion(-) create mode 100644 mod/assign/classes/event/identities_revealed.php diff --git a/mod/assign/classes/event/identities_revealed.php b/mod/assign/classes/event/identities_revealed.php new file mode 100644 index 00000000000..4ccfa353fda --- /dev/null +++ b/mod/assign/classes/event/identities_revealed.php @@ -0,0 +1,102 @@ +. + +/** + * mod_assign identities revealed event. + * + * @package mod_assign + * @copyright 2013 Frédéric Massart + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace mod_assign\event; + +defined('MOODLE_INTERNAL') || die(); + +/** + * mod_assign identities revealed event class. + * + * @package mod_assign + * @copyright 2013 Frédéric Massart + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class identities_revealed extends \core\event\base { + + /** + * Legacy log data. + * + * @var array + */ + protected $legacylogdata; + + /** + * Returns description of what happened. + * + * @return string + */ + public function get_description() { + return "User {$this->userid} has revealed the identities in assignment {$this->objectid}."; + } + + /** + * Return legacy data for add_to_log(). + * + * @return array + */ + public function get_legacy_logdata() { + return $this->legacylogdata; + } + + /** + * Return localised event name. + * + * @return \lang_string + */ + public static function get_name() { + return new \lang_string('event_identities_revealed', 'mod_assign'); + } + + /** + * Get URL related to the action + * + * @return \moodle_url + */ + public function get_url() { + return new \moodle_url('/mod/assign/view.php', array('id' => $this->context->instanceid)); + } + + /** + * Init method. + * + * @return void + */ + protected function init() { + $this->data['crud'] = 'u'; + $this->data['level'] = 50; // TODO MDL-37658. + $this->data['objecttable'] = 'assign'; + } + + /** + * Sets the legacy event log data. + * + * @param stdClass $legacylogdata legacy log data. + * @return void + */ + public function set_legacy_logdata($legacylogdata) { + $this->legacylogdata = $legacylogdata; + } + +} diff --git a/mod/assign/lang/en/assign.php b/mod/assign/lang/en/assign.php index bbdfb0dbb67..5302ad52c62 100644 --- a/mod/assign/lang/en/assign.php +++ b/mod/assign/lang/en/assign.php @@ -143,6 +143,7 @@ $string['editaction'] = 'Actions...'; $string['event_assessable_submitted'] = 'A submission has been submitted.'; $string['event_all_submissions_downloaded'] = 'All the submissions are being downloaded.'; $string['event_extension_granted'] = 'An extension has been granted.'; +$string['event_identities_revealed'] = 'The identities have been revealed.'; $string['event_submission_locked'] = 'The submissions have been locked for a user.'; $string['extensionduedate'] = 'Extension due date'; $string['extensionnotafterduedate'] = 'Extension date must be after the due date'; diff --git a/mod/assign/locallib.php b/mod/assign/locallib.php index 9842c51cb04..80239d4ae6a 100644 --- a/mod/assign/locallib.php +++ b/mod/assign/locallib.php @@ -4842,7 +4842,14 @@ class assign { $this->gradebook_item_update(null, $grade); } - $this->add_to_log('reveal identities', get_string('revealidentities', 'assign')); + $addtolog = $this->add_to_log('reveal identities', get_string('revealidentities', 'assign'), '', true); + $params = array( + 'context' => $this->context, + 'objectid' => $update->id + ); + $event = \mod_assign\event\identities_revealed::create($params); + $event->set_legacy_logdata($addtolog); + $event->trigger(); } diff --git a/mod/assign/tests/locallib_test.php b/mod/assign/tests/locallib_test.php index badac41c23d..8034260a44f 100644 --- a/mod/assign/tests/locallib_test.php +++ b/mod/assign/tests/locallib_test.php @@ -1005,5 +1005,36 @@ class mod_assign_locallib_testcase extends mod_assign_base_testcase { $this->editingteachers[0]->ignoresesskey = false; } + public function test_identities_revealed_event() { + $this->editingteachers[0]->ignoresesskey = true; + $this->setUser($this->editingteachers[0]); + + $assign = $this->create_instance(array('blindmarking'=>1)); + $sink = $this->redirectEvents(); + + $assign->testable_process_reveal_identities(); + + $events = $sink->get_events(); + $this->assertCount(1, $events); + $event = reset($events); + $this->assertInstanceOf('\mod_assign\event\identities_revealed', $event); + $this->assertEquals($assign->get_context(), $event->get_context()); + $this->assertEquals($assign->get_instance()->id, $event->objectid); + $expected = array( + $assign->get_course()->id, + 'assign', + 'reveal identities', + 'view.php?id=' . $assign->get_course_module()->id, + get_string('revealidentities', 'assign'), + $assign->get_course_module()->id, + $this->editingteachers[0]->id + ); + $this->assertEventLegacyLogData($expected, $event); + $sink->close(); + + // Revert to defaults. + $this->editingteachers[0]->ignoresesskey = false; + } + } From 159b7f4024a924e554e4dec1482458915dda5125 Mon Sep 17 00:00:00 2001 From: Frederic Massart Date: Tue, 6 Aug 2013 11:29:59 +0800 Subject: [PATCH 05/15] MDL-40055 mod_assign: Replace add_to_log 'revert submission to draft' --- .../event/submission_status_updated.php | 113 ++++++++++++++++++ mod/assign/lang/en/assign.php | 1 + mod/assign/locallib.php | 13 +- mod/assign/tests/base_test.php | 4 + mod/assign/tests/locallib_test.php | 37 ++++++ 5 files changed, 167 insertions(+), 1 deletion(-) create mode 100644 mod/assign/classes/event/submission_status_updated.php diff --git a/mod/assign/classes/event/submission_status_updated.php b/mod/assign/classes/event/submission_status_updated.php new file mode 100644 index 00000000000..2ccc0b42cd7 --- /dev/null +++ b/mod/assign/classes/event/submission_status_updated.php @@ -0,0 +1,113 @@ +. + +/** + * mod_assign submission status updated event. + * + * @package mod_assign + * @copyright 2013 Frédéric Massart + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace mod_assign\event; + +defined('MOODLE_INTERNAL') || die(); + +/** + * mod_assign submission status updated event class. + * + * @package mod_assign + * @copyright 2013 Frédéric Massart + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class submission_status_updated extends \core\event\base { + + /** + * Legacy log data. + * + * @var array + */ + protected $legacylogdata; + + /** + * Returns description of what happened. + * + * @return string + */ + public function get_description() { + return "User {$this->userid} has updated the status of the submission {$this->objectid} to {$this->other['newstatus']}."; + } + + /** + * Return legacy data for add_to_log(). + * + * @return array + */ + public function get_legacy_logdata() { + return $this->legacylogdata; + } + + /** + * Return localised event name. + * + * @return \lang_string + */ + public static function get_name() { + return new \lang_string('event_submission_status_updated', 'mod_assign'); + } + + /** + * Get URL related to the action + * + * @return \moodle_url + */ + public function get_url() { + return new \moodle_url('/mod/assign/view.php', array('id' => $this->context->instanceid)); + } + + /** + * Init method. + * + * @return void + */ + protected function init() { + $this->data['crud'] = 'u'; + $this->data['level'] = 50; // TODO MDL-37658. + $this->data['objecttable'] = 'assign_submission'; + } + + /** + * Sets the legacy event log data. + * + * @param stdClass $legacylogdata legacy log data. + * @return void + */ + public function set_legacy_logdata($legacylogdata) { + $this->legacylogdata = $legacylogdata; + } + + /** + * Custom validation. + * + * @throws coding_exception + * @return void + */ + protected function validate_data() { + if (!isset($this->other['newstatus'])) { + throw new coding_exception('newstatus must be set in $other.'); + } + } +} diff --git a/mod/assign/lang/en/assign.php b/mod/assign/lang/en/assign.php index 5302ad52c62..68aa35b23b0 100644 --- a/mod/assign/lang/en/assign.php +++ b/mod/assign/lang/en/assign.php @@ -145,6 +145,7 @@ $string['event_all_submissions_downloaded'] = 'All the submissions are being dow $string['event_extension_granted'] = 'An extension has been granted.'; $string['event_identities_revealed'] = 'The identities have been revealed.'; $string['event_submission_locked'] = 'The submissions have been locked for a user.'; +$string['event_submission_status_updated'] = 'The status of the submission has been updated.'; $string['extensionduedate'] = 'Extension due date'; $string['extensionnotafterduedate'] = 'Extension date must be after the due date'; $string['extensionnotafterfromdate'] = 'Extension date must be after the allow submissions from date'; diff --git a/mod/assign/locallib.php b/mod/assign/locallib.php index 80239d4ae6a..329a8b11ffd 100644 --- a/mod/assign/locallib.php +++ b/mod/assign/locallib.php @@ -5655,7 +5655,18 @@ class assign { $logmessage = get_string('reverttodraftforstudent', 'assign', array('id'=>$user->id, 'fullname'=>fullname($user))); - $this->add_to_log('revert submission to draft', $logmessage); + $addtolog = $this->add_to_log('revert submission to draft', $logmessage, '', true); + $params = array( + 'context' => $this->context, + 'objectid' => $submission->id, + 'relateduserid' => ($this->get_instance()->teamsubmission) ? null : $userid, + 'other' => array( + 'newstatus' => $submission->status + ) + ); + $event = \mod_assign\event\submission_status_updated::create($params); + $event->set_legacy_logdata($addtolog); + $event->trigger(); } /** diff --git a/mod/assign/tests/base_test.php b/mod/assign/tests/base_test.php index b29e400d24f..7c6170ebe91 100644 --- a/mod/assign/tests/base_test.php +++ b/mod/assign/tests/base_test.php @@ -259,6 +259,10 @@ class testable_assign extends assign { return parent::process_lock($userid); } + public function testable_process_revert_to_draft($userid = 0) { + return parent::process_revert_to_draft($userid); + } + public function testable_submissions_open($userid = 0) { return parent::submissions_open($userid); } diff --git a/mod/assign/tests/locallib_test.php b/mod/assign/tests/locallib_test.php index 8034260a44f..0821e1ea4b4 100644 --- a/mod/assign/tests/locallib_test.php +++ b/mod/assign/tests/locallib_test.php @@ -1036,5 +1036,42 @@ class mod_assign_locallib_testcase extends mod_assign_base_testcase { $this->editingteachers[0]->ignoresesskey = false; } + public function test_submission_status_updated_event() { + $this->editingteachers[0]->ignoresesskey = true; + $this->setUser($this->editingteachers[0]); + + $assign = $this->create_instance(); + $submission = $assign->get_user_submission($this->students[0]->id, true); + $submission->status = ASSIGN_SUBMISSION_STATUS_SUBMITTED; + $assign->testable_update_submission($submission, $this->students[0]->id, true, false); + + $sink = $this->redirectEvents(); + $assign->testable_process_revert_to_draft($this->students[0]->id); + + $events = $sink->get_events(); + $this->assertCount(1, $events); + $event = reset($events); + $this->assertInstanceOf('\mod_assign\event\submission_status_updated', $event); + $this->assertEquals($assign->get_context(), $event->get_context()); + $this->assertEquals($submission->id, $event->objectid); + $this->assertEquals($this->students[0]->id, $event->relateduserid); + $this->assertEquals(ASSIGN_SUBMISSION_STATUS_DRAFT, $event->other['newstatus']); + $expected = array( + $assign->get_course()->id, + 'assign', + 'revert submission to draft', + 'view.php?id=' . $assign->get_course_module()->id, + get_string('reverttodraftforstudent', 'assign', array('id' => $this->students[0]->id, + 'fullname' => fullname($this->students[0]))), + $assign->get_course_module()->id, + $this->editingteachers[0]->id + ); + $this->assertEventLegacyLogData($expected, $event); + $sink->close(); + + // Revert to defaults. + $this->editingteachers[0]->ignoresesskey = false; + } + } From e59a85ba618518b54872e2a9500b9046878c1f0a Mon Sep 17 00:00:00 2001 From: Frederic Massart Date: Tue, 6 Aug 2013 12:38:00 +0800 Subject: [PATCH 06/15] MDL-40055 mod_assign: Replace add_to_log 'set marking allocation' --- mod/assign/classes/event/marker_updated.php | 115 ++++++++++++++++++++ mod/assign/lang/en/assign.php | 1 + mod/assign/locallib.php | 15 ++- mod/assign/tests/base_test.php | 8 ++ mod/assign/tests/locallib_test.php | 35 ++++++ 5 files changed, 172 insertions(+), 2 deletions(-) create mode 100644 mod/assign/classes/event/marker_updated.php diff --git a/mod/assign/classes/event/marker_updated.php b/mod/assign/classes/event/marker_updated.php new file mode 100644 index 00000000000..fccf167a5bc --- /dev/null +++ b/mod/assign/classes/event/marker_updated.php @@ -0,0 +1,115 @@ +. + +/** + * mod_assign marker updated event. + * + * @package mod_assign + * @copyright 2013 Frédéric Massart + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace mod_assign\event; + +defined('MOODLE_INTERNAL') || die(); + +/** + * mod_assign marker updated event class. + * + * @package mod_assign + * @copyright 2013 Frédéric Massart + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class marker_updated extends \core\event\base { + + /** + * Legacy log data. + * + * @var array + */ + protected $legacylogdata; + + /** + * Returns description of what happened. + * + * @return string + */ + public function get_description() { + return "User {$this->userid} has set the marker of {$this->relateduserid} to {$this->other['markerid']}."; + } + + /** + * Return legacy data for add_to_log(). + * + * @return array + */ + public function get_legacy_logdata() { + return $this->legacylogdata; + } + + /** + * Return localised event name. + * + * @return \lang_string + */ + public static function get_name() { + return new \lang_string('event_marker_updated', 'mod_assign'); + } + + /** + * Get URL related to the action + * + * @return \moodle_url + */ + public function get_url() { + return new \moodle_url('/mod/assign/view.php', array('id' => $this->context->instanceid)); + } + + /** + * Init method. + * + * @return void + */ + protected function init() { + $this->data['crud'] = 'u'; + $this->data['level'] = 50; // TODO MDL-37658. + $this->data['objecttable'] = 'assign'; + } + + /** + * Sets the legacy event log data. + * + * @param stdClass $legacylogdata legacy log data. + * @return void + */ + public function set_legacy_logdata($legacylogdata) { + $this->legacylogdata = $legacylogdata; + } + + /** + * Custom validation. + * + * @throws coding_exception + * @return void + */ + protected function validate_data() { + if (!isset($this->other['markerid'])) { + throw new coding_exception('markerid must be set in $other.'); + } else if (!isset($this->relateduserid)) { + throw new coding_exception('relateduserid must be set.'); + } + } +} diff --git a/mod/assign/lang/en/assign.php b/mod/assign/lang/en/assign.php index 68aa35b23b0..acc9f62daf3 100644 --- a/mod/assign/lang/en/assign.php +++ b/mod/assign/lang/en/assign.php @@ -144,6 +144,7 @@ $string['event_assessable_submitted'] = 'A submission has been submitted.'; $string['event_all_submissions_downloaded'] = 'All the submissions are being downloaded.'; $string['event_extension_granted'] = 'An extension has been granted.'; $string['event_identities_revealed'] = 'The identities have been revealed.'; +$string['event_marker_updated'] = 'The allocated marker has been updated.'; $string['event_submission_locked'] = 'The submissions have been locked for a user.'; $string['event_submission_status_updated'] = 'The status of the submission has been updated.'; $string['extensionduedate'] = 'Extension due date'; diff --git a/mod/assign/locallib.php b/mod/assign/locallib.php index 329a8b11ffd..a82505cd242 100644 --- a/mod/assign/locallib.php +++ b/mod/assign/locallib.php @@ -5763,7 +5763,7 @@ class assign { * * @return void */ - private function process_set_batch_marking_allocation() { + protected function process_set_batch_marking_allocation() { global $DB; require_sesskey(); @@ -5795,7 +5795,18 @@ class assign { 'fullname'=>fullname($user), 'marker'=>fullname($marker)); $message = get_string('setmarkerallocationforlog', 'assign', $params); - $this->add_to_log('set marking allocation', $message); + $addtolog = $this->add_to_log('set marking allocation', $message, '', true); + $params = array( + 'context' => $this->context, + 'objectid' => $this->get_instance()->id, + 'relateduserid' => $userid, + 'other' => array( + 'markerid' => $marker->id + ) + ); + $event = \mod_assign\event\marker_updated::create($params); + $event->set_legacy_logdata($addtolog); + $event->trigger(); } } } diff --git a/mod/assign/tests/base_test.php b/mod/assign/tests/base_test.php index 7c6170ebe91..13f0a062c94 100644 --- a/mod/assign/tests/base_test.php +++ b/mod/assign/tests/base_test.php @@ -263,6 +263,14 @@ class testable_assign extends assign { return parent::process_revert_to_draft($userid); } + public function testable_process_set_batch_marking_allocation($selectedusers, $markerid) { + // Ugly hack to get something into the method. + global $_POST; + $_POST['selectedusers'] = $selectedusers; + $_POST['allocatedmarker'] = $markerid; + return parent::process_set_batch_marking_allocation(); + } + public function testable_submissions_open($userid = 0) { return parent::submissions_open($userid); } diff --git a/mod/assign/tests/locallib_test.php b/mod/assign/tests/locallib_test.php index 0821e1ea4b4..a0bf50618fb 100644 --- a/mod/assign/tests/locallib_test.php +++ b/mod/assign/tests/locallib_test.php @@ -1073,5 +1073,40 @@ class mod_assign_locallib_testcase extends mod_assign_base_testcase { $this->editingteachers[0]->ignoresesskey = false; } + public function test_marker_updated_event() { + $this->editingteachers[0]->ignoresesskey = true; + $this->setUser($this->editingteachers[0]); + + $assign = $this->create_instance(); + + $sink = $this->redirectEvents(); + $assign->testable_process_set_batch_marking_allocation($this->students[0]->id, $this->teachers[0]->id); + + $events = $sink->get_events(); + $this->assertCount(1, $events); + $event = reset($events); + $this->assertInstanceOf('\mod_assign\event\marker_updated', $event); + $this->assertEquals($assign->get_context(), $event->get_context()); + $this->assertEquals($assign->get_instance()->id, $event->objectid); + $this->assertEquals($this->students[0]->id, $event->relateduserid); + $this->assertEquals($this->editingteachers[0]->id, $event->userid); + $this->assertEquals($this->teachers[0]->id, $event->other['markerid']); + $expected = array( + $assign->get_course()->id, + 'assign', + 'set marking allocation', + 'view.php?id=' . $assign->get_course_module()->id, + get_string('setmarkerallocationforlog', 'assign', array('id' => $this->students[0]->id, + 'fullname' => fullname($this->students[0]), 'marker' => fullname($this->teachers[0]))), + $assign->get_course_module()->id, + $this->editingteachers[0]->id + ); + $this->assertEventLegacyLogData($expected, $event); + $sink->close(); + + // Revert to defaults. + $this->editingteachers[0]->ignoresesskey = false; + } + } From 8bb213eb605e3712dbe849b27007a40d874dc86c Mon Sep 17 00:00:00 2001 From: Frederic Massart Date: Tue, 6 Aug 2013 12:41:09 +0800 Subject: [PATCH 07/15] MDL-40055 mod_assign: Replace add_to_log 'set marking workflow state' --- .../classes/event/workflow_state_updated.php | 115 ++++++++++++++++++ mod/assign/lang/en/assign.php | 1 + mod/assign/locallib.php | 15 ++- mod/assign/tests/base_test.php | 8 ++ mod/assign/tests/locallib_test.php | 34 ++++++ 5 files changed, 171 insertions(+), 2 deletions(-) create mode 100644 mod/assign/classes/event/workflow_state_updated.php diff --git a/mod/assign/classes/event/workflow_state_updated.php b/mod/assign/classes/event/workflow_state_updated.php new file mode 100644 index 00000000000..de570282c80 --- /dev/null +++ b/mod/assign/classes/event/workflow_state_updated.php @@ -0,0 +1,115 @@ +. + +/** + * mod_assign workflow state updated event. + * + * @package mod_assign + * @copyright 2013 Frédéric Massart + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace mod_assign\event; + +defined('MOODLE_INTERNAL') || die(); + +/** + * mod_assign workflow state updated event class. + * + * @package mod_assign + * @copyright 2013 Frédéric Massart + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class workflow_state_updated extends \core\event\base { + + /** + * Legacy log data. + * + * @var array + */ + protected $legacylogdata; + + /** + * Returns description of what happened. + * + * @return string + */ + public function get_description() { + return "User {$this->userid} has set the workflow state of {$this->relateduserid} to {$this->other['newstate']}."; + } + + /** + * Return legacy data for add_to_log(). + * + * @return array + */ + public function get_legacy_logdata() { + return $this->legacylogdata; + } + + /** + * Return localised event name. + * + * @return \lang_string + */ + public static function get_name() { + return new \lang_string('event_workflow_state_updated', 'mod_assign'); + } + + /** + * Get URL related to the action + * + * @return \moodle_url + */ + public function get_url() { + return new \moodle_url('/mod/assign/view.php', array('id' => $this->context->instanceid)); + } + + /** + * Init method. + * + * @return void + */ + protected function init() { + $this->data['crud'] = 'u'; + $this->data['level'] = 50; // TODO MDL-37658. + $this->data['objecttable'] = 'assign'; + } + + /** + * Sets the legacy event log data. + * + * @param stdClass $legacylogdata legacy log data. + * @return void + */ + public function set_legacy_logdata($legacylogdata) { + $this->legacylogdata = $legacylogdata; + } + + /** + * Custom validation. + * + * @throws coding_exception + * @return void + */ + protected function validate_data() { + if (!isset($this->other['newstate'])) { + throw new coding_exception('newstate must be set in $other.'); + } else if (!isset($this->relateduserid)) { + throw new coding_exception('relateduserid must be set.'); + } + } +} diff --git a/mod/assign/lang/en/assign.php b/mod/assign/lang/en/assign.php index acc9f62daf3..2fe2305dfce 100644 --- a/mod/assign/lang/en/assign.php +++ b/mod/assign/lang/en/assign.php @@ -147,6 +147,7 @@ $string['event_identities_revealed'] = 'The identities have been revealed.'; $string['event_marker_updated'] = 'The allocated marker has been updated.'; $string['event_submission_locked'] = 'The submissions have been locked for a user.'; $string['event_submission_status_updated'] = 'The status of the submission has been updated.'; +$string['event_workflow_state_updated'] = 'The state of the workflow has been updated.'; $string['extensionduedate'] = 'Extension due date'; $string['extensionnotafterduedate'] = 'Extension date must be after the due date'; $string['extensionnotafterfromdate'] = 'Extension date must be after the allow submissions from date'; diff --git a/mod/assign/locallib.php b/mod/assign/locallib.php index a82505cd242..e4b4bfef0c4 100644 --- a/mod/assign/locallib.php +++ b/mod/assign/locallib.php @@ -5722,7 +5722,7 @@ class assign { * * @return void */ - private function process_set_batch_marking_workflow_state() { + protected function process_set_batch_marking_workflow_state() { global $DB; require_sesskey(); @@ -5753,7 +5753,18 @@ class assign { 'fullname'=>fullname($user), 'state'=>$state); $message = get_string('setmarkingworkflowstateforlog', 'assign', $params); - $this->add_to_log('set marking workflow state', $message); + $addtolog = $this->add_to_log('set marking workflow state', $message, '', true); + $params = array( + 'context' => $this->context, + 'objectid' => $this->get_instance()->id, + 'relateduserid' => $userid, + 'other' => array( + 'newstate' => $state + ) + ); + $event = \mod_assign\event\workflow_state_updated::create($params); + $event->set_legacy_logdata($addtolog); + $event->trigger(); } } } diff --git a/mod/assign/tests/base_test.php b/mod/assign/tests/base_test.php index 13f0a062c94..6accc8b3806 100644 --- a/mod/assign/tests/base_test.php +++ b/mod/assign/tests/base_test.php @@ -271,6 +271,14 @@ class testable_assign extends assign { return parent::process_set_batch_marking_allocation(); } + public function testable_process_set_batch_marking_workflow_state($selectedusers, $state) { + // Ugly hack to get something into the method. + global $_POST; + $_POST['selectedusers'] = $selectedusers; + $_POST['markingworkflowstate'] = $state; + return parent::process_set_batch_marking_workflow_state(); + } + public function testable_submissions_open($userid = 0) { return parent::submissions_open($userid); } diff --git a/mod/assign/tests/locallib_test.php b/mod/assign/tests/locallib_test.php index a0bf50618fb..055f666168c 100644 --- a/mod/assign/tests/locallib_test.php +++ b/mod/assign/tests/locallib_test.php @@ -1108,5 +1108,39 @@ class mod_assign_locallib_testcase extends mod_assign_base_testcase { $this->editingteachers[0]->ignoresesskey = false; } + public function test_workflow_state_updated_event() { + $this->editingteachers[0]->ignoresesskey = true; + $this->setUser($this->editingteachers[0]); + + $assign = $this->create_instance(); + + $sink = $this->redirectEvents(); + $assign->testable_process_set_batch_marking_workflow_state($this->students[0]->id, ASSIGN_MARKING_WORKFLOW_STATE_INREVIEW); + + $events = $sink->get_events(); + $this->assertCount(1, $events); + $event = reset($events); + $this->assertInstanceOf('\mod_assign\event\workflow_state_updated', $event); + $this->assertEquals($assign->get_context(), $event->get_context()); + $this->assertEquals($assign->get_instance()->id, $event->objectid); + $this->assertEquals($this->students[0]->id, $event->relateduserid); + $this->assertEquals($this->editingteachers[0]->id, $event->userid); + $this->assertEquals(ASSIGN_MARKING_WORKFLOW_STATE_INREVIEW, $event->other['newstate']); + $expected = array( + $assign->get_course()->id, + 'assign', + 'set marking workflow state', + 'view.php?id=' . $assign->get_course_module()->id, + get_string('setmarkingworkflowstateforlog', 'assign', array('id' => $this->students[0]->id, + 'fullname' => fullname($this->students[0]), 'state' => ASSIGN_MARKING_WORKFLOW_STATE_INREVIEW)), + $assign->get_course_module()->id, + $this->editingteachers[0]->id + ); + $this->assertEventLegacyLogData($expected, $event); + $sink->close(); + + // Revert to defaults. + $this->editingteachers[0]->ignoresesskey = false; + } } From 89fbc20263db83ffc2f99dd7fb1885dfae68142c Mon Sep 17 00:00:00 2001 From: Frederic Massart Date: Tue, 6 Aug 2013 15:14:58 +0800 Subject: [PATCH 08/15] MDL-40055 mod_assign: Replace add_to_log 'submissioncopied' --- .../classes/event/submission_duplicated.php | 102 ++++++++++++++++++ mod/assign/lang/en/assign.php | 1 + mod/assign/locallib.php | 9 +- mod/assign/tests/base_test.php | 8 ++ mod/assign/tests/locallib_test.php | 35 ++++++ 5 files changed, 154 insertions(+), 1 deletion(-) create mode 100644 mod/assign/classes/event/submission_duplicated.php diff --git a/mod/assign/classes/event/submission_duplicated.php b/mod/assign/classes/event/submission_duplicated.php new file mode 100644 index 00000000000..27d553fbb0b --- /dev/null +++ b/mod/assign/classes/event/submission_duplicated.php @@ -0,0 +1,102 @@ +. + +/** + * mod_assign submission duplicated event. + * + * @package mod_assign + * @copyright 2013 Frédéric Massart + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace mod_assign\event; + +defined('MOODLE_INTERNAL') || die(); + +/** + * mod_assign submission duplicated event class. + * + * @package mod_assign + * @copyright 2013 Frédéric Massart + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class submission_duplicated extends \core\event\base { + + /** + * Legacy log data. + * + * @var array + */ + protected $legacylogdata; + + /** + * Returns description of what happened. + * + * @return string + */ + public function get_description() { + return "The user {$this->userid} duplicated his submission {$this->objectid}."; + } + + /** + * Return legacy data for add_to_log(). + * + * @return array + */ + public function get_legacy_logdata() { + return $this->legacylogdata; + } + + /** + * Return localised event name. + * + * @return \lang_string + */ + public static function get_name() { + return new \lang_string('event_submission_duplicated', 'mod_assign'); + } + + /** + * Get URL related to the action. + * + * @return \moodle_url + */ + public function get_url() { + return new \moodle_url('/mod/assign/view.php', array('id' => $this->context->instanceid)); + } + + /** + * Init method. + * + * @return void + */ + protected function init() { + $this->data['crud'] = 'c'; + $this->data['level'] = 50; // TODO MDL-37658. + $this->data['objecttable'] = 'assign_submission'; + } + + /** + * Sets the legacy event log data. + * + * @param stdClass $legacylogdata legacy log data. + * @return void + */ + public function set_legacy_logdata($legacylogdata) { + $this->legacylogdata = $legacylogdata; + } + +} diff --git a/mod/assign/lang/en/assign.php b/mod/assign/lang/en/assign.php index 2fe2305dfce..fc8e69befae 100644 --- a/mod/assign/lang/en/assign.php +++ b/mod/assign/lang/en/assign.php @@ -145,6 +145,7 @@ $string['event_all_submissions_downloaded'] = 'All the submissions are being dow $string['event_extension_granted'] = 'An extension has been granted.'; $string['event_identities_revealed'] = 'The identities have been revealed.'; $string['event_marker_updated'] = 'The allocated marker has been updated.'; +$string['event_submission_duplicated'] = 'The user duplicated his submission.'; $string['event_submission_locked'] = 'The submissions have been locked for a user.'; $string['event_submission_status_updated'] = 'The status of the submission has been updated.'; $string['event_workflow_state_updated'] = 'The state of the workflow has been updated.'; diff --git a/mod/assign/locallib.php b/mod/assign/locallib.php index e4b4bfef0c4..7cf1462770c 100644 --- a/mod/assign/locallib.php +++ b/mod/assign/locallib.php @@ -5037,7 +5037,14 @@ class assign { return false; } - $this->add_to_log('submissioncopied', $this->format_submission_for_log($submission)); + $addtolog = $this->add_to_log('submissioncopied', $this->format_submission_for_log($submission), '', true); + $params = array( + 'context' => $this->context, + 'objectid' => $submission->id + ); + $event = \mod_assign\event\submission_duplicated::create($params); + $event->set_legacy_logdata($addtolog); + $event->trigger(); $complete = COMPLETION_INCOMPLETE; if ($submission->status == ASSIGN_SUBMISSION_STATUS_SUBMITTED) { diff --git a/mod/assign/tests/base_test.php b/mod/assign/tests/base_test.php index 6accc8b3806..ff01dbdb85e 100644 --- a/mod/assign/tests/base_test.php +++ b/mod/assign/tests/base_test.php @@ -239,6 +239,10 @@ class testable_assign extends assign { return parent::apply_grade_to_user($formdata, $userid, $attemptnumber); } + public function testable_format_submission_for_log(stdClass $submission) { + return parent::format_submission_for_log($submission); + } + public function testable_get_grading_userid_list() { return parent::get_grading_userid_list(); } @@ -259,6 +263,10 @@ class testable_assign extends assign { return parent::process_lock($userid); } + public function testable_process_copy_previous_attempt(&$notices) { + return parent::process_copy_previous_attempt($notices); + } + public function testable_process_revert_to_draft($userid = 0) { return parent::process_revert_to_draft($userid); } diff --git a/mod/assign/tests/locallib_test.php b/mod/assign/tests/locallib_test.php index 055f666168c..587e64bcf2a 100644 --- a/mod/assign/tests/locallib_test.php +++ b/mod/assign/tests/locallib_test.php @@ -1142,5 +1142,40 @@ class mod_assign_locallib_testcase extends mod_assign_base_testcase { // Revert to defaults. $this->editingteachers[0]->ignoresesskey = false; } + + public function test_submission_duplicated_event() { + $this->setUser($this->students[0]); + + $assign = $this->create_instance(); + $submission1 = $assign->get_user_submission($this->students[0]->id, true, 0); + $submission2 = $assign->get_user_submission($this->students[0]->id, true, 1); + $submission2->status = ASSIGN_SUBMISSION_STATUS_REOPENED; + $assign->testable_update_submission($submission2, $this->students[0]->id, time(), $assign->get_instance()->teamsubmission); + + $sink = $this->redirectEvents(); + $notices = null; + $assign->testable_process_copy_previous_attempt($notices); + + $events = $sink->get_events(); + $this->assertCount(1, $events); + $event = reset($events); + $this->assertInstanceOf('\mod_assign\event\submission_duplicated', $event); + $this->assertEquals($assign->get_context(), $event->get_context()); + $this->assertEquals($submission2->id, $event->objectid); + $this->assertEquals($this->students[0]->id, $event->userid); + $submission2->status = ASSIGN_SUBMISSION_STATUS_DRAFT; + $expected = array( + $assign->get_course()->id, + 'assign', + 'submissioncopied', + 'view.php?id=' . $assign->get_course_module()->id, + $assign->testable_format_submission_for_log($submission2), + $assign->get_course_module()->id, + $this->students[0]->id + ); + $this->assertEventLegacyLogData($expected, $event); + $sink->close(); + } + } From b1e52860ea273bbbb9c6c765f654cd8d92a2ac9b Mon Sep 17 00:00:00 2001 From: Frederic Massart Date: Tue, 6 Aug 2013 15:44:50 +0800 Subject: [PATCH 09/15] MDL-40055 mod_assign: Replace add_to_log 'submission statement accepted' --- .../classes/event/statement_accepted.php | 102 ++++++++++++++++++ mod/assign/lang/en/assign.php | 1 + mod/assign/locallib.php | 18 +++- 3 files changed, 119 insertions(+), 2 deletions(-) create mode 100644 mod/assign/classes/event/statement_accepted.php diff --git a/mod/assign/classes/event/statement_accepted.php b/mod/assign/classes/event/statement_accepted.php new file mode 100644 index 00000000000..97241782d94 --- /dev/null +++ b/mod/assign/classes/event/statement_accepted.php @@ -0,0 +1,102 @@ +. + +/** + * mod_assign statement accepted event. + * + * @package mod_assign + * @copyright 2013 Frédéric Massart + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace mod_assign\event; + +defined('MOODLE_INTERNAL') || die(); + +/** + * mod_assign statement accepted event class. + * + * @package mod_assign + * @copyright 2013 Frédéric Massart + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class statement_accepted extends \core\event\base { + + /** + * Legacy log data. + * + * @var array + */ + protected $legacylogdata; + + /** + * Returns description of what happened. + * + * @return string + */ + public function get_description() { + return "The user {$this->userid} has accepted the statement of the submission {$this->objectid}."; + } + + /** + * Return legacy data for add_to_log(). + * + * @return array + */ + public function get_legacy_logdata() { + return $this->legacylogdata; + } + + /** + * Return localised event name. + * + * @return string + */ + public static function get_name() { + return get_string('event_statement_accepted', 'mod_assign'); + } + + /** + * Get URL related to the action. + * + * @return \moodle_url + */ + public function get_url() { + return new \moodle_url('/mod/assign/view.php', array('id' => $this->context->instanceid)); + } + + /** + * Init method. + * + * @return void + */ + protected function init() { + $this->data['crud'] = 'r'; + $this->data['level'] = 50; // TODO MDL-41040. + $this->data['objecttable'] = 'assign_submission'; + } + + /** + * Sets the legacy event log data. + * + * @param stdClass $legacylogdata legacy log data. + * @return void + */ + public function set_legacy_logdata($legacylogdata) { + $this->legacylogdata = $legacylogdata; + } + +} diff --git a/mod/assign/lang/en/assign.php b/mod/assign/lang/en/assign.php index fc8e69befae..b1a2f29d067 100644 --- a/mod/assign/lang/en/assign.php +++ b/mod/assign/lang/en/assign.php @@ -145,6 +145,7 @@ $string['event_all_submissions_downloaded'] = 'All the submissions are being dow $string['event_extension_granted'] = 'An extension has been granted.'; $string['event_identities_revealed'] = 'The identities have been revealed.'; $string['event_marker_updated'] = 'The allocated marker has been updated.'; +$string['event_statement_accepted'] = 'The user has accepted the statement of the submission.'; $string['event_submission_duplicated'] = 'The user duplicated his submission.'; $string['event_submission_locked'] = 'The submissions have been locked for a user.'; $string['event_submission_status_updated'] = 'The status of the submission has been updated.'; diff --git a/mod/assign/locallib.php b/mod/assign/locallib.php index 7cf1462770c..a826079db8b 100644 --- a/mod/assign/locallib.php +++ b/mod/assign/locallib.php @@ -4514,7 +4514,14 @@ class assign { $logmessage = get_string('submissionstatementacceptedlog', 'mod_assign', fullname($USER)); - $this->add_to_log('submission statement accepted', $logmessage); + $addtolog = $this->add_to_log('submission statement accepted', $logmessage, '', true); + $params = array( + 'context' => $this->context, + 'objectid' => $submission->id + ); + $event = \mod_assign\event\statement_accepted::create($params); + $event->set_legacy_logdata($addtolog); + $event->trigger(); } $logdata = $this->add_to_log('submit for grading', $this->format_submission_for_log($submission), '', true); $this->notify_graders($submission); @@ -5149,7 +5156,14 @@ class assign { $logmessage = get_string('submissionstatementacceptedlog', 'mod_assign', fullname($USER)); - $this->add_to_log('submission statement accepted', $logmessage); + $addtolog = $this->add_to_log('submission statement accepted', $logmessage, '', true); + $params = array( + 'context' => $this->context, + 'objectid' => $submission->id + ); + $event = \mod_assign\event\statement_accepted::create($params); + $event->set_legacy_logdata($addtolog); + $event->trigger(); } $this->add_to_log('submit', $this->format_submission_for_log($submission)); From 6332ff7a35658c975fe7e590eb563253954f7b08 Mon Sep 17 00:00:00 2001 From: Frederic Massart Date: Tue, 6 Aug 2013 15:53:29 +0800 Subject: [PATCH 10/15] MDL-40055 mod_assign: Replace add_to_log 'submit' --- .../classes/event/submission_updated.php | 102 ++++++++++++++++++ mod/assign/lang/en/assign.php | 1 + mod/assign/locallib.php | 10 +- 3 files changed, 112 insertions(+), 1 deletion(-) create mode 100644 mod/assign/classes/event/submission_updated.php diff --git a/mod/assign/classes/event/submission_updated.php b/mod/assign/classes/event/submission_updated.php new file mode 100644 index 00000000000..047a9801816 --- /dev/null +++ b/mod/assign/classes/event/submission_updated.php @@ -0,0 +1,102 @@ +. + +/** + * mod_assign submission updated event. + * + * @package mod_assign + * @copyright 2013 Frédéric Massart + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace mod_assign\event; + +defined('MOODLE_INTERNAL') || die(); + +/** + * mod_assign submission updated event class. + * + * @package mod_assign + * @copyright 2013 Frédéric Massart + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class submission_updated extends \core\event\base { + + /** + * Legacy log data. + * + * @var array + */ + protected $legacylogdata; + + /** + * Returns description of what happened. + * + * @return string + */ + public function get_description() { + return "The user {$this->userid} has updated the submission {$this->objectid}."; + } + + /** + * Return legacy data for add_to_log(). + * + * @return array + */ + public function get_legacy_logdata() { + return $this->legacylogdata; + } + + /** + * Return localised event name. + * + * @return string + */ + public static function get_name() { + return get_string('event_submission_updated', 'mod_assign'); + } + + /** + * Get URL related to the action. + * + * @return \moodle_url + */ + public function get_url() { + return new \moodle_url('/mod/assign/view.php', array('id' => $this->context->instanceid)); + } + + /** + * Init method. + * + * @return void + */ + protected function init() { + $this->data['crud'] = 'u'; + $this->data['level'] = 50; // TODO MDL-41040. + $this->data['objecttable'] = 'assign_submission'; + } + + /** + * Sets the legacy event log data. + * + * @param stdClass $legacylogdata legacy log data. + * @return void + */ + public function set_legacy_logdata($legacylogdata) { + $this->legacylogdata = $legacylogdata; + } + +} diff --git a/mod/assign/lang/en/assign.php b/mod/assign/lang/en/assign.php index b1a2f29d067..26e0c9a1439 100644 --- a/mod/assign/lang/en/assign.php +++ b/mod/assign/lang/en/assign.php @@ -149,6 +149,7 @@ $string['event_statement_accepted'] = 'The user has accepted the statement of th $string['event_submission_duplicated'] = 'The user duplicated his submission.'; $string['event_submission_locked'] = 'The submissions have been locked for a user.'; $string['event_submission_status_updated'] = 'The status of the submission has been updated.'; +$string['event_submission_updated'] = 'The user has saved a submission.'; $string['event_workflow_state_updated'] = 'The state of the workflow has been updated.'; $string['extensionduedate'] = 'Extension due date'; $string['extensionnotafterduedate'] = 'Extension date must be after the due date'; diff --git a/mod/assign/locallib.php b/mod/assign/locallib.php index a826079db8b..99201b479a8 100644 --- a/mod/assign/locallib.php +++ b/mod/assign/locallib.php @@ -5165,7 +5165,15 @@ class assign { $event->set_legacy_logdata($addtolog); $event->trigger(); } - $this->add_to_log('submit', $this->format_submission_for_log($submission)); + + $addtolog = $this->add_to_log('submit', $this->format_submission_for_log($submission), '', true); + $params = array( + 'context' => $this->context, + 'objectid' => $submission->id + ); + $event = \mod_assign\event\submission_updated::create($params); + $event->set_legacy_logdata($addtolog); + $event->trigger(); $complete = COMPLETION_INCOMPLETE; if ($submission->status == ASSIGN_SUBMISSION_STATUS_SUBMITTED) { From 9a289c3da595bdbd48ab59f06007d88d542be630 Mon Sep 17 00:00:00 2001 From: Frederic Massart Date: Tue, 6 Aug 2013 16:12:48 +0800 Subject: [PATCH 11/15] MDL-40055 mod_assign: Replace add_to_log 'unlock submission' --- .../classes/event/submission_unlocked.php | 113 ++++++++++++++++++ mod/assign/lang/en/assign.php | 1 + mod/assign/locallib.php | 10 +- mod/assign/tests/base_test.php | 4 + mod/assign/tests/locallib_test.php | 33 +++++ 5 files changed, 160 insertions(+), 1 deletion(-) create mode 100644 mod/assign/classes/event/submission_unlocked.php diff --git a/mod/assign/classes/event/submission_unlocked.php b/mod/assign/classes/event/submission_unlocked.php new file mode 100644 index 00000000000..e17841cef61 --- /dev/null +++ b/mod/assign/classes/event/submission_unlocked.php @@ -0,0 +1,113 @@ +. + +/** + * mod_assign submission unlocked event. + * + * @package mod_assign + * @copyright 2013 Frédéric Massart + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace mod_assign\event; + +defined('MOODLE_INTERNAL') || die(); + +/** + * mod_assign submission unlocked event class. + * + * @package mod_assign + * @copyright 2013 Frédéric Massart + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class submission_unlocked extends \core\event\base { + + /** + * Legacy log data. + * + * @var array + */ + protected $legacylogdata; + + /** + * Returns description of what happened. + * + * @return string + */ + public function get_description() { + return "User {$this->userid} unlocked the submission for user {$this->relateduserid}."; + } + + /** + * Return legacy data for add_to_log(). + * + * @return array + */ + public function get_legacy_logdata() { + return $this->legacylogdata; + } + + /** + * Return localised event name. + * + * @return \lang_string + */ + public static function get_name() { + return new \lang_string('event_submission_unlocked', 'mod_assign'); + } + + /** + * Get URL related to the action + * + * @return \moodle_url + */ + public function get_url() { + return new \moodle_url('/mod/assign/view.php', array('id' => $this->context->instanceid)); + } + + /** + * Init method. + * + * @return void + */ + protected function init() { + $this->data['crud'] = 'u'; + $this->data['level'] = 50; // TODO MDL-37658. + $this->data['objecttable'] = 'assign'; + } + + /** + * Sets the legacy event log data. + * + * @param stdClass $legacylogdata legacy log data. + * @return void + */ + public function set_legacy_logdata($legacylogdata) { + $this->legacylogdata = $legacylogdata; + } + + /** + * Custom validation. + * + * @throws coding_exception + * @return void + */ + protected function validate_data() { + if (!isset($this->relateduserid)) { + throw new coding_exception('relateduserid is a mandatory property.'); + } + } +} diff --git a/mod/assign/lang/en/assign.php b/mod/assign/lang/en/assign.php index 26e0c9a1439..f590ab98541 100644 --- a/mod/assign/lang/en/assign.php +++ b/mod/assign/lang/en/assign.php @@ -149,6 +149,7 @@ $string['event_statement_accepted'] = 'The user has accepted the statement of th $string['event_submission_duplicated'] = 'The user duplicated his submission.'; $string['event_submission_locked'] = 'The submissions have been locked for a user.'; $string['event_submission_status_updated'] = 'The status of the submission has been updated.'; +$string['event_submission_unlocked'] = 'The submissions have been unlocked for a user.'; $string['event_submission_updated'] = 'The user has saved a submission.'; $string['event_workflow_state_updated'] = 'The state of the workflow has been updated.'; $string['extensionduedate'] = 'Extension due date'; diff --git a/mod/assign/locallib.php b/mod/assign/locallib.php index 99201b479a8..4355b0f3ae7 100644 --- a/mod/assign/locallib.php +++ b/mod/assign/locallib.php @@ -5886,7 +5886,15 @@ class assign { $logmessage = get_string('unlocksubmissionforstudent', 'assign', array('id'=>$user->id, 'fullname'=>fullname($user))); - $this->add_to_log('unlock submission', $logmessage); + $addtolog = $this->add_to_log('unlock submission', $logmessage, '', true); + $params = array( + 'context' => $this->context, + 'objectid' => $flags->assignment, + 'relateduserid' => $user->id + ); + $event = \mod_assign\event\submission_unlocked::create($params); + $event->set_legacy_logdata($addtolog); + $event->trigger(); } /** diff --git a/mod/assign/tests/base_test.php b/mod/assign/tests/base_test.php index ff01dbdb85e..17db4f23a0d 100644 --- a/mod/assign/tests/base_test.php +++ b/mod/assign/tests/base_test.php @@ -263,6 +263,10 @@ class testable_assign extends assign { return parent::process_lock($userid); } + public function testable_process_unlock($userid = 0) { + return parent::process_unlock($userid); + } + public function testable_process_copy_previous_attempt(&$notices) { return parent::process_copy_previous_attempt($notices); } diff --git a/mod/assign/tests/locallib_test.php b/mod/assign/tests/locallib_test.php index 587e64bcf2a..494a271f3c2 100644 --- a/mod/assign/tests/locallib_test.php +++ b/mod/assign/tests/locallib_test.php @@ -1177,5 +1177,38 @@ class mod_assign_locallib_testcase extends mod_assign_base_testcase { $sink->close(); } + public function test_submission_unlocked_event() { + $this->editingteachers[0]->ignoresesskey = true; + $this->setUser($this->editingteachers[0]); + + $assign = $this->create_instance(); + $sink = $this->redirectEvents(); + + $assign->testable_process_unlock($this->students[0]->id); + + $events = $sink->get_events(); + $this->assertCount(1, $events); + $event = reset($events); + $this->assertInstanceOf('\mod_assign\event\submission_unlocked', $event); + $this->assertEquals($assign->get_context(), $event->get_context()); + $this->assertEquals($assign->get_instance()->id, $event->objectid); + $this->assertEquals($this->students[0]->id, $event->relateduserid); + $expected = array( + $assign->get_course()->id, + 'assign', + 'unlock submission', + 'view.php?id=' . $assign->get_course_module()->id, + get_string('unlocksubmissionforstudent', 'assign', array('id' => $this->students[0]->id, + 'fullname' => fullname($this->students[0]))), + $assign->get_course_module()->id, + $this->editingteachers[0]->id + ); + $this->assertEventLegacyLogData($expected, $event); + $sink->close(); + + // Revert to defaults. + $this->editingteachers[0]->ignoresesskey = false; + } + } From bd2e9829981c827f4134a45e5a061ccb5d4073d1 Mon Sep 17 00:00:00 2001 From: Frederic Massart Date: Fri, 9 Aug 2013 15:53:55 +0800 Subject: [PATCH 12/15] MDL-40055 mod_assign: Replace add_to_log 'grade submission' --- .../classes/event/submission_graded.php | 113 ++++++++++++++++++ mod/assign/lang/en/assign.php | 1 + mod/assign/locallib.php | 21 +++- mod/assign/tests/base_test.php | 7 ++ mod/assign/tests/locallib_test.php | 62 ++++++++++ 5 files changed, 201 insertions(+), 3 deletions(-) create mode 100644 mod/assign/classes/event/submission_graded.php diff --git a/mod/assign/classes/event/submission_graded.php b/mod/assign/classes/event/submission_graded.php new file mode 100644 index 00000000000..1f4e5f73fa0 --- /dev/null +++ b/mod/assign/classes/event/submission_graded.php @@ -0,0 +1,113 @@ +. + +/** + * mod_assign submission graded event. + * + * @package mod_assign + * @copyright 2013 Frédéric Massart + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace mod_assign\event; + +defined('MOODLE_INTERNAL') || die(); + +/** + * mod_assign submission graded event class. + * + * @package mod_assign + * @copyright 2013 Frédéric Massart + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class submission_graded extends \core\event\base { + + /** + * Legacy log data. + * + * @var array + */ + protected $legacylogdata; + + /** + * Returns description of what happened. + * + * @return string + */ + public function get_description() { + return "User {$this->userid} has graded the submission {$this->objectid}."; + } + + /** + * Return legacy data for add_to_log(). + * + * @return array + */ + public function get_legacy_logdata() { + return $this->legacylogdata; + } + + /** + * Return localised event name. + * + * @return \lang_string + */ + public static function get_name() { + return new \lang_string('event_submission_graded', 'mod_assign'); + } + + /** + * Get URL related to the action + * + * @return \moodle_url + */ + public function get_url() { + return new \moodle_url('/mod/assign/view.php', array('id' => $this->context->instanceid)); + } + + /** + * Init method. + * + * @return void + */ + protected function init() { + $this->data['crud'] = 'u'; + $this->data['level'] = 50; // TODO MDL-41040. + $this->data['objecttable'] = 'assign_grades'; + } + + /** + * Sets the legacy event log data. + * + * @param stdClass $legacylogdata legacy log data. + * @return void + */ + public function set_legacy_logdata($legacylogdata) { + $this->legacylogdata = $legacylogdata; + } + + /** + * Custom validation. + * + * @throws coding_exception + * @return void + */ + protected function validate_data() { + if (!isset($this->relateduserid)) { + throw new coding_exception('relateduserid is a mandatory property.'); + } + } +} diff --git a/mod/assign/lang/en/assign.php b/mod/assign/lang/en/assign.php index f590ab98541..02b486668d9 100644 --- a/mod/assign/lang/en/assign.php +++ b/mod/assign/lang/en/assign.php @@ -147,6 +147,7 @@ $string['event_identities_revealed'] = 'The identities have been revealed.'; $string['event_marker_updated'] = 'The allocated marker has been updated.'; $string['event_statement_accepted'] = 'The user has accepted the statement of the submission.'; $string['event_submission_duplicated'] = 'The user duplicated his submission.'; +$string['event_submission_graded'] = 'The submission has been graded.'; $string['event_submission_locked'] = 'The submissions have been locked for a user.'; $string['event_submission_status_updated'] = 'The status of the submission has been updated.'; $string['event_submission_unlocked'] = 'The submissions have been unlocked for a user.'; diff --git a/mod/assign/locallib.php b/mod/assign/locallib.php index 4355b0f3ae7..51274f467ae 100644 --- a/mod/assign/locallib.php +++ b/mod/assign/locallib.php @@ -4800,7 +4800,15 @@ class assign { } } - $this->add_to_log('grade submission', $this->format_grade_for_log($grade)); + $addtolog = $this->add_to_log('grade submission', $this->format_grade_for_log($grade), '', true); + $params = array( + 'context' => $this->context, + 'objectid' => $grade->id, + 'relateduserid' => $userid + ); + $event = \mod_assign\event\submission_graded::create($params); + $event->set_legacy_logdata($addtolog); + $event->trigger(); } return get_string('quickgradingchangessaved', 'assign'); @@ -5949,9 +5957,16 @@ class assign { } $this->update_grade($grade); $this->notify_grade_modified($grade); - $user = $DB->get_record('user', array('id' => $userid), '*', MUST_EXIST); - $this->add_to_log('grade submission', $this->format_grade_for_log($grade)); + $addtolog = $this->add_to_log('grade submission', $this->format_grade_for_log($grade), '', true); + $params = array( + 'context' => $this->context, + 'objectid' => $grade->id, + 'relateduserid' => $userid + ); + $event = \mod_assign\event\submission_graded::create($params); + $event->set_legacy_logdata($addtolog); + $event->trigger(); } diff --git a/mod/assign/tests/base_test.php b/mod/assign/tests/base_test.php index 17db4f23a0d..cae9553c00d 100644 --- a/mod/assign/tests/base_test.php +++ b/mod/assign/tests/base_test.php @@ -263,6 +263,13 @@ class testable_assign extends assign { return parent::process_lock($userid); } + public function testable_process_save_quick_grades($postdata) { + // Ugly hack to get something into the method. + global $_POST; + $_POST = $postdata; + return parent::process_save_quick_grades(); + } + public function testable_process_unlock($userid = 0) { return parent::process_unlock($userid); } diff --git a/mod/assign/tests/locallib_test.php b/mod/assign/tests/locallib_test.php index 494a271f3c2..774ca1c0239 100644 --- a/mod/assign/tests/locallib_test.php +++ b/mod/assign/tests/locallib_test.php @@ -1210,5 +1210,67 @@ class mod_assign_locallib_testcase extends mod_assign_base_testcase { $this->editingteachers[0]->ignoresesskey = false; } + public function test_submission_graded_event() { + $this->setUser($this->editingteachers[0]); + $assign = $this->create_instance(); + + // Test apply_grade_to_user. + $sink = $this->redirectEvents(); + + $data = new stdClass(); + $data->grade = '50.0'; + $assign->testable_apply_grade_to_user($data, $this->students[0]->id, 0); + $grade = $assign->get_user_grade($this->students[0]->id, false, 0); + + $events = $sink->get_events(); + $this->assertCount(1, $events); + $event = reset($events); + $this->assertInstanceOf('\mod_assign\event\submission_graded', $event); + $this->assertEquals($assign->get_context(), $event->get_context()); + $this->assertEquals($grade->id, $event->objectid); + $this->assertEquals($this->students[0]->id, $event->relateduserid); + $expected = array( + $assign->get_course()->id, + 'assign', + 'grade submission', + 'view.php?id=' . $assign->get_course_module()->id, + $assign->format_grade_for_log($grade), + $assign->get_course_module()->id, + $this->editingteachers[0]->id + ); + $this->assertEventLegacyLogData($expected, $event); + $sink->close(); + + // Test process_save_quick_grades. + $sink = $this->redirectEvents(); + + $data = array( + 'grademodified_' . $this->students[0]->id => time(), + 'quickgrade_' . $this->students[0]->id => '60.0' + ); + $assign->testable_process_save_quick_grades($data); + $grade = $assign->get_user_grade($this->students[0]->id, false); + $this->assertEquals('60.0', $grade->grade); + + $events = $sink->get_events(); + $this->assertCount(1, $events); + $event = reset($events); + $this->assertInstanceOf('\mod_assign\event\submission_graded', $event); + $this->assertEquals($assign->get_context(), $event->get_context()); + $this->assertEquals($grade->id, $event->objectid); + $this->assertEquals($this->students[0]->id, $event->relateduserid); + $expected = array( + $assign->get_course()->id, + 'assign', + 'grade submission', + 'view.php?id=' . $assign->get_course_module()->id, + $assign->format_grade_for_log($grade), + $assign->get_course_module()->id, + $this->editingteachers[0]->id + ); + $this->assertEventLegacyLogData($expected, $event); + $sink->close(); + } + } From 5e8eb969e0ec896c43c4694a9b76d7108e237d65 Mon Sep 17 00:00:00 2001 From: Frederic Massart Date: Mon, 12 Aug 2013 17:33:07 +0800 Subject: [PATCH 13/15] MDL-40055 mod_assign: get_name() uses get_string() not lang_string --- mod/assign/classes/event/all_submissions_downloaded.php | 4 ++-- mod/assign/classes/event/assessable_submitted.php | 4 ++-- mod/assign/classes/event/extension_granted.php | 4 ++-- mod/assign/classes/event/identities_revealed.php | 4 ++-- mod/assign/classes/event/marker_updated.php | 4 ++-- mod/assign/classes/event/submission_duplicated.php | 4 ++-- mod/assign/classes/event/submission_graded.php | 4 ++-- mod/assign/classes/event/submission_locked.php | 4 ++-- mod/assign/classes/event/submission_status_updated.php | 4 ++-- mod/assign/classes/event/submission_unlocked.php | 4 ++-- mod/assign/classes/event/workflow_state_updated.php | 4 ++-- 11 files changed, 22 insertions(+), 22 deletions(-) diff --git a/mod/assign/classes/event/all_submissions_downloaded.php b/mod/assign/classes/event/all_submissions_downloaded.php index 468d95e5fa0..476519b73ef 100644 --- a/mod/assign/classes/event/all_submissions_downloaded.php +++ b/mod/assign/classes/event/all_submissions_downloaded.php @@ -63,10 +63,10 @@ class all_submissions_downloaded extends \core\event\base { /** * Return localised event name. * - * @return \lang_string + * @return string */ public static function get_name() { - return new \lang_string('event_all_submissions_downloaded', 'mod_assign'); + return get_string('event_all_submissions_downloaded', 'mod_assign'); } /** diff --git a/mod/assign/classes/event/assessable_submitted.php b/mod/assign/classes/event/assessable_submitted.php index d893f8eef4f..922fe6ff8e6 100644 --- a/mod/assign/classes/event/assessable_submitted.php +++ b/mod/assign/classes/event/assessable_submitted.php @@ -88,10 +88,10 @@ class assessable_submitted extends \core\event\assessable_submitted { /** * Return localised event name. * - * @return \lang_string + * @return string */ public static function get_name() { - return new \lang_string('event_assessable_submitted', 'mod_assign'); + return get_string('event_assessable_submitted', 'mod_assign'); } /** diff --git a/mod/assign/classes/event/extension_granted.php b/mod/assign/classes/event/extension_granted.php index fe4e25ae4f2..9ccf5604eec 100644 --- a/mod/assign/classes/event/extension_granted.php +++ b/mod/assign/classes/event/extension_granted.php @@ -63,10 +63,10 @@ class extension_granted extends \core\event\base { /** * Return localised event name. * - * @return \lang_string + * @return string */ public static function get_name() { - return new \lang_string('event_extension_granted', 'mod_assign'); + return get_string('event_extension_granted', 'mod_assign'); } /** diff --git a/mod/assign/classes/event/identities_revealed.php b/mod/assign/classes/event/identities_revealed.php index 4ccfa353fda..02f6a619e86 100644 --- a/mod/assign/classes/event/identities_revealed.php +++ b/mod/assign/classes/event/identities_revealed.php @@ -63,10 +63,10 @@ class identities_revealed extends \core\event\base { /** * Return localised event name. * - * @return \lang_string + * @return string */ public static function get_name() { - return new \lang_string('event_identities_revealed', 'mod_assign'); + return get_string('event_identities_revealed', 'mod_assign'); } /** diff --git a/mod/assign/classes/event/marker_updated.php b/mod/assign/classes/event/marker_updated.php index fccf167a5bc..09b8f62a530 100644 --- a/mod/assign/classes/event/marker_updated.php +++ b/mod/assign/classes/event/marker_updated.php @@ -63,10 +63,10 @@ class marker_updated extends \core\event\base { /** * Return localised event name. * - * @return \lang_string + * @return string */ public static function get_name() { - return new \lang_string('event_marker_updated', 'mod_assign'); + return get_string('event_marker_updated', 'mod_assign'); } /** diff --git a/mod/assign/classes/event/submission_duplicated.php b/mod/assign/classes/event/submission_duplicated.php index 27d553fbb0b..ac079911506 100644 --- a/mod/assign/classes/event/submission_duplicated.php +++ b/mod/assign/classes/event/submission_duplicated.php @@ -63,10 +63,10 @@ class submission_duplicated extends \core\event\base { /** * Return localised event name. * - * @return \lang_string + * @return string */ public static function get_name() { - return new \lang_string('event_submission_duplicated', 'mod_assign'); + return get_string('event_submission_duplicated', 'mod_assign'); } /** diff --git a/mod/assign/classes/event/submission_graded.php b/mod/assign/classes/event/submission_graded.php index 1f4e5f73fa0..03abf9c15a1 100644 --- a/mod/assign/classes/event/submission_graded.php +++ b/mod/assign/classes/event/submission_graded.php @@ -63,10 +63,10 @@ class submission_graded extends \core\event\base { /** * Return localised event name. * - * @return \lang_string + * @return string */ public static function get_name() { - return new \lang_string('event_submission_graded', 'mod_assign'); + return get_string('event_submission_graded', 'mod_assign'); } /** diff --git a/mod/assign/classes/event/submission_locked.php b/mod/assign/classes/event/submission_locked.php index 7430d574ceb..f95715a920f 100644 --- a/mod/assign/classes/event/submission_locked.php +++ b/mod/assign/classes/event/submission_locked.php @@ -63,10 +63,10 @@ class submission_locked extends \core\event\base { /** * Return localised event name. * - * @return \lang_string + * @return string */ public static function get_name() { - return new \lang_string('event_submission_locked', 'mod_assign'); + return get_string('event_submission_locked', 'mod_assign'); } /** diff --git a/mod/assign/classes/event/submission_status_updated.php b/mod/assign/classes/event/submission_status_updated.php index 2ccc0b42cd7..df3e45bef16 100644 --- a/mod/assign/classes/event/submission_status_updated.php +++ b/mod/assign/classes/event/submission_status_updated.php @@ -63,10 +63,10 @@ class submission_status_updated extends \core\event\base { /** * Return localised event name. * - * @return \lang_string + * @return string */ public static function get_name() { - return new \lang_string('event_submission_status_updated', 'mod_assign'); + return get_string('event_submission_status_updated', 'mod_assign'); } /** diff --git a/mod/assign/classes/event/submission_unlocked.php b/mod/assign/classes/event/submission_unlocked.php index e17841cef61..429ff4696e7 100644 --- a/mod/assign/classes/event/submission_unlocked.php +++ b/mod/assign/classes/event/submission_unlocked.php @@ -63,10 +63,10 @@ class submission_unlocked extends \core\event\base { /** * Return localised event name. * - * @return \lang_string + * @return string */ public static function get_name() { - return new \lang_string('event_submission_unlocked', 'mod_assign'); + return get_string('event_submission_unlocked', 'mod_assign'); } /** diff --git a/mod/assign/classes/event/workflow_state_updated.php b/mod/assign/classes/event/workflow_state_updated.php index de570282c80..85a60c797d6 100644 --- a/mod/assign/classes/event/workflow_state_updated.php +++ b/mod/assign/classes/event/workflow_state_updated.php @@ -63,10 +63,10 @@ class workflow_state_updated extends \core\event\base { /** * Return localised event name. * - * @return \lang_string + * @return string */ public static function get_name() { - return new \lang_string('event_workflow_state_updated', 'mod_assign'); + return get_string('event_workflow_state_updated', 'mod_assign'); } /** From 959a3284720fdfeb503074ad55e4f9484bfb55a9 Mon Sep 17 00:00:00 2001 From: Frederic Massart Date: Wed, 21 Aug 2013 14:28:38 +0800 Subject: [PATCH 14/15] MDL-40055 mod_assign: Setting level according to new event constants --- mod/assign/classes/event/all_submissions_downloaded.php | 2 +- mod/assign/classes/event/extension_granted.php | 2 +- mod/assign/classes/event/identities_revealed.php | 2 +- mod/assign/classes/event/marker_updated.php | 2 +- mod/assign/classes/event/statement_accepted.php | 2 +- mod/assign/classes/event/submission_duplicated.php | 2 +- mod/assign/classes/event/submission_graded.php | 2 +- mod/assign/classes/event/submission_locked.php | 2 +- mod/assign/classes/event/submission_status_updated.php | 2 +- mod/assign/classes/event/submission_unlocked.php | 2 +- mod/assign/classes/event/submission_updated.php | 2 +- mod/assign/classes/event/workflow_state_updated.php | 2 +- 12 files changed, 12 insertions(+), 12 deletions(-) diff --git a/mod/assign/classes/event/all_submissions_downloaded.php b/mod/assign/classes/event/all_submissions_downloaded.php index 476519b73ef..107f2d6fdc6 100644 --- a/mod/assign/classes/event/all_submissions_downloaded.php +++ b/mod/assign/classes/event/all_submissions_downloaded.php @@ -95,7 +95,7 @@ class all_submissions_downloaded extends \core\event\base { */ protected function init() { $this->data['crud'] = 'r'; - $this->data['level'] = 50; // TODO MDL-37658. + $this->data['level'] = self::LEVEL_TEACHING; $this->data['objecttable'] = 'assign'; } diff --git a/mod/assign/classes/event/extension_granted.php b/mod/assign/classes/event/extension_granted.php index 9ccf5604eec..9c17fb08634 100644 --- a/mod/assign/classes/event/extension_granted.php +++ b/mod/assign/classes/event/extension_granted.php @@ -85,7 +85,7 @@ class extension_granted extends \core\event\base { */ protected function init() { $this->data['crud'] = 'u'; - $this->data['level'] = 50; // TODO MDL-37658. + $this->data['level'] = self::LEVEL_TEACHING; $this->data['objecttable'] = 'assign'; } diff --git a/mod/assign/classes/event/identities_revealed.php b/mod/assign/classes/event/identities_revealed.php index 02f6a619e86..84f5d0958f2 100644 --- a/mod/assign/classes/event/identities_revealed.php +++ b/mod/assign/classes/event/identities_revealed.php @@ -85,7 +85,7 @@ class identities_revealed extends \core\event\base { */ protected function init() { $this->data['crud'] = 'u'; - $this->data['level'] = 50; // TODO MDL-37658. + $this->data['level'] = self::LEVEL_TEACHING; $this->data['objecttable'] = 'assign'; } diff --git a/mod/assign/classes/event/marker_updated.php b/mod/assign/classes/event/marker_updated.php index 09b8f62a530..4501b4ef44b 100644 --- a/mod/assign/classes/event/marker_updated.php +++ b/mod/assign/classes/event/marker_updated.php @@ -85,7 +85,7 @@ class marker_updated extends \core\event\base { */ protected function init() { $this->data['crud'] = 'u'; - $this->data['level'] = 50; // TODO MDL-37658. + $this->data['level'] = self::LEVEL_TEACHING; $this->data['objecttable'] = 'assign'; } diff --git a/mod/assign/classes/event/statement_accepted.php b/mod/assign/classes/event/statement_accepted.php index 97241782d94..b0e11eb1549 100644 --- a/mod/assign/classes/event/statement_accepted.php +++ b/mod/assign/classes/event/statement_accepted.php @@ -85,7 +85,7 @@ class statement_accepted extends \core\event\base { */ protected function init() { $this->data['crud'] = 'r'; - $this->data['level'] = 50; // TODO MDL-41040. + $this->data['level'] = self::LEVEL_PARTICIPATING; $this->data['objecttable'] = 'assign_submission'; } diff --git a/mod/assign/classes/event/submission_duplicated.php b/mod/assign/classes/event/submission_duplicated.php index ac079911506..4b7d90fea7b 100644 --- a/mod/assign/classes/event/submission_duplicated.php +++ b/mod/assign/classes/event/submission_duplicated.php @@ -85,7 +85,7 @@ class submission_duplicated extends \core\event\base { */ protected function init() { $this->data['crud'] = 'c'; - $this->data['level'] = 50; // TODO MDL-37658. + $this->data['level'] = self::LEVEL_PARTICIPATING; $this->data['objecttable'] = 'assign_submission'; } diff --git a/mod/assign/classes/event/submission_graded.php b/mod/assign/classes/event/submission_graded.php index 03abf9c15a1..0387dd43580 100644 --- a/mod/assign/classes/event/submission_graded.php +++ b/mod/assign/classes/event/submission_graded.php @@ -85,7 +85,7 @@ class submission_graded extends \core\event\base { */ protected function init() { $this->data['crud'] = 'u'; - $this->data['level'] = 50; // TODO MDL-41040. + $this->data['level'] = self::LEVEL_TEACHING; $this->data['objecttable'] = 'assign_grades'; } diff --git a/mod/assign/classes/event/submission_locked.php b/mod/assign/classes/event/submission_locked.php index f95715a920f..9d3b376f1be 100644 --- a/mod/assign/classes/event/submission_locked.php +++ b/mod/assign/classes/event/submission_locked.php @@ -85,7 +85,7 @@ class submission_locked extends \core\event\base { */ protected function init() { $this->data['crud'] = 'u'; - $this->data['level'] = 50; // TODO MDL-37658. + $this->data['level'] = self::LEVEL_TEACHING; $this->data['objecttable'] = 'assign'; } diff --git a/mod/assign/classes/event/submission_status_updated.php b/mod/assign/classes/event/submission_status_updated.php index df3e45bef16..5d923931ebb 100644 --- a/mod/assign/classes/event/submission_status_updated.php +++ b/mod/assign/classes/event/submission_status_updated.php @@ -85,7 +85,7 @@ class submission_status_updated extends \core\event\base { */ protected function init() { $this->data['crud'] = 'u'; - $this->data['level'] = 50; // TODO MDL-37658. + $this->data['level'] = self::LEVEL_TEACHING; $this->data['objecttable'] = 'assign_submission'; } diff --git a/mod/assign/classes/event/submission_unlocked.php b/mod/assign/classes/event/submission_unlocked.php index 429ff4696e7..8c705f774f0 100644 --- a/mod/assign/classes/event/submission_unlocked.php +++ b/mod/assign/classes/event/submission_unlocked.php @@ -85,7 +85,7 @@ class submission_unlocked extends \core\event\base { */ protected function init() { $this->data['crud'] = 'u'; - $this->data['level'] = 50; // TODO MDL-37658. + $this->data['level'] = self::LEVEL_TEACHING; $this->data['objecttable'] = 'assign'; } diff --git a/mod/assign/classes/event/submission_updated.php b/mod/assign/classes/event/submission_updated.php index 047a9801816..00b5653ab1a 100644 --- a/mod/assign/classes/event/submission_updated.php +++ b/mod/assign/classes/event/submission_updated.php @@ -85,7 +85,7 @@ class submission_updated extends \core\event\base { */ protected function init() { $this->data['crud'] = 'u'; - $this->data['level'] = 50; // TODO MDL-41040. + $this->data['level'] = self::LEVEL_PARTICIPATING; $this->data['objecttable'] = 'assign_submission'; } diff --git a/mod/assign/classes/event/workflow_state_updated.php b/mod/assign/classes/event/workflow_state_updated.php index 85a60c797d6..486b0f65ad6 100644 --- a/mod/assign/classes/event/workflow_state_updated.php +++ b/mod/assign/classes/event/workflow_state_updated.php @@ -85,7 +85,7 @@ class workflow_state_updated extends \core\event\base { */ protected function init() { $this->data['crud'] = 'u'; - $this->data['level'] = 50; // TODO MDL-37658. + $this->data['level'] = self::LEVEL_TEACHING; $this->data['objecttable'] = 'assign'; } From 725dfe6a549556545eae1aababc7aca0aede4f2d Mon Sep 17 00:00:00 2001 From: Frederic Massart Date: Mon, 26 Aug 2013 14:21:34 +0800 Subject: [PATCH 15/15] MDL-40055 mod_assign: Wrong namespace when throwing exception --- mod/assign/classes/event/extension_granted.php | 4 ++-- mod/assign/classes/event/marker_updated.php | 6 +++--- mod/assign/classes/event/submission_graded.php | 4 ++-- mod/assign/classes/event/submission_locked.php | 4 ++-- mod/assign/classes/event/submission_status_updated.php | 4 ++-- mod/assign/classes/event/submission_unlocked.php | 4 ++-- mod/assign/classes/event/workflow_state_updated.php | 6 +++--- 7 files changed, 16 insertions(+), 16 deletions(-) diff --git a/mod/assign/classes/event/extension_granted.php b/mod/assign/classes/event/extension_granted.php index 9c17fb08634..6bbabdec7d5 100644 --- a/mod/assign/classes/event/extension_granted.php +++ b/mod/assign/classes/event/extension_granted.php @@ -102,12 +102,12 @@ class extension_granted extends \core\event\base { /** * Custom validation. * - * @throws coding_exception + * @throws \coding_exception * @return void */ protected function validate_data() { if (!isset($this->relateduserid)) { - throw new coding_exception('relateduserid is a mandatory property.'); + throw new \coding_exception('relateduserid is a mandatory property.'); } } } diff --git a/mod/assign/classes/event/marker_updated.php b/mod/assign/classes/event/marker_updated.php index 4501b4ef44b..b771144a3df 100644 --- a/mod/assign/classes/event/marker_updated.php +++ b/mod/assign/classes/event/marker_updated.php @@ -102,14 +102,14 @@ class marker_updated extends \core\event\base { /** * Custom validation. * - * @throws coding_exception + * @throws \coding_exception * @return void */ protected function validate_data() { if (!isset($this->other['markerid'])) { - throw new coding_exception('markerid must be set in $other.'); + throw new \coding_exception('markerid must be set in $other.'); } else if (!isset($this->relateduserid)) { - throw new coding_exception('relateduserid must be set.'); + throw new \coding_exception('relateduserid must be set.'); } } } diff --git a/mod/assign/classes/event/submission_graded.php b/mod/assign/classes/event/submission_graded.php index 0387dd43580..d6d968db77b 100644 --- a/mod/assign/classes/event/submission_graded.php +++ b/mod/assign/classes/event/submission_graded.php @@ -102,12 +102,12 @@ class submission_graded extends \core\event\base { /** * Custom validation. * - * @throws coding_exception + * @throws \coding_exception * @return void */ protected function validate_data() { if (!isset($this->relateduserid)) { - throw new coding_exception('relateduserid is a mandatory property.'); + throw new \coding_exception('relateduserid is a mandatory property.'); } } } diff --git a/mod/assign/classes/event/submission_locked.php b/mod/assign/classes/event/submission_locked.php index 9d3b376f1be..d1c07cfb598 100644 --- a/mod/assign/classes/event/submission_locked.php +++ b/mod/assign/classes/event/submission_locked.php @@ -102,12 +102,12 @@ class submission_locked extends \core\event\base { /** * Custom validation. * - * @throws coding_exception + * @throws \coding_exception * @return void */ protected function validate_data() { if (!isset($this->relateduserid)) { - throw new coding_exception('relateduserid is a mandatory property.'); + throw new \coding_exception('relateduserid is a mandatory property.'); } } } diff --git a/mod/assign/classes/event/submission_status_updated.php b/mod/assign/classes/event/submission_status_updated.php index 5d923931ebb..48fe0ce8bd3 100644 --- a/mod/assign/classes/event/submission_status_updated.php +++ b/mod/assign/classes/event/submission_status_updated.php @@ -102,12 +102,12 @@ class submission_status_updated extends \core\event\base { /** * Custom validation. * - * @throws coding_exception + * @throws \coding_exception * @return void */ protected function validate_data() { if (!isset($this->other['newstatus'])) { - throw new coding_exception('newstatus must be set in $other.'); + throw new \coding_exception('newstatus must be set in $other.'); } } } diff --git a/mod/assign/classes/event/submission_unlocked.php b/mod/assign/classes/event/submission_unlocked.php index 8c705f774f0..cc93f6fd833 100644 --- a/mod/assign/classes/event/submission_unlocked.php +++ b/mod/assign/classes/event/submission_unlocked.php @@ -102,12 +102,12 @@ class submission_unlocked extends \core\event\base { /** * Custom validation. * - * @throws coding_exception + * @throws \coding_exception * @return void */ protected function validate_data() { if (!isset($this->relateduserid)) { - throw new coding_exception('relateduserid is a mandatory property.'); + throw new \coding_exception('relateduserid is a mandatory property.'); } } } diff --git a/mod/assign/classes/event/workflow_state_updated.php b/mod/assign/classes/event/workflow_state_updated.php index 486b0f65ad6..3f885cb83d8 100644 --- a/mod/assign/classes/event/workflow_state_updated.php +++ b/mod/assign/classes/event/workflow_state_updated.php @@ -102,14 +102,14 @@ class workflow_state_updated extends \core\event\base { /** * Custom validation. * - * @throws coding_exception + * @throws \coding_exception * @return void */ protected function validate_data() { if (!isset($this->other['newstate'])) { - throw new coding_exception('newstate must be set in $other.'); + throw new \coding_exception('newstate must be set in $other.'); } else if (!isset($this->relateduserid)) { - throw new coding_exception('relateduserid must be set.'); + throw new \coding_exception('relateduserid must be set.'); } } }