71aef59756742a224a123b03e294dc5e74911f60
[yaffs-website] / web / core / modules / user / src / Plugin / views / field / Permissions.php
1 <?php
2
3 namespace Drupal\user\Plugin\views\field;
4
5 use Drupal\Core\Entity\EntityManagerInterface;
6 use Drupal\Core\Extension\ModuleHandlerInterface;
7 use Drupal\views\Plugin\views\display\DisplayPluginBase;
8 use Drupal\views\ViewExecutable;
9 use Drupal\views\Plugin\views\field\PrerenderList;
10 use Symfony\Component\DependencyInjection\ContainerInterface;
11
12 /**
13  * Field handler to provide a list of permissions.
14  *
15  * @ingroup views_field_handlers
16  *
17  * @ViewsField("user_permissions")
18  */
19 class Permissions extends PrerenderList {
20
21   /**
22    * The role storage.
23    *
24    * @var \Drupal\user\RoleStorageInterface
25    */
26   protected $roleStorage;
27
28   /**
29    * The module handler.
30    *
31    * @var \Drupal\Core\Extension\ModuleHandlerInterface
32    */
33   protected $moduleHandler;
34
35   /**
36    * Constructs a Drupal\Component\Plugin\PluginBase object.
37    *
38    * @param array $configuration
39    *   A configuration array containing information about the plugin instance.
40    * @param string $plugin_id
41    *   The plugin_id for the plugin instance.
42    * @param mixed $plugin_definition
43    *   The plugin implementation definition.
44    * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler
45    *   The module handler.
46    * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager
47    *   The entity manager
48    */
49   public function __construct(array $configuration, $plugin_id, $plugin_definition, ModuleHandlerInterface $module_handler, EntityManagerInterface $entity_manager) {
50     parent::__construct($configuration, $plugin_id, $plugin_definition);
51
52     $this->roleStorage = $entity_manager->getStorage('user_role');
53     $this->moduleHandler = $module_handler;
54   }
55
56   /**
57    * {@inheritdoc}
58    */
59   public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
60     return new static($configuration, $plugin_id, $plugin_definition, $container->get('module_handler'), $container->get('entity.manager'));
61   }
62
63   /**
64    * {@inheritdoc}
65    */
66   public function init(ViewExecutable $view, DisplayPluginBase $display, array &$options = NULL) {
67     parent::init($view, $display, $options);
68
69     $this->additional_fields['uid'] = ['table' => 'users_field_data', 'field' => 'uid'];
70   }
71
72   public function query() {
73     $this->addAdditionalFields();
74     $this->field_alias = $this->aliases['uid'];
75   }
76
77   public function preRender(&$values) {
78     $this->items = [];
79
80     $permission_names = \Drupal::service('user.permissions')->getPermissions();
81
82     $rids = [];
83     foreach ($values as $result) {
84       $user_rids = $this->getEntity($result)->getRoles();
85       $uid = $this->getValue($result);
86
87       foreach ($user_rids as $rid) {
88         $rids[$rid][] = $uid;
89       }
90     }
91
92     if ($rids) {
93       $roles = $this->roleStorage->loadMultiple(array_keys($rids));
94       foreach ($rids as $rid => $role_uids) {
95         foreach ($roles[$rid]->getPermissions() as $permission) {
96           foreach ($role_uids as $uid) {
97             $this->items[$uid][$permission]['permission'] = $permission_names[$permission]['title'];
98           }
99         }
100       }
101
102       foreach ($this->items as &$permission) {
103         ksort($permission);
104       }
105     }
106   }
107
108   public function render_item($count, $item) {
109     return $item['permission'];
110   }
111
112 }