Пример #1
0
/**
 * Internal function used by groups_get_members_by_role to handle the
 * results of a database query that includes a list of users and possible
 * roles on a course.
 *
 * @param moodle_recordset $rs The record set (may be false)
 * @param int $context ID of course context
 * @return array As described in groups_get_members_by_role
 */
function groups_calculate_role_people($rs, $context)
{
    global $CFG, $DB;
    if (!$rs) {
        return array();
    }
    $allroles = role_fix_names(get_all_roles($context), $context);
    // Array of all involved roles
    $roles = array();
    // Array of all retrieved users
    $users = array();
    // Fill arrays
    foreach ($rs as $rec) {
        // Create information about user if this is a new one
        if (!array_key_exists($rec->userid, $users)) {
            // User data includes all the optional fields, but not any of the
            // stuff we added to get the role details
            $userdata = clone $rec;
            unset($userdata->roleid);
            unset($userdata->roleshortname);
            unset($userdata->rolename);
            unset($userdata->userid);
            $userdata->id = $rec->userid;
            // Make an array to hold the list of roles for this user
            $userdata->roles = array();
            $users[$rec->userid] = $userdata;
        }
        // If user has a role...
        if (!is_null($rec->roleid)) {
            // Create information about role if this is a new one
            if (!array_key_exists($rec->roleid, $roles)) {
                $role = $allroles[$rec->roleid];
                $roledata = new stdClass();
                $roledata->id = $role->id;
                $roledata->shortname = $role->shortname;
                $roledata->name = $role->localname;
                $roledata->users = array();
                $roles[$roledata->id] = $roledata;
            }
            // Record that user has role
            $users[$rec->userid]->roles[$rec->roleid] = $roles[$rec->roleid];
        }
    }
    $rs->close();
    // Return false if there weren't any users
    if (count($users) == 0) {
        return false;
    }
    // Add pseudo-role for multiple roles
    $roledata = new stdClass();
    $roledata->name = get_string('multipleroles', 'role');
    $roledata->users = array();
    $roles['*'] = $roledata;
    $roledata = new stdClass();
    $roledata->name = get_string('noroles', 'role');
    $roledata->users = array();
    $roles[0] = $roledata;
    // Now we rearrange the data to store users by role
    foreach ($users as $userid => $userdata) {
        $rolecount = count($userdata->roles);
        if ($rolecount == 0) {
            // does not have any roles
            $roleid = 0;
        } else {
            if ($rolecount > 1) {
                $roleid = '*';
            } else {
                $userrole = reset($userdata->roles);
                $roleid = $userrole->id;
            }
        }
        $roles[$roleid]->users[$userid] = $userdata;
    }
    // Delete roles not used
    foreach ($roles as $key => $roledata) {
        if (count($roledata->users) === 0) {
            unset($roles[$key]);
        }
    }
    // Return list of roles containing their users
    return $roles;
}
Пример #2
0
 public function get_question_states($attempt, $question, moodle_recordset $questionsstatesrs)
 {
     $qstates = array();
     while ($questionsstatesrs->valid()) {
         $state = $questionsstatesrs->current();
         if ($state->attempt != $attempt->uniqueid || $state->question != $question->id) {
             // We have found all the states for this attempt. Stop.
             break;
         }
         // Add the new state to the array, and advance.
         $qstates[] = $state;
         $questionsstatesrs->next();
     }
     return $qstates;
 }
Пример #3
0
 public function close()
 {
     $this->rs->close();
 }