From c595bfbabd1720531eff1e2ded5b050ce87cc5f8 Mon Sep 17 00:00:00 2001 From: towards_a_new_leftypol Date: Mon, 7 Sep 2020 00:06:08 +0000 Subject: [PATCH] print statements and relax rules in config --- inc/functions.php | 19 +- inc/instance-config.php.snapshopt-aug-30 | 213 ++++++++++++++++++ inc/lib/webm/ffmpeg.php | 3 +- install.php | 0 post.php | 31 ++- templates/themes/calendar/calendarpost.php | 2 +- .../staffapplication/staffapplicationpost.php | 2 +- templates/themes/ukko/info.php | 55 ----- templates/themes/ukko/theme.php | 162 ------------- templates/themes/ukko/thumb.png | Bin 13085 -> 0 bytes templates/themes/ukko/ukko.js | 116 ---------- templates/themes/ukko2/info.php | 55 ----- templates/themes/ukko2/theme.php | 161 ------------- templates/themes/ukko2/thumb.png | Bin 13085 -> 0 bytes templates/themes/ukko2/ukko.js | 116 ---------- templates/themes/ukko3/info.php | 55 ----- templates/themes/ukko3/theme.php | 162 ------------- templates/themes/ukko3/thumb.png | Bin 13085 -> 0 bytes templates/themes/ukko3/ukko.js | 116 ---------- templates/themes/ukko4/info.php | 55 ----- templates/themes/ukko4/theme.php | 162 ------------- templates/themes/ukko4/thumb.png | Bin 13085 -> 0 bytes templates/themes/ukko4/ukko.js | 116 ---------- 23 files changed, 261 insertions(+), 1340 deletions(-) create mode 100644 inc/instance-config.php.snapshopt-aug-30 mode change 100644 => 100755 install.php delete mode 100644 templates/themes/ukko/info.php delete mode 100644 templates/themes/ukko/theme.php delete mode 100644 templates/themes/ukko/thumb.png delete mode 100644 templates/themes/ukko/ukko.js delete mode 100644 templates/themes/ukko2/info.php delete mode 100644 templates/themes/ukko2/theme.php delete mode 100644 templates/themes/ukko2/thumb.png delete mode 100644 templates/themes/ukko2/ukko.js delete mode 100644 templates/themes/ukko3/info.php delete mode 100644 templates/themes/ukko3/theme.php delete mode 100644 templates/themes/ukko3/thumb.png delete mode 100644 templates/themes/ukko3/ukko.js delete mode 100644 templates/themes/ukko4/info.php delete mode 100644 templates/themes/ukko4/theme.php delete mode 100644 templates/themes/ukko4/thumb.png delete mode 100644 templates/themes/ukko4/ukko.js diff --git a/inc/functions.php b/inc/functions.php index 561477a4..fdb74b12 100755 --- a/inc/functions.php +++ b/inc/functions.php @@ -1938,7 +1938,9 @@ function remove_modifiers($body) { function markup(&$body, $track_cites = false, $op = false) { global $board, $config, $markup_urls; - + + print_err("Markup BEGIN"); + $modifiers = extract_modifiers($body); $body = preg_replace('@(.+?)@us', '', $body); @@ -1948,9 +1950,13 @@ function markup(&$body, $track_cites = false, $op = false) { return array(); } + print_err("Markup utf start"); + $body = str_replace("\r", '', $body); $body = utf8tohtml($body); + print_err("Markup utf OK"); + if (mysql_version() < 50503) $body = mb_encode_numericentity($body, array(0x010000, 0xffffff, 0, 0xffffff), 'UTF-8'); @@ -1981,8 +1987,10 @@ function markup(&$body, $track_cites = false, $op = false) { -1, $num_links); - if ($num_links > $config['max_links']) + if ($num_links > $config['max_links']) { + print_err("Error too many links"); error($config['error']['toomanylinks']); + } } if ($config['markup_repair_tidy']) @@ -2000,6 +2008,8 @@ function markup(&$body, $track_cites = false, $op = false) { $tracked_cites = array(); + print_err("Cites BEGIN"); + // Cites if (isset($board) && preg_match_all('/(^|\s)>>(\d+?)([\s,.)?]|$)/m', $body, $cites, PREG_SET_ORDER | PREG_OFFSET_CAPTURE)) { if (count($cites[0]) > $config['max_cites']) { @@ -2047,6 +2057,9 @@ function markup(&$body, $track_cites = false, $op = false) { } } + print_err("Cites END"); + print_err("Cross board linking BEGIN"); + // Cross-board linking if (preg_match_all('/(^|\s)>>>\/(' . $config['board_regex'] . 'f?)\/(\d+)?([\s,.)?]|$)/um', $body, $cites, PREG_SET_ORDER | PREG_OFFSET_CAPTURE)) { if (count($cites[0]) > $config['max_cites']) { @@ -2181,6 +2194,8 @@ function markup(&$body, $track_cites = false, $op = false) { } } } + + print_err("Cross board linking End"); $tracked_cites = array_unique($tracked_cites, SORT_REGULAR); diff --git a/inc/instance-config.php.snapshopt-aug-30 b/inc/instance-config.php.snapshopt-aug-30 new file mode 100644 index 00000000..8d86ff4b --- /dev/null +++ b/inc/instance-config.php.snapshopt-aug-30 @@ -0,0 +1,213 @@ + 'http://status.example.org/') + ); + // Board categories. Only used in the "Categories" theme. + $config['categories'] = array( + 'Leftypol' => array('leftypol', 'b'), + 'GET' => array('GET', 'ref'), + 'Meta' => array('gulag') + ); + // Optional for the Categories theme. This is an array of name => (title, url) groups for categories + // with non-board links. + $config['custom_categories'] = array( + 'Links' => array( + 'Leftypedia' => 'http://example.org', + 'Staff application' => 'staff_applications.html', + 'FAQ' => 'faq.html', + 'Donate' => 'donate.html' + ) + ); + + + $config['db']['server'] = 'localhost'; + $config['db']['database'] = 'lainchan'; + $config['db']['prefix'] = ''; + $config['db']['user'] = 'lainchan'; + $config['db']['password'] = 'oijrljqqwjr242kjn'; + + + $config['cookies']['mod'] = 'mod'; + $config['cookies']['salt'] = 'ZGZkYWU3NGUwZDNiYjU2MDEwZmRkMW'; + + $config['flood_time'] = 10; + $config['flood_time_ip'] = 120; + $config['flood_time_same'] = 30; + $config['max_body'] = 1800; + $config['reply_limit'] = 250; + $config['max_links'] = 20; + $config['max_filesize'] = 10485760; + $config['thumb_width'] = 255; + $config['thumb_height'] = 255; + $config['max_width'] = 10000; + $config['max_height'] = 10000; + $config['max_images'] = 4; + $config['threads_per_page'] = 10; + $config['max_pages'] = 10; + $config['threads_preview'] = 5; + $config['root'] = '/'; + $config['secure_trip_salt'] = 'MzdhNTJiMjNkMTM5Nzc5NDcwOGViMD'; + + $config['thumb_method'] = 'gm+gifsicle'; + $config['gnu_md5'] = '1'; + + // < Added by Zero > + // Sun Aug 30 17:44:19 UTC 2020 + + // Allowed image file extensions. + $config['allowed_ext'][] = 'jpg'; + $config['allowed_ext'][] = 'jpeg'; + $config['allowed_ext'][] = 'bmp'; + $config['allowed_ext'][] = 'gif'; + $config['allowed_ext'][] = 'png'; + + // TODO test section, please remove + $config['allowed_ext'][] = 'mp4'; + $config['allowed_ext'][] = 'webm'; + $config['allowed_ext_files'][] = 'webm'; + $config['webm']['use_ffmpeg'] = true; + $config['additional_javascript'][] = 'js/options.js'; + $config['additional_javascript'][] = 'js/webm-settings.js'; + $config['additional_javascript'][] = 'js/expand-video.js'; + $config['max_filesize'] = 50 * 1024 * 1024; // 50MB + $config['webm']['ffmpeg_path'] = '/usr/bin/ffmpeg'; + $config['webm']['ffprobe_path'] = '/usr/bin/ffprobe'; + $config['mp4']['ffmpeg_path'] = '/usr/bin/ffmpeg'; + $config['mp4']['ffprobe_path'] = '/usr/bin/ffprobe'; + $config['webm']['allow_audio'] = true; + $config['webm']['max_length'] = 620; + //end test section + + + $config['allowed_ext_files'][] = 'mp4'; + $config['allowed_ext_files'][] = 'pdf'; + $config['allowed_ext_files'][] = 'txt'; + $config['allowed_ext_files'][] = 'zip'; + $config['allowed_ext_files'][] = 'epub'; + + /* + * From Config: + // Always regenerate markup. This isn't recommended and should only be used for debugging; by default, + // Tinyboard only parses post markup when it needs to, and keeps post-markup HTML in the database. This + // will significantly impact performance when enabled. + * + */ + $config['markup_repair_tidy'] = false; + + + $config['image_reject_repost'] = false; + $config['flood_time'] = 0; + // Minimum time between between each post with the exact same content AND same IP address. + $config['flood_time_ip'] = 0; + + $config['filters'] = array(); + $config['always_noko'] = false; // the migration script now relies on this default behavior, we can turn this on later. + // + +// Changes made via web editor by "admin" @ Tue, 02 Jun 2020 23:16:58 -0700: +$config['debug'] = true; + + +// Changes made via web editor by "admin" @ Tue, 02 Jun 2020 23:24:29 -0700: +$config['debug'] = false; +$config['verbose_errors'] = false; + + +/* + * ==================== + * Javascript + * ==================== + */ + + // Additional Javascript files to include on board index and thread pages. See js/ for available scripts. + $config['additional_javascript'][] = 'js/jquery.min.js'; + $config['additional_javascript'][] = 'js/inline-expanding.js'; + $config['additional_javascript'][] = 'js/multi-image.js'; // required when using multi file upload + $config['additional_javascript'][] = 'js/local-time.js'; + $config['additional_javascript'][] = 'js/auto-reload.js'; + $config['additional_javascript'][] = 'js/post-hover.js'; + $config['additional_javascript'][] = 'js/style-select.js'; + + // Some scripts require jQuery. Check the comments in script files to see what's needed. When enabling + // jQuery, you should first empty the array so that "js/query.min.js" can be the first, and then re-add + // "js/inline-expanding.js" or else the inline-expanding script might not interact properly with other + // scripts. + // $config['additional_javascript'] = array(); + // $config['additional_javascript'][] = 'js/jquery.min.js'; + // $config['additional_javascript'][] = 'js/inline-expanding.js'; + // $config['additional_javascript'][] = 'js/auto-reload.js'; + // $config['additional_javascript'][] = 'js/post-hover.js'; + // $config['additional_javascript'][] = 'js/style-select.js'; + + // Where these script files are located on the web. Defaults to $config['root']. + // $config['additional_javascript_url'] = 'http://static.example.org/tinyboard-javascript-stuff/'; + + // Compile all additional scripts into one file ($config['file_script']) instead of including them seperately. + $config['additional_javascript_compile'] = false; + + // Minify Javascript using http://code.google.com/p/minify/. + $config['minify_js'] = false; + + // Dispatch thumbnail loading and image configuration with JavaScript. It will need a certain javascript + // code to work. + $config['javascript_image_dispatch'] = false; + + $config['multiimage_method'] = 'each'; + + + $config['mod']['show_ip'] = DISABLED; + $config['mod']['move'] = MOD; + +// Changes made via web editor by "admin" @ Sun, 23 Aug 2020 16:45:14 -0700: +$config['force_image_op'] = false; + + +// Changes made via web editor by "admin" @ Sun, 23 Aug 2020 16:48:22 -0700: +$config['force_body_op'] = false; + + +// Changes made via web editor by "admin" @ Sun, 23 Aug 2020 17:38:52 -0700: +$config['flood_time'] = 0; +$config['flood_time_ip'] = 0; +$config['flood_time_same'] = 0; + + +// Changes made via web editor by "admin" @ Wed, 26 Aug 2020 20:15:11 -0700: +$config['min_body'] = 5; + + +// Changes made via web editor by "admin" @ Wed, 26 Aug 2020 20:15:44 -0700: +$config['force_image_op'] = true; +$config['min_body'] = 15; + + +// Changes made via web editor by "admin" @ Sat, 29 Aug 2020 13:26:51 -0700: +$config['force_image_op'] = false; + + +// Changes made via web editor by "admin" @ Sat, 29 Aug 2020 23:13:46 -0700: +$config['cookies']['salt'] = 'ZGZkYWU3NGUwZDNiYjU2MDEwZmRkMX'; + + +// Changes made via web editor by "admin" @ Sat, 29 Aug 2020 23:21:09 -0700: +$config['cookies']['salt'] = 'ZGZkYWU3NGUwZDNiYjU2MDEwZmRkMA'; + + +// Changes made via web editor by "admin" @ Sun, 30 Aug 2020 10:48:36 -0700: +$config['max_body'] = 100000; + + +// Changes made via web editor by "admin" @ Sun, 30 Aug 2020 15:25:41 -0700: +$config['max_links'] = 40; + diff --git a/inc/lib/webm/ffmpeg.php b/inc/lib/webm/ffmpeg.php index db4d01ed..91b6af17 100644 --- a/inc/lib/webm/ffmpeg.php +++ b/inc/lib/webm/ffmpeg.php @@ -35,8 +35,9 @@ function is_valid_webm($ffprobe_out) { } if ((count($ffprobe_out['streams']) > 1) && (!$config['webm']['allow_audio'])) return array('code' => 3, 'msg' => $config['error']['webmhasaudio']."error 4"); - if (empty($ffprobe_out['streams'][0]['width']) || (empty($ffprobe_out['streams'][0]['height']))) + if ((empty($ffprobe_out['streams'][0]['width']) || (empty($ffprobe_out['streams'][0]['height']))) && !$config['webm']['allow_audio']) { return array('code' => 2, 'msg' => $config['error']['invalidwebm']."error 5"); + } if ($ffprobe_out['format']['duration'] > $config['webm']['max_length']) return array('code' => 4, 'msg' => sprintf($config['error']['webmtoolong'], $config['webm']['max_length'])."error 6"); } diff --git a/install.php b/install.php old mode 100644 new mode 100755 diff --git a/post.php b/post.php index b72a8995..3cdc889e 100644 --- a/post.php +++ b/post.php @@ -726,7 +726,7 @@ function handle_post(){ $stripped_whitespace = preg_replace('/[\s]/u', '', $post['body']); print_err(print_r(preg_last_error(), true)); - if (preg_last_error() != PREG_BAD_UTF8_ERROR) { + if (preg_last_error() == PREG_BAD_UTF8_ERROR) { print_err("Bad unicode preg error"); } @@ -935,6 +935,8 @@ function handle_post(){ print_err("Process post body"); $post['body'] = escape_markup_modifiers($post['body']); + + print_err("body escaped"); if ($mod && isset($post['raw']) && $post['raw']) { $post['body'] .= "\n1"; @@ -964,6 +966,8 @@ function handle_post(){ } } + print_err("flag stuff block OK"); + if ($config['user_flag'] && isset($_POST['user_flag'])) if (!empty($_POST['user_flag']) ){ @@ -978,15 +982,21 @@ function handle_post(){ "\n" . $flag_alt . ""; } + print_err("user flag block ok"); + if ($config['allowed_tags'] && $post['op'] && isset($_POST['tag']) && isset($config['allowed_tags'][$_POST['tag']])) { $post['body'] .= "\n" . $_POST['tag'] . ""; } + print_err("allowed tags block ok"); + if (!$dropped_post) if ($config['proxy_save'] && isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { $proxy = preg_replace("/[^0-9a-fA-F.,: ]/", '', $_SERVER['HTTP_X_FORWARDED_FOR']); $post['body'] .= "\n".$proxy.""; } + + print_err("proxy save block ok"); if (mysql_version() >= 50503) { $post['body_nomarkup'] = $post['body']; // Assume we're using the utf8mb4 charset @@ -1004,6 +1014,8 @@ function handle_post(){ $post['body_nomarkup'] .= $char; } } + + print_err("body nomarkup block OK"); $post['tracked_cites'] = markup($post['body'], true); @@ -1019,11 +1031,14 @@ function handle_post(){ foreach ($post['files'] as $key => &$file) { if ($post['op'] && $config['allowed_ext_op']) { - if (!in_array($file['extension'], $config['allowed_ext_op'])) + if (!in_array($file['extension'], $config['allowed_ext_op'])) { + print_err("Unknown extension (1)!"); error($config['error']['unknownext']); - } - elseif (!in_array($file['extension'], $config['allowed_ext']) && !in_array($file['extension'], $config['allowed_ext_files'])) + } + } elseif (!in_array($file['extension'], $config['allowed_ext']) && !in_array($file['extension'], $config['allowed_ext_files'])) { + print_err("Unknown extension (2)!"); error($config['error']['unknownext']); + } $file['is_an_image'] = !in_array($file['extension'], $config['allowed_ext_files']); @@ -1158,7 +1173,10 @@ function handle_post(){ $file['width'] = $image->size->width; $file['height'] = $image->size->height; + print_err("image size width and height"); + if ($config['spoiler_images'] && isset($_POST['spoiler'])) { + print_err("spoiler set"); $file['thumb'] = 'spoiler'; $size = @getimagesize($config['spoiler_image']); @@ -1169,19 +1187,24 @@ function handle_post(){ $image->size->height <= $config['thumb_height'] && $file['extension'] == ($config['thumb_ext'] ? $config['thumb_ext'] : $file['extension'])) { + print_err("minimum copy resize"); // Copy, because there's nothing to resize copy($file['tmp_name'], $file['thumb']); $file['thumbwidth'] = $image->size->width; $file['thumbheight'] = $image->size->height; } else { + print_err("thumbnail resize"); $thumb = $image->resize( $config['thumb_ext'] ? $config['thumb_ext'] : $file['extension'], $post['op'] ? $config['thumb_op_width'] : $config['thumb_width'], $post['op'] ? $config['thumb_op_height'] : $config['thumb_height'] ); + print_err("thumbnail resize ok"); $thumb->to($file['thumb']); + + print_err("thumbnail save ok"); $file['thumbwidth'] = $thumb->width; $file['thumbheight'] = $thumb->height; diff --git a/templates/themes/calendar/calendarpost.php b/templates/themes/calendar/calendarpost.php index 5293a881..9587acc3 100644 --- a/templates/themes/calendar/calendarpost.php +++ b/templates/themes/calendar/calendarpost.php @@ -1,5 +1,5 @@ 'Board name', - 'name' => 'title', - 'type' => 'text', - 'default' => 'Ukko' - ); - $theme['config'][] = array( - 'title' => 'Board URI', - 'name' => 'uri', - 'type' => 'text', - 'default' => '*', - '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); - file_write($settings['uri'] . '/ukko.js', Element('themes/ukko/ukko.js', array())); - } - } - diff --git a/templates/themes/ukko/theme.php b/templates/themes/ukko/theme.php deleted file mode 100644 index d08b6769..00000000 --- a/templates/themes/ukko/theme.php +++ /dev/null @@ -1,162 +0,0 @@ -settings = $settings; - - if (! ($action == 'all' || $action == 'post' || $action == 'post-thread' || $action == 'post-delete')) { - return; - } - - $action = generation_strategy('sb_ukko', array()); - - if ($action == 'delete') { - file_unlink($settings['uri'] . '/index.html'); - if ($config['api']['enabled']) { - $jsonFilename = $settings['uri'] . '/0.json'; - file_unlink($jsonFilename); - $jsonFilename = $settings['uri'] . '/catalog.json'; - file_unlink($jsonFilename); - $jsonFilename = $settings['uri'] . '/threads.json'; - file_unlink($jsonFilename); - } - } - elseif ($action == 'rebuild') { - file_write($settings['uri'] . '/index.html', $ukko->build()); - } - } - - class ukko { - public $settings; - public function build($mod = false) { - global $config; - $boards = listBoards(); - - $body = ''; - $overflow = array(); - $board = array( - 'dir' => $this->settings['uri'] . "/", - 'url' => $this->settings['uri'], - 'uri' => $this->settings['uri'], - 'name' => $this->settings['title'], - 'title' => sprintf($this->settings['subtitle'], $this->settings['thread_limit']) - ); - - $boardsforukko = array(); - $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']); - array_push($boardsforukko,$_board); - } - $query = preg_replace('/UNION ALL $/', 'ORDER BY `bump` DESC', $query); - $query = query($query) or error(db_error()); - - $count = 0; - $threads = array(); - if ($config['api']['enabled']) { - $apithreads = 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, $mod ? '?/' : $config['root'], $mod); - - $posts = prepare(sprintf("SELECT * FROM ``posts_%s`` WHERE `thread` = :id ORDER BY `sticky` DESC, `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['files']) - $num_images++; - $post2 = new Post($po, $mod ? '?/' : $config['root'], $mod); - $thread->add($post2); - - } - 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 `files` 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); - if ($config['api']['enabled']) { - array_push($apithreads,$thread); - } - } 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 .= ''; - - // json api - if ($config['api']['enabled']) { - require_once __DIR__. '/../../../inc/api.php'; - $api = new Api(); - $jsonFilename = $board['dir'] . '0.json'; - $json = json_encode($api->translatePage($apithreads)); - file_write($jsonFilename, $json); - - - $catalog = array(); - $catalog[0] = $apithreads; - - $json = json_encode($api->translateCatalog($catalog)); - $jsonFilename = $board['dir'] . 'catalog.json'; - file_write($jsonFilename, $json); - - $json = json_encode($api->translateCatalog($catalog, true)); - $jsonFilename = $board['dir'] . 'threads.json'; - file_write($jsonFilename, $json); - } - $antibot = null; - if (!$antibot) { - $antibot = create_antibot($board['uri']); - } - $antibot->reset(); - - return Element('index.html', array( - 'config' => $config, - 'board' => $board, - 'no_post_form' => $config['overboard_post_form'] ? false : true, - 'body' => $body, - 'mod' => $mod, - 'boardlist' => createBoardlist($mod), - 'boards' => $boardsforukko, - 'antibot' => $antibot ) - ); - } - - }; - -?> diff --git a/templates/themes/ukko/thumb.png b/templates/themes/ukko/thumb.png deleted file mode 100644 index eb616ef7d662bddc7b4fec8311ee52df55772aab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13085 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 diff --git a/templates/themes/ukko/ukko.js b/templates/themes/ukko/ukko.js deleted file mode 100644 index b2668e0b..00000000 --- a/templates/themes/ukko/ukko.js +++ /dev/null @@ -1,116 +0,0 @@ -(function(){ - -var cache = new Array(), - thread = false, - loading = false, - ukkotimer = false; - -if (localStorage.hiddenboards === undefined) { - localStorage.hiddenboards = "{}"; -} - -// Load data from HTML5 localStorage -var hiddenboards = JSON.parse(localStorage.hiddenboards); - -var storeboards = function() { - localStorage.hiddenboards = JSON.stringify(hiddenboards); -}; - -$(document).ready(function() { - var addukkohide = function() { - var ukkohide = $(''); - var board = $(this).next().data("board"); - var hr = $("
"); - - $(this).append(ukkohide); - $(this).append(hr); - - if (hiddenboards[board] !== true) { - ukkohide.html(_("(hide threads from this board)")); - hr.hide(); - } - else { - ukkohide.html(_("(show threads from this board)")); - $(this).next().hide(); - } - ukkohide.click(function() { - hiddenboards[board] = (hiddenboards[board] !== true); - if (hiddenboards[board] !== true) { - $('[data-board="'+board+'"]:not([data-cached="yes"])').show().prev(). - find('.ukkohide').html(_("(hide threads from this board)")). - parent().find('hr').hide(); - } - else { - $('[data-board="'+board+'"]:not([data-cached="yes"])').hide().prev(). - find('.ukkohide').html(_("(show threads from this board)")) - .parent().find('hr').show(); - } - storeboards(); - return false; - }); - - }; - $("h2").each(addukkohide); - - $('.pages').hide(); - var loadnext = function() { - if (overflow.length == 0) { - $('.pages').show().html(_("No more threads to display")); - } - while($(window).scrollTop() + $(window).height() + 1000 > $(document).height() && !loading && overflow.length > 0) { - var page = modRoot + overflow[0].board + '/' + overflow[0].page; - thread = $('div#thread_' + overflow[0].id + '[data-board="' + overflow[0].board + '"]'); - if (thread.length > 0 && thread.attr("data-cached") !== 'yes') { // already present - overflow.shift(); - continue; - } - - var boardheader = $('

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

'); - - if($.inArray(page, cache) != -1) { - if (thread.length > 0) { - $('div[id*="thread_"]').last().after(thread.attr('data-board', overflow[0].board).attr("data-cached", "no").css('display', 'block')); - boardheader.insertBefore(thread); - addukkohide.call(boardheader); - $(document).trigger('new_post', thread); - } - overflow.shift(); - } else { - loading = true; - $('.pages').show().html(_("Loading...")); - $.get(page, function(data) { - cache.push(page); - - $(data).find('div[id*="thread_"]').each(function() { - var checkout = $(this).attr('id').replace('thread_', ''); - if ($('div#thread_' + checkout + '[data-board="' + overflow[0].board + '"]').length == 0) { - $('form[name="postcontrols"]').prepend($(this).css('display', 'none').attr("data-cached", "yes").attr('data-board', overflow[0].board)); - } - }); - - thread = $('div#thread_' + overflow[0].id + '[data-board="' + overflow[0].board + '"][data-cached="yes"]'); - - if(thread.length > 0) { - $('div[id*="thread_"]').last().after(thread.attr('data-board', overflow[0].board).attr("data-cached", "no").css('display', 'block')); - boardheader.insertBefore(thread); - addukkohide.call(boardheader); - $(document).trigger('new_post', thread); - } - overflow.shift(); - - loading = false; - $('.pages').hide().html(""); - }); - break; - } - } - clearTimeout(ukkotimer); - ukkotimer = setTimeout(loadnext, 1000); - }; - - $(window).on('scroll', loadnext); - - ukkotimer = setTimeout(loadnext, 1000); -}); - -})(); diff --git a/templates/themes/ukko2/info.php b/templates/themes/ukko2/info.php deleted file mode 100644 index f7094697..00000000 --- a/templates/themes/ukko2/info.php +++ /dev/null @@ -1,55 +0,0 @@ - 'Board name', - 'name' => 'title', - 'type' => 'text', - 'default' => 'Ukko' - ); - $theme['config'][] = array( - 'title' => 'Board URI', - 'name' => 'uri', - 'type' => 'text', - 'default' => '*', - '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' => 'included boards', - 'name' => 'include', - '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'] = 'ukko2_build'; - $theme['install_callback'] = 'ukko2_install'; - - if(!function_exists('ukko2_install')) { - function ukko2_install($settings) { - if (!file_exists($settings['uri'])) - @mkdir($settings['uri'], 0777) or error("Couldn't create " . $settings['uri'] . ". Check permissions.", true); - file_write($settings['uri'] . '/ukko.js', Element('themes/ukko/ukko.js', array())); - } - } - diff --git a/templates/themes/ukko2/theme.php b/templates/themes/ukko2/theme.php deleted file mode 100644 index bb21caa0..00000000 --- a/templates/themes/ukko2/theme.php +++ /dev/null @@ -1,161 +0,0 @@ -settings = $settings; - - if (! ($action == 'all' || $action == 'post' || $action == 'post-thread' || $action == 'post-delete')) { - return; - } - - $action = generation_strategy('sb_ukko2', array()); - - if ($action == 'delete') { - file_unlink($settings['uri'] . '/index.html'); - if ($config['api']['enabled']) { - $jsonFilename = $settings['uri'] . '/0.json'; - file_unlink($jsonFilename); - $jsonFilename = $settings['uri'] . '/catalog.json'; - file_unlink($jsonFilename); - $jsonFilename = $settings['uri'] . '/threads.json'; - file_unlink($jsonFilename); - } - } - elseif ($action == 'rebuild') { - file_write($settings['uri'] . '/index.html', $ukko2->build()); - } - } - - class ukko2 { - public $settings; - public function build($mod = false) { - global $config; - $boards = listBoards(); - - $body = ''; - $overflow = array(); - $board = array( - 'dir' => $this->settings['uri'] . "/", - 'url' => $this->settings['uri'], - 'uri' => $this->settings['uri'], - 'name' => $this->settings['title'], - 'title' => sprintf($this->settings['subtitle'], $this->settings['thread_limit']) - ); - $boardsforukko2 = array(); - $query = ''; - foreach($boards as &$_board) { - if(in_array($_board['uri'], explode(' ', $this->settings['include']))){ - $query .= sprintf("SELECT *, '%s' AS `board` FROM ``posts_%s`` WHERE `thread` IS NULL UNION ALL ", $_board['uri'], $_board['uri']); - array_push($boardsforukko2,$_board); - } - } - $query = preg_replace('/UNION ALL $/', 'ORDER BY `sticky` DESC ,`bump` DESC', $query); - $query = query($query) or error(db_error()); - - $count = 0; - $threads = array(); - if ($config['api']['enabled']) { - $apithreads = 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, $mod ? '?/' : $config['root'], $mod); - - $posts = prepare(sprintf("SELECT * FROM ``posts_%s`` WHERE `thread` = :id ORDER BY `sticky` DESC, `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['files']) - $num_images++; - $post2 = new Post($po, $mod ? '?/' : $config['root'], $mod); - $thread->add($post2); - - } - 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 `files` 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); - if ($config['api']['enabled']) { - array_push($apithreads,$thread); - } - } 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 .= ''; - - // json api - if ($config['api']['enabled']) { - require_once __DIR__. '/../../../inc/api.php'; - $api = new Api(); - $jsonFilename = $board['dir'] . '0.json'; - $json = json_encode($api->translatePage($apithreads)); - file_write($jsonFilename, $json); - - - $catalog = array(); - $catalog[0] = $apithreads; - - $json = json_encode($api->translateCatalog($catalog)); - $jsonFilename = $board['dir'] . 'catalog.json'; - file_write($jsonFilename, $json); - - $json = json_encode($api->translateCatalog($catalog, true)); - $jsonFilename = $board['dir'] . 'threads.json'; - file_write($jsonFilename, $json); - } - $antibot = null; - if (!$antibot) { - $antibot = create_antibot($board['uri']); - } - $antibot->reset(); - - return Element('index.html', array( - 'config' => $config, - 'board' => $board, - 'no_post_form' => $config['overboard_post_form'] ? false : true, - 'body' => $body, - 'mod' => $mod, - 'boardlist' => createBoardlist($mod), - 'boards' => $boardsforukko2, - 'antibot' => $antibot ) - ); - } - - }; - -?> diff --git a/templates/themes/ukko2/thumb.png b/templates/themes/ukko2/thumb.png deleted file mode 100644 index eb616ef7d662bddc7b4fec8311ee52df55772aab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13085 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 diff --git a/templates/themes/ukko2/ukko.js b/templates/themes/ukko2/ukko.js deleted file mode 100644 index b2668e0b..00000000 --- a/templates/themes/ukko2/ukko.js +++ /dev/null @@ -1,116 +0,0 @@ -(function(){ - -var cache = new Array(), - thread = false, - loading = false, - ukkotimer = false; - -if (localStorage.hiddenboards === undefined) { - localStorage.hiddenboards = "{}"; -} - -// Load data from HTML5 localStorage -var hiddenboards = JSON.parse(localStorage.hiddenboards); - -var storeboards = function() { - localStorage.hiddenboards = JSON.stringify(hiddenboards); -}; - -$(document).ready(function() { - var addukkohide = function() { - var ukkohide = $(''); - var board = $(this).next().data("board"); - var hr = $("
"); - - $(this).append(ukkohide); - $(this).append(hr); - - if (hiddenboards[board] !== true) { - ukkohide.html(_("(hide threads from this board)")); - hr.hide(); - } - else { - ukkohide.html(_("(show threads from this board)")); - $(this).next().hide(); - } - ukkohide.click(function() { - hiddenboards[board] = (hiddenboards[board] !== true); - if (hiddenboards[board] !== true) { - $('[data-board="'+board+'"]:not([data-cached="yes"])').show().prev(). - find('.ukkohide').html(_("(hide threads from this board)")). - parent().find('hr').hide(); - } - else { - $('[data-board="'+board+'"]:not([data-cached="yes"])').hide().prev(). - find('.ukkohide').html(_("(show threads from this board)")) - .parent().find('hr').show(); - } - storeboards(); - return false; - }); - - }; - $("h2").each(addukkohide); - - $('.pages').hide(); - var loadnext = function() { - if (overflow.length == 0) { - $('.pages').show().html(_("No more threads to display")); - } - while($(window).scrollTop() + $(window).height() + 1000 > $(document).height() && !loading && overflow.length > 0) { - var page = modRoot + overflow[0].board + '/' + overflow[0].page; - thread = $('div#thread_' + overflow[0].id + '[data-board="' + overflow[0].board + '"]'); - if (thread.length > 0 && thread.attr("data-cached") !== 'yes') { // already present - overflow.shift(); - continue; - } - - var boardheader = $('

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

'); - - if($.inArray(page, cache) != -1) { - if (thread.length > 0) { - $('div[id*="thread_"]').last().after(thread.attr('data-board', overflow[0].board).attr("data-cached", "no").css('display', 'block')); - boardheader.insertBefore(thread); - addukkohide.call(boardheader); - $(document).trigger('new_post', thread); - } - overflow.shift(); - } else { - loading = true; - $('.pages').show().html(_("Loading...")); - $.get(page, function(data) { - cache.push(page); - - $(data).find('div[id*="thread_"]').each(function() { - var checkout = $(this).attr('id').replace('thread_', ''); - if ($('div#thread_' + checkout + '[data-board="' + overflow[0].board + '"]').length == 0) { - $('form[name="postcontrols"]').prepend($(this).css('display', 'none').attr("data-cached", "yes").attr('data-board', overflow[0].board)); - } - }); - - thread = $('div#thread_' + overflow[0].id + '[data-board="' + overflow[0].board + '"][data-cached="yes"]'); - - if(thread.length > 0) { - $('div[id*="thread_"]').last().after(thread.attr('data-board', overflow[0].board).attr("data-cached", "no").css('display', 'block')); - boardheader.insertBefore(thread); - addukkohide.call(boardheader); - $(document).trigger('new_post', thread); - } - overflow.shift(); - - loading = false; - $('.pages').hide().html(""); - }); - break; - } - } - clearTimeout(ukkotimer); - ukkotimer = setTimeout(loadnext, 1000); - }; - - $(window).on('scroll', loadnext); - - ukkotimer = setTimeout(loadnext, 1000); -}); - -})(); diff --git a/templates/themes/ukko3/info.php b/templates/themes/ukko3/info.php deleted file mode 100644 index 375995f4..00000000 --- a/templates/themes/ukko3/info.php +++ /dev/null @@ -1,55 +0,0 @@ - 'Board name', - 'name' => 'title', - 'type' => 'text', - 'default' => 'Ukko' - ); - $theme['config'][] = array( - 'title' => 'Board URI', - 'name' => 'uri', - 'type' => 'text', - 'default' => '*', - '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' => 'included boards', - 'name' => 'include', - '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'] = 'ukko3_build'; - $theme['install_callback'] = 'ukko3_install'; - - if(!function_exists('ukko3_install')) { - function ukko3_install($settings) { - if (!file_exists($settings['uri'])) - @mkdir($settings['uri'], 0777) or error("Couldn't create " . $settings['uri'] . ". Check permissions.", true); - file_write($settings['uri'] . '/ukko.js', Element('themes/ukko/ukko.js', array())); - } - } - diff --git a/templates/themes/ukko3/theme.php b/templates/themes/ukko3/theme.php deleted file mode 100644 index 53910199..00000000 --- a/templates/themes/ukko3/theme.php +++ /dev/null @@ -1,162 +0,0 @@ -settings = $settings; - - if (! ($action == 'all' || $action == 'post' || $action == 'post-thread' || $action == 'post-delete')) { - return; - } - - $action = generation_strategy('sb_ukko3', array()); - - if ($action == 'delete') { - file_unlink($settings['uri'] . '/index.html'); - if ($config['api']['enabled']) { - $jsonFilename = $settings['uri'] . '/0.json'; - file_unlink($jsonFilename); - $jsonFilename = $settings['uri'] . '/catalog.json'; - file_unlink($jsonFilename); - $jsonFilename = $settings['uri'] . '/threads.json'; - file_unlink($jsonFilename); - } - } - elseif ($action == 'rebuild') { - file_write($settings['uri'] . '/index.html', $ukko3->build()); - } - } - - class ukko3 { - public $settings; - public function build($mod = false) { - global $config; - $boards = listBoards(); - - $body = ''; - $overflow = array(); - $board = array( - 'dir' => $this->settings['uri'] . "/", - 'url' => $this->settings['uri'], - 'uri' => $this->settings['uri'], - 'name' => $this->settings['title'], - 'title' => sprintf($this->settings['subtitle'], $this->settings['thread_limit']) - ); - - $boardsforukko3 = array(); - $query = ''; - foreach($boards as &$_board) { - if(in_array($_board['uri'], explode(' ', $this->settings['include']))){ - $query .= sprintf("SELECT *, '%s' AS `board` FROM ``posts_%s`` WHERE `thread` IS NULL UNION ALL ", $_board['uri'], $_board['uri']); - array_push($boardsforukko3,$_board); - } - } - $query = preg_replace('/UNION ALL $/', 'ORDER BY `sticky` DESC ,`bump` DESC', $query); - $query = query($query) or error(db_error()); - - $count = 0; - $threads = array(); - if ($config['api']['enabled']) { - $apithreads = 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, $mod ? '?/' : $config['root'], $mod); - - $posts = prepare(sprintf("SELECT * FROM ``posts_%s`` WHERE `thread` = :id ORDER BY `sticky` DESC, `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['files']) - $num_images++; - $post2 = new Post($po, $mod ? '?/' : $config['root'], $mod); - $thread->add($post2); - - } - 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 `files` 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); - if ($config['api']['enabled']) { - array_push($apithreads,$thread); - } - } 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 .= ''; - - // json api - if ($config['api']['enabled']) { - require_once __DIR__. '/../../../inc/api.php'; - $api = new Api(); - $jsonFilename = $board['dir'] . '0.json'; - $json = json_encode($api->translatePage($apithreads)); - file_write($jsonFilename, $json); - - - $catalog = array(); - $catalog[0] = $apithreads; - - $json = json_encode($api->translateCatalog($catalog)); - $jsonFilename = $board['dir'] . 'catalog.json'; - file_write($jsonFilename, $json); - - $json = json_encode($api->translateCatalog($catalog, true)); - $jsonFilename = $board['dir'] . 'threads.json'; - file_write($jsonFilename, $json); - } - $antibot = null; - if (!$antibot) { - $antibot = create_antibot($board['uri']); - } - $antibot->reset(); - - return Element('index.html', array( - 'config' => $config, - 'board' => $board, - 'no_post_form' => $config['overboard_post_form'] ? false : true, - 'body' => $body, - 'mod' => $mod, - 'boardlist' => createBoardlist($mod), - 'boards' => $boardsforukko3, - 'antibot' => $antibot ) - ); - } - - }; - -?> diff --git a/templates/themes/ukko3/thumb.png b/templates/themes/ukko3/thumb.png deleted file mode 100644 index eb616ef7d662bddc7b4fec8311ee52df55772aab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13085 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 diff --git a/templates/themes/ukko3/ukko.js b/templates/themes/ukko3/ukko.js deleted file mode 100644 index b2668e0b..00000000 --- a/templates/themes/ukko3/ukko.js +++ /dev/null @@ -1,116 +0,0 @@ -(function(){ - -var cache = new Array(), - thread = false, - loading = false, - ukkotimer = false; - -if (localStorage.hiddenboards === undefined) { - localStorage.hiddenboards = "{}"; -} - -// Load data from HTML5 localStorage -var hiddenboards = JSON.parse(localStorage.hiddenboards); - -var storeboards = function() { - localStorage.hiddenboards = JSON.stringify(hiddenboards); -}; - -$(document).ready(function() { - var addukkohide = function() { - var ukkohide = $(''); - var board = $(this).next().data("board"); - var hr = $("
"); - - $(this).append(ukkohide); - $(this).append(hr); - - if (hiddenboards[board] !== true) { - ukkohide.html(_("(hide threads from this board)")); - hr.hide(); - } - else { - ukkohide.html(_("(show threads from this board)")); - $(this).next().hide(); - } - ukkohide.click(function() { - hiddenboards[board] = (hiddenboards[board] !== true); - if (hiddenboards[board] !== true) { - $('[data-board="'+board+'"]:not([data-cached="yes"])').show().prev(). - find('.ukkohide').html(_("(hide threads from this board)")). - parent().find('hr').hide(); - } - else { - $('[data-board="'+board+'"]:not([data-cached="yes"])').hide().prev(). - find('.ukkohide').html(_("(show threads from this board)")) - .parent().find('hr').show(); - } - storeboards(); - return false; - }); - - }; - $("h2").each(addukkohide); - - $('.pages').hide(); - var loadnext = function() { - if (overflow.length == 0) { - $('.pages').show().html(_("No more threads to display")); - } - while($(window).scrollTop() + $(window).height() + 1000 > $(document).height() && !loading && overflow.length > 0) { - var page = modRoot + overflow[0].board + '/' + overflow[0].page; - thread = $('div#thread_' + overflow[0].id + '[data-board="' + overflow[0].board + '"]'); - if (thread.length > 0 && thread.attr("data-cached") !== 'yes') { // already present - overflow.shift(); - continue; - } - - var boardheader = $('

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

'); - - if($.inArray(page, cache) != -1) { - if (thread.length > 0) { - $('div[id*="thread_"]').last().after(thread.attr('data-board', overflow[0].board).attr("data-cached", "no").css('display', 'block')); - boardheader.insertBefore(thread); - addukkohide.call(boardheader); - $(document).trigger('new_post', thread); - } - overflow.shift(); - } else { - loading = true; - $('.pages').show().html(_("Loading...")); - $.get(page, function(data) { - cache.push(page); - - $(data).find('div[id*="thread_"]').each(function() { - var checkout = $(this).attr('id').replace('thread_', ''); - if ($('div#thread_' + checkout + '[data-board="' + overflow[0].board + '"]').length == 0) { - $('form[name="postcontrols"]').prepend($(this).css('display', 'none').attr("data-cached", "yes").attr('data-board', overflow[0].board)); - } - }); - - thread = $('div#thread_' + overflow[0].id + '[data-board="' + overflow[0].board + '"][data-cached="yes"]'); - - if(thread.length > 0) { - $('div[id*="thread_"]').last().after(thread.attr('data-board', overflow[0].board).attr("data-cached", "no").css('display', 'block')); - boardheader.insertBefore(thread); - addukkohide.call(boardheader); - $(document).trigger('new_post', thread); - } - overflow.shift(); - - loading = false; - $('.pages').hide().html(""); - }); - break; - } - } - clearTimeout(ukkotimer); - ukkotimer = setTimeout(loadnext, 1000); - }; - - $(window).on('scroll', loadnext); - - ukkotimer = setTimeout(loadnext, 1000); -}); - -})(); diff --git a/templates/themes/ukko4/info.php b/templates/themes/ukko4/info.php deleted file mode 100644 index dbbf6da8..00000000 --- a/templates/themes/ukko4/info.php +++ /dev/null @@ -1,55 +0,0 @@ - 'Board name', - 'name' => 'title', - 'type' => 'text', - 'default' => 'Ukko' - ); - $theme['config'][] = array( - 'title' => 'Board URI', - 'name' => 'uri', - 'type' => 'text', - 'default' => '*', - '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'] = 'ukko4_build'; - $theme['install_callback'] = 'ukko4_install'; - - if(!function_exists('ukko4_install')) { - function ukko4_install($settings) { - if (!file_exists($settings['uri'])) - @mkdir($settings['uri'], 0777) or error("Couldn't create " . $settings['uri'] . ". Check permissions.", true); - file_write($settings['uri'] . '/ukko.js', Element('themes/ukko/ukko.js', array())); - } - } - diff --git a/templates/themes/ukko4/theme.php b/templates/themes/ukko4/theme.php deleted file mode 100644 index 4511483e..00000000 --- a/templates/themes/ukko4/theme.php +++ /dev/null @@ -1,162 +0,0 @@ -settings = $settings; - - if (! ($action == 'all' || $action == 'post' || $action == 'post-thread' || $action == 'post-delete')) { - return; - } - - $action = generation_strategy('sb_ukko', array()); - - if ($action == 'delete') { - file_unlink($settings['uri'] . '/index.html'); - if ($config['api']['enabled']) { - $jsonFilename = $settings['uri'] . '/0.json'; - file_unlink($jsonFilename); - $jsonFilename = $settings['uri'] . '/catalog.json'; - file_unlink($jsonFilename); - $jsonFilename = $settings['uri'] . '/threads.json'; - file_unlink($jsonFilename); - } - } - elseif ($action == 'rebuild') { - file_write($settings['uri'] . '/index.html', $ukko->build()); - } - } - - class ukko4 { - public $settings; - public function build($mod = false) { - global $config; - $boards = listBoards(); - - $body = ''; - $overflow = array(); - $board = array( - 'dir' => $this->settings['uri'] . "/", - 'url' => $this->settings['uri'], - 'uri' => $this->settings['uri'], - 'name' => $this->settings['title'], - 'title' => sprintf($this->settings['subtitle'], $this->settings['thread_limit']) - ); - - $boardsforukko = array(); - $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']); - array_push($boardsforukko,$_board); - } - $query = preg_replace('/UNION ALL $/', 'ORDER BY `bump` DESC', $query); - $query = query($query) or error(db_error()); - - $count = 0; - $threads = array(); - if ($config['api']['enabled']) { - $apithreads = 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, $mod ? '?/' : $config['root'], $mod); - - $posts = prepare(sprintf("SELECT * FROM ``posts_%s`` WHERE `thread` = :id ORDER BY `sticky` DESC, `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['files']) - $num_images++; - $post2 = new Post($po, $mod ? '?/' : $config['root'], $mod); - $thread->add($post2); - - } - 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 `files` 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); - if ($config['api']['enabled']) { - array_push($apithreads,$thread); - } - } 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 .= ''; - - // json api - if ($config['api']['enabled']) { - require_once __DIR__. '/../../../inc/api.php'; - $api = new Api(); - $jsonFilename = $board['dir'] . '0.json'; - $json = json_encode($api->translatePage($apithreads)); - file_write($jsonFilename, $json); - - - $catalog = array(); - $catalog[0] = $apithreads; - - $json = json_encode($api->translateCatalog($catalog)); - $jsonFilename = $board['dir'] . 'catalog.json'; - file_write($jsonFilename, $json); - - $json = json_encode($api->translateCatalog($catalog, true)); - $jsonFilename = $board['dir'] . 'threads.json'; - file_write($jsonFilename, $json); - } - $antibot = null; - if (!$antibot) { - $antibot = create_antibot($board['uri']); - } - $antibot->reset(); - - return Element('index.html', array( - 'config' => $config, - 'board' => $board, - 'no_post_form' => $config['overboard_post_form'] ? false : true, - 'body' => $body, - 'mod' => $mod, - 'boardlist' => createBoardlist($mod), - 'boards' => $boardsforukko, - 'antibot' => $antibot ) - ); - } - - }; - -?> diff --git a/templates/themes/ukko4/thumb.png b/templates/themes/ukko4/thumb.png deleted file mode 100644 index eb616ef7d662bddc7b4fec8311ee52df55772aab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13085 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 diff --git a/templates/themes/ukko4/ukko.js b/templates/themes/ukko4/ukko.js deleted file mode 100644 index b2668e0b..00000000 --- a/templates/themes/ukko4/ukko.js +++ /dev/null @@ -1,116 +0,0 @@ -(function(){ - -var cache = new Array(), - thread = false, - loading = false, - ukkotimer = false; - -if (localStorage.hiddenboards === undefined) { - localStorage.hiddenboards = "{}"; -} - -// Load data from HTML5 localStorage -var hiddenboards = JSON.parse(localStorage.hiddenboards); - -var storeboards = function() { - localStorage.hiddenboards = JSON.stringify(hiddenboards); -}; - -$(document).ready(function() { - var addukkohide = function() { - var ukkohide = $(''); - var board = $(this).next().data("board"); - var hr = $("
"); - - $(this).append(ukkohide); - $(this).append(hr); - - if (hiddenboards[board] !== true) { - ukkohide.html(_("(hide threads from this board)")); - hr.hide(); - } - else { - ukkohide.html(_("(show threads from this board)")); - $(this).next().hide(); - } - ukkohide.click(function() { - hiddenboards[board] = (hiddenboards[board] !== true); - if (hiddenboards[board] !== true) { - $('[data-board="'+board+'"]:not([data-cached="yes"])').show().prev(). - find('.ukkohide').html(_("(hide threads from this board)")). - parent().find('hr').hide(); - } - else { - $('[data-board="'+board+'"]:not([data-cached="yes"])').hide().prev(). - find('.ukkohide').html(_("(show threads from this board)")) - .parent().find('hr').show(); - } - storeboards(); - return false; - }); - - }; - $("h2").each(addukkohide); - - $('.pages').hide(); - var loadnext = function() { - if (overflow.length == 0) { - $('.pages').show().html(_("No more threads to display")); - } - while($(window).scrollTop() + $(window).height() + 1000 > $(document).height() && !loading && overflow.length > 0) { - var page = modRoot + overflow[0].board + '/' + overflow[0].page; - thread = $('div#thread_' + overflow[0].id + '[data-board="' + overflow[0].board + '"]'); - if (thread.length > 0 && thread.attr("data-cached") !== 'yes') { // already present - overflow.shift(); - continue; - } - - var boardheader = $('

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

'); - - if($.inArray(page, cache) != -1) { - if (thread.length > 0) { - $('div[id*="thread_"]').last().after(thread.attr('data-board', overflow[0].board).attr("data-cached", "no").css('display', 'block')); - boardheader.insertBefore(thread); - addukkohide.call(boardheader); - $(document).trigger('new_post', thread); - } - overflow.shift(); - } else { - loading = true; - $('.pages').show().html(_("Loading...")); - $.get(page, function(data) { - cache.push(page); - - $(data).find('div[id*="thread_"]').each(function() { - var checkout = $(this).attr('id').replace('thread_', ''); - if ($('div#thread_' + checkout + '[data-board="' + overflow[0].board + '"]').length == 0) { - $('form[name="postcontrols"]').prepend($(this).css('display', 'none').attr("data-cached", "yes").attr('data-board', overflow[0].board)); - } - }); - - thread = $('div#thread_' + overflow[0].id + '[data-board="' + overflow[0].board + '"][data-cached="yes"]'); - - if(thread.length > 0) { - $('div[id*="thread_"]').last().after(thread.attr('data-board', overflow[0].board).attr("data-cached", "no").css('display', 'block')); - boardheader.insertBefore(thread); - addukkohide.call(boardheader); - $(document).trigger('new_post', thread); - } - overflow.shift(); - - loading = false; - $('.pages').hide().html(""); - }); - break; - } - } - clearTimeout(ukkotimer); - ukkotimer = setTimeout(loadnext, 1000); - }; - - $(window).on('scroll', loadnext); - - ukkotimer = setTimeout(loadnext, 1000); -}); - -})();