diff --git a/mod/assign/externallib.php b/mod/assign/externallib.php
index fa2b761c36a..7e54b4fb8cd 100644
--- a/mod/assign/externallib.php
+++ b/mod/assign/externallib.php
@@ -2636,6 +2636,7 @@ class mod_assign_external extends \mod_assign\external\external_api {
global $DB, $CFG;
require_once($CFG->dirroot . "/mod/assign/locallib.php");
require_once($CFG->dirroot . "/user/lib.php");
+ require_once($CFG->libdir . '/grouplib.php');
$params = self::validate_parameters(self::list_participants_parameters(),
array(
@@ -2657,8 +2658,10 @@ class mod_assign_external extends \mod_assign\external\external_api {
$assign->require_view_grades();
$participants = array();
+ $coursegroups = [];
if (groups_group_visible($params['groupid'], $course, $cm)) {
$participants = $assign->list_participants_with_filter_status_and_group($params['groupid'], $params['tablesort']);
+ $coursegroups = groups_get_all_groups($course->id);
}
$userfields = user_get_default_fields();
@@ -2709,9 +2712,12 @@ class mod_assign_external extends \mod_assign\external\external_api {
$userdetails['submissionstatus'] = $record->submissionstatus;
if (!empty($record->groupid)) {
$userdetails['groupid'] = $record->groupid;
- }
- if (!empty($record->groupname)) {
- $userdetails['groupname'] = $record->groupname;
+
+ if (!empty($coursegroups[$record->groupid])) {
+ // Format properly the group name.
+ $group = $coursegroups[$record->groupid];
+ $userdetails['groupname'] = format_string($group->name);
+ }
}
// Unique id is required for blind marking.
$userdetails['recordid'] = -1;
@@ -2826,6 +2832,7 @@ class mod_assign_external extends \mod_assign\external\external_api {
global $DB, $CFG;
require_once($CFG->dirroot . "/mod/assign/locallib.php");
require_once($CFG->dirroot . "/user/lib.php");
+ require_once($CFG->libdir . '/grouplib.php');
$params = self::validate_parameters(self::get_participant_parameters(), array(
'assignid' => $assignid,
@@ -2868,9 +2875,11 @@ class mod_assign_external extends \mod_assign\external\external_api {
if (!empty($participant->groupid)) {
$return['groupid'] = $participant->groupid;
- }
- if (!empty($participant->groupname)) {
- $return['groupname'] = $participant->groupname;
+
+ if ($group = groups_get_group($participant->groupid)) {
+ // Format properly the group name.
+ $return['groupname'] = format_string($group->name);
+ }
}
// Skip the expensive lookup of user detail if we're blind marking or the caller
diff --git a/mod/assign/tests/externallib_test.php b/mod/assign/tests/externallib_test.php
index fa4a3ebce31..75095906e79 100644
--- a/mod/assign/tests/externallib_test.php
+++ b/mod/assign/tests/externallib_test.php
@@ -2854,6 +2854,54 @@ class externallib_test extends \mod_assign\externallib_advanced_testcase {
}
}
+ /**
+ * Test for WS returning group.
+ * @covers ::get_participant
+ * @covers ::list_participants
+ */
+ public function test_participants_info_with_groups() {
+ global $CFG;
+ $this->resetAfterTest(true);
+ $CFG->showuseridentity = 'idnumber,email,phone1,phone2,department,institution';
+
+ // Set up filtering.
+ filter_set_global_state('multilang', TEXTFILTER_ON);
+ filter_set_applies_to_strings('multilang', true);
+ \external_settings::get_instance()->set_filter(true);
+
+ $result = $this->create_assign_with_student_and_teacher([
+ 'assignsubmission_onlinetext_enabled' => 1,
+ 'teamsubmission' => 1
+ ]);
+ $assignmodule = $result['assign'];
+ $student = $result['student'];
+ $teacher = $result['teacher'];
+ $course = $result['course'];
+ $context = \context_course::instance($course->id);
+
+ $gname = 'G (en)G (es)';
+ $group = $this->getDataGenerator()->create_group(['courseid' => $course->id, 'name' => $gname]);
+ groups_add_member($group, $student);
+
+ $cm = get_coursemodule_from_instance('assign', $assignmodule->id);
+ new mod_assign_testable_assign($context, $cm, $course);
+
+ // Prepare submission.
+ $this->setUser($teacher);
+
+ // Test mod_assign_external::list_participants.
+ $participants = \mod_assign_external::list_participants($assignmodule->id, $group->id, '', 0, 0, false, true, true);
+ $participants = \external_api::clean_returnvalue(mod_assign_external::list_participants_returns(), $participants);
+ $this->assertEquals($group->id, $participants[0]['groupid']);
+ $this->assertEquals(format_string($gname, true), $participants[0]['groupname']);
+
+ // Test mod_assign_external::get_participant.
+ $participant = mod_assign_external::get_participant($assignmodule->id, $student->id, true);
+ $participant = \external_api::clean_returnvalue(mod_assign_external::get_participant_returns(), $participant);
+ $this->assertEquals($group->id, $participant['groupid']);
+ $this->assertEquals(format_string($gname, true), $participant['groupname']);
+ }
+
/**
* Test test_view_assign
*/