summaryrefslogtreecommitdiffstats
path: root/code/modules.inc.php
blob: 605f8caac3b473f74765872481d1b0f164915efb (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
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;
?>