code[$file])) require_once($GLOBALS['modules']->code[$file]); elseif(isset($GLOBALS['modules']->templates[$file])) require_once($GLOBALS['modules']->templates[$file]); else require_once($file); } class Modules { var $modules; var $code; var $templates; function Modules() { $this->modules = array(); $this->code = array(); $this->templates = array(); $dir = opendir('modules'); while($moddir = readdir($dir)) { if($moddir[0] != '.' && is_dir('modules/' . $moddir)) { $data = $GLOBALS['xmlparser']->ParseFile('modules/' . $moddir . '/module.xml'); if(!$data) continue; $info = $GLOBALS['xmlparser']->FindTag($data, 'info'); if(!is_array($info)) continue; $name = $GLOBALS['xmlparser']->FindTag($info, 'name'); if(!is_array($name)) continue; if(count($name['children']) != 1) continue; if(!is_string($name['children'][0])) continue; $name = $name['children'][0]; $this->module[$name] = array('name' => $name, 'code' => array(), 'templates' => array()); $files = $GLOBALS['xmlparser']->FindTag($data, 'files'); if(!is_array($files)) continue; foreach($files['children'] as $file) { if(!is_array($file)) continue; if(count($file['children']) != 1) continue; if(!is_string($file['children'][0])) continue; switch($file['tag']) { case 'code': $filename = 'code/' . $file['children'][0] . '.inc.php'; $realname = 'modules/' . $moddir . '/code/' . $file['children'][0] . '.inc.php'; $this->code[$filename] = $realname; $this->modules[$name]['code'][$filename] = $realname; break; case 'template': $filename = 'templates/' . $file['children'][0] . '.inc.php'; $realname = 'modules/' . $moddir . '/templates/' . $file['children'][0] . '.inc.php'; $this->templates[$filename] = $realname; $this->modules[$name]['templates'][$filename] = $realname; } } } } closedir($dir); } } $GLOBALS['modules'] = new Modules; ?>