From 6612a5af8a198253054266ecb7f186c763262026 Mon Sep 17 00:00:00 2001 From: Exile Date: Sun, 21 Dec 2014 01:24:22 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A3=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D0=B0=D1=82=D1=82=D0=B0=D1=87-=D0=BC=D0=BE=D0=B4?= =?UTF-8?q?=D0=B0,=20=D0=BF=D0=BE=D0=B4=D0=B3=D0=BE=D1=82=D0=BE=D0=B2?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=BF=D0=BE=D0=B4=20=D0=B7=D0=B0=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D1=83=20=D0=BD=D0=BE=D0=B2=D1=8B=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Промежуточная ревизия, неработоспособна. --- library/attach_mod/attachment_mod.php | 3 - library/attach_mod/displaying.php | 92 --- library/attach_mod/displaying_torrent.php | 1 + .../attach_mod/includes/functions_admin.php | 7 - .../attach_mod/includes/functions_attach.php | 69 +- .../includes/functions_filetypes.php | 293 --------- .../includes/functions_includes.php | 204 ------ .../attach_mod/includes/functions_selects.php | 251 -------- .../attach_mod/includes/functions_thumbs.php | 187 ------ library/includes/viewtopic_torrent.php | 604 ++++++++++++++++++ viewtopic.php | 62 +- 11 files changed, 641 insertions(+), 1132 deletions(-) delete mode 100644 library/attach_mod/includes/functions_filetypes.php delete mode 100644 library/attach_mod/includes/functions_includes.php delete mode 100644 library/attach_mod/includes/functions_selects.php delete mode 100644 library/attach_mod/includes/functions_thumbs.php create mode 100644 library/includes/viewtopic_torrent.php diff --git a/library/attach_mod/attachment_mod.php b/library/attach_mod/attachment_mod.php index d613f5cb6..8867e940a 100644 --- a/library/attach_mod/attachment_mod.php +++ b/library/attach_mod/attachment_mod.php @@ -1,10 +1,7 @@ assign_block_vars('postrow.attach.cat_images', array( - 'DOWNLOAD_NAME' => $display_name, - 'S_UPLOAD_IMAGE' => $upload_image, - 'IMG_SRC' => $img_source, - 'FILESIZE' => $filesize, - 'COMMENT' => $comment, - )); - - // Directly Viewed Image ... update the download count - if (!$download_link) - { - $sql = 'UPDATE ' . BB_ATTACHMENTS_DESC . ' - SET download_count = download_count + 1 - WHERE attach_id = ' . (int) $attachments['_' . $post_id][$i]['attach_id']; - - if (!(DB()->sql_query($sql))) - { - bb_die('Could not update attachment download count'); - } - } - } - - if ($thumbnail) - { - // Images, but display Thumbnail - if ($attach_config['upload_dir'][0] == '/' || ( $attach_config['upload_dir'][0] != '/' && $attach_config['upload_dir'][1] == ':')) - { - $thumb_source = BB_ROOT . DOWNLOAD_URL . $attachments['_' . $post_id][$i]['attach_id'] . '&thumb=1'; - } - else - { - $thumb_source = $thumbnail_filename; - } - - $template->assign_block_vars('postrow.attach.cat_thumb_images', array( - 'DOWNLOAD_NAME' => $display_name, - 'S_UPLOAD_IMAGE' => $upload_image, - 'IMG_SRC' => BB_ROOT . DOWNLOAD_URL . $attachments['_' . $post_id][$i]['attach_id'], - 'IMG_THUMB_SRC' => $thumb_source, - 'FILESIZE' => $filesize, - 'COMMENT' => $comment, - )); - } - // bt if ($link && ($attachments['_'. $post_id][$i]['extension'] === TORRENT_EXT)) { diff --git a/library/attach_mod/displaying_torrent.php b/library/attach_mod/displaying_torrent.php index c99254e03..693e884f9 100644 --- a/library/attach_mod/displaying_torrent.php +++ b/library/attach_mod/displaying_torrent.php @@ -1,5 +1,6 @@ Theoretically up to 158 Forums saveable. :) -* We are using a base of 64, but splitting it to one-char and two-char numbers. :) -*/ function auth_pack($auth_array) { $one_char_encoding = '#'; @@ -105,9 +78,6 @@ function auth_pack($auth_array) return $auth_cache; } -/** -* Reverse the auth_pack process -*/ function auth_unpack($auth_cache) { $one_char_encoding = '#'; @@ -138,9 +108,6 @@ function auth_unpack($auth_cache) return $auth; } -/** -* Used for determining if Forum ID is authed, please use this Function on all Posting Screens -*/ function is_forum_authed($auth_cache, $check_forum_id) { $one_char_encoding = '#'; @@ -179,9 +146,6 @@ function is_forum_authed($auth_cache, $check_forum_id) return false; } -/** -* Deletes an Attachment -*/ function unlink_attach($filename, $mode = false) { global $upload_dir, $attach_config; @@ -202,9 +166,6 @@ function unlink_attach($filename, $mode = false) return $deleted; } -/** -* Check if Attachment exist -*/ function attachment_exists($filename) { global $upload_dir, $attach_config; @@ -221,28 +182,6 @@ function attachment_exists($filename) } } -/** -* Check if Thumbnail exist -*/ -function thumbnail_exists($filename) -{ - global $upload_dir, $attach_config; - - $filename = basename($filename); - - if (!@file_exists(@amod_realpath($upload_dir . '/' . THUMB_DIR . '/t_' . $filename))) - { - return false; - } - else - { - return true; - } -} - -/** -* Physical Filename stored already ? -*/ function physical_filename_already_stored($filename) { if ($filename == '') @@ -267,9 +206,6 @@ function physical_filename_already_stored($filename) return ($num_rows == 0) ? false : true; } -/** -* get all attachments from a post (could be an post array too) -*/ function get_attachments_from_post($post_id_array) { global $attach_config; @@ -321,9 +257,6 @@ function get_attachments_from_post($post_id_array) return $attachments; } -/** -* Count Filesize of Attachments in Database based on the attachment id -*/ function get_total_attach_filesize($attach_ids) { if (!is_array($attach_ids) || !sizeof($attach_ids)) @@ -361,7 +294,7 @@ function get_total_attach_filesize($attach_ids) */ function get_extension_informations() { - return; //$GLOBALS['datastore']->get('attach_extensions'); + return; } // diff --git a/library/attach_mod/includes/functions_filetypes.php b/library/attach_mod/includes/functions_filetypes.php deleted file mode 100644 index 928f05b4c..000000000 --- a/library/attach_mod/includes/functions_filetypes.php +++ /dev/null @@ -1,293 +0,0 @@ -= 4294967294) - { - $value -= 4294967296; - } - - return $value; -} - -/** -* Read Word (2 Bytes) from File - Note: It's an Intel Word -*/ -function read_word($fp) -{ - $data = fread($fp, 2); - - $value = ord($data[1]) * 256 + ord($data[0]); - - return $value; -} - -/** -* Read Byte -*/ -function read_byte($fp) -{ - $data = fread($fp, 1); - - $value = ord($data); - - return $value; -} - -/** -* Get Image Dimensions -*/ -function image_getdimension($file) -{ - - $size = @getimagesize($file); - - if ($size[0] != 0 || $size[1] != 0) - { - return $size; - } - - // Try to get the Dimension manually, depending on the mimetype - $fp = @fopen($file, 'rb'); - if (!$fp) - { - return $size; - } - - $error = FALSE; - - // BMP - IMAGE - - $tmp_str = fread($fp, 2); - if ($tmp_str == 'BM') - { - $length = read_longint($fp); - - if ($length <= 6) - { - $error = true; - } - - if (!$error) - { - $i = read_longint($fp); - if ( $i != 0) - { - $error = true; - } - } - - if (!$error) - { - $i = read_longint($fp); - - if ($i != 0x3E && $i != 0x76 && $i != 0x436 && $i != 0x36) - { - $error = true; - } - } - - if (!$error) - { - $tmp_str = fread($fp, 4); - $width = read_longint($fp); - $height = read_longint($fp); - - if ($width > 3000 || $height > 3000) - { - $error = true; - } - } - } - else - { - $error = true; - } - - if (!$error) - { - fclose($fp); - return array( - $width, - $height, - 6 - ); - } - - $error = false; - fclose($fp); - - // GIF - IMAGE - - $fp = @fopen($file, 'rb'); - - $tmp_str = fread($fp, 3); - - if ($tmp_str == 'GIF') - { - $tmp_str = fread($fp, 3); - $width = read_word($fp); - $height = read_word($fp); - - $info_byte = fread($fp, 1); - $info_byte = ord($info_byte); - if (($info_byte & 0x80) != 0x80 && ($info_byte & 0x80) != 0) - { - $error = true; - } - - if (!$error) - { - if (($info_byte & 8) != 0) - { - $error = true; - } - - } - } - else - { - $error = true; - } - - if (!$error) - { - fclose($fp); - return array( - $width, - $height, - 1 - ); - } - - $error = false; - fclose($fp); - - // JPG - IMAGE - $fp = @fopen($file, 'rb'); - - $tmp_str = fread($fp, 4); - $w1 = read_word($fp); - - if (intval($w1) < 16) - { - $error = true; - } - - if (!$error) - { - $tmp_str = fread($fp, 4); - if ($tmp_str == 'JFIF') - { - $o_byte = fread($fp, 1); - if (intval($o_byte) != 0) - { - $error = true; - } - - if (!$error) - { - $str = fread($fp, 2); - $b = read_byte($fp); - - if ($b != 0 && $b != 1 && $b != 2) - { - $error = true; - } - } - - if (!$error) - { - $width = read_word($fp); - $height = read_word($fp); - - if ($width <= 0 || $height <= 0) - { - $error = true; - } - } - } - } - else - { - $error = true; - } - - if (!$error) - { - fclose($fp); - return array( - $width, - $height, - 2 - ); - } - - $error = false; - fclose($fp); - - // PCX - IMAGE - - $fp = @fopen($file, 'rb'); - - $tmp_str = fread($fp, 3); - - if ((ord($tmp_str[0]) == 10) && (ord($tmp_str[1]) == 0 || ord($tmp_str[1]) == 2 || ord($tmp_str[1]) == 3 || ord($tmp_str[1]) == 4 || ord($tmp_str[1]) == 5) && (ord($tmp_str[2]) == 1)) - { - $b = fread($fp, 1); - - if (ord($b) != 1 && ord($b) != 2 && ord($b) != 4 && ord($b) != 8 && ord($b) != 24) - { - $error = true; - } - - if (!$error) - { - $xmin = read_word($fp); - $ymin = read_word($fp); - $xmax = read_word($fp); - $ymax = read_word($fp); - $tmp_str = fread($fp, 52); - - $b = fread($fp, 1); - if ($b != 0) - { - $error = true; - } - } - - if (!$error) - { - $width = $xmax - $xmin + 1; - $height = $ymax - $ymin + 1; - } - } - else - { - $error = true; - } - - if (!$error) - { - fclose($fp); - return array( - $width, - $height, - 7 - ); - } - - fclose($fp); - - return $size; -} \ No newline at end of file diff --git a/library/attach_mod/includes/functions_includes.php b/library/attach_mod/includes/functions_includes.php deleted file mode 100644 index a4e8708ad..000000000 --- a/library/attach_mod/includes/functions_includes.php +++ /dev/null @@ -1,204 +0,0 @@ -'; - $s_auth_can .= (($is_auth['auth_download']) ? $lang['RULES_DOWNLOAD_CAN'] : $lang['RULES_DOWNLOAD_CANNOT'] ) . '
'; -} - -/** -* Called from admin_users.php and admin_groups.php in order to process Quota Settings (admin/admin_users.php:admin/admin_groups.php) -*/ -function attachment_quota_settings($admin_mode, $submit = false, $mode) -{ - global $template, $lang, $attach_config; - - if ($attach_config['upload_dir'][0] == '/' || ($attach_config['upload_dir'][0] != '/' && $attach_config['upload_dir'][1] == ':')) - { - $upload_dir = $attach_config['upload_dir']; - } - else - { - $upload_dir = BB_ROOT . $attach_config['upload_dir']; - } - - include(ATTACH_DIR .'includes/functions_selects.php'); - if (!function_exists("process_quota_settings")) - include(ATTACH_DIR . 'includes/functions_admin.php'); - - $user_id = 0; - - if ($admin_mode == 'user') - { - // We overwrite submit here... to be sure - $submit = (isset($_POST['submit'])) ? true : false; - - if (!$submit && $mode != 'save') - { - $user_id = get_var(POST_USERS_URL, 0); - $u_name = get_var('username', ''); - - if (!$user_id && !$u_name) - { - bb_die($lang['NO_USER_ID_SPECIFIED'] ); - } - - if ($user_id) - { - $this_userdata['user_id'] = $user_id; - } - else - { - // Get userdata is handling the sanitizing of username - $this_userdata = get_userdata($_POST['username'], true); - } - - $user_id = (int) $this_userdata['user_id']; - } - else - { - $user_id = get_var('id', 0); - - if (!$user_id) - { - bb_die($lang['NO_USER_ID_SPECIFIED'] ); - } - } - } - - if ($admin_mode == 'user' && !$submit && $mode != 'save') - { - // Show the contents - $sql = 'SELECT quota_limit_id, quota_type FROM ' . BB_QUOTA . ' WHERE user_id = ' . (int) $user_id; - - if (!($result = DB()->sql_query($sql))) - { - bb_die('Unable to get quota settings #1'); - } - - $pm_quota = $upload_quota = 0; - - if ($row = DB()->sql_fetchrow($result)) - { - do - { - if ($row['quota_type'] == QUOTA_UPLOAD_LIMIT) - { - $upload_quota = $row['quota_limit_id']; - } - else if ($row['quota_type'] == QUOTA_PM_LIMIT) - { - $pm_quota = $row['quota_limit_id']; - } - } - while ($row = DB()->sql_fetchrow($result)); - } - else - { - // Set Default Quota Limit - $upload_quota = $attach_config['default_upload_quota']; - $pm_quota = $attach_config['default_pm_quota']; - - } - DB()->sql_freeresult($result); - - $template->assign_vars(array( - 'S_SELECT_UPLOAD_QUOTA' => quota_limit_select('user_upload_quota', $upload_quota), - 'S_SELECT_PM_QUOTA' => quota_limit_select('user_pm_quota', $pm_quota), - )); - } - - if ($admin_mode == 'user' && $submit && @$_POST['delete_user']) - { - process_quota_settings($admin_mode, $user_id, QUOTA_UPLOAD_LIMIT, 0); - process_quota_settings($admin_mode, $user_id, QUOTA_PM_LIMIT, 0); - } - else if ($admin_mode == 'user' && $submit && $mode == 'save') - { - // Get the contents - $upload_quota = get_var('user_upload_quota', 0); - $pm_quota = get_var('user_pm_quota', 0); - - process_quota_settings($admin_mode, $user_id, QUOTA_UPLOAD_LIMIT, $upload_quota); - process_quota_settings($admin_mode, $user_id, QUOTA_PM_LIMIT, $pm_quota); - } - - if ($admin_mode == 'group' && $mode == 'newgroup') - { - return; - } - - if ($admin_mode == 'group' && !$submit && isset($_POST['edit'])) - { - // Get group id again - $group_id = get_var(POST_GROUPS_URL, 0); - - // Show the contents - $sql = 'SELECT quota_limit_id, quota_type FROM ' . BB_QUOTA . ' WHERE group_id = ' . (int) $group_id; - - if (!($result = DB()->sql_query($sql))) - { - bb_die('Unable to get quota settings #2'); - } - - $pm_quota = $upload_quota = 0; - - if ($row = DB()->sql_fetchrow($result)) - { - do - { - if ($row['quota_type'] == QUOTA_UPLOAD_LIMIT) - { - $upload_quota = $row['quota_limit_id']; - } - else if ($row['quota_type'] == QUOTA_PM_LIMIT) - { - $pm_quota = $row['quota_limit_id']; - } - } - while ($row = DB()->sql_fetchrow($result)); - } - else - { - // Set Default Quota Limit - $upload_quota = $attach_config['default_upload_quota']; - $pm_quota = $attach_config['default_pm_quota']; - } - DB()->sql_freeresult($result); - - $template->assign_vars(array( - 'S_SELECT_UPLOAD_QUOTA' => quota_limit_select('group_upload_quota', $upload_quota), - 'S_SELECT_PM_QUOTA' => quota_limit_select('group_pm_quota', $pm_quota), - )); - } - - if ($admin_mode == 'group' && $submit && isset($_POST['group_delete'])) - { - $group_id = get_var(POST_GROUPS_URL, 0); - - process_quota_settings($admin_mode, $group_id, QUOTA_UPLOAD_LIMIT, 0); - process_quota_settings($admin_mode, $group_id, QUOTA_PM_LIMIT, 0); - } - else if ($admin_mode == 'group' && $submit) - { - $group_id = get_var(POST_GROUPS_URL, 0); - - // Get the contents - $upload_quota = get_var('group_upload_quota', 0); - $pm_quota = get_var('group_pm_quota', 0); - - process_quota_settings($admin_mode, $group_id, QUOTA_UPLOAD_LIMIT, $upload_quota); - process_quota_settings($admin_mode, $group_id, QUOTA_PM_LIMIT, $pm_quota); - } -} \ No newline at end of file diff --git a/library/attach_mod/includes/functions_selects.php b/library/attach_mod/includes/functions_selects.php deleted file mode 100644 index be709e94c..000000000 --- a/library/attach_mod/includes/functions_selects.php +++ /dev/null @@ -1,251 +0,0 @@ -sql_query($sql))) - { - bb_die('Could not query extension groups table #1'); - } - - $group_select = ''; - - return $group_select; -} - -/** -* select download mode -*/ -function download_select($select_name, $group_id = 0) -{ - global $types_download, $modes_download; - - if ($group_id) - { - $sql = 'SELECT download_mode - FROM ' . BB_EXTENSION_GROUPS . ' - WHERE group_id = ' . (int) $group_id; - - if (!($result = DB()->sql_query($sql))) - { - bb_die('Could not query extension groups table #2'); - } - $row = DB()->sql_fetchrow($result); - DB()->sql_freeresult($result); - - if (!isset($row['download_mode'])) - { - return ''; - } - - $download_mode = $row['download_mode']; - } - - $group_select = ''; - - return $group_select; -} - -/** -* select category types -*/ -function category_select($select_name, $group_id = 0) -{ - global $types_category, $modes_category; - - $sql = 'SELECT group_id, cat_id FROM ' . BB_EXTENSION_GROUPS; - - if (!($result = DB()->sql_query($sql))) - { - bb_die('Could not select category'); - } - - $rows = DB()->sql_fetchrowset($result); - $num_rows = DB()->num_rows($result); - DB()->sql_freeresult($result); - - $type_category = 0; - - if ($num_rows > 0) - { - for ($i = 0; $i < $num_rows; $i++) - { - if ($group_id == $rows[$i]['group_id']) - { - $category_type = $rows[$i]['cat_id']; - } - } - } - - $types = array(NONE_CAT); - $modes = array('none'); - - for ($i = 0; $i < sizeof($types_category); $i++) - { - $types[] = $types_category[$i]; - $modes[] = $modes_category[$i]; - } - - $group_select = ''; - - return $group_select; -} - -/** -* Select size mode -*/ -function size_select($select_name, $size_compare) -{ - global $lang; - - $size_types_text = array($lang['BYTES'], $lang['KB'], $lang['MB']); - $size_types = array('b', 'kb', 'mb'); - - $select_field = ''; - - return $select_field; -} - -/** -* select quota limit -*/ -function quota_limit_select($select_name, $default_quota = 0) -{ - global $lang; - - $sql = 'SELECT quota_limit_id, quota_desc FROM ' . BB_QUOTA_LIMITS . ' ORDER BY quota_limit ASC'; - - if (!($result = DB()->sql_query($sql))) - { - bb_die('Could not query quota limits table #1'); - } - - $quota_select = ''; - - return $quota_select; -} - -/** -* select default quota limit -*/ -function default_quota_limit_select($select_name, $default_quota = 0) -{ - global $lang; - - $sql = 'SELECT quota_limit_id, quota_desc FROM ' . BB_QUOTA_LIMITS . ' ORDER BY quota_limit ASC'; - - if (!($result = DB()->sql_query($sql))) - { - bb_die('Could not query quota limits table #2'); - } - - $quota_select = ''; - - return $quota_select; -} \ No newline at end of file diff --git a/library/attach_mod/includes/functions_thumbs.php b/library/attach_mod/includes/functions_thumbs.php deleted file mode 100644 index 7c446de58..000000000 --- a/library/attach_mod/includes/functions_thumbs.php +++ /dev/null @@ -1,187 +0,0 @@ - $height) - { - return array( - round($width * ($max_width / $width)), - round($height * ($max_width / $width)) - ); - } - else - { - return array( - round($width * ($max_width / $height)), - round($height * ($max_width / $height)) - ); - } -} - -/** -* Check if imagick is present -*/ -function is_imagick() -{ - global $imagick, $attach_config; - - if ($attach_config['img_imagick'] != '') - { - $imagick = $attach_config['img_imagick']; - return true; - } - else - { - return false; - } -} - -/** -* Get supported image types -*/ -function get_supported_image_types($type) -{ - if (@extension_loaded('gd')) - { - $format = imagetypes(); - $new_type = 0; - - switch ($type) - { - case 1: - $new_type = ($format & IMG_GIF) ? IMG_GIF : 0; - break; - case 2: - case 9: - case 10: - case 11: - case 12: - $new_type = ($format & IMG_JPG) ? IMG_JPG : 0; - break; - case 3: - $new_type = ($format & IMG_PNG) ? IMG_PNG : 0; - break; - case 6: - case 15: - $new_type = ($format & IMG_WBMP) ? IMG_WBMP : 0; - break; - } - - return array( - 'gd' => ($new_type) ? true : false, - 'format' => $new_type, - 'version' => (function_exists('imagecreatetruecolor')) ? 2 : 1 - ); - } - - return array('gd' => false); -} - -/** -* Create thumbnail -*/ -function create_thumbnail($source, $new_file, $mimetype) -{ - global $attach_config, $imagick; - - $source = amod_realpath($source); - $min_filesize = (int) $attach_config['img_min_thumb_filesize']; - $img_filesize = (@file_exists($source)) ? @filesize($source) : false; - - if (!$img_filesize || $img_filesize <= $min_filesize) - { - return false; - } - - list($width, $height, $type, ) = getimagesize($source); - - if (!$width || !$height) - { - return false; - } - - list($new_width, $new_height) = get_img_size_format($width, $height); - - $tmp_path = $old_file = ''; - - $used_imagick = false; - - if (is_imagick()) - { - passthru($imagick . ' -quality 85 -antialias -sample ' . $new_width . 'x' . $new_height . ' "' . str_replace('\\', '/', $source) . '" +profile "*" "' . str_replace('\\', '/', $new_file) . '"'); - if (@file_exists($new_file)) - { - $used_imagick = true; - } - } - - if (!$used_imagick) - { - $type = get_supported_image_types($type); - - if ($type['gd']) - { - switch ($type['format']) - { - case IMG_GIF: - $image = imagecreatefromgif($source); - break; - case IMG_JPG: - $image = imagecreatefromjpeg($source); - break; - case IMG_PNG: - $image = imagecreatefrompng($source); - break; - case IMG_WBMP: - $image = imagecreatefromwbmp($source); - break; - } - - if ($type['version'] == 1 || !$attach_config['use_gd2']) - { - $new_image = imagecreate($new_width, $new_height); - imagecopyresized($new_image, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height); - } - else - { - $new_image = imagecreatetruecolor($new_width, $new_height); - imagecopyresampled($new_image, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height); - } - - switch ($type['format']) - { - case IMG_GIF: - imagegif($new_image, $new_file); - break; - case IMG_JPG: - imagejpeg($new_image, $new_file, 90); - break; - case IMG_PNG: - imagepng($new_image, $new_file); - break; - case IMG_WBMP: - imagewbmp($new_image, $new_file); - break; - } - - imagedestroy($new_image); - } - } - - if (!@file_exists($new_file)) - { - return false; - } - - @chmod($new_file, 0664); - - return true; -} \ No newline at end of file diff --git a/library/includes/viewtopic_torrent.php b/library/includes/viewtopic_torrent.php new file mode 100644 index 000000000..104f39228 --- /dev/null +++ b/library/includes/viewtopic_torrent.php @@ -0,0 +1,604 @@ +'; + +$peers_cnt = $seed_count = 0; +$seeders = $leechers = ''; +$tor_info = array(); + +$template->assign_vars(array( + 'SEED_COUNT' => false, + 'LEECH_COUNT' => false, + 'TOR_SPEED_UP' => false, + 'TOR_SPEED_DOWN' => false, + 'SHOW_RATIO_WARN' => false, +)); + +// Define show peers mode (count only || user names with complete % || full details) +$cfg_sp_mode = $bb_cfg['bt_show_peers_mode']; +$get_sp_mode = (isset($_GET['spmode'])) ? $_GET['spmode'] : ''; + +$s_mode = 'count'; + +if ($cfg_sp_mode == SHOW_PEERS_NAMES) +{ + $s_mode = 'names'; +} +else if ($cfg_sp_mode == SHOW_PEERS_FULL) +{ + $s_mode = 'full'; +} + +if ($bb_cfg['bt_allow_spmode_change']) +{ + if ($get_sp_mode == 'names') + { + $s_mode = 'names'; + } + else if ($get_sp_mode == 'full') + { + $s_mode = 'full'; + } +} + +$bt_topic_id = $t_data['topic_id']; +$bt_user_id = $userdata['user_id']; +$attach_id = $attachments['_'. $post_id][$i]['attach_id']; +$tracker_status = $attachments['_'. $post_id][$i]['tracker_status']; +$download_count = $attachments['_'. $post_id][$i]['download_count']; +$tor_file_size = humn_size($attachments['_'. $post_id][$i]['filesize']); +$tor_file_time = bb_date($attachments['_'. $post_id][$i]['filetime']); + +$tor_reged = (bool) $tracker_status; +$show_peers = (bool) $bb_cfg['bt_show_peers']; + +$locked = ($t_data['forum_status'] == FORUM_LOCKED || $t_data['topic_status'] == TOPIC_LOCKED); +$tor_auth = ($bt_user_id != GUEST_UID && (($bt_user_id == $poster_id && !$locked) || $is_auth['auth_mod'])); + +$tor_auth_reg = ($tor_auth && $t_data['allow_reg_tracker'] && $post_id == $t_data['topic_first_post_id']); +$tor_auth_del = ($tor_auth && $tor_reged); + +$tracker_link = ($tor_reged) ? $lang['BT_REG_YES'] : $lang['BT_REG_NO']; + +$download_link = DOWNLOAD_URL . $attach_id; +$description = ($comment) ? $comment : preg_replace("#.torrent$#i", '', $display_name); + +if ($tor_auth_reg || $tor_auth_del) +{ + $reg_tor_url = ''. $lang['BT_REG_ON_TRACKER'] .''; + $unreg_tor_url = ''. $lang['BT_UNREG_FROM_TRACKER'] .''; + + $tracker_link = ($tor_reged) ? $unreg_tor_url : $reg_tor_url; +} + +if ($bb_cfg['torrent_name_style']) +{ + $display_name = '['.$bb_cfg['server_name'].'].t' . $bt_topic_id . '.torrent'; +} + +if (!$tor_reged) +{ + $template->assign_block_vars('postrow.attach.tor_not_reged', array( + 'DOWNLOAD_NAME' => $display_name, + 'TRACKER_LINK' => $tracker_link, + 'ATTACH_ID' => $attach_id, + + 'S_UPLOAD_IMAGE' => $upload_image, + 'U_DOWNLOAD_LINK' => $download_link, + 'FILESIZE' => $tor_file_size, + + 'DOWNLOAD_COUNT' => sprintf($lang['DOWNLOAD_NUMBER'], $download_count), + 'POSTED_TIME' => $tor_file_time, + )); + + if ($comment) + { + $template->assign_block_vars('postrow.attach.tor_not_reged.comment', array('COMMENT' => $comment)); + } +} +else +{ + $sql = "SELECT bt.*, u.user_id, u.username, u.user_rank + FROM ". BB_BT_TORRENTS ." bt + LEFT JOIN ". BB_USERS ." u ON(bt.checked_user_id = u.user_id) + WHERE bt.attach_id = $attach_id"; + + if (!$result = DB()->sql_query($sql)) + { + bb_die('Could not obtain torrent information'); + } + $tor_info = DB()->sql_fetchrow($result); + DB()->sql_freeresult($result); +} + +if ($tor_reged && !$tor_info) +{ + DB()->query("UPDATE ". BB_ATTACHMENTS_DESC ." SET tracker_status = 0 WHERE attach_id = $attach_id"); + + bb_die('Torrent status fixed'); +} + +if ($tor_auth) +{ + $template->assign_vars(array( + 'TOR_CONTROLS' => true, + 'TOR_ATTACH_ID' => $attach_id, + )); + + if ($t_data['self_moderated'] || $is_auth['auth_mod']) + { + $template->assign_vars(array('AUTH_MOVE' => true)); + } +} + +if ($tor_reged && $tor_info) +{ + $tor_size = ($tor_info['size']) ? $tor_info['size'] : 0; + $tor_id = $tor_info['topic_id']; + $tor_type = $tor_info['tor_type']; + + // Magnet link + $passkey = DB()->fetch_row("SELECT auth_key FROM ". BB_BT_USERS ." WHERE user_id = ". (int) $bt_user_id ." LIMIT 1"); + $tor_magnet = create_magnet($tor_info['info_hash'], $passkey['auth_key'], $userdata['session_logged_in']); + + // ratio limits + $min_ratio_dl = $bb_cfg['bt_min_ratio_allow_dl_tor']; + $min_ratio_warn = $bb_cfg['bt_min_ratio_warning']; + $dl_allowed = true; + $user_ratio = 0; + + if (($min_ratio_dl || $min_ratio_warn) && $bt_user_id != $poster_id) + { + $sql = "SELECT u.*, dl.user_status + FROM ". BB_BT_USERS ." u + LEFT JOIN ". BB_BT_DLSTATUS ." dl ON dl.user_id = $bt_user_id AND dl.topic_id = $bt_topic_id + WHERE u.user_id = $bt_user_id + LIMIT 1"; + } + else + { + $sql = "SELECT user_status + FROM ". BB_BT_DLSTATUS ." + WHERE user_id = $bt_user_id + AND topic_id = $bt_topic_id + LIMIT 1"; + } + + $bt_userdata = DB()->fetch_row($sql); + + $user_status = isset($bt_userdata['user_status']) ? $bt_userdata['user_status'] : null; + + if (($min_ratio_dl || $min_ratio_warn) && $user_status != DL_STATUS_COMPLETE && $bt_user_id != $poster_id && $tor_type != TOR_TYPE_GOLD) + { + if (($user_ratio = get_bt_ratio($bt_userdata)) !== null) + { + $dl_allowed = ($user_ratio > $min_ratio_dl); + } + + if ((isset($user_ratio) && isset($min_ratio_warn) && $user_ratio < $min_ratio_warn && TR_RATING_LIMITS) || ($bt_userdata['u_down_total'] < MIN_DL_FOR_RATIO)) + { + $template->assign_vars(array( + 'SHOW_RATIO_WARN' => true, + 'RATIO_WARN_MSG' => sprintf($lang['BT_RATIO_WARNING_MSG'], $min_ratio_dl, $bb_cfg['ratio_url_help']), + )); + } + } + + if (!$dl_allowed) + { + $template->assign_block_vars('postrow.attach.tor_reged', array()); + $template->assign_vars(array( + 'TOR_BLOCKED' => true, + 'TOR_BLOCKED_MSG' => sprintf($lang['BT_LOW_RATIO_FOR_DL'], round($user_ratio, 2), "search.php?dlu=$bt_user_id&dlc=1"), + )); + } + else + { + $template->assign_block_vars('postrow.attach.tor_reged', array( + 'DOWNLOAD_NAME' => $display_name, + 'TRACKER_LINK' => $tracker_link, + 'ATTACH_ID' => $attach_id, + 'TOR_SILVER_GOLD' => $tor_type, + + // torrent status mod + 'TOR_FROZEN' => (!IS_AM) ? (isset($bb_cfg['tor_frozen'][$tor_info['tor_status']]) && !(isset($bb_cfg['tor_frozen_author_download'][$tor_info['tor_status']]) && $userdata['user_id'] == $tor_info['poster_id'])) ? true : '' : '', + 'TOR_STATUS_TEXT' => $lang['TOR_STATUS_NAME'][$tor_info['tor_status']], + 'TOR_STATUS_ICON' => $bb_cfg['tor_icons'][$tor_info['tor_status']], + 'TOR_STATUS_BY' => ($tor_info['checked_user_id'] && $is_auth['auth_mod']) ? (' · '. profile_url($tor_info) .' · '. delta_time($tor_info['checked_time']) . $lang['TOR_BACK'] .'') : '', + 'TOR_STATUS_SELECT' => build_select('sel_status', array_flip($lang['TOR_STATUS_NAME']), TOR_APPROVED), + 'TOR_STATUS_REPLY' => $bb_cfg['tor_comment'] && !IS_GUEST && in_array($tor_info['tor_status'], $bb_cfg['tor_reply']) && $userdata['user_id'] == $tor_info['poster_id'] && $t_data['topic_status'] != TOPIC_LOCKED, + //end torrent status mod + + 'S_UPLOAD_IMAGE' => $upload_image, + 'U_DOWNLOAD_LINK' => $download_link, + 'DL_LINK_CLASS' => (isset($bt_userdata['user_status'])) ? $dl_link_css[$bt_userdata['user_status']] : 'genmed', + 'DL_TITLE_CLASS' => (isset($bt_userdata['user_status'])) ? $dl_status_css[$bt_userdata['user_status']] : 'gen', + 'FILESIZE' => $tor_file_size, + 'MAGNET' => $tor_magnet, + 'HASH' => strtoupper(bin2hex($tor_info['info_hash'])), + 'DOWNLOAD_COUNT' => sprintf($lang['DOWNLOAD_NUMBER'], $download_count), + 'REGED_TIME' => bb_date($tor_info['reg_time']), + 'REGED_DELTA' => delta_time($tor_info['reg_time']), + 'TORRENT_SIZE' => humn_size($tor_size), + 'COMPLETED' => sprintf($lang['DOWNLOAD_NUMBER'], $tor_info['complete_count']), + )); + + if ($comment) + { + $template->assign_block_vars('postrow.attach.tor_reged.comment', array('COMMENT' => $comment)); + } + } + + if ($bb_cfg['show_tor_info_in_dl_list']) + { + $template->assign_vars(array( + 'SHOW_DL_LIST' => true, + 'SHOW_DL_LIST_TOR_INFO' => true, + + 'TOR_SIZE' => humn_size($tor_size), + 'TOR_LONGEVITY' => delta_time($tor_info['reg_time']), + 'TOR_COMPLETED' => declension($tor_info['complete_count'], 'times'), + )); + } + + // Show peers + if ($show_peers) + { + // Sorting order in full mode + if ($s_mode == 'full') + { + $full_mode_order = 'tr.remain'; + $full_mode_sort_dir = 'ASC'; + + if (isset($_REQUEST['psortasc'])) + { + $full_mode_sort_dir = 'ASC'; + } + else if (isset($_REQUEST['psortdesc'])) + { + $full_mode_sort_dir = 'DESC'; + } + + if (isset($_REQUEST['porder'])) + { + $peer_orders = array( + 'name' => 'u.username', + 'ip' => 'tr.ip', + 'port' => 'tr.port', + 'compl' => 'tr.remain', + 'cup' => 'tr.uploaded', + 'cdown' => 'tr.downloaded', + 'sup' => 'tr.speed_up', + 'sdown' => 'tr.speed_down', + 'time' => 'tr.update_time', + ); + + foreach ($peer_orders as $get_key => $order_by_value) + { + if ($_REQUEST['porder'] == $get_key) + { + $full_mode_order = $order_by_value; + break; + } + } + } + } + // SQL for each mode + if ($s_mode == 'count') + { + $sql = "SELECT seeders, leechers, speed_up, speed_down + FROM ". BB_BT_TRACKER_SNAP ." + WHERE topic_id = $tor_id + LIMIT 1"; + } + else if ($s_mode == 'names') + { + $sql = "SELECT tr.user_id, tr.ip, tr.port, tr.remain, tr.seeder, u.username, u.user_rank + FROM ". BB_BT_TRACKER ." tr, ". BB_USERS ." u + WHERE tr.topic_id = $tor_id + AND u.user_id = tr.user_id + GROUP BY tr.ip, tr.user_id, tr.port, tr.seeder + ORDER BY u.username + LIMIT $show_peers_limit"; + } + else + { + $sql = "SELECT + tr.user_id, tr.ip, tr.port, tr.uploaded, tr.downloaded, tr.remain, + tr.seeder, tr.releaser, tr.speed_up, tr.speed_down, tr.update_time, + tr.complete_percent, u.username, u.user_rank + FROM ". BB_BT_TRACKER ." tr + LEFT JOIN ". BB_USERS ." u ON u.user_id = tr.user_id + WHERE tr.topic_id = $tor_id + GROUP BY tr.ip, tr.user_id, tr.port, tr.seeder + ORDER BY $full_mode_order $full_mode_sort_dir + LIMIT $show_peers_limit"; + } + + // Build peers table + if ($peers = DB()->fetch_rowset($sql)) + { + $peers_cnt = count($peers); + + $cnt = $tr = $sp_up = $sp_down = $sp_up_tot = $sp_down_tot = array(); + $cnt['s'] = $tr['s'] = $sp_up['s'] = $sp_down['s'] = $sp_up_tot['s'] = $sp_down_tot['s'] = 0; + $cnt['l'] = $tr['l'] = $sp_up['l'] = $sp_down['l'] = $sp_up_tot['l'] = $sp_down_tot['l'] = 0; + + $max_up = $max_down = $max_sp_up = $max_sp_down = array(); + $max_up['s'] = $max_down['s'] = $max_sp_up['s'] = $max_sp_down['s'] = 0; + $max_up['l'] = $max_down['l'] = $max_sp_up['l'] = $max_sp_down['l'] = 0; + $max_up_id['s'] = $max_down_id['s'] = $max_sp_up_id['s'] = $max_sp_down_id['s'] = ($peers_cnt + 1); + $max_up_id['l'] = $max_down_id['l'] = $max_sp_up_id['l'] = $max_sp_down_id['l'] = ($peers_cnt + 1); + + if ($s_mode == 'full') + { + foreach ($peers as $pid => $peer) + { + $x = ($peer['seeder']) ? 's' : 'l'; + $cnt[$x]++; + $sp_up_tot[$x] += $peer['speed_up']; + $sp_down_tot[$x] += $peer['speed_down']; + + $guest = ($peer['user_id'] == GUEST_UID || is_null($peer['username'])); + $p_max_up = $peer['uploaded']; + $p_max_down = $peer['downloaded']; + + if ($p_max_up > $max_up[$x]) + { + $max_up[$x] = $p_max_up; + $max_up_id[$x] = $pid; + } + if ($peer['speed_up'] > $max_sp_up[$x]) + { + $max_sp_up[$x] = $peer['speed_up']; + $max_sp_up_id[$x] = $pid; + } + if ($p_max_down > $max_down[$x]) + { + $max_down[$x] = $p_max_down; + $max_down_id[$x] = $pid; + } + if ($peer['speed_down'] > $max_sp_down[$x]) + { + $max_sp_down[$x] = $peer['speed_down']; + $max_sp_down_id[$x] = $pid; + } + } + $max_down_id['s'] = $max_sp_down_id['s'] = ($peers_cnt + 1); + + if ($cnt['s'] == 1) + { + $max_up_id['s'] = $max_sp_up_id['s'] = ($peers_cnt + 1); + } + if ($cnt['l'] == 1) + { + $max_up_id['l'] = $max_down_id['l'] = $max_sp_up_id['l'] = $max_sp_down_id['l'] = ($peers_cnt + 1); + } + } + + if ($s_mode == 'count') + { + $tmp = array(); + $tmp[0]['seeder'] = $tmp[0]['username'] = $tmp[1]['username'] = 0; + $tmp[1]['seeder'] = 1; + $tmp[0]['username'] = (int) @$peers[0]['leechers']; + $tmp[1]['username'] = (int) @$peers[0]['seeders']; + $tor_speed_up = (int) @$peers[0]['speed_up']; + $tor_speed_down = (int) @$peers[0]['speed_down']; + $peers = $tmp; + + $template->assign_vars(array( + 'TOR_SPEED_UP' => ($tor_speed_up) ? humn_size($tor_speed_up, 0, 'KB') .'/s' : '0 KB/s', + 'TOR_SPEED_DOWN' => ($tor_speed_down) ? humn_size($tor_speed_down, 0, 'KB') .'/s' : '0 KB/s', + )); + } + + foreach ($peers as $pid => $peer) + { + $u_prof_href = ($s_mode == 'count') ? '#' : "profile.php?mode=viewprofile&u=". $peer['user_id'] ."#torrent"; + + // Full details mode + if ($s_mode == 'full') + { + $ip = bt_show_ip($peer['ip']); + $port = bt_show_port($peer['port']); + + // peer max/current up/down + $p_max_up = $peer['uploaded']; + $p_max_down = $peer['downloaded']; + $p_cur_up = $peer['uploaded']; + $p_cur_down = $peer['downloaded']; + + if ($peer['seeder']) + { + $x = 's'; + $x_row = 'srow'; + $x_full = 'sfull'; + + if (!defined('SEEDER_EXIST')) + { + define('SEEDER_EXIST', true); + $seed_order_action = "viewtopic.php?". POST_TOPIC_URL ."=$bt_topic_id&spmode=full#seeders"; + + $template->assign_block_vars("$x_full", array( + 'SEED_ORD_ACT' => $seed_order_action, + 'SEEDERS_UP_TOT' => humn_size($sp_up_tot[$x], 0, 'KB') .'/s' + )); + + if ($ip) + { + $template->assign_block_vars("$x_full.iphead", array()); + } + if ($port !== false) + { + $template->assign_block_vars("$x_full.porthead", array()); + } + } + $compl_perc = ($tor_size) ? round(($p_max_up / $tor_size), 1) : 0; + } + else + { + $x = 'l'; + $x_row = 'lrow'; + $x_full = 'lfull'; + + if (!defined('LEECHER_EXIST')) + { + define('LEECHER_EXIST', true); + $leech_order_action = "viewtopic.php?". POST_TOPIC_URL ."=$bt_topic_id&spmode=full#leechers"; + + $template->assign_block_vars("$x_full", array( + 'LEECH_ORD_ACT' => $leech_order_action, + 'LEECHERS_UP_TOT' => humn_size($sp_up_tot[$x], 0, 'KB') .'/s', + 'LEECHERS_DOWN_TOT' => humn_size($sp_down_tot[$x], 0, 'KB') .'/s' + )); + + if ($ip) + { + $template->assign_block_vars("$x_full.iphead", array()); + } + if ($port !== false) + { + $template->assign_block_vars("$x_full.porthead", array()); + } + } + $compl_size = ($peer['remain'] && $tor_size && $tor_size > $peer['remain']) ? ($tor_size - $peer['remain']) : 0; + $compl_perc = ($compl_size) ? floor($compl_size * 100 / $tor_size) : 0; + } + + $rel_sign = (!$guest && $peer['releaser']) ? ' ®' : ''; + $name = profile_url($peer). $rel_sign; + $up_tot = ($p_max_up) ? humn_size($p_max_up) : '-'; + $down_tot = ($p_max_down) ? humn_size($p_max_down) : '-'; + $up_ratio = ($p_max_down) ? round(($p_max_up / $p_max_down), 2) : ''; + $sp_up = ($peer['speed_up']) ? humn_size($peer['speed_up'], 0, 'KB') .'/s' : '-'; + $sp_down = ($peer['speed_down']) ? humn_size($peer['speed_down'], 0, 'KB') .'/s' : '-'; + + $bgr_class = (!($tr[$x] % 2)) ? $bgr_class_1 : $bgr_class_2; + $row_bgr = ($change_peers_bgr_over) ? " class=\"$bgr_class\" onmouseover=\"this.className='$bgr_class_over';\" onmouseout=\"this.className='$bgr_class';\"" : ''; + $tr[$x]++; + + $template->assign_block_vars("$x_full.$x_row", array( + 'ROW_BGR' => $row_bgr, + 'NAME' => ($peer['update_time']) ? $name : "$name", + 'COMPL_PRC' => $compl_perc, + 'UP_TOTAL' => ($max_up_id[$x] == $pid) ? "$up_tot" : $up_tot, + 'DOWN_TOTAL' => ($max_down_id[$x] == $pid) ? "$down_tot" : $down_tot, + 'SPEED_UP' => ($max_sp_up_id[$x] == $pid) ? "$sp_up" : $sp_up, + 'SPEED_DOWN' => ($max_sp_down_id[$x] == $pid) ? "$sp_down" : $sp_down, + 'UP_TOTAL_RAW' => $peer['uploaded'], + 'DOWN_TOTAL_RAW' => $peer['downloaded'], + 'SPEED_UP_RAW' => $peer['speed_up'], + 'SPEED_DOWN_RAW' => $peer['speed_down'], + 'UPD_EXP_TIME' => ($peer['update_time']) ? $lang['DL_UPD'] . bb_date($peer['update_time'], 'd-M-y H:i') .' · '. delta_time($peer['update_time']) . $lang['TOR_BACK'] : $lang['DL_STOPPED'], + 'TOR_RATIO' => ($up_ratio) ? $lang['USER_RATIO'] . "UL/DL: $up_ratio" : '', + )); + + if ($ip) + { + $template->assign_block_vars("$x_full.$x_row.ip", array('IP' => $ip)); + } + if ($port !== false) + { + $template->assign_block_vars("$x_full.$x_row.port", array('PORT' => $port)); + } + } + // Count only & only names modes + else + { + if ($peer['seeder']) + { + $seeders .= ''. $peer['username'] .', '; + $seed_count = $peer['username']; + } + else + { + $compl_size = (@$peer['remain'] && $tor_size && $tor_size > $peer['remain']) ? ($tor_size - $peer['remain']) : 0; + $compl_perc = ($compl_size) ? floor($compl_size * 100 / $tor_size) : 0; + + $leechers .= ''. $peer['username'] .''; + $leechers .= ($s_mode == 'names') ? ' ['. $compl_perc .'%]' : ''; + $leechers .= ', '; + $leech_count = $peer['username']; + } + } + } + + if ($s_mode != 'full' && $seeders) + { + $seeders[strlen($seeders)-9] = ' '; + $template->assign_vars(array( + 'SEED_LIST' => $seeders, + 'SEED_COUNT' => ($seed_count) ? $seed_count : 0, + )); + } + if ($s_mode != 'full' && $leechers) + { + $leechers[strlen($leechers)-9] = ' '; + $template->assign_vars(array( + 'LEECH_LIST' => $leechers, + 'LEECH_COUNT' => ($leech_count) ? $leech_count : 0, + )); + } + } + unset($peers); + + // Show "seeder last seen info" + if (($s_mode == 'count' && !$seed_count) || (!$seeders && !defined('SEEDER_EXIST'))) + { + $last_seen_time = ($tor_info['seeder_last_seen']) ? delta_time($tor_info['seeder_last_seen']) : $lang['NEVER']; + + $template->assign_vars(array( + 'SEEDER_LAST_SEEN' => sprintf($lang['SEEDER_LAST_SEEN'], $last_seen_time), + )); + } + } + + $template->assign_block_vars('tor_title', array('U_DOWNLOAD_LINK' => $download_link)); + + if ($peers_cnt > $max_peers_before_overflow && $s_mode == 'full') + { + $template->assign_vars(array('PEERS_DIV_STYLE' => $peers_div_style_overflow)); + $template->assign_vars(array('PEERS_OVERFLOW' => true)); + } + else + { + $template->assign_vars(array('PEERS_DIV_STYLE' => $peers_div_style_normal)); + } +} + +if ($bb_cfg['bt_allow_spmode_change'] && $s_mode != 'full') +{ + $template->assign_vars(array( + 'PEERS_FULL_LINK' => true, + 'SPMODE_FULL_HREF' => "viewtopic.php?". POST_TOPIC_URL ."=$bt_topic_id&spmode=full#seeders", + )); +} + +$template->assign_vars(array( + 'SHOW_DL_LIST_LINK' => (($bb_cfg['bt_show_dl_list'] || $bb_cfg['allow_dl_list_names_mode']) && $t_data['topic_dl_type'] == TOPIC_DL_TYPE_DL), + 'SHOW_TOR_ACT' => ($tor_reged && $show_peers && (!isset($bb_cfg['tor_no_tor_act'][$tor_info['tor_status']]) || IS_AM)), + 'S_MODE_COUNT' => ($s_mode == 'count'), + 'S_MODE_NAMES' => ($s_mode == 'names'), + 'S_MODE_FULL' => ($s_mode == 'full'), + 'PEER_EXIST' => ($seeders || $leechers || defined('SEEDER_EXIST') || defined('LEECHER_EXIST')), + 'SEED_EXIST' => ($seeders || defined('SEEDER_EXIST')), + 'LEECH_EXIST' => ($leechers || defined('LEECHER_EXIST')), + 'TOR_HELP_LINKS' => $bb_cfg['tor_help_links'], + 'CALL_SEED' => ($bb_cfg['callseed'] && $tor_reged && !isset($bb_cfg['tor_no_tor_act'][$tor_info['tor_status']]) && $seed_count < 3 && $tor_info['call_seed_time'] < (TIMENOW - 86400)), +)); \ No newline at end of file diff --git a/viewtopic.php b/viewtopic.php index e31f29b31..10ddd065c 100644 --- a/viewtopic.php +++ b/viewtopic.php @@ -5,23 +5,24 @@ define('BB_ROOT', './'); require(BB_ROOT .'common.php'); require(INC_DIR .'bbcode.php'); -$user->session_start(); - $datastore->enqueue(array( 'ranks', )); -$topic_id = isset($_GET[POST_TOPIC_URL]) ? (int) $_GET[POST_TOPIC_URL] : 0; -$post_id = (!$topic_id && isset($_GET[POST_POST_URL])) ? (int) $_GET[POST_POST_URL] : 0; -$start = isset($_GET['start']) ? abs(intval($_GET['start'])) : 0; -$newest = 0; - $page_cfg['load_tpl_vars'] = array( 'post_buttons', 'post_icons', 'topic_icons', ); +$user->session_start(); + +$topic_id = isset($_GET[POST_TOPIC_URL]) ? (int) $_GET[POST_TOPIC_URL] : 0; +$post_id = (!$topic_id && isset($_GET[POST_POST_URL])) ? (int) $_GET[POST_POST_URL] : 0; +$start = isset($_GET['start']) ? abs(intval($_GET['start'])) : 0; +$newest = 0; + + // Posts per page $posts_per_page = $bb_cfg['posts_per_page']; $select_ppp = ''; @@ -374,24 +375,17 @@ if (!$ranks = $datastore->get('ranks')) $ranks = $datastore->get('ranks'); } -// // Define censored word matches -// $orig_word = $replacement_word = array(); obtain_word_list($orig_word, $replacement_word); -// // Censor topic title -// -if ( count($orig_word) ) +if (count($orig_word)) { $topic_title = preg_replace($orig_word, $replacement_word, $topic_title); } -// -// Post, reply and other URL generation for -// templating vars -// +// Post, reply and other URL generation for templating vars $new_topic_url = POSTING_URL . "?mode=newtopic&f=" . $forum_id; $reply_topic_url = POSTING_URL . "?mode=reply&t=" . $topic_id; $view_forum_url = FORUM_URL . $forum_id; @@ -649,19 +643,12 @@ for($i = 0; $i < $total_posts; $i++) // Replace naughty words if (count($orig_word)) { - if ($user_sig) - { - $user_sig = str_replace('\"', '"', substr(@preg_replace('#(\>(((?>([^><]+|(?R)))*)\<))#se', "@preg_replace(\$orig_word, \$replacement_word, '\\0')", '>' . $user_sig . '<'), 1, -1)); - } - + if ($user_sig) $user_sig = str_replace('\"', '"', substr(@preg_replace('#(\>(((?>([^><]+|(?R)))*)\<))#se', "@preg_replace(\$orig_word, \$replacement_word, '\\0')", '>' . $user_sig . '<'), 1, -1)); $message = str_replace('\"', '"', substr(@preg_replace('#(\>(((?>([^><]+|(?R)))*)\<))#se', "@preg_replace(\$orig_word, \$replacement_word, '\\0')", '>' . $message . '<'), 1, -1)); } // Replace newlines (we use this rather than nl2br because till recently it wasn't XHTML compliant) - if ($user_sig) - { - $user_sig = $bb_cfg['user_signature_start'] . $user_sig . $bb_cfg['user_signature_end']; - } + if ($user_sig) $user_sig = $bb_cfg['user_signature_start'] . $user_sig . $bb_cfg['user_signature_end']; // Editing information if ($postrow[$i]['post_edit_count']) @@ -702,6 +689,8 @@ for($i = 0; $i < $total_posts; $i++) $mc_select_type[$key] = $value['type']; } + $is_first_post = ($post_id == $t_data['topic_first_post_id']); + $template->assign_block_vars('postrow', array( 'ROW_CLASS' => !($i % 2) ? 'row1' : 'row2', 'POST_ID' => $post_id, @@ -721,7 +710,7 @@ for($i = 0; $i < $total_posts; $i++) 'POSTER_GENDER' => ($bb_cfg['gender']) ? gender_image($postrow[$i]['user_gender']) : '', 'POSTED_AFTER' => ($prev_post_time) ? delta_time($postrow[$i]['post_time'], $prev_post_time) : '', 'IS_UNREAD' => is_unread($postrow[$i]['post_time'], $topic_id, $forum_id), - 'IS_FIRST_POST' => (!$start && ($post_id == $t_data['topic_first_post_id'])), + 'IS_FIRST_POST' => (!$start && $is_first_post), 'MOD_CHECKBOX' => ($moderation && ($start || defined('SPLIT_FORM_START'))), 'POSTER_AVATAR' => $poster_avatar, 'POST_NUMBER' => ($i + $start + 1), @@ -759,7 +748,26 @@ for($i = 0; $i < $total_posts; $i++) display_post_attachments($post_id, $postrow[$i]['post_attachment']); } - if ($moderation && !defined('SPLIT_FORM_START') && ($start || $post_id == $t_data['topic_first_post_id'])) + if ($is_first_post && $t_data['attach_ext_id']) + { + if (IS_GUEST) + { + $template->assign_var('SHOW_GUEST_DL_STUB', ($t_data['attach_ext_id'] == 8)); + } + else if ($t_data['attach_ext_id'] == 8) + { + require(INC_DIR .'viewtopic_torrent.php'); + } + else + { + $template->assign_vars(array( + 'SHOW_ATTACH_DL_LINK' => true, + 'ATTACH_FILESIZE' => humn_size($t_data['filesize']), + )); + } + } + + if ($moderation && !defined('SPLIT_FORM_START') && ($start || $is_first_post)) { define('SPLIT_FORM_START', TRUE); }