1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190: 191: 192: 193: 194: 195: 196: 197: 198: 199: 200: 201: 202: 203: 204: 205: 206: 207: 208: 209: 210: 211: 212: 213: 214: 215: 216: 217: 218: 219: 220: 221: 222: 223: 224: 225: 226: 227: 228: 229: 230: 231: 232: 233: 234: 235: 236: 237: 238: 239: 240: 241: 242: 243: 244: 245: 246: 247: 248: 249: 250: 251: 252: 253: 254: 255: 256: 257: 258: 259: 260: 261: 262: 263: 264: 265: 266: 267: 268: 269: 270: 271: 272: 273: 274: 275: 276: 277: 278: 279: 280: 281: 282: 283: 284: 285: 286: 287: 288: 289: 290: 291: 292: 293: 294: 295: 296: 297: 298: 299: 300: 301: 302: 303: 304: 305: 306: 307: 308: 309: 310: 311: 312: 313: 314: 315: 316: 317: 318: 319: 320: 321: 322: 323: 324: 325: 326: 327: 328: 329: 330: 331: 332: 333: 334: 335: 336: 337: 338: 339: 340:
<?php
// ------------------------------------------------------------------------ //
// XOOPS - PHP Content Management System //
// Copyright (c) 2000 XOOPS.org //
// <http://www.xoops.org/> //
// ------------------------------------------------------------------------ //
// This program is free software; you can redistribute it and/or modify //
// it under the terms of the GNU General Public License as published by //
// the Free Software Foundation; either version 2 of the License, or //
// (at your option) any later version. //
// //
// You may not change or alter any portion of this comment or credits //
// of supporting developers from this source code or any supporting //
// source code which is considered copyrighted (c) material of the //
// original comment or credit authors. //
// //
// This program is distributed in the hope that it will be useful, //
// but WITHOUT ANY WARRANTY; without even the implied warranty of //
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
// GNU General Public License for more details. //
// //
// You should have received a copy of the GNU General Public License //
// along with this program; if not, write to the Free Software //
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA //
// ------------------------------------------------------------------------ //
/**
* Manage configuration items
*
* @copyright Copyright (c) 2000 XOOPS.org
* @copyright http://www.impresscms.org/ The ImpressCMS Project
* @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU General Public License (GPL)
*
* @category ICMS
* @package Config
* @author Kazumi Ono (aka onokazo)
* @version SVN: $Id:Handler.php 19775 2010-07-11 18:54:25Z malanciault $
*/
defined('ICMS_ROOT_PATH') or die("ImpressCMS root path not defined");
/**
* Configuration handling class.
* This class acts as an interface for handling general configurations
* and its modules.
*
* @category ICMS
* @package Config
* @author Kazumi Ono <webmaster@myweb.ne.jp>
* @copyright copyright (c) 2000-2003 XOOPS.org
* You should have received a copy of XOOPS_copyrights.txt with
* this file. If not, you may obtain a copy from xoops.org
*
* @todo Tests that need to be made:
* - error handling
* @access public
*/
class icms_config_Handler {
static protected $instance;
/**
* Initialize the config handler.
* @param $db
*/
static public function service() {
if (isset(self::$instance)) return self::$instance;
$instance = icms::handler('icms_config');
$configs = $instance->getConfigsByCat(
array(
ICMS_CONF, ICMS_CONF_USER, ICMS_CONF_METAFOOTER, ICMS_CONF_MAILER,
ICMS_CONF_AUTH, ICMS_CONF_MULILANGUAGE, ICMS_CONF_PERSONA, ICMS_CONF_PLUGINS,
ICMS_CONF_CAPTCHA, ICMS_CONF_SEARCH
)
);
$GLOBALS['icmsConfig'] = $configs[ICMS_CONF];
$GLOBALS['xoopsConfig'] =& $GLOBALS['icmsConfig'];
$GLOBALS['icmsConfigUser'] = $configs[ICMS_CONF_USER];
$GLOBALS['icmsConfigMetaFooter'] = $configs[ICMS_CONF_METAFOOTER];
$GLOBALS['icmsConfigMailer'] = $configs[ICMS_CONF_MAILER];
$GLOBALS['icmsConfigAuth'] = $configs[ICMS_CONF_AUTH];
$GLOBALS['icmsConfigMultilang'] = $configs[ICMS_CONF_MULILANGUAGE];
$GLOBALS['icmsConfigPersona'] = $configs[ICMS_CONF_PERSONA];
$GLOBALS['icmsConfigPlugins'] = $configs[ICMS_CONF_PLUGINS];
$GLOBALS['icmsConfigCaptcha'] = $configs[ICMS_CONF_CAPTCHA];
$GLOBALS['icmsConfigSearch'] = $configs[ICMS_CONF_SEARCH];
return self::$instance = $instance;
}
/**
* holds reference to config item handler(DAO) class
*
* @var object
* @access private
*/
private $_cHandler;
/**
* holds reference to config option handler(DAO) class
*
* @var object
* @access private
*/
private $_oHandler;
/**
* holds an array of cached references to config value arrays,
* indexed on module id and category id
*
* @var array
* @access private
*/
private $_cachedConfigs = array();
/**
* Constructor
*
* @param object &$db reference to database object
*/
public function __construct(&$db) {
$this->_cHandler = new icms_config_item_Handler($db);
$this->_oHandler = new icms_config_option_Handler($db);
}
/**
* Create a config
*
* @see icms_config_Item_Object
* @return object reference to the new {@link icms_config_Item_Object}
*/
public function &createConfig() {
$instance =& $this->_cHandler->create();
return $instance;
}
/**
* Get a config
*
* @param int $id ID of the config
* @param bool $withoptions load the config's options now?
* @return object reference to the {@link icms_config_Item_Object}
*/
public function &getConfig($id, $withoptions = false) {
$config =& $this->_cHandler->get($id);
if ($withoptions == true) {
$config->setConfOptions($this->getConfigOptions(new icms_db_criteria_Item('conf_id', $id)));
}
return $config;
}
/**
* insert a new config in the database
*
* @param object &$config reference to the {@link icms_config_Item_Object}
* @return true|false if inserting config succeeded or not
*/
public function insertConfig(&$config) {
if (!$this->_cHandler->insert($config)) {
return false;
}
$options =& $config->getConfOptions();
$count = count($options);
$conf_id = $config->getVar('conf_id');
for ( $i = 0; $i < $count; $i++) {
$options[$i]->setVar('conf_id', $conf_id);
if (!$this->_oHandler->insert($options[$i])) {
foreach ( $options[$i]->getErrors() as $msg) {
$config->setErrors($msg);
}
}
}
if (!empty($this->_cachedConfigs[$config->getVar('conf_modid')][$config->getVar('conf_catid')])) {
unset($this->_cachedConfigs[$config->getVar('conf_modid')][$config->getVar('conf_catid')]);
}
return true;
}
/**
* Delete a config from the database
*
* @param object &$config reference to a {@link icms_config_Item_Object}
* @return true|false if deleting config item succeeded or not
*/
public function deleteConfig(&$config) {
if (!$this->_cHandler->delete($config)) {
return false;
}
$options =& $config->getConfOptions();
$count = count($options);
if ($count == 0) {
$options = $this->getConfigOptions(new icms_db_criteria_Item('conf_id', $config->getVar('conf_id')));
$count = count($options);
}
if (is_array($options) && $count > 0) {
for ( $i = 0; $i < $count; $i++) {
$this->_oHandler->delete($options[$i]);
}
}
if (!empty($this->_cachedConfigs[$config->getVar('conf_modid')][$config->getVar('conf_catid')])) {
unset($this->_cachedConfigs[$config->getVar('conf_modid')][$config->getVar('conf_catid')]);
}
return true;
}
/**
* get one or more Configs
*
* @param object $criteria {@link icms_db_criteria_Element}
* @param bool $id_as_key Use the configs' ID as keys?
* @param bool $with_options get the options now?
*
* @return array Array of {@link icms_config_Item_Object} objects
*/
public function getConfigs($criteria = null, $id_as_key = false, $with_options = false) {
return $this->_cHandler->getObjects($criteria, $id_as_key);
}
/**
* Count some configs
*
* @param object $criteria {@link icms_db_criteria_Element}
* @return int count result
*/
public function getConfigCount($criteria = null) {
return $this->_cHandler->getCount($criteria);
}
/**
* Get configs from a certain category
*
* @param int $category ID of a category
* @param int $module ID of a module
*
* @return array array of {@link icms_config_Item_Object}s
*/
public function &getConfigsByCat($category, $module = 0) {
if (is_array($category)) {
$criteria = new icms_db_criteria_Compo(new icms_db_criteria_Item('conf_modid', (int) $module));
$criteria->add(new icms_db_criteria_Item('conf_catid', '(' . implode(',', $category) . ')', 'IN'));
$configs = $this->getConfigs($criteria, true);
if (is_array($configs)) {
foreach ( array_keys($configs) as $i) {
$ret[$configs[$i]->getVar('conf_catid')][$configs[$i]->getVar('conf_name')] = $configs[$i]->getConfValueForOutput();
}
foreach ( $ret as $key => $value) {
$this->_cachedConfigs[$module][$key] = $value;
}
return $ret;
}
} else {
if (!empty($this->_cachedConfigs[$module][$category]) ) return $this->_cachedConfigs[$module][$category];
$criteria = new icms_db_criteria_Compo(new icms_db_criteria_Item('conf_modid', (int) $module));
if (!empty($category)) {
$criteria->add(new icms_db_criteria_Item('conf_catid', (int) $category));
}
$ret = array();
$configs = $this->getConfigs($criteria, true);
if (is_array($configs)) {
foreach ( array_keys($configs) as $i) {
$ret[$configs[$i]->getVar('conf_name')] = $configs[$i]->getConfValueForOutput();
}
}
$this->_cachedConfigs[$module][$category] = $ret;
return $this->_cachedConfigs[$module][$category];
}
}
/**
* Make a new {@link icms_config_option_Object}
*
* @return object {@link icms_config_option_Object}
*/
public function &createConfigOption() {
$inst =& $this->_oHandler->create();
return $inst;
}
/**
* Get a {@link icms_config_option_Object}
*
* @param int $id ID of the config option
*
* @return object {@link icms_config_option_Object}
*/
public function &getConfigOption($id) {
$inst =& $this->_oHandler->get($id);
return $inst;
}
/**
* Get one or more {@link icms_config_option_Object}s
*
* @param object $criteria {@link icms_db_criteria_Element}
* @param bool $id_as_key Use IDs as keys in the array?
*
* @return array Array of {@link icms_config_option_Object}s
*/
public function getConfigOptions($criteria = null, $id_as_key = false) {
return $this->_oHandler->getObjects($criteria, $id_as_key);
}
/**
* Count some {@link icms_config_option_Object}s
*
* @param object $criteria {@link icms_db_criteria_Element}
*
* @return int Count of {@link icms_config_option_Object}s matching $criteria
*/
public function getConfigOptionsCount($criteria = null) {
return $this->_oHandler->getCount($criteria);
}
/**
* Get a list of configs
*
* @param int $conf_modid ID of the modules
* @param int $conf_catid ID of the category
*
* @return array Associative array of name=>value pairs.
*/
public function getConfigList($conf_modid, $conf_catid = 0) {
if (!empty($this->_cachedConfigs[$conf_modid][$conf_catid])) {
return $this->_cachedConfigs[$conf_modid][$conf_catid];
} else {
$criteria = new icms_db_criteria_Compo(new icms_db_criteria_Item('conf_modid', $conf_modid));
if (empty($conf_catid)) {
$criteria->add(new icms_db_criteria_Item('conf_catid', $conf_catid));
}
$configs =& $this->_cHandler->getObjects($criteria);
$confcount = count($configs);
$ret = array();
for ( $i = 0; $i < $confcount; $i++) {
$ret[$configs[$i]->getVar('conf_name')] = $configs[$i]->getConfValueForOutput();
}
$this->_cachedConfigs[$conf_modid][$conf_catid] =& $ret;
return $ret;
}
}
}