/** * 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; }
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; }
public function close() { $this->rs->close(); }