Merge branch 'w28_MDL-8249_m24_roletranslations' of git://github.com/skodak/moodle

Conflicts:
	lib/db/upgrade.php
	version.php
This commit is contained in:
Dan Poltawski 2012-07-10 09:43:23 +08:00
commit e1980f8bb9
37 changed files with 631 additions and 422 deletions

View file

@ -256,19 +256,14 @@ class permissions_table extends capability_table_base {
* @param string $contextname print_context_name($context) - to save recomputing. * @param string $contextname print_context_name($context) - to save recomputing.
*/ */
public function __construct($context, $contextname, $allowoverrides, $allowsafeoverrides, $overridableroles) { public function __construct($context, $contextname, $allowoverrides, $allowsafeoverrides, $overridableroles) {
global $DB;
parent::__construct($context, 'permissions'); parent::__construct($context, 'permissions');
$this->contextname = $contextname; $this->contextname = $contextname;
$this->allowoverrides = $allowoverrides; $this->allowoverrides = $allowoverrides;
$this->allowsafeoverrides = $allowsafeoverrides; $this->allowsafeoverrides = $allowsafeoverrides;
$this->overridableroles = $overridableroles; $this->overridableroles = $overridableroles;
$roles = $DB->get_records('role', null, 'sortorder DESC'); $roles = get_all_roles($context);
foreach ($roles as $roleid=>$role) { $this->roles = role_fix_names(array_reverse($roles, true), $context, ROLENAME_ALIAS, true);
$roles[$roleid] = $role->name;
}
$this->roles = role_fix_names($roles, $context);
} }
@ -593,18 +588,6 @@ class define_role_table_advanced extends capability_table_with_risks {
global $DB; global $DB;
$this->errors = array(); $this->errors = array();
// Role name.
$name = optional_param('name', null, PARAM_MULTILANG);
if (!is_null($name)) {
$this->role->name = $name;
if (html_is_blank($this->role->name)) {
$this->errors['name'] = get_string('errorbadrolename', 'role');
}
}
if ($DB->record_exists_select('role', 'name = ? and id <> ?', array($this->role->name, $this->roleid))) {
$this->errors['name'] = get_string('errorexistsrolename', 'role');
}
// Role short name. We clean this in a special way. We want to end up // Role short name. We clean this in a special way. We want to end up
// with only lowercase safe ASCII characters. // with only lowercase safe ASCII characters.
$shortname = optional_param('shortname', null, PARAM_RAW); $shortname = optional_param('shortname', null, PARAM_RAW);
@ -620,6 +603,20 @@ class define_role_table_advanced extends capability_table_with_risks {
$this->errors['shortname'] = get_string('errorexistsroleshortname', 'role'); $this->errors['shortname'] = get_string('errorexistsroleshortname', 'role');
} }
// Role name.
$name = optional_param('name', null, PARAM_MULTILANG);
if (!is_null($name)) {
$this->role->name = $name;
// Hack: short names of standard roles are equal to archetypes, empty name means localised via lang packs.
$archetypes = get_role_archetypes();
if (!isset($archetypes[$shortname]) and html_is_blank($this->role->name)) {
$this->errors['name'] = get_string('errorbadrolename', 'role');
}
}
if ($this->role->name !== '' and $DB->record_exists_select('role', 'name = ? and id <> ?', array($this->role->name, $this->roleid))) {
$this->errors['name'] = get_string('errorexistsrolename', 'role');
}
// Description. // Description.
$description = optional_param('description', null, PARAM_RAW); $description = optional_param('description', null, PARAM_RAW);
if (!is_null($description)) { if (!is_null($description)) {
@ -779,9 +776,9 @@ class define_role_table_advanced extends capability_table_with_risks {
global $OUTPUT; global $OUTPUT;
// Extra fields at the top of the page. // Extra fields at the top of the page.
echo '<div class="topfields clearfix">'; echo '<div class="topfields clearfix">';
$this->print_field('name', get_string('rolefullname', 'role'), $this->get_name_field('name')); $this->print_field('shortname', get_string('roleshortname', 'role').'&nbsp;'.$OUTPUT->help_icon('roleshortname', 'role'), $this->get_shortname_field('shortname'));
$this->print_field('shortname', get_string('roleshortname', 'role'), $this->get_shortname_field('shortname')); $this->print_field('name', get_string('customrolename', 'role').'&nbsp;'.$OUTPUT->help_icon('customrolename', 'role'), $this->get_name_field('name'));
$this->print_field('edit-description', get_string('description'), $this->get_description_field('description')); $this->print_field('edit-description', get_string('customroledescription', 'role').'&nbsp;'.$OUTPUT->help_icon('customroledescription', 'role'), $this->get_description_field('description'));
$this->print_field('menuarchetype', get_string('archetype', 'role').'&nbsp;'.$OUTPUT->help_icon('archetype', 'role'), $this->get_archetype_field('archetype')); $this->print_field('menuarchetype', get_string('archetype', 'role').'&nbsp;'.$OUTPUT->help_icon('archetype', 'role'), $this->get_archetype_field('archetype'));
$this->print_field('', get_string('maybeassignedin', 'role'), $this->get_assignable_levels_control()); $this->print_field('', get_string('maybeassignedin', 'role'), $this->get_assignable_levels_control());
echo "</div>"; echo "</div>";
@ -862,7 +859,7 @@ class view_role_definition_table extends define_role_table_advanced {
} }
protected function get_name_field($id) { protected function get_name_field($id) {
return strip_tags(format_string($this->role->name)); return role_get_name($this->role);
} }
protected function get_shortname_field($id) { protected function get_shortname_field($id) {
@ -870,7 +867,7 @@ class view_role_definition_table extends define_role_table_advanced {
} }
protected function get_description_field($id) { protected function get_description_field($id) {
return format_text($this->role->description, FORMAT_HTML); return role_get_description($this->role);
} }
protected function get_archetype_field($id) { protected function get_archetype_field($id) {
@ -1273,8 +1270,7 @@ abstract class role_allow_role_page {
*/ */
protected function load_required_roles() { protected function load_required_roles() {
/// Get all roles /// Get all roles
$this->roles = get_all_roles(); $this->roles = role_fix_names(get_all_roles(), get_context_instance(CONTEXT_SYSTEM), ROLENAME_ORIGINAL);
role_fix_names($this->roles, get_context_instance(CONTEXT_SYSTEM), ROLENAME_ORIGINAL);
} }
/** /**

View file

@ -53,8 +53,7 @@
admin_externalpage_setup('defineroles'); admin_externalpage_setup('defineroles');
/// Get some basic data we are going to need. /// Get some basic data we are going to need.
$roles = get_all_roles(); $roles = role_fix_names(get_all_roles(), $systemcontext, ROLENAME_ORIGINAL);
role_fix_names($roles, $systemcontext, ROLENAME_ORIGINAL);
$undeletableroles = array(); $undeletableroles = array();
$undeletableroles[$CFG->notloggedinroleid] = 1; $undeletableroles[$CFG->notloggedinroleid] = 1;
@ -214,7 +213,7 @@
/// Basic data. /// Basic data.
$row = array( $row = array(
'<a href="' . $defineurl . '?action=view&amp;roleid=' . $role->id . '">' . $role->localname . '</a>', '<a href="' . $defineurl . '?action=view&amp;roleid=' . $role->id . '">' . $role->localname . '</a>',
format_text($role->description, FORMAT_HTML), role_get_description($role),
s($role->shortname), s($role->shortname),
'', '',
); );

View file

@ -68,14 +68,11 @@ if ($course->id != $SITE->id || $userid != $USER->id) {
/// Now get the role assignments for this user. /// Now get the role assignments for this user.
$sql = "SELECT $sql = "SELECT
ra.id, ra.userid, ra.contextid, ra.roleid, ra.component, ra.itemid, ra.id, ra.userid, ra.contextid, ra.roleid, ra.component, ra.itemid,
c.path, c.path
r.name AS rolename,
COALESCE(rn.name, r.name) AS localname
FROM FROM
{role_assignments} ra {role_assignments} ra
JOIN {context} c ON ra.contextid = c.id JOIN {context} c ON ra.contextid = c.id
JOIN {role} r ON ra.roleid = r.id JOIN {role} r ON ra.roleid = r.id
LEFT JOIN {role_names} rn ON rn.roleid = ra.roleid AND rn.contextid = ra.contextid
WHERE WHERE
ra.userid = ? ra.userid = ?
"./*AND ra.active = 1*/" "./*AND ra.active = 1*/"
@ -83,6 +80,8 @@ $sql = "SELECT
contextlevel DESC, contextid ASC, r.sortorder ASC"; contextlevel DESC, contextid ASC, r.sortorder ASC";
$roleassignments = $DB->get_records_sql($sql, array($user->id)); $roleassignments = $DB->get_records_sql($sql, array($user->id));
$allroles = role_fix_names(get_all_roles());
/// In order to display a nice tree of contexts, we need to get all the /// In order to display a nice tree of contexts, we need to get all the
/// ancestors of all the contexts in the query we just did. /// ancestors of all the contexts in the query we just did.
$requiredcontexts = array(); $requiredcontexts = array();
@ -142,14 +141,14 @@ echo $OUTPUT->box_start('generalbox boxaligncenter boxwidthnormal');
if (!$roleassignments) { if (!$roleassignments) {
echo '<p>', get_string('noroleassignments', 'role'), '</p>'; echo '<p>', get_string('noroleassignments', 'role'), '</p>';
} else { } else {
print_report_tree($systemcontext->id, $contexts, $systemcontext, $fullname); print_report_tree($systemcontext->id, $contexts, $systemcontext, $fullname, $allroles);
} }
/// End of page. /// End of page.
echo $OUTPUT->box_end(); echo $OUTPUT->box_end();
echo $OUTPUT->footer(); echo $OUTPUT->footer();
function print_report_tree($contextid, $contexts, $systemcontext, $fullname) { function print_report_tree($contextid, $contexts, $systemcontext, $fullname, $allroles) {
global $CFG, $OUTPUT; global $CFG, $OUTPUT;
// Only compute lang strings, etc once. // Only compute lang strings, etc once.
@ -170,15 +169,13 @@ function print_report_tree($contextid, $contexts, $systemcontext, $fullname) {
// If there are any role assignments here, print them. // If there are any role assignments here, print them.
foreach ($contexts[$contextid]->roleassignments as $ra) { foreach ($contexts[$contextid]->roleassignments as $ra) {
$role = $allroles[$ra->roleid];
$value = $ra->contextid . ',' . $ra->roleid; $value = $ra->contextid . ',' . $ra->roleid;
$inputid = 'unassign' . $value; $inputid = 'unassign' . $value;
echo '<p>'; echo '<p>';
if ($ra->rolename == $ra->localname) { echo $role->localname;
echo strip_tags(format_string($ra->localname));
} else {
echo strip_tags(format_string($ra->localname . ' (' . $ra->rolename . ')'));
}
if (has_capability('moodle/role:assign', $context)) { if (has_capability('moodle/role:assign', $context)) {
$raurl = $assignurl . '?contextid=' . $ra->contextid . '&amp;roleid=' . $raurl = $assignurl . '?contextid=' . $ra->contextid . '&amp;roleid=' .
$ra->roleid . '&amp;removeselect[]=' . $ra->userid; $ra->roleid . '&amp;removeselect[]=' . $ra->userid;
@ -210,7 +207,7 @@ function print_report_tree($contextid, $contexts, $systemcontext, $fullname) {
echo '<ul>'; echo '<ul>';
foreach ($contexts[$contextid]->children as $childcontextid) { foreach ($contexts[$contextid]->children as $childcontextid) {
echo '<li>'; echo '<li>';
print_report_tree($childcontextid, $contexts, $systemcontext, $fullname); print_report_tree($childcontextid, $contexts, $systemcontext, $fullname, $allroles);
echo '</li>'; echo '</li>';
} }
echo '</ul>'; echo '</ul>';

View file

@ -54,9 +54,10 @@ if (!during_initial_install()) { //do not use during installation
// front page default role // front page default role
$options = array(0=>new lang_string('none')); // roles to choose from $options = array(0=>new lang_string('none')); // roles to choose from
$defaultfrontpageroleid = 0; $defaultfrontpageroleid = 0;
foreach (get_all_roles() as $role) { $roles = role_fix_names(get_all_roles(), null, ROLENAME_ORIGINALANDSHORT);
foreach ($roles as $role) {
if (empty($role->archetype) or $role->archetype === 'guest' or $role->archetype === 'frontpage' or $role->archetype === 'student') { if (empty($role->archetype) or $role->archetype === 'guest' or $role->archetype === 'frontpage' or $role->archetype === 'student') {
$options[$role->id] = strip_tags(format_string($role->name)) . ' ('. $role->shortname . ')'; $options[$role->id] = $role->localname;
if ($role->archetype === 'frontpage') { if ($role->archetype === 'frontpage') {
$defaultfrontpageroleid = $role->id; $defaultfrontpageroleid = $role->id;
} }

View file

@ -45,8 +45,9 @@ if ($hassiteconfig
$defaultuserid = null; $defaultuserid = null;
$defaultguestid = null; $defaultguestid = null;
foreach (get_all_roles() as $role) { $roles = role_fix_names(get_all_roles(), null, ROLENAME_ORIGINALANDSHORT);
$rolename = strip_tags(format_string($role->name)) . ' ('. $role->shortname . ')'; foreach ($roles as $role) {
$rolename = $role->localname;
switch ($role->archetype) { switch ($role->archetype) {
case 'manager': case 'manager':
$creatornewroles[$role->id] = $rolename; $creatornewroles[$role->id] = $rolename;

View file

@ -38,7 +38,7 @@ $roleids = optional_param_array('roles', array('0'), PARAM_INTEGER);
// Clean the passed in list of role ids. If 'All' selected as an option, or // Clean the passed in list of role ids. If 'All' selected as an option, or
// if none were selected, do all roles. // if none were selected, do all roles.
$allroles = get_all_roles(); $allroles = role_fix_names(get_all_roles());
$cleanedroleids = array(); $cleanedroleids = array();
foreach ($roleids as $roleid) { foreach ($roleids as $roleid) {
if ($roleid == 0) { if ($roleid == 0) {
@ -73,7 +73,7 @@ foreach ($allcapabilities as $cap) {
// Prepare the list of roles to choose from // Prepare the list of roles to choose from
$rolechoices = array('0' => get_string('all')); $rolechoices = array('0' => get_string('all'));
foreach ($allroles as $role) { foreach ($allroles as $role) {
$rolechoices[$role->id] = $role->name; $rolechoices[$role->id] = $role->localname;
} }
if (count($cleanedroleids) == count($allroles)) { if (count($cleanedroleids) == count($allroles)) {
// Select 'All', rather than each role individually. // Select 'All', rather than each role individually.
@ -162,7 +162,7 @@ if ($capability) {
if (count($cleanedroleids) != count($allroles)) { if (count($cleanedroleids) != count($allroles)) {
$rolenames = array(); $rolenames = array();
foreach ($cleanedroleids as $roleid) { foreach ($cleanedroleids as $roleid) {
$rolenames[] = $allroles[$roleid]->name; $rolenames[] = $allroles[$roleid]->localname;
} }
echo '<p>', get_string('forroles', 'tool_capability', implode(', ', $rolenames)), '</p>'; echo '<p>', get_string('forroles', 'tool_capability', implode(', ', $rolenames)), '</p>';
} }
@ -207,7 +207,7 @@ function print_report_tree($contextid, $contexts, $allroles) {
foreach ($allroles as $role) { foreach ($allroles as $role) {
if (isset($contexts[$contextid]->rolecapabilities[$role->id])) { if (isset($contexts[$contextid]->rolecapabilities[$role->id])) {
$permission = $contexts[$contextid]->rolecapabilities[$role->id]; $permission = $contexts[$contextid]->rolecapabilities[$role->id];
echo '<tr class="r' . ($rowcounter % 2) . '"><th class="cell">', $role->name, echo '<tr class="r' . ($rowcounter % 2) . '"><th class="cell">', $role->localname,
'</th><td class="cell">' . $strpermissions[$permission] . '</td></tr>'; '</th><td class="cell">' . $strpermissions[$permission] . '</td></tr>';
$rowcounter++; $rowcounter++;
} }

View file

@ -97,7 +97,7 @@ if (!$problems) {
$data = array(); $data = array();
foreach ($problems as $problem) { foreach ($problems as $problem) {
$levelname = get_contextlevel_name($problem->contextlevel); $levelname = get_contextlevel_name($problem->contextlevel);
$rolename = format_string($roles[$problem->roleid]->name); $rolename = role_get_name($roles[$problem->roleid]);
//TODO: show list of users if count low //TODO: show list of users if count low
$count = $problem->racount; $count = $problem->racount;
$edit = array(); $edit = array();

View file

@ -2,6 +2,13 @@ This files describes API changes in /auth/* - plugins,
information provided here is intended especially for developers. information provided here is intended especially for developers.
=== 2.4 ===
required changes in code:
* use role_get_name() or role_fix_names() if you need any role names, using role.name
directly from database is not correct any more
=== 2.2 === === 2.2 ===
required changes in code: required changes in code:

View file

@ -347,7 +347,6 @@ abstract class restore_dbops {
// Gather various information about roles // Gather various information about roles
$coursectx = get_context_instance(CONTEXT_COURSE, $courseid); $coursectx = get_context_instance(CONTEXT_COURSE, $courseid);
$allroles = $DB->get_records('role');
$assignablerolesshortname = get_assignable_roles($coursectx, ROLENAME_SHORT, false, $userid); $assignablerolesshortname = get_assignable_roles($coursectx, ROLENAME_SHORT, false, $userid);
// Note: under 1.9 we had one function restore_samerole() that performed one complete // Note: under 1.9 we had one function restore_samerole() that performed one complete

View file

@ -69,6 +69,12 @@ if (!empty($course)) {
$editoroptions['context'] = $coursecontext; $editoroptions['context'] = $coursecontext;
$course = file_prepare_standard_editor($course, 'summary', $editoroptions, $coursecontext, 'course', 'summary', 0); $course = file_prepare_standard_editor($course, 'summary', $editoroptions, $coursecontext, 'course', 'summary', 0);
// Inject current aliases
$aliases = $DB->get_records('role_names', array('contextid'=>$coursecontext->id));
foreach($aliases as $alias) {
$course->{'role_'.$alias->roleid} = $alias->name;
}
} else { } else {
//editor should respect category context if course context is not set. //editor should respect category context if course context is not set.
$editoroptions['context'] = $catcontext; $editoroptions['context'] = $catcontext;

View file

@ -268,15 +268,10 @@ class course_edit_form extends moodleform {
$mform->addHelpButton('rolerenaming', 'rolerenaming'); $mform->addHelpButton('rolerenaming', 'rolerenaming');
if ($roles = get_all_roles()) { if ($roles = get_all_roles()) {
if ($coursecontext) { $roles = role_fix_names($roles, null, ROLENAME_ORIGINAL);
$roles = role_fix_names($roles, $coursecontext, ROLENAME_ALIAS_RAW);
}
$assignableroles = get_roles_for_contextlevels(CONTEXT_COURSE); $assignableroles = get_roles_for_contextlevels(CONTEXT_COURSE);
foreach ($roles as $role) { foreach ($roles as $role) {
$mform->addElement('text', 'role_'.$role->id, get_string('yourwordforx', '', $role->name)); $mform->addElement('text', 'role_'.$role->id, get_string('yourwordforx', '', $role->localname));
if (isset($role->localname)) {
$mform->setDefault('role_'.$role->id, $role->localname);
}
$mform->setType('role_'.$role->id, PARAM_TEXT); $mform->setType('role_'.$role->id, PARAM_TEXT);
if (!in_array($role->id, $assignableroles)) { if (!in_array($role->id, $assignableroles)) {
$mform->setAdvanced('role_'.$role->id); $mform->setAdvanced('role_'.$role->id);

View file

@ -59,12 +59,15 @@
if (!empty($CFG->coursecontact)) { if (!empty($CFG->coursecontact)) {
$coursecontactroles = explode(',', $CFG->coursecontact); $coursecontactroles = explode(',', $CFG->coursecontact);
foreach ($coursecontactroles as $roleid) { foreach ($coursecontactroles as $roleid) {
$role = $DB->get_record('role', array('id'=>$roleid));
$roleid = (int) $roleid;
if ($users = get_role_users($roleid, $context, true)) { if ($users = get_role_users($roleid, $context, true)) {
foreach ($users as $teacher) { foreach ($users as $teacher) {
$role = new stdClass();
$role->id = $teacher->roleid;
$role->name = $teacher->rolename;
$role->shortname = $teacher->roleshortname;
$role->coursealias = $teacher->rolecoursealias;
$fullname = fullname($teacher, has_capability('moodle/site:viewfullnames', $context)); $fullname = fullname($teacher, has_capability('moodle/site:viewfullnames', $context));
$namesarray[] = format_string(role_get_name($role, $context)).': <a href="'.$CFG->wwwroot.'/user/view.php?id='. $namesarray[] = role_get_name($role, $context).': <a href="'.$CFG->wwwroot.'/user/view.php?id='.
$teacher->id.'&amp;course='.SITEID.'">'.$fullname.'</a>'; $teacher->id.'&amp;course='.SITEID.'">'.$fullname.'</a>';
} }
} }

View file

@ -2530,32 +2530,26 @@ function print_course($course, $highlightterms = '') {
/// first find all roles that are supposed to be displayed /// first find all roles that are supposed to be displayed
if (!empty($CFG->coursecontact)) { if (!empty($CFG->coursecontact)) {
$managerroles = explode(',', $CFG->coursecontact); $managerroles = explode(',', $CFG->coursecontact);
$namesarray = array();
$rusers = array(); $rusers = array();
if (!isset($course->managers)) { if (!isset($course->managers)) {
$rusers = get_role_users($managerroles, $context, true, $rusers = get_role_users($managerroles, $context, true,
'ra.id AS raid, u.id, u.username, u.firstname, u.lastname, 'ra.id AS raid, u.id, u.username, u.firstname, u.lastname, rn.name AS rolecoursealias,
r.name AS rolename, r.sortorder, r.id AS roleid', r.name AS rolename, r.sortorder, r.id AS roleid, r.shortname AS roleshortname',
'r.sortorder ASC, u.lastname ASC'); 'r.sortorder ASC, u.lastname ASC');
} else { } else {
// use the managers array if we have it for perf reasosn // use the managers array if we have it for perf reasosn
// populate the datastructure like output of get_role_users(); // populate the datastructure like output of get_role_users();
foreach ($course->managers as $manager) { foreach ($course->managers as $manager) {
$u = new stdClass(); $user = clone($manager->user);
$u = $manager->user; $user->roleid = $manager->roleid;
$u->roleid = $manager->roleid; $user->rolename = $manager->rolename;
$u->rolename = $manager->rolename; $user->roleshortname = $manager->roleshortname;
$user->rolecoursealias = $manager->rolecoursealias;
$rusers[] = $u; $rusers[$user->id] = $user;
} }
} }
/// Rename some of the role names if needed
if (isset($context)) {
$aliasnames = $DB->get_records('role_names', array('contextid'=>$context->id), '', 'roleid,contextid,name');
}
$namesarray = array(); $namesarray = array();
$canviewfullnames = has_capability('moodle/site:viewfullnames', $context); $canviewfullnames = has_capability('moodle/site:viewfullnames', $context);
foreach ($rusers as $ra) { foreach ($rusers as $ra) {
@ -2564,12 +2558,15 @@ function print_course($course, $highlightterms = '') {
continue; continue;
} }
if (isset($aliasnames[$ra->roleid])) { $role = new stdClass();
$ra->rolename = $aliasnames[$ra->roleid]->name; $role->id = $ra->roleid;
} $role->name = $ra->rolename;
$role->shortname = $ra->roleshortname;
$role->coursealias = $ra->rolecoursealias;
$rolename = role_get_name($role, $context, ROLENAME_ALIAS);
$fullname = fullname($ra, $canviewfullnames); $fullname = fullname($ra, $canviewfullnames);
$namesarray[$ra->id] = format_string($ra->rolename).': '. $namesarray[$ra->id] = $rolename.': '.
html_writer::link(new moodle_url('/user/view.php', array('id'=>$ra->id, 'course'=>SITEID)), $fullname); html_writer::link(new moodle_url('/user/view.php', array('id'=>$ra->id, 'course'=>SITEID)), $fullname);
} }

View file

@ -44,10 +44,10 @@ if ($ADMIN->fulltree) {
if (!during_initial_install()) { if (!during_initial_install()) {
$settings->add(new admin_setting_heading('enrol_flatfile_mapping', get_string('mapping', 'enrol_flatfile'), '')); $settings->add(new admin_setting_heading('enrol_flatfile_mapping', get_string('mapping', 'enrol_flatfile'), ''));
$roles = $DB->get_records('role', null, '', 'id, name, shortname'); $roles = role_fix_names(get_all_roles());
foreach ($roles as $id => $record) { foreach ($roles as $id => $role) {
$settings->add(new admin_setting_configtext('enrol_flatfile/map_'.$id, format_string($record->name), '', format_string($record->shortname))); $settings->add(new admin_setting_configtext('enrol_flatfile/map_'.$id, $role->localname, '', $role->shortname));
} }
} }
} }

View file

@ -89,13 +89,13 @@ class admin_setting_ldap_rolemapping extends admin_setting {
* @return mixed null if null, else an array * @return mixed null if null, else an array
*/ */
public function get_setting() { public function get_setting() {
$roles = get_all_roles(); $roles = role_fix_names(get_all_roles());
$result = array(); $result = array();
foreach ($roles as $role) { foreach ($roles as $role) {
$contexts = $this->config_read('contexts_role'.$role->id); $contexts = $this->config_read('contexts_role'.$role->id);
$memberattribute = $this->config_read('memberattribute_role'.$role->id); $memberattribute = $this->config_read('memberattribute_role'.$role->id);
$result[] = array('id' => $role->id, $result[] = array('id' => $role->id,
'name' => $role->name, 'name' => $role->localname,
'contexts' => $contexts, 'contexts' => $contexts,
'memberattribute' => $memberattribute); 'memberattribute' => $memberattribute);
} }

View file

@ -450,7 +450,7 @@ class course_enrolment_manager {
*/ */
public function get_all_roles() { public function get_all_roles() {
if ($this->_roles === null) { if ($this->_roles === null) {
$this->_roles = role_fix_names(get_all_roles(), $this->context); $this->_roles = role_fix_names(get_all_roles($this->context), $this->context);
} }
return $this->_roles; return $this->_roles;
} }

View file

@ -31,11 +31,7 @@ if ($ADMIN->fulltree) {
$settings->add(new admin_setting_heading('enrol_meta_settings', '', get_string('pluginname_desc', 'enrol_meta'))); $settings->add(new admin_setting_heading('enrol_meta_settings', '', get_string('pluginname_desc', 'enrol_meta')));
if (!during_initial_install()) { if (!during_initial_install()) {
$allroles = array(); $allroles = role_fix_names(get_all_roles(), null, ROLENAME_ORIGINALANDSHORT, true);
foreach (get_all_roles() as $role) {
$rolename = strip_tags(format_string($role->name)) . ' ('. $role->shortname . ')';
$allroles[$role->id] = $rolename;
}
$settings->add(new admin_setting_configmultiselect('enrol_meta/nosyncroleids', get_string('nosyncroleids', 'enrol_meta'), get_string('nosyncroleids_desc', 'enrol_meta'), array(), $allroles)); $settings->add(new admin_setting_configmultiselect('enrol_meta/nosyncroleids', get_string('nosyncroleids', 'enrol_meta'), get_string('nosyncroleids_desc', 'enrol_meta'), array(), $allroles));
$settings->add(new admin_setting_configcheckbox('enrol_meta/syncall', get_string('syncall', 'enrol_meta'), get_string('syncall_desc', 'enrol_meta'), 1)); $settings->add(new admin_setting_configcheckbox('enrol_meta/syncall', get_string('syncall', 'enrol_meta'), get_string('syncall_desc', 'enrol_meta'), 1));

View file

@ -161,18 +161,17 @@ class enrol_self_edit_form extends moodleform {
* Gets a list of roles that this user can assign for the course as the default for self-enrolment * Gets a list of roles that this user can assign for the course as the default for self-enrolment
* *
* @param context $context the context. * @param context $context the context.
* @param integer $defaultrole the id of the role that is set as the default for self-enrolement * @param integer $defaultrole the id of the role that is set as the default for self-enrolment
* @return array index is the role id, value is the role name * @return array index is the role id, value is the role name
*/ */
function extend_assignable_roles($context, $defaultrole) { function extend_assignable_roles($context, $defaultrole) {
global $DB; global $DB;
$roles = get_assignable_roles($context);
$sql = "SELECT r.id, r.name $roles = get_assignable_roles($context, ROLENAME_BOTH);
FROM {role} r if (!isset($roles[$defaultrole])) {
WHERE r.id = $defaultrole"; if ($role = $DB->get_record('role', array('id'=>$defaultrole))) {
$results = $DB->get_record_sql($sql); $roles[$defaultrole] = role_get_name($role, $context, ROLENAME_BOTH);
if (isset($results->name)) { }
$roles[$results->id] = $results->name;
} }
return $roles; return $roles;
} }

View file

@ -2,6 +2,13 @@ This files describes API changes in /enrol/* - plugins,
information provided here is intended especially for developers. information provided here is intended especially for developers.
=== 2.4 ===
required changes in code:
* use role_get_name() or role_fix_names() if you need any role names, using role.name
directly from database is not correct any more
=== 2.2 === === 2.2 ===
required changes in code: required changes in code:

View file

@ -55,13 +55,8 @@ $strautocreategroups = get_string('autocreategroups', 'group');
$preview = ''; $preview = '';
$error = ''; $error = '';
/// Get applicable roles /// Get applicable roles - used in menus etc later on
$rolenames = array(); $rolenames = role_fix_names(get_profile_roles($context), $context, ROLENAME_ALIAS, true);
if ($roles = get_profile_roles($context)) {
foreach ($roles as $role) {
$rolenames[$role->id] = strip_tags(role_get_name($role, $context)); // Used in menus etc later on
}
}
/// Create the form /// Create the form
$editform = new autogroup_form(null, array('roles' => $rolenames)); $editform = new autogroup_form(null, array('roles' => $rolenames));

View file

@ -695,8 +695,7 @@ function groups_get_members_by_role($groupid, $courseid, $fields='u.*',
$extrawheretest = ' AND ' . $extrawheretest; $extrawheretest = ' AND ' . $extrawheretest;
} }
$sql = "SELECT r.id AS roleid, r.shortname AS roleshortname, r.name AS rolename, $sql = "SELECT r.id AS roleid, u.id AS userid, $fields
u.id AS userid, $fields
FROM {groups_members} gm FROM {groups_members} gm
JOIN {user} u ON u.id = gm.userid JOIN {user} u ON u.id = gm.userid
LEFT JOIN {role_assignments} ra ON (ra.userid = u.id AND ra.contextid ".get_related_contexts_string($context).") LEFT JOIN {role_assignments} ra ON (ra.userid = u.id AND ra.contextid ".get_related_contexts_string($context).")
@ -726,8 +725,7 @@ function groups_calculate_role_people($rs, $context) {
return array(); return array();
} }
$roles = $DB->get_records_menu('role', null, 'name', 'id, name'); $allroles = role_fix_names(get_all_roles($context), $context);
$aliasnames = role_fix_names($roles, $context);
// Array of all involved roles // Array of all involved roles
$roles = array(); $roles = array();
@ -753,15 +751,12 @@ function groups_calculate_role_people($rs, $context) {
// If user has a role... // If user has a role...
if (!is_null($rec->roleid)) { if (!is_null($rec->roleid)) {
// Create information about role if this is a new one // Create information about role if this is a new one
if (!array_key_exists($rec->roleid,$roles)) { if (!array_key_exists($rec->roleid, $roles)) {
$role = $allroles[$rec->roleid];
$roledata = new stdClass(); $roledata = new stdClass();
$roledata->id = $rec->roleid; $roledata->id = $role->id;
$roledata->shortname = $rec->roleshortname; $roledata->shortname = $role->shortname;
if (array_key_exists($rec->roleid, $aliasnames)) { $roledata->name = $role->localname;
$roledata->name = $aliasnames[$rec->roleid];
} else {
$roledata->name = $rec->rolename;
}
$roledata->users = array(); $roledata->users = array();
$roles[$roledata->id] = $roledata; $roles[$roledata->id] = $roledata;
} }

View file

@ -147,6 +147,10 @@ $string['createrolebycopying'] = 'Create a new role by copying {$a}';
$string['createthisrole'] = 'Create this role'; $string['createthisrole'] = 'Create this role';
$string['currentcontext'] = 'Current context'; $string['currentcontext'] = 'Current context';
$string['currentrole'] = 'Current role'; $string['currentrole'] = 'Current role';
$string['customroledescription'] = 'Custom description';
$string['customroledescription_help'] = 'Descriptions of standard roles are localised automatically if the custom description is empty.';
$string['customrolename'] = 'Custom full name';
$string['customrolename_help'] = 'Names of standard roles are localised automatically if the custom name is empty. You must provide full name for all custom roles.';
$string['defaultrole'] = 'Default role'; $string['defaultrole'] = 'Default role';
$string['defaultx'] = 'Default: {$a}'; $string['defaultx'] = 'Default: {$a}';
$string['defineroles'] = 'Define roles'; $string['defineroles'] = 'Define roles';
@ -312,6 +316,7 @@ $string['roles_link'] = 'roles';
$string['role:safeoverride'] = 'Override safe permissions for others'; $string['role:safeoverride'] = 'Override safe permissions for others';
$string['roleselect'] = 'Select role'; $string['roleselect'] = 'Select role';
$string['roleshortname'] = 'Short name'; $string['roleshortname'] = 'Short name';
$string['roleshortname_help'] = 'Role short name is a low level role identifier, only ASCII alphanumeric characters are allowed. Do not change short names of standard roles.';
$string['role:switchroles'] = 'Switch to other roles'; $string['role:switchroles'] = 'Switch to other roles';
$string['roletoassign'] = 'Role to assign'; $string['roletoassign'] = 'Role to assign';
$string['roletooverride'] = 'Role to override'; $string['roletooverride'] = 'Role to override';

View file

@ -168,9 +168,9 @@ define('RISK_SPAM', 0x0010);
/** capability allows mass delete of data belonging to other users - see {@link http://docs.moodle.org/dev/Hardening_new_Roles_system} */ /** capability allows mass delete of data belonging to other users - see {@link http://docs.moodle.org/dev/Hardening_new_Roles_system} */
define('RISK_DATALOSS', 0x0020); define('RISK_DATALOSS', 0x0020);
/** rolename displays - the name as defined in the role definition */ /** rolename displays - the name as defined in the role definition, localised if name empty */
define('ROLENAME_ORIGINAL', 0); define('ROLENAME_ORIGINAL', 0);
/** rolename displays - the name as defined by a role alias */ /** rolename displays - the name as defined by a role alias at the course level, falls back to ROLENAME_ORIGINAL if alias not present */
define('ROLENAME_ALIAS', 1); define('ROLENAME_ALIAS', 1);
/** rolename displays - Both, like this: Role alias (Original) */ /** rolename displays - Both, like this: Role alias (Original) */
define('ROLENAME_BOTH', 2); define('ROLENAME_BOTH', 2);
@ -2840,8 +2840,15 @@ function get_profile_roles(context $context) {
list($contextlist, $cparams) = $DB->get_in_or_equal($context->get_parent_context_ids(true), SQL_PARAMS_NAMED, 'p'); list($contextlist, $cparams) = $DB->get_in_or_equal($context->get_parent_context_ids(true), SQL_PARAMS_NAMED, 'p');
$params = array_merge($params, $cparams); $params = array_merge($params, $cparams);
$sql = "SELECT DISTINCT r.id, r.name, r.shortname, r.sortorder if ($coursecontext = $context->get_course_context(false)) {
$params['coursecontext'] = $coursecontext->id;
} else {
$params['coursecontext'] = 0;
}
$sql = "SELECT DISTINCT r.id, r.name, r.shortname, r.sortorder, rn.name AS coursealias
FROM {role_assignments} ra, {role} r FROM {role_assignments} ra, {role} r
LEFT JOIN {role_names} rn ON (rn.contextid = :coursecontext AND rn.roleid = r.id)
WHERE r.id = ra.roleid WHERE r.id = ra.roleid
AND ra.contextid $contextlist AND ra.contextid $contextlist
AND r.id $rallowed AND r.id $rallowed
@ -2859,10 +2866,17 @@ function get_profile_roles(context $context) {
function get_roles_used_in_context(context $context) { function get_roles_used_in_context(context $context) {
global $DB; global $DB;
list($contextlist, $params) = $DB->get_in_or_equal($context->get_parent_context_ids(true)); list($contextlist, $params) = $DB->get_in_or_equal($context->get_parent_context_ids(true), SQL_PARAMS_NAMED, 'cl');
$sql = "SELECT DISTINCT r.id, r.name, r.shortname, r.sortorder if ($coursecontext = $context->get_course_context(false)) {
$params['coursecontext'] = $coursecontext->id;
} else {
$params['coursecontext'] = 0;
}
$sql = "SELECT DISTINCT r.id, r.name, r.shortname, r.sortorder, rn.name AS coursealias
FROM {role_assignments} ra, {role} r FROM {role_assignments} ra, {role} r
LEFT JOIN {role_names} rn ON (rn.contextid = :coursecontext AND rn.roleid = r.id)
WHERE r.id = ra.roleid WHERE r.id = ra.roleid
AND ra.contextid $contextlist AND ra.contextid $contextlist
ORDER BY r.sortorder ASC"; ORDER BY r.sortorder ASC";
@ -2900,8 +2914,15 @@ function get_user_roles_in_course($userid, $courseid) {
list($contextlist, $cparams) = $DB->get_in_or_equal($context->get_parent_context_ids(true), SQL_PARAMS_NAMED, 'p'); list($contextlist, $cparams) = $DB->get_in_or_equal($context->get_parent_context_ids(true), SQL_PARAMS_NAMED, 'p');
$params = array_merge($params, $cparams); $params = array_merge($params, $cparams);
$sql = "SELECT DISTINCT r.id, r.name, r.shortname, r.sortorder if ($coursecontext = $context->get_course_context(false)) {
$params['coursecontext'] = $coursecontext->id;
} else {
$params['coursecontext'] = 0;
}
$sql = "SELECT DISTINCT r.id, r.name, r.shortname, r.sortorder, rn.name AS coursealias
FROM {role_assignments} ra, {role} r FROM {role_assignments} ra, {role} r
LEFT JOIN {role_names} rn ON (rn.contextid = :coursecontext AND rn.roleid = r.id)
WHERE r.id = ra.roleid WHERE r.id = ra.roleid
AND ra.contextid $contextlist AND ra.contextid $contextlist
AND r.id $rallowed AND r.id $rallowed
@ -2912,11 +2933,7 @@ function get_user_roles_in_course($userid, $courseid) {
$rolestring = ''; $rolestring = '';
if ($roles = $DB->get_records_sql($sql, $params)) { if ($roles = $DB->get_records_sql($sql, $params)) {
foreach ($roles as $userrole) { $rolenames = role_fix_names($roles, $context, ROLENAME_ALIAS, true); // Substitute aliases
$rolenames[$userrole->id] = $userrole->name;
}
$rolenames = role_fix_names($rolenames, $context); // Substitute aliases
foreach ($rolenames as $roleid => $rolename) { foreach ($rolenames as $roleid => $rolename) {
$rolenames[$roleid] = '<a href="'.$CFG->wwwroot.'/user/index.php?contextid='.$context->id.'&amp;roleid='.$roleid.'">'.$rolename.'</a>'; $rolenames[$roleid] = '<a href="'.$CFG->wwwroot.'/user/index.php?contextid='.$context->id.'&amp;roleid='.$roleid.'">'.$rolename.'</a>';
@ -2958,11 +2975,26 @@ function user_can_assign(context $context, $targetroleid) {
/** /**
* Returns all site roles in correct sort order. * Returns all site roles in correct sort order.
* *
* @return array * @param context $context optional context for course role name aliases
* @return array of role records with optional coursealias property
*/ */
function get_all_roles() { function get_all_roles(context $context = null) {
global $DB; global $DB;
return $DB->get_records('role', null, 'sortorder ASC');
if (!$context or !$coursecontext = $context->get_course_context(false)) {
$coursecontext = null;
}
if ($coursecontext) {
$sql = "SELECT r.*, rn.name AS coursealias
FROM {role} r
LEFT JOIN {role_names} rn ON (rn.contextid = :coursecontext AND rn.roleid = r.id)
ORDER BY r.sortorder ASC";
return $DB->get_records_sql($sql, array('coursecontext'=>$coursecontext->id));
} else {
return $DB->get_records('role', array(), 'sortorder ASC');
}
} }
/** /**
@ -3098,14 +3130,8 @@ function get_assignable_roles(context $context, $rolenamedisplay = ROLENAME_ALIA
} }
} }
$parents = $context->get_parent_context_ids(true);
$contexts = implode(',' , $parents);
$params = array(); $params = array();
$extrafields = ''; $extrafields = '';
if ($rolenamedisplay == ROLENAME_ORIGINALANDSHORT or $rolenamedisplay == ROLENAME_SHORT) {
$extrafields .= ', r.shortname';
}
if ($withusercounts) { if ($withusercounts) {
$extrafields = ', (SELECT count(u.id) $extrafields = ', (SELECT count(u.id)
@ -3119,6 +3145,8 @@ function get_assignable_roles(context $context, $rolenamedisplay = ROLENAME_ALIA
// show all roles allowed in this context to admins // show all roles allowed in this context to admins
$assignrestriction = ""; $assignrestriction = "";
} else { } else {
$parents = $context->get_parent_context_ids(true);
$contexts = implode(',' , $parents);
$assignrestriction = "JOIN (SELECT DISTINCT raa.allowassign AS id $assignrestriction = "JOIN (SELECT DISTINCT raa.allowassign AS id
FROM {role_allow_assign} raa FROM {role_allow_assign} raa
JOIN {role_assignments} ra ON ra.roleid = raa.roleid JOIN {role_assignments} ra ON ra.roleid = raa.roleid
@ -3127,28 +3155,22 @@ function get_assignable_roles(context $context, $rolenamedisplay = ROLENAME_ALIA
$params['userid'] = $userid; $params['userid'] = $userid;
} }
$params['contextlevel'] = $context->contextlevel; $params['contextlevel'] = $context->contextlevel;
$sql = "SELECT r.id, r.name $extrafields
if ($coursecontext = $context->get_course_context(false)) {
$params['coursecontext'] = $coursecontext->id;
} else {
$params['coursecontext'] = 0; // no course aliases
$coursecontext = null;
}
$sql = "SELECT r.id, r.name, r.shortname, rn.name AS coursealias $extrafields
FROM {role} r FROM {role} r
$assignrestriction $assignrestriction
JOIN {role_context_levels} rcl ON r.id = rcl.roleid JOIN {role_context_levels} rcl ON (rcl.contextlevel = :contextlevel AND r.id = rcl.roleid)
WHERE rcl.contextlevel = :contextlevel LEFT JOIN {role_names} rn ON (rn.contextid = :coursecontext AND rn.roleid = r.id)
ORDER BY r.sortorder ASC"; ORDER BY r.sortorder ASC";
$roles = $DB->get_records_sql($sql, $params); $roles = $DB->get_records_sql($sql, $params);
$rolenames = array(); $rolenames = role_fix_names($roles, $coursecontext, $rolenamedisplay, true);
foreach ($roles as $role) {
if ($rolenamedisplay == ROLENAME_SHORT) {
$rolenames[$role->id] = $role->shortname;
continue;
}
$rolenames[$role->id] = $role->name;
if ($rolenamedisplay == ROLENAME_ORIGINALANDSHORT) {
$rolenames[$role->id] .= ' (' . $role->shortname . ')';
}
}
if ($rolenamedisplay != ROLENAME_ORIGINALANDSHORT and $rolenamedisplay != ROLENAME_SHORT) {
$rolenames = role_fix_names($rolenames, $context, $rolenamedisplay);
}
if (!$withusercounts) { if (!$withusercounts) {
return $rolenames; return $rolenames;
@ -3192,17 +3214,25 @@ function get_switchable_roles(context $context) {
$params['userid'] = $USER->id; $params['userid'] = $USER->id;
} }
if ($coursecontext = $context->get_course_context(false)) {
$params['coursecontext'] = $coursecontext->id;
} else {
$params['coursecontext'] = 0; // no course aliases
$coursecontext = null;
}
$query = " $query = "
SELECT r.id, r.name SELECT r.id, r.name, r.shortname, rn.name AS coursealias
FROM (SELECT DISTINCT rc.roleid FROM (SELECT DISTINCT rc.roleid
FROM {role_capabilities} rc FROM {role_capabilities} rc
$extrajoins $extrajoins
$extrawhere) idlist $extrawhere) idlist
JOIN {role} r ON r.id = idlist.roleid JOIN {role} r ON r.id = idlist.roleid
LEFT JOIN {role_names} rn ON (rn.contextid = :coursecontext AND rn.roleid = r.id)
ORDER BY r.sortorder"; ORDER BY r.sortorder";
$roles = $DB->get_records_sql($query, $params);
$rolenames = $DB->get_records_sql_menu($query, $params); return role_fix_names($roles, $context, ROLENAME_ALIAS, true);
return role_fix_names($rolenames, $context, ROLENAME_ALIAS);
} }
/** /**
@ -3232,9 +3262,6 @@ function get_overridable_roles(context $context, $rolenamedisplay = ROLENAME_ALI
$params = array(); $params = array();
$extrafields = ''; $extrafields = '';
if ($rolenamedisplay == ROLENAME_ORIGINALANDSHORT) {
$extrafields .= ', ro.shortname';
}
$params['userid'] = $USER->id; $params['userid'] = $USER->id;
if ($withcounts) { if ($withcounts) {
@ -3243,16 +3270,24 @@ function get_overridable_roles(context $context, $rolenamedisplay = ROLENAME_ALI
$params['conid'] = $context->id; $params['conid'] = $context->id;
} }
if ($coursecontext = $context->get_course_context(false)) {
$params['coursecontext'] = $coursecontext->id;
} else {
$params['coursecontext'] = 0; // no course aliases
$coursecontext = null;
}
if (is_siteadmin()) { if (is_siteadmin()) {
// show all roles to admins // show all roles to admins
$roles = $DB->get_records_sql(" $roles = $DB->get_records_sql("
SELECT ro.id, ro.name$extrafields SELECT ro.id, ro.name, ro.shortname, rn.name AS coursealias $extrafields
FROM {role} ro FROM {role} ro
LEFT JOIN {role_names} rn ON (rn.contextid = :coursecontext AND rn.roleid = ro.id)
ORDER BY ro.sortorder ASC", $params); ORDER BY ro.sortorder ASC", $params);
} else { } else {
$roles = $DB->get_records_sql(" $roles = $DB->get_records_sql("
SELECT ro.id, ro.name$extrafields SELECT ro.id, ro.name, ro.shortname, rn.name AS coursealias $extrafields
FROM {role} ro FROM {role} ro
JOIN (SELECT DISTINCT r.id JOIN (SELECT DISTINCT r.id
FROM {role} r FROM {role} r
@ -3260,23 +3295,15 @@ function get_overridable_roles(context $context, $rolenamedisplay = ROLENAME_ALI
JOIN {role_assignments} ra ON rao.roleid = ra.roleid JOIN {role_assignments} ra ON rao.roleid = ra.roleid
WHERE ra.userid = :userid AND ra.contextid IN ($contexts) WHERE ra.userid = :userid AND ra.contextid IN ($contexts)
) inline_view ON ro.id = inline_view.id ) inline_view ON ro.id = inline_view.id
LEFT JOIN {role_names} rn ON (rn.contextid = :coursecontext AND rn.roleid = ro.id)
ORDER BY ro.sortorder ASC", $params); ORDER BY ro.sortorder ASC", $params);
} }
$rolenames = array(); $rolenames = role_fix_names($roles, $context, $rolenamedisplay, true);
foreach ($roles as $role) {
$rolenames[$role->id] = $role->name;
if ($rolenamedisplay == ROLENAME_ORIGINALANDSHORT) {
$rolenames[$role->id] .= ' (' . $role->shortname . ')';
}
}
if ($rolenamedisplay != ROLENAME_ORIGINALANDSHORT) {
$rolenames = role_fix_names($rolenames, $context, $rolenamedisplay);
}
if (!$withcounts) { if (!$withcounts) {
return $rolenames; return $rolenames;
} }
$rolecounts = array(); $rolecounts = array();
$nameswithcounts = array(); $nameswithcounts = array();
@ -3300,22 +3327,31 @@ function get_default_enrol_roles(context $context, $addroleid = null) {
global $DB; global $DB;
$params = array('contextlevel'=>CONTEXT_COURSE); $params = array('contextlevel'=>CONTEXT_COURSE);
if ($coursecontext = $context->get_course_context(false)) {
$params['coursecontext'] = $coursecontext->id;
} else {
$params['coursecontext'] = 0; // no course names
$coursecontext = null;
}
if ($addroleid) { if ($addroleid) {
$addrole = "OR r.id = :addroleid"; $addrole = "OR r.id = :addroleid";
$params['addroleid'] = $addroleid; $params['addroleid'] = $addroleid;
} else { } else {
$addrole = ""; $addrole = "";
} }
$sql = "SELECT r.id, r.name
$sql = "SELECT r.id, r.name, r.shortname, rn.name AS coursealias
FROM {role} r FROM {role} r
LEFT JOIN {role_context_levels} rcl ON (rcl.roleid = r.id AND rcl.contextlevel = :contextlevel) LEFT JOIN {role_context_levels} rcl ON (rcl.roleid = r.id AND rcl.contextlevel = :contextlevel)
LEFT JOIN {role_names} rn ON (rn.contextid = :coursecontext AND rn.roleid = r.id)
WHERE rcl.id IS NOT NULL $addrole WHERE rcl.id IS NOT NULL $addrole
ORDER BY sortorder DESC"; ORDER BY sortorder DESC";
$roles = $DB->get_records_sql_menu($sql, $params); $roles = $DB->get_records_sql($sql, $params);
$roles = role_fix_names($roles, $context, ROLENAME_BOTH);
return $roles; return role_fix_names($roles, $context, ROLENAME_BOTH, true);
} }
/** /**
@ -3776,7 +3812,8 @@ function get_role_users($roleid, context $context, $parent = false, $fields = ''
$fields = 'u.id, u.confirmed, u.username, u.firstname, u.lastname, '. $fields = 'u.id, u.confirmed, u.username, u.firstname, u.lastname, '.
'u.maildisplay, u.mailformat, u.maildigest, u.email, u.emailstop, u.city, '. 'u.maildisplay, u.mailformat, u.maildigest, u.email, u.emailstop, u.city, '.
'u.country, u.picture, u.idnumber, u.department, u.institution, '. 'u.country, u.picture, u.idnumber, u.department, u.institution, '.
'u.lang, u.timezone, u.lastaccess, u.mnethostid, r.name AS rolename, r.sortorder'; 'u.lang, u.timezone, u.lastaccess, u.mnethostid, r.name AS rolename, r.sortorder, '.
'r.shortname AS roleshortname, rn.name AS rolecoursealias';
} }
$parentcontexts = ''; $parentcontexts = '';
@ -3789,23 +3826,29 @@ function get_role_users($roleid, context $context, $parent = false, $fields = ''
} }
if ($roleid) { if ($roleid) {
list($rids, $params) = $DB->get_in_or_equal($roleid, SQL_PARAMS_QM); list($rids, $params) = $DB->get_in_or_equal($roleid, SQL_PARAMS_NAMED, 'r');
$roleselect = "AND ra.roleid $rids"; $roleselect = "AND ra.roleid $rids";
} else { } else {
$params = array(); $params = array();
$roleselect = ''; $roleselect = '';
} }
if ($coursecontext = $context->get_course_context(false)) {
$params['coursecontext'] = $coursecontext->id;
} else {
$params['coursecontext'] = 0;
}
if ($group) { if ($group) {
$groupjoin = "JOIN {groups_members} gm ON gm.userid = u.id"; $groupjoin = "JOIN {groups_members} gm ON gm.userid = u.id";
$groupselect = " AND gm.groupid = ? "; $groupselect = " AND gm.groupid = :groupid ";
$params[] = $group; $params['groupid'] = $group;
} else { } else {
$groupjoin = ''; $groupjoin = '';
$groupselect = ''; $groupselect = '';
} }
array_unshift($params, $context->id); $params['contextid'] = $context->id;
if ($extrawheretest) { if ($extrawheretest) {
$extrawheretest = ' AND ' . $extrawheretest; $extrawheretest = ' AND ' . $extrawheretest;
@ -3816,8 +3859,9 @@ function get_role_users($roleid, context $context, $parent = false, $fields = ''
FROM {role_assignments} ra FROM {role_assignments} ra
JOIN {user} u ON u.id = ra.userid JOIN {user} u ON u.id = ra.userid
JOIN {role} r ON ra.roleid = r.id JOIN {role} r ON ra.roleid = r.id
LEFT JOIN {role_names} rn ON (rn.contextid = :coursecontext AND rn.roleid = r.id)
$groupjoin $groupjoin
WHERE (ra.contextid = ? $parentcontexts) WHERE (ra.contextid = :contextid $parentcontexts)
$roleselect $roleselect
$groupselect $groupselect
$extrawheretest $extrawheretest
@ -4123,75 +4167,175 @@ function user_has_role_assignment($userid, $roleid, $contextid = 0) {
* Get role name or alias if exists and format the text. * Get role name or alias if exists and format the text.
* *
* @param stdClass $role role object * @param stdClass $role role object
* @param context_course $coursecontext * - optional 'coursealias' property should be included for performance reasons if course context used
* @return string name of role in course context * - description property is not required here
* @param context|bool $context empty means system context
* @param int $rolenamedisplay type of role name
* @return string localised role name or course role name alias
*/ */
function role_get_name($role, context_course $coursecontext) { function role_get_name(stdClass $role, $context = null, $rolenamedisplay = ROLENAME_ALIAS) {
global $DB; global $DB;
if ($rolenamedisplay == ROLENAME_SHORT) {
return $role->shortname;
}
if (!$context or !$coursecontext = $context->get_course_context(false)) {
$coursecontext = null;
}
if ($coursecontext and !property_exists($role, 'coursealias') and ($rolenamedisplay == ROLENAME_ALIAS or $rolenamedisplay == ROLENAME_BOTH or $rolenamedisplay == ROLENAME_ALIAS_RAW)) {
$role = clone($role); // Do not modify parameters.
if ($r = $DB->get_record('role_names', array('roleid'=>$role->id, 'contextid'=>$coursecontext->id))) { if ($r = $DB->get_record('role_names', array('roleid'=>$role->id, 'contextid'=>$coursecontext->id))) {
return strip_tags(format_string($r->name)); $role->coursealias = $r->name;
} else { } else {
return strip_tags(format_string($role->name)); $role->coursealias = null;
}
}
if ($rolenamedisplay == ROLENAME_ALIAS_RAW) {
if ($coursecontext) {
return $role->coursealias;
} else {
return null;
}
}
if (trim($role->name) !== '') {
// For filtering always use context where was the thing defined - system for roles here.
$original = format_string($role->name, true, array('context'=>context_system::instance()));
} else {
// Empty role->name means we want to see localised role name based on shortname,
// only default roles are supposed to be localised.
switch ($role->shortname) {
case 'manager': $original = get_string('manager', 'role'); break;
case 'coursecreator': $original = get_string('coursecreators'); break;
case 'editingteacher': $original = get_string('defaultcourseteacher'); break;
case 'teacher': $original = get_string('noneditingteacher'); break;
case 'student': $original = get_string('defaultcoursestudent'); break;
case 'guest': $original = get_string('guest'); break;
case 'user': $original = get_string('authenticateduser'); break;
case 'frontpage': $original = get_string('frontpageuser', 'role'); break;
// We should not get here, the role UI should require the name for custom roles!
default: $original = $role->shortname; break;
}
}
if ($rolenamedisplay == ROLENAME_ORIGINAL) {
return $original;
}
if ($rolenamedisplay == ROLENAME_ORIGINALANDSHORT) {
return "$original ($role->shortname)";
}
if ($rolenamedisplay == ROLENAME_ALIAS) {
if ($coursecontext and trim($role->coursealias) !== '') {
return format_string($role->coursealias, true, array('context'=>$coursecontext));
} else {
return $original;
}
}
if ($rolenamedisplay == ROLENAME_BOTH) {
if ($coursecontext and trim($role->coursealias) !== '') {
return format_string($role->coursealias, true, array('context'=>$coursecontext)) . " ($original)";
} else {
return $original;
}
}
throw new coding_exception('Invalid $rolenamedisplay parameter specified in role_get_name()');
}
/**
* Returns localised role description if available.
* If the name is empty it tries to find the default role name using
* hardcoded list of default role names or other methods in the future.
*
* @param stdClass $role
* @return string localised role name
*/
function role_get_description(stdClass $role) {
if (!html_is_blank($role->description)) {
return format_text($role->description, FORMAT_HTML, array('context'=>context_system::instance()));
}
switch ($role->shortname) {
case 'manager': return get_string('managerdescription', 'role');
case 'coursecreator': return get_string('coursecreatorsdescription');
case 'editingteacher': return get_string('defaultcourseteacherdescription');
case 'teacher': return get_string('noneditingteacherdescription');
case 'student': return get_string('defaultcoursestudentdescription');
case 'guest': return get_string('guestdescription');
case 'user': return get_string('authenticateduserdescription');
case 'frontpage': return get_string('frontpageuserdescription', 'role');
default: return '';
} }
} }
/** /**
* Prepare list of roles for display, apply aliases and format text * Prepare list of roles for display, apply aliases and format text
* *
* @param array $roleoptions array roleid => rolename or roleid => roleobject * @param array $roleoptions array roleid => roleobject (with optional coursealias), strings are accepted for backwards compatibility only
* @param context $context a context * @param context|bool $context a context
* @param int $rolenamedisplay * @param int $rolenamedisplay
* @param bool $returnmenu null means keep the same format as $roleoptions, true means id=>localname, false means id=>rolerecord
* @return array Array of context-specific role names, or role objects with a ->localname field added. * @return array Array of context-specific role names, or role objects with a ->localname field added.
*/ */
function role_fix_names($roleoptions, context $context, $rolenamedisplay = ROLENAME_ALIAS) { function role_fix_names($roleoptions, $context = null, $rolenamedisplay = ROLENAME_ALIAS, $returnmenu = null) {
global $DB; global $DB;
// Make sure we have a course context. if (empty($roleoptions)) {
$coursecontext = $context->get_course_context(false); return array();
// Make sure we are working with an array roleid => name. Normally we
// want to use the unlocalised name if the localised one is not present.
$newnames = array();
foreach ($roleoptions as $rid => $roleorname) {
if ($rolenamedisplay != ROLENAME_ALIAS_RAW) {
if (is_object($roleorname)) {
$newnames[$rid] = $roleorname->name;
} else {
$newnames[$rid] = $roleorname;
} }
} else {
$newnames[$rid] = ''; if (!$context or !$coursecontext = $context->get_course_context(false)) {
$coursecontext = null;
}
// We usually need all role columns...
$first = reset($roleoptions);
if ($returnmenu === null) {
$returnmenu = !is_object($first);
}
if (!is_object($first) or !property_exists($first, 'shortname')) {
$allroles = get_all_roles($context);
foreach ($roleoptions as $rid => $unused) {
$roleoptions[$rid] = $allroles[$rid];
} }
} }
// If necessary, get the localised names. // Inject coursealias if necessary.
if ($rolenamedisplay != ROLENAME_ORIGINAL && !empty($coursecontext->id)) { if ($coursecontext and ($rolenamedisplay == ROLENAME_ALIAS_RAW or $rolenamedisplay == ROLENAME_ALIAS or $rolenamedisplay == ROLENAME_BOTH)) {
// The get the relevant renames, and use them. $first = reset($roleoptions);
if (!property_exists($first, 'coursealias')) {
$aliasnames = $DB->get_records('role_names', array('contextid'=>$coursecontext->id)); $aliasnames = $DB->get_records('role_names', array('contextid'=>$coursecontext->id));
foreach ($aliasnames as $alias) { foreach ($aliasnames as $alias) {
if (isset($newnames[$alias->roleid])) { if (isset($roleoptions[$alias->roleid])) {
if ($rolenamedisplay == ROLENAME_ALIAS || $rolenamedisplay == ROLENAME_ALIAS_RAW) { $roleoptions[$alias->roleid]->coursealias = $alias->name;
$newnames[$alias->roleid] = $alias->name;
} else if ($rolenamedisplay == ROLENAME_BOTH) {
$newnames[$alias->roleid] = $alias->name . ' (' . $roleoptions[$alias->roleid] . ')';
} }
} }
} }
} }
// Finally, apply format_string and put the result in the right place. // Add localname property.
foreach ($roleoptions as $rid => $roleorname) { foreach ($roleoptions as $rid => $role) {
if ($rolenamedisplay != ROLENAME_ALIAS_RAW) { $roleoptions[$rid]->localname = role_get_name($role, $coursecontext, $rolenamedisplay);
$newnames[$rid] = strip_tags(format_string($newnames[$rid]));
}
if (is_object($roleorname)) {
$roleoptions[$rid]->localname = $newnames[$rid];
} else {
$roleoptions[$rid] = $newnames[$rid];
}
} }
if (!$returnmenu) {
return $roleoptions; return $roleoptions;
}
$menu = array();
foreach ($roleoptions as $rid => $role) {
$menu[$rid] = $role->localname;
}
return $menu;
} }
/** /**
@ -4404,19 +4548,14 @@ function get_role_names_with_caps_in_context($context, $capabilities) {
global $DB; global $DB;
$rolesthatcanrate = get_roles_with_caps_in_context($context, $capabilities); $rolesthatcanrate = get_roles_with_caps_in_context($context, $capabilities);
$allroles = $DB->get_records('role', null, 'sortorder DESC');
$allroles = array(); $roles = array();
$roles = $DB->get_records('role', null, 'sortorder DESC');
foreach ($roles as $roleid=>$role) {
$allroles[$roleid] = $role->name;
}
$rolenames = array();
foreach ($rolesthatcanrate as $r) { foreach ($rolesthatcanrate as $r) {
$rolenames[$r] = $allroles[$r]; $roles[$r] = $allroles[$r];
} }
$rolenames = role_fix_names($rolenames, $context);
return $rolenames; return role_fix_names($roles, $context, ROLENAME_ALIAS, true);
} }
/** /**

View file

@ -3880,10 +3880,7 @@ class admin_setting_pickroles extends admin_setting_configmulticheckbox {
return true; return true;
} }
if ($roles = get_all_roles()) { if ($roles = get_all_roles()) {
$this->choices = array(); $this->choices = role_fix_names($roles, null, ROLENAME_ORIGINAL, true);
foreach($roles as $role) {
$this->choices[$role->id] = format_string($role->name);
}
return true; return true;
} else { } else {
return false; return false;

View file

@ -652,12 +652,13 @@ function get_courses_wmanagers($categoryid=0, $sort="c.sortorder ASC", $fields=a
* *
*/ */
$sql = "SELECT ctx.path, ctx.instanceid, ctx.contextlevel, $sql = "SELECT ctx.path, ctx.instanceid, ctx.contextlevel,
r.id AS roleid, r.name as rolename, r.id AS roleid, r.name AS rolename, r.shortname AS roleshortname,
u.id AS userid, u.firstname, u.lastname rn.name AS rolecoursealias, u.id AS userid, u.firstname, u.lastname
FROM {role_assignments} ra FROM {role_assignments} ra
JOIN {context} ctx ON ra.contextid = ctx.id JOIN {context} ctx ON ra.contextid = ctx.id
JOIN {user} u ON ra.userid = u.id JOIN {user} u ON ra.userid = u.id
JOIN {role} r ON ra.roleid = r.id JOIN {role} r ON ra.roleid = r.id
LEFT JOIN {role_names} rn ON (rn.contextid = ctx.id AND rn.roleid = r.id)
LEFT OUTER JOIN {course} c LEFT OUTER JOIN {course} c
ON (ctx.instanceid=c.id AND ctx.contextlevel=".CONTEXT_COURSE.") ON (ctx.instanceid=c.id AND ctx.contextlevel=".CONTEXT_COURSE.")
WHERE ( c.id IS NOT NULL"; WHERE ( c.id IS NOT NULL";

View file

@ -243,14 +243,14 @@ function xmldb_main_install() {
// Install the roles system. // Install the roles system.
$managerrole = create_role(get_string('manager', 'role'), 'manager', get_string('managerdescription', 'role'), 'manager'); $managerrole = create_role('', 'manager', '', 'manager');
$coursecreatorrole = create_role(get_string('coursecreators'), 'coursecreator', get_string('coursecreatorsdescription'), 'coursecreator'); $coursecreatorrole = create_role('', 'coursecreator', '', 'coursecreator');
$editteacherrole = create_role(get_string('defaultcourseteacher'), 'editingteacher', get_string('defaultcourseteacherdescription'), 'editingteacher'); $editteacherrole = create_role('', 'editingteacher', '', 'editingteacher');
$noneditteacherrole = create_role(get_string('noneditingteacher'), 'teacher', get_string('noneditingteacherdescription'), 'teacher'); $noneditteacherrole = create_role('', 'teacher', '', 'teacher');
$studentrole = create_role(get_string('defaultcoursestudent'), 'student', get_string('defaultcoursestudentdescription'), 'student'); $studentrole = create_role('', 'student', '', 'student');
$guestrole = create_role(get_string('guest'), 'guest', get_string('guestdescription'), 'guest'); $guestrole = create_role('', 'guest', '', 'guest');
$userrole = create_role(get_string('authenticateduser'), 'user', get_string('authenticateduserdescription'), 'user'); $userrole = create_role('', 'user', '', 'user');
$frontpagerole = create_role(get_string('frontpageuser', 'role'), 'frontpage', get_string('frontpageuserdescription', 'role'), 'frontpage'); $frontpagerole = create_role('', 'frontpage', '', 'frontpage');
// Now is the correct moment to install capabilities - after creation of legacy roles, but before assigning of roles // Now is the correct moment to install capabilities - after creation of legacy roles, but before assigning of roles
update_capabilities('moodle'); update_capabilities('moodle');

View file

@ -1018,9 +1018,9 @@
<TABLE NAME="role" COMMENT="moodle roles" PREVIOUS="post" NEXT="context"> <TABLE NAME="role" COMMENT="moodle roles" PREVIOUS="post" NEXT="context">
<FIELDS> <FIELDS>
<FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="true" NEXT="name"/> <FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="true" NEXT="name"/>
<FIELD NAME="name" TYPE="char" LENGTH="255" NOTNULL="true" SEQUENCE="false" PREVIOUS="id" NEXT="shortname"/> <FIELD NAME="name" TYPE="char" LENGTH="255" NOTNULL="true" SEQUENCE="false" PREVIOUS="id" COMMENT="Empty names are automatically localised" NEXT="shortname"/>
<FIELD NAME="shortname" TYPE="char" LENGTH="100" NOTNULL="true" SEQUENCE="false" PREVIOUS="name" NEXT="description"/> <FIELD NAME="shortname" TYPE="char" LENGTH="100" NOTNULL="true" SEQUENCE="false" PREVIOUS="name" NEXT="description"/>
<FIELD NAME="description" TYPE="text" NOTNULL="true" SEQUENCE="false" PREVIOUS="shortname" NEXT="sortorder"/> <FIELD NAME="description" TYPE="text" NOTNULL="true" SEQUENCE="false" PREVIOUS="shortname" COMMENT="Empty descriptions may be automatically localised" NEXT="sortorder"/>
<FIELD NAME="sortorder" TYPE="int" LENGTH="10" NOTNULL="true" DEFAULT="0" SEQUENCE="false" PREVIOUS="description" NEXT="archetype"/> <FIELD NAME="sortorder" TYPE="int" LENGTH="10" NOTNULL="true" DEFAULT="0" SEQUENCE="false" PREVIOUS="description" NEXT="archetype"/>
<FIELD NAME="archetype" TYPE="char" LENGTH="30" NOTNULL="true" SEQUENCE="false" COMMENT="Role archetype is used during install and role reset, marks admin role and helps in site settings" PREVIOUS="sortorder"/> <FIELD NAME="archetype" TYPE="char" LENGTH="30" NOTNULL="true" SEQUENCE="false" COMMENT="Role archetype is used during install and role reset, marks admin role and helps in site settings" PREVIOUS="sortorder"/>
</FIELDS> </FIELDS>
@ -1028,9 +1028,8 @@
<KEY NAME="primary" TYPE="primary" FIELDS="id"/> <KEY NAME="primary" TYPE="primary" FIELDS="id"/>
</KEYS> </KEYS>
<INDEXES> <INDEXES>
<INDEX NAME="sortorder" UNIQUE="true" FIELDS="sortorder" NEXT="name"/> <INDEX NAME="sortorder" UNIQUE="true" FIELDS="sortorder" NEXT="shortname"/>
<INDEX NAME="name" UNIQUE="true" FIELDS="name" COMMENT="Enforces the constraint that role names should be unique." PREVIOUS="sortorder" NEXT="shortname"/> <INDEX NAME="shortname" UNIQUE="true" FIELDS="shortname" COMMENT="Enforces the constraint that role shortnames must be unique." PREVIOUS="sortorder"/>
<INDEX NAME="shortname" UNIQUE="true" FIELDS="shortname" COMMENT="Enforces the constraint that role shortnames must be unique." PREVIOUS="name"/>
</INDEXES> </INDEXES>
</TABLE> </TABLE>
<TABLE NAME="context" COMMENT="one of these must be set" PREVIOUS="role" NEXT="context_temp"> <TABLE NAME="context" COMMENT="one of these must be set" PREVIOUS="role" NEXT="context_temp">

View file

@ -1015,5 +1015,21 @@ function xmldb_main_upgrade($oldversion) {
upgrade_main_savepoint(true, 2012062500.09); upgrade_main_savepoint(true, 2012062500.09);
} }
if ($oldversion < 2012062500.10) {
// Define index name (unique) to be dropped form role
$table = new xmldb_table('role');
$index = new xmldb_index('name', XMLDB_INDEX_UNIQUE, array('name'));
// Conditionally launch drop index name
if ($dbman->index_exists($table, $index)) {
$dbman->drop_index($table, $index);
}
// Main savepoint reached
upgrade_main_savepoint(true, 2012062500.10);
}
return true; return true;
} }

View file

@ -624,6 +624,10 @@ class accesslib_testcase extends advanced_testcase {
* @return void * @return void
*/ */
public function test_get_all_roles() { public function test_get_all_roles() {
global $DB;
$this->resetAfterTest();
$allroles = get_all_roles(); $allroles = get_all_roles();
$this->assertEquals('array', gettype($allroles)); $this->assertEquals('array', gettype($allroles));
$this->assertCount(8, $allroles); // there are 8 roles is standard install $this->assertCount(8, $allroles); // there are 8 roles is standard install
@ -636,6 +640,33 @@ class accesslib_testcase extends advanced_testcase {
foreach($allroles as $roleid => $role) { foreach($allroles as $roleid => $role) {
$this->assertEquals($role->id, $roleid); $this->assertEquals($role->id, $roleid);
} }
$teacher = $DB->get_record('role', array('shortname'=>'teacher'), '*', MUST_EXIST);
$course = $this->getDataGenerator()->create_course();
$coursecontext = context_course::instance($course->id);
$otherid = create_role('Other role', 'other', 'Some other role', '');
$teacherename = (object)array('roleid'=>$teacher->id, 'name'=>'Učitel', 'contextid'=>$coursecontext->id);
$DB->insert_record('role_names', $teacherename);
$otherrename = (object)array('roleid'=>$otherid, 'name'=>'Ostatní', 'contextid'=>$coursecontext->id);
$DB->insert_record('role_names', $otherrename);
$renames = $DB->get_records_menu('role_names', array('contextid'=>$coursecontext->id), '', 'roleid,name');
$allroles = get_all_roles($coursecontext);
$this->assertEquals('array', gettype($allroles));
$this->assertCount(9, $allroles);
$role = reset($allroles);
$role = (array)$role;
$this->assertEquals(array('id', 'name', 'shortname', 'description', 'sortorder', 'archetype', 'coursealias'), array_keys($role), '', 0, 10, true);
foreach($allroles as $roleid => $role) {
$this->assertEquals($role->id, $roleid);
if (isset($renames[$roleid])) {
$this->assertSame($renames[$roleid], $role->coursealias);
} else {
$this->assertSame(null, $role->coursealias);
}
}
} }
/** /**
@ -680,19 +711,43 @@ class accesslib_testcase extends advanced_testcase {
$this->resetAfterTest(); $this->resetAfterTest();
$teacher = $DB->get_record('role', array('shortname'=>'teacher'), '*', MUST_EXIST);
$allroles = $DB->get_records('role'); $allroles = $DB->get_records('role');
$teacher = $DB->get_record('role', array('shortname'=>'teacher'), '*', MUST_EXIST);
$course = $this->getDataGenerator()->create_course(); $course = $this->getDataGenerator()->create_course();
$coursecontext = context_course::instance($course->id); $coursecontext = context_course::instance($course->id);
$otherid = create_role('Other role', 'other', 'Some other role', '');
$teacherename = (object)array('roleid'=>$teacher->id, 'name'=>'Učitel', 'contextid'=>$coursecontext->id); $teacherename = (object)array('roleid'=>$teacher->id, 'name'=>'Učitel', 'contextid'=>$coursecontext->id);
$DB->insert_record('role_names', $teacherename); $DB->insert_record('role_names', $teacherename);
$otherrename = (object)array('roleid'=>$otherid, 'name'=>'Ostatní', 'contextid'=>$coursecontext->id);
$DB->insert_record('role_names', $otherrename);
$renames = $DB->get_records_menu('role_names', array('contextid'=>$coursecontext->id), '', 'roleid,name');
foreach ($allroles as $role) { foreach ($allroles as $role) {
$this->assertNotEmpty(role_get_name($role, $coursecontext)); // Get localised name from lang pack.
if ($role->id == $teacher->id) { $this->assertSame('', $role->name);
$this->assertSame($teacherename->name, role_get_name($role, $coursecontext)); $name = role_get_name($role, null, ROLENAME_ORIGINAL);
$this->assertNotEmpty($name);
$this->assertNotEquals($role->shortname, $name);
if (isset($renames[$role->id])) {
$this->assertSame($renames[$role->id], role_get_name($role, $coursecontext));
$this->assertSame($renames[$role->id], role_get_name($role, $coursecontext, ROLENAME_ALIAS));
$this->assertSame($renames[$role->id], role_get_name($role, $coursecontext, ROLENAME_ALIAS_RAW));
$this->assertSame("{$renames[$role->id]} ($name)", role_get_name($role, $coursecontext, ROLENAME_BOTH));
} else {
$this->assertSame($name, role_get_name($role, $coursecontext));
$this->assertSame($name, role_get_name($role, $coursecontext, ROLENAME_ALIAS));
$this->assertSame(null, role_get_name($role, $coursecontext, ROLENAME_ALIAS_RAW));
$this->assertSame($name, role_get_name($role, $coursecontext, ROLENAME_BOTH));
} }
$this->assertSame($name, role_get_name($role));
$this->assertSame($name, role_get_name($role, $coursecontext, ROLENAME_ORIGINAL));
$this->assertSame($name, role_get_name($role, null, ROLENAME_ORIGINAL));
$this->assertSame($role->shortname, role_get_name($role, $coursecontext, ROLENAME_SHORT));
$this->assertSame($role->shortname, role_get_name($role, null, ROLENAME_SHORT));
$this->assertSame("$name ($role->shortname)", role_get_name($role, $coursecontext, ROLENAME_ORIGINALANDSHORT));
$this->assertSame("$name ($role->shortname)", role_get_name($role, null, ROLENAME_ORIGINALANDSHORT));
$this->assertSame(null, role_get_name($role, null, ROLENAME_ALIAS_RAW));
} }
} }
@ -733,100 +788,23 @@ class accesslib_testcase extends advanced_testcase {
$rolenames[$role->id] = $role->name; $rolenames[$role->id] = $role->name;
} }
/* TODO: unsupported! MDL-8249 $alltypes = array(ROLENAME_ALIAS, ROLENAME_ALIAS_RAW, ROLENAME_BOTH, ROLENAME_ORIGINAL, ROLENAME_ORIGINALANDSHORT, ROLENAME_SHORT);
$fixed = role_fix_names($roles, $coursecontext, ROLENAME_SHORT); foreach ($alltypes as $type) {
$this->assertCount(count($roles), $fixed); $fixed = role_fix_names($roles, $coursecontext, $type);
foreach($fixed as $rolename) {
$this->assertInstanceOf('stdClass', $rolename);
$role = $roles[$rolename->id];
$this->assertSame($role->shortname, $rolename->localname);
}
*/
/* TODO: unsupported! MDL-8249
$fixed = role_fix_names($roles, $coursecontext, ROLENAME_ORIGINALANDSHORT);
$this->assertCount(count($roles), $fixed);
foreach($fixed as $rolename) {
$this->assertInstanceOf('stdClass', $rolename);
$role = $roles[$rolename->id];
$this->assertSame("$role->name ($role->shortname)", $rolename->localname);
}
*/
$fixed = role_fix_names($roles, $coursecontext, ROLENAME_ORIGINAL);
$this->assertCount(count($roles), $fixed); $this->assertCount(count($roles), $fixed);
foreach($fixed as $roleid=>$rolename) { foreach($fixed as $roleid=>$rolename) {
$this->assertInstanceOf('stdClass', $rolename); $this->assertInstanceOf('stdClass', $rolename);
$role = $roles[$roleid]; $role = $allroles[$roleid];
$name = role_get_name($role, $frontcontext); $name = role_get_name($role, $coursecontext, $type);
$this->assertSame($name, $rolename->localname); $this->assertSame($name, $rolename->localname);
} }
$fixed = role_fix_names($rolenames, $coursecontext, ROLENAME_ORIGINAL); $fixed = role_fix_names($rolenames, $coursecontext, $type);
$this->assertCount(count($rolenames), $fixed); $this->assertCount(count($rolenames), $fixed);
foreach($fixed as $roleid=>$rolename) { foreach($fixed as $roleid=>$rolename) {
$role = $roles[$roleid]; $role = $allroles[$roleid];
$name = role_get_name($role, $frontcontext); $name = role_get_name($role, $coursecontext, $type);
$this->assertSame($name, $rolename); $this->assertSame($name, $rolename);
} }
$fixed = role_fix_names($roles, $coursecontext, ROLENAME_ALIAS);
$this->assertCount(count($roles), $fixed);
foreach($fixed as $roleid=>$rolename) {
$this->assertInstanceOf('stdClass', $rolename);
$role = $roles[$roleid];
$this->assertSame(role_get_name($role, $coursecontext), $rolename->localname);
}
$fixed = role_fix_names($rolenames, $coursecontext, ROLENAME_ALIAS);
$this->assertCount(count($rolenames), $fixed);
foreach($fixed as $roleid=>$rolename) {
$role = $roles[$roleid];
$this->assertSame(role_get_name($role, $coursecontext), $rolename);
}
/* TODO: buggy! MDL-8249
$fixed = role_fix_names($roles, $coursecontext, ROLENAME_BOTH);
$this->assertCount(count($roles), $fixed);
foreach($fixed as $roleid=>$rolename) {
$this->assertInstanceOf('stdClass', $rolename);
$role = $roles[$roleid];
$name = role_get_name($role, $frontcontext);
if (isset($renames[$roleid])) {
$this->assertSame("$renames[$roleid] ($name)", $rolename->localname);
} else {
$this->assertSame(role_get_name($role, $coursecontext), $rolename->localname);
}
}
*/
$fixed = role_fix_names($rolenames, $coursecontext, ROLENAME_BOTH);
$this->assertCount(count($rolenames), $fixed);
foreach($fixed as $roleid=>$rolename) {
$role = $roles[$roleid];
if (isset($renames[$roleid])) {
$name = role_get_name($role, $frontcontext);
$this->assertSame("$renames[$roleid] ($name)", $rolename);
} else {
$this->assertSame(role_get_name($role, $coursecontext), $rolename);
}
}
$fixed = role_fix_names($roles, $coursecontext, ROLENAME_ALIAS_RAW);
$this->assertCount(count($roles), $fixed);
foreach($fixed as $roleid=>$rolename) {
$this->assertInstanceOf('stdClass', $rolename);
if (isset($renames[$roleid])) {
$this->assertSame($renames[$roleid], $rolename->localname);
} else {
$this->assertSame('', $rolename->localname);
}
}
$fixed = role_fix_names($rolenames, $coursecontext, ROLENAME_ALIAS_RAW);
$this->assertCount(count($rolenames), $fixed);
foreach($fixed as $roleid=>$rolename) {
if (isset($renames[$roleid])) {
$this->assertSame($renames[$roleid], $rolename);
} else {
$this->assertSame('', $rolename);
}
} }
} }
@ -965,10 +943,6 @@ class accesslib_testcase extends advanced_testcase {
} }
$alltypes = array(ROLENAME_ALIAS, ROLENAME_ALIAS_RAW, ROLENAME_BOTH, ROLENAME_ORIGINAL, ROLENAME_ORIGINALANDSHORT, ROLENAME_SHORT); $alltypes = array(ROLENAME_ALIAS, ROLENAME_ALIAS_RAW, ROLENAME_BOTH, ROLENAME_ORIGINAL, ROLENAME_ORIGINALANDSHORT, ROLENAME_SHORT);
foreach ($alltypes as $type) { foreach ($alltypes as $type) {
if ($type == ROLENAME_SHORT or $type == ROLENAME_ORIGINALANDSHORT or $type == ROLENAME_BOTH) {
// TODO: skip for now, remove after role_fix_names() is fixed and supports all types MDL-8249
continue;
}
$rolenames = role_fix_names($allroles, $coursecontext, $type); $rolenames = role_fix_names($allroles, $coursecontext, $type);
$roles = get_assignable_roles($coursecontext, $type, false, $admin); $roles = get_assignable_roles($coursecontext, $type, false, $admin);
foreach ($roles as $roleid=>$rolename) { foreach ($roles as $roleid=>$rolename) {
@ -977,9 +951,10 @@ class accesslib_testcase extends advanced_testcase {
} }
// Verify counts. // Verify counts.
//TODO: test all types - ROLENAME_SHORT is borked here for example MDL-8249 $alltypes = array(ROLENAME_ALIAS, ROLENAME_ALIAS_RAW, ROLENAME_BOTH, ROLENAME_ORIGINAL, ROLENAME_ORIGINALANDSHORT, ROLENAME_SHORT);
$roles = get_assignable_roles($coursecontext, ROLENAME_ALIAS, false, $admin); foreach ($alltypes as $type) {
list($rolenames, $rolecounts, $nameswithcounts) = get_assignable_roles($coursecontext, ROLENAME_ALIAS, true, $admin); $roles = get_assignable_roles($coursecontext, $type, false, $admin);
list($rolenames, $rolecounts, $nameswithcounts) = get_assignable_roles($coursecontext, $type, true, $admin);
$this->assertEquals($roles, $rolenames); $this->assertEquals($roles, $rolenames);
foreach ($rolenames as $roleid=>$name) { foreach ($rolenames as $roleid=>$name) {
if ($roleid == $teacherrole->id or $roleid == $studentrole->id) { if ($roleid == $teacherrole->id or $roleid == $studentrole->id) {
@ -990,6 +965,7 @@ class accesslib_testcase extends advanced_testcase {
$this->assertEquals("$name ($rolecounts[$roleid])", $nameswithcounts[$roleid]); $this->assertEquals("$name ($rolecounts[$roleid])", $nameswithcounts[$roleid]);
} }
} }
}
/** /**
* Test getting of all switchable roles. * Test getting of all switchable roles.
@ -1043,12 +1019,7 @@ class accesslib_testcase extends advanced_testcase {
if (isset($roles[$roleid])) { if (isset($roles[$roleid])) {
$coursecontext = $context->get_course_context(false); $coursecontext = $context->get_course_context(false);
if ($coursecontext) {
$this->assertEquals(role_get_name($role, $coursecontext), $roles[$roleid]); $this->assertEquals(role_get_name($role, $coursecontext), $roles[$roleid]);
} else {
// TODO: switch to role_get_name() once it supports all contexts and rolename types MDL-8249
$this->assertEquals($role->name, $roles[$roleid]);
}
} }
} }
} }
@ -1114,8 +1085,7 @@ class accesslib_testcase extends advanced_testcase {
} }
if (isset($roles[$roleid])) { if (isset($roles[$roleid])) {
//TODO: ROLENAME_SHORT borked! MDL-8249 $this->assertEquals($role->shortname, $roles[$roleid]);
//$this->assertEquals($role->shortname, $roles[$roleid]);
} }
} }
} }
@ -1129,10 +1099,6 @@ class accesslib_testcase extends advanced_testcase {
$alltypes = array(ROLENAME_ALIAS, ROLENAME_ALIAS_RAW, ROLENAME_BOTH, ROLENAME_ORIGINAL, ROLENAME_ORIGINALANDSHORT, ROLENAME_SHORT); $alltypes = array(ROLENAME_ALIAS, ROLENAME_ALIAS_RAW, ROLENAME_BOTH, ROLENAME_ORIGINAL, ROLENAME_ORIGINALANDSHORT, ROLENAME_SHORT);
foreach ($alltypes as $type) { foreach ($alltypes as $type) {
if ($type == ROLENAME_SHORT or $type == ROLENAME_ORIGINALANDSHORT or $type == ROLENAME_BOTH) {
// TODO: skip for now, remove after role_fix_names() is fixed and supports all types MDL-8249
continue;
}
$rolenames = role_fix_names($allroles, $coursecontext, $type); $rolenames = role_fix_names($allroles, $coursecontext, $type);
$roles = get_overridable_roles($coursecontext, $type, false); $roles = get_overridable_roles($coursecontext, $type, false);
foreach ($roles as $roleid=>$rolename) { foreach ($roles as $roleid=>$rolename) {
@ -1229,8 +1195,6 @@ class accesslib_testcase extends advanced_testcase {
$id2 = create_role('New student role', 'student2', 'New student description', 'student'); $id2 = create_role('New student role', 'student2', 'New student description', 'student');
set_role_contextlevels($id2, array(CONTEXT_COURSE)); set_role_contextlevels($id2, array(CONTEXT_COURSE));
//TODO: add role name alias MDL-8249
$allroles = get_all_roles(); $allroles = get_all_roles();
$expected = array($id2=>$allroles[$id2]); $expected = array($id2=>$allroles[$id2]);
@ -1253,6 +1217,126 @@ class accesslib_testcase extends advanced_testcase {
} }
} }
/**
* Test getting of role users.
* @return void
*/
public function test_get_role_users() {
global $DB;
$this->resetAfterTest();
$systemcontext = context_system::instance();
$teacherrole = $DB->get_record('role', array('shortname'=>'editingteacher'), '*', MUST_EXIST);
$course = $this->getDataGenerator()->create_course();
$coursecontext = context_course::instance($course->id);
$otherid = create_role('Other role', 'other', 'Some other role', '');
$teacherrename = (object)array('roleid'=>$teacherrole->id, 'name'=>'Učitel', 'contextid'=>$coursecontext->id);
$DB->insert_record('role_names', $teacherrename);
$otherrename = (object)array('roleid'=>$otherid, 'name'=>'Ostatní', 'contextid'=>$coursecontext->id);
$DB->insert_record('role_names', $otherrename);
$user1 = $this->getDataGenerator()->create_user();
role_assign($teacherrole->id, $user1->id, $coursecontext->id);
$user2 = $this->getDataGenerator()->create_user();
role_assign($teacherrole->id, $user2->id, $systemcontext->id);
$users = get_role_users($teacherrole->id, $coursecontext);
$this->assertCount(1, $users);
$user = reset($users);
$userid = key($users);
$this->assertEquals($userid, $user->id);
$this->assertEquals($teacherrole->id, $user->roleid);
$this->assertEquals($teacherrole->name, $user->rolename);
$this->assertEquals($teacherrole->shortname, $user->roleshortname);
$this->assertEquals($teacherrename->name, $user->rolecoursealias);
$users = get_role_users($teacherrole->id, $coursecontext, true);
$this->assertCount(2, $users);
$users = get_role_users($teacherrole->id, $coursecontext, false, 'u.id, u.email, u.idnumber', 'u.idnumber', null, 1, 0, 10, 'u.deleted = 0');
}
/**
* Test used role query.
* @return void
*/
public function test_get_roles_used_in_context() {
global $DB;
$this->resetAfterTest();
$systemcontext = context_system::instance();
$teacherrole = $DB->get_record('role', array('shortname'=>'editingteacher'), '*', MUST_EXIST);
$course = $this->getDataGenerator()->create_course();
$coursecontext = context_course::instance($course->id);
$otherid = create_role('Other role', 'other', 'Some other role', '');
$teacherrename = (object)array('roleid'=>$teacherrole->id, 'name'=>'Učitel', 'contextid'=>$coursecontext->id);
$DB->insert_record('role_names', $teacherrename);
$otherrename = (object)array('roleid'=>$otherid, 'name'=>'Ostatní', 'contextid'=>$coursecontext->id);
$DB->insert_record('role_names', $otherrename);
$user1 = $this->getDataGenerator()->create_user();
role_assign($teacherrole->id, $user1->id, $coursecontext->id);
$roles = get_roles_used_in_context($coursecontext);
$this->assertCount(1, $roles);
$role = reset($roles);
$roleid = key($roles);
$this->assertEquals($roleid, $role->id);
$this->assertEquals($teacherrole->id, $role->id);
$this->assertEquals($teacherrole->name, $role->name);
$this->assertEquals($teacherrole->shortname, $role->shortname);
$this->assertEquals($teacherrole->sortorder, $role->sortorder);
$this->assertEquals($teacherrename->name, $role->coursealias);
$user2 = $this->getDataGenerator()->create_user();
role_assign($teacherrole->id, $user2->id, $systemcontext->id);
role_assign($otherid, $user2->id, $systemcontext->id);
$roles = get_roles_used_in_context($systemcontext);
$this->assertCount(2, $roles);
}
/**
* Test roles used in course.
* @return void
*/
public function test_get_user_roles_in_course() {
global $DB, $CFG;
$this->resetAfterTest();
$teacherrole = $DB->get_record('role', array('shortname'=>'editingteacher'), '*', MUST_EXIST);
$studentrole = $DB->get_record('role', array('shortname'=>'student'), '*', MUST_EXIST);
$course = $this->getDataGenerator()->create_course();
$coursecontext = context_course::instance($course->id);
$teacherrename = (object)array('roleid'=>$teacherrole->id, 'name'=>'Učitel', 'contextid'=>$coursecontext->id);
$DB->insert_record('role_names', $teacherrename);
$roleids = explode(',', $CFG->profileroles); // should include teacher and student in new installs
$this->assertTrue(in_array($teacherrole->id, $roleids));
$this->assertTrue(in_array($studentrole->id, $roleids));
$user1 = $this->getDataGenerator()->create_user();
role_assign($teacherrole->id, $user1->id, $coursecontext->id);
role_assign($studentrole->id, $user1->id, $coursecontext->id);
$user2 = $this->getDataGenerator()->create_user();
role_assign($studentrole->id, $user2->id, $coursecontext->id);
$user3 = $this->getDataGenerator()->create_user();
$roles = get_user_roles_in_course($user1->id, $course->id);
$this->assertEquals(1, preg_match_all('/,/', $roles));
$this->assertTrue(strpos($roles, role_get_name($teacherrole, $coursecontext)) !== false);
$roles = get_user_roles_in_course($user2->id, $course->id);
$this->assertEquals(0, preg_match_all('/,/', $roles));
$this->assertTrue(strpos($roles, role_get_name($studentrole, $coursecontext)) !== false);
$roles = get_user_roles_in_course($user3->id, $course->id);
$this->assertSame('', $roles);
}
/** /**
* Test has_capability(), has_any_capability() and has_all_capabilities(). * Test has_capability(), has_any_capability() and has_all_capabilities().
*/ */

View file

@ -438,10 +438,10 @@ function url_get_variable_options($config) {
); );
if ($config->rolesinparams) { if ($config->rolesinparams) {
$roles = get_all_roles(); $roles = role_fix_names(get_all_roles());
$roleoptions = array(); $roleoptions = array();
foreach ($roles as $role) { foreach ($roles as $role) {
$roleoptions['course'.$role->shortname] = get_string('yourwordforx', '', $role->name); $roleoptions['course'.$role->shortname] = get_string('yourwordforx', '', $role->localname);
} }
$options[get_string('roles')] = $roleoptions; $options[get_string('roles')] = $roleoptions;
} }
@ -509,9 +509,8 @@ function url_get_variable_values($url, $cm, $course, $config) {
//hmm, this is pretty fragile and slow, why do we need it here?? //hmm, this is pretty fragile and slow, why do we need it here??
if ($config->rolesinparams) { if ($config->rolesinparams) {
$roles = get_all_roles();
$coursecontext = get_context_instance(CONTEXT_COURSE, $course->id); $coursecontext = get_context_instance(CONTEXT_COURSE, $course->id);
$roles = role_fix_names($roles, $coursecontext, ROLENAME_ALIAS); $roles = role_fix_names(get_all_roles($coursecontext), $coursecontext, ROLENAME_ALIAS);
foreach ($roles as $role) { foreach ($roles as $role) {
$values['course'.$role->shortname] = $role->localname; $values['course'.$role->shortname] = $role->localname;
} }

View file

@ -137,19 +137,11 @@ if (strtotime('-1 year',$now) >= $minlog) {
$timeoptions[strtotime('-1 year',$now)] = get_string('lastyear'); $timeoptions[strtotime('-1 year',$now)] = get_string('lastyear');
} }
$roleoptions = array();
// TODO: we need a new list of roles that are visible here // TODO: we need a new list of roles that are visible here
if ($roles = get_roles_used_in_context($context)) { $roles = get_roles_used_in_context($context);
foreach ($roles as $r) {
$roleoptions[$r->id] = $r->name;
}
}
$guestrole = get_guest_role(); $guestrole = get_guest_role();
if (empty($roleoptions[$guestrole->id])) { $roles[$guestrole->id] = $guestrole;
$roleoptions[$guestrole->id] = $guestrole->name; $roleoptions = role_fix_names($roles, $context, ROLENAME_ALIAS, true);
}
$roleoptions = role_fix_names($roleoptions, $context);
// print first controls. // print first controls.
echo '<form class="participationselectform" action="index.php" method="get"><div>'."\n". echo '<form class="participationselectform" action="index.php" method="get"><div>'."\n".

View file

@ -836,6 +836,7 @@ function report_security_check_riskbackup($detailed=false) {
if ($systemroles) { if ($systemroles) {
$links = array(); $links = array();
foreach ($systemroles as $role) { foreach ($systemroles as $role) {
$role->name = role_get_name($role);
$role->url = "$CFG->wwwroot/$CFG->admin/roles/manage.php?action=edit&amp;roleid=$role->id"; $role->url = "$CFG->wwwroot/$CFG->admin/roles/manage.php?action=edit&amp;roleid=$role->id";
$links[] = '<li>'.get_string('check_riskbackup_editrole', 'report_security', $role).'</li>'; $links[] = '<li>'.get_string('check_riskbackup_editrole', 'report_security', $role).'</li>';
} }
@ -848,10 +849,9 @@ function report_security_check_riskbackup($detailed=false) {
if ($overriddenroles) { if ($overriddenroles) {
$links = array(); $links = array();
foreach ($overriddenroles as $role) { foreach ($overriddenroles as $role) {
$role->name = $role->localname;
$context = get_context_instance_by_id($role->contextid); $context = get_context_instance_by_id($role->contextid);
if ($context->contextlevel == CONTEXT_COURSE) { $role->name = role_get_name($role, $context, ROLENAME_BOTH);
$role->name = role_get_name($role, $context);
}
$role->contextname = print_context_name($context); $role->contextname = print_context_name($context);
$role->url = "$CFG->wwwroot/$CFG->admin/roles/override.php?contextid=$role->contextid&amp;roleid=$role->id"; $role->url = "$CFG->wwwroot/$CFG->admin/roles/override.php?contextid=$role->contextid&amp;roleid=$role->id";
$links[] = '<li>'.get_string('check_riskbackup_editoverride', 'report_security', $role).'</li>'; $links[] = '<li>'.get_string('check_riskbackup_editoverride', 'report_security', $role).'</li>';

View file

@ -125,11 +125,7 @@ if (empty($param->crosstab)) {
$times = array(); $times = array();
$roles = array(); $roles = array();
$missedlines = array(); $missedlines = array();
$rolenames = get_all_roles(); $rolenames = role_fix_names(get_all_roles($coursecontext), $coursecontext, ROLENAME_ALIAS, true);
foreach ($rolenames as $r) {
$rolenames[$r->id] = $r->name;
}
$rolenames = role_fix_names($rolenames, get_context_instance(CONTEXT_COURSE, $course->id));
foreach ($stats as $stat) { foreach ($stats as $stat) {
$data[$stat->roleid][$stat->timeend] = $stat->line1; $data[$stat->roleid][$stat->timeend] = $stat->line1;
if (!empty($stat->zerofixed)) { if (!empty($stat->zerofixed)) {

View file

@ -244,11 +244,8 @@ function report_stats_report($course, $report, $mode, $user, $roleid, $time) {
$roles = array(); $roles = array();
$times = array(); $times = array();
$missedlines = array(); $missedlines = array();
$rolenames = get_all_roles(); $coursecontext = context_course::instance($course->id);
foreach ($rolenames as $r) { $rolenames = role_fix_names(get_all_roles($coursecontext), $coursecontext, ROLENAME_ALIAS, true);
$rolenames[$r->id] = $r->name;
}
$rolenames = role_fix_names($rolenames, get_context_instance(CONTEXT_COURSE, $course->id));
foreach ($stats as $stat) { foreach ($stats as $stat) {
if (!empty($stat->zerofixed)) { if (!empty($stat->zerofixed)) {
$missedlines[] = $stat->timeend; $missedlines[] = $stat->timeend;

View file

@ -64,22 +64,13 @@
$rolenamesurl = new moodle_url("$CFG->wwwroot/user/index.php?contextid=$context->id&sifirst=&silast="); $rolenamesurl = new moodle_url("$CFG->wwwroot/user/index.php?contextid=$context->id&sifirst=&silast=");
$allroles = get_all_roles(); $rolenames = role_fix_names(get_profile_roles($context), $context, ROLENAME_ALIAS, true);
$roles = get_profile_roles($context);
$allrolenames = array();
if ($isfrontpage) { if ($isfrontpage) {
$rolenames = array(0=>get_string('allsiteusers', 'role')); $rolenames = array(0=>get_string('allsiteusers', 'role'));
} else { } else {
$rolenames = array(0=>get_string('allparticipants')); $rolenames = array(0=>get_string('allparticipants'));
} }
foreach ($allroles as $role) {
$allrolenames[$role->id] = strip_tags(role_get_name($role, $context)); // Used in menus etc later on
if (isset($roles[$role->id])) {
$rolenames[$role->id] = $allrolenames[$role->id];
}
}
// make sure other roles may not be selected by any means // make sure other roles may not be selected by any means
if (empty($rolenames[$roleid])) { if (empty($rolenames[$roleid])) {
print_error('noparticipants'); print_error('noparticipants');

View file

@ -822,7 +822,7 @@ class group_non_members_selector extends groups_user_selector_base {
// Build the SQL // Build the SQL
list($enrolsql, $enrolparams) = get_enrolled_sql($context); list($enrolsql, $enrolparams) = get_enrolled_sql($context);
$fields = "SELECT r.id AS roleid, r.shortname AS roleshortname, r.name AS rolename, u.id AS userid, $fields = "SELECT r.id AS roleid, u.id AS userid,
" . $this->required_fields_sql('u') . ", " . $this->required_fields_sql('u') . ",
(SELECT count(igm.groupid) (SELECT count(igm.groupid)
FROM {groups_members} igm FROM {groups_members} igm

View file

@ -30,7 +30,7 @@
defined('MOODLE_INTERNAL') || die(); defined('MOODLE_INTERNAL') || die();
$version = 2012062500.09; // YYYYMMDD = weekly release date of this DEV branch $version = 2012062500.10; // YYYYMMDD = weekly release date of this DEV branch
// RR = release increments - 00 in DEV branches // RR = release increments - 00 in DEV branches
// .XX = incremental changes // .XX = incremental changes