diff --git a/mod/assign/classes/event/batch_set_workflow_state_viewed.php b/mod/assign/classes/event/batch_set_workflow_state_viewed.php new file mode 100644 index 00000000000..f4a6fb7f239 --- /dev/null +++ b/mod/assign/classes/event/batch_set_workflow_state_viewed.php @@ -0,0 +1,76 @@ +. + +/** + * The mod_assign assignment batch set workflow stated viewed event. + * + * @property-read array $other { + * Extra information about event. + * + * - int assignid: the id of the assignment. + * } + * + * @package mod_assign + * @since Moodle 2.7 + * @copyright 2014 Mark Nelson + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace mod_assign\event; + +defined('MOODLE_INTERNAL') || die(); + +class batch_set_workflow_state_viewed extends base { + + /** + * Init method. + */ + protected function init() { + $this->data['crud'] = 'r'; + $this->data['edulevel'] = self::LEVEL_TEACHING; + } + + /** + * Returns localised general event name. + * + * @return string + */ + public static function get_name() { + return get_string('eventbatchsetworkflowstateviewed', 'mod_assign'); + } + + /** + * Returns description of what happened. + * + * @return string + */ + public function get_description() { + return "The user with the id {$this->userid} viewed the batch set workflow for the assignment with the id {$this->other['assignid']}."; + } + + /** + * Custom validation. + * + * @throws \coding_exception + */ + protected function validate_data() { + parent::validate_data(); + + if (!isset($this->other['assignid'])) { + throw new \coding_exception('The \'assignid\' must be set in other.'); + } + } +} diff --git a/mod/assign/lang/en/assign.php b/mod/assign/lang/en/assign.php index 09b17dd091b..d084a89da7d 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['eventallsubmissionsdownloaded'] = 'All the submissions are being downloaded.'; $string['eventassessablesubmitted'] = 'A submission has been submitted.'; +$string['eventbatchsetworkflowstateviewed'] = 'Batch set workflow state viewed.'; $string['eventextensiongranted'] = 'An extension has been granted.'; $string['eventfeedbackviewed'] = 'Feedback viewed'; $string['eventgradingformviewed'] = 'Grading form viewed'; diff --git a/mod/assign/locallib.php b/mod/assign/locallib.php index d44bdb8ae57..92d6ca2663c 100644 --- a/mod/assign/locallib.php +++ b/mod/assign/locallib.php @@ -3539,7 +3539,7 @@ class assign { * @param moodleform $mform Set to a grading batch operations form * @return string - the page to view after processing these actions */ - private function view_batch_set_workflow_state($mform) { + protected function view_batch_set_workflow_state($mform) { global $CFG, $DB; require_once($CFG->dirroot . '/mod/assign/batchsetmarkingworkflowstateform.php'); @@ -3584,7 +3584,16 @@ class assign { $o .= $this->get_renderer()->render(new assign_form('setworkflowstate', $mform)); $o .= $this->view_footer(); - $this->add_to_log('view batch set marking workflow state', get_string('viewbatchsetmarkingworkflowstate', 'assign')); + $logmessage = new lang_string('viewbatchsetmarkingworkflowstate', 'assign'); + $event = \mod_assign\event\batch_set_workflow_state_viewed::create(array( + 'context' => $this->get_context(), + 'other' => array( + 'assignid' => $this->get_instance()->id + ) + )); + $event->set_legacy_logdata('view batch set marking workflow state', $logmessage); + $event->trigger(); + return $o; } diff --git a/mod/assign/tests/base_test.php b/mod/assign/tests/base_test.php index 91555408419..76b557961e2 100644 --- a/mod/assign/tests/base_test.php +++ b/mod/assign/tests/base_test.php @@ -290,4 +290,26 @@ class testable_assign extends assign { // Changed method from protected to public. return parent::get_graders($userid); } + + public function testable_view_batch_set_workflow_state() { + global $CFG; + + require_once($CFG->dirroot . '/mod/assign/batchsetmarkingworkflowstateform.php'); + + // Mock submit data. + $data = array(); + $data['selectedusers'] = '1'; + mod_assign_batch_set_marking_workflow_state_form::mock_submit($data); + + // Set required variables in the form - not valid just allows us to continue. + $formparams = array(); + $formparams['users'] = array(1); + $formparams['usershtml'] = 1; + $formparams['cm'] = $this->get_course_module()->id; + $formparams['context'] = $this->get_context(); + $formparams['markingworkflowstates'] = 1; + $mform = new mod_assign_batch_set_marking_workflow_state_form('', $formparams); + + return parent::view_batch_set_workflow_state($mform); + } } diff --git a/mod/assign/tests/events_test.php b/mod/assign/tests/events_test.php index 764d9991d54..980615bb11f 100644 --- a/mod/assign/tests/events_test.php +++ b/mod/assign/tests/events_test.php @@ -853,4 +853,31 @@ class assign_events_testcase extends mod_assign_base_testcase { $this->assertEventLegacyLogData($expected, $event); $this->assertEventContextNotUsed($event); } + + /** + * Test the batch_set_workflow_state_viewed event. + */ + public function test_batch_set_workflow_state_viewed() { + $assign = $this->create_instance(); + + // Trigger and capture the event. + $sink = $this->redirectEvents(); + $assign->testable_view_batch_set_workflow_state(); + $events = $sink->get_events(); + $event = reset($events); + + // Check that the event contains the expected values. + $this->assertInstanceOf('\mod_assign\event\batch_set_workflow_state_viewed', $event); + $this->assertEquals($assign->get_context(), $event->get_context()); + $expected = array( + $assign->get_course()->id, + 'assign', + 'view batch set marking workflow state', + 'view.php?id=' . $assign->get_course_module()->id, + get_string('viewbatchsetmarkingworkflowstate', 'assign'), + $assign->get_course_module()->id + ); + $this->assertEventLegacyLogData($expected, $event); + $this->assertEventContextNotUsed($event); + } }