]> git.mxchange.org Git - friendica.git/blob - src/Core/Config/PConfiguration.php
Config FollowUp
[friendica.git] / src / Core / Config / PConfiguration.php
1 <?php
2
3 namespace Friendica\Core\Config;
4
5 /**
6  * This class is responsible for the user-specific configuration values in Friendica
7  * The values are set through the Config-DB-Table (per Config-DB-adapter @see Adapter\IPConfigAdapter )
8  *
9  * The configuration cache (@see Cache\IPConfigCache ) is used for temporary caching of database calls. This will
10  * increase the performance.
11  */
12 class PConfiguration
13 {
14         /**
15          * @var Cache\IPConfigCache
16          */
17         private $configCache;
18
19         /**
20          * @var Adapter\IPConfigAdapter
21          */
22         private $configAdapter;
23
24         /**
25          * @param Cache\IPConfigCache     $configCache   The configuration cache
26          * @param Adapter\IPConfigAdapter $configAdapter The configuration DB-backend
27          */
28         public function __construct(Cache\IPConfigCache $configCache, Adapter\IPConfigAdapter $configAdapter)
29         {
30                 $this->configCache = $configCache;
31                 $this->configAdapter = $configAdapter;
32         }
33
34         /**
35          * @brief Loads all configuration values of a user's config family into a cached storage.
36          *
37          * All configuration values of the given user are stored with the $uid in
38          * the cache ( @see IPConfigCache )
39          *
40          * @param string $uid The user_id
41          * @param string $cat The category of the configuration value
42          *
43          * @return void
44          */
45         public function load($uid, $cat = 'config')
46         {
47                 // If not connected, do nothing
48                 if (!$this->configAdapter->isConnected()) {
49                         return;
50                 }
51
52                 // load the whole category out of the DB into the cache
53                 $this->configCache->loadP($uid, $this->configAdapter->load($uid, $cat));
54         }
55
56         /**
57          * @brief Get a particular user's config variable given the category name
58          * ($cat) and a key.
59          *
60          * Get a particular user's config value from the given category ($cat)
61          * and the $key with the $uid from a cached storage either from the $this->configAdapter
62          * (@see IConfigAdapter ) or from the $this->configCache (@see IConfigCache ).
63          *
64          * @param string  $uid           The user_id
65          * @param string  $cat           The category of the configuration value
66          * @param string  $key           The configuration key to query
67          * @param mixed   $default_value optional, The value to return if key is not set (default: null)
68          * @param boolean $refresh       optional, If true the config is loaded from the db and not from the cache (default: false)
69          *
70          * @return mixed Stored value or null if it does not exist
71          */
72         public function get($uid, $cat, $key, $default_value = null, $refresh = false)
73         {
74                 // Return the value of the cache if found and no refresh is forced
75                 if (!$refresh && $this->configCache->hasP($uid, $cat, $key)) {
76                         return $this->configCache->getP($uid, $cat, $key);
77                 }
78
79                 // if we don't find the value in the cache and the adapter isn't ready, return the default value
80                 if (!$this->configAdapter->isConnected()) {
81                         return $default_value;
82                 }
83
84                 // load DB value to cache
85                 $dbvalue = $this->configAdapter->get($uid, $cat, $key);
86
87                 if ($dbvalue !== '!<unset>!') {
88                         $this->configCache->setP($uid, $cat, $key, $dbvalue);
89                         return $dbvalue;
90                 } else {
91                         return $default_value;
92                 }
93         }
94
95         /**
96          * @brief Sets a configuration value for a user
97          *
98          * Stores a config value ($value) in the category ($family) under the key ($key)
99          * for the user_id $uid.
100          *
101          * @note  Please do not store booleans - convert to 0/1 integer values!
102          *
103          * @param string $uid    The user_id
104          * @param string $cat    The category of the configuration value
105          * @param string $key    The configuration key to set
106          * @param mixed  $value  The value to store
107          *
108          * @return bool Operation success
109          */
110         public function set($uid, $cat, $key, $value)
111         {
112                 // set the cache first
113                 $cached = $this->configCache->setP($uid, $cat, $key, $value);
114
115                 // If there is no connected adapter, we're finished
116                 if (!$this->configAdapter->isConnected()) {
117                         return $cached;
118                 }
119
120                 $stored = $this->configAdapter->set($uid, $cat, $key, $value);
121
122                 return $cached && $stored;
123         }
124
125         /**
126          * @brief Deletes the given key from the users's configuration.
127          *
128          * Removes the configured value from the stored cache in $this->configCache
129          * (@see ConfigCache ) and removes it from the database (@see IConfigAdapter )
130          * with the given $uid.
131          *
132          * @param string $uid The user_id
133          * @param string $cat The category of the configuration value
134          * @param string $key The configuration key to delete
135          *
136          * @return bool
137          */
138         public function delete($uid, $cat, $key)
139         {
140                 $cacheRemoved = $this->configCache->deleteP($uid, $cat, $key);
141
142                 if (!$this->configAdapter->isConnected()) {
143                         return $cacheRemoved;
144                 }
145
146                 $storeRemoved = $this->configAdapter->delete($uid, $cat, $key);
147
148                 return $cacheRemoved || $storeRemoved;
149         }
150 }