From a7b940ba7d7af34c988f78b9dc094909c71426ab Mon Sep 17 00:00:00 2001 From: Paul Holden Date: Wed, 10 Nov 2021 11:53:51 +0000 Subject: [PATCH] MDL-72880 badges: change badge exporter issuername field to text. This matches it's type in the settings pages, and also the type of the site name used as the default for the setting. It's content will now be automatically filtered by the external exporter class. --- .../classes/external/user_badge_exporter.php | 2 +- badges/tests/external_test.php | 47 +++++++++++++++---- 2 files changed, 38 insertions(+), 11 deletions(-) diff --git a/badges/classes/external/user_badge_exporter.php b/badges/classes/external/user_badge_exporter.php index 58c44613d85..4d8b44241e6 100644 --- a/badges/classes/external/user_badge_exporter.php +++ b/badges/classes/external/user_badge_exporter.php @@ -86,7 +86,7 @@ class user_badge_exporter extends exporter { 'optional' => true, ], 'issuername' => [ - 'type' => PARAM_NOTAGS, + 'type' => PARAM_TEXT, 'description' => 'Issuer name', ], 'issuerurl' => [ diff --git a/badges/tests/external_test.php b/badges/tests/external_test.php index 0c65fb9e92e..4f4cff097ac 100644 --- a/badges/tests/external_test.php +++ b/badges/tests/external_test.php @@ -42,6 +42,15 @@ require_once($CFG->libdir . '/badgeslib.php'); */ class core_badges_external_testcase extends externallib_advanced_testcase { + /** @var stdClass $course */ + private $course; + + /** @var stdClass $student */ + private $student; + + /** @var stdClass $teacher */ + private $teacher; + /** * Set up for every test */ @@ -53,15 +62,9 @@ class core_badges_external_testcase extends externallib_advanced_testcase { // Setup test data. $this->course = $this->getDataGenerator()->create_course(); - // Create users. - $this->student = self::getDataGenerator()->create_user(); - $this->teacher = self::getDataGenerator()->create_user(); - - // Users enrolments. - $this->studentrole = $DB->get_record('role', array('shortname' => 'student')); - $this->teacherrole = $DB->get_record('role', array('shortname' => 'editingteacher')); - $this->getDataGenerator()->enrol_user($this->student->id, $this->course->id, $this->studentrole->id, 'manual'); - $this->getDataGenerator()->enrol_user($this->teacher->id, $this->course->id, $this->teacherrole->id, 'manual'); + // Create users and enrolments. + $this->student = $this->getDataGenerator()->create_and_enrol($this->course, 'student'); + $this->teacher = $this->getDataGenerator()->create_and_enrol($this->course, 'editingteacher'); // Mock up a site badge. $now = time(); @@ -139,7 +142,7 @@ class core_badges_external_testcase extends externallib_advanced_testcase { $badge->issue($this->student->id, true); // Hack the database to adjust the time each badge was issued. - $DB->set_field('badge_issued', 'dateissued', $now - 11, array('userid' => $this->student->id, 'badgeid' => $coursebadgeid)); + $DB->set_field('badge_issued', 'dateissued', $now - 10, array('userid' => $this->student->id, 'badgeid' => $coursebadgeid)); // Make the site badge a related badge. $badge->add_related_badges(array($badgeid)); @@ -246,4 +249,28 @@ class core_badges_external_testcase extends externallib_advanced_testcase { } } } + + /** + * Test get_user_badges where issuername contains text to be filtered + */ + public function test_get_user_badges_filter_issuername(): void { + global $DB; + + filter_set_global_state('multilang', TEXTFILTER_ON); + filter_set_applies_to_strings('multilang', true); + + external_settings::get_instance()->set_filter(true); + + // Update issuer name of test badge. + $issuername = 'Issuer (en)Issuer (es)'; + $DB->set_field('badge', 'issuername', $issuername, ['name' => 'Test badge site']); + + // Retrieve student badges. + $result = core_badges_external::get_user_badges($this->student->id); + $result = external_api::clean_returnvalue(core_badges_external::get_user_badges_returns(), $result); + + // Site badge will be last, because it has the earlier issued date. + $badge = end($result['badges']); + $this->assertEquals('Issuer (en)', $badge['issuername']); + } }