*/
// must be run within Dokuwiki
if(!defined('DOKU_INC')) die();
if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
require_once(DOKU_PLUGIN.'admin.php');
define('CM_KEYMARKER','____');            // used for settings with multiple dimensions of array indices
define('PLUGIN_SELF',dirname(__FILE__).'/');
define('PLUGIN_METADATA',PLUGIN_SELF.'settings/config.metadata.php');
require_once(PLUGIN_SELF.'settings/config.class.php');  // main configuration class and generic settings classes
require_once(PLUGIN_SELF.'settings/extra.class.php');   // settings classes specific to these settings
/**
 * All DokuWiki plugins to extend the admin function
 * need to inherit from this class
 */
class admin_plugin_config extends DokuWiki_Admin_Plugin {
    var $_file = PLUGIN_METADATA;
    var $_config = null;
    var $_input = null;
    var $_changed = false;          // set to true if configuration has altered
    var $_error = false;
    var $_session_started = false;
        var $_localised_prompts = false;
    /**
     * return some info
     */
    function getInfo(){
      return array(
        'author' => 'Christopher Smith',
        'email'  => 'chris@jalakai.co.uk',
        'date'   => '2006-01-24',
        'name'   => 'Configuration Manager',
        'desc'   => "Manage Dokuwiki's Configuration Settings",
        'url'    => 'http://wiki.splitbrain.org/plugin:config',
      );
    }
    function getMenuSort() { return 100; }
    /**
     * handle user request
     */
    function handle() {
      global $ID;
      if (!$this->_restore_session()) return $this->_close_session();
      if (!isset($_REQUEST['save']) || ($_REQUEST['save'] != 1)) return $this->_close_session();
      if (is_null($this->_config)) { $this->_config = new configuration($this->_file); }
      // don't go any further if the configuration is locked
      if ($this->_config->_locked) return $this->_close_session();
      $this->_input = $_REQUEST['config'];
      while (list($key) = each($this->_config->setting)) {
        $input = isset($this->_input[$key]) ? $this->_input[$key] : NULL;
        if ($this->_config->setting[$key]->update($input)) {
          $this->_changed = true;
        }
        if ($this->_config->setting[$key]->error()) $this->_error = true;
      }
      if ($this->_changed  && !$this->_error) {
        $this->_config->save_settings($this->getPluginName());
        // save state & force a page reload to get the new settings to take effect
        $_SESSION['PLUGIN_CONFIG'] = array('state' => 'updated', 'time' => time());
        $this->_close_session();
        header("Location: ".wl($ID,array('do'=>'admin','page'=>'config'),true,'&'));
        exit();
      }
      $this->_close_session();
    }
    /**
     * output appropriate html
     */
    function html() {
      global $lang;
      global $ID;
      if (is_null($this->_config)) { $this->_config = new configuration($this->_file); }
      $this->setupLocale(true);
      $this->_print_config_toc();
      print $this->locale_xhtml('intro');
      ptln('
');
      if ($this->_config->locked)
        ptln('
'.$this->getLang('locked').'
');
      elseif ($this->_error)
        ptln('
'.$this->getLang('error').'
');
      elseif ($this->_changed)
        ptln('
'.$this->getLang('updated').'
');
      ptln('
');
      ptln('