]> CyberLeo.Net >> Repos - SourceForge/phpwiki.git/blob - wiki_mysql.php3
version is no longer part of primary key of archive. otherwise multiple versions...
[SourceForge/phpwiki.git] / wiki_mysql.php3
1 <!-- $Id: wiki_mysql.php3,v 1.7 2000-06-26 21:26:45 ahollosi Exp $ -->
2 <?
3
4    /*
5       Database functions:
6
7       OpenDataBase($dbname)
8       CloseDataBase($dbi)
9       RetrievePage($dbi, $pagename)
10       InsertPage($dbi, $pagename, $pagehash)
11       IsWikiPage($dbi, $pagename)
12       InitTitleSearch($dbi, $search)
13       TitleSearchNextMatch($dbi, &$pos)
14       InitFullSearch($dbi, $search)
15       FullSearchNextMatch($dbi, &$pos)
16    */
17
18
19    // open a database and return the handle
20    // ignores MAX_DBM_ATTEMPTS
21
22    function OpenDataBase($dbname) {
23       global $mysql_server, $mysql_user, $mysql_pwd, $mysql_db;
24
25       if (!($dbc = mysql_pconnect($mysql_server, $mysql_user, $mysql_pwd))) {
26          echo "Cannot establish connection to database, giving up.";
27          exit();
28       }
29       if (!mysql_select_db($mysql_db, $dbc)) {
30          echo "Cannot open database, giving up.";
31          exit();
32       }
33
34       $dbi['dbc'] = $dbc;
35       $dbi['table'] = $dbname;
36       return $dbi;
37    }
38
39
40    function CloseDataBase($dbi) {
41       // NOP function
42       // mysql connections are established as persistant
43       // they cannot be closed through mysql_close()
44    }
45
46
47    function MakeDBHash($pagename, $pagehash)
48    {
49       $pagehash["pagename"] = addslashes($pagename);
50       if (!isset($pagehash["flags"]))
51          $pagehash["flags"] = 0;
52       $pagehash["author"] = addslashes($pagehash["author"]);
53       $pagehash["content"] = implode("\n", $pagehash["content"]);
54       $pagehash["content"] = addslashes($pagehash["content"]);
55       $pagehash["refs"] = serialize($pagehash["refs"]);
56  
57       return $pagehash;
58    }
59
60    function MakePageHash($dbhash)
61    {
62       // unserialize/explode content
63       $dbhash['refs'] = unserialize($dbhash['refs']);
64       $dbhash['content'] = explode("\n", $dbhash['content']);
65       return $dbhash;
66    }
67
68
69    // Return hash of page + attributes or default
70    function RetrievePage($dbi, $pagename) {
71       $pagename = addslashes($pagename);
72       if ($res = mysql_query("select * from $dbi[table] where pagename='$pagename'", $dbi['dbc'])) {
73          if ($dbhash = mysql_fetch_array($res)) {
74             return MakePageHash($dbhash);
75          }
76       }
77       return -1;
78    }
79
80
81    // Either insert or replace a key/value (a page)
82    function InsertPage($dbi, $pagename, $pagehash)
83    {
84       $pagehash = MakeDBHash($pagename, $pagehash);
85
86       $COLUMNS = "author, content, created, flags, " .
87                  "lastmodified, pagename, refs, version";
88
89       $VALUES =  "'$pagehash[author]', '$pagehash[content]', " .
90                  "$pagehash[created], $pagehash[flags], " .
91                  "$pagehash[lastmodified], '$pagehash[pagename]', " .
92                  "'$pagehash[refs]', $pagehash[version]";
93
94
95       if (!mysql_query("replace into $dbi[table] ($COLUMNS) values ($VALUES)",
96                         $dbi['dbc'])) {
97             echo "error writing page '$pagename'";
98             exit();
99       }
100    }
101
102
103    function IsWikiPage($dbi, $pagename) {
104       $pagename = addslashes($pagename);
105       if ($res = mysql_query("select count(*) from $dbi[table] where pagename='$pagename'", $dbi['dbc'])) {
106          return(mysql_result($res, 0));
107       }
108    }
109
110
111    function IncreaseHitCount($dbi, $pagename)
112    {
113       $res = mysql_query("update hitcount set hits=hits+1 where pagename='$pagename'", $dbi['dbc']);
114
115       if (!mysql_affected_rows($dbi['dbc'])) {
116          $res = mysql_query("insert into hitcount (pagename, hits) values ('$pagename', 1)", $dbi['dbc']);
117       }
118
119       return $res;
120    }
121
122    function GetHitCount($dbi, $pagename)
123    {
124       $res = mysql_query("select hits from hitcount where pagename='$pagename'", $dbi['dbc']);
125       if (mysql_num_rows($res))
126          $hits = mysql_result($res, 0);
127       else
128          $hits = "0";
129
130       return $hits;
131    }
132
133
134    // setup for title-search
135    function InitTitleSearch($dbi, $search) {
136       $search = addslashes($search);
137       $res = mysql_query("select pagename from $dbi[table] where pagename like '%$search%' order by pagename", $dbi["dbc"]);
138
139       return $res;
140    }
141
142
143    // iterating through database
144    function TitleSearchNextMatch($dbi, $res) {
145       if($o = mysql_fetch_object($res)) {
146          return $o->pagename;
147       }
148       else {
149          return 0;
150       }
151    }
152
153
154    // setup for full-text search
155    function InitFullSearch($dbi, $search) {
156       $search = addslashes($search);
157       $res = mysql_query("select * from $dbi[table] where content like '%$search%'", $dbi["dbc"]);
158
159       return $res;
160    }
161
162    // iterating through database
163    function FullSearchNextMatch($dbi, $res) {
164       if($hash = mysql_fetch_array($res)) {
165          return MakePageHash($hash);
166       }
167       else {
168          return 0;
169       }
170    }
171
172    function InitMostPopular($dbi, $limit) {
173       $res = mysql_query("select * from hitcount order by hits desc, pagename limit $limit");
174       
175       return $res;
176    }
177
178    function MostPopularNextMatch($dbi, $res) {
179       if ($hits = mysql_fetch_array($res))
180          return $hits;
181       else
182          return 0;
183    }
184 ?>