Browse Source

Adds image_hard_limit and reply_hard_limit options.

Also reworks the numPosts() function and uses it elsewhere too.
pull/40/head
Macil Tech 11 years ago
parent
commit
3eda5b0543
  1. 7
      inc/config.php
  2. 19
      inc/functions.php
  3. 20
      post.php

7
inc/config.php

@ -311,6 +311,11 @@
// Reply limit (stops bumping thread when this is reached) // Reply limit (stops bumping thread when this is reached)
$config['reply_limit'] = 250; $config['reply_limit'] = 250;
// Image hard limit (stops allowing new image replies when this is reached if not zero)
$config['image_hard_limit'] = 0;
// Reply hard limit (stops allowing new replies when this is reached if not zero)
$config['reply_hard_limit'] = 0;
// Strip repeating characters when making hashes // Strip repeating characters when making hashes
$config['robot_enable'] = false; $config['robot_enable'] = false;
$config['robot_strip_repeating'] = true; $config['robot_strip_repeating'] = true;
@ -659,6 +664,8 @@
$config['error']['noboard'] = _('Invalid board!'); $config['error']['noboard'] = _('Invalid board!');
$config['error']['nonexistant'] = _('Thread specified does not exist.'); $config['error']['nonexistant'] = _('Thread specified does not exist.');
$config['error']['locked'] = _('Thread locked. You may not reply at this time.'); $config['error']['locked'] = _('Thread locked. You may not reply at this time.');
$config['error']['reply_hard_limit'] = _('Thread has reached its maximum reply limit.');
$config['error']['image_hard_limit'] = _('Thread has reached its maximum image limit.');
$config['error']['nopost'] = _('You didn\'t make a post.'); $config['error']['nopost'] = _('You didn\'t make a post.');
$config['error']['flood'] = _('Flood detected; Post discarded.'); $config['error']['flood'] = _('Flood detected; Post discarded.');
$config['error']['spam'] = _('Your request looks automated; Post discarded.'); $config['error']['spam'] = _('Your request looks automated; Post discarded.');

19
inc/functions.php

@ -986,12 +986,8 @@ function index($page, $mod=false) {
$replies = array_reverse($posts->fetchAll(PDO::FETCH_ASSOC)); $replies = array_reverse($posts->fetchAll(PDO::FETCH_ASSOC));
if (count($replies) == ($th['sticky'] ? $config['threads_preview_sticky'] : $config['threads_preview'])) { if (count($replies) == ($th['sticky'] ? $config['threads_preview_sticky'] : $config['threads_preview'])) {
$count = prepare(sprintf("SELECT COUNT(`id`) as `num` FROM `posts_%s` WHERE `thread` = :thread UNION ALL SELECT COUNT(`id`) FROM `posts_%s` WHERE `file` IS NOT NULL AND `thread` = :thread", $board['uri'], $board['uri'])); $count = numPosts($th['id']);
$count->bindValue(':thread', $th['id'], PDO::PARAM_INT); $omitted = array('post_count' => $count['replies'], 'image_count' => $count['images']);
$count->execute() or error(db_error($count));
$count = $count->fetchAll(PDO::FETCH_COLUMN);
$omitted = array('post_count' => $count[0], 'image_count' => $count[1]);
} else { } else {
$omitted = false; $omitted = false;
} }
@ -1134,14 +1130,19 @@ function checkRobot($body) {
return false; return false;
} }
// Returns an associative array with 'replies' and 'images' keys
function numPosts($id) { function numPosts($id) {
global $board; global $board;
$query = prepare(sprintf("SELECT COUNT(*) as `count` FROM `posts_%s` WHERE `thread` = :thread", $board['uri'])); $query = prepare(sprintf("SELECT COUNT(*) as `num` FROM `posts_%s` WHERE `thread` = :thread UNION ALL SELECT COUNT(*) FROM `posts_%s` WHERE `file` IS NOT NULL AND `thread` = :thread", $board['uri'], $board['uri']));
$query->bindValue(':thread', $id, PDO::PARAM_INT); $query->bindValue(':thread', $id, PDO::PARAM_INT);
$query->execute() or error(db_error($query)); $query->execute() or error(db_error($query));
$result = $query->fetch(); $num_posts = $query->fetch();
return $result['count']; $num_posts = $num_posts['num'];
$num_images = $query->fetch();
$num_images = $num_images['num'];
return array('replies' => $num_posts, 'images' => $num_images);
} }
function muteTime() { function muteTime() {

20
post.php

@ -302,13 +302,21 @@ if (isset($_POST['delete'])) {
} }
} }
// Check if thread is locked if (!$post['op']) {
// but allow mods to post // Check if thread is locked
if (!$post['op'] && !hasPermission($config['mod']['postinlocked'], $board['uri'])) { // but allow mods to post
if ($thread['locked']) if ($thread['locked'] && !hasPermission($config['mod']['postinlocked'], $board['uri']))
error($config['error']['locked']); error($config['error']['locked']);
$numposts = numPosts($post['thread']);
if ($config['reply_hard_limit'] != 0 && $config['reply_hard_limit'] <= $numposts['replies'])
error($config['error']['reply_hard_limit']);
if ($post['has_file'] && $config['image_hard_limit'] != 0 && $config['image_hard_limit'] <= $numposts['images'])
error($config['error']['image_hard_limit']);
} }
if ($post['has_file']) { if ($post['has_file']) {
$size = $_FILES['file']['size']; $size = $_FILES['file']['size'];
if ($size > $config['max_filesize']) if ($size > $config['max_filesize'])
@ -636,7 +644,7 @@ if (isset($_POST['delete'])) {
buildThread($post['op'] ? $id : $post['thread']); buildThread($post['op'] ? $id : $post['thread']);
if (!$post['op'] && strtolower($post['email']) != 'sage' && !$thread['sage'] && ($config['reply_limit'] == 0 || numPosts($post['thread']) < $config['reply_limit'])) { if (!$post['op'] && strtolower($post['email']) != 'sage' && !$thread['sage'] && ($config['reply_limit'] == 0 || $numposts['replies']+1 < $config['reply_limit'])) {
bumpThread($post['thread']); bumpThread($post['thread']);
} }

Loading…
Cancel
Save