diff --git a/mod/data/classes/event/field_updated.php b/mod/data/classes/event/field_updated.php new file mode 100644 index 00000000000..eb808907e54 --- /dev/null +++ b/mod/data/classes/event/field_updated.php @@ -0,0 +1,94 @@ +. + +/** + * The mod_data field updated event. + * + * @property-read array $other { + * Extra information about event. + * + * @type string fieldname the name of the field. + * @type int dataid the id of the data activity. + * } + * + * @package mod_data + * @copyright 2014 Mark Nelson + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace mod_data\event; + +defined('MOODLE_INTERNAL') || die(); + +class field_updated extends \core\event\base { + + /** + * Init method. + * + * @return void + */ + protected function init() { + $this->data['objecttable'] = 'data_fields'; + $this->data['crud'] = 'u'; + $this->data['edulevel'] = self::LEVEL_TEACHING; + } + + /** + * Return localised event name. + * + * @return string + */ + public static function get_name() { + return get_string('eventfieldupdated', 'mod_data'); + } + + /** + * Returns description of what happened. + * + * @return string + */ + public function get_description() { + return 'The field ' . $this->objectid . ' belonging to the data activity ' . $this->other['dataid'] . ' has been updated.'; + } + + /** + * Get the legacy event log data. + * + * @return array + */ + public function get_legacy_logdata() { + return array($this->courseid, 'data', 'fields update', 'field.php?d=' . $this->other['dataid'] . + '&mode=display&fid=' . $this->objectid, $this->objectid, $this->contextinstanceid); + } + + /** + * Custom validation. + * + * @throws \coding_exception when validation does not pass. + * @return void + */ + protected function validate_data() { + parent::validate_data(); + + if (!isset($this->other['fieldname'])) { + throw new \coding_exception('The fieldname must be set in $other.'); + } + + if (!isset($this->other['dataid'])) { + throw new \coding_exception('The dataid must be set in $other.'); + } + } +} diff --git a/mod/data/field.php b/mod/data/field.php index ac121989eec..210311a88c3 100644 --- a/mod/data/field.php +++ b/mod/data/field.php @@ -160,9 +160,6 @@ switch ($mode) { /// Update the templates. data_replace_field_in_templates($data, $oldfieldname, $field->field->name); - add_to_log($course->id, 'data', 'fields update', - "field.php?d=$data->id&mode=display&fid=$fid", $fid, $cm->id); - $displaynoticegood = get_string('fieldupdated','data'); } } diff --git a/mod/data/lang/en/data.php b/mod/data/lang/en/data.php index 82902bf7397..bb6d03e850b 100644 --- a/mod/data/lang/en/data.php +++ b/mod/data/lang/en/data.php @@ -121,6 +121,7 @@ $string['emptyadd'] = 'The Add template is empty, generating a default form...'; $string['emptyaddform'] = 'You did not fill out any fields!'; $string['eventfieldcreated'] = 'Field created'; $string['eventfielddeleted'] = 'Field deleted'; +$string['eventfieldupdated'] = 'Field updated'; $string['fileencoding'] = 'Encoding'; $string['entries'] = 'Entries'; $string['entrieslefttoadd'] = 'You must add {$a->entriesleft} more entry/entries in order to complete this activity'; diff --git a/mod/data/lib.php b/mod/data/lib.php index 1b31770ed7a..56cedc9463c 100644 --- a/mod/data/lib.php +++ b/mod/data/lib.php @@ -214,6 +214,18 @@ class data_field_base { // Base class for Database Field Types (see field/*/ global $DB; $DB->update_record('data_fields', $this->field); + + // Trigger an event for updating this field. + $event = \mod_data\event\field_updated::create(array( + 'objectid' => $this->field->id, + 'context' => $this->context, + 'other' => array( + 'fieldname' => $this->field->name, + 'dataid' => $this->data->id + ) + )); + $event->trigger(); + return true; } diff --git a/mod/data/tests/events_test.php b/mod/data/tests/events_test.php index e5892e68674..74d8bbb03be 100644 --- a/mod/data/tests/events_test.php +++ b/mod/data/tests/events_test.php @@ -74,6 +74,43 @@ class mod_data_events_testcase extends advanced_testcase { $this->assertEventLegacyLogData($expected, $event); } + /** + * Test the field updated event. + */ + public function test_field_updated() { + $this->setAdminUser(); + + // Create a course we are going to add a data module to. + $course = $this->getDataGenerator()->create_course(); + + // The generator used to create a data module. + $generator = $this->getDataGenerator()->get_plugin_generator('mod_data'); + + // Create a data module. + $data = $generator->create_instance(array('course' => $course->id)); + + // Now we want to create a field. + $field = data_get_field_new('text', $data); + $fielddata = new stdClass(); + $fielddata->name = 'Test'; + $fielddata->description = 'Test description'; + $field->define_field($fielddata); + $field->insert_field(); + + // Trigger and capture the event for updating the field. + $sink = $this->redirectEvents(); + $field->update_field(); + $events = $sink->get_events(); + $event = reset($events); + + // Check that the event data is valid. + $this->assertInstanceOf('\mod_data\event\field_updated', $event); + $this->assertEquals(context_module::instance($data->cmid), $event->get_context()); + $expected = array($course->id, 'data', 'fields update', 'field.php?d=' . $data->id . '&mode=display&fid=' . + $field->field->id, $field->field->id, $data->cmid); + $this->assertEventLegacyLogData($expected, $event); + } + /** * Test the field deleted event. */