forked from leftypol/leftypol
report queue
This commit is contained in:
parent
ad55a634bf
commit
41e1a2481b
5 changed files with 155 additions and 1 deletions
|
@ -469,3 +469,124 @@ function mod_rebuild() {
|
|||
mod_page("Rebuild", 'mod/rebuild.html', array('boards' => listBoards()));
|
||||
}
|
||||
|
||||
function mod_reports() {
|
||||
global $config, $mod;
|
||||
|
||||
if (!hasPermission($config['mod']['reports']))
|
||||
error($config['error']['noaccess']);
|
||||
|
||||
$query = prepare("SELECT * FROM `reports` ORDER BY `time` DESC LIMIT :limit");
|
||||
$query->bindValue(':limit', $config['mod']['recent_reports'], PDO::PARAM_INT);
|
||||
$query->execute() or error(db_error($query));
|
||||
$reports = $query->fetchAll(PDO::FETCH_ASSOC);
|
||||
|
||||
$report_queries = array();
|
||||
foreach ($reports as $report) {
|
||||
if (!isset($report_queries[$report['board']]))
|
||||
$report_queries[$report['board']] = array();
|
||||
$report_queries[$report['board']][] = $report['post'];
|
||||
}
|
||||
|
||||
$report_posts = array();
|
||||
foreach ($report_queries as $board => $posts) {
|
||||
$report_posts[$board] = array();
|
||||
|
||||
$query = query(sprintf('SELECT * FROM `posts_%s` WHERE `id` = ' . implode(' OR `id` = ', $posts), $board)) or error(db_error());
|
||||
while ($post = $query->fetch()) {
|
||||
$report_posts[$board][$post['id']] = $post;
|
||||
}
|
||||
}
|
||||
|
||||
$body = '';
|
||||
foreach ($reports as $report) {
|
||||
if (!isset($report_posts[$report['board']][$report['post']])) {
|
||||
// // Invalid report (post has since been deleted)
|
||||
$query = prepare("DELETE FROM `reports` WHERE `post` = :id AND `board` = :board");
|
||||
$query->bindValue(':id', $report['post'], PDO::PARAM_INT);
|
||||
$query->bindValue(':board', $report['board']);
|
||||
$query->execute() or error(db_error($query));
|
||||
continue;
|
||||
}
|
||||
|
||||
openBoard($report['board']);
|
||||
|
||||
$post = &$report_posts[$report['board']][$report['post']];
|
||||
|
||||
if (!$post['thread']) {
|
||||
// Still need to fix this:
|
||||
$po = new Thread(
|
||||
$post['id'], $post['subject'], $post['email'], $post['name'], $post['trip'],
|
||||
$post['capcode'], $post['body'], $post['time'], $post['thumb'],
|
||||
$post['thumbwidth'], $post['thumbheight'], $post['file'], $post['filewidth'],
|
||||
$post['fileheight'], $post['filesize'], $post['filename'], $post['ip'], $post['sticky'],
|
||||
$post['locked'], $post['sage'], $post['embed'], '?/', $mod, false
|
||||
);
|
||||
} else {
|
||||
$po = new Post(
|
||||
$post['id'], $post['thread'], $post['subject'], $post['email'], $post['name'], $post['trip'], $post['capcode'],
|
||||
$post['body'], $post['time'], $post['thumb'], $post['thumbwidth'], $post['thumbheight'], $post['file'], $post['filewidth'],
|
||||
$post['fileheight'], $post['filesize'], $post['filename'], $post['ip'], $post['embed'], '?/', $mod
|
||||
);
|
||||
}
|
||||
|
||||
// a little messy and inefficient
|
||||
$append_html = Element('mod/report.html', array('report' => $report, 'config' => $config, 'mod' => $mod));
|
||||
|
||||
// Bug fix for https://github.com/savetheinternet/Tinyboard/issues/21
|
||||
$po->body = truncate($po->body, $po->link(), $config['body_truncate'] - substr_count($append_html, '<br>'));
|
||||
|
||||
if (mb_strlen($po->body) + mb_strlen($append_html) > $config['body_truncate_char']) {
|
||||
// still too long; temporarily increase limit in the config
|
||||
$__old_body_truncate_char = $config['body_truncate_char'];
|
||||
$config['body_truncate_char'] = mb_strlen($po->body) + mb_strlen($append_html);
|
||||
}
|
||||
|
||||
$po->body .= $append_html;
|
||||
|
||||
$body .= $po->build(true) . '<hr>';
|
||||
|
||||
if(isset($__old_body_truncate_char))
|
||||
$config['body_truncate_char'] = $__old_body_truncate_char;
|
||||
}
|
||||
|
||||
mod_page("Report queue", 'mod/reports.html', array('reports' => $body));
|
||||
}
|
||||
|
||||
function mod_report_dismiss($id, $all = false) {
|
||||
global $config;
|
||||
|
||||
$query = prepare("SELECT `post`, `board`, `ip` FROM `reports` WHERE `id` = :id");
|
||||
$query->bindValue(':id', $id);
|
||||
$query->execute() or error(db_error($query));
|
||||
if ($report = $query->fetch(PDO::FETCH_ASSOC)) {
|
||||
$ip = $report['ip'];
|
||||
$board = $report['board'];
|
||||
$post = $report['post'];
|
||||
} else
|
||||
error($config['error']['404']);
|
||||
|
||||
if (!$all && !hasPermission($config['mod']['report_dismiss'], $board))
|
||||
error($config['error']['noaccess']);
|
||||
|
||||
if ($all && !hasPermission($config['mod']['report_dismiss_ip'], $board))
|
||||
error($config['error']['noaccess']);
|
||||
|
||||
if ($all) {
|
||||
$query = prepare("DELETE FROM `reports` WHERE `ip` = :ip");
|
||||
$query->bindValue(':ip', $ip);
|
||||
} else {
|
||||
$query = prepare("DELETE FROM `reports` WHERE `id` = :id");
|
||||
$query->bindValue(':id', $id);
|
||||
}
|
||||
$query->execute() or error(db_error($query));
|
||||
|
||||
|
||||
if ($all)
|
||||
modLog("Dismissed all reports by <a href=\"?/IP/$ip\">$ip</a>");
|
||||
else
|
||||
modLog("Dismissed a report for post #{$id}", $board);
|
||||
|
||||
header('Location: ?/reports', true, $config['redirect_http']);
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue