diff options
Diffstat (limited to 'utils')
| -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(); -	} - -} -?> | 
