]> CyberLeo.Net >> Repos - SourceForge/phpwiki.git/blob - wiki_msql.php3
Upped the size of the "searchterms" field.
[SourceForge/phpwiki.git] / wiki_msql.php3
1 <!-- $Id: wiki_msql.php3,v 1.2 2000-06-25 07:33:29 wainstead Exp $ -->
2 <?
3
4    /*
5       Database functions:
6       MakePageHash($dbhash)
7       MakeDBHash($pagename, $pagehash)
8       OpenDataBase($dbname)
9       CloseDataBase($dbi)
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)
17    */
18
19
20    // open a database and return the handle
21    // ignores MAX_DBM_ATTEMPTS
22
23    function OpenDataBase($dbname) {
24       global $msql_db;
25
26       if (! ($dbc = msql_pconnect())) {
27          echo "Cannot establish connection to database, giving up.";
28          echo "Error message: ", msql_error(), "<br>\n";
29          exit();
30       }
31       if (!msql_select_db($msql_db, $dbc)) {
32          echo "Cannot open database, giving up.";
33          echo "Error message: ", msql_error(), "<br>\n";
34          exit();
35       }
36
37       $dbi['dbc'] = $dbc;
38       $dbi['table'] = $dbname;
39       return $dbi;
40    }
41
42
43    function CloseDataBase($dbi) {
44       // NOP function
45       // msql connections are established as persistant
46       // they cannot be closed through msql_close()
47    }
48
49
50    function MakeDBHash($pagename, $pagehash)
51    {
52       $pagehash["pagename"] = addslashes($pagename);
53       if (!isset($pagehash["flags"]))
54          $pagehash["flags"] = 0;
55
56       // build a list of unique words for this page
57       $list = $pagehash["content"];
58
59       // strip nonalphanumeric characters
60       reset($list);
61       $list = preg_replace("/\W/", " ", $list);
62
63       reset($list);
64       while($line = next($list)) {
65          //echo "<br><b>doing:</b> $line<br>\n";
66          $words = preg_split("/\s+/", $line);
67          reset($words);
68          while ($word = next($words)) {
69             //echo "$word ";
70             $terms[strtolower($word)]++;
71          }
72       }
73       //echo "<hr>\n";
74       reset($terms);
75       while (list($key, $val) = each($terms)) {
76          $pagehash["searchterms"] .= "$key ";         
77       }
78       //echo "<hr>\n";
79       //echo "size of search terms: ", strlen($pagehash["searchterms"]), "<br>\n";
80       //echo "<hr>\n";
81       //echo $pagehash["searchterms"];
82       //echo "<hr>\n";
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"]);
87
88       return $pagehash;
89    }
90
91    function MakePageHash($dbhash)
92    {
93       // unserialize/explode content
94       $dbhash['refs'] = unserialize($dbhash['refs']);
95       $dbhash['content'] = explode("\n", $dbhash['content']);
96       return $dbhash;
97    }
98
99
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);
107          }
108       }
109       return -1;
110    }
111
112
113    // Either insert or replace a key/value (a page)
114    function InsertPage($dbi, $pagename, $pagehash)
115    {
116       $pagehash = MakeDBHash($pagename, $pagehash);
117
118
119       // temporary hack until the time stuff is brought up to date
120       $pagehash["created"] = time();
121       $pagehash["lastmodified"] = time();
122
123       if (IsWikiPage($dbi, $pagename)) {
124
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]'";
134
135          $query = "UPDATE $dbi[table] SET $PAIRS WHERE pagename='$pagename'";
136
137       } else {
138          // do an insert
139          // build up the column names and values for the query
140
141       $COLUMNS = "author, content, created, flags, lastmodified, " .
142                  "pagename, refs, version, searchterms";
143
144       $VALUES =  "'$pagehash[author]', '$pagehash[content]', " .
145                  "$pagehash[created], $pagehash[flags], " .
146                  "$pagehash[lastmodified], '$pagehash[pagename]', " .
147                  "'$pagehash[refs]', $pagehash[version], " .
148                  "'$pagehash[searchterms]'";
149
150
151          $query = "INSERT INTO $dbi[table] ($COLUMNS) VALUES($VALUES)";
152       }
153
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();
158
159    }
160
161
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));
168       }
169    }
170
171
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"]);
178
179       return $res;
180    }
181
182
183    // iterating through database
184    function TitleSearchNextMatch($dbi, $res) {
185       if($o = msql_fetch_object($res)) {
186          return $o->pagename;
187       }
188       else {
189          return 0;
190       }
191    }
192
193
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"]);
199
200       return $res;
201    }
202
203    // iterating through database
204    function FullSearchNextMatch($dbi, $res) {
205       if($hash = msql_fetch_array($res)) {
206          return MakePageHash($hash);
207       }
208       else {
209          return 0;
210       }
211    }
212
213
214 ?>