1 <!-- $Id: wiki_msql.php3,v 1.2 2000-06-25 07:33:29 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($dbname) {
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, giving up.";
33 echo "Error message: ", msql_error(), "<br>\n";
38 $dbi['table'] = $dbname;
43 function CloseDataBase($dbi) {
45 // msql connections are established as persistant
46 // they cannot be closed through msql_close()
50 function MakeDBHash($pagename, $pagehash)
52 $pagehash["pagename"] = addslashes($pagename);
53 if (!isset($pagehash["flags"]))
54 $pagehash["flags"] = 0;
56 // build a list of unique words for this page
57 $list = $pagehash["content"];
59 // strip nonalphanumeric characters
61 $list = preg_replace("/\W/", " ", $list);
64 while($line = next($list)) {
65 //echo "<br><b>doing:</b> $line<br>\n";
66 $words = preg_split("/\s+/", $line);
68 while ($word = next($words)) {
70 $terms[strtolower($word)]++;
75 while (list($key, $val) = each($terms)) {
76 $pagehash["searchterms"] .= "$key ";
79 //echo "size of search terms: ", strlen($pagehash["searchterms"]), "<br>\n";
81 //echo $pagehash["searchterms"];
83 $pagehash["author"] = addslashes($pagehash["author"]);
84 $pagehash["content"] = implode("\n", $pagehash["content"]);
85 $pagehash["content"] = addslashes($pagehash["content"]);
86 $pagehash["refs"] = serialize($pagehash["refs"]);
91 function MakePageHash($dbhash)
93 // unserialize/explode content
94 $dbhash['refs'] = unserialize($dbhash['refs']);
95 $dbhash['content'] = explode("\n", $dbhash['content']);
100 // Return hash of page + attributes or default
101 function RetrievePage($dbi, $pagename) {
102 $pagename = addslashes($pagename);
103 $query = "select * from $dbi[table] where pagename='$pagename'";
104 if ($res = msql_query($query, $dbi['dbc'])) {
105 if ($dbhash = msql_fetch_array($res)) {
106 return MakePageHash($dbhash);
113 // Either insert or replace a key/value (a page)
114 function InsertPage($dbi, $pagename, $pagehash)
116 $pagehash = MakeDBHash($pagename, $pagehash);
119 // temporary hack until the time stuff is brought up to date
120 $pagehash["created"] = time();
121 $pagehash["lastmodified"] = time();
123 if (IsWikiPage($dbi, $pagename)) {
125 $PAIRS = "author='$pagehash[author]'," .
126 "content='$pagehash[content]'," .
127 "created=$pagehash[created]," .
128 "flags=$pagehash[flags]," .
129 "lastmodified=$pagehash[lastmodified]," .
130 "pagename='$pagehash[pagename]'," .
131 "refs='$pagehash[refs]'," .
132 "version=$pagehash[version]," .
133 "searchterms='$pagehash[searchterms]'";
135 $query = "UPDATE $dbi[table] SET $PAIRS WHERE pagename='$pagename'";
139 // build up the column names and values for the query
141 $COLUMNS = "author, content, created, flags, lastmodified, " .
142 "pagename, refs, version, searchterms";
144 $VALUES = "'$pagehash[author]', '$pagehash[content]', " .
145 "$pagehash[created], $pagehash[flags], " .
146 "$pagehash[lastmodified], '$pagehash[pagename]', " .
147 "'$pagehash[refs]', $pagehash[version], " .
148 "'$pagehash[searchterms]'";
151 $query = "INSERT INTO $dbi[table] ($COLUMNS) VALUES($VALUES)";
154 // echo "<p>Query: $query<p>\n";
155 $retval = msql_query($query, $dbi['dbc']);
156 if ($retval == false)
157 echo "Insert/update failed: " . msql_error();
162 function IsWikiPage($dbi, $pagename) {
163 $pagename = addslashes($pagename);
164 $query = "select pagename from $dbi[table] where pagename='$pagename'";
165 // echo "Query: $query<br>\n";
166 if ($res = msql_query($query, $dbi['dbc'])) {
167 return(msql_affected_rows($res));
172 // setup for title-search
173 function InitTitleSearch($dbi, $search) {
174 $search = addslashes($search);
175 $query = "select pagename from $dbi[table] " .
176 "where pagename clike '%$search%' order by pagename";
177 $res = msql_query($query, $dbi["dbc"]);
183 // iterating through database
184 function TitleSearchNextMatch($dbi, $res) {
185 if($o = msql_fetch_object($res)) {
194 // setup for full-text search
195 function InitFullSearch($dbi, $search) {
196 $search = addslashes($search);
197 $query = "select * from $dbi[table] where searchterms clike '%$search%'";
198 $res = msql_query($query, $dbi["dbc"]);
203 // iterating through database
204 function FullSearchNextMatch($dbi, $res) {
205 if($hash = msql_fetch_array($res)) {
206 return MakePageHash($hash);