diff options
| author | Michael Save <savetheinternet@tinyboard.org> | 2012-02-12 22:45:48 +1100 |
|---|---|---|
| committer | Michael Save <savetheinternet@tinyboard.org> | 2012-02-12 22:45:48 +1100 |
| commit | 10d6884ab3d60b009a083a665289e4deaccc518c (patch) | |
| tree | 04015f6b815f5cc644eed95e258e236eab41e3f8 /mod.php | |
| parent | ae76ddb0795cbeb1c7b8f7b2d203a518fc828403 (diff) | |
experimental "filters" in mod ?/search
Diffstat (limited to 'mod.php')
| -rw-r--r-- | mod.php | 27 |
1 files changed, 26 insertions, 1 deletions
@@ -990,7 +990,7 @@ $body = '<div class="ban"><h2>Search</h2><form style="display:inline" action="?/search" method="post">' . '<p><label style="display:inline" for="search">Phrase:</label> ' . '<input id="search" name="search" type="text" size="35" ' . - (isset($_POST['search']) ? 'value="' . utf8tohtml($_POST['search']) . '" ' : '') . + (isset($_POST['search']) ? 'value="' . str_replace('"', '"', utf8tohtml($_POST['search'])) . '" ' : '') . '/>' . '<input type="submit" value="Search" />' . '</p></form>' . @@ -1001,6 +1001,25 @@ $phrase = &$_POST['search']; $_body = ''; + $filters = Array(); + + function search_filters($m) { + global $filters; + $name = $m[2]; + $value = isset($m[4]) ? $m[4] : $m[3]; + + if(!in_array($name, Array('id', 'thread', 'subject', 'email', 'name', 'trip', 'capcode', 'filename', 'filehash', 'ip'))) { + // unknown filter + return $m[0]; + } + + $filters[$name] = $value; + + return $m[1]; + } + + $phrase = trim(preg_replace_callback('/(^|\s)(\w+):("(.*)?"|[^\s]*)/', 'search_filters', $phrase)); + // Escape escape character $phrase = str_replace('!', '!!', $phrase); @@ -1036,8 +1055,14 @@ $like .= '`body` LIKE ' . $phrase . ' ESCAPE \'!\''; } + foreach($filters as $name => $value) { + $like .= ' AND `' . $name . '` = '. $pdo->quote($value); + } + $like = str_replace('%', '%%', $like); + // die(var_dump($like)); + $boards = listBoards(); foreach($boards as &$_b) { openBoard($_b['uri']); |
