]> CyberLeo.Net >> Repos - SourceForge/phpwiki.git/blob - wiki_dbmlib.php3
Added a few things.
[SourceForge/phpwiki.git] / wiki_dbmlib.php3
1 <!-- $Id: wiki_dbmlib.php3,v 1.3 2000-06-05 21:46:50 wainstead Exp $ -->
2 <?
3    /*
4       Database functions:
5       OpenDataBase($dbname)
6       CloseDataBase($dbi)
7       RetrievePage($dbi, $pagename)
8       InsertPage($dbi, $pagename, $pagehash)
9       IsWikiPage($dbi, $pagename)
10       InitTitleSearch($dbi, $search)
11       TitleSearchNextMatch($dbi, &$pos)
12       InitFullSearch($dbi, $search)
13       FullSearchNextMatch($dbi, &$pos)
14    */
15
16
17    // open a database and return the handle
18    // loop until we get a handle; php has its own
19    // locking mechanism, thank god.
20    // Suppress ugly error message with @.
21
22    function OpenDataBase($dbname) {
23       while (($dbi = @dbmopen($dbname, "c")) < 1) {
24          if ($numattempts > MAX_DBM_ATTEMPTS) {
25             echo "Cannot open database, giving up.";
26             exit();
27          }
28          $numattempts++;
29          sleep(1);
30       }
31       return $dbi;
32    }
33
34
35    function CloseDataBase($dbi) {
36       return dbmclose($dbi);
37    }
38
39
40    // Return hash of page + attributes or default
41    function RetrievePage($dbi, $pagename) {
42       if ($data = dbmfetch($dbi, $pagename)) {
43          // unserialize $data into a hash
44          $pagehash = unserialize($data);
45          return $pagehash;
46       } else {
47          return -1;
48       }
49    }
50
51
52    // Either insert or replace a key/value (a page)
53    function InsertPage($dbi, $pagename, $pagehash) {
54       $pagedata = serialize($pagehash);
55
56       if (dbminsert($dbi, $pagename, $pagedata)) {
57          if (dbmreplace($dbi, $pagename, $pagedata)) {
58             echo "error writing value";
59             exit();
60          }
61       } 
62    }
63
64
65    function IsWikiPage($dbi, $pagename) {
66       return dbmexists($dbi, $pagename);
67    }
68
69
70    // setup for title-search
71    function InitTitleSearch($dbi, $search) {
72       $pos['search'] = $search;
73       $pos['key'] = dbmfirstkey($dbi);
74
75       return $pos;
76    }
77
78    // iterating through database
79    function TitleSearchNextMatch($dbi, &$pos) {
80       while ($pos['key']) {
81          $page = $pos['key'];
82          $pos['key'] = dbmnextkey($dbi, $pos['key']);
83
84          if (eregi($pos['search'], $page)) {
85             return $page;
86          }
87       }
88       return 0;
89    }
90
91    // setup for full-text search
92    function InitFullSearch($dbi, $search) {
93       return InitTitleSearch($dbi, $search);
94    }
95
96    //iterating through database
97    function FullSearchNextMatch($dbi, &$pos) {
98       while ($pos['key']) {
99          $key = $pos['key'];
100          $pos['key'] = dbmnextkey($dbi, $pos['key']);
101
102          $pagedata = dbmfetch($dbi, $key);
103          // test the serialized data
104          if (eregi($pos['search'], $pagedata)) {
105             $page['name'] = $key;
106             $page['hash'] = unserialize($pagedata);
107             return $page;
108          }
109       }
110       return 0;
111    }
112 ?>