From 50b557ca4e0a80b3f153bc43f261e6b59e197371 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Mon, 4 Mar 2013 22:00:37 +0100 Subject: [PATCH] [ticket/10202] Implementation of config options with arbitrary length values. PHPBB3-10202 --- phpBB/includes/config/db_text.php | 157 ++++++++++++++++++++++++++++++ 1 file changed, 157 insertions(+) create mode 100644 phpBB/includes/config/db_text.php diff --git a/phpBB/includes/config/db_text.php b/phpBB/includes/config/db_text.php new file mode 100644 index 0000000000..79f83391f8 --- /dev/null +++ b/phpBB/includes/config/db_text.php @@ -0,0 +1,157 @@ +db = $db; + $this->table = $table; + } + + /** + * Sets the configuration option with the name $key to $value. + * + * @param string $key The configuration option's name + * @param string $value New configuration value + * + * @return null + */ + public function set($key, $value) + { + $this->setAll(array($key => $value)); + } + + /** + * Gets the configuration value for the name $key. + * + * @param string $key The configuration option's name + * + * @return string|null String result on success + * null if there is no such option + */ + public function get($key) + { + $map = $this->getAll(array($key)); + + return isset($map[$key]) ? $map[$key] : null; + } + + /** + * Removes a configuration option + * + * @param string $key The configuration option's name + * + * @return null + */ + public function delete($key) + { + $this->deleteAll(array($key)); + } + + /** + * Sets a configuration option's value + * + * @param array $map Map from configuration names to values + * + * @return null + */ + public function setAll(array $map) + { + $this->db->sql_transaction('begin'); + + foreach ($map as $key => $value) + { + $sql = 'UPDATE ' . $this->table . " + SET config_value = '" . $this->db->sql_escape($value) . "' + WHERE config_name = '" . $this->db->sql_escape($key) . "'"; + $result = $this->db->sql_query($sql); + + if (!$this->db->sql_affectedrows($result)) + { + $sql = 'INSERT INTO ' . $this->table . ' ' . $this->db->sql_build_array('INSERT', array( + 'config_name' => $key, + 'config_value' => $value, + )); + $this->db->sql_query($sql); + } + } + + $this->db->sql_transaction('commit'); + } + + /** + * Gets a set of configuration options as a key => value map. + * + * @param array $keys Set of configuration option names + * + * @return array Map from configuration names to values + */ + public function getAll(array $keys) + { + $sql = 'SELECT * + FROM ' . $this->table . ' + WHERE ' . $this->db->sql_in_set('config_name', $keys, false, true); + $result = $this->db->sql_query($sql); + + $map = array(); + while ($row = $this->db->sql_fetchrow($result)) + { + $map[$row['config_name']] = $row['config_value']; + } + + return $map; + } + + /** + * Removes multiple configuration options + * + * @param array $keys Set of configuration option names + * + * @return null + */ + public function deleteAll(array $keys) + { + $sql = 'DELETE + FROM ' . $this->table . ' + WHERE ' . $this->db->sql_in_set('config_name', $keys, false, true); + $result = $this->db->sql_query($sql); + } +}