Yaffs site version 1.1
[yaffs-website] / vendor / drupal / console / src / Command / PermissionDebugCommand.php
1 <?php
2
3 /**
4  * @file
5  * Contains \Drupal\Console\Command\PermissionDebugCommand.
6  */
7
8 namespace Drupal\Console\Command;
9
10 use Symfony\Component\Console\Input\InputInterface;
11 use Symfony\Component\Console\Output\OutputInterface;
12 use Symfony\Component\Console\Input\InputArgument;
13 use Symfony\Component\Console\Command\Command;
14 use Drupal\Console\Core\Command\Shared\ContainerAwareCommandTrait;
15 use Drupal\Console\Core\Style\DrupalStyle;
16
17 /**
18  * Class DebugCommand
19  *
20  * @package Drupal\Console\Command
21  */
22 class PermissionDebugCommand extends Command
23 {
24     use ContainerAwareCommandTrait;
25     /**
26      * {@inheritdoc}
27      */
28     protected function configure()
29     {
30         $this->setName('permission:debug')
31             ->setDescription($this->trans('commands.permission.debug.description'))
32             ->setHelp($this->trans('commands.permission.debug.help'))
33             ->addArgument(
34                 'role',
35                 InputArgument::OPTIONAL,
36                 $this->trans('commands.permission.debug.arguments.role')
37             );
38     }
39
40     /**
41      * {@inheritdoc}
42      */
43     protected function execute(InputInterface $input, OutputInterface $output)
44     {
45         $io = new DrupalStyle($input, $output);
46
47         $role = $input->getArgument('role');
48         // No role specified, show a list of ALL permissions.
49         if (!$role) {
50             $tableHeader = [
51                 $this->trans('commands.permission.debug.table-headers.permission-name'),
52                 $this->trans('commands.permission.debug.table-headers.permission-label'),
53                 $this->trans('commands.permission.debug.table-headers.permission-role')
54             ];
55             $tableRows = [];
56             $permissions = \Drupal::service('user.permissions')->getPermissions();
57             foreach ($permissions as $permission_name => $permission) {
58                 $tableRows[$permission_name] = [
59                     $permission_name,
60                     strip_tags($permission['title']->__toString()),
61                     implode(', ', $this->getRolesAssignedByPermission($permission_name))
62                 ];
63             }
64
65             ksort($tableRows);
66             $io->table($tableHeader, array_values($tableRows));
67
68             return true;
69         } else {
70             $tableHeader = [
71                 $this->trans('commands.permission.debug.table-headers.permission-name'),
72                 $this->trans('commands.permission.debug.table-headers.permission-label')
73             ];
74             $tableRows = [];
75             $permissions = \Drupal::service('user.permissions')->getPermissions();
76             $roles = user_roles();
77             if (empty($roles[$role])) {
78                 $message = sprintf($this->trans('commands.permission.debug.messages.role-error'), $role);
79                 $io->error($message);
80                 return true;
81             }
82             $user_permission = $roles[$role]->getPermissions();
83             foreach ($permissions as $permission_name => $permission) {
84                 if (in_array($permission_name, $user_permission)) {
85                     $tableRows[$permission_name] = [
86                       $permission_name,
87                       strip_tags($permission['title']->__toString())
88                     ];
89                 }
90             }
91             ksort($tableRows);
92             $io->table($tableHeader, array_values($tableRows));
93             return true;
94         }
95     }
96
97     /**
98      * Get user roles Assigned by Permission.
99      *
100      * @param string $permission_name
101      *   Permission Name.
102      *
103      * @return array
104      *   User roles filtered by permission else empty array.
105      */
106     public function getRolesAssignedByPermission($permission_name)
107     {
108         $roles = user_roles();
109         $roles_found = [];
110         foreach ($roles as $role) {
111             if ($role->hasPermission($permission_name)) {
112                 $roles_found[] = $role->getOriginalId();
113             }
114         }
115         return $roles_found;
116     }
117 }