MDL-66877 mod: Fix WebServices returning unfiltered activity names

This commit is contained in:
Juan Leyva 2019-10-30 13:42:34 +01:00
parent a5f618d6a9
commit 62ff1b954f
6 changed files with 44 additions and 10 deletions

View File

@ -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'),

View File

@ -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' => '<span lang="en" class="multilang">English</span><span lang="es" class="multilang">Español</span>',
'intro' => 'the assignment intro text here <a href="@@PLUGINFILE@@/intro.txt">link</a>',
'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']);

View File

@ -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;
}
}

View File

@ -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 = '<span lang="en" class="multilang">English</span><span lang="es" class="multilang">Español</span>';
$record->intro = '<button>Test with HTML allowed.</button>';
$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'];

View File

@ -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();

View File

@ -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 = '<span lang="en" class="multilang">English</span><span lang="es" class="multilang">Español</span>';
$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.