summaryrefslogtreecommitdiffstats
path: root/code/modules.inc.php
blob: 02aa9f2e402369c5268854a5ca18ec5906ced06a (plain)
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
<?PHP
  require_once('code/xmlparser.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;
    var $pages;
    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(!$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];
          
          $this->module[$name] = array('name' => $name, '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($file['children'][0], array(':' => '/'))
                          . '.' . $type . '.xml';
                
                $this->pages[$pagename] = $realname;
                $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->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;
?>