ListCommand::define()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 1
c 1
b 0
f 0
dl 0
loc 3
rs 10
cc 1
nc 1
nop 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace AbterPhp\Admin\Console\Commands\User;
6
7
use AbterPhp\Admin\Domain\Entities\User; // @phan-suppress-current-line PhanUnreferencedUseNormal
8
use AbterPhp\Admin\Orm\UserRepo;
9
use Opulence\Console\Commands\Command;
10
use Opulence\Console\Responses\Formatters\PaddingFormatter;
11
use Opulence\Console\Responses\Formatters\TableFormatter;
12
use Opulence\Console\Responses\IResponse;
13
14
class ListCommand extends Command
15
{
16
    public const COMMAND_NAME        = 'user:list';
17
    public const COMMAND_DESCRIPTION = 'List available users';
18
19
    protected UserRepo $userRepo;
20
21
    /**
22
     * ListCommand constructor.
23
     *
24
     * @param UserRepo $userRepo
25
     */
26
    public function __construct(UserRepo $userRepo)
27
    {
28
        $this->userRepo = $userRepo;
29
30
        parent::__construct();
31
    }
32
33
    /**
34
     * @inheritdoc
35
     */
36
    protected function define()
37
    {
38
        $this->setName(static::COMMAND_NAME)->setDescription(static::COMMAND_DESCRIPTION);
39
    }
40
41
    /**
42
     * @inheritdoc
43
     */
44
    protected function doExecute(IResponse $response)
45
    {
46
        $header = ['Id', 'Username', 'Email', 'Language', 'Groups'];
47
        $rows   = [];
48
        /** @var User $user */
49
        foreach ($this->userRepo->getAll() as $user) {
50
            $userGroups = [];
51
            foreach ($user->getUserGroups() as $ug) {
52
                $userGroups[] = $ug->getName();
53
            }
54
55
            $rows[] = [
56
                $user->getId(),
57
                $user->getUsername(),
58
                $user->getEmail(),
59
                $user->getUserLanguage()->getIdentifier(),
60
                join(", ", $userGroups),
61
            ];
62
        }
63
64
        $table = new TableFormatter(new PaddingFormatter());
65
        $response->writeln($table->format($rows, $header));
66
    }
67
}
68