Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
38 / 38
100.00% covered (success)
100.00%
4 / 4
CRAP
100.00% covered (success)
100.00%
1 / 1
Session
100.00% covered (success)
100.00%
38 / 38
100.00% covered (success)
100.00%
4 / 4
9
100.00% covered (success)
100.00%
1 / 1
 readEntity
100.00% covered (success)
100.00%
9 / 9
100.00% covered (success)
100.00%
1 / 1
3
 updateEntity
100.00% covered (success)
100.00%
8 / 8
100.00% covered (success)
100.00%
1 / 1
1
 deleteEntity
100.00% covered (success)
100.00%
6 / 6
100.00% covered (success)
100.00%
1 / 1
2
 deleteByTimeInterval
100.00% covered (success)
100.00%
15 / 15
100.00% covered (success)
100.00%
1 / 1
3
1<?php
2
3namespace BO\Zmsdb;
4
5use BO\Zmsentities\Session as Entity;
6
7class Session extends Base
8{
9    /**
10     * Fetch status from db
11     *
12     * @return \BO\Zmsentities\Session
13     */
14    public function readEntity($sessionName, $sessionId)
15    {
16        $query = new Query\Session(Query\Base::SELECT);
17        $query
18            ->addEntityMapping()
19            ->addConditionSessionId($sessionId)
20            ->addConditionSessionName($sessionName);
21        $session = $this->fetchOne($query, new Entity());
22        if ($session && ! $session->hasId()) {
23            return null;
24        }
25        return $session;
26    }
27
28    public function updateEntity($session)
29    {
30        $query = Query\Session::QUERY_WRITE;
31        $this->perform($query, array(
32            $session['id'],
33            $session['name'],
34            json_encode($session['content'])
35        ));
36        $entity = $this->readEntity($session['name'], $session['id']);
37        return $entity;
38    }
39
40    public function deleteEntity($sessionName, $sessionId)
41    {
42        $query = Query\Session::QUERY_DELETE;
43        $result = $this->perform($query, array(
44            $sessionId,
45            $sessionName
46        ));
47        return ($result) ? true : false;
48    }
49
50    public function deleteByTimeInterval($sessionName, $deleteInSeconds)
51    {
52        $selectQuery = new Query\Session(Query\Base::SELECT);
53        $selectQuery
54            ->addEntityMapping()
55            ->addConditionSessionName($sessionName)
56            ->addConditionSessionDeleteInterval($deleteInSeconds);
57        $statement = $this->fetchStatement($selectQuery);
58        while ($sessionData = $statement->fetch(\PDO::FETCH_ASSOC)) {
59            $sessionData = (new Query\Session(Query\Base::SELECT))->postProcessJoins($sessionData);
60            $entity = new Entity($sessionData);
61            if ($entity instanceof Entity) {
62                $deleteQuery = new Query\Session(Query\Base::DELETE);
63                $deleteQuery
64                    ->addConditionSessionName($sessionName)
65                    ->addConditionSessionId($entity->id);
66                $this->deleteItem($deleteQuery);
67            }
68        }
69    }
70}