View source
<?php
namespace Drupal\field_permissions\Controller;
use Drupal\Core\Controller\ControllerBase;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\Link;
use Drupal\field\FieldStorageConfigInterface;
use Drupal\field_permissions\FieldPermissionsServiceInterface;
use Drupal\field_permissions\Plugin\FieldPermissionType\Manager;
use Drupal\field_permissions\Plugin\FieldPermissionTypeInterface;
use Drupal\field_permissions\Plugin\CustomPermissionsInterface;
use Drupal\user\RoleInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
class FieldPermissionsController extends ControllerBase {
protected $entityTypeManager;
protected $fieldPermissions;
protected $permissionTypeManager;
public function __construct(FieldPermissionsServiceInterface $field_permissions_service, EntityTypeManagerInterface $entity_type_manager, Manager $permission_type_manager) {
$this->entityTypeManager = $entity_type_manager;
$this->fieldPermissions = $field_permissions_service;
$this->permissionTypeManager = $permission_type_manager;
}
public static function create(ContainerInterface $container) {
return new static($container
->get('field_permissions.permissions_service'), $container
->get('entity_type.manager'), $container
->get('plugin.field_permissions.types.manager'));
}
public function content() {
$build['table'] = [
'#type' => 'table',
'#header' => $this
->buildHeader(),
'#title' => $this
->getTitle(),
'#rows' => $this
->buildRows(),
];
$build['#attached']['library'] = 'field_permissions/field_permissions';
return $build;
}
public function buildHeader() {
$headers = [
$this
->t('Field name'),
$this
->t('Field type'),
$this
->t('Entity type'),
$this
->t('Used in'),
];
$permissions_list = $this->fieldPermissions
->getList();
foreach ($permissions_list as $permission_type => $permission_info) {
$headers[] = [
'data' => $permission_info['label'],
'class' => 'field-permissions-header',
];
}
return $headers;
}
public function getTitle() {
return $this
->t('Field permissions');
}
protected function buildRows() {
$instances = $this->entityTypeManager
->getStorage('field_storage_config')
->loadMultiple();
$rows = [];
foreach ($instances as $key => $instance) {
$rows[] = $this
->buildRow($instance);
}
return $rows;
}
protected function buildRow(FieldStorageConfigInterface $field_storage) {
$row = [];
if ($field_storage
->isLocked()) {
$row[0]['class'] = [
'menu-disabled',
];
$row[0]['data'] = $this
->t('@field_name (Locked)', [
'@field_name' => $field_storage
->getName(),
]);
}
else {
$row[0]['data'] = $field_storage
->getName();
}
$row[1]['data'] = $field_storage
->getType();
$row[2]['data'] = $field_storage
->getTargetEntityTypeId();
$row[3]['data'] = implode(", ", $field_storage
->getBundles());
$default_type = $this->fieldPermissions
->fieldGetPermissionType($field_storage);
$field_permissions = $this->fieldPermissions
->getPermissionsByRole();
if ($default_type === FieldPermissionTypeInterface::ACCESS_PUBLIC) {
$row[4]['data'] = $this
->t('Not set (Field inherits content permissions.)');
$row[4]['colspan'] = 5;
}
else {
$plugin = $this->permissionTypeManager
->createInstance($default_type, [], $field_storage);
if ($plugin instanceof CustomPermissionsInterface) {
foreach (array_keys($plugin
->getPermissions()) as $index => $permission) {
$all_access = in_array($permission, $field_permissions[RoleInterface::ANONYMOUS_ID]) && in_array($permission, $field_permissions[RoleInterface::AUTHENTICATED_ID]);
$class = $all_access ? 'field-permissions-status-on' : 'field-permissions-status-off';
$text = $all_access ? $this
->t('All users have this permission') : $this
->t('Not all users have this permission');
$link = Link::createFromRoute($text, 'user.admin_permissions', [], [
'fragment' => 'module-field_permissions',
])
->toRenderable();
$link['#options']['attributes']['title'] = $text;
$row[4 + $index]['data'] = $link;
$row[4 + $index]['class'] = [
$class,
];
}
}
else {
$row[4]['data'] = $this
->t('@label (@description)', [
'@label' => $plugin
->getLabel(),
'@description' => $plugin
->getDescription(),
]);
$row[4]['colspan'] = 5;
}
}
return $row;
}
}