load(ONYX.'config/root.xml') or trigger_error('Erreur du fichier de configuration', E_USER_ERROR); $xml->normalizeDocument(); //$xml->validate(); if ($root = $xml->documentElement->getAttribute('root')) { // Autorise les fichiers dans les dossiers htdocs/ et cron/ $cron = str_replace("htdocs", "cron", $root); if ($root == substr(FILE, 0, strlen($root)) || $cron == substr(FILE, 0, strlen($cron))) { define('ROOT', $root); $search = substr(FILE, strlen($root)); $paths = explode('/', $search); $paths2 = $paths; foreach ($paths as $key => $path) { for ($i = $key - 1; $i >= 0; $i--) { $paths2[$key] = $paths[$i] . '/' . $paths2[$key]; } if ($key != count($paths) - 1) { $paths2[$key] .= '/'; } } foreach ($xml->getElementsByTagName('config') as $value) { $config[$value->getAttribute('match')] = $value; } $VAR = $ENV = $modules = array(); array_unshift($paths2, '*'); foreach ($paths2 as $path) { if ($config[$path]) { $VAR = array_merge($VAR, parse_config($config[$path])); $ENV = array_merge($ENV, parse_config($config[$path], 'env', 'option')); foreach ($config[$path]->getElementsByTagName('module') as $module) { $modules[$module->getAttribute('name')] = $module; } } } $xml_modules = new DOMDocument(); $xml_modules->load(ONYX.'modules/modules.xml') or trigger_error('Erreur du fichier de modules', E_USER_ERROR); $xml_modules->normalizeDocument(); foreach ($xml_modules->getElementsByTagName('module') as $module) { if (!ctype_alnum($module->getAttribute('name'))) { trigger_error('Le nom du module contient des caracteres illegaux', E_USER_ERROR); } $all_modules[$module->getAttribute('name')] = $module; } $all_opt = $load_modules = array(); foreach ($modules as $name => $module) { if (isset($all_modules[$name]) && !in_array($name, $load_modules)) { if ($require = $all_modules[$name]->getAttribute('require')) { if (!in_array($require, $load_modules)) { trigger_error("Module '$name' requiert '$require'", E_USER_WARNING); continue; } } $OPT = parse_config($module, 'option'); $OPT = array_merge(parse_config($all_modules[$name]->getElementsByTagName('default')->item(0), 'option'), $OPT); include_once(ONYX.'modules/'.$name.'/main.php'); $all_opt[$name] = $OPT; $load_modules[] = $name; } } if ($xml->documentElement->getAttribute('cache')) { Cache::set('_configuration_'.FILE, array('var' => $VAR,'env' => $ENV, 'root' => $root,'modules' => $load_modules, 'opt' => $all_opt, 'check' => md5_file(ONYX.'config/root.xml').md5_file(ONYX.'modules/modules.xml'))); } else { Cache::del('_configuration_'.FILE); } } else { trigger_error('Fichier hors de la racine', E_USER_ERROR); } } else { trigger_error('Configuration erronnee', E_USER_ERROR); } define('CACHED', false); } error_reporting($ENV['error_level']); set_include_path(get_include_path() . PATH_SEPARATOR . ONYX.'include/'); ignore_user_abort($ENV['ignore_user_abort']); setLocale(LC_TIME, $ENV['locale']); setLocale(LC_NUMERIC, 'en_EN'); if ($VAR['chrono']) { function view_chrono() { global $chrono_start,$VAR; echo str_replace('$', round(microtime(true) - $chrono_start, 4), $VAR['chrono']); } register_shutdown_function('view_chrono'); } if ($ENV['log_php']) { ini_set('error_log', ONYX.'log/php.log'); } foreach ($ENV['ini'] as $name => $value) { ini_set($name, $value); } foreach ($ENV['header'] as $name => $value) { header($name.': '.$value); } unset($xml,$root,$search,$paths,$paths2,$path,$key,$i,$value,$config,$modules,$module,$load_modules,$xml_modules,$all_modules,$name,$require,$OPT,$all_opt,$dir,$file,$ENV,$cached);