/** * Test the tag updated event. */ public function test_tag_updated() { $this->setAdminUser(); // Save the system context. $systemcontext = context_system::instance(); // Create a tag we are going to update. $tag = $this->getDataGenerator()->create_tag(); // Store the name before we change it. $oldname = $tag->name; // Trigger and capture the event when renaming a tag. $sink = $this->redirectEvents(); tag_rename($tag->id, 'newname'); $this->assertDebuggingCalled(); // Update the tag's name since we have renamed it. $tag->name = 'newname'; $events = $sink->get_events(); $event = reset($events); // Check that the event data is valid. $this->assertInstanceOf('\\core\\event\\tag_updated', $event); $this->assertEquals($systemcontext, $event->get_context()); $expected = array(SITEID, 'tag', 'update', 'index.php?id=' . $tag->id, $oldname . '->' . $tag->name); $this->assertEventLegacyLogData($expected, $event); // Trigger and capture the event when setting the type of a tag. $sink = $this->redirectEvents(); tag_type_set($tag->id, 'official'); $this->assertDebuggingCalled(); $events = $sink->get_events(); $event = reset($events); // Check that the event data is valid. $this->assertInstanceOf('\\core\\event\\tag_updated', $event); $this->assertEquals($systemcontext, $event->get_context()); $expected = array(0, 'tag', 'update', 'index.php?id=' . $tag->id, $tag->name); $this->assertEventLegacyLogData($expected, $event); // Trigger and capture the event for setting the description of a tag. $sink = $this->redirectEvents(); tag_description_set($tag->id, 'description', FORMAT_MOODLE); $this->assertDebuggingCalled(); $events = $sink->get_events(); $event = reset($events); // Check that the event data is valid. $this->assertInstanceOf('\\core\\event\\tag_updated', $event); $this->assertEquals($systemcontext, $event->get_context()); $expected = array(0, 'tag', 'update', 'index.php?id=' . $tag->id, $tag->name); $this->assertEventLegacyLogData($expected, $event); }
} else { // They might be trying to change the rawname, make sure it's a change that doesn't affect name $norm = tag_normalize($tagnew->rawname, TAG_CASE_LOWER); $tagnew->name = array_shift($norm); if ($tag->name != $tagnew->name) { // The name has changed, let's make sure it's not another existing tag if (tag_get_id($tagnew->name)) { // Something exists already, so flag an error $errorstring = s($tagnew->rawname) . ': ' . get_string('namesalreadybeeingused', 'tag'); } } } if (empty($errorstring)) { // All is OK, let's save it $tagnew = file_postupdate_standard_editor($tagnew, 'description', $editoroptions, $systemcontext, 'tag', 'description', $tag->id); tag_description_set($tag_id, $tagnew->description, $tagnew->descriptionformat); $tagnew->timemodified = time(); if (has_capability('moodle/tag:manage', $systemcontext)) { // rename tag if (!tag_rename($tag->id, $tagnew->rawname)) { print_error('errorupdatingrecord', 'tag'); } } //log tag changes activity //if tag name exist from form, renaming is allow. record log action as rename //otherwise, record log action as update if (isset($tagnew->name) && $tag->name != $tagnew->name) { add_to_log($COURSE->id, 'tag', 'update', 'index.php?id=' . $tag->id, $tag->name . '->' . $tagnew->name); } elseif ($tag->description != $tagnew->description) { add_to_log($COURSE->id, 'tag', 'update', 'index.php?id=' . $tag->id, $tag->name); }
$options->filter = false; // convert and remove any XSS $tag->description = format_text($tag->description, $tag->descriptionformat, $options); $tag->descriptionformat = FORMAT_HTML; } $errorstring = ''; $tagform = new tag_edit_form(); if ($tag->tagtype == 'official') { $tag->tagtype = '1'; } else { $tag->tagtype = '0'; } $tagform->set_data($tag); // If new data has been sent, update the tag record if ($tagnew = $tagform->get_data()) { tag_description_set($tag_id, stripslashes($tagnew->description), $tagnew->descriptionformat); if (has_capability('moodle/tag:manage', $systemcontext)) { if ($tag->tagtype != 'default' && (!isset($tagnew->tagtype) || $tagnew->tagtype != '1')) { tag_type_set($tag->id, 'default'); } elseif ($tag->tagtype != 'official' && $tagnew->tagtype == '1') { tag_type_set($tag->id, 'official'); } } if (!has_capability('moodle/tag:manage', $systemcontext) && !has_capability('moodle/tag:edit', $systemcontext)) { unset($tagnew->name); unset($tagnew->rawname); } else { // They might be trying to change the rawname, make sure it's a change that doesn't affect name $tagnew->name = array_shift(tag_normalize($tagnew->rawname, TAG_CASE_LOWER)); if ($tag->name != $tagnew->name) { // The name has changed, let's make sure it's not another existing tag