diff options
-rw-r--r-- | code/modules.inc.php | 61 | ||||
-rw-r--r-- | code/pages.inc.php | 4 | ||||
-rw-r--r-- | pages/content/Modules.xml | 17 | ||||
-rw-r--r-- | pages/content/Modules:Config.xml | 18 | ||||
-rw-r--r-- | pages/content/Modules:Enable.xml | 31 | ||||
-rw-r--r-- | styles/TheWhiteOne/style.css | 13 |
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; |