Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
94.74% covered (success)
94.74%
18 / 19
85.71% covered (success)
85.71%
6 / 7
CRAP
0.00% covered (danger)
0.00%
0 / 1
SessionService
94.74% covered (success)
94.74%
18 / 19
85.71% covered (success)
85.71%
6 / 7
9.01
0.00% covered (danger)
0.00%
0 / 1
 __construct
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 grantSession
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 grantAccess
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 releaseSession
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 checkSession
100.00% covered (success)
100.00%
6 / 6
100.00% covered (success)
100.00%
1 / 1
2
 checkAccess
100.00% covered (success)
100.00%
6 / 6
100.00% covered (success)
100.00%
1 / 1
2
 touchSession
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
1<?php
2
3declare(strict_types=1);
4
5namespace UppServices;
6
7/**
8 * Session management: grant, release, check (user and guest/qrcode).
9 * Delegates to App/Services/legacy/session/session.php.
10 */
11class SessionService
12{
13    private const SESSION_LEGACY_PATH = __DIR__.'/legacy/session/session.php';
14
15    public function __construct()
16    {
17        require_once self::SESSION_LEGACY_PATH;
18    }
19
20    /**
21     * Grant a session for a logged-in user (reuse released or create new).
22     *
23     * Uses central DB (SESSION table); connection resolved inside legacy grant_session.
24     *
25     * @param \ConxHelper $conx Connection helper.
26     * @param string $deviceid Device identifier.
27     * @param string $userid User identifier.
28     * @param string|null $sessionid Output: granted session id.
29     * @return int ApplicationError code.
30     */
31    public function grantSession(\ConxHelper $conx, string $deviceid, string $userid, ?string &$sessionid): int
32    {
33        $sessionid = null;
34        return \grant_session($conx, $deviceid, $userid, $sessionid);
35    }
36
37    /**
38     * Grant access for a guest (qrcode); reuse or create session.
39     *
40     * @param \ConxHelper $conx Connection helper (uses ->global for central DB).
41     * @param string $deviceid Device identifier.
42     * @param string $qrscanid QRSCAN objid (mesa/table scan entry).
43     * @param string|null $sessionid Output: granted session id.
44     * @return int ApplicationError code.
45     */
46    public function grantAccess(\ConxHelper $conx, string $deviceid, string $qrscanid, ?string &$sessionid): int
47    {
48        $sessionid = null;
49        return \grant_access($conx, $deviceid, $qrscanid, $sessionid);
50    }
51
52    /**
53     * Release an active session (e.g. logout).
54     *
55     * @param \conx $conx Legacy db connection.
56     * @param string $sessionid Session id to release.
57     * @return int ApplicationError code.
58     */
59    public function releaseSession(\conx $conx, string $sessionid): int
60    {
61        return \release_session($conx, $sessionid);
62    }
63
64    /**
65     * Check session for a user; updates touch time on success.
66     *
67     * @param \ConxHelper $conx Connection helper (uses ->global for central DB).
68     * @param string $sessionid Session id.
69     * @param string $deviceid Device identifier.
70     * @param string|null $userid Output: user id if valid.
71     * @param mixed|null $session Optional output: session objid (pass variable by reference to receive it).
72     * @return int ApplicationError code.
73     */
74    public function checkSession(\ConxHelper $conx, string $sessionid, string $deviceid, ?string &$userid, mixed &$session = null): int
75    {
76        $userid = null;
77        $sessionOut = false;
78        $ret = \check_session($conx, $sessionid, $deviceid, $userid, $sessionOut);
79        if (func_num_args() >= 5) {
80            $session = $sessionOut;
81        }
82        return $ret;
83    }
84
85    /**
86     * Check access for a guest session (qrcode); updates touch time on success.
87     *
88     * @param \ConxHelper $conx Connection helper (uses ->global for central DB).
89     * @param string $sessionid Session id.
90     * @param string $deviceid Device identifier.
91     * @param string|null $qrscanid Output: QRSCAN objid if valid.
92     * @param mixed|null $session Optional output: session objid (pass variable by reference to receive it).
93     * @return int ApplicationError code.
94     */
95    public function checkAccess(\ConxHelper $conx, string $sessionid, string $deviceid, ?string &$qrscanid, mixed &$session = null): int
96    {
97        $qrscanid = null;
98        $sessionOut = false;
99        $ret = \check_access($conx, $sessionid, $deviceid, $qrscanid, $sessionOut);
100        if (func_num_args() >= 5) {
101            $session = $sessionOut;
102        }
103        return $ret;
104    }
105
106    /**
107     * Update session touch time (activity).
108     *
109     * @param \ConxHelper $conx Connection helper (uses ->global for central DB).
110     * @param array<string, mixed> $session Session row (must contain 'objid').
111     * @return int ApplicationError code.
112     */
113    public function touchSession(\ConxHelper $conx, array $session): int
114    {
115        return \touch_session($conx, $session);
116    }
117}