MDL-59801 users: Show profile roles to students

Obey site config "profileroles" for students.
This commit is contained in:
Damyon Wiese
2017-08-22 13:59:59 +08:00
parent 27466d7548
commit 9df2fdecde
2 changed files with 17 additions and 3 deletions
+10 -3
View File
@@ -54,9 +54,10 @@ class user_roles_editable extends \core\output\inplace_editable {
* @param \stdClass $user The current user
* @param \stdClass[] $courseroles The list of course roles.
* @param \stdClass[] $assignableroles The list of assignable roles in this course.
* @param \stdClass[] $profileroles The list of roles that should be visible in a users profile.
* @param array $value Array of role ids.
*/
public function __construct($course, $context, $user, $courseroles, $assignableroles, $value) {
public function __construct($course, $context, $user, $courseroles, $assignableroles, $profileroles, $value) {
// Check capabilities to get editable value.
$editable = has_capability('moodle/role:assign', $context);
@@ -67,6 +68,7 @@ class user_roles_editable extends \core\output\inplace_editable {
// Remember these for the display value.
$this->courseroles = $courseroles;
$this->profileroles = $profileroles;
$this->context = $context;
parent::__construct('core_user', 'user_roles', $itemid, $editable, $value, $value);
@@ -89,8 +91,12 @@ class user_roles_editable extends \core\output\inplace_editable {
public function export_for_template(\renderer_base $output) {
$listofroles = [];
$roleids = json_decode($this->value);
foreach ($roleids as $id) {
$listofroles[] = format_string($this->courseroles[$id]->localname, true, ['context' => $this->context]);
// If this is a student, we only show a subset of the roles.
if ($this->editable || array_key_exists($id, $this->profileroles)) {
$listofroles[] = format_string($this->courseroles[$id]->localname, true, ['context' => $this->context]);
}
}
if (!empty($listofroles)) {
@@ -140,6 +146,7 @@ class user_roles_editable extends \core\output\inplace_editable {
$allroles = role_fix_names(get_all_roles($context), $context);
$assignableroles = get_assignable_roles($context, ROLENAME_ALIAS, false);
$userroles = get_user_roles($context, $userid, true, 'c.contextlevel DESC, r.sortorder ASC');
$profileroles = get_profile_roles($context);
$ids = [];
foreach ($userroles as $role) {
@@ -192,6 +199,6 @@ class user_roles_editable extends \core\output\inplace_editable {
$course = get_course($courseid);
$user = core_user::get_user($userid);
return new self($course, $context, $user, $allroles, $assignableroles, array_values(array_unique($ids)));
return new self($course, $context, $user, $allroles, $assignableroles, $profileroles, array_values(array_unique($ids)));
}
}
+7
View File
@@ -124,6 +124,11 @@ class participants_table extends \table_sql {
*/
protected $assignableroles;
/**
* @var \stdClass[] Profile roles in this course.
*/
protected $profileroles;
/**
* Sets up the table.
*
@@ -224,6 +229,7 @@ class participants_table extends \table_sql {
$this->allroles = role_fix_names(get_all_roles($this->context), $this->context);
$this->allroleassignments = get_users_roles($this->context, [], true, 'c.contextlevel DESC, r.sortorder ASC');
$this->assignableroles = get_assignable_roles($this->context, ROLENAME_ALIAS, false);
$this->profileroles = get_profile_roles($this->context);
}
/**
@@ -291,6 +297,7 @@ class participants_table extends \table_sql {
$data,
$this->allroles,
$this->assignableroles,
$this->profileroles,
$ids);
return $OUTPUT->render_from_template('core/inplace_editable', $editable->export_for_template($OUTPUT));