]> CyberLeo.Net >> Repos - SourceForge/phpwiki.git/blob - wiki_pgsql.php3
Upped the size of the "searchterms" field.
[SourceForge/phpwiki.git] / wiki_pgsql.php3
1 <!-- $Id: wiki_pgsql.php3,v 1.9 2000-06-23 01:40:01 wainstead 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 a hash
20
21    function OpenDataBase($table) {
22       global $WikiDataBase, $pg_dbhost, $pg_dbport;
23
24       $connectstring = "host=$pg_dbhost port=$pg_dbport dbname=$WikiDataBase";
25
26       if (!($dbc = pg_pconnect($connectstring))) {
27          echo "Cannot establish connection to database, giving up.";
28          exit();
29       }
30
31       $dbi['dbc'] = $dbc;
32       $dbi['table'] = $table;
33 //      echo "<p>dbi after open: '$dbi' '$dbi[table]' '$dbi[dbc]'<p>\n";
34       return $dbi;
35    }
36
37
38    function CloseDataBase($dbi) {
39       // NOOP: we use persistent database connections
40    }
41
42
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'";
47
48       $res = pg_exec($dbi['dbc'], $query);
49
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") {
56                   continue;
57                }
58                $pagehash[$key] = $val;
59             }
60
61             // unserialize/explode content
62             $pagehash['refs'] = unserialize($pagehash['refs']);
63             $pagehash['content'] = explode("\n", $pagehash['content']);
64
65             return $pagehash;
66          }
67       }
68
69       // if we reach this the query failed
70       return -1;
71    }
72
73
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>";
78
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"]);
89
90       // temporary hack until the time stuff is brought up to date
91       $pagehash["created"] = time();
92       $pagehash["lastmodified"] = time();
93
94       if (IsWikiPage($dbi, $pagename)) {
95
96          $PAIRS = "author='$pagehash[author]'," .
97                   "content='$pagehash[content]'," .
98                   "created=$pagehash[created]," .
99                   "flags=$pagehash[flags]," .
100                   "lastmodified=$pagehash[lastmodified]," .
101                   "pagename='$pagehash[pagename]'," .
102                   "refs='$pagehash[refs]'," .
103                   "version=$pagehash[version]";
104
105          $query = "UPDATE $dbi[table] SET $PAIRS WHERE pagename='$pagename'";
106
107       } else {
108          // do an insert
109          // build up the column names and values for the query
110
111          $COLUMNS = "author, content, created, flags, " .
112                     "lastmodified, pagename, refs, version";
113
114          $VALUES =  "'$pagehash[author]', '$pagehash[content]', " .
115                     "$pagehash[created], $pagehash[flags], " .
116                     "$pagehash[lastmodified], '$pagehash[pagename]', " .
117                     "'$pagehash[refs]', $pagehash[version]";
118
119
120          $query = "INSERT INTO $dbi[table] ($COLUMNS) VALUES($VALUES)";
121       }
122
123 //      echo "<p>Query: $query<p>\n";
124       $retval = pg_exec($dbi['dbc'], $query);
125       if ($retval == false) 
126          echo "Insert/update failed: " . pg_errormessage($dbi['dbc']);
127
128    }
129
130
131
132    function IsWikiPage($dbi, $pagename) {
133       $pagename = addslashes($pagename);
134       $query = "select count(*) from $dbi[table] where pagename='$pagename'";
135       $res = pg_exec($query);
136       $array = pg_fetch_array($res, 0);
137       return $array[0];
138    }
139
140
141    // setup for title-search
142    function InitTitleSearch($dbi, $search) {
143
144       global $search_counter;
145       $search_counter = 0;
146
147       $search = strtolower($search);
148       $search = addslashes($search);
149       $query = "select pagename from $dbi[table] where lower(pagename) " .
150                "like '%$search%' order by pagename";
151 //      echo "search query: $query<br>\n";
152       $res = pg_exec($dbi["dbc"], $query);
153
154       return $res;
155    }
156
157
158    // iterating through database
159    function TitleSearchNextMatch($dbi, $res) {
160       global $search_counter;
161       if($o = @pg_fetch_object($res, $search_counter)) {
162          $search_counter++;
163          return $o->pagename;
164       } else {
165          return 0;
166       }
167    }
168
169
170    // setup for full-text search
171    function InitFullSearch($dbi, $search) {
172       global $search_counter;
173       $search_counter = 0;
174       $search = addslashes($search);
175       $search = addslashes($search);
176       $query = "select pagename,content from $dbi[table] " .
177                "where lower(content) like '%$search%'";
178
179       $res = pg_exec($dbi["dbc"], $query);
180
181       return $res;
182    }
183
184    // iterating through database
185    function FullSearchNextMatch($dbi, $res) {
186       global $search_counter;
187       if ($hash = @pg_fetch_array($res, $search_counter)) {
188          $search_counter++;
189          $page['pagename'] = $hash["pagename"];
190          $page['content'] = explode("\n", $hash["content"]);
191          return $page;
192       }
193       else {
194          return 0;
195       }
196    }
197
198
199 ?>