diff --git a/classes/Config.php b/classes/Config.php new file mode 100755 index 0000000000..5bec13fdc8 --- /dev/null +++ b/classes/Config.php @@ -0,0 +1,129 @@ +. + */ + +if (!defined('LACONICA')) { exit(1); } + +/** + * Table Definition for config + */ + +require_once INSTALLDIR.'/classes/Memcached_DataObject.php'; + +class Config extends Memcached_DataObject +{ + ###START_AUTOCODE + /* the code below is auto generated do not remove the above tag */ + + public $__table = 'config'; // table name + public $section; // varchar(32) primary_key not_null + public $setting; // varchar(32) primary_key not_null + public $value; // varchar(255) + + /* Static get */ + function staticGet($k,$v=NULL) { return Memcached_DataObject::staticGet('Config',$k,$v); } + + /* the code above is auto generated do not remove the tag below */ + ###END_AUTOCODE + + const settingsKey = 'config:settings'; + + static function loadSettings() + { + $settings = self::_getSettings(); + if (!empty($settings)) { + self::_applySettings($settings); + } + } + + static function _getSettings() + { + $c = self::memcache(); + + if (!empty($c)) { + $settings = $c->get(common_cache_key(self::settingsKey)); + if (!empty($settings)) { + return $settings; + } + } + + $settings = array(); + + $config = new Config(); + + $config->find(); + + while ($config->fetch()) { + $settings[] = array($config->section, $config->setting, $config->value); + } + + $config->free(); + + if (!empty($c)) { + $c->set(common_cache_key(self::settingsKey), $settings); + } + + return $settings; + } + + static function _applySettings($settings) + { + global $config; + + foreach ($settings as $s) { + list($section, $setting, $value) = $s; + $config[$section][$setting] = $value; + } + } + + function insert() + { + $result = parent::insert(); + if ($result) { + Config::_blowSettingsCache(); + } + return $result; + } + + function delete() + { + $result = parent::delete(); + if ($result) { + Config::_blowSettingsCache(); + } + return $result; + } + + function update($orig=null) + { + $result = parent::update($orig); + if ($result) { + Config::_blowSettingsCache(); + } + return $result; + } + + function _blowSettingsCache() + { + $c = self::memcache(); + + if (!empty($c)) { + $c->delete(common_cache_key(self::settingsKey)); + } + } +} diff --git a/classes/laconica.ini b/classes/laconica.ini index c02996b3f2..7edeeebe4f 100755 --- a/classes/laconica.ini +++ b/classes/laconica.ini @@ -16,6 +16,15 @@ width = K height = K url = U +[config] +section = 130 +setting = 130 +value = 2 + +[config__keys] +section = K +setting = K + [confirm_address] code = 130 user_id = 129 diff --git a/db/laconica.sql b/db/laconica.sql index 56bd4b1e38..1662ef7a8b 100644 --- a/db/laconica.sql +++ b/db/laconica.sql @@ -547,3 +547,13 @@ create table deleted_notice ( index deleted_notice_profile_id_idx (profile_id) ) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_bin; + +create table config ( + + section varchar(32) comment 'configuration section', + setting varchar(32) comment 'configuration setting', + value varchar(255) comment 'configuration value', + + constraint primary key (section, setting) + +) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_bin; diff --git a/lib/common.php b/lib/common.php index 84ee5be15f..067a5a2a61 100644 --- a/lib/common.php +++ b/lib/common.php @@ -21,6 +21,8 @@ if (!defined('LACONICA')) { exit(1); } define('LACONICA_VERSION', '0.9.0dev'); +// XXX: move these to class variables + define('AVATAR_PROFILE_SIZE', 96); define('AVATAR_STREAM_SIZE', 48); define('AVATAR_MINI_SIZE', 24); @@ -387,26 +389,6 @@ if (!$config['openid']['enabled']) { $config['site']['openidonly'] = false; } -// XXX: how many of these could be auto-loaded on use? - -require_once 'Validate.php'; -require_once 'markdown.php'; - -require_once INSTALLDIR.'/lib/util.php'; -require_once INSTALLDIR.'/lib/action.php'; -require_once INSTALLDIR.'/lib/theme.php'; -require_once INSTALLDIR.'/lib/mail.php'; -require_once INSTALLDIR.'/lib/subs.php'; -require_once INSTALLDIR.'/lib/Shorturl_api.php'; -require_once INSTALLDIR.'/lib/twitter.php'; - -require_once INSTALLDIR.'/lib/clientexception.php'; -require_once INSTALLDIR.'/lib/serverexception.php'; - -// XXX: other formats here - -define('NICKNAME_FMT', VALIDATE_NUM.VALIDATE_ALPHA_LOWER); - function __autoload($cls) { if (file_exists(INSTALLDIR.'/classes/' . $cls . '.php')) { @@ -423,6 +405,32 @@ function __autoload($cls) } } +// XXX: how many of these could be auto-loaded on use? +// XXX: note that these files should not use config options +// at compile time since DB config options are not yet loaded. + +require_once 'Validate.php'; +require_once 'markdown.php'; + +require_once INSTALLDIR.'/lib/util.php'; +require_once INSTALLDIR.'/lib/action.php'; +require_once INSTALLDIR.'/lib/theme.php'; +require_once INSTALLDIR.'/lib/mail.php'; +require_once INSTALLDIR.'/lib/subs.php'; +require_once INSTALLDIR.'/lib/Shorturl_api.php'; +require_once INSTALLDIR.'/lib/twitter.php'; + +require_once INSTALLDIR.'/lib/clientexception.php'; +require_once INSTALLDIR.'/lib/serverexception.php'; + +// Load settings from database; note we need autoload for this + +Config::loadSettings(); + +// XXX: other formats here + +define('NICKNAME_FMT', VALIDATE_NUM.VALIDATE_ALPHA_LOWER); + // Give plugins a chance to initialize in a fully-prepared environment Event::handle('InitializePlugin');