mirror of
https://github.com/moodle/moodle.git
synced 2025-08-06 09:26:35 +02:00
MDL-64123 webservices: Add valueused to completion data
This commit is contained in:
parent
33a388eff7
commit
7672471236
6 changed files with 42 additions and 6 deletions
|
@ -277,7 +277,8 @@ class core_course_external extends external_api {
|
|||
$module['completiondata'] = array(
|
||||
'state' => $completiondata->completionstate,
|
||||
'timecompleted' => $completiondata->timemodified,
|
||||
'overrideby' => $completiondata->overrideby
|
||||
'overrideby' => $completiondata->overrideby,
|
||||
'valueused' => core_availability\info::completion_value_used($course, $cm->id)
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -440,6 +441,8 @@ class core_course_external extends external_api {
|
|||
'timecompleted' => new external_value(PARAM_INT, 'Timestamp for completion status.'),
|
||||
'overrideby' => new external_value(PARAM_INT, 'The user id who has overriden the
|
||||
status.'),
|
||||
'valueused' => new external_value(PARAM_BOOL, 'Whether the completion status affects
|
||||
the availability of another activity.', VALUE_OPTIONAL),
|
||||
), 'Module completion data.', VALUE_OPTIONAL
|
||||
),
|
||||
'contents' => new external_multiple_structure(
|
||||
|
|
|
@ -833,14 +833,16 @@ class core_course_externallib_testcase extends externallib_advanced_testcase {
|
|||
$labeldescription = 'This is a very long label to test if more than 50 characters are returned.
|
||||
So bla bla bla bla <b>bold bold bold</b> bla bla bla bla.';
|
||||
$label = $this->getDataGenerator()->create_module('label', array('course' => $course->id,
|
||||
'intro' => $labeldescription));
|
||||
'intro' => $labeldescription, 'completion' => COMPLETION_TRACKING_MANUAL));
|
||||
$labelcm = get_coursemodule_from_instance('label', $label->id);
|
||||
$tomorrow = time() + DAYSECS;
|
||||
// Module with availability restrictions not met.
|
||||
$availability = '{"op":"&","c":[{"type":"date","d":">=","t":' . $tomorrow . '},'
|
||||
.'{"type":"completion","cm":' . $label->cmid .',"e":1}],"showc":[true,true]}';
|
||||
$url = $this->getDataGenerator()->create_module('url',
|
||||
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]}'));
|
||||
array('availability' => $availability));
|
||||
$urlcm = get_coursemodule_from_instance('url', $url->id);
|
||||
// Module for the last section.
|
||||
$this->getDataGenerator()->create_module('url',
|
||||
|
@ -1152,6 +1154,7 @@ class core_course_externallib_testcase extends externallib_advanced_testcase {
|
|||
$this->resetAfterTest(true);
|
||||
|
||||
list($course, $forumcm, $datacm, $pagecm, $labelcm, $urlcm) = $this->prepare_get_course_contents_test();
|
||||
availability_completion\condition::wipe_static_cache();
|
||||
|
||||
// Test activity not completed yet.
|
||||
$result = core_course_external::get_course_contents($course->id, array(
|
||||
|
@ -1165,6 +1168,7 @@ class core_course_externallib_testcase extends externallib_advanced_testcase {
|
|||
$this->assertEquals(0, $result[0]['modules'][0]["completiondata"]['state']);
|
||||
$this->assertEquals(0, $result[0]['modules'][0]["completiondata"]['timecompleted']);
|
||||
$this->assertEmpty($result[0]['modules'][0]["completiondata"]['overrideby']);
|
||||
$this->assertFalse($result[0]['modules'][0]["completiondata"]['valueused']);
|
||||
|
||||
// Set activity completed.
|
||||
core_completion_external::update_activity_completion_status_manually($forumcm->id, true);
|
||||
|
@ -1178,6 +1182,20 @@ class core_course_externallib_testcase extends externallib_advanced_testcase {
|
|||
$this->assertNotEmpty($result[0]['modules'][0]["completiondata"]['timecompleted']);
|
||||
$this->assertEmpty($result[0]['modules'][0]["completiondata"]['overrideby']);
|
||||
|
||||
// Test activity with completion value that is used in an availability condition.
|
||||
$result = core_course_external::get_course_contents($course->id, array(
|
||||
array("name" => "modname", "value" => "label"), array("name" => "modid", "value" => $labelcm->instance)));
|
||||
// We need to execute the return values cleaning process to simulate the web service server.
|
||||
$result = external_api::clean_returnvalue(core_course_external::get_course_contents_returns(), $result);
|
||||
|
||||
$this->assertCount(1, $result[0]['modules']);
|
||||
$this->assertEquals("label", $result[0]['modules'][0]["modname"]);
|
||||
$this->assertEquals(COMPLETION_TRACKING_MANUAL, $result[0]['modules'][0]["completion"]);
|
||||
$this->assertEquals(0, $result[0]['modules'][0]["completiondata"]['state']);
|
||||
$this->assertEquals(0, $result[0]['modules'][0]["completiondata"]['timecompleted']);
|
||||
$this->assertEmpty($result[0]['modules'][0]["completiondata"]['overrideby']);
|
||||
$this->assertTrue($result[0]['modules'][0]["completiondata"]['valueused']);
|
||||
|
||||
// Disable completion.
|
||||
$CFG->enablecompletion = 0;
|
||||
$result = core_course_external::get_course_contents($course->id, array(
|
||||
|
@ -2826,4 +2844,4 @@ class core_course_externallib_testcase extends externallib_advanced_testcase {
|
|||
$this->assertCount(1, $result);
|
||||
$this->assertEquals($courses[0]->id, array_shift($result)->id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,10 @@
|
|||
This files describes API changes in /course/*,
|
||||
information provided here is intended especially for developers.
|
||||
|
||||
=== 3.7 ===
|
||||
* External function core_course_external::get_course_contents new returns the following additional completiondata field:
|
||||
- valueused (indicates whether the completion state affects the availability of other content)
|
||||
|
||||
=== 3.6 ===
|
||||
|
||||
* External function core_course_external::get_course_public_information now returns the roles and the primary role of course
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue