summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorneoraider <devnull@localhost>2006-07-22 17:38:00 +0200
committerneoraider <devnull@localhost>2006-07-22 17:38:00 +0200
commit2390cba867a49e96156e9cf57cbf591182f98bd7 (patch)
tree03dba7bb5f82e05e7743664531192185c71f5df3
parentfa7c1b717c118d08ba55c5306c4aeeb3e4418ca5 (diff)
downloadneon-2390cba867a49e96156e9cf57cbf591182f98bd7.tar
neon-2390cba867a49e96156e9cf57cbf591182f98bd7.zip
Module k?nnen jetzt deaktiviert werden.
-rw-r--r--code/modules.inc.php61
-rw-r--r--code/pages.inc.php4
-rw-r--r--pages/content/Modules.xml17
-rw-r--r--pages/content/Modules:Config.xml18
-rw-r--r--pages/content/Modules:Enable.xml31
-rw-r--r--styles/TheWhiteOne/style.css13
6 files changed, 136 insertions, 8 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;
diff --git a/code/pages.inc.php b/code/pages.inc.php
index a5e6df8..6f0e383 100644
--- a/code/pages.inc.php
+++ b/code/pages.inc.php
@@ -10,6 +10,8 @@
'Login.c' => null,
'Logout.c' => null,
'Modules.c' => null,
+ 'Modules:Config.c' => null,
+ 'Modules:Enable.c' => null,
'Pages.c' => null,
'Pages:Copy.c' => null,
'Pages:Delete.c' => null,
@@ -261,7 +263,7 @@
if($res->RecordCount()) {
$GLOBALS['db']->Execute('UPDATE privs SET readaccess = ?, writeaccess = ? WHERE name = ? AND type = ?', array($access[0], $access[1], $page, $type));
- return true;
+ return ($GLOBALS['db']->Affected_Rows() > 0);
}
$GLOBALS['db']->Execute('INSERT INTO privs (name, type, readaccess, writeaccess) VALUES (?, ?, ?, ?)', array($page, $type, $access[0], $access[1]));
diff --git a/pages/content/Modules.xml b/pages/content/Modules.xml
index 4aa2cda..d6d7950 100644
--- a/pages/content/Modules.xml
+++ b/pages/content/Modules.xml
@@ -23,7 +23,22 @@
foreach($modules as $module) {
echo '<div class="modinfo">';
- echo '<h3>' . htmlspecialchars($module) . '</h3>';
+ if($GLOBALS['modules']->HasConfig($module))
+ echo '<h3><a href="' . $GLOBALS['links']->GetNeonLink('Modules:Config', 'name=' . urlencode($module)) . '">' . htmlspecialchars($module) . '</a></h3>';
+ else
+ echo '<h3>' . htmlspecialchars($module) . '</h3>';
+
+ echo htmlspecialchars($GLOBALS['modules']->modules[$module]['version']);
+
+ if($GLOBALS['modules']->Enabled($module))
+ echo '<span class="mod_disable">(<a href="' . $GLOBALS['links']->GetNeonLink('Modules:Enable',
+ 'name=' . urlencode($module) . '&enable=false') . '" class="mod_disable">Deaktivieren</a>)</span>';
+
+ else
+ echo '<span class="mod_disable">(<a href="' . $GLOBALS['links']->GetNeonLink('Modules:Enable',
+ 'name=' . urlencode($module) . '&enable=true') . '" class="mod_enable">Aktivieren</a>)</span>';
+
+ echo '<br /><br />';
echo htmlspecialchars($GLOBALS['modules']->modules[$module]['desc']);
diff --git a/pages/content/Modules:Config.xml b/pages/content/Modules:Config.xml
new file mode 100644
index 0000000..c0940bb
--- /dev/null
+++ b/pages/content/Modules:Config.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<page>
+ <info>
+ <name>Modules:Config</name>
+ <template>phpexec</template>
+ <access>0:0</access>
+ <type>c</type>
+ </info>
+ <data>
+ <code>
+ <![CDATA[
+<?PHP
+
+?>
+ ]]>
+ </code>
+ </data>
+</page>
diff --git a/pages/content/Modules:Enable.xml b/pages/content/Modules:Enable.xml
new file mode 100644
index 0000000..d0e2741
--- /dev/null
+++ b/pages/content/Modules:Enable.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<page>
+ <info>
+ <name>Modules:Enable</name>
+ <template>phpexec</template>
+ <access>0:0</access>
+ <type>c</type>
+ </info>
+ <data>
+ <code>
+ <![CDATA[
+<?PHP
+ require_once('code/links.inc.php');
+ require_once('code/modules.inc.php');
+ require_once('code/util.inc.php');
+
+ if(!$_GET['name']) exit();
+
+ if($_GET['enable'] == 'true') $enable = true;
+ elseif($_GET['enable'] == 'false') $enable = false;
+ else exit();
+
+ $GLOBALS['modules']->Enable(Unquote($_GET['name']), $enable);
+
+ header('Location: ' . $GLOBALS['links']->GetNeonLink('Modules', null, false));
+ exit();
+?>
+ ]]>
+ </code>
+ </data>
+</page>
diff --git a/styles/TheWhiteOne/style.css b/styles/TheWhiteOne/style.css
index 7aa8062..2360f97 100644
--- a/styles/TheWhiteOne/style.css
+++ b/styles/TheWhiteOne/style.css
@@ -43,6 +43,10 @@ a.editlink {
right:1em;
}
+a.mod_disable {
+
+}
+
.spaced-top {
margin-top:0.8em;
}
@@ -65,6 +69,15 @@ div.modinfo {
margin:1em 3em;
}
+div.modinfo h3 {
+ display:inline;
+ margin-right:0.5em;
+}
+
+div.modinfo span.mod_disable {
+ margin-left:0.5em;
+}
+
div#content {
text-align:justify;
padding:0.8em;