diff options
Diffstat (limited to 'code/modules.inc.php')
-rw-r--r-- | code/modules.inc.php | 61 |
1 files changed, 55 insertions, 6 deletions
diff --git a/code/modules.inc.php b/code/modules.inc.php index 605f8ca..4a4a889 100644 --- a/code/modules.inc.php +++ b/code/modules.inc.php @@ -13,7 +13,6 @@ class Modules { var $modules = array(); - var $modules_enabled = array(); var $pages = array(); var $code = array(); var $templates = array(); @@ -22,7 +21,7 @@ $dir = opendir('modules'); while($moddir = readdir($dir)) { - if($moddir[0] != '.' && is_dir('modules/' . $moddir)) { + if($moddir[0] != '.' && is_dir('modules/' . $moddir) && is_file('modules/' . $moddir . '/module.xml')) { $data = $GLOBALS['xmlparser']->ParseFile('modules/' . $moddir . '/module.xml'); if(!$data) continue; @@ -36,13 +35,22 @@ if(!is_string($name['children'][0])) continue; $name = $name['children'][0]; + $version = $GLOBALS['xmlparser']->FindTag($info, 'version'); + if(!$version) continue; + if(count($version['children']) != 1) continue; + if(!is_string($version['children'][0])) continue; + $version = $version['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()); + $this->modules[$name] = array('name' => $name, 'version' => $version, 'desc' => $desc, 'code' => array(), + 'templates' => array(), 'config' => false, 'enabled' => false); + + if($GLOBALS['xmlparser']->FindTag($info, 'config')) $this->modules[$name]['config'] = true; $files = $GLOBALS['xmlparser']->FindTag($data, 'files'); if(!$files) continue; @@ -81,18 +89,59 @@ closedir($dir); - $res = $GLOBALS['db']->Execute('SELECT name FROM modules WHERE enabled = 1'); + $res = $GLOBALS['db']->Execute('SELECT name, enabled FROM modules'); while($row = $res->FetchRow()) { - if(!array_key_exists($row[0], $this->modules)) continue; + if(!array_key_exists($row[0], $this->modules)) { + $GLOBALS['db']->Execute('DELETE FROM modules WHERE name = ?', $row[0]); + continue; + } - $this->modules_enabled[$row[0]] = $this->modules[$row[0]]; + if(!$row[1]) continue; + + $this->modules[$row[0]]['enabled'] = true; $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']); } } + + function Exists($name) { + return array_key_exists($name, $this->modules); + } + + function Enabled($name) { + return $this->Exists($name) && $this->modules[$name]['enabled']; + } + + function HasConfig($name) { + if(!$this->Exists($name)) return false; + + return $this->modules[$name]['config']; + } + + function Enable($name, $enable = true) { + if(!$this->Exists($name)) return false; + + if($this->Enabled($name) == $enable) return true; + + $res = $GLOBALS['db']->Execute('SELECT id FROM modules WHERE name = ?', $name); + + if($res->RecordCount()) { + $GLOBALS['db']->Execute('UPDATE modules SET enabled = ? WHERE name = ?', array(intval($enable), $name)); + + return ($GLOBALS['db']->Affected_Rows() > 0); + } + + $GLOBALS['db']->Execute('INSERT INTO modules (name, enabled) VALUES (?, ?)', array($name, intval($enable))); + + return ($GLOBALS['db']->Affected_Rows() > 0); + } + + function Disable($name) { + return $this->Enable($name, false); + } } $GLOBALS['modules'] = new Modules; |