thomascube
2009-05-21 c73b195e5d02a09d56430dd6e666313b86fee2f9
Add function for plugins to load a local config file

3 files modified
50 ■■■■ changed files
program/include/rcube_config.php 34 ●●●● patch | view | raw | blame | history
program/include/rcube_plugin.php 14 ●●●●● patch | view | raw | blame | history
program/steps/error.inc 2 ●●● patch | view | raw | blame | history
program/include/rcube_config.php
@@ -51,15 +51,11 @@
    ob_start();
    
    // load main config file
    if (include(RCMAIL_CONFIG_DIR . '/main.inc.php'))
      $this->prop = (array)$rcmail_config;
    else
    if (!$this->load_from_file(RCMAIL_CONFIG_DIR . '/main.inc.php'))
      $this->errors[] = 'main.inc.php was not found.';
    // load database config
    if (include(RCMAIL_CONFIG_DIR . '/db.inc.php'))
      $this->prop += (array)$rcmail_config;
    else
    if (!$this->load_from_file(RCMAIL_CONFIG_DIR . '/db.inc.php'))
      $this->errors[] = 'db.inc.php was not found.';
    
    // load host-specific configuration
@@ -124,14 +120,34 @@
      $fname = preg_replace('/[^a-z0-9\.\-_]/i', '', $_SERVER['HTTP_HOST']) . '.inc.php';
    }
    if ($fname && is_file(RCMAIL_CONFIG_DIR . '/' . $fname)) {
      include(RCMAIL_CONFIG_DIR . '/' . $fname);
      $this->prop = array_merge($this->prop, (array)$rcmail_config);
    if ($fname) {
      $this->load_from_file(RCMAIL_CONFIG_DIR . '/' . $fname);
    }
  }
  
  
  /**
   * Read configuration from a file
   * and merge with the already stored config values
   *
   * @param string Full path to the config file to be loaded
   * @return booelan True on success, false on failure
   */
  public function load_from_file($fpath)
  {
    if (is_file($fpath)) {
      @include($fpath);
      if (is_array($rcmail_config)) {
        $this->prop = array_merge($this->prop, $rcmail_config);
        return true;
      }
    }
    return false;
  }
  /**
   * Getter for a specific config parameter
   *
   * @param  string Parameter name
program/include/rcube_plugin.php
@@ -47,6 +47,20 @@
   * Initialization method, needs to be implemented by the plugin itself
   */
  abstract function init();
  /**
   * Load local config file from plugins directory.
   * The loaded values are patched over the global configuration.
   *
   * @param string Config file name relative to the plugin's folder
   */
  public function load_config($fname = 'config.inc.php')
  {
    $fpath = $this->home.'/'.$fname;
    $rcmail = rcmail::get_instance();
    if (!$rcmail->config->load_from_file($fpath))
      raise_error(array('code' => 527, 'type' => 'php', 'message' => "Failed to load config from $fpath"), true, false);
  }
  /**
   * Register a callback function for a specific (server-side) hook
program/steps/error.inc
@@ -81,7 +81,7 @@
  if (($CONFIG['debug_level'] & 4) && $ERROR_MESSAGE)
    $__error_text = $ERROR_MESSAGE;
  else
    $__error_text = sprintf('Error No. [0x%04X]', $ERROR_CODE);
    $__error_text = sprintf('Error No. [%s]', $ERROR_CODE);
}