Browse Source

Adds "noko50" (View Last 50 Posts) pages. (Broken Reply)

pull/40/head
fallenPineapple 11 years ago
parent
commit
12ee85beaf
  1. 7
      inc/config.php
  2. 9
      inc/display.php
  3. 107
      inc/functions.php
  4. 10
      inc/mod/pages.php
  5. 2
      mod.php
  6. 14
      post.php
  7. 11
      templates/post_thread.html

7
inc/config.php

@ -589,7 +589,11 @@
// Display image identification links using regex.info/exif, TinEye and Google Images. // Display image identification links using regex.info/exif, TinEye and Google Images.
$config['image_identification'] = false; $config['image_identification'] = false;
// Number of posts in a "View Last X Posts" page
$config['noko50_count'] = 50;
// Number of posts a thread needs before it gets a "View Last X Posts" page
$config['noko50_min'] = 100;
/* /*
* ==================== * ====================
* Board settings * Board settings
@ -877,6 +881,7 @@
// Location of files. // Location of files.
$config['file_index'] = 'index.html'; $config['file_index'] = 'index.html';
$config['file_page'] = '%d.html'; $config['file_page'] = '%d.html';
$config['file_page50'] = '%d+50.html';
$config['file_mod'] = 'mod.php'; $config['file_mod'] = 'mod.php';
$config['file_post'] = 'post.php'; $config['file_post'] = 'post.php';
$config['file_script'] = 'main.js'; $config['file_script'] = 'main.js';

9
inc/display.php

@ -416,6 +416,9 @@ class Thread {
public function add(Post $post) { public function add(Post $post) {
$this->posts[] = $post; $this->posts[] = $post;
} }
public function postCount() {
return count($this->posts) + $this->omitted;
}
public function postControls() { public function postControls() {
global $board, $config; global $board, $config;
@ -483,10 +486,12 @@ class Thread {
return fraction($this->filex, $this->filey, ':'); return fraction($this->filex, $this->filey, ':');
} }
public function build($index=false) { public function build($index=false, $isnoko50=false) {
global $board, $config, $debug; global $board, $config, $debug;
$built = Element('post_thread.html', array('config' => $config, 'board' => $board, 'post' => &$this, 'index' => $index)); $hasnoko50 = $this->postCount() >= $config['noko50_min'];
$built = Element('post_thread.html', array('config' => $config, 'board' => $board, 'post' => &$this, 'index' => $index, 'hasnoko50' => $hasnoko50, 'isnoko50' => $isnoko50));
return $built; return $built;
} }

107
inc/functions.php

@ -107,7 +107,10 @@ function loadConfig() {
'|' . '|' .
str_replace('%s', $config['board_regex'], preg_quote($config['board_path'], '/')) . str_replace('%s', $config['board_regex'], preg_quote($config['board_path'], '/')) .
preg_quote($config['dir']['res'], '/') . preg_quote($config['dir']['res'], '/') .
str_replace('%d', '\d+', preg_quote($config['file_page'], '/')) . '(' .
str_replace('%d', '\d+', preg_quote($config['file_page'], '/')) . '|' .
str_replace('%d', '\d+', preg_quote($config['file_page50'], '/')) .
')' .
'|' . '|' .
preg_quote($config['file_mod'], '/') . '\?\/.+' . preg_quote($config['file_mod'], '/') . '\?\/.+' .
')([#?](.+)?)?$/ui'; ')([#?](.+)?)?$/ui';
@ -950,6 +953,7 @@ function deletePost($id, $error_if_doesnt_exist=true, $rebuild_after=true) {
if (!$post['thread']) { if (!$post['thread']) {
// Delete thread HTML page // Delete thread HTML page
file_unlink($board['dir'] . $config['dir']['res'] . sprintf($config['file_page'], $post['id'])); file_unlink($board['dir'] . $config['dir']['res'] . sprintf($config['file_page'], $post['id']));
file_unlink($board['dir'] . $config['dir']['res'] . sprintf($config['file_page50'], $post['id']));
$antispam_query = prepare('DELETE FROM ``antispam`` WHERE `board` = :board AND `thread` = :thread'); $antispam_query = prepare('DELETE FROM ``antispam`` WHERE `board` = :board AND `thread` = :thread');
$antispam_query->bindValue(':board', $board['uri']); $antispam_query->bindValue(':board', $board['uri']);
@ -1744,6 +1748,8 @@ function buildThread($id, $return = false, $mod = false) {
// Check if any posts were found // Check if any posts were found
if (!isset($thread)) if (!isset($thread))
error($config['error']['nonexistant']); error($config['error']['nonexistant']);
$hasnoko50 = $thread->postCount() >= $config['noko50_min'];
$body = Element('thread.html', array( $body = Element('thread.html', array(
'board' => $board, 'board' => $board,
@ -1752,6 +1758,8 @@ function buildThread($id, $return = false, $mod = false) {
'config' => $config, 'config' => $config,
'id' => $id, 'id' => $id,
'mod' => $mod, 'mod' => $mod,
'hasnoko50' => $hasnoko50,
'isnoko50' => false,
'antibot' => $mod ? false : create_antibot($board['uri'], $id), 'antibot' => $mod ? false : create_antibot($board['uri'], $id),
'boardlist' => createBoardlist($mod), 'boardlist' => createBoardlist($mod),
'return' => ($mod ? '?' . $board['url'] . $config['file_index'] : $config['root'] . $board['dir'] . $config['file_index']) 'return' => ($mod ? '?' . $board['url'] . $config['file_index'] : $config['root'] . $board['dir'] . $config['file_index'])
@ -1760,10 +1768,103 @@ function buildThread($id, $return = false, $mod = false) {
if ($config['try_smarter'] && !$mod) if ($config['try_smarter'] && !$mod)
$build_pages[] = thread_find_page($id); $build_pages[] = thread_find_page($id);
if ($return) if ($return) {
return $body; return $body;
} else {
$noko50fn = $board['dir'] . $config['dir']['res'] . sprintf($config['file_page50'], $id);
if ($hasnoko50 || file_exists($noko50fn)) {
buildThread50($id, $return, $mod, $thread);
}
file_write($board['dir'] . $config['dir']['res'] . sprintf($config['file_page'], $id), $body);
}
}
function buildThread50($id, $return = false, $mod = false, $thread = null) {
global $board, $config, $build_pages;
$id = round($id);
if (event('build-thread', $id))
return;
if (!$thread) {
$query = prepare(sprintf("SELECT * FROM ``posts_%s`` WHERE (`thread` IS NULL AND `id` = :id) OR `thread` = :id ORDER BY `thread`,`id` DESC LIMIT :limit", $board['uri']));
$query->bindValue(':id', $id, PDO::PARAM_INT);
$query->bindValue(':limit', $config['noko50_count']+1, PDO::PARAM_INT);
$query->execute() or error(db_error($query));
$num_images = 0;
while ($post = $query->fetch(PDO::FETCH_ASSOC)) {
if (!isset($thread)) {
$thread = 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 ? '?/' : $config['root'], $mod
);
} else {
if ($post['file'])
$num_images++;
$thread->add(new Post(
$post['id'], $thread->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['embed'], $mod ? '?/' : $config['root'], $mod)
);
}
}
// Check if any posts were found
if (!isset($thread))
error($config['error']['nonexistant']);
if ($query->rowCount() == $config['noko50_count']+1) {
$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->bindValue(':thread', $id, PDO::PARAM_INT);
$count->execute() or error(db_error($count));
$c = $count->fetch();
$thread->omitted = $c['num'] - $config['noko50_count'];
$c = $count->fetch();
$thread->omitted_images = $c['num'] - $num_images;
}
$thread->posts = array_reverse($thread->posts);
} else {
$allPosts = $thread->posts;
$thread->posts = array_slice($allPosts, -$config['noko50_count']);
$thread->omitted += count($allPosts) - count($thread->posts);
foreach ($allPosts as $index => $post) {
if ($index == count($allPosts)-count($thread->posts))
break;
if ($post->file)
$thread->omitted_images++;
}
}
file_write($board['dir'] . $config['dir']['res'] . sprintf($config['file_page'], $id), $body); $hasnoko50 = $thread->postCount() >= $config['noko50_min'];
$body = Element('thread.html', array(
'board' => $board,
'thread' => $thread,
'body' => $thread->build(false, true),
'config' => $config,
'id' => $id,
'mod' => $mod,
'hasnoko50' => $hasnoko50,
'isnoko50' => true,
'antibot' => $mod ? false : create_antibot($board['uri'], $id),
'boardlist' => createBoardlist($mod),
'return' => ($mod ? '?' . $board['url'] . $config['file_index'] : $config['root'] . $board['dir'] . $config['file_index'])
));
if ($return) {
return $body;
} else {
file_write($board['dir'] . $config['dir']['res'] . sprintf($config['file_page50'], $id), $body);
}
} }
function rrmdir($dir) { function rrmdir($dir) {

10
inc/mod/pages.php

@ -705,6 +705,16 @@ function mod_view_thread($boardName, $thread) {
echo $page; echo $page;
} }
function mod_view_thread50($boardName, $thread) {
global $config, $mod;
if (!openBoard($boardName))
error($config['error']['noboard']);
$page = buildThread50($thread, true, $mod);
echo $page;
}
function mod_ip_remove_note($ip, $id) { function mod_ip_remove_note($ip, $id) {
global $config, $mod; global $config, $mod;

2
mod.php

@ -90,6 +90,8 @@ $pages = array(
'/(\%b)/' => 'view_board', '/(\%b)/' => 'view_board',
'/(\%b)/' . preg_quote($config['file_index'], '!') => 'view_board', '/(\%b)/' . preg_quote($config['file_index'], '!') => 'view_board',
'/(\%b)/' . str_replace('%d', '(\d+)', preg_quote($config['file_page'], '!')) => 'view_board', '/(\%b)/' . str_replace('%d', '(\d+)', preg_quote($config['file_page'], '!')) => 'view_board',
'/(\%b)/' . preg_quote($config['dir']['res'], '!') .
str_replace('%d', '(\d+)', preg_quote($config['file_page50'], '!')) => 'view_thread50',
'/(\%b)/' . preg_quote($config['dir']['res'], '!') . '/(\%b)/' . preg_quote($config['dir']['res'], '!') .
str_replace('%d', '(\d+)', preg_quote($config['file_page'], '!')) => 'view_thread', str_replace('%d', '(\d+)', preg_quote($config['file_page'], '!')) => 'view_thread',
); );

14
post.php

@ -656,6 +656,20 @@ if (isset($_POST['delete'])) {
if ($config['always_noko'] || $noko) { if ($config['always_noko'] || $noko) {
$redirect = $root . $board['dir'] . $config['dir']['res'] . $redirect = $root . $board['dir'] . $config['dir']['res'] .
sprintf($config['file_page'], $post['op'] ? $id:$post['thread']) . (!$post['op'] ? '#' . $id : ''); sprintf($config['file_page'], $post['op'] ? $id:$post['thread']) . (!$post['op'] ? '#' . $id : '');
if (!$post['op'] && isset($_SERVER['HTTP_REFERER'])) {
$regex = array(
'board' => str_replace('%s', '(\w{1,8})', preg_quote($config['board_path'], '/')),
'page' => str_replace('%d', '(\d+)', preg_quote($config['file_page'], '/')),
'page50' => str_replace('%d', '(\d+)', preg_quote($config['file_page50'], '/')),
'res' => preg_quote($config['dir']['res'], '/'),
);
if (preg_match('/\/' . $regex['board'] . $regex['res'] . $regex['page50'] . '([?&].*)?$/', $_SERVER['HTTP_REFERER'])) {
$redirect = $root . $board['dir'] . $config['dir']['res'] .
sprintf($config['file_page50'], $post['op'] ? $id:$post['thread']) . (!$post['op'] ? '#' . $id : '');
}
}
} else { } else {
$redirect = $root . $board['dir'] . $config['file_index']; $redirect = $root . $board['dir'] . $config['file_index'];

11
templates/post_thread.html

@ -121,7 +121,14 @@
{% endif %} {% endif %}
{% endif %} {% endif %}
{% if index %} {% if index %}
<a href="{{ post.root }}{{ board.dir }}{{ config.dir.res }}{{ config.file_page|sprintf(post.id) }}">[{% trans %}Reply{% endtrans %}]</a> <a href="{{ post.root }}{{ board.dir }}{{ config.dir.res }}{{ config.file_page|sprintf(post.id) }}">[{% trans %}View{% endtrans %}]</a>
{% endif %}
{% if isnoko50 %}
<a href="{{ post.root }}{{ board.dir }}{{ config.dir.res }}{{ config.file_page|sprintf(post.id) }}">[{% trans %}View All{% endtrans %}]</a>
{% endif %}
{% if hasnoko50 and not isnoko50 %}
{% set lastcount = config.noko50_count %}
<a href="{{ post.root }}{{ board.dir }}{{ config.dir.res }}{{ config.file_page50|sprintf(post.id) }}">[{% trans %}Last {{ lastcount }} Posts{% endtrans %}]</a>
{% endif %} {% endif %}
{{ post.postControls }} {{ post.postControls }}
</p> </p>
@ -146,7 +153,7 @@
{% plural post.omitted_images %} {% plural post.omitted_images %}
{{ count }} image replies {{ count }} image replies
{% endtrans %} {% endtrans %}
{% endif %} {% trans %}omitted. Click reply to view.{% endtrans %} {% endif %} {% trans %}omitted. Click View to see all.{% endtrans %}
</span> </span>
{% endif %} {% endif %}
{% if not index %} {% if not index %}

Loading…
Cancel
Save