Example #1
0
 /**
  * Execute this configuration handler.
  *
  * @param string An absolute filesystem path to a configuration file.
  *
  * @return string Data to be written to a cache file.
  *
  * @throws <b>ConfigurationException</b> If a requested configuration file
  *									   does not exist or is not readable.
  * @throws <b>ParseException</b> If a requested configuration file is
  *							   improperly formatted.
  */
 public function &execute($config)
 {
     // parse the ini
     $ini = $this->parseIni($config);
     // determine if we're loading the system config_handlers.ini or a module
     // config_handlers.ini
     $moduleLevel = $this->getParameter('module_level') === true ? true : false;
     if ($moduleLevel) {
         // get the current module name
         $moduleName = $this->getParameter('module_name');
     }
     // init our data and includes arrays
     $data = array();
     $includes = array();
     // let's do our fancy work
     foreach ($ini as $category => &$keys) {
         if ($moduleLevel) {
             // module-level registration, so we must prepend the module
             // root to the category
             $category = 'modules/' . $moduleName . '/' . $category;
         }
         if (!isset($keys['class'])) {
             // missing class key
             $error = 'Configuration file "%s" specifies category ' . '"%s" with missing class key';
             $error = sprintf($error, $config, $category);
             throw new ParseException($error);
         }
         $class =& $keys['class'];
         if (isset($keys['file'])) {
             // we have a file to include
             $file =& $keys['file'];
             $file = $this->replaceConstants($file);
             $file = $this->replacePath($file);
             if (!is_readable($file)) {
                 // handler file doesn't exist
                 $error = 'Configuration file "%s" specifies class "%s" ' . 'with nonexistent or unreadable file "%s"';
                 $error = sprintf($error, $config, $class, $file);
                 throw new ParseException($error);
             }
             // append our data
             $tmp = "require_once('%s');";
             $includes[] = sprintf($tmp, $file);
         }
         // parse parameters
         $parameters =& ParameterParser::parse($keys);
         // append new data
         $tmp = "self::\$handlers['%s'] = new %s();";
         $data[] = sprintf($tmp, $category, $class);
         if ($parameters != 'null') {
             // since we have parameters we will need to init the handler
             $tmp = "self::\$handlers['%s']->initialize(%s);";
             $data[] = sprintf($tmp, $category, $parameters);
         }
     }
     // compile data
     $retval = "<?php\n" . "// auth-generated by RootConfigHandler\n" . "// date: %s\n%s\n%s\n?>";
     $retval = sprintf($retval, date('m/d/Y H:i:s'), implode("\n", $includes), implode("\n", $data));
     return $retval;
 }
