getNonEmpty($v, 'tag'); $t = $this->getNonEmpty($v, 'attributes', 'time'); $p = $this->getNonEmpty($v, 'attributes', 'prev'); if (!empty($t)) { if ($since > 0 && $t < $since) { continue; } $k = "$k:$t"; } if (!empty($p)) { $k = "$k:$p:"; } $page[$k] = $this->getNonEmpty($v,'value'); } } return @$page; } function read($pagename, $since=0) { $pagefile = $this->pagefile($pagename); if ($pagefile && ($fp=@fopen($pagefile, "r"))) { while (!feof($fp)) { $line = fgets($fp, 512); $isXML = (substr($line,0,5) == 'read_xml($data, $since); } else { @fclose($fp); return parent::read($pagename,$page); } } } function write($pagename,$page) { global $EnablePageStoreXML; ($EnablePageStoreXML == true) ? $this->write_xml($pagename,$page) : parent::write($pagename,$page); } function write_xml($pagename,$page) { global $Now, $Version, $Charset; $page['name'] = $pagename; $page['time'] = $Now; $page['host'] = $_SERVER['REMOTE_ADDR']; $page['agent'] = @$_SERVER['HTTP_USER_AGENT']; $page['rev'] = @$page['rev']+1; unset($page['version']); unset($page['newline']); uksort($page, 'CmpPageAttr'); $s = false; $pagefile = $this->pagefile($pagename); $dir = dirname($pagefile); mkdirp($dir); if ($pagefile && ($fp=fopen("$pagefile,new","w"))) { $x = "\n\n"; $s = true && fputs($fp, $x); $sz = strlen($x); foreach($page as $k=>$v) if ($k > '' && $k[0] != '=') { $v = htmlspecialchars($v, ENT_NOQUOTES, $Charset); if (preg_match("/^([a-z]+)(?::(\d+))(?::(\d+):)?$/", $k, $m)) { $p = empty($m[3]) ? "" : " prev=\"${m[3]}\""; $x = "<${m[1]} time=\"${m[2]}\"$p>$v\n"; } else { $x = "<$k>$v\n"; } $s = $s && fputs($fp, $x); $sz += strlen($x); } $x = "\n"; $s = $s && fputs($fp, $x); $sz += strlen($x); $s = fclose($fp) && $s; $s = $s && (filesize("$pagefile,new") > $sz * 0.95); if (file_exists($pagefile)) $s = $s && unlink($pagefile); $s = $s && rename("$pagefile,new", $pagefile); } $s && fixperms($pagefile); if (!$s) Abort("Cannot write page to $pagename ($pagefile)...changes not saved"); PCache($pagename, $page); } } function ConvertXML() { global $WikiDir; global $EnablePageStoreXML; $pagelist = $WikiDir->ls(); $pagelist = array_unique($pagelist); sort($pagelist); $pagecount = count($pagelist); echo " Convert pages from/to XML

Convert existing pages

I'm now converting "; echo ($EnablePageStoreXML) ? "to " : "from "; echo "XML the files (pages) you have stored in your wiki. When this is finished you can get rid of the ConvertXML(); line in your local/config.php

"; if ($pagelist) { foreach($pagelist as $p) { echo ($EnablePageStoreXML) ? "
  • Converting to XML: $p
  • \n" : "
  • Converting from XML: $p
  • \n"; $page = ReadPage($p); WritePage($p,$page); } } echo "

    Converted $pagecount pages.

    \n"; echo "

    Now you can get rid of the ConvertXML(); line in your local/config.php

    \n"; exit(0); }