1 <!-- $Id: wiki_dbmlib.php3,v 1.7 2000-07-07 02:37:01 wainstead Exp $ -->
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)
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 @.
23 function OpenDataBase($dbname) {
24 while (($dbi = @dbmopen($dbname, "c")) < 1) {
25 if ($numattempts > MAX_DBM_ATTEMPTS) {
26 echo "Cannot open database, giving up.";
36 function CloseDataBase($dbi) {
37 return dbmclose($dbi);
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);
53 // Either insert or replace a key/value (a page)
54 function InsertPage($dbi, $pagename, $pagehash) {
55 $pagedata = serialize($pagehash);
57 if (dbminsert($dbi, $pagename, $pagedata)) {
58 if (dbmreplace($dbi, $pagename, $pagedata)) {
59 echo "error writing value";
66 function IsWikiPage($dbi, $pagename) {
67 return dbmexists($dbi, $pagename);
71 // setup for title-search
72 function InitTitleSearch($dbi, $search) {
73 $pos['search'] = $search;
74 $pos['key'] = dbmfirstkey($dbi);
79 // iterating through database
80 function TitleSearchNextMatch($dbi, &$pos) {
83 $pos['key'] = dbmnextkey($dbi, $pos['key']);
85 if (eregi($pos['search'], $page)) {
92 // setup for full-text search
93 function InitFullSearch($dbi, $search) {
94 return InitTitleSearch($dbi, $search);
97 //iterating through database
98 function FullSearchNextMatch($dbi, &$pos) {
101 $pos['key'] = dbmnextkey($dbi, $pos['key']);
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'];
115 ////////////////////////
116 // new database features
119 function IncreaseHitCount($dbi, $pagename) {
121 $query = "update hitcount set hits=hits+1 where pagename='$pagename'";
122 $res = mysql_query($query, $dbi['dbc']);
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']);
133 function GetHitCount($dbi, $pagename) {
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);
148 function InitMostPopular($dbi, $limit) {
150 $query = "select * from hitcount " .
151 "order by hits desc, pagename limit $limit";
153 $res = mysql_query($query);
158 function MostPopularNextMatch($dbi, $res) {
160 if ($hits = mysql_fetch_array($res)) {
167 function GetAllWikiPagenames($dbi) {
171 $namelist[$ctr] = $key = dbmfirstkey($dbi);
172 while ($key = dbmnextkey($dbi, $key)) {
174 $namelist[$ctr] = $key;