Example #2
0
 /**
  * Execute this configuration handler.
  *
  * @param string An absolute filesystem path to a configuration file.
  *
  * @return string Data to be written to a cache file.
  *
  * @throws <b>ConfigurationException</b> If a requested configuration file
  *									   does not exist or is not readable.
  * @throws <b>ParseException</b> If a requested configuration file is
  *							   improperly formatted.
  */
 public function &execute($config)
 {
     // parse the ini
     $ini = $this->parseIni($config);
     // init our data and includes arrays
     $data = array();
     $includes = array();
     // let's do our fancy work
     foreach ($ini as $category => &$keys) {
         if (!isset($keys['class'])) {
             // missing class key
             $error = 'Configuration file "%s" specifies category ' . '"%s" with missing class key';
             $error = sprintf($error, $config, $category);
             throw new ParseException($error);
         }
         $class =& $keys['class'];
         if (isset($keys['file'])) {
             // we have a file to include
             $file =& $keys['file'];
             $file = $this->replaceConstants($file);
             $file = $this->replacePath($file);
             if (!is_readable($file)) {
                 // filter file doesn't exist
                 $error = 'Configuration file "%s" specifies class "%s" ' . 'with nonexistent or unreadable file "%s"';
                 $error = sprintf($error, $config, $class, $file);
                 throw new ParseException($error);
             }
             // append our data
             $tmp = "require_once('%s');";
             $includes[] = sprintf($tmp, $file);
         }
         // parse parameters
         $parameters =& ParameterParser::parse($keys);
         // append new data
         $tmp = "\$filter = new %s();\n" . "\$filter->initialize(\$this->context, %s);\n" . "\$filters[] = \$filter;";
         $data[] = sprintf($tmp, $class, $parameters);
     }
     // compile data
     $retval = "<?php\n" . "// auth-generated by FilterConfigHandler\n" . "// date: %s\n%s\n%s\n%s\n%s\n?>";
     $retval = sprintf($retval, date('m/d/Y H:i:s'), implode("\n", $includes), '$filters = array();', implode("\n", $data), '$list[$moduleName] =& $filters;');
     return $retval;
 }
 /**
  * Execute this configuration handler.
  *
  * @param string An absolute filesystem path to a configuration file.
  *
  * @return string Data to be written to a cache file.
  *
  * @throws <b>ConfigurationException</b> If a requested configuration file
  *									   does not exist or is not readable.
  * @throws <b>ParseException</b> If a requested configuration file is
  *							   improperly formatted.
  */
 public function &execute($config)
 {
     // set our required categories list and initialize our handler
     $categories = array('required_categories' => array('databases'));
     $this->initialize($categories);
     // parse the ini
     $ini = $this->parseIni($config);
     // init our data and includes arrays
     $data = array();
     $databases = array();
     $includes = array();
     // get a list of database connections
     foreach ($ini['databases'] as $key => &$value) {
         $value = trim($value);
         // is this category already registered?
         if (in_array($value, $databases)) {
             // this category is already registered
             $error = 'Configuration file "%s" specifies previously ' . 'registered category "%s"';
             $error = sprintf($error, $config, $value);
             throw new ParseException($error);
         }
         // see if we have the category registered for this database
         if (!isset($ini[$value])) {
             // missing required key
             $error = 'Configuration file "%s" specifies nonexistent ' . 'category "%s"';
             $error = sprintf($error, $config, $value);
             throw new ParseException($error);
         }
         // add this database
         $databases[$key] = $value;
     }
     // make sure we have a default database registered
     if (!isset($databases['default'])) {
         // missing default database
         $error = 'Configuration file "%s" must specify a default ' . 'database configuration';
         $error = sprintf($error, $config);
         throw new ParseException($error);
     }
     // let's do our fancy work
     foreach ($ini as $category => &$keys) {
         if (!in_array($category, $databases)) {
             // skip this unspecified category
             continue;
         }
         if (!isset($keys['class'])) {
             // missing class key
             $error = 'Configuration file "%s" specifies category ' . '"%s" with missing class key';
             $error = sprintf($error, $config, $category);
             throw new ParseException($error);
         }
         $class =& $keys['class'];
         if (isset($keys['file'])) {
             // we have a file to include
             $file =& $keys['file'];
             $file = $this->replaceConstants($file);
             $file = $this->replacePath($file);
             if (!is_readable($file)) {
                 // database file doesn't exist
                 $error = 'Configuration file "%s" specifies class "%s" ' . 'with nonexistent or unreadable file "%s"';
                 $error = sprintf($error, $config, $class, $file);
                 throw new ParseException($error);
             }
             // append our data
             $tmp = "require_once('%s');";
             $includes[] = sprintf($tmp, $file);
         }
         // parse parameters
         $parameters =& ParameterParser::parse($keys);
         // append new data
         $tmp = "\$database = new %s();\n" . "\$database->initialize(%s);\n" . "\$this->databases['%s'] = \$database;";
         $data[] = sprintf($tmp, $class, $parameters, array_search($category, $databases));
     }
     // compile data
     $retval = "<?php\n" . "// auth-generated by DatabaseConfigHandler\n" . "// date: %s\n%s\n%s\n?>";
     $retval = sprintf($retval, date('m/d/Y H:i:s'), implode("\n", $includes), implode("\n", $data));
     return $retval;
 }
 /**
  * Load a list of validators.
  *
  * @param string The configuration file name (for exception usage).
  * @param array  An associative array of validator data.
  * @param array  The loaded ini configuration that we'll use for
  *			   verification purposes.
  * @param string A comma delimited list of validator names.
  * @param array  A file/parameter name entry.
  *
  * @return void
  */
 private function loadValidators(&$config, &$validators, &$ini, &$list, &$entry)
 {
     // create our empty entry validator array
     $entry['validators'] = array();
     if (trim($list) == '') {
         // skip the empty list
         return;
     }
     // get our validator array
     $array = explode(',', $list);
     foreach ($array as &$validator) {
         $validator = trim($validator);
         // add this validator name to our entry
         $entry['validators'][] =& $validator;
         // make sure the specified validator exists
         if (!isset($ini[$validator])) {
             // validator hasn't been registered
             $error = 'Configuration file "%s" specifies unregistered ' . 'validator "%s"';
             $error = sprintf($error, $config, $validator);
             throw new ParseException($error);
         }
         // has it already been registered?
         if (isset($validators[$validator])) {
             continue;
         }
         if (!isset($ini[$validator]['class'])) {
             // missing class key
             $error = 'Configuration file "%s" specifies category ' . '"%s" with missing class key';
             $error = sprintf($error, $config, $validator);
             throw new ParseException($error);
         }
         // create our validator
         $validators[$validator] = array();
         $validators[$validator]['class'] = $ini[$validator]['class'];
         $validators[$validator]['file'] = null;
         $validators[$validator]['parameters'] = null;
         if (isset($ini[$validator]['file'])) {
             // we have a file for this validator
             $file = $ini[$validator]['file'];
             // keyword replacement
             $file = $this->replaceConstants($file);
             $file = $this->replacePath($file);
             if (!is_readable($file)) {
                 // file doesn't exist
                 $error = 'Configuration file "%s" specifies ' . 'category "%s" with nonexistent or unreadable ' . 'file "%s"';
                 $error = sprintf($error, $config, $validator, $file);
                 throw new ParseException($error);
             }
             $validators[$validator]['file'] = $file;
         }
         // parse parameters
         $parameters = ParameterParser::parse($ini[$validator]);
         $validators[$validator]['parameters'] = $parameters;
     }
 }
 /**
  * Execute this configuration handler.
  *
  * @param string An absolute filesystem path to a configuration file.
  *
  * @return string Data to be written to a cache file.
  *
  * @throws <b>ConfigurationException</b> If a requested configuration file
  *									   does not exist or is not readable.
  * @throws <b>ParseException</b> If a requested configuration file is
  *							   improperly formatted.
  */
 public function &execute($config)
 {
     // available list of factories
     $factories = array('request', 'storage', 'user', 'security_filter');
     // set our required categories list and initialize our handler
     $categories = array('required_categories' => $factories);
     $this->initialize($categories);
     // parse the ini
     $ini = $this->parseIni($config);
     // init our data and includes arrays
     $includes = array();
     $inits = array();
     $instances = array();
     // let's do our fancy work
     foreach ($factories as $factory) {
         // see if the factory exists
         if (!isset($ini[$factory])) {
             // factory hasn't been registered
             $error = 'Configuration file "%s" must register "%s" factory';
             $error = sprintf($config, $factory);
             throw new ParseException($error);
         }
         // get factory keys
         $keys = $ini[$factory];
         if (!isset($keys['class'])) {
             // missing class key
             $error = 'Configuration file "%s" specifies category ' . '"%s" with missing class key';
             $error = sprintf($error, $config, $factory);
             throw new ParseException($error);
         }
         $class = $keys['class'];
         if (isset($keys['file'])) {
             // we have a file to include
             $file =& $keys['file'];
             $file = $this->replaceConstants($file);
             $file = $this->replacePath($file);
             if (!is_readable($file)) {
                 // factory file doesn't exist
                 $error = 'Configuration file "%s" specifies class ' . '"%s" with nonexistent or unreadablefile ' . '"%s"';
                 $error = sprintf($error, $config, $class, $file);
                 throw new ParseException($error);
             }
             // append our data
             $tmp = "require_once('%s');";
             $includes[] = sprintf($tmp, $file);
         }
         // parse parameters
         $parameters = ParameterParser::parse($keys);
         // append new data
         switch ($factory) {
             case 'request':
                 // append instance creation
                 $tmp = "\$this->request = " . "\\Mojavi\\Request\\Request::newInstance('%s');";
                 $instances[] = sprintf($tmp, $class);
                 // append instance initialization
                 $tmp = "\$this->request->initialize(\$this->context, " . "%s);";
                 $inits[] = sprintf($tmp, $parameters);
                 break;
             case 'security_filter':
                 // append creation/initialization in one swipe
                 $tmp = "\nif (MO_USE_SECURITY)\n{\n" . "\t\$this->securityFilter = " . "\\Mojavi\\Filter\\SecurityFilter::newInstance('%s');\n" . "\t\$this->securityFilter->initialize(" . "\$this->context, %s);\n}\n";
                 $inits[] = sprintf($tmp, $class, $parameters);
                 break;
             case 'storage':
                 // append instance creation
                 $tmp = "\$this->storage = " . "\\Mojavi\\Storage\\Storage::newInstance('%s');";
                 $instances[] = sprintf($tmp, $class);
                 // append instance initialization
                 $tmp = "\$this->storage->initialize(\$this->context, " . "%s);";
                 $inits[] = sprintf($tmp, $parameters);
                 break;
             case 'user':
                 // append instance creation
                 $tmp = "\$this->user = \\Mojavi\\User\\User::newInstance('%s');";
                 $instances[] = sprintf($tmp, $class);
                 // append instance initialization
                 $tmp = "\$this->user->initialize(\$this->context, %s);";
                 $inits[] = sprintf($tmp, $parameters);
         }
     }
     // context creation
     $context = "\$this->context = new \\Mojavi\\Core\\Context(%s, %s, %s, %s, %s);";
     $context = sprintf($context, '$this', '$this->request', '$this->user', '$this->storage', '$this->databaseManager');
     if (defined('MO_USE_LOGGING') && MO_USE_LOGGING) {
         LoggerManager::initialize();
     }
     // compile data
     $retval = "<?php\n" . "// auth-generated by FactoryConfigHandler\n" . "// date: %s\n%s\n%s\n%s\n%s\n?>";
     $retval = sprintf($retval, date('m/d/Y H:i:s'), implode("\n", $includes), implode("\n", $instances), $context, implode("\n", $inits));
     return $retval;
 }
 /**
  * Load all request methods and the file/parameter names that will be
  * validated from the [methods] category.
  *
  * @param string The configuration file name (for exception usage).
  * @param string A Logger "instance" name.
  * @param array  An associative array of request method data.
  * @param array  An associative array of file/parameter appenders in which to
  *			   store loaded information.
  * @param array  The loaded ini configuration that we'll use for
  *			   verification purposes.
  *
  * @return void
  */
 private function loadLogger(&$config, &$logger, &$loggers, &$appenders, &$ini, &$category)
 {
     if (!isset($ini[$category]['class']) || trim($ini[$category]['class']) == '') {
         // missing/empty class key
         $error = 'Configuration file "%s" specifies logger ' . '"%s", with missing/empty class key';
         $error = sprintf($error, $config, $category);
         throw new ParseException($error);
     }
     if (!isset($ini[$category]['appenders']) || trim($ini[$category]['appenders']) == '') {
         // missing/empty appenders key
         $error = 'Configuration file "%s" specifies logger ' . '"%s", with missing/empty appenders key';
         $error = sprintf($error, $config, $category);
         throw new ParseException($error);
     }
     $loggers[$logger]['class'] = $ini[$category]['class'];
     // explode the list of names
     $array = explode(',', $ini[$category]['appenders']);
     // loop through the names
     foreach ($array as $name) {
         $name = trim($name);
         // make sure we have the required status of this file or parameter
         if (!isset($ini[$name])) {
             // missing section
             $error = 'Configuration file "%s" specifies appender ' . '"%s", but it has no section';
             $error = sprintf($error, $config, $name);
             throw new ParseException($error);
         }
         if (!isset($appenders[$name])) {
             $appenders[$name] = array();
         }
         // add this appender to the current request method
         $loggers[$logger]['appenders'][] = $name;
     }
     if (isset($ini[$category]['priority'])) {
         $loggers[$logger]['priority'] = $ini[$category]['priority'];
     }
     $loggers[$logger]['params'] =& ParameterParser::parse($ini[$category]);
 }