]> CyberLeo.Net >> Repos - SourceForge/phpwiki.git/blob - wiki_dbmlib.php3
Added mysql_error() to diagnose a problem writing a page.
[SourceForge/phpwiki.git] / wiki_dbmlib.php3
1 <!-- $Id: wiki_dbmlib.php3,v 1.7 2000-07-07 02:37:01 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       GetAllWikiPagenames($dbi)
15    */
16
17
18    // open a database and return the handle
19    // loop until we get a handle; php has its own
20    // locking mechanism, thank god.
21    // Suppress ugly error message with @.
22
23    function OpenDataBase($dbname) {
24       while (($dbi = @dbmopen($dbname, "c")) < 1) {
25          if ($numattempts > MAX_DBM_ATTEMPTS) {
26             echo "Cannot open database, giving up.";
27             exit();
28          }
29          $numattempts++;
30          sleep(1);
31       }
32       return $dbi;
33    }
34
35
36    function CloseDataBase($dbi) {
37       return dbmclose($dbi);
38    }
39
40
41    // Return hash of page + attributes or default
42    function RetrievePage($dbi, $pagename) {
43       if ($data = dbmfetch($dbi, $pagename)) {
44          // unserialize $data into a hash
45          $pagehash = unserialize($data);
46          return $pagehash;
47       } else {
48          return -1;
49       }
50    }
51
52
53    // Either insert or replace a key/value (a page)
54    function InsertPage($dbi, $pagename, $pagehash) {
55       $pagedata = serialize($pagehash);
56
57       if (dbminsert($dbi, $pagename, $pagedata)) {
58          if (dbmreplace($dbi, $pagename, $pagedata)) {
59             echo "error writing value";
60             exit();
61          }
62       } 
63    }
64
65
66    function IsWikiPage($dbi, $pagename) {
67       return dbmexists($dbi, $pagename);
68    }
69
70
71    // setup for title-search
72    function InitTitleSearch($dbi, $search) {
73       $pos['search'] = $search;
74       $pos['key'] = dbmfirstkey($dbi);
75
76       return $pos;
77    }
78
79    // iterating through database
80    function TitleSearchNextMatch($dbi, &$pos) {
81       while ($pos['key']) {
82          $page = $pos['key'];
83          $pos['key'] = dbmnextkey($dbi, $pos['key']);
84
85          if (eregi($pos['search'], $page)) {
86             return $page;
87          }
88       }
89       return 0;
90    }
91
92    // setup for full-text search
93    function InitFullSearch($dbi, $search) {
94       return InitTitleSearch($dbi, $search);
95    }
96
97    //iterating through database
98    function FullSearchNextMatch($dbi, &$pos) {
99       while ($pos['key']) {
100          $key = $pos['key'];
101          $pos['key'] = dbmnextkey($dbi, $pos['key']);
102
103          $pagedata = dbmfetch($dbi, $key);
104          // test the serialized data
105          if (eregi($pos['search'], $pagedata)) {
106             $page['pagename'] = $key;
107             $pagedata = unserialize($pagedata);
108             $page['content'] = $pagedata['content'];
109             return $page;
110          }
111       }
112       return 0;
113    }
114
115    ////////////////////////
116    // new database features
117
118
119    function IncreaseHitCount($dbi, $pagename) {
120       return;
121       $query = "update hitcount set hits=hits+1 where pagename='$pagename'";
122       $res = mysql_query($query, $dbi['dbc']);
123
124       if (!mysql_affected_rows($dbi['dbc'])) {
125          $query = "insert into hitcount (pagename, hits) " .
126                   "values ('$pagename', 1)";
127               $res = mysql_query($query, $dbi['dbc']);
128       }
129
130       return $res;
131    }
132
133    function GetHitCount($dbi, $pagename) {
134       return;
135       $query = "select hits from hitcount where pagename='$pagename'";
136       $res = mysql_query($query, $dbi['dbc']);
137       if (mysql_num_rows($res)) {
138          $hits = mysql_result($res, 0);
139       } else {
140          $hits = "0";
141       }
142
143       return $hits;
144    }
145
146
147
148    function InitMostPopular($dbi, $limit) {
149       return;
150       $query = "select * from hitcount " .
151                "order by hits desc, pagename limit $limit";
152
153       $res = mysql_query($query);
154       
155       return $res;
156    }
157
158    function MostPopularNextMatch($dbi, $res) {
159       return;
160       if ($hits = mysql_fetch_array($res)) {
161          return $hits;
162       } else {
163          return 0;
164       }
165    }
166
167    function GetAllWikiPagenames($dbi) {
168       $namelist = array();
169       $ctr = 0;
170
171       $namelist[$ctr] = $key = dbmfirstkey($dbi);
172       while ($key = dbmnextkey($dbi, $key)) {
173          $ctr++;
174          $namelist[$ctr] = $key;
175       }
176
177       return $namelist;
178    }
179
180 ?>