[ Index ]
 

Code source de PHP PEAR 1.4.5

Accédez au Source d'autres logiciels libresSoutenez Angelica Josefina !

title

Body

[fermer]

/ -> Config.php (source)

   1  <?php
   2  // +----------------------------------------------------------------------+
   3  // | PHP Version 4                                                        |
   4  // +----------------------------------------------------------------------+
   5  // | Copyright (c) 1997-2003 The PHP Group                                |
   6  // +----------------------------------------------------------------------+
   7  // | This source file is subject to version 2.0 of the PHP license,       |
   8  // | that is bundled with this package in the file LICENSE, and is        |
   9  // | available at through the world-wide-web at                           |
  10  // | http://www.php.net/license/2_02.txt.                                 |
  11  // | If you did not receive a copy of the PHP license and are unable to   |
  12  // | obtain it through the world-wide-web, please send a note to          |
  13  // | license@php.net so we can mail you a copy immediately.               |
  14  // +----------------------------------------------------------------------+
  15  // | Author: Bertrand Mansion <bmansion@mamasam.com>                      |
  16  // +----------------------------------------------------------------------+
  17  //
  18  // $Id: Config.php,v 1.22 2006/12/22 00:35:34 aashley Exp $
  19  
  20  require_once ('PEAR.php');
  21  require_once ('Config/Container.php');
  22  
  23  $GLOBALS['CONFIG_TYPES'] = 
  24          array(
  25              'apache'        => array('Config/Container/Apache.php', 'Config_Container_Apache'),
  26              'genericconf'   => array('Config/Container/GenericConf.php', 'Config_Container_GenericConf'),
  27              'inifile'       => array('Config/Container/IniFile.php', 'Config_Container_IniFile'),
  28              'inicommented'  => array('Config/Container/IniCommented.php', 'Config_Container_IniCommented'),
  29              'phparray'      => array('Config/Container/PHPArray.php', 'Config_Container_PHPArray'),
  30                          'phpconstants'    => array('Config/Container/PHPConstants.php', 'Config_Container_PHPConstants'),
  31              'xml'           => array('Config/Container/XML.php', 'Config_Container_XML')
  32              );
  33  
  34  /**
  35  * Config
  36  *
  37  * This class allows for parsing and editing of configuration datasources.
  38  * Do not use this class only to read datasources because of the overhead
  39  * it creates to keep track of the configuration structure.
  40  *
  41  * @author   Bertrand Mansion <bmansion@mamasam.com>
  42  * @package  Config
  43  */
  44  class Config {
  45  
  46      /**
  47      * Datasource
  48      * Can be a file url, a dsn, an object...
  49      * @var mixed
  50      */
  51      var $datasrc;
  52  
  53      /**
  54      * Type of datasource for config
  55      * Ex: IniCommented, Apache...
  56      * @var string
  57      */
  58      var $configType = '';
  59  
  60      /**
  61      * Options for parser
  62      * @var string
  63      */
  64      var $parserOptions = array();
  65  
  66      /**
  67      * Container object
  68      * @var object
  69      */
  70      var $container;
  71  
  72      /**
  73      * Constructor
  74      * Creates a root container
  75      *
  76      * @access public
  77      */
  78      function Config()
  79      {
  80          $this->container =& new Config_Container('section', 'root');
  81      } // end constructor
  82  
  83      /**
  84      * Returns true if container is registered
  85      *
  86      * @param    string  $configType  Type of config
  87      * @access public
  88      * @return   bool
  89      */
  90      function isConfigTypeRegistered($configType)
  91      {
  92          return isset($GLOBALS['CONFIG_TYPES'][strtolower($configType)]);
  93      } // end func isConfigTypeRegistered
  94  
  95      /**
  96       * Register a new container
  97       *
  98       * @param    string       $configType  Type of config
  99       * @param    array|false  $configInfo  Array of format:
 100       *           array('path/to/Name.php',
 101       *                 'Config_Container_Class_Name').
 102       *
 103       *           If left false, defaults to:
 104       *           array('Config/Container/$configType.php',
 105       *                 'Config_Container_$configType')
 106       * @access   public
 107       * @static
 108       * @author   Greg Beaver <cellog@users.sourceforge.net>
 109       * @return   true|PEAR_Error  true on success
 110       */
 111      function registerConfigType($configType, $configInfo = false)
 112      {
 113          if (Config::isConfigTypeRegistered($configType)) {
 114              $info = $GLOBALS['CONFIG_TYPES'][strtolower($configType)];
 115              if ($info[0] == $configInfo[0] &&
 116                  $info[1] == $configInfo[1]) {
 117                  return true;
 118              } else {
 119                  return PEAR::raiseError("Config::registerConfigType registration of existing $configType failed.", null, PEAR_ERROR_RETURN);
 120              }
 121          }
 122          if (!is_array($configInfo)) {
 123              // make the normal assumption, that this is a standard config container added in at runtime
 124              $configInfo = array('Config/Container/' . $configType . '.php',
 125                                  'Config_Container_'. $configType);
 126          }
 127          $file_exists = @include_once($configInfo[0]);
 128          if ($file_exists) {
 129              if (!class_exists($configInfo[1])) {
 130                  return PEAR::raiseError("Config::registerConfigType class '$configInfo[1]' not found in $configInfo[0]", null, PEAR_ERROR_RETURN);
 131              }
 132          } else {
 133              return PEAR::raiseError("Config::registerConfigType file $configInfo[0] not found", null, PEAR_ERROR_RETURN);
 134          }
 135          $GLOBALS['CONFIG_TYPES'][strtolower($configType)] = $configInfo;
 136          return true;
 137      } // end func registerConfigType
 138  
 139      /**
 140      * Returns the root container for this config object
 141      *
 142      * @access public
 143      * @return   object  reference to config's root container object
 144      */
 145      function &getRoot()
 146      {
 147          return $this->container;
 148      } // end func getRoot
 149  
 150      /**
 151      * Sets the content of the root Config_container object.
 152      *
 153      * This method will replace the current child of the root
 154      * Config_Container object by the given object.
 155      *
 156      * @param object  $rootContainer  container to be used as the first child to root
 157      * @access public
 158      * @return   mixed    true on success or PEAR_Error
 159      */
 160      function setRoot(&$rootContainer)
 161      {
 162          if (is_object($rootContainer) && strtolower(get_class($rootContainer)) === 'config_container') {
 163              if ($rootContainer->getName() === 'root' && $rootContainer->getType() === 'section') {
 164                  $this->container =& $rootContainer;
 165              } else {
 166                  $this->container =& new Config_Container('section', 'root');
 167                  $this->container->addItem($rootContainer);
 168              }
 169              return true;
 170          } else {
 171              return PEAR::raiseError("Config::setRoot only accepts object of Config_Container type.", null, PEAR_ERROR_RETURN);
 172          }
 173      } // end func setRoot
 174  
 175      /**
 176      * Parses the datasource contents
 177      *
 178      * This method will parse the datasource given and fill the root 
 179      * Config_Container object with other Config_Container objects.
 180      *
 181      * @param mixed   $datasrc     Datasource to parse
 182      * @param string  $configType  Type of configuration
 183      * @param array   $options     Options for the parser
 184      * @access public
 185      * @return mixed PEAR_Error on error or Config_Container object
 186      */
 187      function &parseConfig($datasrc, $configType, $options = array())
 188      {
 189          $configType = strtolower($configType);
 190          if (!$this->isConfigTypeRegistered($configType)) {
 191              return PEAR::raiseError("Configuration type '$configType' is not registered in Config::parseConfig.", null, PEAR_ERROR_RETURN);
 192          }
 193          $includeFile = $GLOBALS['CONFIG_TYPES'][$configType][0];
 194          $className = $GLOBALS['CONFIG_TYPES'][$configType][1];
 195          include_once($includeFile);
 196  
 197          $parser = new $className($options);
 198          $error = $parser->parseDatasrc($datasrc, $this);
 199          if ($error !== true) {
 200              return $error;
 201          }
 202          $this->parserOptions = $parser->options;
 203          $this->datasrc = $datasrc;
 204          $this->configType = $configType;
 205          return $this->container;
 206      } // end func &parseConfig
 207  
 208      /**
 209      * Writes the container contents to the datasource.
 210      *
 211      * @param mixed   $datasrc     Datasource to write to
 212      * @param string  $configType  Type of configuration
 213      * @param array   $options     Options for config container
 214      * @access public
 215      * @return mixed PEAR_Error on error or true if ok
 216      */
 217      function writeConfig($datasrc = null, $configType = null, $options = array())
 218      {
 219          if (empty($datasrc)) {
 220              $datasrc = $this->datasrc;
 221          }
 222          if (empty($configType)) {
 223              $configType = $this->configType;
 224          }
 225          if (empty($options)) {
 226              $options = $this->parserOptions;
 227          }
 228          return $this->container->writeDatasrc($datasrc, $configType, $options);
 229      } // end func writeConfig
 230  } // end class Config
 231  ?>


Généré le : Sun Feb 25 14:08:00 2007 par Balluche grâce à PHPXref 0.7