Skip to content
Snippets Groups Projects
Commit a5116cbe authored by Marcin Grabias's avatar Marcin Grabias
Browse files

Merge branch '3523397-adding-students-to' into '1.0.x'

#3523397: Make adding students to classes access mapped by course permission.

See merge request !94
parents 6d6632a1 cef2dd4f
No related branches found
No related tags found
No related merge requests found
Pipeline #492407 skipped
add students:
title: 'Add students'
description: 'Add students to child classes. Effective only in LMS Courses.'
......@@ -41,3 +41,20 @@ function lms_post_update_set_statuses(array &$sandbox): void {
$sandbox['progress']++;
$sandbox['#finished'] = $sandbox['progress'] / $sandbox['total'];
}
/**
* BC - Add add students permission to all member course group roles.
*/
function lms_post_update_add_students_permission(): void {
$roles = \Drupal::entityTypeManager()->getStorage('group_role')->loadByProperties([
'group_type' => 'lms_course',
'scope' => ['insider', 'individual'],
]);
/** @var Drupal\group\Entity\GroupRoleInterface $role */
foreach ($roles as $role) {
if ($role->hasPermission('add students')) {
continue;
}
$role->grantPermission('add students')->save();
}
}
......@@ -9,6 +9,7 @@ use Drupal\Core\Session\AccountInterface;
use Drupal\flexible_permissions\CalculatedPermissionsItem;
use Drupal\flexible_permissions\PermissionCalculatorBase;
use Drupal\flexible_permissions\RefinableCalculatedPermissionsInterface;
use Drupal\group\Entity\GroupMembershipInterface;
use Drupal\group\Entity\GroupRelationshipInterface;
use Drupal\group\PermissionScopeInterface;
use Drupal\lms\Entity\Bundle\Course;
......@@ -51,9 +52,18 @@ final class ClassPermissionCalculator extends PermissionCalculatorBase {
foreach ($memberships as $membership) {
$calculated_permissions->addCacheableDependency($membership);
\assert($membership instanceof GroupRelationshipInterface);
\assert($membership instanceof GroupMembershipInterface);
$course = $membership->getGroup();
\assert($course instanceof Course);
$class_permissions = ['view group'];
foreach ($membership->getRoles(TRUE) as $role) {
$calculated_permissions->addCacheableDependency($role);
if ($role->hasPermission('add students')) {
$class_permissions[] = 'administer members';
}
}
foreach ($course->getClasses() as $class) {
$class_id = $class->id();
if (\array_key_exists($class_id, $class_ids)) {
......@@ -64,10 +74,7 @@ final class ClassPermissionCalculator extends PermissionCalculatorBase {
$calculated_permissions->addItem(new CalculatedPermissionsItem(
$scope,
$class_id,
[
'administer members',
'view group',
],
$class_permissions,
FALSE,
));
}
......@@ -83,7 +90,7 @@ final class ClassPermissionCalculator extends PermissionCalculatorBase {
$courses = [];
foreach ($memberships as $membership) {
\assert($membership instanceof GroupRelationshipInterface);
\assert($membership instanceof GroupMembershipInterface);
$course_relationships = $this->entityTypeManager->getStorage('group_relationship')->loadByProperties([
'plugin_id' => 'lms_classes',
'entity_id' => $membership->getGroupId(),
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment