1 <? rcs_id('$Id: wiki_dbmlib.php3,v 1.8 2000-07-07 19:53:50 dairiki Exp $');
6 RetrievePage($dbi, $pagename)
7 InsertPage($dbi, $pagename, $pagehash)
8 IsWikiPage($dbi, $pagename)
9 InitTitleSearch($dbi, $search)
10 TitleSearchNextMatch($dbi, &$pos)
11 InitFullSearch($dbi, $search)
12 FullSearchNextMatch($dbi, &$pos)
13 GetAllWikiPagenames($dbi)
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 @.
22 function OpenDataBase($dbname) {
23 while (($dbi = @dbmopen($dbname, "c")) < 1) {
24 if ($numattempts > MAX_DBM_ATTEMPTS) {
25 echo "Cannot open database, giving up.";
35 function CloseDataBase($dbi) {
36 return dbmclose($dbi);
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);
52 // Either insert or replace a key/value (a page)
53 function InsertPage($dbi, $pagename, $pagehash) {
54 $pagedata = serialize($pagehash);
56 if (dbminsert($dbi, $pagename, $pagedata)) {
57 if (dbmreplace($dbi, $pagename, $pagedata)) {
58 echo "error writing value";
65 function IsWikiPage($dbi, $pagename) {
66 return dbmexists($dbi, $pagename);
70 // setup for title-search
71 function InitTitleSearch($dbi, $search) {
72 $pos['search'] = $search;
73 $pos['key'] = dbmfirstkey($dbi);
78 // iterating through database
79 function TitleSearchNextMatch($dbi, &$pos) {
82 $pos['key'] = dbmnextkey($dbi, $pos['key']);
84 if (eregi($pos['search'], $page)) {
91 // setup for full-text search
92 function InitFullSearch($dbi, $search) {
93 return InitTitleSearch($dbi, $search);
96 //iterating through database
97 function FullSearchNextMatch($dbi, &$pos) {
100 $pos['key'] = dbmnextkey($dbi, $pos['key']);
102 $pagedata = dbmfetch($dbi, $key);
103 // test the serialized data
104 if (eregi($pos['search'], $pagedata)) {
105 $page['pagename'] = $key;
106 $pagedata = unserialize($pagedata);
107 $page['content'] = $pagedata['content'];
114 ////////////////////////
115 // new database features
118 function IncreaseHitCount($dbi, $pagename) {
120 $query = "update hitcount set hits=hits+1 where pagename='$pagename'";
121 $res = mysql_query($query, $dbi['dbc']);
123 if (!mysql_affected_rows($dbi['dbc'])) {
124 $query = "insert into hitcount (pagename, hits) " .
125 "values ('$pagename', 1)";
126 $res = mysql_query($query, $dbi['dbc']);
132 function GetHitCount($dbi, $pagename) {
134 $query = "select hits from hitcount where pagename='$pagename'";
135 $res = mysql_query($query, $dbi['dbc']);
136 if (mysql_num_rows($res)) {
137 $hits = mysql_result($res, 0);
147 function InitMostPopular($dbi, $limit) {
149 $query = "select * from hitcount " .
150 "order by hits desc, pagename limit $limit";
152 $res = mysql_query($query);
157 function MostPopularNextMatch($dbi, $res) {
159 if ($hits = mysql_fetch_array($res)) {
166 function GetAllWikiPagenames($dbi) {
170 $namelist[$ctr] = $key = dbmfirstkey($dbi);
171 while ($key = dbmnextkey($dbi, $key)) {
173 $namelist[$ctr] = $key;