Merge branch 'MDL-50964-master' of git://github.com/jleyva/moodle
authorDavid Monllao <davidm@moodle.com>
Tue, 15 Sep 2015 09:09:33 +0000 (17:09 +0800)
committerDavid Monllao <davidm@moodle.com>
Tue, 15 Sep 2015 09:09:33 +0000 (17:09 +0800)
Conflicts:
group/tests/externallib_test.php
lib/db/services.php

1  2 
group/externallib.php
group/tests/externallib_test.php
lib/db/services.php

Simple merge
@@@ -454,93 -454,49 +454,139 @@@ class core_group_externallib_testcase e
  
      }
  
 +    /**
 +     * Test get_activity_allowed_groups
 +     */
 +    public function test_get_activity_allowed_groups() {
 +        global $DB;
 +
 +        $this->resetAfterTest(true);
 +
 +        $generator = self::getDataGenerator();
 +
 +        $student = $generator->create_user();
 +        $otherstudent = $generator->create_user();
 +        $teacher = $generator->create_user();
 +        $course = $generator->create_course();
 +        $othercourse = $generator->create_course();
 +
 +        $studentrole = $DB->get_record('role', array('shortname' => 'student'));
 +        $teacherrole = $DB->get_record('role', array('shortname' => 'editingteacher'));
 +        $generator->enrol_user($student->id, $course->id, $studentrole->id);
 +        $generator->enrol_user($otherstudent->id, $othercourse->id, $studentrole->id);
 +        $generator->enrol_user($teacher->id, $course->id, $teacherrole->id);
 +
 +        $forum1 = $generator->create_module("forum", array('course' => $course->id), array('groupmode' => VISIBLEGROUPS));
 +        $forum2 = $generator->create_module("forum", array('course' => $othercourse->id));
 +        $forum3 = $generator->create_module("forum", array('course' => $course->id), array('visible' => 0));
 +
 +        // Request data for tests.
 +        $cm1 = get_coursemodule_from_instance("forum", $forum1->id);
 +        $cm2 = get_coursemodule_from_instance("forum", $forum2->id);
 +        $cm3 = get_coursemodule_from_instance("forum", $forum3->id);
 +
 +        $group1data = array();
 +        $group1data['courseid'] = $course->id;
 +        $group1data['name'] = 'Group Test 1';
 +        $group1data['description'] = 'Group Test 1 description';
 +        $group1data['idnumber'] = 'TEST1';
 +        $group2data = array();
 +        $group2data['courseid'] = $course->id;
 +        $group2data['name'] = 'Group Test 2';
 +        $group2data['description'] = 'Group Test 2 description';
 +        $group2data['idnumber'] = 'TEST2';
 +        $group1 = $generator->create_group($group1data);
 +        $group2 = $generator->create_group($group2data);
 +
 +        groups_add_member($group1->id, $student->id);
 +        groups_add_member($group2->id, $student->id);
 +
 +        $this->setUser($student);
 +
 +        // First try possible errors.
 +        try {
 +            $data = core_group_external::get_activity_allowed_groups($cm2->id);
 +        } catch (moodle_exception $e) {
 +            $this->assertEquals('requireloginerror', $e->errorcode);
 +        }
 +
 +        try {
 +            $data = core_group_external::get_activity_allowed_groups($cm3->id);
 +        } catch (moodle_exception $e) {
 +            $this->assertEquals('requireloginerror', $e->errorcode);
 +        }
 +
 +        // Retrieve my groups.
 +        $groups = core_group_external::get_activity_allowed_groups($cm1->id);
 +        $groups = external_api::clean_returnvalue(core_group_external::get_activity_allowed_groups_returns(), $groups);
 +        $this->assertCount(2, $groups['groups']);
 +
 +        foreach ($groups['groups'] as $group) {
 +            if ($group['name'] == $group1data['name']) {
 +                $this->assertEquals($group1data['description'], $group['description']);
 +                $this->assertEquals($group1data['idnumber'], $group['idnumber']);
 +            } else {
 +                $this->assertEquals($group2data['description'], $group['description']);
 +                $this->assertEquals($group2data['idnumber'], $group['idnumber']);
 +            }
 +        }
 +
 +        $this->setUser($teacher);
 +        // Retrieve other users groups.
 +        $groups = core_group_external::get_activity_allowed_groups($cm1->id, $student->id);
 +        $groups = external_api::clean_returnvalue(core_group_external::get_activity_allowed_groups_returns(), $groups);
 +        $this->assertCount(2, $groups['groups']);
 +
 +        // Check warnings. Trying to get groups for a user not enrolled in course.
 +        $groups = core_group_external::get_activity_allowed_groups($cm1->id, $otherstudent->id);
 +        $groups = external_api::clean_returnvalue(core_group_external::get_activity_allowed_groups_returns(), $groups);
 +        $this->assertCount(1, $groups['warnings']);
 +
 +    }
