Search posts
This commit is contained in:
parent
c0e0a5db7d
commit
58306bdc63
@ -1035,6 +1035,8 @@
|
||||
$config['mod']['rebuild'] = ADMIN;
|
||||
// Search through posts, IP address notes and bans
|
||||
$config['mod']['search'] = JANITOR;
|
||||
// Allow searching posts (can be used with board configuration file to disallow searching through a certain board)
|
||||
$config['mod']['search_posts'] = JANITOR;
|
||||
// Read the moderator noticeboard
|
||||
$config['mod']['noticeboard'] = JANITOR;
|
||||
// Post to the moderator noticeboard
|
||||
|
@ -225,7 +225,7 @@ function mod_search($type, $search_query_escaped, $page_no = 1) {
|
||||
|
||||
// Which `field` to search?
|
||||
if ($type == 'posts')
|
||||
$sql_field = 'body';
|
||||
$sql_field = 'body_nomarkup';
|
||||
if ($type == 'IP_notes')
|
||||
$sql_field = 'body';
|
||||
if ($type == 'bans')
|
||||
@ -246,7 +246,27 @@ function mod_search($type, $search_query_escaped, $page_no = 1) {
|
||||
// Compile SQL query
|
||||
|
||||
if ($type == 'posts') {
|
||||
error('Searching posts is under development. Sorry.');
|
||||
$query = '';
|
||||
|
||||
$boards = listBoards();
|
||||
if (empty($boards))
|
||||
error(_('There are no boards to search!'));
|
||||
|
||||
foreach ($boards as $board) {
|
||||
openBoard($board['uri']);
|
||||
if (!hasPermission($config['mod']['search_posts'], $board['uri']))
|
||||
continue;
|
||||
|
||||
if (!empty($query))
|
||||
$query .= ' UNION ALL ';
|
||||
$query .= sprintf("SELECT *, '%s' AS `board` FROM `posts_%s` WHERE %s", $board['uri'], $board['uri'], $sql_like);
|
||||
}
|
||||
|
||||
// You weren't allowed to search any boards
|
||||
if (empty($query))
|
||||
error($config['error']['noaccess']);
|
||||
|
||||
$query .= ' ORDER BY `sticky` DESC, `id` DESC';
|
||||
}
|
||||
|
||||
if ($type == 'IP_notes') {
|
||||
@ -273,10 +293,15 @@ function mod_search($type, $search_query_escaped, $page_no = 1) {
|
||||
// Execute SQL query (with pages)
|
||||
$q = query($query . ' LIMIT ' . (($page_no - 1) * $config['mod']['search_page']) . ', ' . $config['mod']['search_page']) or error(db_error());
|
||||
$results = $q->fetchAll(PDO::FETCH_ASSOC);
|
||||
|
||||
|
||||
// Get total result count
|
||||
$q = query('SELECT COUNT(*) FROM `' . $sql_table . '` WHERE ' . $sql_like) or error(db_error());
|
||||
$result_count = $q->fetchColumn();
|
||||
if ($type == 'posts') {
|
||||
$q = query("SELECT COUNT(*) FROM ($query) AS `tmp_table`") or error(db_error());
|
||||
$result_count = $q->fetchColumn();
|
||||
} else {
|
||||
$q = query('SELECT COUNT(*) FROM `' . $sql_table . '` WHERE ' . $sql_like) or error(db_error());
|
||||
$result_count = $q->fetchColumn();
|
||||
}
|
||||
|
||||
if ($type == 'bans') {
|
||||
foreach ($results as &$ban) {
|
||||
@ -285,6 +310,12 @@ function mod_search($type, $search_query_escaped, $page_no = 1) {
|
||||
}
|
||||
}
|
||||
|
||||
if ($type == 'posts') {
|
||||
foreach ($results as &$post) {
|
||||
$post['snippet'] = pm_snippet($post['body']);
|
||||
}
|
||||
}
|
||||
|
||||
// $results now contains the search results
|
||||
|
||||
mod_page(_('Search results'), 'mod/search_results.html', array(
|
||||
|
@ -39,7 +39,7 @@
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
{% if search_type == 'bans' %}
|
||||
<table class="modlog" style="width:100%">
|
||||
@ -125,7 +125,7 @@
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
{% if search_type == 'log' %}
|
||||
<table class="modlog">
|
||||
@ -166,7 +166,98 @@
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
{% if search_type == 'posts' %}
|
||||
<table class="modlog">
|
||||
<tr>
|
||||
<th>Time</th>
|
||||
<th>Board</th>
|
||||
<th>ID</th>
|
||||
<th>Thread</th>
|
||||
<th>IP</th>
|
||||
<th>Name</th>
|
||||
<th>Subject</th>
|
||||
<th>File</th>
|
||||
<th>Body (snippet)</th>
|
||||
</tr>
|
||||
{% for post in results %}
|
||||
<tr>
|
||||
<td class="minimal">
|
||||
<small>{{ post.time | ago }} ago</small>
|
||||
</td>
|
||||
<td class="minimal">
|
||||
<a href="?/{{ config.board_path|sprintf(post.board) }}{{ config.file_index }}">{{ config.board_abbreviation|sprintf(post.board) }}</a>
|
||||
</td>
|
||||
<td class="minimal" >
|
||||
{% if post.thread %}
|
||||
{% set thread = post.thread %}
|
||||
{% else %}
|
||||
{% set thread = post.id %}
|
||||
{% endif %}
|
||||
<a href="{{ config.root ~ post.board ~ '/' ~ config.dir.res}}{{ config.file_page|sprintf(thread) }}#{{ post.id }}">
|
||||
{{ post.id }}
|
||||
</a>
|
||||
</td>
|
||||
<td class="minimal">
|
||||
<small>
|
||||
{% if post.thread %}
|
||||
{{ post.thread }}
|
||||
{% else %}
|
||||
(OP)
|
||||
{% endif %}
|
||||
</small>
|
||||
</td>
|
||||
<td class="minimal">
|
||||
{% if mod|hasPermission(config.mod.show_ip, post.board) %}
|
||||
<a href="?/IP/{{ post.ip }}">
|
||||
{{ post.ip }}
|
||||
</a>
|
||||
{% else %}
|
||||
<em>hidden</em>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td class="minimal" >
|
||||
<small>
|
||||
{% if post.email|length > 0 %}
|
||||
{# start email #}
|
||||
<a class="email" href="mailto:{{ post.email }}">
|
||||
{% endif %}
|
||||
{% set capcode = post.capcode|capcode %}
|
||||
<span {% if capcode.name %}style="{{ capcode.name }}" {% endif %}class="name">{{ post.name }}</span>
|
||||
{% if post.trip|length > 0 %}
|
||||
<span {% if capcode.trip %}style="{{ capcode.trip }}" {% endif %}class="trip">{{ post.trip }}</span>
|
||||
{% endif %}
|
||||
{% if post.email|length > 0 %}
|
||||
{# end email #}
|
||||
</a>
|
||||
{% endif %}
|
||||
{% if capcode %}
|
||||
{{ capcode.cap }}
|
||||
{% endif %}
|
||||
</small>
|
||||
</td>
|
||||
<td class="minimal" >
|
||||
{% if post.subject %}
|
||||
<small>{{ post.subject }}</small>
|
||||
{% else %}
|
||||
–
|
||||
{% endif %}
|
||||
</td>
|
||||
<td class="minimal">
|
||||
{% if post.file %}
|
||||
<small>{{ post.file }} ({{ post.filesize | filesize }})</small>
|
||||
{% else %}
|
||||
–
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>
|
||||
<small><em>{{ post.snippet }}</em></small>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
{% endif %}
|
||||
|
||||
{% if result_count > results|count %}
|
||||
<p class="unimportant" style="text-align:center;word-wrap:break-word">
|
||||
|
Loading…
Reference in New Issue
Block a user