mirror of
https://github.com/moodle/moodle.git
synced 2025-08-05 08:56:36 +02:00
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:
commit
e1980f8bb9
37 changed files with 631 additions and 422 deletions
|
@ -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} */
|
||||
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);
|
||||
/** 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);
|
||||
/** rolename displays - Both, like this: Role alias (Original) */
|
||||
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');
|
||||
$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
|
||||
LEFT JOIN {role_names} rn ON (rn.contextid = :coursecontext AND rn.roleid = r.id)
|
||||
WHERE r.id = ra.roleid
|
||||
AND ra.contextid $contextlist
|
||||
AND r.id $rallowed
|
||||
|
@ -2859,10 +2866,17 @@ function get_profile_roles(context $context) {
|
|||
function get_roles_used_in_context(context $context) {
|
||||
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
|
||||
LEFT JOIN {role_names} rn ON (rn.contextid = :coursecontext AND rn.roleid = r.id)
|
||||
WHERE r.id = ra.roleid
|
||||
AND ra.contextid $contextlist
|
||||
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');
|
||||
$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
|
||||
LEFT JOIN {role_names} rn ON (rn.contextid = :coursecontext AND rn.roleid = r.id)
|
||||
WHERE r.id = ra.roleid
|
||||
AND ra.contextid $contextlist
|
||||
AND r.id $rallowed
|
||||
|
@ -2912,11 +2933,7 @@ function get_user_roles_in_course($userid, $courseid) {
|
|||
$rolestring = '';
|
||||
|
||||
if ($roles = $DB->get_records_sql($sql, $params)) {
|
||||
foreach ($roles as $userrole) {
|
||||
$rolenames[$userrole->id] = $userrole->name;
|
||||
}
|
||||
|
||||
$rolenames = role_fix_names($rolenames, $context); // Substitute aliases
|
||||
$rolenames = role_fix_names($roles, $context, ROLENAME_ALIAS, true); // Substitute aliases
|
||||
|
||||
foreach ($rolenames as $roleid => $rolename) {
|
||||
$rolenames[$roleid] = '<a href="'.$CFG->wwwroot.'/user/index.php?contextid='.$context->id.'&roleid='.$roleid.'">'.$rolename.'</a>';
|
||||
|
@ -2958,11 +2975,26 @@ function user_can_assign(context $context, $targetroleid) {
|
|||
/**
|
||||
* 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;
|
||||
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();
|
||||
$extrafields = '';
|
||||
if ($rolenamedisplay == ROLENAME_ORIGINALANDSHORT or $rolenamedisplay == ROLENAME_SHORT) {
|
||||
$extrafields .= ', r.shortname';
|
||||
}
|
||||
|
||||
if ($withusercounts) {
|
||||
$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
|
||||
$assignrestriction = "";
|
||||
} else {
|
||||
$parents = $context->get_parent_context_ids(true);
|
||||
$contexts = implode(',' , $parents);
|
||||
$assignrestriction = "JOIN (SELECT DISTINCT raa.allowassign AS id
|
||||
FROM {role_allow_assign} raa
|
||||
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['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
|
||||
$assignrestriction
|
||||
JOIN {role_context_levels} rcl ON r.id = rcl.roleid
|
||||
WHERE rcl.contextlevel = :contextlevel
|
||||
JOIN {role_context_levels} rcl ON (rcl.contextlevel = :contextlevel AND r.id = rcl.roleid)
|
||||
LEFT JOIN {role_names} rn ON (rn.contextid = :coursecontext AND rn.roleid = r.id)
|
||||
ORDER BY r.sortorder ASC";
|
||||
$roles = $DB->get_records_sql($sql, $params);
|
||||
|
||||
$rolenames = array();
|
||||
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);
|
||||
}
|
||||
$rolenames = role_fix_names($roles, $coursecontext, $rolenamedisplay, true);
|
||||
|
||||
if (!$withusercounts) {
|
||||
return $rolenames;
|
||||
|
@ -3192,17 +3214,25 @@ function get_switchable_roles(context $context) {
|
|||
$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 = "
|
||||
SELECT r.id, r.name
|
||||
SELECT r.id, r.name, r.shortname, rn.name AS coursealias
|
||||
FROM (SELECT DISTINCT rc.roleid
|
||||
FROM {role_capabilities} rc
|
||||
$extrajoins
|
||||
$extrawhere) idlist
|
||||
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";
|
||||
$roles = $DB->get_records_sql($query, $params);
|
||||
|
||||
$rolenames = $DB->get_records_sql_menu($query, $params);
|
||||
return role_fix_names($rolenames, $context, ROLENAME_ALIAS);
|
||||
return role_fix_names($roles, $context, ROLENAME_ALIAS, true);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -3232,9 +3262,6 @@ function get_overridable_roles(context $context, $rolenamedisplay = ROLENAME_ALI
|
|||
|
||||
$params = array();
|
||||
$extrafields = '';
|
||||
if ($rolenamedisplay == ROLENAME_ORIGINALANDSHORT) {
|
||||
$extrafields .= ', ro.shortname';
|
||||
}
|
||||
|
||||
$params['userid'] = $USER->id;
|
||||
if ($withcounts) {
|
||||
|
@ -3243,16 +3270,24 @@ function get_overridable_roles(context $context, $rolenamedisplay = ROLENAME_ALI
|
|||
$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()) {
|
||||
// show all roles to admins
|
||||
$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
|
||||
LEFT JOIN {role_names} rn ON (rn.contextid = :coursecontext AND rn.roleid = ro.id)
|
||||
ORDER BY ro.sortorder ASC", $params);
|
||||
|
||||
} else {
|
||||
$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
|
||||
JOIN (SELECT DISTINCT r.id
|
||||
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
|
||||
WHERE ra.userid = :userid AND ra.contextid IN ($contexts)
|
||||
) 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);
|
||||
}
|
||||
|
||||
$rolenames = array();
|
||||
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);
|
||||
}
|
||||
$rolenames = role_fix_names($roles, $context, $rolenamedisplay, true);
|
||||
|
||||
if (!$withcounts) {
|
||||
return $rolenames;
|
||||
}
|
||||
}
|
||||
|
||||
$rolecounts = array();
|
||||
$nameswithcounts = array();
|
||||
|
@ -3300,22 +3327,31 @@ function get_default_enrol_roles(context $context, $addroleid = null) {
|
|||
global $DB;
|
||||
|
||||
$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) {
|
||||
$addrole = "OR r.id = :addroleid";
|
||||
$params['addroleid'] = $addroleid;
|
||||
} else {
|
||||
$addrole = "";
|
||||
}
|
||||
$sql = "SELECT r.id, r.name
|
||||
|
||||
$sql = "SELECT r.id, r.name, r.shortname, rn.name AS coursealias
|
||||
FROM {role} r
|
||||
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
|
||||
ORDER BY sortorder DESC";
|
||||
|
||||
$roles = $DB->get_records_sql_menu($sql, $params);
|
||||
$roles = role_fix_names($roles, $context, ROLENAME_BOTH);
|
||||
$roles = $DB->get_records_sql($sql, $params);
|
||||
|
||||
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, '.
|
||||
'u.maildisplay, u.mailformat, u.maildigest, u.email, u.emailstop, u.city, '.
|
||||
'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 = '';
|
||||
|
@ -3789,23 +3826,29 @@ function get_role_users($roleid, context $context, $parent = false, $fields = ''
|
|||
}
|
||||
|
||||
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";
|
||||
} else {
|
||||
$params = array();
|
||||
$roleselect = '';
|
||||
}
|
||||
|
||||
if ($coursecontext = $context->get_course_context(false)) {
|
||||
$params['coursecontext'] = $coursecontext->id;
|
||||
} else {
|
||||
$params['coursecontext'] = 0;
|
||||
}
|
||||
|
||||
if ($group) {
|
||||
$groupjoin = "JOIN {groups_members} gm ON gm.userid = u.id";
|
||||
$groupselect = " AND gm.groupid = ? ";
|
||||
$params[] = $group;
|
||||
$groupselect = " AND gm.groupid = :groupid ";
|
||||
$params['groupid'] = $group;
|
||||
} else {
|
||||
$groupjoin = '';
|
||||
$groupselect = '';
|
||||
}
|
||||
|
||||
array_unshift($params, $context->id);
|
||||
$params['contextid'] = $context->id;
|
||||
|
||||
if ($extrawheretest) {
|
||||
$extrawheretest = ' AND ' . $extrawheretest;
|
||||
|
@ -3816,8 +3859,9 @@ function get_role_users($roleid, context $context, $parent = false, $fields = ''
|
|||
FROM {role_assignments} ra
|
||||
JOIN {user} u ON u.id = ra.userid
|
||||
JOIN {role} r ON ra.roleid = r.id
|
||||
LEFT JOIN {role_names} rn ON (rn.contextid = :coursecontext AND rn.roleid = r.id)
|
||||
$groupjoin
|
||||
WHERE (ra.contextid = ? $parentcontexts)
|
||||
WHERE (ra.contextid = :contextid $parentcontexts)
|
||||
$roleselect
|
||||
$groupselect
|
||||
$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.
|
||||
*
|
||||
* @param stdClass $role role object
|
||||
* @param context_course $coursecontext
|
||||
* @return string name of role in course context
|
||||
* - optional 'coursealias' property should be included for performance reasons if course context used
|
||||
* - 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;
|
||||
|
||||
if ($r = $DB->get_record('role_names', array('roleid'=>$role->id, 'contextid'=>$coursecontext->id))) {
|
||||
return strip_tags(format_string($r->name));
|
||||
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))) {
|
||||
$role->coursealias = $r->name;
|
||||
} else {
|
||||
$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 {
|
||||
return strip_tags(format_string($role->name));
|
||||
// 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
|
||||
*
|
||||
* @param array $roleoptions array roleid => rolename or roleid => roleobject
|
||||
* @param context $context a context
|
||||
* @param array $roleoptions array roleid => roleobject (with optional coursealias), strings are accepted for backwards compatibility only
|
||||
* @param context|bool $context a context
|
||||
* @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.
|
||||
*/
|
||||
function role_fix_names($roleoptions, context $context, $rolenamedisplay = ROLENAME_ALIAS) {
|
||||
function role_fix_names($roleoptions, $context = null, $rolenamedisplay = ROLENAME_ALIAS, $returnmenu = null) {
|
||||
global $DB;
|
||||
|
||||
// Make sure we have a course context.
|
||||
$coursecontext = $context->get_course_context(false);
|
||||
if (empty($roleoptions)) {
|
||||
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.
|
||||
if ($rolenamedisplay != ROLENAME_ORIGINAL && !empty($coursecontext->id)) {
|
||||
// The get the relevant renames, and use them.
|
||||
$aliasnames = $DB->get_records('role_names', array('contextid'=>$coursecontext->id));
|
||||
foreach ($aliasnames as $alias) {
|
||||
if (isset($newnames[$alias->roleid])) {
|
||||
if ($rolenamedisplay == ROLENAME_ALIAS || $rolenamedisplay == ROLENAME_ALIAS_RAW) {
|
||||
$newnames[$alias->roleid] = $alias->name;
|
||||
} else if ($rolenamedisplay == ROLENAME_BOTH) {
|
||||
$newnames[$alias->roleid] = $alias->name . ' (' . $roleoptions[$alias->roleid] . ')';
|
||||
// Inject coursealias if necessary.
|
||||
if ($coursecontext and ($rolenamedisplay == ROLENAME_ALIAS_RAW or $rolenamedisplay == ROLENAME_ALIAS or $rolenamedisplay == ROLENAME_BOTH)) {
|
||||
$first = reset($roleoptions);
|
||||
if (!property_exists($first, 'coursealias')) {
|
||||
$aliasnames = $DB->get_records('role_names', array('contextid'=>$coursecontext->id));
|
||||
foreach ($aliasnames as $alias) {
|
||||
if (isset($roleoptions[$alias->roleid])) {
|
||||
$roleoptions[$alias->roleid]->coursealias = $alias->name;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Finally, apply format_string and put the result in the right place.
|
||||
foreach ($roleoptions as $rid => $roleorname) {
|
||||
if ($rolenamedisplay != ROLENAME_ALIAS_RAW) {
|
||||
$newnames[$rid] = strip_tags(format_string($newnames[$rid]));
|
||||
}
|
||||
if (is_object($roleorname)) {
|
||||
$roleoptions[$rid]->localname = $newnames[$rid];
|
||||
} else {
|
||||
$roleoptions[$rid] = $newnames[$rid];
|
||||
}
|
||||
// Add localname property.
|
||||
foreach ($roleoptions as $rid => $role) {
|
||||
$roleoptions[$rid]->localname = role_get_name($role, $coursecontext, $rolenamedisplay);
|
||||
}
|
||||
return $roleoptions;
|
||||
|
||||
if (!$returnmenu) {
|
||||
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;
|
||||
|
||||
$rolesthatcanrate = get_roles_with_caps_in_context($context, $capabilities);
|
||||
$allroles = $DB->get_records('role', null, 'sortorder DESC');
|
||||
|
||||
$allroles = array();
|
||||
$roles = $DB->get_records('role', null, 'sortorder DESC');
|
||||
foreach ($roles as $roleid=>$role) {
|
||||
$allroles[$roleid] = $role->name;
|
||||
}
|
||||
|
||||
$rolenames = array();
|
||||
$roles = array();
|
||||
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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -3880,10 +3880,7 @@ class admin_setting_pickroles extends admin_setting_configmulticheckbox {
|
|||
return true;
|
||||
}
|
||||
if ($roles = get_all_roles()) {
|
||||
$this->choices = array();
|
||||
foreach($roles as $role) {
|
||||
$this->choices[$role->id] = format_string($role->name);
|
||||
}
|
||||
$this->choices = role_fix_names($roles, null, ROLENAME_ORIGINAL, true);
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
|
|
|
@ -652,12 +652,13 @@ function get_courses_wmanagers($categoryid=0, $sort="c.sortorder ASC", $fields=a
|
|||
*
|
||||
*/
|
||||
$sql = "SELECT ctx.path, ctx.instanceid, ctx.contextlevel,
|
||||
r.id AS roleid, r.name as rolename,
|
||||
u.id AS userid, u.firstname, u.lastname
|
||||
r.id AS roleid, r.name AS rolename, r.shortname AS roleshortname,
|
||||
rn.name AS rolecoursealias, u.id AS userid, u.firstname, u.lastname
|
||||
FROM {role_assignments} ra
|
||||
JOIN {context} ctx ON ra.contextid = ctx.id
|
||||
JOIN {user} u ON ra.userid = u.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
|
||||
ON (ctx.instanceid=c.id AND ctx.contextlevel=".CONTEXT_COURSE.")
|
||||
WHERE ( c.id IS NOT NULL";
|
||||
|
|
|
@ -243,14 +243,14 @@ function xmldb_main_install() {
|
|||
|
||||
|
||||
// Install the roles system.
|
||||
$managerrole = create_role(get_string('manager', 'role'), 'manager', get_string('managerdescription', 'role'), 'manager');
|
||||
$coursecreatorrole = create_role(get_string('coursecreators'), 'coursecreator', get_string('coursecreatorsdescription'), 'coursecreator');
|
||||
$editteacherrole = create_role(get_string('defaultcourseteacher'), 'editingteacher', get_string('defaultcourseteacherdescription'), 'editingteacher');
|
||||
$noneditteacherrole = create_role(get_string('noneditingteacher'), 'teacher', get_string('noneditingteacherdescription'), 'teacher');
|
||||
$studentrole = create_role(get_string('defaultcoursestudent'), 'student', get_string('defaultcoursestudentdescription'), 'student');
|
||||
$guestrole = create_role(get_string('guest'), 'guest', get_string('guestdescription'), 'guest');
|
||||
$userrole = create_role(get_string('authenticateduser'), 'user', get_string('authenticateduserdescription'), 'user');
|
||||
$frontpagerole = create_role(get_string('frontpageuser', 'role'), 'frontpage', get_string('frontpageuserdescription', 'role'), 'frontpage');
|
||||
$managerrole = create_role('', 'manager', '', 'manager');
|
||||
$coursecreatorrole = create_role('', 'coursecreator', '', 'coursecreator');
|
||||
$editteacherrole = create_role('', 'editingteacher', '', 'editingteacher');
|
||||
$noneditteacherrole = create_role('', 'teacher', '', 'teacher');
|
||||
$studentrole = create_role('', 'student', '', 'student');
|
||||
$guestrole = create_role('', 'guest', '', 'guest');
|
||||
$userrole = create_role('', 'user', '', 'user');
|
||||
$frontpagerole = create_role('', 'frontpage', '', 'frontpage');
|
||||
|
||||
// Now is the correct moment to install capabilities - after creation of legacy roles, but before assigning of roles
|
||||
update_capabilities('moodle');
|
||||
|
|
|
@ -1018,9 +1018,9 @@
|
|||
<TABLE NAME="role" COMMENT="moodle roles" PREVIOUS="post" NEXT="context">
|
||||
<FIELDS>
|
||||
<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="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="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>
|
||||
|
@ -1028,9 +1028,8 @@
|
|||
<KEY NAME="primary" TYPE="primary" FIELDS="id"/>
|
||||
</KEYS>
|
||||
<INDEXES>
|
||||
<INDEX NAME="sortorder" UNIQUE="true" FIELDS="sortorder" NEXT="name"/>
|
||||
<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="name"/>
|
||||
<INDEX NAME="sortorder" UNIQUE="true" FIELDS="sortorder" NEXT="shortname"/>
|
||||
<INDEX NAME="shortname" UNIQUE="true" FIELDS="shortname" COMMENT="Enforces the constraint that role shortnames must be unique." PREVIOUS="sortorder"/>
|
||||
</INDEXES>
|
||||
</TABLE>
|
||||
<TABLE NAME="context" COMMENT="one of these must be set" PREVIOUS="role" NEXT="context_temp">
|
||||
|
|
|
@ -1015,5 +1015,21 @@ function xmldb_main_upgrade($oldversion) {
|
|||
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;
|
||||
}
|
||||
|
|
|
@ -624,6 +624,10 @@ class accesslib_testcase extends advanced_testcase {
|
|||
* @return void
|
||||
*/
|
||||
public function test_get_all_roles() {
|
||||
global $DB;
|
||||
|
||||
$this->resetAfterTest();
|
||||
|
||||
$allroles = get_all_roles();
|
||||
$this->assertEquals('array', gettype($allroles));
|
||||
$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) {
|
||||
$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();
|
||||
|
||||
$teacher = $DB->get_record('role', array('shortname'=>'teacher'), '*', MUST_EXIST);
|
||||
$allroles = $DB->get_records('role');
|
||||
$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');
|
||||
|
||||
foreach ($allroles as $role) {
|
||||
$this->assertNotEmpty(role_get_name($role, $coursecontext));
|
||||
if ($role->id == $teacher->id) {
|
||||
$this->assertSame($teacherename->name, role_get_name($role, $coursecontext));
|
||||
// Get localised name from lang pack.
|
||||
$this->assertSame('', $role->name);
|
||||
$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,99 +788,22 @@ class accesslib_testcase extends advanced_testcase {
|
|||
$rolenames[$role->id] = $role->name;
|
||||
}
|
||||
|
||||
/* TODO: unsupported! MDL-8249
|
||||
$fixed = role_fix_names($roles, $coursecontext, ROLENAME_SHORT);
|
||||
$this->assertCount(count($roles), $fixed);
|
||||
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);
|
||||
foreach($fixed as $roleid=>$rolename) {
|
||||
$this->assertInstanceOf('stdClass', $rolename);
|
||||
$role = $roles[$roleid];
|
||||
$name = role_get_name($role, $frontcontext);
|
||||
$this->assertSame($name, $rolename->localname);
|
||||
}
|
||||
$fixed = role_fix_names($rolenames, $coursecontext, ROLENAME_ORIGINAL);
|
||||
$this->assertCount(count($rolenames), $fixed);
|
||||
foreach($fixed as $roleid=>$rolename) {
|
||||
$role = $roles[$roleid];
|
||||
$name = role_get_name($role, $frontcontext);
|
||||
$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);
|
||||
$alltypes = array(ROLENAME_ALIAS, ROLENAME_ALIAS_RAW, ROLENAME_BOTH, ROLENAME_ORIGINAL, ROLENAME_ORIGINALANDSHORT, ROLENAME_SHORT);
|
||||
foreach ($alltypes as $type) {
|
||||
$fixed = role_fix_names($roles, $coursecontext, $type);
|
||||
$this->assertCount(count($roles), $fixed);
|
||||
foreach($fixed as $roleid=>$rolename) {
|
||||
$this->assertInstanceOf('stdClass', $rolename);
|
||||
$role = $allroles[$roleid];
|
||||
$name = role_get_name($role, $coursecontext, $type);
|
||||
$this->assertSame($name, $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);
|
||||
$fixed = role_fix_names($rolenames, $coursecontext, $type);
|
||||
$this->assertCount(count($rolenames), $fixed);
|
||||
foreach($fixed as $roleid=>$rolename) {
|
||||
$role = $allroles[$roleid];
|
||||
$name = role_get_name($role, $coursecontext, $type);
|
||||
$this->assertSame($name, $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);
|
||||
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);
|
||||
$roles = get_assignable_roles($coursecontext, $type, false, $admin);
|
||||
foreach ($roles as $roleid=>$rolename) {
|
||||
|
@ -977,17 +951,19 @@ class accesslib_testcase extends advanced_testcase {
|
|||
}
|
||||
|
||||
// Verify counts.
|
||||
//TODO: test all types - ROLENAME_SHORT is borked here for example MDL-8249
|
||||
$roles = get_assignable_roles($coursecontext, ROLENAME_ALIAS, false, $admin);
|
||||
list($rolenames, $rolecounts, $nameswithcounts) = get_assignable_roles($coursecontext, ROLENAME_ALIAS, true, $admin);
|
||||
$this->assertEquals($roles, $rolenames);
|
||||
foreach ($rolenames as $roleid=>$name) {
|
||||
if ($roleid == $teacherrole->id or $roleid == $studentrole->id) {
|
||||
$this->assertEquals(1, $rolecounts[$roleid]);
|
||||
} else {
|
||||
$this->assertEquals(0, $rolecounts[$roleid]);
|
||||
$alltypes = array(ROLENAME_ALIAS, ROLENAME_ALIAS_RAW, ROLENAME_BOTH, ROLENAME_ORIGINAL, ROLENAME_ORIGINALANDSHORT, ROLENAME_SHORT);
|
||||
foreach ($alltypes as $type) {
|
||||
$roles = get_assignable_roles($coursecontext, $type, false, $admin);
|
||||
list($rolenames, $rolecounts, $nameswithcounts) = get_assignable_roles($coursecontext, $type, true, $admin);
|
||||
$this->assertEquals($roles, $rolenames);
|
||||
foreach ($rolenames as $roleid=>$name) {
|
||||
if ($roleid == $teacherrole->id or $roleid == $studentrole->id) {
|
||||
$this->assertEquals(1, $rolecounts[$roleid]);
|
||||
} else {
|
||||
$this->assertEquals(0, $rolecounts[$roleid]);
|
||||
}
|
||||
$this->assertEquals("$name ($rolecounts[$roleid])", $nameswithcounts[$roleid]);
|
||||
}
|
||||
$this->assertEquals("$name ($rolecounts[$roleid])", $nameswithcounts[$roleid]);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1043,12 +1019,7 @@ class accesslib_testcase extends advanced_testcase {
|
|||
|
||||
if (isset($roles[$roleid])) {
|
||||
$coursecontext = $context->get_course_context(false);
|
||||
if ($coursecontext) {
|
||||
$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]);
|
||||
}
|
||||
$this->assertEquals(role_get_name($role, $coursecontext), $roles[$roleid]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1114,8 +1085,7 @@ class accesslib_testcase extends advanced_testcase {
|
|||
}
|
||||
|
||||
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);
|
||||
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);
|
||||
$roles = get_overridable_roles($coursecontext, $type, false);
|
||||
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');
|
||||
set_role_contextlevels($id2, array(CONTEXT_COURSE));
|
||||
|
||||
//TODO: add role name alias MDL-8249
|
||||
|
||||
$allroles = get_all_roles();
|
||||
$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().
|
||||
*/
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue