Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormattpiwik <matthieu.aubry@gmail.com>2008-11-04 21:26:30 +0300
committermattpiwik <matthieu.aubry@gmail.com>2008-11-04 21:26:30 +0300
commit6bd6eba830de695c5b4028ef7c0f24233c951801 (patch)
treea48ad7cce85f2a0847cc99b077338ee7bc5cd591 /core/Option.php
parente25a9a9061de0e6fca7a7d4201b66bba5ea7a63c (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.php78
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);
+}