1 <!-- $Id: wiki_pgsql.php3,v 1.12 2000-06-30 00:56:27 wainstead Exp $ -->
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)
19 // open a database and return a hash
21 function OpenDataBase($table) {
22 global $WikiDataBase, $pg_dbhost, $pg_dbport;
24 $connectstring = "host=$pg_dbhost port=$pg_dbport dbname=$WikiDataBase";
26 if (!($dbc = pg_pconnect($connectstring))) {
27 echo "Cannot establish connection to database, giving up.";
32 $dbi['table'] = $table;
33 // echo "<p>dbi after open: '$dbi' '$dbi[table]' '$dbi[dbc]'<p>\n";
38 function CloseDataBase($dbi) {
39 // NOOP: we use persistent database connections
43 // Return hash of page + attributes or default
44 function RetrievePage($dbi, $pagename) {
45 $pagename = addslashes($pagename);
46 $query = "select * from $dbi[table] where pagename='$pagename'";
48 $res = pg_exec($dbi['dbc'], $query);
50 if (pg_numrows($res)) {
51 if ($array = pg_fetch_array($res, 0)) {
52 while (list($key, $val) = each($array)) {
53 // pg_fetch_array gives us all the values twice,
54 // so we have to manually edit out the indices
55 if (gettype($key) == "integer") {
58 $pagehash[$key] = $val;
61 // unserialize/explode content
62 $pagehash['refs'] = unserialize($pagehash['refs']);
63 $pagehash['content'] = explode("\n", $pagehash['content']);
69 // if we reach this the query failed
74 // Either insert or replace a key/value (a page)
75 function InsertPage($dbi, $pagename, $pagehash) {
76 $pagename = addslashes($pagename);
77 // echo "<p>dbi in InsertPage: '$dbi' '$dbi[table]' '$dbi[dbc]'<p>";
79 // prepare the content for storage
80 if (!isset($pagehash["pagename"]))
81 $pagehash["pagename"] = $pagename;
82 if (!isset($pagehash["flags"]))
83 $pagehash["flags"] = 0;
84 $pagehash["author"] = addslashes($pagehash["author"]);
85 $pagehash["content"] = implode("\n", $pagehash["content"]);
86 $pagehash["content"] = addslashes($pagehash["content"]);
87 $pagehash["pagename"] = addslashes($pagehash["pagename"]);
88 $pagehash["refs"] = serialize($pagehash["refs"]);
90 // record the time of modification
91 $pagehash["lastmodified"] = time();
93 if (IsWikiPage($dbi, $pagename)) {
95 $PAIRS = "author='$pagehash[author]'," .
96 "content='$pagehash[content]'," .
97 "created=$pagehash[created]," .
98 "flags=$pagehash[flags]," .
99 "lastmodified=$pagehash[lastmodified]," .
100 "pagename='$pagehash[pagename]'," .
101 "refs='$pagehash[refs]'," .
102 "version=$pagehash[version]";
104 $query = "UPDATE $dbi[table] SET $PAIRS WHERE pagename='$pagename'";
108 // build up the column names and values for the query
110 $COLUMNS = "author, content, created, flags, " .
111 "lastmodified, pagename, refs, version";
113 $VALUES = "'$pagehash[author]', '$pagehash[content]', " .
114 "$pagehash[created], $pagehash[flags], " .
115 "$pagehash[lastmodified], '$pagehash[pagename]', " .
116 "'$pagehash[refs]', $pagehash[version]";
119 $query = "INSERT INTO $dbi[table] ($COLUMNS) VALUES($VALUES)";
122 // echo "<p>Query: $query<p>\n";
123 $retval = pg_exec($dbi['dbc'], $query);
124 if ($retval == false)
125 echo "Insert/update failed: " . pg_errormessage($dbi['dbc']);
131 function IsWikiPage($dbi, $pagename) {
132 $pagename = addslashes($pagename);
133 $query = "select count(*) from $dbi[table] where pagename='$pagename'";
134 $res = pg_exec($query);
135 $array = pg_fetch_array($res, 0);
140 // setup for title-search
141 function InitTitleSearch($dbi, $search) {
143 global $search_counter;
146 $search = strtolower($search);
147 $search = addslashes($search);
148 $query = "select pagename from $dbi[table] where lower(pagename) " .
149 "like '%$search%' order by pagename";
150 // echo "search query: $query<br>\n";
151 $res = pg_exec($dbi["dbc"], $query);
157 // iterating through database
158 function TitleSearchNextMatch($dbi, $res) {
159 global $search_counter;
160 if($o = @pg_fetch_object($res, $search_counter)) {
169 // setup for full-text search
170 function InitFullSearch($dbi, $search) {
171 global $search_counter;
173 $search = addslashes($search);
174 $search = addslashes($search);
175 $query = "select pagename,content from $dbi[table] " .
176 "where lower(content) like '%$search%'";
178 $res = pg_exec($dbi["dbc"], $query);
183 // iterating through database
184 function FullSearchNextMatch($dbi, $res) {
185 global $search_counter;
186 if ($hash = @pg_fetch_array($res, $search_counter)) {
188 $page['pagename'] = $hash["pagename"];
189 $page['content'] = explode("\n", $hash["content"]);
198 ////////////////////////
199 // new database features
202 function IncreaseHitCount($dbi, $pagename) {
204 $query = "update hitcount set hits=hits+1 where pagename='$pagename'";
205 $res = mysql_query($query, $dbi['dbc']);
207 if (!mysql_affected_rows($dbi['dbc'])) {
208 $query = "insert into hitcount (pagename, hits) " .
209 "values ('$pagename', 1)";
210 $res = mysql_query($query, $dbi['dbc']);
216 function GetHitCount($dbi, $pagename) {
218 $query = "select hits from hitcount where pagename='$pagename'";
219 $res = mysql_query($query, $dbi['dbc']);
220 if (mysql_num_rows($res)) {
221 $hits = mysql_result($res, 0);
231 function InitMostPopular($dbi, $limit) {
233 $query = "select * from hitcount " .
234 "order by hits desc, pagename limit $limit";
236 $res = mysql_query($query);
241 function MostPopularNextMatch($dbi, $res) {
243 if ($hits = mysql_fetch_array($res)) {