diff --git a/mod/assign/externallib.php b/mod/assign/externallib.php index d9777d4a560..36048007e3b 100644 --- a/mod/assign/externallib.php +++ b/mod/assign/externallib.php @@ -432,7 +432,7 @@ class mod_assign_external extends external_api { 'id' => $module->assignmentid, 'cmid' => $module->id, 'course' => $module->course, - 'name' => $module->name, + 'name' => external_format_string($module->name, $context), 'nosubmissions' => $module->nosubmissions, 'submissiondrafts' => $module->submissiondrafts, 'sendnotifications' => $module->sendnotifications, @@ -528,7 +528,7 @@ class mod_assign_external extends external_api { 'id' => new external_value(PARAM_INT, 'assignment id'), 'cmid' => new external_value(PARAM_INT, 'course module id'), 'course' => new external_value(PARAM_INT, 'course id'), - 'name' => new external_value(PARAM_TEXT, 'assignment name'), + 'name' => new external_value(PARAM_RAW, 'assignment name'), 'nosubmissions' => new external_value(PARAM_INT, 'no submissions'), 'submissiondrafts' => new external_value(PARAM_INT, 'submissions drafts'), 'sendnotifications' => new external_value(PARAM_INT, 'send notifications'), diff --git a/mod/assign/tests/externallib_test.php b/mod/assign/tests/externallib_test.php index b5a2ea552bf..2f3bcec710a 100644 --- a/mod/assign/tests/externallib_test.php +++ b/mod/assign/tests/externallib_test.php @@ -140,6 +140,13 @@ class mod_assign_external_testcase extends externallib_advanced_testcase { $this->resetAfterTest(true); + // Enable multilang filter to on content and heading. + filter_set_global_state('multilang', TEXTFILTER_ON); + filter_set_applies_to_strings('multilang', 1); + // Set WS filtering. + $wssettings = external_settings::get_instance(); + $wssettings->set_filter(true); + $category = self::getDataGenerator()->create_category(array( 'name' => 'Test category' )); @@ -166,7 +173,7 @@ class mod_assign_external_testcase extends externallib_advanced_testcase { // Create the assignment module with links to a filerecord. $assign1 = self::getDataGenerator()->create_module('assign', array( 'course' => $course1->id, - 'name' => 'lightwork assignment', + 'name' => 'EnglishEspañol', 'intro' => 'the assignment intro text here link', 'introformat' => FORMAT_HTML, 'markingworkflow' => 1, @@ -221,7 +228,7 @@ class mod_assign_external_testcase extends externallib_advanced_testcase { $assignment = $course['assignments'][0]; $this->assertEquals($assign1->id, $assignment['id']); $this->assertEquals($course1->id, $assignment['course']); - $this->assertEquals('lightwork assignment', $assignment['name']); + $this->assertEquals('English', $assignment['name']); $this->assertContains('the assignment intro text here', $assignment['intro']); $this->assertNotEmpty($assignment['configs']); // Check the url of the file attatched. @@ -249,7 +256,7 @@ class mod_assign_external_testcase extends externallib_advanced_testcase { $assignment = $course['assignments'][0]; $this->assertEquals($assign1->id, $assignment['id']); $this->assertEquals($course1->id, $assignment['course']); - $this->assertEquals('lightwork assignment', $assignment['name']); + $this->assertEquals('English', $assignment['name']); $this->assertArrayNotHasKey('intro', $assignment); $this->assertArrayNotHasKey('introattachments', $assignment); $this->assertEquals(1, $assignment['markingworkflow']); @@ -287,7 +294,7 @@ class mod_assign_external_testcase extends externallib_advanced_testcase { $assignment = $course['assignments'][0]; $this->assertEquals($assign1->id, $assignment['id']); $this->assertEquals($course1->id, $assignment['course']); - $this->assertEquals('lightwork assignment', $assignment['name']); + $this->assertEquals('English', $assignment['name']); $this->assertArrayNotHasKey('intro', $assignment); $this->assertArrayNotHasKey('introattachments', $assignment); $this->assertEquals(1, $assignment['markingworkflow']); diff --git a/mod/data/classes/external.php b/mod/data/classes/external.php index 649a6336a49..4811a6c5445 100644 --- a/mod/data/classes/external.php +++ b/mod/data/classes/external.php @@ -125,7 +125,9 @@ class mod_data_external extends external_api { } } $exporter = new database_summary_exporter($database, array('context' => $context)); - $arrdatabases[] = $exporter->export($PAGE->get_renderer('core')); + $data = $exporter->export($PAGE->get_renderer('core')); + $data->name = external_format_string($data->name, $context); + $arrdatabases[] = $data; } } diff --git a/mod/data/tests/externallib_test.php b/mod/data/tests/externallib_test.php index d2314aae9b6..c49c9be96fb 100644 --- a/mod/data/tests/externallib_test.php +++ b/mod/data/tests/externallib_test.php @@ -122,7 +122,8 @@ class mod_data_external_testcase extends externallib_advanced_testcase { * Test get databases by courses */ public function test_mod_data_get_databases_by_courses() { - global $DB; + global $DB, $CFG; + require_once($CFG->libdir . '/externallib.php'); $this->resetAfterTest(true); @@ -141,6 +142,8 @@ class mod_data_external_testcase extends externallib_advanced_testcase { $record = new stdClass(); $record->introformat = FORMAT_HTML; $record->course = $course1->id; + // Set multilang text to check that is properly filtered to "en" only. + $record->name = 'EnglishEspañol'; $record->intro = ''; $database1 = self::getDataGenerator()->create_module('data', $record); @@ -168,6 +171,14 @@ class mod_data_external_testcase extends externallib_advanced_testcase { } $enrol->enrol_user($instance2, $student->id, $studentrole->id); + // Enable multilang filter to on content and heading. + filter_manager::reset_caches(); + filter_set_global_state('multilang', TEXTFILTER_ON); + filter_set_applies_to_strings('multilang', true); + // Set WS filtering. + $wssettings = external_settings::get_instance(); + $wssettings->set_filter(true); + // Create what we expect to be returned when querying the two courses. // First for the student user. $expectedfields = array('id', 'coursemodule', 'course', 'name', 'comments', 'timeavailablefrom', @@ -192,6 +203,7 @@ class mod_data_external_testcase extends externallib_advanced_testcase { $expected1[$field] = $database1->{$field}; $expected2[$field] = $database2->{$field}; } + $expected1['name'] = 'English'; // Lang filtered expected. $expected1['comments'] = (bool) $expected1['comments']; $expected2['comments'] = (bool) $expected2['comments']; diff --git a/mod/lesson/classes/external.php b/mod/lesson/classes/external.php index d3ff0190b56..fc99b71d0f0 100644 --- a/mod/lesson/classes/external.php +++ b/mod/lesson/classes/external.php @@ -143,7 +143,9 @@ class mod_lesson_external extends external_api { $lessonrecord = self::get_lesson_summary_for_exporter($lessonrecord); $exporter = new lesson_summary_exporter($lessonrecord, array('context' => $context)); - $returnedlessons[] = $exporter->export($PAGE->get_renderer('core')); + $lesson = $exporter->export($PAGE->get_renderer('core')); + $lesson->name = external_format_string($lesson->name, $context); + $returnedlessons[] = $lesson; } } $result = array(); diff --git a/mod/lesson/tests/external_test.php b/mod/lesson/tests/external_test.php index 27ae4ae8ea6..95246491516 100644 --- a/mod/lesson/tests/external_test.php +++ b/mod/lesson/tests/external_test.php @@ -99,7 +99,8 @@ class mod_lesson_external_testcase extends externallib_advanced_testcase { * Test test_mod_lesson_get_lessons_by_courses */ public function test_mod_lesson_get_lessons_by_courses() { - global $DB; + global $DB, $CFG; + require_once($CFG->libdir . '/externallib.php'); // Create additional course. $course2 = self::getDataGenerator()->create_course(); @@ -107,6 +108,7 @@ class mod_lesson_external_testcase extends externallib_advanced_testcase { // Second lesson. $record = new stdClass(); $record->course = $course2->id; + $record->name = 'EnglishEspañol'; $lesson2 = self::getDataGenerator()->create_module('lesson', $record); // Execute real Moodle enrolment as we'll call unenrol() method on the instance later. @@ -122,6 +124,14 @@ class mod_lesson_external_testcase extends externallib_advanced_testcase { self::setUser($this->student); + // Enable multilang filter to on content and heading. + filter_manager::reset_caches(); + filter_set_global_state('multilang', TEXTFILTER_ON); + filter_set_applies_to_strings('multilang', true); + // Set WS filtering. + $wssettings = external_settings::get_instance(); + $wssettings->set_filter(true); + $returndescription = mod_lesson_external::get_lessons_by_courses_returns(); // Create what we expect to be returned when querying the two courses. @@ -157,6 +167,7 @@ class mod_lesson_external_testcase extends externallib_advanced_testcase { $expected2[$field] = $lesson2->{$field}; } + $expected2['name'] = 'English'; // Lang filtered expected. $expectedlessons = array($expected2, $expected1); // Call the external function passing course ids.