1 <!-- $Id: wiki_msql.php3,v 1.7 2000-06-28 22:22:05 wainstead Exp $ -->
7 MakeDBHash($pagename, $pagehash)
10 RetrievePage($dbi, $pagename)
11 InsertPage($dbi, $pagename, $pagehash)
12 IsWikiPage($dbi, $pagename)
13 InitTitleSearch($dbi, $search)
14 TitleSearchNextMatch($dbi, &$pos)
15 InitFullSearch($dbi, $search)
16 FullSearchNextMatch($dbi, &$pos)
20 // open a database and return the handle
21 // ignores MAX_DBM_ATTEMPTS
23 function OpenDataBase($dbinfo) {
26 if (! ($dbc = msql_pconnect())) {
27 echo "Cannot establish connection to database, giving up.";
28 echo "Error message: ", msql_error(), "<br>\n";
31 if (!msql_select_db($msql_db, $dbc)) {
32 echo "Cannot open database $msql_db, giving up.";
33 echo "Error message: ", msql_error(), "<br>\n";
38 $dbi['table'] = $dbinfo['table']; // page metadata
39 $dbi['page_table'] = $dbinfo['page_table']; // page content
44 function CloseDataBase($dbi) {
46 // msql connections are established as persistant
47 // they cannot be closed through msql_close()
51 function msqlDecomposeString($string) {
55 // zero, one, infinity
56 // account for the small case
57 if (strlen($string) < MSQL_MAX_LINE_LENGTH) {
58 $ret_arr[$el] = $string;
63 $line = $string2 = "";
65 // split on single spaces
66 $words = preg_split("/ /", $string);
67 $num_words = count($words);
70 $ret_arr[0] = $words[0];
73 // for all words, build up lines < MSQL_MAX_LINE_LENGTH in $ret_arr
74 for ($x = 2; $x < $num_words; $x++) {
75 $length = strlen($line) + strlen($words[$x])
76 + strlen($ret_arr[$el]) + 1;
78 if ($length < MSQL_MAX_LINE_LENGTH) {
79 $line .= " " . $words[$x];
81 // put this line in the return array, reset, continue
82 $ret_arr[$el++] .= $line;
83 $line = " $words[$x]"; // reset
86 $ret_arr[$el] = $line;
91 // Take form data and prepare it for the db
92 function MakeDBHash($pagename, $pagehash)
94 $pagehash["pagename"] = addslashes($pagename);
95 if (!isset($pagehash["flags"]))
96 $pagehash["flags"] = 0;
97 if (!isset($pagehash["content"]))
98 $pagehash["content"] = array();
99 $pagehash["author"] = addslashes($pagehash["author"]);
100 $pagehash["refs"] = serialize($pagehash["refs"]);
106 // Take db data and prepare it for display
107 function MakePageHash($dbhash)
109 // unserialize/explode content
110 $dbhash['refs'] = unserialize($dbhash['refs']);
115 // Return hash of page + attributes or default
116 function RetrievePage($dbi, $pagename) {
117 $pagename = addslashes($pagename);
119 $query = "select * from $dbi[table] where pagename='$pagename'";
121 if ($res = msql_query($query, $dbi['dbc'])) {
122 $dbhash = msql_fetch_array($res);
124 $query = "select lineno,line from $dbi[page_table] " .
125 "where pagename='$pagename' " .
128 if ($res = msql_query($query, $dbi[dbc])) {
129 $dbhash["content"] = array();
130 while ($row = msql_fetch_array($res)) {
131 $dbhash["content"][ $row["lineno"] ] = $row["line"];
135 return MakePageHash($dbhash);
141 // Either insert or replace a key/value (a page)
142 function InsertPage($dbi, $pagename, $pagehash)
144 $pagehash = MakeDBHash($pagename, $pagehash);
146 // temporary hack until the time stuff is brought up to date
147 $pagehash["created"] = time();
148 $pagehash["lastmodified"] = time();
150 if (IsWikiPage($dbi, $pagename)) {
152 $PAIRS = "author='$pagehash[author]'," .
153 "created=$pagehash[created]," .
154 "flags=$pagehash[flags]," .
155 "lastmodified=$pagehash[lastmodified]," .
156 "pagename='$pagehash[pagename]'," .
157 "refs='$pagehash[refs]'," .
158 "version=$pagehash[version]";
160 $query = "UPDATE $dbi[table] SET $PAIRS WHERE pagename='$pagename'";
164 // build up the column names and values for the query
166 $COLUMNS = "author, created, flags, lastmodified, " .
167 "pagename, refs, version";
169 $VALUES = "'$pagehash[author]', " .
170 "$pagehash[created], $pagehash[flags], " .
171 "$pagehash[lastmodified], '$pagehash[pagename]', " .
172 "'$pagehash[refs]', $pagehash[version]";
175 $query = "INSERT INTO $dbi[table] ($COLUMNS) VALUES($VALUES)";
178 // echo "<p>Query: $query<p>\n";
180 // first, insert the metadata
181 $retval = msql_query($query, $dbi['dbc']);
182 if ($retval == false)
183 echo "Insert/update failed: ", msql_error(), "<br>\n";
186 // second, insert the page data
187 // remove old data from page_table
188 $query = "delete from $dbi[page_table] where pagename='$pagename'";
189 echo "Delete query: $query<br>\n";
190 $retval = msql_query($query, $dbi['dbc']);
191 if ($retval == false)
192 echo "Delete on $dbi[page_table] failed: ", msql_error(), "<br>\n";
194 // insert the new lines
195 reset($pagehash["content"]);
200 for ($x = 0; $x < count($pagehash["content"]); $x++) {
202 // manage line length here, lines should not exceed the
203 // length MSQL_MAX_LINE_LENGTH or something
205 if (strlen($pagehash["content"][$x]) > MSQL_MAX_LINE_LENGTH) {
206 $length = strlen($pagehash["content"][$x]);
207 echo "Must break up line ($length): " . $pagehash["content"][$x] ."<br>\n";
208 // can I cheat and use preg_split to break the line up?
209 // match this line with: /(.{1,127})+/
210 // in fact, split it on a zero-width metachar every 127th position
211 // take the returned array and add elements to $tmparray
213 $tmparray[$y] = $pagehash["content"][$x];
219 for ($x = 0; $x < count($tmparray); $x ++) {
220 $line = addslashes($tmparray[$x]);
221 $query = "INSERT INTO $dbi[page_table] " .
222 "(pagename, lineno, line) " .
223 "VALUES('$pagename', $x, '$line')";
224 echo "Page line insert query: $query<br>\n";
225 $retval = msql_query($query, $dbi['dbc']);
226 if ($retval == false)
227 echo "Insert into $dbi[page_table] failed: ", msql_error(), "<br>\n";;
230 //echo "<H1>inserted $x lines for $pagename</H1>\n";
235 function IsWikiPage($dbi, $pagename) {
236 $pagename = addslashes($pagename);
237 $query = "select pagename from $dbi[table] where pagename='$pagename'";
238 // echo "Query: $query<br>\n";
239 if ($res = msql_query($query, $dbi['dbc'])) {
240 return(msql_affected_rows($res));
245 // setup for title-search
246 function InitTitleSearch($dbi, $search) {
247 $search = addslashes($search);
248 $query = "select pagename from $dbi[table] " .
249 "where pagename clike '%$search%' order by pagename";
250 $res = msql_query($query, $dbi["dbc"]);
256 // iterating through database
257 function TitleSearchNextMatch($dbi, $res) {
258 if($o = msql_fetch_object($res)) {
267 // setup for full-text search
268 function InitFullSearch($dbi, $search) {
269 $search = addslashes($search);
270 $query = "select * from $dbi[table] where searchterms clike '%$search%'";
271 $res = msql_query($query, $dbi["dbc"]);
276 // iterating through database
277 function FullSearchNextMatch($dbi, $res) {
278 if($hash = msql_fetch_array($res)) {
279 return MakePageHash($hash);
285 ////////////////////////
286 // new database features
289 function IncreaseHitCount($dbi, $pagename) {
291 $query = "update hitcount set hits=hits+1 where pagename='$pagename'";
292 $res = mysql_query($query, $dbi['dbc']);
294 if (!mysql_affected_rows($dbi['dbc'])) {
295 $query = "insert into hitcount (pagename, hits) " .
296 "values ('$pagename', 1)";
297 $res = mysql_query($query, $dbi['dbc']);
303 function GetHitCount($dbi, $pagename) {
305 $query = "select hits from hitcount where pagename='$pagename'";
306 $res = mysql_query($query, $dbi['dbc']);
307 if (mysql_num_rows($res)) {
308 $hits = mysql_result($res, 0);
318 function InitMostPopular($dbi, $limit) {
320 $query = "select * from hitcount " .
321 "order by hits desc, pagename limit $limit";
323 $res = mysql_query($query);
328 function MostPopularNextMatch($dbi, $res) {
330 if ($hits = mysql_fetch_array($res)) {