diff --git a/course/externallib.php b/course/externallib.php index 7d3a96fd635..57bd05f11e6 100644 --- a/course/externallib.php +++ b/course/externallib.php @@ -2492,10 +2492,12 @@ class core_course_external extends external_api { $info->outcomes = array(); } $id = str_replace('outcome_', '', $key); - $outcome = $outcome = grade_outcome::fetch(array('id' => $id)); + $outcome = grade_outcome::fetch(array('id' => $id)); + $scaleitems = $outcome->load_scale(); $info->outcomes[] = array( 'id' => $id, - 'name' => external_format_string($outcome->get_name(), $context->id) + 'name' => external_format_string($outcome->get_name(), $context->id), + 'scale' => $scaleitems->scale ); } } @@ -2572,6 +2574,7 @@ class core_course_external extends external_api { array( 'id' => new external_value(PARAM_ALPHANUMEXT, 'Outcome id'), 'name' => new external_value(PARAM_TEXT, 'Outcome full name'), + 'scale' => new external_value(PARAM_TEXT, 'Scale items') ) ), 'Outcomes information', VALUE_OPTIONAL diff --git a/course/tests/externallib_test.php b/course/tests/externallib_test.php index 9015dbe654a..d6a9183e00e 100644 --- a/course/tests/externallib_test.php +++ b/course/tests/externallib_test.php @@ -1607,20 +1607,66 @@ class core_course_externallib_testcase extends externallib_advanced_testcase { // Hidden activity. $assign = self::getDataGenerator()->create_module('assign', $record, $options); + $outcomescale = 'Distinction, Very Good, Good, Pass, Fail'; + + // Insert a custom grade scale to be used by an outcome. + $gradescale = new grade_scale(); + $gradescale->name = 'gettcoursemodulescale'; + $gradescale->courseid = $course->id; + $gradescale->userid = 0; + $gradescale->scale = $outcomescale; + $gradescale->description = 'This scale is used to mark standard assignments.'; + $gradescale->insert(); + + // Insert an outcome. + $data = new stdClass(); + $data->courseid = $course->id; + $data->fullname = 'Team work'; + $data->shortname = 'Team work'; + $data->scaleid = $gradescale->id; + $outcome = new grade_outcome($data, false); + $outcome->insert(); + + $outcomegradeitem = new grade_item(); + $outcomegradeitem->itemname = $outcome->shortname; + $outcomegradeitem->itemtype = 'mod'; + $outcomegradeitem->itemmodule = 'assign'; + $outcomegradeitem->iteminstance = $assign->id; + $outcomegradeitem->outcomeid = $outcome->id; + $outcomegradeitem->cmid = 0; + $outcomegradeitem->courseid = $course->id; + $outcomegradeitem->aggregationcoef = 0; + $outcomegradeitem->itemnumber = 1; // The activity's original grade item will be 0. + $outcomegradeitem->gradetype = GRADE_TYPE_SCALE; + $outcomegradeitem->scaleid = $outcome->scaleid; + $outcomegradeitem->insert(); + + $assignmentgradeitem = grade_item::fetch( + array( + 'itemtype' => 'mod', + 'itemmodule' => 'assign', + 'iteminstance' => $assign->id, + 'itemnumber' => 0, + 'courseid' => $course->id + ) + ); + $outcomegradeitem->set_parent($assignmentgradeitem->categoryid); + $outcomegradeitem->move_after_sortorder($assignmentgradeitem->sortorder); + // Test admin user can see the complete hidden activity. $result = core_course_external::get_course_module($assign->cmid); $result = external_api::clean_returnvalue(core_course_external::get_course_module_returns(), $result); $this->assertCount(0, $result['warnings']); // Test we retrieve all the fields. - $this->assertCount(26, $result['cm']); + $this->assertCount(27, $result['cm']); $this->assertEquals($record['name'], $result['cm']['name']); $this->assertEquals($options['idnumber'], $result['cm']['idnumber']); $this->assertEquals(100, $result['cm']['grade']); $this->assertEquals(0.0, $result['cm']['gradepass']); $this->assertEquals('submissions', $result['cm']['advancedgrading'][0]['area']); $this->assertEmpty($result['cm']['advancedgrading'][0]['method']); - $this->assertArrayNotHasKey('outcomes', $result['cm']); + $this->assertEquals($outcomescale, $result['cm']['outcomes'][0]['scale']); $student = $this->getDataGenerator()->create_user(); $studentrole = $DB->get_record('role', array('shortname' => 'student'));