group_permissions-1.0.0-alpha1/src/GroupPermissionsManager.php

src/GroupPermissionsManager.php
<?php

namespace Drupal\group_permissions;

use Drupal\Core\Cache\CacheBackendInterface;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\Session\AccountInterface;
use Drupal\group\Entity\GroupInterface;
use Drupal\group\GroupRoleSynchronizerInterface;

/**
 * Service to handle custom group permissions.
 */
class GroupPermissionsManager implements GroupPermissionsManagerInterface {

  /**
   * The array of the group custom permissions.
   *
   * @var array
   */
  protected $customPermissions = [];

  /**
   * The array of the group permissions objects.
   *
   * @var array
   */
  protected $groupPermissions = [];

  /**
   * The array of the outsider group roles.
   *
   * @var array
   */
  protected $outsiderRoles = [];

  /**
   * The array of the group roles.
   *
   * @var array
   */
  protected $groupRoles = [];

  /**
   * The cache backend to use.
   *
   * @var \Drupal\Core\Cache\CacheBackendInterface
   */
  protected $cacheBackend;

  /**
   * The group role synchronizer service.
   *
   * @var \Drupal\group\GroupRoleSynchronizerInterface
   */
  protected $groupRoleSynchronizer;

  /**
   * Group role storage.
   *
   * @var \Drupal\Core\Entity\EntityStorageInterface
   */
  protected $groupRoleStorage;

  /**
   * Group permissions storage.
   *
   * @var \Drupal\Core\Entity\EntityStorageInterface
   */
  protected $groupPermissionStorage;

  /**
   * {@inheritdoc}
   */
  public function __construct(CacheBackendInterface $cache_backend, EntityTypeManagerInterface $entity_type_manager, GroupRoleSynchronizerInterface $group_role_synchronizer) {
    $this->cacheBackend = $cache_backend;
    $this->groupRoleSynchronizer = $group_role_synchronizer;
    $this->groupRoleStorage = $entity_type_manager->getStorage('group_role');
    $this->groupPermissionStorage = $entity_type_manager->getStorage('group_permission');
  }

  /**
   * {@inheritdoc}
   */
  public function getCustomPermissions(GroupInterface $group) {
    $group_id = $group->id();
    $this->customPermissions[$group_id] = [];
    if (empty($this->customPermissions[$group_id])) {
      $group_permission = $this->getGroupPermission($group);
      if (!empty($group_permission) && $group_permission->isPublished()) {
        $this->customPermissions[$group_id] = $group_permission->getPermissions();
      }
    }

    return $this->customPermissions[$group_id];
  }

  /**
   * {@inheritdoc}
   */
  public function getGroupPermission(GroupInterface $group) {
    $group_id = $group->id();
    if (!isset($this->groupPermissions[$group_id])) {
      $this->groupPermissions[$group_id] = NULL;
      $cid = "group_permission:$group_id";
      $data_cached = $this->cacheBackend->get($cid);
      if (!$data_cached) {
        /** @var \Drupal\group_permissions\Entity\GroupPermission $group_permission */
        $group_permission = $this->loadByGroup($group);
        if (!empty($group_permission)) {
          $this->groupPermissions[$group_id] = $group_permission;
          $tags = [];
          $tags[] = "group:$group_id";
          $tags[] = "group_permission:{$group_permission->id()}";

          // Store the tree into the cache.
          $this->cacheBackend->set($cid, $this->groupPermissions[$group_id], CacheBackendInterface::CACHE_PERMANENT, $tags);
        }
      }
      else {
        $this->groupPermissions[$group_id] = $data_cached->data;
      }
    }

    return $this->groupPermissions[$group_id];
  }

  /**
   * {@inheritdoc}
   */
  public function getOutsiderRoles(GroupInterface $group, AccountInterface $account) {
    $group_type = $group->getGroupType();
    $group_type_id = $group_type->id();
    if (empty($this->outsiderRoles[$group_type_id])) {
      $account_roles = $account->getRoles(TRUE);
      foreach ($account_roles as $role) {
        $advanced_outsider_role_id = $this->groupRoleSynchronizer->getGroupRoleId($group_type_id, $role);
        $outsider_roles[] = $this->groupRoleStorage->load($advanced_outsider_role_id);
      }
      $outsider_roles[$group_type->getOutsiderRoleId()] = $group_type->getOutsiderRole();
      $this->outsiderRoles[$group_type_id] = $outsider_roles;
    }

    return $this->outsiderRoles[$group_type_id];
  }

  /**
   * {@inheritdoc}
   */
  public function getAll() {
    return $this->groupPermissionStorage->getAllActive();
  }

  /**
   * {@inheritdoc}
   */
  public function getGroupRoles(GroupInterface $group) {
    if (empty($this->groupRoles[$group->id()])) {
      $group_type_id = $group->getGroupType()->id();
      $properties = [
        'group_type' => $group_type_id,
        'permissions_ui' => TRUE,
      ];

      $roles = $this->groupRoleStorage->loadByProperties($properties);

      uasort($roles, '\Drupal\group\Entity\GroupRole::sort');

      $outsider_roles = $this->groupRoleStorage->loadSynchronizedByGroupTypes([$group_type_id]);
      $this->groupRoles[$group->id()] = array_merge($roles, $outsider_roles);
    }

    return $this->groupRoles[$group->id()];
  }

  /**
   * {@inheritdoc}
   */
  public function loadByGroup(GroupInterface $group) {
    return $this->groupPermissionStorage->loadByGroup($group);
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc