]> git.mxchange.org Git - friendica.git/blob - src/Core/Config/PConfiguration.php
refactor naming & superfluous check
[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                 // if the value isn't loaded or refresh is needed, load it to the cache
75                 if ($this->configAdapter->isConnected() &&
76                         (!$this->configAdapter->isLoaded($uid, $cat, $key) ||
77                                 $refresh)) {
78                         $dbValue = $this->configAdapter->get($uid, $cat, $key);
79
80                         if (isset($dbValue)) {
81                                 $this->configCache->setP($uid, $cat, $key, $dbValue);
82                                 return $dbValue;
83                         }
84                 }
85
86                 // use the config cache for return
87                 $result = $this->configCache->getP($uid, $cat, $key);
88                 return (isset($result)) ? $result : $default_value;
89         }
90
91         /**
92          * @brief Sets a configuration value for a user
93          *
94          * Stores a config value ($value) in the category ($family) under the key ($key)
95          * for the user_id $uid.
96          *
97          * @note  Please do not store booleans - convert to 0/1 integer values!
98          *
99          * @param string $uid    The user_id
100          * @param string $cat    The category of the configuration value
101          * @param string $key    The configuration key to set
102          * @param mixed  $value  The value to store
103          *
104          * @return bool Operation success
105          */
106         public function set($uid, $cat, $key, $value)
107         {
108                 // set the cache first
109                 $cached = $this->configCache->setP($uid, $cat, $key, $value);
110
111                 // If there is no connected adapter, we're finished
112                 if (!$this->configAdapter->isConnected()) {
113                         return $cached;
114                 }
115
116                 $stored = $this->configAdapter->set($uid, $cat, $key, $value);
117
118                 return $cached && $stored;
119         }
120
121         /**
122          * @brief Deletes the given key from the users's configuration.
123          *
124          * Removes the configured value from the stored cache in $this->configCache
125          * (@see ConfigCache ) and removes it from the database (@see IConfigAdapter )
126          * with the given $uid.
127          *
128          * @param string $uid The user_id
129          * @param string $cat The category of the configuration value
130          * @param string $key The configuration key to delete
131          *
132          * @return bool
133          */
134         public function delete($uid, $cat, $key)
135         {
136                 $cacheRemoved = $this->configCache->deleteP($uid, $cat, $key);
137
138                 if (!$this->configAdapter->isConnected()) {
139                         return $cacheRemoved;
140                 }
141
142                 $storeRemoved = $this->configAdapter->delete($uid, $cat, $key);
143
144                 return $cacheRemoved || $storeRemoved;
145         }
146 }