++
+     /**
+      * Test get_activity_groupmode
+      */
+     public function test_get_activity_groupmode() {
+         global $DB;
+         $this->resetAfterTest(true);
+         $generator = self::getDataGenerator();
+         $student = $generator->create_user();
+         $course = $generator->create_course();
+         $othercourse = $generator->create_course();
+         $studentrole = $DB->get_record('role', array('shortname' => 'student'));
+         $generator->enrol_user($student->id, $course->id, $studentrole->id);
+         $forum1 = $generator->create_module("forum", array('course' => $course->id), array('groupmode' => VISIBLEGROUPS));
+         $forum2 = $generator->create_module("forum", array('course' => $othercourse->id));
+         $forum3 = $generator->create_module("forum", array('course' => $course->id), array('visible' => 0));
+         // Request data for tests.
+         $cm1 = get_coursemodule_from_instance("forum", $forum1->id);
+         $cm2 = get_coursemodule_from_instance("forum", $forum2->id);
+         $cm3 = get_coursemodule_from_instance("forum", $forum3->id);
+         $this->setUser($student);
+         $data = core_group_external::get_activity_groupmode($cm1->id);
+         $data = external_api::clean_returnvalue(core_group_external::get_activity_groupmode_returns(), $data);
+         $this->assertEquals(VISIBLEGROUPS, $data['groupmode']);
+         try {
+             $data = core_group_external::get_activity_groupmode($cm2->id);
+         } catch (moodle_exception $e) {
+             $this->assertEquals('requireloginerror', $e->errorcode);
+         }
+         try {
+             $data = core_group_external::get_activity_groupmode($cm3->id);
+         } catch (moodle_exception $e) {
+             $this->assertEquals('requireloginerror', $e->errorcode);
+         }
+     }
  }
@@@ -323,15 -323,15 +323,24 @@@ $functions = array
          'capabilities'  => 'moodle/course:managegroups',
      ),
  
 +    'core_group_get_activity_allowed_groups' => array(
 +        'classname'     => 'core_group_external',
 +        'methodname'    => 'get_activity_allowed_groups',
 +        'classpath'     => 'group/externallib.php',
 +        'description'   => 'Gets a list of groups that the user is allowed to access within the specified activity.',
 +        'type'          => 'read',
 +        'capabilities'  => '',
 +    ),
 +
+     'core_group_get_activity_groupmode' => array(
+         'classname'     => 'core_group_external',
+         'methodname'    => 'get_activity_groupmode',
+         'classpath'     => 'group/externallib.php',
+         'description'   => 'Returns effective groupmode used in a given activity.',
+         'type'          => 'read',
+         'capabilities'  => '',
+     ),
      'core_notes_get_course_notes' => array(
          'classname'     => 'core_notes_external',
          'methodname'    => 'get_course_notes',
@@@ -1156,7 -1145,7 +1165,8 @@@ $services = array
              'core_message_get_blocked_users',
              'gradereport_user_get_grades_table',
              'core_group_get_course_user_groups',
 +            'core_group_get_activity_allowed_groups',
+             'core_group_get_activity_groupmode',
              'core_user_remove_user_device',
              'core_course_get_courses',
              'core_completion_update_activity_completion_status_manually',