Completed
Pull Request — 1.x (#627)
by Dylan
08:40
created

Db::clear()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %
Metric Value
dl 0
loc 5
rs 9.4285
cc 1
eloc 3
nc 1
nop 0
1
<?php
2
3
namespace ZfcUser\Authentication\Storage;
4
5
use Zend\Authentication\Storage;
6
use Zend\Authentication\Storage\StorageInterface;
7
use ZfcUser\Mapper\UserInterface as UserMapper;
8
9
class Db implements Storage\StorageInterface
10
{
11
    /**
12
     * @var StorageInterface
13
     */
14
    protected $storage;
15
16
    /**
17
     * @var UserMapper
18
     */
19
    protected $mapper;
20
21
    /**
22
     * @var mixed
23
     */
24
    protected $resolvedIdentity;
25
26
    public function __construct(UserMapper $mapper)
27
    {
28
        $this->mapper = $mapper;
29
    }
30
31
    /**
32
     * Returns true if and only if storage is empty
33
     *
34
     * @throws \Zend\Authentication\Exception\InvalidArgumentException If it is impossible to determine whether
35
     * storage is empty or not
36
     * @return boolean
37
     */
38
    public function isEmpty()
39
    {
40
        if ($this->getStorage()->isEmpty()) {
41
            return true;
42
        }
43
        $identity = $this->getStorage()->read();
44
        if ($identity === null) {
45
            $this->clear();
46
            return true;
47
        }
48
49
        return false;
50
    }
51
52
    /**
53
     * Returns the contents of storage
54
     *
55
     * Behavior is undefined when storage is empty.
56
     *
57
     * @throws \Zend\Authentication\Exception\InvalidArgumentException If reading contents from storage is impossible
58
     * @return mixed
59
     */
60
    public function read()
61
    {
62
        if (null !== $this->resolvedIdentity) {
63
            return $this->resolvedIdentity;
64
        }
65
66
        $identity = $this->getStorage()->read();
67
68
        if (is_int($identity) || is_scalar($identity)) {
69
            $identity = $this->getMapper()->findById($identity);
70
        }
71
72
        if ($identity) {
73
            $this->resolvedIdentity = $identity;
74
        } else {
75
            $this->resolvedIdentity = null;
76
        }
77
78
        return $this->resolvedIdentity;
79
    }
80
81
    /**
82
     * Writes $contents to storage
83
     *
84
     * @param  mixed $contents
85
     * @throws \Zend\Authentication\Exception\InvalidArgumentException If writing $contents to storage is impossible
86
     * @return void
87
     */
88
    public function write($contents)
89
    {
90
        $this->resolvedIdentity = null;
91
        $this->getStorage()->write($contents);
92
    }
93
94
    /**
95
     * Clears contents from storage
96
     *
97
     * @throws \Zend\Authentication\Exception\InvalidArgumentException If clearing contents from storage is impossible
98
     * @return void
99
     */
100
    public function clear()
101
    {
102
        $this->resolvedIdentity = null;
103
        $this->getStorage()->clear();
104
    }
105
106
    /**
107
     * getStorage
108
     *
109
     * @return Storage\StorageInterface
110
     */
111
    public function getStorage()
112
    {
113
        if (null === $this->storage) {
114
            $this->setStorage(new Storage\Session);
115
        }
116
        return $this->storage;
117
    }
118
119
    /**
120
     * setStorage
121
     *
122
     * @param Storage\StorageInterface $storage
123
     * @access public
124
     * @return Db
125
     */
126
    public function setStorage(Storage\StorageInterface $storage)
127
    {
128
        $this->storage = $storage;
129
        return $this;
130
    }
131
132
    /**
133
     * getMapper
134
     *
135
     * @return UserMapper
136
     */
137
    public function getMapper()
138
    {
139
        return $this->mapper;
140
    }
141
}
142