diff options
author | matt <matt@59fd770c-687e-43c8-a1e3-f5a4ff64c105> | 2008-11-04 21:26:30 +0300 |
---|---|---|
committer | matt <matt@59fd770c-687e-43c8-a1e3-f5a4ff64c105> | 2008-11-04 21:26:30 +0300 |
commit | 2a49d682fda9f833d3db505fff7c7a22abc831b4 (patch) | |
tree | a48ad7cce85f2a0847cc99b077338ee7bc5cd591 | |
parent | bf0b36f26c6765767f97bc383cce913c8e93f37f (diff) |
- adding autoload concept for options
-rw-r--r-- | core/FrontController.php | 3 | ||||
-rw-r--r-- | core/Option.php | 78 | ||||
-rw-r--r-- | core/Piwik.php | 1 | ||||
-rw-r--r-- | core/Updater.php | 2 | ||||
-rw-r--r-- | core/Updates/0.2.13.php | 9 | ||||
-rw-r--r-- | core/Version.php | 2 |
6 files changed, 74 insertions, 21 deletions
diff --git a/core/FrontController.php b/core/FrontController.php index 1b2f08834c..71a940c9c6 100644 --- a/core/FrontController.php +++ b/core/FrontController.php @@ -32,6 +32,7 @@ require_once "Translate.php"; require_once "Mail.php"; require_once "Url.php"; require_once "Controller.php"; +require_once "Option.php"; require_once "PluginsFunctions/Menu.php"; require_once "PluginsFunctions/AdminMenu.php"; @@ -230,6 +231,8 @@ class Piwik_FrontController Piwik::createDatabaseObject(); Piwik::createLogObject(); + Zend_Registry::set('option', new Piwik_Option()); + Piwik_Translate::getInstance()->loadUserTranslation(); $pluginsManager->setLanguageToLoad( Piwik_Translate::getInstance()->getLanguageToLoad() ); $pluginsManager->postLoadPlugins(); 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); +} diff --git a/core/Piwik.php b/core/Piwik.php index 189d2c8513..0a58743ac7 100644 --- a/core/Piwik.php +++ b/core/Piwik.php @@ -605,6 +605,7 @@ class Piwik 'option' => "CREATE TABLE {$prefixTables}option ( option_name VARCHAR( 64 ) NOT NULL , option_value LONGTEXT NOT NULL , + autoload TINYINT NOT NULL DEFAULT '1', PRIMARY KEY ( option_name ) ) ", diff --git a/core/Updater.php b/core/Updater.php index 2b26e333c5..85cd6b656d 100644 --- a/core/Updater.php +++ b/core/Updater.php @@ -34,7 +34,7 @@ class Piwik_Updater */ public function recordComponentSuccessfullyUpdated($name, $version) { - Piwik_UpdateOption('version_'.$name, $version); + Piwik_UpdateOption('version_'.$name, $version, $autoload = 1); } /** diff --git a/core/Updates/0.2.13.php b/core/Updates/0.2.13.php new file mode 100644 index 0000000000..f0cb248b0f --- /dev/null +++ b/core/Updates/0.2.13.php @@ -0,0 +1,9 @@ +<?php +try { + Piwik_Query('DROP TABLE IF EXISTS '. Piwik::prefixTable('option')); + $tables = Piwik::getTablesCreateSql(); + $optionTable = $tables['option']; + Piwik_Query( $optionTable ); +} catch (Exception $e) { + throw new UpdateErrorException("Error trying to re-create the option table in Mysql: " . $e->getMessage()); +} diff --git a/core/Version.php b/core/Version.php index 99b67c7cd0..718bc2ddc7 100644 --- a/core/Version.php +++ b/core/Version.php @@ -1,6 +1,6 @@ <?php
final class Piwik_Version { - const VERSION = '0.2.12'; + const VERSION = '0.2.13'; } |