diff --git a/inc/display.php b/inc/display.php index 85c21e7c..2b5d3116 100644 --- a/inc/display.php +++ b/inc/display.php @@ -216,7 +216,7 @@ function truncate($body, $url, $max_lines = false, $max_chars = false) { function secure_link_confirm($text, $title, $confirm_message, $href) { global $config; - return '' . $text . ''; + return '' . $text . ''; } function secure_link($href) { return $href . '/' . make_secure_link_token($href); @@ -350,8 +350,8 @@ class Thread { // Fix internal links // Very complicated regex $this->body = preg_replace( - '/= :floodtime) OR (`ip` = :ip AND `body` != '' AND `body` = :body AND `time` >= :floodsameiptime) OR (`body` != '' AND `body` = :body AND `time` >= :floodsametime) LIMIT 1", $board['uri'])); $query->bindValue(':ip', $_SERVER['REMOTE_ADDR']); - $query->bindValue(':body', $post['body'], PDO::PARAM_INT); + $query->bindValue(':body', $post['body']); $query->bindValue(':floodtime', time()-$config['flood_time'], PDO::PARAM_INT); $query->bindValue(':floodsameiptime', time()-$config['flood_time_ip'], PDO::PARAM_INT); $query->bindValue(':floodsametime', time()-$config['flood_time_same'], PDO::PARAM_INT); @@ -697,7 +697,7 @@ function threadExists($id) { function post(array $post) { global $pdo, $board; - $query = prepare(sprintf("INSERT INTO `posts_%s` VALUES ( NULL, :thread, :subject, :email, :name, :trip, :capcode, :body, :body_nomarkup, :time, :time, :thumb, :thumbwidth, :thumbheight, :file, :width, :height, :filesize, :filename, :filehash, :password, :ip, :sticky, :locked, 0, :embed)", $board['uri'])); + $query = prepare(sprintf("INSERT INTO `posts_%s` (`id`, `thread`, `subject`, `email`, `name`, `trip`, `capcode`, `body`, `body_nomarkup`, `time`, `bump`, `thumb`, `thumbwidth`, `thumbheight`, `file`, `filewidth`, `fileheight`, `filesize`, `filename`, `filehash`, `password`, `ip`, `sticky`, `locked`, `sage`, `embed`) VALUES ( NULL, :thread, :subject, :email, :name, :trip, :capcode, :body, :body_nomarkup, :time, :time, :thumb, :thumbwidth, :thumbheight, :file, :width, :height, :filesize, :filename, :filehash, :password, :ip, :sticky, :locked, 0, :embed)", $board['uri'])); // Basic stuff if (!empty($post['subject'])) { diff --git a/inc/mod/pages.php b/inc/mod/pages.php index 4f1ab73c..e90e9ff0 100644 --- a/inc/mod/pages.php +++ b/inc/mod/pages.php @@ -64,6 +64,7 @@ function mod_confirm($request) { } function mod_logout() { + global $config; destroyCookies(); header('Location: ?/', true, $config['redirect_http']); @@ -706,7 +707,7 @@ function mod_sticky($board, $unsticky, $post) { $query->bindValue(':sticky', $unsticky ? 0 : 1); $query->execute() or error(db_error($query)); if ($query->rowCount()) { - modLog(($unlock ? 'Unstickied' : 'Stickied') . " thread #{$post}"); + modLog(($unsticky ? 'Unstickied' : 'Stickied') . " thread #{$post}"); buildThread($post); buildIndex(); } @@ -728,7 +729,7 @@ function mod_bumplock($board, $unbumplock, $post) { $query->bindValue(':bumplock', $unbumplock ? 0 : 1); $query->execute() or error(db_error($query)); if ($query->rowCount()) { - modLog(($unlock ? 'Unbumplocked' : 'Bumplocked') . " thread #{$post}"); + modLog(($unbumplock ? 'Unbumplocked' : 'Bumplocked') . " thread #{$post}"); buildThread($post); buildIndex(); } @@ -1019,13 +1020,6 @@ function mod_deletefile($board, $post) { // Record the action modLog("Deleted file from post #{$post}"); - $query = prepare(sprintf('SELECT `thread` FROM `posts_%s` WHERE `id` = :id', $board)); - $query->bindValue(':id', $post); - $query->execute() or error(db_error($query)); - $thread = $query->fetchColumn(); - - // Rebuild thread - buildThread($thread ? $thread : $post); // Rebuild board buildIndex(); @@ -1058,7 +1052,7 @@ function mod_deletebyip($boardName, $post, $global = false) { $query = ''; foreach ($boards as $_board) { - $query .= sprintf("SELECT `id`, '%s' AS `board` FROM `posts_%s` WHERE `ip` = :ip UNION ALL ", $_board['uri'], $_board['uri']); + $query .= sprintf("SELECT `thread`, `id`, '%s' AS `board` FROM `posts_%s` WHERE `ip` = :ip UNION ALL ", $_board['uri'], $_board['uri']); } $query = preg_replace('/UNION ALL $/', '', $query); @@ -1069,18 +1063,27 @@ function mod_deletebyip($boardName, $post, $global = false) { if ($query->rowCount() < 1) error($config['error']['invalidpost']); - $boards = array(); + set_time_limit($config['mod']['rebuild_timelimit']); + + $threads_to_rebuild = array(); + $threads_deleted = array(); while ($post = $query->fetch()) { openBoard($post['board']); - $boards[] = $post['board']; - deletePost($post['id'], false); + deletePost($post['id'], false, false); + + if ($post['thread']) + $threads_to_rebuild[$post['board']][$post['thread']] = true; + else + $threads_deleted[$post['board']][$post['id']] = true; } - $boards = array_unique($boards); - - foreach ($boards as $_board) { + foreach ($threads_to_rebuild as $_board => $_threads) { openBoard($_board); + foreach ($_threads as $_thread => $_dummy) { + if ($_dummy && !isset($threads_deleted[$_board][$_thread])) + buildThread($_thread); + } buildIndex(); } @@ -1412,6 +1415,8 @@ function mod_rebuild() { error($config['error']['noaccess']); if (isset($_POST['rebuild'])) { + set_time_limit($config['mod']['rebuild_timelimit']); + $log = array(); $boards = listBoards(); $rebuilt_scripts = array(); diff --git a/post.php b/post.php index 16566b51..1153b46a 100644 --- a/post.php +++ b/post.php @@ -407,34 +407,12 @@ if (isset($_POST['delete'])) { require_once 'inc/image.php'; - if ($config['thumb_method'] == 'imagick') { - // This is tricky, because Imagick won't let us find - // an image's dimensions without loading it all into - // memory first, unlike GD which provides the - // getimagesize() to do exactly that. This section - // is why GD is required, even when using Imagick - // instead. There doesn't seem to be an alternative. - // Necessary for security, as Imagick even ignores - // PHP's memory limit. - - // first try GD's getimagesize() - if ($size = @getimagesize($upload)) { - if ($size[0] > $config['max_width'] || $size[1] > $config['max_height']) { - - error($config['error']['maxsize']); - } - } else { - // GD failed - // TODO? - } - } else { - // find dimensions of an image using GD - if (!$size = @getimagesize($upload)) { - error($config['error']['invalidimg']); - } - if ($size[0] > $config['max_width'] || $size[1] > $config['max_height']) { - error($config['error']['maxsize']); - } + // find dimensions of an image using GD + if (!$size = @getimagesize($upload)) { + error($config['error']['invalidimg']); + } + if ($size[0] > $config['max_width'] || $size[1] > $config['max_height']) { + error($config['error']['maxsize']); } // create image object diff --git a/templates/post_reply.html b/templates/post_reply.html index f50e392e..ddd0afd4 100644 --- a/templates/post_reply.html +++ b/templates/post_reply.html @@ -63,7 +63,7 @@ , {{ post.ratio }} {% endif %} {% endif %} - {% if config.show_filename %} + {% if config.show_filename and post.filename %} , {% if post.filename|length > config.max_filename_display %} {{ post.filename|truncate(config.max_filename_display) }} diff --git a/templates/post_thread.html b/templates/post_thread.html index da93c5dd..cf93bed0 100644 --- a/templates/post_thread.html +++ b/templates/post_thread.html @@ -20,7 +20,7 @@ , {{ post.ratio }} {% endif %} {% endif %} - {% if config.show_filename %} + {% if config.show_filename and post.filename %} , {% if post.filename|length > config.max_filename_display %} {{ post.filename|truncate(config.max_filename_display) }}