MDL-63522 course: Return more fields in get_course_content WS

We need those fields on the mobile app to be able to render the course view properly.
This commit is contained in:
Juan Leyva 2018-10-10 12:53:33 +02:00
parent 448bd578d8
commit 1206a4878c
3 changed files with 41 additions and 9 deletions

View File

@ -261,6 +261,9 @@ class core_course_external extends external_api {
$module['modplural'] = $cm->modplural;
$module['modicon'] = $cm->get_icon_url()->out(false);
$module['indent'] = $cm->indent;
$module['onclick'] = $cm->onclick;
$module['afterlink'] = $cm->afterlink;
$module['customdata'] = json_encode($cm->customdata);
if (!empty($cm->showdescription) or $cm->modname == 'label') {
// We want to use the external format. However from reading get_formatted_content(), $cm->content format is always FORMAT_HTML.
@ -408,6 +411,10 @@ class core_course_external extends external_api {
'modplural' => new external_value(PARAM_TEXT, 'activity module plural name'),
'availability' => new external_value(PARAM_RAW, 'module availability settings', VALUE_OPTIONAL),
'indent' => new external_value(PARAM_INT, 'number of identation in the site'),
'onclick' => new external_value(PARAM_RAW, 'Onclick action.', VALUE_OPTIONAL),
'afterlink' => new external_value(PARAM_RAW, 'After link info to be displayed.',
VALUE_OPTIONAL),
'customdata' => new external_value(PARAM_RAW, 'Custom data (JSON encoded).', VALUE_OPTIONAL),
'contents' => new external_multiple_structure(
new external_single_structure(
array(

View File

@ -809,15 +809,24 @@ class core_course_externallib_testcase extends externallib_advanced_testcase {
global $DB, $CFG;
$CFG->allowstealth = 1; // Allow stealth activities.
$CFG->enablecompletion = true;
$CFG->forum_allowforcedreadtracking = 1;
$course = self::getDataGenerator()->create_course(['numsections' => 4, 'enablecompletion' => 1]);
$course = self::getDataGenerator()->create_course(['numsections' => 4]);
$forumdescription = 'This is the forum description';
$forum = $this->getDataGenerator()->create_module('forum',
array('course' => $course->id, 'intro' => $forumdescription),
array('showdescription' => true));
array('course' => $course->id, 'intro' => $forumdescription, 'trackingtype' => 2),
array('showdescription' => true, 'completion' => COMPLETION_TRACKING_MANUAL));
$forumcm = get_coursemodule_from_id('forum', $forum->cmid);
$data = $this->getDataGenerator()->create_module('data', array('assessed' => 1, 'scale' => 100, 'course' => $course->id));
$datacm = get_coursemodule_from_instance('page', $data->id);
// Add discussions to the tracking forced forum.
$record = new stdClass();
$record->course = $course->id;
$record->userid = 0;
$record->forum = $forum->id;
$discussionforce = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record);
$data = $this->getDataGenerator()->create_module('data',
array('assessed' => 1, 'scale' => 100, 'course' => $course->id, 'completion' => 2, 'completionentries' => 3));
$datacm = get_coursemodule_from_instance('data', $data->id);
$page = $this->getDataGenerator()->create_module('page', array('course' => $course->id));
$pagecm = get_coursemodule_from_instance('page', $page->id);
// This is an stealth page (set by visibleoncoursepage).
@ -830,7 +839,8 @@ class core_course_externallib_testcase extends externallib_advanced_testcase {
$tomorrow = time() + DAYSECS;
// Module with availability restrictions not met.
$url = $this->getDataGenerator()->create_module('url',
array('course' => $course->id, 'name' => 'URL: % & $ ../', 'section' => 2),
array('course' => $course->id, 'name' => 'URL: % & $ ../', 'section' => 2, 'display' => RESOURCELIB_DISPLAY_POPUP,
'popupwidth' => 100, 'popupheight' => 100),
array('availability' => '{"op":"&","c":[{"type":"date","d":">=","t":' . $tomorrow . '}],"showc":[true]}'));
$urlcm = get_coursemodule_from_instance('url', $url->id);
// Module for the last section.
@ -891,7 +901,8 @@ class core_course_externallib_testcase extends externallib_advanced_testcase {
array('noclean' => true, 'para' => false, 'filter' => false));
$this->assertEquals($formattedtext, $module['description']);
$this->assertEquals($forumcm->instance, $module['instance']);
$testexecuted = $testexecuted + 1;
$this->assertContains('1 unread post', $module['afterlink']);
$testexecuted = $testexecuted + 2;
} else if ($module['id'] == $labelcm->id and $module['modname'] == 'label') {
$cm = $modinfo->cms[$labelcm->id];
$formattedtext = format_text($cm->content, FORMAT_HTML,
@ -899,9 +910,19 @@ class core_course_externallib_testcase extends externallib_advanced_testcase {
$this->assertEquals($formattedtext, $module['description']);
$this->assertEquals($labelcm->instance, $module['instance']);
$testexecuted = $testexecuted + 1;
} else if ($module['id'] == $datacm->id and $module['modname'] == 'data') {
$this->assertContains('customcompletionrules', $module['customdata']);
$testexecuted = $testexecuted + 1;
}
}
$this->assertEquals(2, $testexecuted);
foreach ($sections[2]['modules'] as $module) {
if ($module['id'] == $urlcm->id and $module['modname'] == 'url') {
$this->assertContains('width=100,height=100', $module['onclick']);
$testexecuted = $testexecuted + 1;
}
}
$this->assertEquals(5, $testexecuted);
$this->assertEquals(0, $sections[0]['section']);
$this->assertCount(5, $sections[0]['modules']);

View File

@ -3,8 +3,12 @@ information provided here is intended especially for developers.
=== 3.6 ===
* External function core_course_external::get_course_public_information now returns the roles and the primary role of course
* External function core_course_external::get_course_public_information now returns the roles and the primary role of course
contacts.
* External function core_course_external::get_course_contents now return the following additional file fields:
- onclick (onclick javascript action code)
- afterlink (after link info to be displayed)
- customdata (module custom data (JSON encoded))
=== 3.5 ===