From 2390cba867a49e96156e9cf57cbf591182f98bd7 Mon Sep 17 00:00:00 2001 From: neoraider Date: Sat, 22 Jul 2006 15:38:00 +0000 Subject: Module k?nnen jetzt deaktiviert werden. --- code/modules.inc.php | 61 ++++++++++++++++++++++++++++++++++++---- code/pages.inc.php | 4 ++- pages/content/Modules.xml | 17 ++++++++++- pages/content/Modules:Config.xml | 18 ++++++++++++ pages/content/Modules:Enable.xml | 31 ++++++++++++++++++++ styles/TheWhiteOne/style.css | 13 +++++++++ 6 files changed, 136 insertions(+), 8 deletions(-) create mode 100644 pages/content/Modules:Config.xml create mode 100644 pages/content/Modules:Enable.xml 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 '
'; - echo '

' . htmlspecialchars($module) . '

'; + if($GLOBALS['modules']->HasConfig($module)) + echo '

' . htmlspecialchars($module) . '

'; + else + echo '

' . htmlspecialchars($module) . '

'; + + echo htmlspecialchars($GLOBALS['modules']->modules[$module]['version']); + + if($GLOBALS['modules']->Enabled($module)) + echo '(Deaktivieren)'; + + else + echo '(Aktivieren)'; + + echo '

'; 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 @@ + + + + Modules:Config + + 0:0 + c + + + + + ]]> + + + 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 @@ + + + + Modules:Enable + + 0:0 + c + + + + Enable(Unquote($_GET['name']), $enable); + + header('Location: ' . $GLOBALS['links']->GetNeonLink('Modules', null, false)); + exit(); +?> + ]]> + + + 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; -- cgit v1.2.3