diff options
-rw-r--r-- | utils/modules/pages.php | 176 | ||||
-rw-r--r-- | utils/pages.php | 104 |
2 files changed, 176 insertions, 104 deletions
diff --git a/utils/modules/pages.php b/utils/modules/pages.php new file mode 100644 index 0000000..7bf77f9 --- /dev/null +++ b/utils/modules/pages.php @@ -0,0 +1,176 @@ +<?php +/* -*- Mode: php; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ + +include_once($UTIL_DIR . "/convert.php"); +include_once($UTIL_DIR . "/markdown.php"); +include_once($UTIL_DIR . "/modules.php"); + +class Page { + public $title; + public $content; + + public function write($fp) + { + fwrite($fp, " <page title=\"" . + htmlspecialchars($this->title, ENT_QUOTES, "UTF-8") . "\">"); + fwrite($fp, htmlspecialchars($this->content, ENT_QUOTES, "UTF-8") . "</page>\n"); + } + + public function show() + { + global $DATA_DIR, $modules; + + $str = Markdown($this->content); + + if(preg_match_all("/\[\[([\?,a-zA-Z0-9_]+)\]\]/", $str, $res)) { + + $modulecodes = array_unique($res[1]); + foreach($modulecodes as $modulecode) { + $m = explode("?", $modulecode); + $module = $m[0]; + $params = explode(",", $m[1]); + if($modules[$module]) { + $modulestr = $modules[$module]->run($params); + } else { + $modulestr = "<p><strong>CMS ERROR: Could not find module: [[" . $modulecode . "]]</strong></p>"; + } + + $str = str_replace("[[" . $modulecode . "]]", $modulestr, $str); + + } + } + + echo $str; + } + + public function Page($title, $content) + { + $this->title = $title; + $this->content = $content; + } +} + +class Pages { + + private $file; + private $pages = array(); + + // Admin config + public $admin_title = "Pages"; + public $admin_submodules = array("Edit page" => "edit"); + + public function admin_edit($action, $vars) + { + switch($action) { + case "add": + $this->pages[$vars["title"]]->content = $vars["content"]; + $this->write(); + echo "\"" . $this->pages[$vars["title"]]->title . "\" has now been edited."; + break; + + case "preview": + $p = new Page($vars["title"], $vars["content"]); + echo "<div class=\"preview\">\n"; + echo "<div class=\"content\">\n"; + echo $p->show(); + echo "</div>\n"; + echo "</div>\n"; + echo "<p>Looking ok?</p>"; + beginform("add"); + hidden($vars); + button("yes"); + endform(); + beginform("retry"); + hidden($vars); + button("no"); + endform(); + break; + + case "edit": + case "retry": + if(isset($vars["content"])) $content = $vars["content"]; + else $content = $this->pages[$vars["title"]]->content; + + beginform("preview"); + hidden($vars); + textedit("Content", "content", $content); + button("Preview"); + endform(); + break; + + case "select": + default: + $pagelist = array(); + foreach($this->pages as $p) { + $pagelist[$p->title] = $p->title; + } + beginform("edit"); + combobox("Edit this entry:", "title", "", $pagelist); + button("Edit..."); + endform(); + break; + } + } + + public function admin($sub, $action, $vars) + { + switch($sub) { + case "edit": + $this->admin_edit($action, $vars); + break; + } + } + + public function getPage($title) + { + return $this->pages[$title]; + } + + public function add($page) { + $key = $page->title; + $this->pages[$key] = $page; + } + + public function write() + { + $fp = fopen($this->file, "w"); + fwrite($fp, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"); + + fwrite($fp, "<pages>\n"); + foreach($this->pages as $page) { + $page->write($fp); + } + fwrite($fp, "</pages>\n"); + + fclose($fp); + } + + private function read() + { + $dom = new DomDocument; + $dom->preserveWhiteSpace = TRUE; + $dom->load($this->file); + $pages = $dom->getElementsByTagName('page'); + + foreach ($pages as $p) { + $page = new Page($p->getAttribute('title'), + $p->textContent); + $this->add($page); + } + } + + public function Pages($file) + { + $this->file = $file; + if(file_exists($file)) $this->read(); + } + +} + +function pages_init() +{ + global $DATA_DIR; + return new Pages($DATA_DIR . "/pages.xml"); +} + +?> diff --git a/utils/pages.php b/utils/pages.php deleted file mode 100644 index 0ab52a8..0000000 --- a/utils/pages.php +++ /dev/null @@ -1,104 +0,0 @@ -<?php - -include_once("convert.php"); -include_once($UTIL_DIR . "/markdown.php"); -include_once($UTIL_DIR . "/modules.php"); - -class Page { - public $title; - public $content; - - public function write($fp) - { - fwrite($fp, " <page title=\"" . - htmlspecialchars($this->title, ENT_QUOTES, "UTF-8") . "\"\n"); - fwrite($fp, " content=\"" . - htmlspecialchars($this->content, ENT_QUOTES, "UTF-8") . "\">\n"); - fwrite($fp, " </page>\n"); - } - - public function show() - { - global $DATA_DIR, $modules; - - $str = Markdown($this->content); - - if(preg_match_all("/\[\[([\?,a-zA-Z0-9_]+)\]\]/", $str, $res)) { - - $modulecodes = array_unique($res[1]); - foreach($modulecodes as $modulecode) { - $m = explode("?", $modulecode); - $module = $m[0]; - $params = explode(",", $m[1]); - if($modules[$module]) { - $modulestr = $modules[$module]->run($params); - } else { - $modulestr = "<p><strong>CMS ERROR: Could not find module: [[" . $modulecode . "]]</strong></p>"; - } - - $str = str_replace("[[" . $modulecode . "]]", $modulestr, $str); - - } - } - - echo $str; - } - - public function Page($title, $content) - { - $this->title = $title; - $this->content = $content; - } -} - -class Pages { - - private $file; - private $pages = array(); - - public function getPage($title) - { - return $this->pages[$title]; - } - - public function add($page) { - $key = $page->title; - $this->pages[$key] = $page; - } - - public function write() - { - $fp = fopen($this->file, "w"); - fwrite($fp, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"); - - fwrite($fp, "<pages>\n"); - foreach($this->pages as $page) { - $page->write($fp); - } - fwrite($fp, "</pages>\n"); - - fclose($fp); - } - - private function read() - { - $dom = new DomDocument; - $dom->preserveWhiteSpace = TRUE; - $dom->load($this->file); - $pages = $dom->getElementsByTagName('page'); - - foreach ($pages as $p) { - $page = new Page($p->getAttribute('title'), - $p->textContent); - $this->add($page); - } - } - - public function Pages($file) - { - $this->file = $file; - if(file_exists($file)) $this->read(); - } - -} -?> |