ExtensionMenu   A
last analyzed

Complexity

Total Complexity 12

Size/Duplication

Total Lines 54
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 22
c 1
b 0
f 0
dl 0
loc 54
rs 10
wmc 12

5 Methods

Rating   Name   Duplication   Size   Complexity  
A getAdmin() 0 4 1
A __construct() 0 5 1
A getBundleName() 0 3 1
A getAccount() 0 20 6
A getUser() 0 6 3
1
<?php
2
3
declare(strict_types=1);
4
5
/*
6
 * This file is part of the Zikula package.
7
 *
8
 * Copyright Zikula - https://ziku.la/
9
 *
10
 * For the full copyright and license information, please view the LICENSE
11
 * file that was distributed with this source code.
12
 */
13
14
namespace Zikula\UsersBundle\Menu;
15
16
use EasyCorp\Bundle\EasyAdminBundle\Config\MenuItem;
17
use Symfony\Bundle\SecurityBundle\Security;
18
use Zikula\ThemeBundle\ExtensionMenu\AbstractExtensionMenu;
19
use Zikula\UsersBundle\Entity\Group;
20
use Zikula\UsersBundle\Entity\User;
21
use Zikula\UsersBundle\UsersConstant;
22
use function Symfony\Component\Translation\t;
23
24
class ExtensionMenu extends AbstractExtensionMenu
25
{
26
    public function __construct(
27
        private readonly Security $security,
28
        private readonly bool $registrationEnabled,
29
        private readonly bool $allowSelfDeletion
30
    ) {
31
    }
32
33
    protected function getAdmin(): iterable
34
    {
35
        yield MenuItem::linkToCrud(t('Users'), 'fas fa-user', User::class);
36
        yield MenuItem::linkToCrud(t('Groups'), 'fas fa-people-group', Group::class);
37
    }
38
39
    protected function getUser(): iterable
40
    {
41
        if (null === $this->security->getUser()) {
42
            yield MenuItem::linktoRoute(t('Login'), 'fas fa-sign-in-alt', 'nucleos_user_security_login');
43
            if ($this->registrationEnabled) {
44
                yield MenuItem::linktoRoute(t('New account'), 'fas fa-plus', 'nucleos_profile_registration_register');
45
            }
46
        }
47
    }
48
49
    protected function getAccount(): iterable
50
    {
51
        $loggedIn = null !== $this->security->getUser();
52
        if (!$loggedIn) {
53
            yield MenuItem::linktoRoute(t('I would like to login'), 'fas fa-sign-in-alt', 'nucleos_user_security_login');
54
            if ($this->registrationEnabled) {
55
                yield MenuItem::linktoRoute(t('I would like to create a new account'), 'fas fa-plus', 'nucleos_profile_registration_register');
56
            }
57
        }
58
        yield MenuItem::linktoRoute(t('Reset password'), 'fas fa-refresh', 'nucleos_user_resetting_request');
59
        if ($loggedIn) {
60
            yield MenuItem::linktoRoute(t('Update security'), 'fas fa-lock', 'nucleos_user_update_security');
61
62
            yield MenuItem::linktoRoute(t('My profile'), 'fas fa-user', 'nucleos_profile_profile_show');
63
            yield MenuItem::linktoRoute(t('Edit profile'), 'fas fa-user-pen', 'nucleos_profile_profile_edit');
64
65
            if ($this->allowSelfDeletion) {
66
                if (UsersConstant::USER_ID_ADMIN !== $this->security->getUser()->getId()) {
0 ignored issues
show
Bug introduced by
The method getId() does not exist on Symfony\Component\Security\Core\User\UserInterface. It seems like you code against a sub-type of Symfony\Component\Security\Core\User\UserInterface such as Zikula\UsersBundle\Entity\User. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

66
                if (UsersConstant::USER_ID_ADMIN !== $this->security->getUser()->/** @scrutinizer ignore-call */ getId()) {
Loading history...
67
                    yield MenuItem::linktoRoute(t('Delete my account'), 'fas fa-trash-alt', 'nucleos_user_delete_account')
68
                        ->setCssClass('text-danger')
69
                    ;
70
                }
71
            }
72
        }
73
    }
74
75
    public function getBundleName(): string
76
    {
77
        return 'ZikulaUsersBundle';
78
    }
79
}
80