From 43a6a67844e2b806945e67cd34c593009f54c460 Mon Sep 17 00:00:00 2001 From: towards-a-new-leftypol Date: Sun, 31 Jan 2021 01:20:45 +0000 Subject: [PATCH] Improve robustness when moving / merging threads - previously this would choke on threads where the image file is missing --- inc/mod/pages.php | 22 ++++++++++++++-------- templates/themes/catalog/theme.php | 2 +- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/inc/mod/pages.php b/inc/mod/pages.php index 8e22a1f3..a555c57b 100644 --- a/inc/mod/pages.php +++ b/inc/mod/pages.php @@ -28,6 +28,12 @@ function mod_page($title, $template, $args, $subtitle = false) { ); } +function clone_wrapped_with_exist_check($clonefn, $src, $dest) { + if (file_exists($src)) { + $clonefn($src, $dest); + } +} + function mod_login($redirect = false) { global $config; @@ -1353,9 +1359,9 @@ function mod_move($originBoard, $postID) { // copy image foreach ($post['files'] as $i => &$file) { if ($file['file'] !== 'deleted') - $clone($file['file_path'], sprintf($config['board_path'], $board['uri']) . $config['dir']['img'] . $file['file']); + clone_wrapped_with_exist_check($clone, $file['file_path'], sprintf($config['board_path'], $board['uri']) . $config['dir']['img'] . $file['file']); if (isset($file['thumb']) && !in_array($file['thumb'], array('spoiler', 'deleted', 'file'))) - $clone($file['thumb_path'], sprintf($config['board_path'], $board['uri']) . $config['dir']['thumb'] . $file['thumb']); + clone_wrapped_with_exist_check($clone, $file['thumb_path'], sprintf($config['board_path'], $board['uri']) . $config['dir']['thumb'] . $file['thumb']); } } @@ -1416,8 +1422,8 @@ function mod_move($originBoard, $postID) { if ($post['has_file']) { // copy image foreach ($post['files'] as $i => &$file) { - $clone($file['file_path'], sprintf($config['board_path'], $board['uri']) . $config['dir']['img'] . $file['file']); - $clone($file['thumb_path'], sprintf($config['board_path'], $board['uri']) . $config['dir']['thumb'] . $file['thumb']); + clone_wrapped_with_exist_check($clone, $file['file_path'], sprintf($config['board_path'], $board['uri']) . $config['dir']['img'] . $file['file']); + clone_wrapped_with_exist_check($clone, $file['thumb_path'], sprintf($config['board_path'], $board['uri']) . $config['dir']['thumb'] . $file['thumb']); } } // insert reply @@ -1610,9 +1616,9 @@ function mod_merge($originBoard, $postID) { // copy image foreach ($post['files'] as $i => &$file) { if ($file['file'] !== 'deleted') - $clone($file['file_path'], sprintf($config['board_path'], $board['uri']) . $config['dir']['img'] . $file['file']); + clone_wrapped_with_exist_check($clone, $file['file_path'], sprintf($config['board_path'], $board['uri']) . $config['dir']['img'] . $file['file']); if (isset($file['thumb']) && !in_array($file['thumb'], array('spoiler', 'deleted', 'file'))) - $clone($file['thumb_path'], sprintf($config['board_path'], $board['uri']) . $config['dir']['thumb'] . $file['thumb']); + clone_wrapped_with_exist_check($clone, $file['thumb_path'], sprintf($config['board_path'], $board['uri']) . $config['dir']['thumb'] . $file['thumb']); } } @@ -1673,8 +1679,8 @@ function mod_merge($originBoard, $postID) { if ($post['has_file']) { // copy image foreach ($post['files'] as $i => &$file) { - $clone($file['file_path'], sprintf($config['board_path'], $board['uri']) . $config['dir']['img'] . $file['file']); - $clone($file['thumb_path'], sprintf($config['board_path'], $board['uri']) . $config['dir']['thumb'] . $file['thumb']); + clone_wrapped_with_exist_check($clone, $file['file_path'], sprintf($config['board_path'], $board['uri']) . $config['dir']['img'] . $file['file']); + clone_wrapped_with_exist_check($clone, $file['thumb_path'], sprintf($config['board_path'], $board['uri']) . $config['dir']['thumb'] . $file['thumb']); } } // insert reply diff --git a/templates/themes/catalog/theme.php b/templates/themes/catalog/theme.php index d52e094c..0ec58259 100644 --- a/templates/themes/catalog/theme.php +++ b/templates/themes/catalog/theme.php @@ -50,7 +50,7 @@ elseif ($action == 'rebuild') { print_err("catalog_build calling Catalog.build 2"); $b->build($settings, $board); - if($settings['has_overboard']) { + if(isset($settings['has_overboard']) && $settings['has_overboard']) { $b->buildOverboardCatalog($settings, $boards); } }