Пример #1
0
 /**
  * Returns course details in an array ready to be printed.
  *
  * @global \moodle_database $DB
  * @param \course_in_list $course
  * @return array
  */
 public static function get_course_detail_array(\course_in_list $course)
 {
     global $DB;
     $canaccess = $course->can_access();
     $format = \course_get_format($course->id);
     $modinfo = \get_fast_modinfo($course->id);
     $modules = $modinfo->get_used_module_names();
     $sections = array();
     if ($format->uses_sections()) {
         foreach ($modinfo->get_section_info_all() as $section) {
             if ($section->uservisible) {
                 $sections[] = $format->get_section_name($section);
             }
         }
     }
     $category = \coursecat::get($course->category);
     $categoryurl = new \moodle_url('/course/management.php', array('categoryid' => $course->category));
     $categoryname = $category->get_formatted_name();
     $details = array('fullname' => array('key' => \get_string('fullname'), 'value' => $course->get_formatted_fullname()), 'shortname' => array('key' => \get_string('shortname'), 'value' => $course->get_formatted_shortname()), 'idnumber' => array('key' => \get_string('idnumber'), 'value' => s($course->idnumber)), 'category' => array('key' => \get_string('category'), 'value' => \html_writer::link($categoryurl, $categoryname)));
     if (has_capability('moodle/site:accessallgroups', $course->get_context())) {
         $groups = \groups_get_course_data($course->id);
         $details += array('groupings' => array('key' => \get_string('groupings', 'group'), 'value' => count($groups->groupings)), 'groups' => array('key' => \get_string('groups'), 'value' => count($groups->groups)));
     }
     if ($canaccess) {
         $names = \role_get_names($course->get_context());
         $sql = 'SELECT ra.roleid, COUNT(ra.id) AS rolecount
                   FROM {role_assignments} ra
                  WHERE ra.contextid = :contextid
               GROUP BY ra.roleid';
         $rolecounts = $DB->get_records_sql($sql, array('contextid' => $course->get_context()->id));
         $roledetails = array();
         foreach ($rolecounts as $result) {
             $a = new \stdClass();
             $a->role = $names[$result->roleid]->localname;
             $a->count = $result->rolecount;
             $roledetails[] = \get_string('assignedrolecount', 'moodle', $a);
         }
         $details['roleassignments'] = array('key' => \get_string('roleassignments'), 'value' => join('<br />', $roledetails));
     }
     if ($course->can_review_enrolments()) {
         $enrolmentlines = array();
         $instances = \enrol_get_instances($course->id, true);
         $plugins = \enrol_get_plugins(true);
         foreach ($instances as $instance) {
             if (!isset($plugins[$instance->enrol])) {
                 // Weird.
                 continue;
             }
             $plugin = $plugins[$instance->enrol];
             $enrolmentlines[] = $plugin->get_instance_name($instance);
         }
         $details['enrolmentmethods'] = array('key' => \get_string('enrolmentmethods'), 'value' => join('<br />', $enrolmentlines));
     }
     if ($canaccess) {
         $details['format'] = array('key' => \get_string('format'), 'value' => \course_get_format($course)->get_format_name());
         $details['sections'] = array('key' => \get_string('sections'), 'value' => join('<br />', $sections));
         $details['modulesused'] = array('key' => \get_string('modulesused'), 'value' => join('<br />', $modules));
     }
     return $details;
 }
Пример #2
0
/**
 * Gets an array of all groupings in a specified course. This value is cached
 * for a single course (so you can call it repeatedly for the same course
 * without a performance penalty).
 *
 * @category group
 * @param int $courseid return all groupings from course with this courseid
 * @return array Returns an array of the grouping objects (empty if none)
 */
function groups_get_all_groupings($courseid)
{
    $data = groups_get_course_data($courseid);
    return $data->groupings;
}
Пример #3
0
/**
 * Fetches users based on a supplied course and group.
 *
 * @param mixed $course the course to search for users in
 * @param mixed $group the group to search for users in
 * @return array of users
 * @uses $CFG
 */
