From 6ff062be0eaf0dde5f3f70af1ad02da51968a27b Mon Sep 17 00:00:00 2001 From: Michael Save Date: Wed, 30 Jan 2013 04:45:38 +1100 Subject: [PATCH 01/89] Instead of showing $config['error']['malformed'] on corrupt session, just go straight to the login form --- inc/mod/auth.php | 7 +++++-- mod.php | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/inc/mod/auth.php b/inc/mod/auth.php index 8fb01ecb..b3b23553 100644 --- a/inc/mod/auth.php +++ b/inc/mod/auth.php @@ -98,8 +98,10 @@ if (isset($_COOKIE[$config['cookies']['mod']])) { // Should be username:hash:salt $cookie = explode(':', $_COOKIE[$config['cookies']['mod']]); if (count($cookie) != 3) { + // Malformed cookies destroyCookies(); - error($config['error']['malformed']); + // error($config['error']['malformed']); + mod_login(); } $query = prepare("SELECT `id`, `type`, `boards`, `password` FROM `mods` WHERE `username` = :username LIMIT 1"); @@ -111,7 +113,8 @@ if (isset($_COOKIE[$config['cookies']['mod']])) { if ($cookie[1] !== mkhash($cookie[0], $user['password'], $cookie[2])) { // Malformed cookies destroyCookies(); - error($config['error']['malformed']); + // error($config['error']['malformed']); + mod_login(); } $mod = array( diff --git a/mod.php b/mod.php index a51f4bcd..8045cf47 100644 --- a/mod.php +++ b/mod.php @@ -5,8 +5,8 @@ */ require 'inc/functions.php'; -require 'inc/mod/auth.php'; require 'inc/mod/pages.php'; +require 'inc/mod/auth.php'; // Fix for magic quotes if (get_magic_quotes_gpc()) { From 3ae53c0b782bdb2b13f9921ba069d566b608b928 Mon Sep 17 00:00:00 2001 From: Michael Save Date: Wed, 30 Jan 2013 05:07:09 +1100 Subject: [PATCH 02/89] ... --- inc/mod/auth.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/inc/mod/auth.php b/inc/mod/auth.php index b3b23553..73a24c44 100644 --- a/inc/mod/auth.php +++ b/inc/mod/auth.php @@ -100,8 +100,8 @@ if (isset($_COOKIE[$config['cookies']['mod']])) { if (count($cookie) != 3) { // Malformed cookies destroyCookies(); - // error($config['error']['malformed']); mod_login(); + exit; } $query = prepare("SELECT `id`, `type`, `boards`, `password` FROM `mods` WHERE `username` = :username LIMIT 1"); @@ -113,8 +113,8 @@ if (isset($_COOKIE[$config['cookies']['mod']])) { if ($cookie[1] !== mkhash($cookie[0], $user['password'], $cookie[2])) { // Malformed cookies destroyCookies(); - // error($config['error']['malformed']); mod_login(); + exit; } $mod = array( From 642fbb6b78d5d117ce5a4386883ca2b1b078dbda Mon Sep 17 00:00:00 2001 From: Michael Save Date: Fri, 15 Mar 2013 00:40:02 +1100 Subject: [PATCH 03/89] Fix: Critical security vulnerability --- inc/mod/pages.php | 45 ++++++++++++++++++++++++++++----------------- 1 file changed, 28 insertions(+), 17 deletions(-) diff --git a/inc/mod/pages.php b/inc/mod/pages.php index 0ea97fe8..4d588030 100644 --- a/inc/mod/pages.php +++ b/inc/mod/pages.php @@ -114,26 +114,37 @@ function mod_dashboard() { } else { $ctx = stream_context_create(array('http' => array('timeout' => 5))); if ($code = @file_get_contents('http://tinyboard.org/version.txt', 0, $ctx)) { - eval($code); - if (preg_match('/v(\d+)\.(\d)\.(\d+)(-dev.+)?$/', $config['version'], $matches)) { - $current = array( - 'massive' => (int) $matches[1], - 'major' => (int) $matches[2], - 'minor' => (int) $matches[3] + $ver = strtok($code, "\n"); + + if (preg_match('@^// v(\d+)\.(\d+)\.(\d+)\s*?$@', $ver, $matches)) { + $latest = array( + 'massive' => $matches[1], + 'major' => $matches[2], + 'minor' => $matches[3] ); - if (isset($m[4])) { - // Development versions are always ahead in the versioning numbers - $current['minor'] --; - } - // Check if it's newer - if (!( $latest['massive'] > $current['massive'] || - $latest['major'] > $current['major'] || - ($latest['massive'] == $current['massive'] && - $latest['major'] == $current['major'] && - $latest['minor'] > $current['minor'] - ))) + if (preg_match('/v(\d+)\.(\d)\.(\d+)(-dev.+)?$/', $config['version'], $matches)) { + $current = array( + 'massive' => (int) $matches[1], + 'major' => (int) $matches[2], + 'minor' => (int) $matches[3] + ); + if (isset($m[4])) { + // Development versions are always ahead in the versioning numbers + $current['minor'] --; + } + // Check if it's newer + if (!( $latest['massive'] > $current['massive'] || + $latest['major'] > $current['major'] || + ($latest['massive'] == $current['massive'] && + $latest['major'] == $current['major'] && + $latest['minor'] > $current['minor'] + ))) + $latest = false; + } else { $latest = false; + } } else { + // Couldn't get latest version $latest = false; } } else { From 41b3638fbfa40462724f23139aefab81108c0fe6 Mon Sep 17 00:00:00 2001 From: Michael Save Date: Sat, 16 Mar 2013 18:27:24 +1100 Subject: [PATCH 04/89] Mod log in ?/IP (ie. ban history) --- inc/config.php | 3 +++ inc/mod/ban.php | 15 +++++++++++--- inc/mod/pages.php | 9 +++++++++ templates/mod/view_ip.html | 40 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 64 insertions(+), 3 deletions(-) diff --git a/inc/config.php b/inc/config.php index cedf3e06..8d37e601 100644 --- a/inc/config.php +++ b/inc/config.php @@ -986,6 +986,9 @@ $config['mod']['createusers'] = ADMIN; // View the moderation log $config['mod']['modlog'] = ADMIN; + // View relevant moderation log entries on IP address pages (ie. ban history, etc.) + // Warning: Can be pretty resource exhaustive if your mod logs are huge. + $config['mod']['modlog_ip'] = MOD; // Create a PM (viewing mod usernames) $config['mod']['create_pm'] = JANITOR; // Read any PM, sent to or from anybody diff --git a/inc/mod/ban.php b/inc/mod/ban.php index 9c93d70e..30234157 100644 --- a/inc/mod/ban.php +++ b/inc/mod/ban.php @@ -80,16 +80,25 @@ function ban($mask, $reason, $length, $board) { modLog('Created a new ' . ($length > 0 ? preg_replace('/^(\d+) (\w+?)s?$/', '$1-$2', until($length)) : 'permanent') . - ' ban (#' . $pdo->lastInsertId() . ') for ' . + ' ban on ' . + ($board ? '/' . $board . '/' : 'all boards') . + ' for ' . (filter_var($mask, FILTER_VALIDATE_IP) !== false ? "$mask" : utf8tohtml($mask)) . + ' (#' . $pdo->lastInsertId() . ')' . ' with ' . ($reason ? 'reason: ' . utf8tohtml($reason) . '' : 'no reason')); } -function unban($id) { +function unban($id) { + $query = prepare("SELECT `ip` FROM `bans` WHERE `id` = :id"); + $query->bindValue(':id', $id); + $query->execute() or error(db_error($query)); + $mask = $query->fetchColumn(); + $query = prepare("DELETE FROM `bans` WHERE `id` = :id"); $query->bindValue(':id', $id); $query->execute() or error(db_error($query)); - modLog("Removed ban #{$id}"); + if ($mask) + modLog("Removed ban #{$id} for " . (filter_var($mask, FILTER_VALIDATE_IP) !== false ? "$mask" : utf8tohtml($mask))); } diff --git a/inc/mod/pages.php b/inc/mod/pages.php index 4d588030..db51324a 100644 --- a/inc/mod/pages.php +++ b/inc/mod/pages.php @@ -600,6 +600,15 @@ function mod_page_ip($ip) { $args['notes'] = $query->fetchAll(PDO::FETCH_ASSOC); } + if (hasPermission($config['mod']['modlog_ip'])) { + $query = prepare("SELECT `username`, `mod`, `ip`, `board`, `time`, `text` FROM `modlogs` LEFT JOIN `mods` ON `mod` = `mods`.`id` WHERE `text` LIKE :search ORDER BY `time` DESC LIMIT 20"); + $query->bindValue(':search', '%' . $ip . '%'); + $query->execute() or error(db_error($query)); + $args['logs'] = $query->fetchAll(PDO::FETCH_ASSOC); + } else { + $args['logs'] = array(); + } + mod_page(sprintf('%s: %s', _('IP'), $ip), 'mod/view_ip.html', $args, $args['hostname']); } diff --git a/templates/mod/view_ip.html b/templates/mod/view_ip.html index c49880ae..562a0140 100644 --- a/templates/mod/view_ip.html +++ b/templates/mod/view_ip.html @@ -161,3 +161,43 @@ {% include 'mod/ban_form.html' %} {% endif %} + +{% if logs|count > 0 %} +
+ History + + + + + + + + {% for log in logs %} + + + + + + + {% endfor %} +
{% trans 'Staff' %}{% trans 'Time' %}{% trans 'Board' %}{% trans 'Action' %}
+ {% if log.username %} + {{ log.username|e }} + {% elseif log.mod == -1 %} + system + {% else %} + {% trans 'deleted?' %} + {% endif %} + + {{ log.time|ago }} + + {% if log.board %} + {{ config.board_abbreviation|sprintf(log.board) }} + {% else %} + - + {% endif %} + + {{ log.text }} +
+
+{% endif %} From 0b4487aafafef3d54d66c1610d26a6731742c024 Mon Sep 17 00:00:00 2001 From: Fredrick Date: Sun, 17 Mar 2013 07:00:55 -0400 Subject: [PATCH 05/89] Fix truncation issue by no longer using HTML entities for Unicode characters --- inc/functions.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inc/functions.php b/inc/functions.php index 16b16901..cd079141 100644 --- a/inc/functions.php +++ b/inc/functions.php @@ -1494,7 +1494,7 @@ function markup(&$body, $track_cites = false) { } function utf8tohtml($utf8) { - return mb_encode_numericentity(htmlspecialchars($utf8, ENT_NOQUOTES, 'UTF-8'), array(0x80, 0xffff, 0, 0xffff), 'UTF-8'); + return htmlspecialchars($utf8, ENT_NOQUOTES, 'UTF-8'); } function buildThread($id, $return=false, $mod=false) { From 6aa29360328877bed73e57f58f26f33dd4524e54 Mon Sep 17 00:00:00 2001 From: undido Date: Wed, 20 Mar 2013 00:56:59 -0300 Subject: [PATCH 06/89] Update auto-reload.js check if viewing a thread or viewing a board page when updating a thread so new posts do not appear at bottom of page while viewing threads list not sure if this was because of an outdated template but I thought I should point out this as it may affect html templates no matter the code as the banner code is the only code that checks where the user currently is. --- js/auto-reload.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/js/auto-reload.js b/js/auto-reload.js index c0c63056..5d96146a 100644 --- a/js/auto-reload.js +++ b/js/auto-reload.js @@ -16,6 +16,9 @@ $(document).ready(function(){ if($('div.banner').length == 0) return; // not index + + if($(".post.op").size() != 1) + return; //not thread page var poll_interval; From b09a46fe992bf38a71913294a8d153f79493e5d7 Mon Sep 17 00:00:00 2001 From: Fredrick Date: Wed, 20 Mar 2013 07:46:48 -0400 Subject: [PATCH 07/89] Fix per-board name not being used --- inc/config.php | 4 ++-- inc/mod/pages.php | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/inc/config.php b/inc/config.php index 8d37e601..8eed50fa 100644 --- a/inc/config.php +++ b/inc/config.php @@ -858,8 +858,8 @@ $config['mod']['shadow_mesage'] = 'Moved to %s.'; // Capcode to use when posting the above message. $config['mod']['shadow_capcode'] = 'Mod'; - // Name to use when posting the above message. - $config['mod']['shadow_name'] = $config['anonymous']; + // Name to use when posting the above message. If false, the default board name will be used. If something else, that will be used. + $config['mod']['shadow_name'] = false; // Wait indefinitely when rebuilding everything $config['mod']['rebuild_timelimit'] = 0; diff --git a/inc/mod/pages.php b/inc/mod/pages.php index db51324a..5d736a1a 100644 --- a/inc/mod/pages.php +++ b/inc/mod/pages.php @@ -912,7 +912,7 @@ function mod_move($originBoard, $postID) { 'mod' => true, 'subject' => '', 'email' => '', - 'name' => $config['mod']['shadow_name'], + 'name' => (!$config['mod']['shadow_name'] ? $config['anonymous'] : $config['mod']['shadow_name']), 'capcode' => $config['mod']['shadow_capcode'], 'trip' => '', 'password' => '', From 5ae9fa3c1fbde87fc570f8359c23432fb719e31b Mon Sep 17 00:00:00 2001 From: undido Date: Tue, 16 Apr 2013 19:09:58 -0300 Subject: [PATCH 08/89] update to pages.php minor exploit A lot of bans can be removed from a tinyboard database because it isn't limited A staff member could select 100 users all at once with a simple javascript function and unban them all this needs to be limited because a staff member on an image board if they feel hostile they can just remove all bans on the tinyboard site easily without being limited to how many people they can unban at a time, this adds an option to limit it. --- inc/mod/pages.php | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/inc/mod/pages.php b/inc/mod/pages.php index 5d736a1a..6a780474 100644 --- a/inc/mod/pages.php +++ b/inc/mod/pages.php @@ -651,7 +651,8 @@ function mod_bans($page_no = 1) { if (preg_match('/^ban_(\d+)$/', $name, $match)) $unban[] = $match[1]; } - + if (isset($config['mod']['unban_limit'])){ + if (count($unban) <= $config['mod']['unban_limit'] || $config['mod']['unban_limit'] == -1){ if (!empty($unban)) { query('DELETE FROM `bans` WHERE `id` = ' . implode(' OR `id` = ', $unban)) or error(db_error()); @@ -659,7 +660,21 @@ function mod_bans($page_no = 1) { modLog("Removed ban #{$id}"); } } + } else { + error(sprintf($config['error']['toomanyunban'], $config['mod']['unban_limit'], count($unban) )); + } + } else { + + if (!empty($unban)) { + query('DELETE FROM `bans` WHERE `id` = ' . implode(' OR `id` = ', $unban)) or error(db_error()); + + foreach ($unban as $id) { + modLog("Removed ban #{$id}"); + } + } + + } header('Location: ?/bans', true, $config['redirect_http']); } From cd3a05a9d119e9559e568e4182635236d9238c3b Mon Sep 17 00:00:00 2001 From: undido Date: Tue, 16 Apr 2013 19:14:51 -0300 Subject: [PATCH 09/89] update config.php config for unban limit Adding config and error for unban list when a user tries to unban more users than they are allowed too. --- inc/config.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/inc/config.php b/inc/config.php index 8eed50fa..900d540a 100644 --- a/inc/config.php +++ b/inc/config.php @@ -686,6 +686,7 @@ $config['error']['captcha'] = _('You seem to have mistyped the verification.'); // Moderator errors + $config['error']['toomanyunban'] = _('You are only allowed to unban %s users at a time. You tried to unban %u users.'); $config['error']['invalid'] = _('Invalid username and/or password.'); $config['error']['notamod'] = _('You are not a mod…'); $config['error']['invalidafter'] = _('Invalid username and/or password. Your user may have been deleted or changed.'); @@ -768,6 +769,9 @@ * Mod settings * ==================== */ + + // Limit how many bans can be removed via the ban list. (Set too -1 to remove limit.) + $config['mod']['unban_limit'] = 5; // Whether or not to lock moderator sessions to the IP address that was logged in with. $config['mod']['lock_ip'] = true; From c748d9330f401ddb6e1c9bdf88ed07abf238cec1 Mon Sep 17 00:00:00 2001 From: czaks Date: Sun, 26 May 2013 17:52:33 -0400 Subject: [PATCH 10/89] vichan specific fix to facilitate using "." and "+" in boardnames --- mod.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mod.php b/mod.php index c0614754..6257fe53 100644 --- a/mod.php +++ b/mod.php @@ -45,7 +45,7 @@ $pages = array( '/news/(\d+)' => 'news', // view news '/news/delete/(\d+)' => 'news_delete', // delete from news - '/edit/(\w+)' => 'edit_board', // edit board details + '/edit/([\w+.]+)' => 'edit_board', // edit board details '/new-board' => 'new_board', // create a new board '/rebuild' => 'rebuild', // rebuild static files From 29ce033add1bb5fc71815403e485c8cd54c03f5f Mon Sep 17 00:00:00 2001 From: Riku Rouvila Date: Wed, 2 Jan 2013 19:40:30 +0200 Subject: [PATCH 11/89] Here we go --- info.php | 53 ++++++++++++++++++++++++++ theme.php | 111 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ thumb.png | Bin 0 -> 15123 bytes ukko.js | 37 ++++++++++++++++++ 4 files changed, 201 insertions(+) create mode 100644 info.php create mode 100644 theme.php create mode 100644 thumb.png create mode 100644 ukko.js diff --git a/info.php b/info.php new file mode 100644 index 00000000..34d59d4e --- /dev/null +++ b/info.php @@ -0,0 +1,53 @@ + 'Board name', + 'name' => 'title', + 'type' => 'text', + 'default' => 'Ukko' + ); + $theme['config'][] = Array( + 'title' => 'Board URI', + 'name' => 'uri', + 'type' => 'text', + 'comment' => '(ukko for example)' + ); + $theme['config'][] = Array( + 'title' => 'Subtitle', + 'name' => 'subtitle', + 'type' => 'text', + 'comment' => '(%s = thread limit. for example "%s freshly bumped threads")' + ); + $theme['config'][] = Array( + 'title' => 'Excluded boards', + 'name' => 'exclude', + 'type' => 'text', + 'comment' => '(space seperated)' + ); + $theme['config'][] = Array( + 'title' => 'Number of threads', + 'name' => 'thread_limit', + 'type' => 'text', + 'default' => '15', + ); + // Unique function name for building everything + $theme['build_function'] = 'ukko_build'; + $theme['install_callback'] = 'ukko_install'; + + if(!function_exists('ukko_install')) { + function ukko_install($settings) { + if (!file_exists($settings['uri'])) + @mkdir($settings['uri'], 0777) or error("Couldn't create " . $settings['uri'] . ". Check permissions.", true); + } + } + diff --git a/theme.php b/theme.php new file mode 100644 index 00000000..6fa5fa7e --- /dev/null +++ b/theme.php @@ -0,0 +1,111 @@ +settings = $settings; + $ukko->build(); + } + + class ukko { + public $settings; + public function build($mod = false) { + global $config; + $boards = listBoards(); + + $body = ''; + $overflow = array(); + $board = array( + 'url' => $this->settings['uri'], + 'name' => $this->settings['title'], + 'title' => sprintf($this->settings['subtitle'], $this->settings['thread_limit']) + ); + + $query = ''; + foreach($boards as &$_board) { + if(in_array($_board['uri'], explode(' ', $this->settings['exclude']))) + continue; + $query .= sprintf("SELECT *, '%s' AS `board` FROM `posts_%s` WHERE `thread` IS NULL UNION ALL ", $_board['uri'], $_board['uri']); + } + $query = preg_replace('/UNION ALL $/', 'ORDER BY `bump` DESC', $query); + $query = query($query) or error(db_error()); + + $count = 0; + $threads = array(); + while($post = $query->fetch()) { + + if(!isset($threads[$post['board']])) { + $threads[$post['board']] = 1; + } else { + $threads[$post['board']] += 1; + } + + if($count < $this->settings['thread_limit']) { + openBoard($post['board']); + $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 + ); + + $posts = prepare(sprintf("SELECT * FROM `posts_%s` WHERE `thread` = :id ORDER BY `id` DESC LIMIT :limit", $post['board'])); + $posts->bindValue(':id', $post['id']); + $posts->bindValue(':limit', ($post['sticky'] ? $config['threads_preview_sticky'] : $config['threads_preview']), PDO::PARAM_INT); + $posts->execute() or error(db_error($posts)); + + $num_images = 0; + while ($po = $posts->fetch()) { + if ($po['file']) + $num_images++; + + $thread->add(new Post( + $po['id'], $post['id'], $po['subject'], $po['email'], $po['name'], $po['trip'], $po['capcode'], $po['body'], $po['time'], + $po['thumb'], $po['thumbwidth'], $po['thumbheight'], $po['file'], $po['filewidth'], $po['fileheight'], $po['filesize'], + $po['filename'], $po['ip'], $po['embed'], $mod ? '?/' : $config['root'], $mod) + ); + + } + if ($posts->rowCount() == ($post['sticky'] ? $config['threads_preview_sticky'] : $config['threads_preview'])) { + $ct = 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", $post['board'], $post['board'])); + $ct->bindValue(':thread', $post['id'], PDO::PARAM_INT); + $ct->execute() or error(db_error($count)); + + $c = $ct->fetch(); + $thread->omitted = $c['num'] - ($post['sticky'] ? $config['threads_preview_sticky'] : $config['threads_preview']); + + $c = $ct->fetch(); + $thread->omitted_images = $c['num'] - $num_images; + } + + + $thread->posts = array_reverse($thread->posts); + $body .= '

/' . $post['board'] . '/

'; + $body .= $thread->build(true); + } else { + $page = 'index'; + if(floor($threads[$post['board']] / $config['threads_per_page']) > 0) { + $page = floor($threads[$post['board']] / $config['threads_per_page']) + 1; + } + $overflow[] = array('id' => $post['id'], 'board' => $post['board'], 'page' => $page . '.html'); + } + + $count += 1; + } + + $body .= ''; + $body .= ''; + + file_write($this->settings['uri'] . '/index.html', Element('index.html', array( + 'config' => $config, + 'board' => $board, + 'no_post_form' => true, + 'body' => $body, + 'boardlist' => createBoardlist($mod) + ))); + + file_write($this->settings['uri'] . '/ukko.js', Element('themes/ukko/ukko.js', array())); + } + + }; + +?> diff --git a/thumb.png b/thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..49c4237bde9f837b8fe98234d37afbee703dd2f0 GIT binary patch literal 15123 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 B5)S|X literal 0 HcmV?d00001 diff --git a/ukko.js b/ukko.js new file mode 100644 index 00000000..baf0f78d --- /dev/null +++ b/ukko.js @@ -0,0 +1,37 @@ +var cache = new Array(), + thread = false, + loading = false; +$(document).ready(function() { + $(window).on('scroll', function() { + if($(window).scrollTop() + $(window).height() + 100 > $(document).height() && !loading && overflow.length > 0) { + var page = '../' + overflow[0].board + '/' + overflow[0].page; + if($.inArray(page, cache) != -1) { + thread = $('div#thread_' + overflow[0].id); + if(thread.length > 0) { + thread.prepend('

/' + overflow[0].board + '/

'); + $('div[id*="thread_"]').last().after(thread.attr('data-board', overflow[0].board).css('display', 'block')); + overflow.shift(); + } + } else { + loading = true; + $.get(page, function(data) { + cache.push(page); + + $(data).find('div[id*="thread_"]').each(function() { + $('body').prepend($(this).css('display', 'none').attr('data-board', overflow[0].board)); + }); + + thread = $('div#thread_' + overflow[0].id + '[data-board="' + overflow[0].board + '"]'); + if(thread.length > 0) { + thread.prepend('

/' + overflow[0].board + '/

'); + $('div[id*="thread_"]').last().after(thread.attr('data-board', overflow[0].board).css('display', 'block')); + overflow.shift(); + } + + loading = false; + }); + } + } + }); + +}); \ No newline at end of file From be7df18e4de04cddd88fb5ccda9620a32d16e01b Mon Sep 17 00:00:00 2001 From: czaks Date: Sun, 26 May 2013 18:03:20 -0400 Subject: [PATCH 12/89] Moved ukko to a proper location --- info.php => templates/themes/ukko/info.php | 0 theme.php => templates/themes/ukko/theme.php | 0 thumb.png => templates/themes/ukko/thumb.png | Bin ukko.js => templates/themes/ukko/ukko.js | 0 4 files changed, 0 insertions(+), 0 deletions(-) rename info.php => templates/themes/ukko/info.php (100%) rename theme.php => templates/themes/ukko/theme.php (100%) rename thumb.png => templates/themes/ukko/thumb.png (100%) rename ukko.js => templates/themes/ukko/ukko.js (100%) diff --git a/info.php b/templates/themes/ukko/info.php similarity index 100% rename from info.php rename to templates/themes/ukko/info.php diff --git a/theme.php b/templates/themes/ukko/theme.php similarity index 100% rename from theme.php rename to templates/themes/ukko/theme.php diff --git a/thumb.png b/templates/themes/ukko/thumb.png similarity index 100% rename from thumb.png rename to templates/themes/ukko/thumb.png diff --git a/ukko.js b/templates/themes/ukko/ukko.js similarity index 100% rename from ukko.js rename to templates/themes/ukko/ukko.js From 9edcdb077cc0715c45c8ae0a015b56ca95213433 Mon Sep 17 00:00:00 2001 From: lanc33 Date: Wed, 29 May 2013 19:16:37 -0300 Subject: [PATCH 13/89] Fixes #59 by making quick-reply.js agnostic to the value of $config['button_reply']. --- js/quick-reply.js | 2 +- templates/index.html | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/js/quick-reply.js b/js/quick-reply.js index dc48a743..bc36ca48 100644 --- a/js/quick-reply.js +++ b/js/quick-reply.js @@ -17,7 +17,7 @@ $(document).ready(function(){ return; // not index txt_new_topic = $('form[name=post] input[type=submit]').val(); - txt_new_reply = txt_new_topic == 'Submit' ? txt_new_topic : 'New Reply'; + txt_new_reply = txt_new_topic == 'Submit' ? txt_new_topic : new_reply_string; undo_quick_reply = function() { $('div.banner').remove(); diff --git a/templates/index.html b/templates/index.html index 761227ed..112756d1 100644 --- a/templates/index.html +++ b/templates/index.html @@ -10,6 +10,11 @@ {% if config.default_stylesheet.1 != '' %}{% endif %} {% if not nojavascript %} + {% if config.quick_reply %} + + {% endif %} {% if not config.additional_javascript_compile %} {% for javascript in config.additional_javascript %}{% endfor %} {% endif %} From 29d900ea95145e0bee759ffa9ce27d15695ab048 Mon Sep 17 00:00:00 2001 From: czaks Date: Fri, 14 Jun 2013 23:57:04 -0400 Subject: [PATCH 14/89] generic boardlist for overboard --- templates/boardlist.html | 1 + 1 file changed, 1 insertion(+) create mode 100644 templates/boardlist.html diff --git a/templates/boardlist.html b/templates/boardlist.html new file mode 100644 index 00000000..62646845 --- /dev/null +++ b/templates/boardlist.html @@ -0,0 +1 @@ +I'm your overboard boardlist. You can put here anything and I reside in templates/boardlist.html From 1f35fa8bac82160f108610d437fa0c8a940c835b Mon Sep 17 00:00:00 2001 From: czaks Date: Sat, 15 Jun 2013 00:04:08 -0400 Subject: [PATCH 15/89] overboard: missed templates/index.html --- templates/index.html | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/templates/index.html b/templates/index.html index eaed3666..059abc5e 100644 --- a/templates/index.html +++ b/templates/index.html @@ -20,7 +20,11 @@ {% include 'attention_bar.html' %} - {% include 'post_form.html' %} + {% if not no_post_form %} + {% include 'post_form.html' %} + {% else %} + {% include 'boardlist.html' %} + {% endif %} {% if config.blotter %}
{{ config.blotter }}
{% endif %}
From 588a915c402727a94e7fb0d2447df0b3ab3d92bf Mon Sep 17 00:00:00 2001 From: czaks Date: Sat, 15 Jun 2013 00:22:13 -0400 Subject: [PATCH 16/89] header abstraction: abstracted also in thread.html --- templates/page.html | 2 +- templates/thread.html | 28 +--------------------------- 2 files changed, 2 insertions(+), 28 deletions(-) diff --git a/templates/page.html b/templates/page.html index 6e7a8a18..07eea62e 100644 --- a/templates/page.html +++ b/templates/page.html @@ -1,8 +1,8 @@ - {% include 'header.html' %} + {% include 'header.html' %} {{ title }} diff --git a/templates/thread.html b/templates/thread.html index 0997f668..4e2a95a1 100644 --- a/templates/thread.html +++ b/templates/thread.html @@ -2,34 +2,8 @@ - - {% if config.url_favicon %}{% endif %} + {% include 'header.html' %} {{ board.url }} - {{ board.name }} - - {% if config.meta_keywords %}{% endif %} - {% if config.default_stylesheet.1 != '' %}{% endif %} - - {% if not nojavascript %} - - {% if not config.additional_javascript_compile %} - {% for javascript in config.additional_javascript %}{% endfor %} - {% endif %} - {% endif %} - {% if config.recaptcha %}{% endif %} {{ boardlist.top }} From 7417980496bed03dbccebc8a693c7c84769e3ec1 Mon Sep 17 00:00:00 2001 From: czaks Date: Sat, 15 Jun 2013 00:37:12 -0400 Subject: [PATCH 17/89] inline-expanding.js: don't set max height --- js/inline-expanding.js | 1 - 1 file changed, 1 deletion(-) diff --git a/js/inline-expanding.js b/js/inline-expanding.js index f6714d7f..ec7978a7 100644 --- a/js/inline-expanding.js +++ b/js/inline-expanding.js @@ -16,7 +16,6 @@ onready(function(){ for(var i = 0; i < link.length; i++) { if(typeof link[i] == "object" && link[i].childNodes[0].src && link[i].className != 'file') { link[i].childNodes[0].style.maxWidth = '95%'; - link[i].childNodes[0].style.maxHeight = '95%'; link[i].onclick = function(e) { if(e.which == 2) { return true; From e2d6a0c1467013e3c149c7528e823e6771f85ecb Mon Sep 17 00:00:00 2001 From: czaks Date: Sat, 15 Jun 2013 01:36:30 -0400 Subject: [PATCH 18/89] stylesheets: add photon.css by Turanga --- stylesheets/photon.css | 321 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 321 insertions(+) create mode 100644 stylesheets/photon.css diff --git a/stylesheets/photon.css b/stylesheets/photon.css new file mode 100644 index 00000000..09735d5c --- /dev/null +++ b/stylesheets/photon.css @@ -0,0 +1,321 @@ +/*https://github.com/turanga/Tinyboard/blob/efe78b81c1ffca32bcf9601d0e3877bb65c70df1/stylesheets/photon.css*/ + + +.floatiframe{ +float:left; +padding:10px; +} + + +div.boardlist { + color: #8899AA; + font-size: 12pt; + margin-top: 0px; + background-color: #DDDDDD; + border: 1px solid #cccccc; + border-radius: 4px 4px 4px 4px; + margin-top: 0; + padding: 10px; + position: fixed; + top: 0; +} +div.boardlist.bottom { + margin-top: 20px; + position: inherit; + background:inherit; +} + + + +.return1 a{ +float:left; +font-size: inherit; + +} + +div.blotter { + background: none repeat scroll 0 0 #DDDDDD; + border: 1px solid #CCCCCC; + border-radius: 5px 5px 5px 5px; + clear: both; + color: #006AB9; + font-weight: bold; + margin-bottom: 0.5em; + padding: 2px; + text-align: center; +} + + + +div.title { + margin-bottom: 0em; + clear: both; + color: #FFAB3F; + font-size: 2em; + font-weight: bold; + +} + +div.ban h2 { + border-radius: 6px 6px 6px 6px; +} + +div.ban { + background: none repeat scroll 0 0 #DDDDDD; + border: 1px solid #CCCCCC; + margin: 30px auto; + max-width: 700px; + border-radius: 7px; + +} + +form { + margin-bottom: 0px; +} + + +form { + margin-bottom: 0px; +} + +span.heading { + color: #FFAB3F; + display: block; + font-size: 12pt; + font-weight: bold; +} + +textarea#body{ + height: 136px; + width: 518px; +} + + + +html, body { + background: none; + background-color: #EEEEEE; + color: #333333; + font-family: "Trebuchet MS",Trebuchet,serif; + font-size: 12pt; +} +a { + color: #FF6600; +} +a:hover { + color: #0066FF; +} +.adminbar { + clear:both; + float:right; + font-size: .8em; +} +.adminbar a { + font-weight: bold; +} +.logo { + clear:both; + text-align:left; + font-size:2em; + font-weight: bold; + color:#FF6600; + /*width:100%;*/ +} +.theader, .passvalid { + background:#DDDDDD; + text-align:center; + padding:2px; + color:#2266AA; + clear: both; + font-weight: bold; + margin-bottom: .5em; + border: solid 1px #CCCCCC; + -moz-border-radius: 5px; +} +.postarea { +} +.rules { + font-size:0.7em; +} +.postblock { + background:transparent; + color:#002244; + font-weight:bold; +} +.footer { + text-align:center; + font-size:12px; + font-family:serif; + margin: 2em 0 0 0; +} +.dellist { + font-weight: bold; + text-align:center; +} +.delbuttons { + text-align:center; + padding-bottom:4px; +} +.managehead { + background:#DDDDDD; + color:#002244; + padding:0px; +} +.postlists { + background:#FFFFFF; + width:100%; + padding:0px; + color:#800000; +} +.row1 { + background:#DDDDDD; + color:#002244; +} +.row2 { + background:#CCCCCC; + color:#002244; +} +.unkfunc { + background:inherit; + color:#789922; +} +.reflink { + font-size: .8em; + font-weight: bold; +} +.filesize { + text-decoration:none; + color: #666666; + font-size: .8em; +} +.filetitle { + background:inherit; + font-size:1.2em; + color:#002244; + font-weight:bold; +} +.postername { + color:#004A99; + font-weight:bold; +} +.postertrip { + color:#FF3300; +} +.oldpost { + color:#CC1105; + font-weight:bold; +} +.omittedposts { + color:#666666; +} +.reply { + background:#DDDDDD; + border: solid 1px #CCCCCC; + padding: 0; + margin: 0; + -moz-border-radius: 5px; +} +blockquote { + margin: .5em .5em .5em 1em; +} +blockquote p { + margin: 0; + padding: 0; +} +.reply blockquote { + margin: .5em; +} +.doubledash { + display: none; + vertical-align:top; + clear:both; + float:left; +} +.replytitle { + font-size: 1.2em; + color:#002244; + font-weight:bold; +} +.commentpostername { + color:#004A99; + font-weight:800; +} +.thumbnailmsg { + font-size: .8em; + color:#666666; +} +hr { + border-style: solid none none none; + border-width: 1px; + border-color: #BBBBBB; +} +table { + border-style: none; +} +table td { + border-style: none; +} +.nothumb { + background-color: #FFFFFF; + border-style: dotted; + margin: .3em .5em; +} + +.abbrev { + color:#666666; +} +.highlight { + background:#EEDACB; + color:#333333; + border: 2px dashed #EE6600; +} + + +div.banner, div.banner a { + color: inherit; +} +div.banner { + background-color: inherit; +} +form table tr th { + background: none; +} + +div.post.reply { + background: none repeat scroll 0 0 #DDDDDD; + border: 1px solid #CCCCCC; + border-radius: 5px 5px 5px 5px; +} +div.title,h1 { + color: #FF6600; + font-size: 32px; + font-weight: bold; +} +div.title p { + font-size: 26px; + margin: 0; +} + +h1 { + letter-spacing: inherit; +} + +div.banner { + background: none repeat scroll 0 0 #DDDDDD; + border: 1px solid #CCCCCC; + border-radius: 5px 5px 5px 5px; + clear: both; + color: #2266AA; + font-weight: bold; + margin-bottom: 0.5em; + padding: 2px; + text-align: center; +} + +form table tr td div { + padding-left: 0px; + +} +.recaptchatable .recaptcha_image_cell { + padding: 0px !important; +} From ab146f39c377c50223fd4a9909fdb86d8f1b428a Mon Sep 17 00:00:00 2001 From: czaks Date: Sat, 15 Jun 2013 01:39:39 -0400 Subject: [PATCH 19/89] javascripts: fixed interactions (BEWARE, inline-expanding.js now requires jquery! fix your configs) --- js/expand.js | 1 + js/inline-expanding.js | 59 ++++++++++++++++++++++++------------------ js/show-backlinks.js | 4 +++ 3 files changed, 39 insertions(+), 25 deletions(-) diff --git a/js/expand.js b/js/expand.js index 05aece95..d78cea9a 100644 --- a/js/expand.js +++ b/js/expand.js @@ -35,6 +35,7 @@ $(document).ready(function(){ } last_expanded = $(this); + $(document).trigger('new_post', this); } }); $('Hide expanded replies.') diff --git a/js/inline-expanding.js b/js/inline-expanding.js index ec7978a7..ef84e806 100644 --- a/js/inline-expanding.js +++ b/js/inline-expanding.js @@ -6,41 +6,50 @@ * Copyright (c) 2012 Michael Save * * Usage: + * $config['additional_javascript'][] = 'js/jquery.min.js'; * $config['additional_javascript'][] = 'js/inline-expanding.js'; * */ onready(function(){ - var link = document.getElementsByTagName('a'); + var inline_expand_post = function() { + var link = this.getElementsByTagName('a'); - for(var i = 0; i < link.length; i++) { - if(typeof link[i] == "object" && link[i].childNodes[0].src && link[i].className != 'file') { - link[i].childNodes[0].style.maxWidth = '95%'; - link[i].onclick = function(e) { - if(e.which == 2) { - return true; - } - if(!this.tag) { - this.tag = this.childNodes[0].src; - this.childNodes[0].src = this.href; - this.childNodes[0].style.width = 'auto'; - this.childNodes[0].style.height = 'auto'; - this.childNodes[0].style.opacity = '0.4'; - this.childNodes[0].style.filter = 'alpha(opacity=40)'; - this.childNodes[0].onload = function() { - this.style.opacity = '1'; - this.style.filter = ''; + for(var i = 0; i < link.length; i++) { + if(typeof link[i] == "object" && link[i].childNodes[0].src && link[i].className != 'file') { + link[i].childNodes[0].style.maxWidth = '95%'; + link[i].onclick = function(e) { + if(e.which == 2) { + return true; } - } else { - this.childNodes[0].src = this.tag; - this.childNodes[0].style.width = 'auto'; - this.childNodes[0].style.height = 'auto'; - this.tag = ''; + if(!this.tag) { + this.tag = this.childNodes[0].src; + this.childNodes[0].src = this.href; + this.childNodes[0].style.width = 'auto'; + this.childNodes[0].style.height = 'auto'; + this.childNodes[0].style.opacity = '0.4'; + this.childNodes[0].style.filter = 'alpha(opacity=40)'; + this.childNodes[0].onload = function() { + this.style.opacity = '1'; + this.style.filter = ''; + } + } else { + this.childNodes[0].src = this.tag; + this.childNodes[0].style.width = 'auto'; + this.childNodes[0].style.height = 'auto'; + this.tag = ''; + } + return false; } - return false; } - } } + + $('div[id^="thread_"]').each(inline_expand_post); + + // allow to work with auto-reload.js, etc. + $(document).bind('new_post', function(e, post) { + inline_expand_post.call(post); + }); }); diff --git a/js/show-backlinks.js b/js/show-backlinks.js index e6e17e4f..4ead494b 100644 --- a/js/show-backlinks.js +++ b/js/show-backlinks.js @@ -46,5 +46,9 @@ onready(function(){ }; $('div.post.reply').each(showBackLinks); + + $(document).bind('new_post', function(e, post) { + showBackLinks.call(post); + }); }); From 0ea05236d50934704b4d60617510c78745f42ba7 Mon Sep 17 00:00:00 2001 From: 55ch Date: Sat, 15 Jun 2013 07:07:16 -0400 Subject: [PATCH 20/89] Brazilian Portuguese translation for Tinyboard --- inc/locale/pt_BR/LC_MESSAGES/tinyboard.mo | Bin 0 -> 12327 bytes inc/locale/pt_BR/LC_MESSAGES/tinyboard.po | 844 ++++++++++++++++++++++ 2 files changed, 844 insertions(+) create mode 100644 inc/locale/pt_BR/LC_MESSAGES/tinyboard.mo create mode 100644 inc/locale/pt_BR/LC_MESSAGES/tinyboard.po diff --git a/inc/locale/pt_BR/LC_MESSAGES/tinyboard.mo b/inc/locale/pt_BR/LC_MESSAGES/tinyboard.mo new file mode 100644 index 0000000000000000000000000000000000000000..3bb6778be52ae4702ed016b249c024d500b0f3f2 GIT binary patch literal 12327 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 literal 0 HcmV?d00001 diff --git a/inc/locale/pt_BR/LC_MESSAGES/tinyboard.po b/inc/locale/pt_BR/LC_MESSAGES/tinyboard.po new file mode 100644 index 00000000..c2ad38a2 --- /dev/null +++ b/inc/locale/pt_BR/LC_MESSAGES/tinyboard.po @@ -0,0 +1,844 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-04-21 11:29-0400\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural==(n != 1);n" + +#: ../../inc/lib/gettext/examples/pigs_dropin.php:77 +msgid "" +"This is how the story goes.\n" +"\n" +msgstr "Era uma vez\n\n" + +#: ../../inc/functions.php:1046 ../../inc/functions.php:1060 +msgid "Previous" +msgstr "Anterior" + +#: ../../inc/functions.php:1065 ../../inc/functions.php:1074 +msgid "Next" +msgstr "Proximo" + +#: ../../inc/display.php:91 ../../inc/mod/pages.php:62 +msgid "Login" +msgstr "Login" + +#: ../../inc/config.php:687 +msgid "Lurk some more before posting." +msgstr "Lurke mais antes de postar." + +#: ../../inc/config.php:688 +msgid "You look like a bot." +msgstr "Você não parece humano." + +#: ../../inc/config.php:689 +msgid "Your browser sent an invalid or no HTTP referer." +msgstr "Seu browser enviou um referial HTTP inválido ou não enviou o referencial." + +#: ../../inc/config.php:690 +#, php-format +msgid "The %s field was too long." +msgstr "O campo %s é longo demais." + +#: ../../inc/config.php:691 +msgid "The body was too long." +msgstr "O corpo do texto é longo demais." + +#: ../../inc/config.php:692 +msgid "The body was too short or empty." +msgstr "O corpo do texto é pequeno demais ou inexistente." + +#: ../../inc/config.php:693 +msgid "You must upload an image." +msgstr "Você deve fazer upload de uma imagem." + +#: ../../inc/config.php:694 +msgid "The server failed to handle your upload." +msgstr "O servidor não conseguiu lidar com seu upload." + +#: ../../inc/config.php:695 +msgid "Unsupported image format." +msgstr "Tipo de imagem não aceito." + +#: ../../inc/config.php:696 +msgid "Invalid board!" +msgstr "Board inválida!" + +#: ../../inc/config.php:697 +msgid "Thread specified does not exist." +msgstr "O tópico especificado não existe.." + +#: ../../inc/config.php:698 +msgid "Thread locked. You may not reply at this time." +msgstr "Tópico trancado, você não pode postar." + +#: ../../inc/config.php:699 +msgid "You didn't make a post." +msgstr "Você não escreveu uma mensagem." + +#: ../../inc/config.php:700 +msgid "Flood detected; Post discarded." +msgstr "Flood detectado; Sua mensagem foi descartada." + +#: ../../inc/config.php:701 +msgid "Your request looks automated; Post discarded." +msgstr "Sua requisição parece automatizada; Mensagem descartada." + +#: ../../inc/config.php:702 +msgid "Unoriginal content!" +msgstr "Conteudo não original!" + +#: ../../inc/config.php:703 +#, php-format +msgid "Unoriginal content! You have been muted for %d seconds." +msgstr "Conteudo não original! Você está impedido de postar por %d segundos." + +#: ../../inc/config.php:704 +#, php-format +msgid "You are muted! Expires in %d seconds." +msgstr "Você está impedido de postar! Expira em %d segundos." + +#: ../../inc/config.php:705 +#, php-format +msgid "Your IP address is listed in %s." +msgstr "Seu IP está listado em %s." + +#: ../../inc/config.php:706 +msgid "Too many links; flood detected." +msgstr "Links demais; Flood detectado." + +#: ../../inc/config.php:707 +msgid "Too many cites; post discarded." +msgstr "Citações demais; Post descartado." + +#: ../../inc/config.php:708 +msgid "Too many cross-board links; post discarded." +msgstr "Links entre boards demais; Post descartado." + +#: ../../inc/config.php:709 +msgid "You didn't select anything to delete." +msgstr "Você não selecionou nada para deletar." + +#: ../../inc/config.php:710 +msgid "You didn't select anything to report." +msgstr "Você não selecionou nada para denunciar." + +#: ../../inc/config.php:711 +msgid "You can't report that many posts at once." +msgstr "Você não pode denunciar tantas mensagens ao mesmo tempo." + +#: ../../inc/config.php:712 +msgid "Wrong password…" +msgstr "Senha incorreta…" + +#: ../../inc/config.php:713 +msgid "Invalid image." +msgstr "Imagem inválida." + +#: ../../inc/config.php:714 +msgid "Unknown file extension." +msgstr "Extenção de arquivo desconhecida." + +#: ../../inc/config.php:715 +msgid "Maximum file size: %maxsz% bytes
Your file's size: %filesz% bytes" +msgstr "Tamanho maximo de arquivos: %maxsz% bytes
O tamanho do seu arquivo: %filesz% bytes" + +#: ../../inc/config.php:716 +msgid "The file was too big." +msgstr "Seu arquivo é grande demais." + +#: ../../inc/config.php:717 +msgid "Invalid archive!" +msgstr "Arquivo inválido!" + +#: ../../inc/config.php:718 +#, php-format +msgid "That file already exists!" +msgstr "O arquivo já existe!" + +#: ../../inc/config.php:719 +#, php-format +msgid "That file already exists in this thread!" +msgstr "O arquivo já existe neste tópico!" + +#: ../../inc/config.php:720 +#, php-format +msgid "You'll have to wait another %s before deleting that." +msgstr "Você terá que esperar %s segundos antes de deletar isso." + +#: ../../inc/config.php:721 +msgid "MIME type detection XSS exploit (IE) detected; post discarded." +msgstr "Exploit XSS do tipo MIME (IE) detectado; mensagem descartada." + +#: ../../inc/config.php:722 +msgid "Couldn't make sense of the URL of the video you tried to embed." +msgstr "Não consegui processar a URL do video que você tentou integrar" + +#: ../../inc/config.php:723 +msgid "You seem to have mistyped the verification." +msgstr "Você errou o codigo de verificação." + +#: ../../inc/config.php:726 +msgid "Invalid username and/or password." +msgstr "Login e/ou senha inválido(s)." + +#: ../../inc/config.php:727 +msgid "You are not a mod…" +msgstr "Você não é mod…" + +#: ../../inc/config.php:728 +msgid "" +"Invalid username and/or password. Your user may have been deleted or changed." +msgstr "Login e/ou senha inválido(s). Seu login deve ter sido mudado ou removido." + +#: ../../inc/config.php:729 +msgid "Invalid/malformed cookies." +msgstr "Cookies inválidos ou mal formados." + +#: ../../inc/config.php:730 +msgid "Your browser didn't submit an input when it should have." +msgstr "Seu browser não enviou uma entrada quando ele deveria." + +#: ../../inc/config.php:731 +#, php-format +msgid "The %s field is required." +msgstr "O campo %s é necessário." + +#: ../../inc/config.php:732 +#, php-format +msgid "The %s field was invalid." +msgstr "O campo %s é inválido." + +#: ../../inc/config.php:733 +#, php-format +msgid "There is already a %s board." +msgstr "A board %s já existe." + +#: ../../inc/config.php:734 +msgid "You don't have permission to do that." +msgstr "Você não tem permissão para fazer isso." + +#: ../../inc/config.php:735 +msgid "That post doesn't exist…" +msgstr "Este post já existe…" + +#: ../../inc/config.php:736 +msgid "Page not found." +msgstr "Pagina não encontrada." + +#: ../../inc/config.php:737 +#, php-format +msgid "That mod already exists!" +msgstr "Este mod já existe!" + +#: ../../inc/config.php:738 +msgid "That theme doesn't exist!" +msgstr "Este tema não existe!" + +#: ../../inc/config.php:739 +msgid "Invalid security token! Please go back and try again." +msgstr "Token de segurança inválido! Retorne e tente de novo." + +#: ../../inc/mod/pages.php:66 +msgid "Confirm action" +msgstr "Confirmar ação" + +#: ../../inc/mod/pages.php:110 +msgid "Could not find current version! (Check .installed)" +msgstr "Não foi possivel encontrar a versão atual! (Cheque o .installed)" + +#: ../../inc/mod/pages.php:151 +msgid "Dashboard" +msgstr "Dashboard" + +#: ../../inc/mod/pages.php:228 +msgid "Edit board" +msgstr "Editar board" + +#: ../../inc/mod/pages.php:261 +msgid "Couldn't open board after creation." +msgstr "Não foi possivel abrir a board após a criação." + +#: ../../inc/mod/pages.php:276 +msgid "New board" +msgstr "Nova board" + +#: ../../inc/mod/pages.php:322 +#: ../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:96 +msgid "Noticeboard" +msgstr "Quadro de noticias" + +#: ../../inc/mod/pages.php:382 +#: ../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:166 +msgid "News" +msgstr "Noticias" + +#: ../../inc/mod/pages.php:422 ../../inc/mod/pages.php:449 +#: ../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:255 +msgid "Moderation log" +msgstr "Log da moderação" + +#: ../../inc/mod/pages.php:592 +#: ../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:247 +#: ../../templates/cache/18/9c/c365d711719f494c684aab98a4ae.php:65 +msgid "IP" +msgstr "IP" + +#: ../../inc/mod/pages.php:602 ../../inc/mod/pages.php:993 +#: ../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:377 +msgid "New ban" +msgstr "Nova expulsão" + +#: ../../inc/mod/pages.php:670 +#: ../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:224 +msgid "Ban list" +msgstr "Lista de expulsões" + +#: ../../inc/mod/pages.php:765 +msgid "Target and source board are the same." +msgstr "Board alvo e fonte são as mesmas." + +#: ../../inc/mod/pages.php:927 +msgid "Impossible to move thread; there is only one board." +msgstr "Impossivel de mover o tópico; Só existe uma board." + +#: ../../inc/mod/pages.php:931 +msgid "Move thread" +msgstr "Mover tópico" + +#: ../../inc/mod/pages.php:1045 +msgid "Edit post" +msgstr "Editar mensagem" + +#: ../../inc/mod/pages.php:1271 ../../inc/mod/pages.php:1320 +msgid "Edit user" +msgstr "Editar usuário" + +#: ../../inc/mod/pages.php:1333 +#: ../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:232 +msgid "Manage users" +msgstr "Administrar usuários" + +#: ../../inc/mod/pages.php:1395 ../../inc/mod/pages.php:1467 +msgid "New PM for" +msgstr "Nova MP para" + +#: ../../inc/mod/pages.php:1399 +msgid "Private message" +msgstr "Mensagem pessoal" + +#: ../../inc/mod/pages.php:1420 +#: ../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:171 +msgid "PM inbox" +msgstr "Entrada de MP" + +#: ../../inc/mod/pages.php:1531 ../../inc/mod/pages.php:1535 +#: ../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:263 +msgid "Rebuild" +msgstr "Reconstruir" + +#: ../../inc/mod/pages.php:1621 +#: ../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:207 +msgid "Report queue" +msgstr "Fila de denuncias" + +#: ../../inc/mod/pages.php:1743 +msgid "Config editor" +msgstr "Editor de configurações" + +#: ../../inc/mod/pages.php:1753 +msgid "Themes directory doesn't exist!" +msgstr "Diretório de temas não existe!" + +#: ../../inc/mod/pages.php:1755 +msgid "Cannot open themes directory; check permissions." +msgstr "Não é possivel abrir diretorio de temas; reveja suas permissões." + +#: ../../inc/mod/pages.php:1769 +#: ../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:247 +msgid "Manage themes" +msgstr "Administrar temas" + +#: ../../inc/mod/pages.php:1831 +#, php-format +msgid "Installed theme: %s" +msgstr "Tema instalado: %s" + +#: ../../inc/mod/pages.php:1841 +#, php-format +msgid "Configuring theme: %s" +msgstr "Configurando tema: %s" + +#: ../../inc/mod/pages.php:1869 +#, php-format +msgid "Rebuilt theme: %s" +msgstr "Reconstruir tema: %s" + +#: ../../inc/mod/pages.php:1908 +msgid "Debug: Anti-spam" +msgstr "Debug: Anti-spam" + +#: ../../inc/mod/pages.php:1932 +msgid "Debug: Recent posts" +msgstr "Debug: Mensagens recentes" + +#: ../../inc/mod/pages.php:1956 +msgid "Debug: SQL" +msgstr "" + +#: ../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:19 +#: ../../templates/cache/c5/a7/fac83da087ee6e24edaf09e01122.php:29 +msgid "Boards" +msgstr "Boards" + +#: ../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:57 +#: ../../templates/cache/c5/a7/fac83da087ee6e24edaf09e01122.php:183 +msgid "edit" +msgstr "editar" + +#: ../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:74 +msgid "Create new board" +msgstr "Criar nova board" + +#: ../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:84 +msgid "Messages" +msgstr "Mensagens" + +#: ../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:120 +#: ../../templates/cache/26/6f/05ca0da8ac09e2c2216cba2b6f95.php:98 +#: ../../templates/cache/c8/8b/242bf87b3b6a29a67cdd09a3afeb.php:125 +msgid "no subject" +msgstr "sem assunto" + +#: ../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:161 +msgid "View all noticeboard entries" +msgstr "Ver todas as noticias do quadro de noticias" + +#: ../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:192 +msgid "Administration" +msgstr "Administração" + +#: ../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:239 +msgid "Change password" +msgstr "Mudar senha" + +#: ../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:271 +msgid "Configuration" +msgstr "Configuração" + +#: ../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:282 +#: ../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:293 +msgid "Search" +msgstr "Procurar" + +#: ../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:289 +msgid "Phrase:" +msgstr "Frase:" + +#: ../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:297 +msgid "" +"(Search is case-insensitive, and based on keywords. To match exact phrases, " +"use \"quotes\". Use an asterisk (*) for wildcard.)" +msgstr "" +"(A procura não diferencia maiúsculas de minusculas, e baseia-se em palavras chave. para procurar por frases exatas, " +"use \"quotes\". Utilize um asterisco (*) como coringa.)" + +#: ../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:309 +msgid "Debug" +msgstr "Debug" + +#: ../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:313 +msgid "Anti-spam" +msgstr "Anti-spam" + +#: ../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:316 +msgid "Recent posts" +msgstr "Mensagens recentes" + +#: ../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:322 +msgid "SQL" +msgstr "SQL" + +#: ../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:360 +msgid "User account" +msgstr "Conta de usuário" + +#: ../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:365 +msgid "Logout" +msgstr "Sair" + +#: ../../templates/cache/26/6f/05ca0da8ac09e2c2216cba2b6f95.php:21 +#: ../../templates/cache/c8/8b/242bf87b3b6a29a67cdd09a3afeb.php:21 +msgid "New post" +msgstr "Nova mensagem" + +#: ../../templates/cache/26/6f/05ca0da8ac09e2c2216cba2b6f95.php:27 +#: ../../templates/cache/c8/8b/242bf87b3b6a29a67cdd09a3afeb.php:31 +#: ../../templates/cache/c8/8b/242bf87b3b6a29a67cdd09a3afeb.php:36 +#: ../../templates/cache/39/42/cbc36382096edfa72a8bc26e4514.php:27 +#: ../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:55 +msgid "Name" +msgstr "Nome" + +#: ../../templates/cache/26/6f/05ca0da8ac09e2c2216cba2b6f95.php:36 +#: ../../templates/cache/c8/8b/242bf87b3b6a29a67cdd09a3afeb.php:63 +#: ../../templates/cache/39/42/cbc36382096edfa72a8bc26e4514.php:53 +#: ../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:98 +msgid "Subject" +msgstr "Assunto" + +#: ../../templates/cache/26/6f/05ca0da8ac09e2c2216cba2b6f95.php:42 +#: ../../templates/cache/c8/8b/242bf87b3b6a29a67cdd09a3afeb.php:69 +msgid "Body" +msgstr "Mensagem" + +#: ../../templates/cache/26/6f/05ca0da8ac09e2c2216cba2b6f95.php:49 +msgid "Post to noticeboard" +msgstr "Postar no quadro de notícias" + +#: ../../templates/cache/26/6f/05ca0da8ac09e2c2216cba2b6f95.php:73 +#: ../../templates/cache/c8/8b/242bf87b3b6a29a67cdd09a3afeb.php:100 +msgid "delete" +msgstr "deletar" + +#: ../../templates/cache/26/6f/05ca0da8ac09e2c2216cba2b6f95.php:106 +#: ../../templates/cache/c8/8b/242bf87b3b6a29a67cdd09a3afeb.php:133 +msgid "by" +msgstr "por" + +#: ../../templates/cache/26/6f/05ca0da8ac09e2c2216cba2b6f95.php:118 +#: ../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:112 +#: ../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:344 +msgid "deleted?" +msgstr "deletado?" + +#: ../../templates/cache/26/6f/05ca0da8ac09e2c2216cba2b6f95.php:125 +#: ../../templates/cache/c8/8b/242bf87b3b6a29a67cdd09a3afeb.php:136 +msgid "at" +msgstr "em" + +#: ../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:74 +#: ../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:169 +#: ../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:331 +msgid "Staff" +msgstr "Equipe" + +#: ../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:77 +#: ../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:179 +msgid "Note" +msgstr "Nota" + +#: ../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:80 +msgid "Date" +msgstr "Data" + +#: ../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:86 +msgid "Actions" +msgstr "Ações" + +#: ../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:142 +msgid "remove" +msgstr "remover" + +#: ../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:189 +msgid "New note" +msgstr "Nova nota" + +#: ../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:226 +msgid "Status" +msgstr "Situação" + +#: ../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:233 +msgid "Expired" +msgstr "Expirado" + +#: ../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:238 +msgid "Active" +msgstr "Ativo" + +#: ../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:256 +#: ../../templates/cache/82/40/4c4a4b82f787181e6500ce83494d.php:32 +#: ../../templates/cache/9c/7b/891291bc84f8844c30cefdb949cf.php:30 +#: ../../templates/cache/18/9c/c365d711719f494c684aab98a4ae.php:90 +msgid "Reason" +msgstr "Razão" + +#: ../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:269 +msgid "no reason" +msgstr "sem razão especificada" + +#: ../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:278 +#: ../../templates/cache/9c/7b/891291bc84f8844c30cefdb949cf.php:20 +#: ../../templates/cache/18/9c/c365d711719f494c684aab98a4ae.php:142 +msgid "Board" +msgstr "Board" + +#: ../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:291 +#: ../../templates/cache/18/9c/c365d711719f494c684aab98a4ae.php:150 +#: ../../templates/cache/c5/a7/fac83da087ee6e24edaf09e01122.php:83 +msgid "all boards" +msgstr "todas as boards" + +#: ../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:300 +msgid "Set" +msgstr "Configurar" + +#: ../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:309 +msgid "Expires" +msgstr "Expira em" + +#: ../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:322 +#: ../../templates/cache/c5/a7/fac83da087ee6e24edaf09e01122.php:137 +msgid "never" +msgstr "nunca" + +#: ../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:357 +msgid "Remove ban" +msgstr "Remover expulsão" + +#: ../../templates/cache/72/55/0d64283f30702de83ecfcb71f86a.php:25 +msgid "There are no reports." +msgstr "Não há denúncias no momento." + +#: ../../templates/cache/82/40/4c4a4b82f787181e6500ce83494d.php:19 +msgid "Delete Post" +msgstr "Deletar Mensagem" + +#: ../../templates/cache/82/40/4c4a4b82f787181e6500ce83494d.php:22 +#: ../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:218 +msgid "File" +msgstr "Arquivo" + +#: ../../templates/cache/82/40/4c4a4b82f787181e6500ce83494d.php:23 +#: ../../templates/cache/04/54/656aa217f895c90eae78024fa060.php:41 +#: ../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:310 +msgid "Password" +msgstr "Senha" + +#: ../../templates/cache/82/40/4c4a4b82f787181e6500ce83494d.php:27 +msgid "Delete" +msgstr "Deletar" + +#: ../../templates/cache/82/40/4c4a4b82f787181e6500ce83494d.php:36 +msgid "Report" +msgstr "Denunciar" + +#: ../../templates/cache/04/54/656aa217f895c90eae78024fa060.php:28 +#: ../../templates/cache/c5/a7/fac83da087ee6e24edaf09e01122.php:23 +msgid "Username" +msgstr "Usuário" + +#: ../../templates/cache/04/54/656aa217f895c90eae78024fa060.php:52 +msgid "Continue" +msgstr "Prosseguir" + +#: ../../templates/cache/f5/e3/343716327c6183713f70a3fb57f1.php:94 +#: ../../templates/cache/aa/f6/f10fd83961bcd8c947af6ddf919d.php:175 +#: ../../templates/cache/62/8c/21348d46377c3e1b3f8c476ba376.php:63 +msgid "Return to dashboard" +msgstr "Voltar à dashboard" + +#: ../../templates/cache/9c/7b/891291bc84f8844c30cefdb949cf.php:36 +msgid "Report date" +msgstr "Data da denúncia" + +#: ../../templates/cache/9c/7b/891291bc84f8844c30cefdb949cf.php:45 +msgid "Reported by" +msgstr "Denunciado por" + +#: ../../templates/cache/9c/7b/891291bc84f8844c30cefdb949cf.php:63 +msgid "Discard abuse report" +msgstr "Descartar denúncia desnecessária" + +#: ../../templates/cache/9c/7b/891291bc84f8844c30cefdb949cf.php:80 +msgid "Discard all abuse reports by this IP address" +msgstr "Descartar todas denúncias desnecessárias deste IP" + +#: ../../templates/cache/aa/f6/f10fd83961bcd8c947af6ddf919d.php:183 +msgid "Posting mode: Reply" +msgstr "Modo de postagem: Resposta" + +#: ../../templates/cache/aa/f6/f10fd83961bcd8c947af6ddf919d.php:186 +#: ../../templates/cache/aa/f6/f10fd83961bcd8c947af6ddf919d.php:232 +msgid "Return" +msgstr "Voltar" + +#: ../../templates/cache/c8/8b/242bf87b3b6a29a67cdd09a3afeb.php:76 +msgid "Post news entry" +msgstr "Postar nova notícia" + +#: ../../templates/cache/18/9c/c365d711719f494c684aab98a4ae.php:66 +msgid "(or subnet)" +msgstr "(ou subnet)" + +#: ../../templates/cache/18/9c/c365d711719f494c684aab98a4ae.php:80 +msgid "hidden" +msgstr "oculto" + +#: ../../templates/cache/18/9c/c365d711719f494c684aab98a4ae.php:107 +msgid "Message" +msgstr "Mensagem" + +#: ../../templates/cache/18/9c/c365d711719f494c684aab98a4ae.php:117 +msgid "public; attached to post" +msgstr "público; anexado à mensagem" + +#: ../../templates/cache/18/9c/c365d711719f494c684aab98a4ae.php:133 +msgid "Length" +msgstr "Tamanho" + +#: ../../templates/cache/18/9c/c365d711719f494c684aab98a4ae.php:192 +msgid "New Ban" +msgstr "Nova Expulsão" + +#: ../../templates/cache/c5/a7/fac83da087ee6e24edaf09e01122.php:20 +msgid "ID" +msgstr "ID" + +#: ../../templates/cache/c5/a7/fac83da087ee6e24edaf09e01122.php:26 +msgid "Type" +msgstr "Tipo" + +#: ../../templates/cache/c5/a7/fac83da087ee6e24edaf09e01122.php:35 +msgid "Last action" +msgstr "Ultima ação" + +#: ../../templates/cache/c5/a7/fac83da087ee6e24edaf09e01122.php:61 +msgid "Janitor" +msgstr "Faxineiro" + +#: ../../templates/cache/c5/a7/fac83da087ee6e24edaf09e01122.php:64 +msgid "Mod" +msgstr "Moderador" + +#: ../../templates/cache/c5/a7/fac83da087ee6e24edaf09e01122.php:67 +msgid "Admin" +msgstr "Administrador" + +#: ../../templates/cache/c5/a7/fac83da087ee6e24edaf09e01122.php:78 +msgid "none" +msgstr "nenhum" + +#: ../../templates/cache/c5/a7/fac83da087ee6e24edaf09e01122.php:153 +msgid "Promote" +msgstr "Promover" + +#: ../../templates/cache/c5/a7/fac83da087ee6e24edaf09e01122.php:163 +msgid "Demote" +msgstr "Rebaixar" + +#: ../../templates/cache/c5/a7/fac83da087ee6e24edaf09e01122.php:173 +msgid "log" +msgstr "registro" + +#: ../../templates/cache/c5/a7/fac83da087ee6e24edaf09e01122.php:193 +msgid "PM" +msgstr "MP" + +#: ../../templates/cache/d8/f2/7780eb1adcdbda7e332659e3fb4f.php:105 +msgid "File:" +msgstr "Arquivo:" + +#: ../../templates/cache/d8/f2/7780eb1adcdbda7e332659e3fb4f.php:117 +#: ../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:129 +msgid "Spoiler Image" +msgstr "Imagem Spoiler" + +#: ../../templates/cache/d8/f2/7780eb1adcdbda7e332659e3fb4f.php:463 +msgid "Reply" +msgstr "Responder" + +#: ../../templates/cache/d8/f2/7780eb1adcdbda7e332659e3fb4f.php:490 +msgid "1 post" +msgid_plural "%count% posts" +msgstr[0] "1 mensagem" +msgstr[1] "%count% mensagens" + +#: ../../templates/cache/d8/f2/7780eb1adcdbda7e332659e3fb4f.php:496 +msgid "and" +msgstr "e" + +#: ../../templates/cache/d8/f2/7780eb1adcdbda7e332659e3fb4f.php:507 +msgid "1 image reply" +msgid_plural "%count% image replies" +msgstr[0] "1 resposta com imagem" +msgstr[1] "%count% respostas com imagem" + +#: ../../templates/cache/d8/f2/7780eb1adcdbda7e332659e3fb4f.php:512 +msgid "omitted. Click reply to view." +msgstr "omitidas. Clique em responder para visualizar." + +#: ../../templates/cache/39/42/cbc36382096edfa72a8bc26e4514.php:40 +#: ../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:76 +msgid "Email" +msgstr "E-mail" + +#: ../../templates/cache/39/42/cbc36382096edfa72a8bc26e4514.php:62 +msgid "Update" +msgstr "Atualizar" + +#: ../../templates/cache/39/42/cbc36382096edfa72a8bc26e4514.php:69 +#: ../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:138 +msgid "Comment" +msgstr "Comentar" + +#: ../../templates/cache/39/42/cbc36382096edfa72a8bc26e4514.php:89 +msgid "Currently editing raw HTML." +msgstr "Editando em HTML puro." + +#: ../../templates/cache/39/42/cbc36382096edfa72a8bc26e4514.php:96 +msgid "Edit markup instead?" +msgstr "Editar markup em vez disso?" + +#: ../../templates/cache/39/42/cbc36382096edfa72a8bc26e4514.php:105 +msgid "Edit raw HTML instead?" +msgstr "Editar em HTML puro em vez disso?" + +#: ../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:111 +msgid "Submit" +msgstr "Enviar" + +#: ../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:159 +#: ../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:185 +msgid "Verification" +msgstr "Verification" + +#: ../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:236 +msgid "Embed" +msgstr "Inserir" + +#: ../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:259 +msgid "Flags" +msgstr "Sinalizações" + +#: ../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:268 +#: ../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:271 +msgid "Sticky" +msgstr "Fixar" + +#: ../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:280 +#: ../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:283 +msgid "Lock" +msgstr "Trancar" + +#: ../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:292 +#: ../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:295 +msgid "Raw HTML" +msgstr "HTML Puro" + +#: ../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:319 +msgid "(For file deletion.)" +msgstr "(Para excluir arquivos)" From 3d9f3183978223e972265d665fdc50cf576a7ad5 Mon Sep 17 00:00:00 2001 From: Macil Tech Date: Wed, 27 Mar 2013 22:09:39 +0800 Subject: [PATCH 21/89] Fix PM count caching. cache::get() returns null if the key wasn't found (at least when using the Redis cache backend). --- inc/mod/auth.php | 2 +- inc/mod/pages.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/inc/mod/auth.php b/inc/mod/auth.php index f594af4b..d4a2ea1c 100644 --- a/inc/mod/auth.php +++ b/inc/mod/auth.php @@ -125,7 +125,7 @@ if (isset($_COOKIE[$config['cookies']['mod']])) { function create_pm_header() { global $mod, $config; - if ($config['cache']['enabled'] && ($header = cache::get('pm_unread_' . $mod['id'])) !== false) { + if ($config['cache']['enabled'] && ($header = cache::get('pm_unread_' . $mod['id'])) != false) { if ($header === true) return false; diff --git a/inc/mod/pages.php b/inc/mod/pages.php index cf06e7d9..726ed735 100644 --- a/inc/mod/pages.php +++ b/inc/mod/pages.php @@ -89,7 +89,7 @@ function mod_dashboard() { } } - if (!$config['cache']['enabled'] || ($args['unread_pms'] = cache::get('pm_unreadcount_' . $mod['id'])) === false) { + if (!$config['cache']['enabled'] || ($args['unread_pms'] = cache::get('pm_unreadcount_' . $mod['id'])) == false) { $query = prepare('SELECT COUNT(*) FROM `pms` WHERE `to` = :id AND `unread` = 1'); $query->bindValue(':id', $mod['id']); $query->execute() or error(db_error($query)); From 8b14cbb0910b4fa3a276c5a1907fe5ad071a229e Mon Sep 17 00:00:00 2001 From: Macil Tech Date: Tue, 2 Apr 2013 17:28:04 +0800 Subject: [PATCH 22/89] Fix display issues with RTL control characters in post names, subjects, and filenames. --- inc/display.php | 33 +++++++++++++++++++ .../Twig/Extensions/Extension/Tinyboard.php | 1 + templates/post_reply.html | 8 ++--- templates/post_thread.html | 14 ++++---- 4 files changed, 45 insertions(+), 11 deletions(-) diff --git a/inc/display.php b/inc/display.php index 57110224..ab96eb26 100644 --- a/inc/display.php +++ b/inc/display.php @@ -213,6 +213,39 @@ function truncate($body, $url, $max_lines = false, $max_chars = false) { return $body; } +function bidi_cleanup($str){ + # Closes all embedded RTL and LTR unicode formatting blocks in a string so that + # it can be used inside another without controlling its direction. + # More info: http://www.iamcal.com/understanding-bidirectional-text/ + # + # LRE - U+202A - 0xE2 0x80 0xAA + # RLE - U+202B - 0xE2 0x80 0xAB + # LRO - U+202D - 0xE2 0x80 0xAD + # RLO - U+202E - 0xE2 0x80 0xAE + # + # PDF - U+202C - 0xE2 0x80 0xAC + # + $explicits = '\xE2\x80\xAA|\xE2\x80\xAB|\xE2\x80\xAD|\xE2\x80\xAE'; + $pdf = '\xE2\x80\xAC'; + + $stack = 0; + $str = preg_replace_callback("!(?$explicits)|(?$pdf)!", function($match) use (&$stack) { + if (isset($match['explicits']) && $match['explicits']) { + $stack++; + } else { + if ($stack) + $stack--; + else + return ''; + } + return $match[0]; + }, $str); + for ($i=0; $i<$stack; $i++){ + $str .= "\xE2\x80\xAC"; + } + return $str; +} + function secure_link_confirm($text, $title, $confirm_message, $href) { global $config; diff --git a/inc/lib/Twig/Extensions/Extension/Tinyboard.php b/inc/lib/Twig/Extensions/Extension/Tinyboard.php index 0a128e7b..7592d1b4 100644 --- a/inc/lib/Twig/Extensions/Extension/Tinyboard.php +++ b/inc/lib/Twig/Extensions/Extension/Tinyboard.php @@ -25,6 +25,7 @@ class Twig_Extensions_Extension_Tinyboard extends Twig_Extension 'until' => new Twig_Filter_Function('until'), 'split' => new Twig_Filter_Function('twig_split_filter'), 'push' => new Twig_Filter_Function('twig_push_filter'), + 'bidi_cleanup' => new Twig_Filter_Function('bidi_cleanup'), 'addslashes' => new Twig_Filter_Function('addslashes') ); } diff --git a/templates/post_reply.html b/templates/post_reply.html index ddd0afd4..c5735a0e 100644 --- a/templates/post_reply.html +++ b/templates/post_reply.html @@ -7,14 +7,14 @@