-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCachedUser.php
128 lines (116 loc) · 2.94 KB
/
CachedUser.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
<?php
/**
* @file CachedUser.php
*
* description
*
* copyright (c) 2019 Frank Hellenkamp [[email protected]]
*
* @author Frank Hellenkamp [[email protected]]
*/
namespace Depage\Auth;
/**
* @brief CachedUser
* Class CachedUser
*
* Allows to load Users but caches them in memory
* to allow for faster access and with lesser database
* queries
*/
class CachedUser
{
/**
* @brief usersByUsername
**/
static private $usersByUsername = [];
/**
* @brief usersByEmail
**/
static protected $usersByEmail = [];
/**
* @brief usersById
**/
static protected $usersById = [];
// {{{ cacheUser()
/**
* @brief cacheUser
*
* @param mixed $user
* @return void
**/
protected static function cacheUser($user)
{
self::$usersById[$user->id] = $user;
self::$usersByUsername[strtolower($user->name)] = $user;
self::$usersByEmail[strtolower($user->email)] = $user;
}
// }}}
// {{{ clearCache()
/**
* @brief clearCache
*
* @return void
**/
public static function clearCache()
{
self::$usersById = [];
self::$usersByUsername = [];
self::$usersByEmail = [];
}
// }}}
// {{{ loadByUsername()
/**
* gets a user-object by username directly from database
*
* @public
*
* @param \Depage\Db\Pdo $pdo pdo object for database access
* @param string $username username of the user
*
* @return User
*/
static public function loadByUsername($pdo, $username) {
if (!isset(self::$usersByUsername[strtolower($username)])) {
self::cacheUser(User::loadByUsername($pdo, $username));
}
return self::$usersByUsername[strtolower($username)] ?? false;
}
// }}}
// {{{ loadByEmail()
/**
* gets a user-object by username directly from database
*
* @public
*
* @param Depage\Db\Pdo $pdo pdo object for database access
* @param string $email email of the user
*
* @return User
*/
static public function loadByEmail($pdo, $email) {
if (!isset(self::$usersByEmail[strtolower($email)])) {
self::cacheUser(User::loadByEmail($pdo, $email));
}
return self::$usersByEmail[strtolower($email)] ?? false;
}
// }}}
// {{{ loadById()
/**
* gets a user-object by id directly from database
*
* @public
*
* @param Depage\Db\Pdo $pdo pdo object for database access
* @param int $id id of the user
*
* @return auth_user
*/
static public function loadById($pdo, $id) {
if (!isset(self::$usersByIs[$id])) {
self::cacheUser(User::loadById($pdo, $id));
}
return self::$usersById[$id] ?? false;
}
// }}}
}
// vim:set ft=php sw=4 sts=4 fdm=marker et :