function report_ncccscensus_get_users($course, $group = null)
{
    global $CFG;
    require_once $CFG->libdir . '/accesslib.php';
    $excludegroupmembers = false;
    if ($group === REPORT_NCCCSCENSUS_EXCLUDE_GROUP_MEMBERS) {
        $excludegroupmembers = true;
        $group = null;
        // Set group to null to retrieve all users, then filter out group members.
    }
    /* The use of $CFG->gradebookroles and get_role_users() was suggested here:     */
    /* https://tracker.remote-learner.net/browse/NCCCSDEV-19?focusedCommentId=94023 */
    $roles = explode(',', $CFG->gradebookroles);
    $context = context_course::instance($course);
    $users = array();
    foreach ($roles as $role) {
        $roleusers = get_role_users($role, $context, false, 'u.id, u.firstname, u.lastname', null, true, $group);
        foreach ($roleusers as $roleuser) {
            $users[] = $roleuser->id;
        }
    }
    $users = array_unique($users);
    // Filter out group members if any.
    if ($excludegroupmembers) {
        $groupusers = array();
        $groupdata = groups_get_course_data($course);
        foreach ($groupdata->groups as $groupobject) {
            foreach ($roles as $role) {
                $roleusers = get_role_users($role, $context, false, 'u.id', null, true, $groupobject->id);
                foreach ($roleusers as $roleuser) {
                    $groupusers[] = $roleuser->id;
                }
            }
        }
        $groupusers = array_unique($groupusers);
        $users = array_diff($users, $groupusers);
    }
    return $users;
}
 public function test_groups_get_course_data()
 {
     $this->resetAfterTest(true);
     $generator = $this->getDataGenerator();
     // Create a course category and course.
     $cat = $generator->create_category(array('parent' => 0));
     $course = $generator->create_course(array('category' => $cat->id));
     $grouping1 = $generator->create_grouping(array('courseid' => $course->id, 'name' => 'Grouping 1'));
     $grouping2 = $generator->create_grouping(array('courseid' => $course->id, 'name' => 'Grouping 2'));
     $group1 = $generator->create_group(array('courseid' => $course->id, 'name' => 'Group 1'));
     $group2 = $generator->create_group(array('courseid' => $course->id, 'name' => 'Group 2'));
     $group3 = $generator->create_group(array('courseid' => $course->id, 'name' => 'Group 3'));
     $group4 = $generator->create_group(array('courseid' => $course->id, 'name' => 'Group 4'));
     // Assign the groups to groupings.
     $this->assertTrue(groups_assign_grouping($grouping1->id, $group1->id));
     $this->assertTrue(groups_assign_grouping($grouping1->id, $group2->id));
     $this->assertTrue(groups_assign_grouping($grouping2->id, $group3->id));
     $this->assertTrue(groups_assign_grouping($grouping2->id, $group4->id));
     // Get the data.
     $data = groups_get_course_data($course->id);
     $this->assertInstanceOf('stdClass', $data);
     $this->assertObjectHasAttribute('groups', $data);
     $this->assertObjectHasAttribute('groupings', $data);
     $this->assertObjectHasAttribute('mappings', $data);
     // Test we have the expected items returns.
     $this->assertCount(4, $data->groups);
     $this->assertCount(2, $data->groupings);
     $this->assertCount(4, $data->mappings);
     // Check we have the expected groups.
     $this->assertArrayHasKey($group1->id, $data->groups);
     $this->assertArrayHasKey($group2->id, $data->groups);
     $this->assertArrayHasKey($group3->id, $data->groups);
     $this->assertArrayHasKey($group4->id, $data->groups);
     // Test a group-id is mapped correctly.
     $this->assertSame($group3->name, $data->groups[$group3->id]->name);
     // Check we have the expected number of groupings.
     $this->assertContains($grouping1->id, array_keys($data->groupings));
     $this->assertContains($grouping2->id, array_keys($data->groupings));
     // Test a grouping-id is mapped correctly.
     $this->assertEquals($grouping2->name, $data->groupings[$grouping2->id]->name);
     // Test that all of the mappings are correct.
     $grouping1maps = 0;
     $grouping2maps = 0;
     $group1maps = 0;
     $group2maps = 0;
     $group3maps = 0;
     $group4maps = 0;
     foreach ($data->mappings as $mapping) {
         if ($mapping->groupingid === $grouping1->id) {
             $grouping1maps++;
             $this->assertContains($mapping->groupid, array($group1->id, $group2->id));
         } else {
             if ($mapping->groupingid === $grouping2->id) {
                 $grouping2maps++;
                 $this->assertContains($mapping->groupid, array($group3->id, $group4->id));
             } else {
                 $this->fail('Unexpected groupingid');
             }
         }
         switch ($mapping->groupid) {
             case $group1->id:
                 $group1maps++;
                 break;
             case $group2->id:
                 $group2maps++;
                 break;
             case $group3->id:
                 $group3maps++;
                 break;
             case $group4->id:
                 $group4maps++;
                 break;
         }
     }
     $this->assertEquals(2, $grouping1maps);
     $this->assertEquals(2, $grouping2maps);
     $this->assertEquals(1, $group1maps);
     $this->assertEquals(1, $group2maps);
     $this->assertEquals(1, $group3maps);
     $this->assertEquals(1, $group4maps);
     // Test the groups_get_all_groups which uses this functionality.
     $groups = groups_get_all_groups($course->id);
     $groupkeys = array_keys($groups);
     $this->assertCount(4, $groups);
     $this->assertContains($group1->id, $groupkeys);
     $this->assertContains($group2->id, $groupkeys);
     $this->assertContains($group3->id, $groupkeys);
     $this->assertContains($group4->id, $groupkeys);
     $groups = groups_get_all_groups($course->id, null, $grouping1->id);
     $groupkeys = array_keys($groups);
     $this->assertCount(2, $groups);
     $this->assertContains($group1->id, $groupkeys);
     $this->assertContains($group2->id, $groupkeys);
     $this->assertNotContains($group3->id, $groupkeys);
     $this->assertNotContains($group4->id, $groupkeys);
     $groups = groups_get_all_groups($course->id, null, $grouping2->id);
     $groupkeys = array_keys($groups);
     $this->assertCount(2, $groups);
     $this->assertNotContains($group1->id, $groupkeys);
     $this->assertNotContains($group2->id, $groupkeys);
     $this->assertContains($group3->id, $groupkeys);
     $this->assertContains($group4->id, $groupkeys);
     // Test this function using an alternate column for the result index
     $groups = groups_get_all_groups($course->id, null, $grouping2->id, 'g.name, g.id');
     $groupkeys = array_keys($groups);
     $this->assertCount(2, $groups);
     $this->assertNotContains($group3->id, $groupkeys);
     $this->assertContains($group3->name, $groupkeys);
     $this->assertEquals($group3->id, $groups[$group3->name]->id);
 }
Пример #5
0
/**
 * Returns the groupingid of a grouping with the id specified for the course.
 *
 * @category group
 * @param int $courseid The id of the course
 * @param int $idnumber id of the group
 * @return grouping object
 */
function groups_get_grouping_by_id($courseid, $id)
{
    if (empty($id)) {
        return false;
    }
    $data = groups_get_course_data($courseid);
    foreach ($data->groupings as $grouping) {
        if ($grouping->id == $id) {
            return $grouping;
        }
    }
    return false;
}