diff options
author | mattpiwik <matthieu.aubry@gmail.com> | 2008-11-04 21:26:30 +0300 |
---|---|---|
committer | mattpiwik <matthieu.aubry@gmail.com> | 2008-11-04 21:26:30 +0300 |
commit | 6bd6eba830de695c5b4028ef7c0f24233c951801 (patch) | |
tree | a48ad7cce85f2a0847cc99b077338ee7bc5cd591 /core/Option.php | |
parent | e25a9a9061de0e6fca7a7d4201b66bba5ea7a63c (diff) |
- adding autoload concept for options
git-svn-id: http://dev.piwik.org/svn/trunk@678 59fd770c-687e-43c8-a1e3-f5a4ff64c105
Diffstat (limited to 'core/Option.php')
-rw-r--r-- | core/Option.php | 78 |
1 files changed, 59 insertions, 19 deletions
diff --git a/core/Option.php b/core/Option.php index d7158509d1..fd1381a798 100644 --- a/core/Option.php +++ b/core/Option.php @@ -1,28 +1,68 @@ <?php -//TODO -// - design Caching, in terms of API, piwik.php loading data for a given website (from one file) -// - design Options, how WP plugins make use of it, reuse same pattern -function Piwik_GetOption($name) +class Piwik_Option { - try { - return Piwik_FetchOne( 'SELECT option_value + private $all = array(); + + public function __construct() + { + } + + public function get($name) + { + $this->autoload(); + if(isset($this->all[$name])) + { + return $this->all[$name]; + } + $value = Piwik_FetchOne( 'SELECT option_value FROM ' . Piwik::prefixTable('option') . ' - WHERE option_name = ?', - $name); - } catch(Exception $e) { - return false; + WHERE option_name = ?', $name); + if($value === false) + { + return false; + } + $this->all[$name] = $value; + return $value; + } + + public function set($name, $value, $autoload = 0) + { + $autoload = (int)$autoload; + Piwik_Query('INSERT INTO '. Piwik::prefixTable('option') . ' (option_name, option_value, autoload) '. + ' VALUES (?, ?, ?) '. + ' ON DUPLICATE KEY UPDATE option_value = ?', + array($name, $value, $autoload, $value)); + $this->all[$name] = $value; + } + + private function autoload() + { + static $loaded = false; + if($loaded) + { + return; + } + try { + $all = Piwik_FetchAll('SELECT option_value, option_name ' . + ' FROM '. Piwik::prefixTable('option') . + ' WHERE autoload = 1'); + } catch(Exception $e) { + // this would fail for users who upgraded between 0.2.10 and 0.2.13 where option table didn't have the autoload field yet + } + foreach($this->all as $option) + { + $this->all[$option['option_name']] = $option['option_value']; + } + $loaded = true; } } -function Piwik_UpdateOption($name, $value) +function Piwik_GetOption($name) { - try { - return Piwik_Query('INSERT INTO '. Piwik::prefixTable('option') . ' (option_name, option_value) - VALUES (?, ?) - ON DUPLICATE KEY UPDATE option_value = ?', - array($name, $value, $value)); - } catch(Exception $e) { - return false; - } + return Zend_Registry::get('option')->get($name); } +function Piwik_UpdateOption($name, $value, $autoload = 0) +{ + Zend_Registry::get('option')->set($name, $value, $autoload); +} |