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:
authormatt <matt@59fd770c-687e-43c8-a1e3-f5a4ff64c105>2008-11-04 21:26:30 +0300
committermatt <matt@59fd770c-687e-43c8-a1e3-f5a4ff64c105>2008-11-04 21:26:30 +0300
commit2a49d682fda9f833d3db505fff7c7a22abc831b4 (patch)
treea48ad7cce85f2a0847cc99b077338ee7bc5cd591
parentbf0b36f26c6765767f97bc383cce913c8e93f37f (diff)
- adding autoload concept for options
-rw-r--r--core/FrontController.php3
-rw-r--r--core/Option.php78
-rw-r--r--core/Piwik.php1
-rw-r--r--core/Updater.php2
-rw-r--r--core/Updates/0.2.13.php9
-rw-r--r--core/Version.php2
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';
}