1 <!-- $Id: wiki_msql.php3,v 1.3 2000-06-25 19:38:55 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
40 // echo "dbi[page_table]: $dbi[page_table], dbinfo[page_table]: $dbinfo[page_table]<br>\n";
45 function CloseDataBase($dbi) {
47 // msql connections are established as persistant
48 // they cannot be closed through msql_close()
52 // Take form data and prepare it for the db
53 function MakeDBHash($pagename, $pagehash)
55 $pagehash["pagename"] = addslashes($pagename);
56 if (!isset($pagehash["flags"]))
57 $pagehash["flags"] = 0;
58 $pagehash["author"] = addslashes($pagehash["author"]);
59 $pagehash["refs"] = serialize($pagehash["refs"]);
65 // Take db data and prepare it for display
66 function MakePageHash($dbhash)
68 // unserialize/explode content
69 $dbhash['refs'] = unserialize($dbhash['refs']);
71 // retrieve page lines from other table
72 // $dbhash['content'] = explode("\n", $dbhash['content']);
77 // Return hash of page + attributes or default
78 function RetrievePage($dbi, $pagename) {
79 $pagename = addslashes($pagename);
80 $query = "select * from $dbi[table] where pagename='$pagename'";
81 if ($res = msql_query($query, $dbi['dbc'])) {
82 $dbhash = msql_fetch_array($res);
83 $query = "select lineno,line from $dbi[page_table] " .
84 "where pagename='$pagename' " .
86 if ($res = msql_query($query, $dbi[dbc])) {
87 $dbhash["content"] = array();
88 while ($row = msql_fetch_array($res)) {
89 $dbhash["content"][ $row["lineno"] ] = $row["line"];
93 return MakePageHash($dbhash);
99 // Either insert or replace a key/value (a page)
100 function InsertPage($dbi, $pagename, $pagehash)
102 $pagehash = MakeDBHash($pagename, $pagehash);
104 // temporary hack until the time stuff is brought up to date
105 $pagehash["created"] = time();
106 $pagehash["lastmodified"] = time();
108 if (IsWikiPage($dbi, $pagename)) {
110 $PAIRS = "author='$pagehash[author]'," .
111 "created=$pagehash[created]," .
112 "flags=$pagehash[flags]," .
113 "lastmodified=$pagehash[lastmodified]," .
114 "pagename='$pagehash[pagename]'," .
115 "refs='$pagehash[refs]'," .
116 "version=$pagehash[version]";
118 $query = "UPDATE $dbi[table] SET $PAIRS WHERE pagename='$pagename'";
122 // build up the column names and values for the query
124 $COLUMNS = "author, created, flags, lastmodified, " .
125 "pagename, refs, version";
127 $VALUES = "'$pagehash[author]', " .
128 "$pagehash[created], $pagehash[flags], " .
129 "$pagehash[lastmodified], '$pagehash[pagename]', " .
130 "'$pagehash[refs]', $pagehash[version]";
133 $query = "INSERT INTO $dbi[table] ($COLUMNS) VALUES($VALUES)";
136 // echo "<p>Query: $query<p>\n";
138 // first, insert the metadata
139 $retval = msql_query($query, $dbi['dbc']);
140 if ($retval == false)
141 echo "Insert/update failed: ", msql_error(), "<br>\n";
143 // second, insert the page data
144 // remove old data from page_table
145 $query = "delete from $dbi[page_table] where pagename='$pagename'";
146 //echo "Delete query: $query<br>\n";
147 $retval = msql_query($query, $dbi['dbc']);
148 if ($retval == false)
149 echo "Delete on $dbi[page_table] failed: ", msql_error(), "<br>\n";
151 // insert the new lines
152 reset($pagehash["content"]);
154 for ($x = 0; $x < count($pagehash["content"]); $x++) {
155 $line = addslashes($pagehash["content"][$x]);
156 $query = "INSERT INTO $dbi[page_table] " .
157 "(pagename, lineno, line) " .
158 "VALUES('$pagename', $x, '$line')";
159 //echo "Page line insert query: $query<br>\n";
160 $retval = msql_query($query, $dbi['dbc']);
161 if ($retval == false)
162 echo "Insert into $dbi[page_table] failed: ", msql_error(), "<br>\n";;
169 function IsWikiPage($dbi, $pagename) {
170 $pagename = addslashes($pagename);
171 $query = "select pagename from $dbi[table] where pagename='$pagename'";
172 // echo "Query: $query<br>\n";
173 if ($res = msql_query($query, $dbi['dbc'])) {
174 return(msql_affected_rows($res));
179 // setup for title-search
180 function InitTitleSearch($dbi, $search) {
181 $search = addslashes($search);
182 $query = "select pagename from $dbi[table] " .
183 "where pagename clike '%$search%' order by pagename";
184 $res = msql_query($query, $dbi["dbc"]);
190 // iterating through database
191 function TitleSearchNextMatch($dbi, $res) {
192 if($o = msql_fetch_object($res)) {
201 // setup for full-text search
202 function InitFullSearch($dbi, $search) {
203 $search = addslashes($search);
204 $query = "select * from $dbi[table] where searchterms clike '%$search%'";
205 $res = msql_query($query, $dbi["dbc"]);
210 // iterating through database
211 function FullSearchNextMatch($dbi, $res) {
212 if($hash = msql_fetch_array($res)) {
213 return MakePageHash($hash);