Completed
Push — master ( 3c1969...5b5792 )
by Schlaefer
03:16 queued 10s
created

SaitoBootstrapMiddleware::__invoke()   B

Complexity

Conditions 6
Paths 6

Size

Total Lines 43

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 6
nc 6
nop 3
dl 0
loc 43
rs 8.6097
c 0
b 0
f 0
1
<?php
2
3
declare(strict_types = 1);
4
5
/**
6
 * Saito - The Threaded Web Forum
7
 *
8
 * @copyright Copyright (c) the Saito Project Developers
9
 * @link https://github.com/Schlaefer/Saito
10
 * @license http://opensource.org/licenses/MIT
11
 */
12
13
namespace App\Middleware;
14
15
use Cake\Core\Configure;
16
use Cake\Http\Response;
17
use Cake\Http\ServerRequest;
18
use Cake\ORM\TableRegistry;
19
use Cake\Routing\Router;
20
use Installer\Lib\InstallerState;
21
22
/**
23
 * Loads Settings from DB into Configure
24
 */
25
class SaitoBootstrapMiddleware
26
{
27
    /**
28
     * Implements CakePHP 3 middleware
29
     *
30
     * @param ServerRequest $request request
31
     * @param Response $response response
32
     * @param callable $next next callable in middleware queue
33
     * @return Response
34
     */
35
    public function __invoke(ServerRequest $request, Response $response, $next): Response
36
    {
37
        //// start installer
38
        $url = $request->getUri()->getPath();
39
        if (!Configure::read('Saito.installed')) {
40
            if (strpos($url, '.')) {
41
                // Don't serve anything except existing assets and installer routes.
42
                // Automatic browser favicon.ico request messes-up installer state.
43
                return new Response(['status' => 503]);
44
            }
45
            $request = $request
46
                ->withParam('plugin', 'Installer')
47
                ->withParam('controller', 'Install');
48
49
            return $next($request, $response);
50
        } elseif (strpos($url, 'install/finished')) {
51
            //// User has has removed installer token. Installer no longer available.
52
            InstallerState::reset();
53
54
            return (new Response())->withLocation(Router::url('/'));
55
        }
56
57
        //// load settings
58
        $tableLocator = TableRegistry::getTableLocator();
59
        /** @var SettingsTable $settingsTable */
60
        $settingsTable = $tableLocator->get('Settings');
61
        $settingsTable->load(Configure::read('Saito.Settings'));
62
63
        //// start updater
64
        $updated = Configure::read('Saito.updated');
65
        if (!$updated) {
66
            $dbVersion = Configure::read('Saito.Settings.db_version');
67
            $saitoVersion = Configure::read('Saito.v');
68
            if ($dbVersion !== $saitoVersion) {
69
                $request = $request
70
                    ->withParam('plugin', 'Installer')
71
                    ->withParam('controller', 'Updater')
72
                    ->withParam('action', 'start');
73
            }
74
        }
75
76
        return $next($request, $response);
77
    }
78
}
79