Security update for Core, with self-updated composer
[yaffs-website] / vendor / drupal / console / src / Command / Debug / UserCommand.php
diff --git a/vendor/drupal/console/src/Command/Debug/UserCommand.php b/vendor/drupal/console/src/Command/Debug/UserCommand.php
new file mode 100644 (file)
index 0000000..4139f1e
--- /dev/null
@@ -0,0 +1,187 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Console\Command\User\DebugCommand.
+ */
+
+namespace Drupal\Console\Command\Debug;
+
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+use Drupal\Console\Core\Command\Command;
+use Drupal\Core\Entity\EntityTypeManagerInterface;
+use Drupal\Core\Entity\Query\QueryFactory;
+use Drupal\Console\Utils\DrupalApi;
+
+/**
+ * Class UserCommand
+ *
+ * @package Drupal\Console\Command\Debug
+ */
+class UserCommand extends Command
+{
+    /**
+     * @var EntityTypeManagerInterface
+     */
+    protected $entityTypeManager;
+
+    /**
+     * @var QueryFactory
+     */
+    protected $entityQuery;
+
+    /**
+     * @var DrupalApi
+     */
+    protected $drupalApi;
+
+    /**
+     * DebugCommand constructor.
+     *
+     * @param EntityTypeManagerInterface $entityTypeManager
+     * @param QueryFactory               $entityQuery
+     * @param DrupalApi                  $drupalApi
+     */
+    public function __construct(
+        EntityTypeManagerInterface $entityTypeManager,
+        QueryFactory $entityQuery,
+        DrupalApi $drupalApi
+    ) {
+        $this->entityTypeManager = $entityTypeManager;
+        $this->entityQuery = $entityQuery;
+        $this->drupalApi = $drupalApi;
+        parent::__construct();
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function configure()
+    {
+        $this
+            ->setName('debug:user')
+            ->setDescription($this->trans('commands.debug.user.description'))
+            ->addOption(
+                'uid',
+                null,
+                InputOption::VALUE_OPTIONAL | InputOption::VALUE_IS_ARRAY,
+                $this->trans('commands.debug.user.options.uid')
+            )
+            ->addOption(
+                'username',
+                null,
+                InputOption::VALUE_OPTIONAL | InputOption::VALUE_IS_ARRAY,
+                $this->trans('commands.debug.user.options.username')
+            )
+            ->addOption(
+                'mail',
+                null,
+                InputOption::VALUE_OPTIONAL | InputOption::VALUE_IS_ARRAY,
+                $this->trans('commands.debug.user.options.mail')
+            )
+            ->addOption(
+                'roles',
+                null,
+                InputOption::VALUE_OPTIONAL | InputOption::VALUE_OPTIONAL,
+                $this->trans('commands.debug.user.options.roles')
+            )
+            ->addOption(
+                'limit',
+                null,
+                InputOption::VALUE_OPTIONAL,
+                $this->trans('commands.debug.user.options.limit')
+            )->setAliases(['dus']);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function execute(InputInterface $input, OutputInterface $output)
+    {
+        $roles = $input->getOption('roles');
+        $limit = $input->getOption('limit');
+
+        $uids = $this->splitOption($input->getOption('uid'));
+        $usernames = $this->splitOption($input->getOption('username'));
+        $mails = $this->splitOption($input->getOption('mail'));
+
+        $userStorage = $this->entityTypeManager->getStorage('user');
+        $systemRoles = $this->drupalApi->getRoles();
+
+        $query = $this->entityQuery->get('user');
+        $query->condition('uid', 0, '>');
+        $query->sort('uid');
+
+
+        // uid as option
+        if (is_array($uids) && $uids) {
+            $group = $query->andConditionGroup()
+                ->condition('uid', $uids, 'IN');
+            $query->condition($group);
+        }
+
+        // username as option
+        if (is_array($usernames) && $usernames) {
+            $group = $query->andConditionGroup()
+                ->condition('name', $usernames, 'IN');
+            $query->condition($group);
+        }
+
+        // mail as option
+        if (is_array($mails) && $mails) {
+            $group = $query->andConditionGroup()
+                ->condition('mail', $mails, 'IN');
+            $query->condition($group);
+        }
+
+        if ($roles) {
+            $query->condition('roles', is_array($roles)?$roles:[$roles], 'IN');
+        }
+
+        if ($limit) {
+            $query->range(0, $limit);
+        }
+
+        $results = $query->execute();
+        $users = $userStorage->loadMultiple($results);
+
+        $tableHeader = [
+            $this->trans('commands.debug.user.messages.user-id'),
+            $this->trans('commands.debug.user.messages.username'),
+            $this->trans('commands.debug.user.messages.roles'),
+            $this->trans('commands.debug.user.messages.status'),
+        ];
+
+        $tableRows = [];
+        foreach ($users as $userId => $user) {
+            $userRoles = [];
+            foreach ($user->getRoles() as $userRole) {
+                if ($systemRoles[$userRole]) {
+                    $userRoles[] = $systemRoles[$userRole];
+                }
+            }
+
+            $status = $user->isActive()?$this->trans('commands.common.status.enabled'):$this->trans('commands.common.status.disabled');
+            $tableRows[] = [
+                $userId,
+                $user->getUsername(),
+                implode(', ', $userRoles),
+                $status
+            ];
+        }
+
+        $this->getIo()->table($tableHeader, $tableRows);
+    }
+
+    //@TODO: this should be in src/Command/Shared/CommandTrait.php
+    public function splitOption($option)
+    {
+        if (1 == count($option) && strpos($option[0], " ") >= 1) {
+            return explode(" ", $option[0]);
+        } else {
+            return $option;
+        }
+    }
+}