Passed
Push — master ( 90d9fb...c697b7 )
by Peter
02:26
created

ListCommand::doExecute()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 22
Code Lines 14

Duplication

Lines 0
Ratio 0 %

Importance

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