6 RetrievePage($dbi, $pagename)
7 InsertPage($dbi, $pagename, $pagehash)
8 UpdateRecentChanges($dbi, $pagename)
9 IsWikiPage($dbi, $pagename)
10 SaveCopyToArchive($pagename, $pagehash)
11 PageExists($dbi, $pagename)
15 // open a database and return the handle
16 // loop until we get a handle; php has its own
17 // locking mechanism, thank god. This prints
18 // an ugly error message. Cannot prevent.
20 function OpenDataBase($dbname) {
21 while (($dbi = dbmopen($dbname, "c")) < 1) {
22 if ($numattempts > MAX_DBM_ATTEMPTS) {
23 echo "Cannot open database, giving up.";
33 function CloseDataBase($dbi) {
34 return dbmclose($dbi);
38 // Return hash of page + attributes or default
39 function RetrievePage($dbi, $pagename) {
40 if ($data = dbmfetch($dbi, $pagename)) {
41 // unserialize $data into a hash
42 $pagehash = unserialize($data);
50 // Either insert or replace a key/value (a page)
51 function InsertPage($dbi, $pagename, $pagehash) {
52 $pagedata = serialize($pagehash);
54 if (dbminsert($dbi, $pagename, $pagedata)) {
55 if (dbmreplace($dbi, $pagename, $pagedata)) {
56 echo "error writing value";
62 // The Recent Changes file is solely handled here
63 function UpdateRecentChanges($dbi, $pagename) {
66 $recentchanges = RetrievePage($dbi, "RecentChanges");
68 if ($recentchanges == -1) {
69 $recentchanges = array(); // First-time user, eh? :-)
72 $recentchanges["text"] = preg_replace("/.*$pagename.*/",
74 $recentchanges["text"]);
76 $numlines = sizeof($recentchanges["text"]);
77 $currentdate = GetCurrentDate();
79 if ($recentchanges["date"] != $currentdate) {
80 $recentchanges["text"][$numlines++] = "$currentdate";
81 $recentchanges["text"][$numlines++] = "\n";
82 $recentchanges["date"] = "$currentdate";
86 $recentchanges["text"][$numlines] = "\t*$pagename ..... $remoteuser";
88 // Clear out blank lines (they are size zero, not even \n)
90 for ($i = 0; $i < ($numlines + 1); $i++) {
91 if (strlen($recentchanges["text"][$i]) != 0) {
92 $newpage[$k++] = $recentchanges["text"][$i];
95 $recentchanges["text"] = $newpage;
97 InsertPage($dbi, "RecentChanges", $recentchanges);
101 function IsWikiPage($dbi, $pagename) {
102 return dbmexists($dbi, $pagename);
106 // for archiving pages to a seperate dbm
107 function SaveCopyToArchive($pagename, $pagehash) {
108 global $ArchiveDataBase;
109 $adbi = OpenDataBase($ArchiveDataBase);
110 $newpagename = $pagename;
111 InsertPage($adbi, $newpagename, $pagehash);