parent
202d3459a9
commit
336619a7b0
1 changed files with 27 additions and 11 deletions
38
search.php
38
search.php
|
@ -1,13 +1,14 @@
|
|||
<?php
|
||||
|
||||
use Vichan\Data\SearchQueries;
|
||||
|
||||
require 'inc/bootstrap.php';
|
||||
|
||||
if (!$config['search']['enable']) {
|
||||
die(_("Post search is disabled"));
|
||||
}
|
||||
|
||||
$queries_per_minutes = $config['search']['queries_per_minutes'];
|
||||
$queries_per_minutes_all = $config['search']['queries_per_minutes_all'];
|
||||
$search_limit = $config['search']['search_limit'];
|
||||
|
||||
if (isset($config['search']['boards'])) {
|
||||
$boards = $config['search']['boards'];
|
||||
} else {
|
||||
|
@ -22,18 +23,35 @@ if (isset($_GET['search']) && !empty($_GET['search']) && isset($_GET['board']) &
|
|||
]);
|
||||
|
||||
$phrase = $_GET['search'];
|
||||
$ip = $_SERVER['REMOTE_ADDR'];
|
||||
$_body = '';
|
||||
|
||||
$ctx = Vichan\build_context($config);
|
||||
$search_queries = $ctx->get(SearchQueries::class);
|
||||
|
||||
if ($search_queries->checkFlood($ip, $phrase)) {
|
||||
$query = prepare("SELECT COUNT(*) FROM ``search_queries`` WHERE `ip` = :ip AND `time` > :time");
|
||||
$query->bindValue(':ip', $_SERVER['REMOTE_ADDR']);
|
||||
$query->bindValue(':time', time() - ($queries_per_minutes[1] * 60));
|
||||
$query->execute() or error(db_error($query));
|
||||
if ($query->fetchColumn() > $queries_per_minutes[0])
|
||||
error(_('Wait a while before searching again, please.'));
|
||||
}
|
||||
|
||||
$query = prepare("SELECT COUNT(*) FROM ``search_queries`` WHERE `time` > :time");
|
||||
$query->bindValue(':time', time() - ($queries_per_minutes_all[1] * 60));
|
||||
$query->execute() or error(db_error($query));
|
||||
if ($query->fetchColumn() > $queries_per_minutes_all[0])
|
||||
error(_('Wait a while before searching again, please.'));
|
||||
|
||||
|
||||
$query = prepare("INSERT INTO ``search_queries`` VALUES (:ip, :time, :query)");
|
||||
$query->bindValue(':ip', $_SERVER['REMOTE_ADDR']);
|
||||
$query->bindValue(':time', time());
|
||||
$query->bindValue(':query', $phrase);
|
||||
$query->execute() or error(db_error($query));
|
||||
|
||||
_syslog(LOG_NOTICE, 'Searched /' . $_GET['board'] . '/ for "' . $phrase . '"');
|
||||
|
||||
// Cleanup search queries table
|
||||
$query = prepare("DELETE FROM ``search_queries`` WHERE `time` <= :time");
|
||||
$query->bindValue(':time', time() - ($queries_per_minutes_all[1] * 60));
|
||||
$query->execute() or error(db_error($query));
|
||||
|
||||
openBoard($_GET['board']);
|
||||
|
||||
$filters = Array();
|
||||
|
@ -115,8 +133,6 @@ if (isset($_GET['search']) && !empty($_GET['search']) && isset($_GET['board']) &
|
|||
|
||||
$like = str_replace('%', '%%', $like);
|
||||
|
||||
$search_limit = $config['search']['search_limit'];
|
||||
|
||||
$query = prepare(sprintf("SELECT * FROM ``posts_%s`` WHERE " . $like . " ORDER BY `time` DESC LIMIT :limit", $board['uri']));
|
||||
$query->bindValue(':limit', $search_limit, PDO::PARAM_INT);
|
||||
$query->execute() or error(db_error($query));
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue