1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
<?PHP
require_once('code/xmlparser.inc.php');
require_once('code/db.inc.php');
function require_mod($file) {
if(isset($GLOBALS['modules']->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 = array();
var $modules_enabled = array();
var $pages = array();
var $code = array();
var $templates = array();
function Modules() {
$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(!$info) continue;
$name = $GLOBALS['xmlparser']->FindTag($info, 'name');
if(!$name) continue;
if(count($name['children']) != 1) continue;
if(!is_string($name['children'][0])) continue;
$name = $name['children'][0];
$desc = $GLOBALS['xmlparser']->FindTag($info, 'desc');
if(!$desc) continue;
if(count($desc['children']) != 1) continue;
if(!is_string($desc['children'][0])) continue;
$desc = $desc['children'][0];
$this->modules[$name] = array('name' => $name, 'desc' => $desc, 'code' => array(), 'templates' => array());
$files = $GLOBALS['xmlparser']->FindTag($data, 'files');
if(!$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 'page':
$type = $file['attribs']['type'];
if(!$type) $type = 'c';
$pagename = $file['children'][0] . '.' . $type;
$realname = 'modules/' . $moddir . '/pages/' . strtr($type, array('c' => 'content', 'e' => 'editor', 'n' => 'nav'))
. '/' . $file['children'][0] . '.xml';
$this->modules[$name]['pages'][$pagename] = $realname;
break;
case 'code':
$filename = 'code/' . $file['children'][0] . '.inc.php';
$realname = 'modules/' . $moddir . '/code/' . $file['children'][0] . '.inc.php';
$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->modules[$name]['templates'][$filename] = $realname;
}
}
}
}
closedir($dir);
$res = $GLOBALS['db']->Execute('SELECT name FROM modules WHERE enabled = 1');
while($row = $res->FetchRow()) {
if(!array_key_exists($row[0], $this->modules)) continue;
$this->modules_enabled[$row[0]] = $this->modules[$row[0]];
$this->pages = array_merge($this->pages, $this->modules[$row[0]]['pages']);
$this->code = array_merge($this->code, $this->modules[$row[0]]['code']);
$this->templates = array_merge($this->templates, $this->modules[$row[0]]['templates']);
}
}
}
$GLOBALS['modules'] = new Modules;
?>
|