]> CyberLeo.Net >> Repos - SourceForge/phpwiki.git/blob - wiki_pgsql.php3
the list just got longer
[SourceForge/phpwiki.git] / wiki_pgsql.php3
1 <!-- $Id: wiki_pgsql.php3,v 1.7 2000-06-21 04:53:11 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 = addslashes($search);
148       $query = "select pagename from $dbi[table] where pagename " .
149                "like '%$search%' order by pagename";
150 //      echo "search query: $query<br>\n";
151       $res = pg_exec($dbi["dbc"], $query);
152
153       return $res;
154    }
155
156
157    // iterating through database
158    function TitleSearchNextMatch($dbi, $res) {
159       global $search_counter;
160       if($o = @pg_fetch_object($res, $search_counter)) {
161          $search_counter++;
162          return $o->pagename;
163       } else {
164          return 0;
165       }
166    }
167
168
169    // setup for full-text search
170    function InitFullSearch($dbi, $search) {
171       global $search_counter;
172       $search_counter = 0;
173       $search = addslashes($search);
174       $query = "select pagename,content from $dbi[table] " .
175                "where content like '%$search%'";
176
177       $res = pg_exec($dbi["dbc"], $query);
178
179       return $res;
180    }
181
182    // iterating through database
183    function FullSearchNextMatch($dbi, $res) {
184       global $search_counter;
185       if ($hash = @pg_fetch_array($res, $search_counter)) {
186          $search_counter++;
187          $page['name'] = $hash["pagename"];
188          $page['hash']['content'] = explode("\n", $hash["content"]);
189          return $page;
190       }
191       else {
192          return 0;
193       }
194    }
195
196
197 ?>