Passed
Push — master ( 6ed6d7...d7b8b3 )
by Derek Stephen
02:58
created

BoneUserPackage::postInstall()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 1
Code Lines 0

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 1
Bugs 0 Features 1
Metric Value
cc 1
eloc 0
c 1
b 0
f 1
nc 1
nop 2
dl 0
loc 1
ccs 0
cts 1
cp 0
crap 2
rs 10
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Bone\User;
6
7
use Barnacle\Container;
8
use Barnacle\RegistrationInterface;
9
use Bone\Application;
10
use Bone\Console\Command;
11
use Bone\Console\CommandRegistrationInterface;
12
use Bone\Contracts\Container\AdminPanelProviderInterface;
13
use Bone\Contracts\Container\DefaultSettingsProviderInterface;
14
use Bone\Contracts\Container\FixtureProviderInterface;
15
use Bone\Controller\Init;
16
use Bone\I18n\I18nRegistrationInterface;
17
use Bone\Mail\Service\MailService;
18
use Bone\Paseto\PasetoService;
19
use Bone\Router\Router;
20
use Bone\Router\RouterConfigInterface;
21
use Bone\User\Controller\BoneUserApiController;
22
use Bone\User\Controller\BoneUserController;
23
use Bone\User\Fixtures\LoadUsers;
24
use Bone\User\Http\Controller\Admin\PersonAdminController;
25
use Bone\User\Http\Controller\Admin\UserAdminController;
26
use Bone\User\Http\Middleware\SessionAuth;
27
use Bone\User\Http\Middleware\SessionAuthRedirect;
28
use Bone\User\View\Helper\LoginWidget;
29
use Bone\View\Util\AdminLink;
30
use Bone\View\ViewRegistrationInterface;
31
use Del\Booty\AssetRegistrationInterface;
32
use Del\Console\CreateUserCommand;
33
use Del\Console\ResetPasswordCommand;
34
use Del\Service\UserService;
35
use Del\SessionManager;
36
use League\Route\RouteGroup;
37
use League\Route\Strategy\JsonStrategy;
38
use Laminas\Diactoros\ResponseFactory;
39
use Laminas\I18n\Translator\Translator;
40
use Symfony\Component\Console\Style\SymfonyStyle;
41
42
class BoneUserPackage implements RegistrationInterface, RouterConfigInterface, I18nRegistrationInterface,
43
                                 AssetRegistrationInterface, ViewRegistrationInterface, CommandRegistrationInterface,
44
                                 FixtureProviderInterface, AdminPanelProviderInterface, DefaultSettingsProviderInterface
