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 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 <?php /** * * This file is part of the phpBB Forum Software package. * * @copyright (c) phpBB Limited <https://www.phpbb.com> * @license GNU General Public License, version 2 (GPL-2.0) * * For full copyright and license information, please see * the docs/CREDITS.txt file. * */ namespace phpbb\config; /** * Configuration container class */ class config implements \ArrayAccess, \IteratorAggregate, \Countable { /** * The configuration data * @var array(string => string) */ protected $config; /** * Creates a configuration container with a default set of values * * @param array(string => string) $config The configuration data. */ public function __construct(array $config) { $this->config = $config; } /** * Retrieves an ArrayIterator over the configuration values. * * @return \ArrayIterator An iterator over all config data */ public function getIterator() { return new \ArrayIterator($this->config); } /** * Checks if the specified config value exists. * * @param string $key The configuration option's name. * @return bool Whether the configuration option exists. */ public function offsetExists($key) { return isset($this->config[$key]); } /** * Retrieves a configuration value. * * @param string $key The configuration option's name. * @return string The configuration value */ public function offsetGet($key) { return (isset($this->config[$key])) ? $this->config[$key] : ''; } /** * Temporarily overwrites the value of a configuration variable. * * The configuration change will not persist. It will be lost * after the request. * * @param string $key The configuration option's name. * @param string $value The temporary value. */ public function offsetSet($key, $value) { $this->config[$key] = $value; } /** * Called when deleting a configuration value directly, triggers an error. * * @param string $key The configuration option's name. */ public function offsetUnset($key) { trigger_error('Config values have to be deleted explicitly with the \phpbb\config\config::delete($key) method.', E_USER_ERROR); } /** * Retrieves the number of configuration options currently set. * * @return int Number of config options */ public function count() { return count($this->config); } /** * Removes a configuration option * * @param String $key The configuration option's name * @param bool $use_cache Whether this variable should be cached or if it * changes too frequently to be efficiently cached * @return null */ public function delete($key, $use_cache = true) { unset($this->config[$key]); } /** * Sets a configuration option's value * * @param string $key The configuration option's name * @param string $value New configuration value * @param bool $use_cache Whether this variable should be cached or if it * changes too frequently to be efficiently cached. */ public function set($key, $value, $use_cache = true) { $this->config[$key] = $value; } /** * Sets a configuration option's value only if the old_value matches the * current configuration value or the configuration value does not exist yet. * * @param string $key The configuration option's name * @param string $old_value Current configuration value * @param string $new_value New configuration value * @param bool $use_cache Whether this variable should be cached or if it * changes too frequently to be efficiently cached. * @return bool True if the value was changed, false otherwise. */ public function set_atomic($key, $old_value, $new_value, $use_cache = true) { if (!isset($this->config[$key]) || $this->config[$key] == $old_value) { $this->config[$key] = $new_value; return true; } return false; } /** * Checks configuration option's value only if the new_value matches the * current configuration value and the configuration value does exist.Called * only after set_atomic has been called. * * @param string $key The configuration option's name * @param string $new_value New configuration value * @throws \phpbb\exception\http_exception when config value is set and not equal to new_value. * @return bool True if the value was changed, false otherwise. */ public function ensure_lock($key, $new_value) { if (isset($this->config[$key]) && $this->config[$key] == $new_value) { return true; } throw new \phpbb\exception\http_exception(500, 'Failure while aqcuiring locks.'); } /** * Increments an integer configuration value. * * @param string $key The configuration option's name * @param int $increment Amount to increment by * @param bool $use_cache Whether this variable should be cached or if it * changes too frequently to be efficiently cached. */ function increment($key, $increment, $use_cache = true) { if (!isset($this->config[$key])) { $this->config[$key] = 0; } $this->config[$key] += $increment; } }