summaryrefslogtreecommitdiffstats
path: root/code/modules.inc.php
diff options
context:
space:
mode:
Diffstat (limited to 'code/modules.inc.php')
-rw-r--r--code/modules.inc.php61
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;