45
{
46 3
    public function addToContainer(Container $c)
47
    {
48 3
        $c[BoneUserController::class] = $c->factory(function (Container $c) {
49
            /** @var MailService $mailService */
50 1
            $mailService = $c->get(MailService::class);
51
            /** @var UserService $userService */
52 1
            $userService = $c->get(UserService::class);
53 1
            $pasetoService = $c->get(PasetoService::class);
54 1
            $defaultLayout = $c->get('default_layout');
55 1
            $adminLayout = $c->has('admin_layout') ? $c->get('admin_layout') : $defaultLayout;
56 1
            $options = [];
57
58 1
            if ($c->has('bone-user')) {
59 1
                $options = $c->get('bone-user');
60
            }
61
62 1
            $loginRedirectRoute = $options['loginRedirectRoute'] ?? '/user/home';
63 1
            $registrationEnabled = $options['enableRegistration'] ?? true;
64 1
            $profileRequired = $options['requireProfile'] ?? false;
65 1
            $rememberMeCookie = $options['rememberMeCookie'] ?? false;
66 1
            $controller = new BoneUserController($userService, $mailService, $loginRedirectRoute, $adminLayout, $pasetoService, $registrationEnabled, $profileRequired, $rememberMeCookie);
67
68 1
            return  Init::controller($controller, $c);
69 3
        });
70
71 3
        $c[BoneUserApiController::class] = $c->factory(function (Container $c) {
72
            /** @var UserService $userService */
73 1
            $userService = $c->get(UserService::class);
74 1
            $dir = $c->get('uploads_dir');
75 1
            $img = $c->get('image_dir');
76 1
            $tmp = $c->get('temp_dir');
77 1
            $mailService = $c->get(MailService::class);
78
79 1
            return Init::controller(new BoneUserApiController($userService, $dir, $img, $tmp, $mailService), $c);
80 3
        });
81
82
83 3
        $c[SessionAuth::class] = $c->factory(function (Container $c) {
84
            /** @var SessionManager $session */
85 2
            $session = $c->get(SessionManager::class);
86
            /** @var UserService $userService */
87 2
            $userService = $c->get(UserService::class);
88
            /** @var PasetoService $pasetoService */
89 2
            $pasetoService = $c->get(PasetoService::class);
90
91 2
            return new SessionAuth($session, $userService, $pasetoService);
92 3
        });
93
94 3
        $c[SessionAuthRedirect::class] = $c->factory(function (Container $c) {
95
            /** @var SessionManager $session */
96 1
            $session = $c->get(SessionManager::class);
97
            /** @var UserService $userService */
98 1
            $userService = $c->get(UserService::class);
99
            /** @var PasetoService $pasetoService */
100 1
            $pasetoService = $c->get(PasetoService::class);
101
102 1
            return new SessionAuthRedirect($session, $userService, $pasetoService);
103 3
        });
104
    }
105
106 1
    public function getAssetFolders(): array
107
    {
108 1
        return [
109 1
            'bone-user' => dirname(__DIR__) . '/data/assets',
110 1
        ];
111
    }
112
113 1
    public function getTranslationsDirectory(): string
114
    {
115 1
        return dirname(__DIR__) . '/data/translations';
116
    }
117
118 1
    public function addViews(): array
119
    {
120 1
        return [
121 1
            'boneuser' => __DIR__ . '/View/BoneUser/',
122 1
            'email.user' => __DIR__ . '/View/email/',
123 1
        ];
124
    }
125
126 1
    public function addViewExtensions(Container $c): array
127
    {
128 1
        $userService = $c->get(UserService::class);
129 1
        $translator = $c->get(Translator::class);
130 1
        $sessionManager = $c->get(SessionManager::class);
131 1
        $uploadFolder = $c->get('uploads_dir');
132 1
        $loginWidget = new LoginWidget($userService, $translator, $sessionManager, $uploadFolder);
133
134 1
        return [$loginWidget];
135
    }
136
137 1
    public function addRoutes(Container $c, Router $router): Router
138
    {
139 1
        $router->group('/user', function (RouteGroup $route) {
140 1
            $route->map('GET', '/', [BoneUserController::class, 'indexAction']);
141 1
            $route->map('GET', '/lost-password/{email}', [BoneUserController::class, 'forgotPasswordAction']);
142 1
            $route->map('GET', '/login', [BoneUserController::class, 'loginAction']);
143 1
            $route->map('POST', '/login', [BoneUserController::class, 'loginFormAction']);
144 1
            $route->map('GET', '/logout', [BoneUserController::class, 'logoutAction']);
145 1
            $route->map('GET', '/activate/{email}/{token}', [BoneUserController::class, 'activateAction']);
146 1
            $route->map('GET', '/reset-email/{email}/{new-email}/{token}', [BoneUserController::class, 'resetEmailAction']);
147 1
            $route->map('GET', '/reset-password/{email}/{token}', [BoneUserController::class, 'resetPasswordAction']);
148 1
            $route->map('POST', '/reset-password/{email}/{token}', [BoneUserController::class, 'resetPasswordAction']);
149 1
            $route->map('GET', '/resend-activation-mail/{email}', [BoneUserController::class, 'resendActivationEmailAction']);
150 1
        });
151
152 1
        $canRegister = true;
153 1
        $admin = false;
154
155 1
        if ($c->has('bone-user')) {
156 1
            $config = $c->get('bone-user');
157 1
            $canRegister = $config['enableRegistration'] ?? true;
158 1
            $admin = $config['admin'] ?? false;
159
        }
160
161 1
        if ($canRegister) {
162 1
            $router->map('GET', '/user/register', [BoneUserController::class, 'registerAction']);
163 1
            $router->map('POST', '/user/register', [BoneUserController::class, 'registerAction']);
164
        }
165
166 1
        $auth = $c->get(SessionAuth::class);
167 1
        $router->map('GET', '/user/change-password', [BoneUserController::class, 'changePasswordAction'])->middleware($auth);
168 1
        $router->map('POST', '/user/change-password', [BoneUserController::class, 'changePasswordAction'])->middleware($auth);
169 1
        $router->map('GET', '/user/change-email', [BoneUserController::class, 'changeEmailAction'])->middleware($auth);
170 1
        $router->map('POST', '/user/change-email', [BoneUserController::class, 'changeEmailAction'])->middleware($auth);
171 1
        $router->map('GET', '/user/edit-profile', [BoneUserController::class, 'editProfileAction'])->middleware($auth);
172 1
        $router->map('POST', '/user/edit-profile', [BoneUserController::class, 'editProfileAction'])->middleware($auth);
173 1
        $router->map('GET', '/user/home', [BoneUserController::class, 'homePageAction'])->middleware($auth);
174 1
        $factory = new ResponseFactory();
175 1
        $strategy = new JsonStrategy($factory);
176 1
        $strategy->setContainer($c);
177
178 1
        $router->group('/api/user', function (RouteGroup $route) use ($auth) {
179 1
            $route->map('POST', '/choose-avatar', [BoneUserApiController::class, 'chooseAvatarAction'])->middleware($auth);
180 1
            $route->map('POST', '/upload-avatar', [BoneUserApiController::class, 'uploadAvatarAction'])->middleware($auth);
181 1
            $route->map('GET', '/avatar', [BoneUserApiController::class, 'avatar'])->middleware($auth);
182 1
        })
183 1
        ->setStrategy($strategy);
184
185 1
        if ($admin === true) {
186 1
            $router->adminResource('people', PersonAdminController::class, $c);
187 1
            $router->adminResource('users', UserAdminController::class, $c);
188
        }
189
190 1
        return $router;
191
    }
192
193 1
    public function registerConsoleCommands(Container $container): array
194
    {
195 1
        return [
196 1
            new ResetPasswordCommand($container->get(UserService::class)),
197 1
            new CreateUserCommand($container->get(UserService::class)),
198 1
        ];
199
    }
200
201
    public function getFixtures(): array
202
    {
203
        return [
204
            LoadUsers::class
205
        ];
206
    }
207
208
    public function getAdminLinks(): array
209
    {
210
        $c = Application::ahoy()->getContainer();
211
        $admin = false;
212
213
        if ($c->has('bone-user')) {
214
            $config = $c->get('bone-user');
215
            $admin = $config['admin'] ?? false;
216
        }
217
218
        if ($admin === true) {
219
            return [
220
                new AdminLink('People', '/admin/people', 'nav-icon fa fa-address-book'),
221
                new AdminLink('Users', '/admin/users', 'nav-icon fa fa-users'),
222
            ];
223
        }
224
225
        return [];
226
    }
227
228
    public function getRequiredPackages(): array
229
    {
230
        return [
231
            'Bone\Mail\MailPackage',
232
            'Bone\BoneDoctrine\BoneDoctrinePackage',
233
            'Bone\Paseto\PasetoPackage',
234
            'Del\Person\PersonPackage',
235
            'Del\UserPackage',
236
            'Bone\User\BoneUserPackage',
237
        ];
238
    }
239
240
    public function getSettingsFileName(): string
241
    {
242
        return __DIR__ . '/../data/config/bone-user.php';
243
    }
244
245
    public function postInstall(Command $command, SymfonyStyle $io): void  {}
0 ignored issues
show
Unused Code introduced by
The parameter $command is not used and could be removed. ( Ignorable by Annotation )

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

245
    public function postInstall(/** @scrutinizer ignore-unused */ Command $command, SymfonyStyle $io): void  {}

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
Unused Code introduced by
The parameter $io is not used and could be removed. ( Ignorable by Annotation )

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

245
    public function postInstall(Command $command, /** @scrutinizer ignore-unused */ SymfonyStyle $io): void  {}

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
246
}
247