Passed
Pull Request — master (#190)
by Arman
02:47
created

DatabaseSessionAdapter   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 53
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 14
c 1
b 0
f 0
dl 0
loc 53
rs 10
wmc 4

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 3 1
A initializeSession() 0 15 3
1
<?php
2
3
/**
4
 * Quantum PHP Framework
5
 *
6
 * An open source software development framework for PHP
7
 *
8
 * @package Quantum
9
 * @author Arman Ag. <[email protected]>
10
 * @copyright Copyright (c) 2018 Softberg LLC (https://softberg.org)
11
 * @link http://quantum.softberg.org/
12
 * @since 2.9.5
13
 */
14
15
namespace Quantum\Libraries\Session\Adapters\Database;
16
17
use Quantum\Libraries\Session\Contracts\SessionStorageInterface;
18
use Quantum\Libraries\Database\Exceptions\DatabaseException;
19
use Quantum\Libraries\Session\Exceptions\SessionException;
20
use Quantum\Libraries\Session\Traits\SessionTrait;
21
use Quantum\Libraries\Database\Database;
22
23
/**
24
 * Class Session
25
 * @package Quantum\Libraries\Session
26
 */
27
class DatabaseSessionAdapter implements SessionStorageInterface
28
{
29
30
    use SessionTrait;
31
32
    /**
33
     * Session default table
34
     */
35
    const SESSION_TABLE = 'sessions';
36
37
    /**
38
     * Session params
39
     * @var array
40
     */
41
    private static $params = [];
42
43
    /**
44
     * Session storage
45
     * @var array $storage
46
     */
47
    private static $storage = [];
48
49
    /**
50
     * @param array|null $params
51
     * @throws DatabaseException
52
     * @throws SessionException
53
     */
54
    public function __construct(?array $params = null)
55
    {
56
        $this->initializeSession($params);
57
    }
58
59
    /**
60
     * @param array|null $params
61
     * @return void
62
     * @throws DatabaseException
63
     * @throws SessionException
64
     */
65
    protected function initializeSession(?array $params = null): void
66
    {
67
        $sessionTable = $params['table'] ?? self::SESSION_TABLE;
68
        $sessionModel = Database::getInstance()->getOrm($sessionTable);
69
70
        if (session_status() !== PHP_SESSION_ACTIVE) {
71
            session_set_save_handler(new DatabaseHandler($sessionModel), true);
72
73
            if (@session_start() === false) {
74
                throw SessionException::sessionNotStarted();
75
            }
76
        }
77
78
        self::$params = $params;
79
        self::$storage = &$_SESSION;
80
    }
81
}