$table = BB_BT_USERS; $value = (double) str_replace(',', '.', $this->request['value']); foreach (array('KB' => 1, 'MB' => 2, 'GB' => 3, 'TB' => 4) as $s => $m) { if (strpos($this->request['value'], $s) !== false) { $value *= pow(1024, $m); break; } } $value = sprintf('%.0f', $value); $this->response['new_value'] = humn_size($value, null, null, ' '); if (!($btu = get_bt_userdata($user_id))) { require INC_DIR . 'functions_torrent.php'; generate_passkey($user_id, true); $btu = get_bt_userdata($user_id); } $btu[$field] = $value; $this->response['update_ids']['u_ratio'] = (string) get_bt_ratio($btu); break; case 'user_points': $value = htmlCHR($value); $value = (double) str_replace(',', '.', $this->request['value']); $value = sprintf('%.2f', $value); $this->response['new_value'] = $value; break; default: $this->ajax_die("invalid profile field: {$field}"); } $value_sql = DB()->escape($value, true); DB()->query("UPDATE {$table} SET {$field} = {$value_sql} WHERE user_id = {$user_id} LIMIT 1"); cache_rm_user_sessions($user_id); $this->response['edit_id'] = $this->request['edit_id'];
$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\n\t\t\tFROM " . BB_BT_USERS . " u\n\t\t\tLEFT JOIN " . BB_BT_DLSTATUS . " dl ON dl.user_id = {$bt_user_id} AND dl.topic_id = {$bt_topic_id}\n\t\t\tWHERE u.user_id = {$bt_user_id}\n\t\t\tLIMIT 1"; } else { $sql = "SELECT user_status\n\t\t\tFROM " . BB_BT_DLSTATUS . "\n\t\t\tWHERE user_id = {$bt_user_id}\n\t\t\t\tAND topic_id = {$bt_topic_id}\n\t\t\tLIMIT 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, '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'] ? '<span title="' . bb_date($tor_info['checked_time']) . '"> · ' . profile_url($tor_info) . ' · <i>' . delta_time($tor_info['checked_time']) . $lang['TOR_BACK'] . '</i></span>' : '', '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, '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)); } }
function show_bt_userdata($user_id) { global $lang, $template; $btu = get_bt_userdata($user_id); $template->assign_vars(array('SHOW_BT_USERDATA' => true, 'UP_TOTAL' => humn_size($btu['u_up_total']), 'UP_BONUS' => humn_size($btu['u_bonus_total']), 'DOWN_TOTAL' => humn_size($btu['u_down_total']), 'DOWN_TOTAL_BYTES' => $btu['u_down_total'], 'USER_RATIO' => get_bt_ratio($btu), 'MIN_DL_FOR_RATIO' => humn_size(MIN_DL_FOR_RATIO), 'MIN_DL_BYTES' => MIN_DL_FOR_RATIO, 'AUTH_KEY' => $btu['auth_key'] ? $btu['auth_key'] : $lang['NONE'], 'SPEED_UP' => humn_size($btu['speed_up'], 0, 'KB') . '/s', 'SPEED_DOWN' => humn_size($btu['speed_down'], 0, 'KB') . '/s')); }
function show_bt_userdata($user_id) { global $lang, $template; $btu = get_bt_userdata($user_id); $template->assign_vars(array('SHOW_BT_USERDATA' => true, 'UP_TOTAL' => humn_size($btu['u_up_total']), 'UP_BONUS' => humn_size($btu['u_up_bonus']), 'RELEASED' => humn_size($btu['u_up_release']), 'DOWN_TOTAL' => humn_size($btu['u_down_total']), 'DOWN_TOTAL_BYTES' => $btu['u_down_total'], 'USER_RATIO' => get_bt_ratio($btu), 'MIN_DL_FOR_RATIO' => humn_size(MIN_DL_FOR_RATIO), 'MIN_DL_BYTES' => MIN_DL_FOR_RATIO, 'AUTH_KEY' => $btu['auth_key'] ? $btu['auth_key'] : $lang['NONE'], 'TD_DL' => humn_size($btu['down_today']), 'TD_UL' => humn_size($btu['up_today']), 'TD_REL' => humn_size($btu['up_release_today']), 'TD_BONUS' => humn_size($btu['up_bonus_today']), 'TD_POINTS' => $btu['auth_key'] ? $btu['points_today'] : '0.00', 'YS_DL' => humn_size($btu['down_yesterday']), 'YS_UL' => humn_size($btu['up_yesterday']), 'YS_REL' => humn_size($btu['up_release_yesterday']), 'YS_BONUS' => humn_size($btu['up_bonus_yesterday']), 'YS_POINTS' => $btu['auth_key'] ? $btu['points_yesterday'] : '0.00', 'SPEED_UP' => humn_size($btu['speed_up'], 0, 'KB') . '/s', 'SPEED_DOWN' => humn_size($btu['speed_down'], 0, 'KB') . '/s')); }
$tz = 13; } if ($tz != $bb_cfg['board_timezone']) { // Set current user timezone DB()->query("UPDATE " . BB_USERS . " SET user_timezone = {$tz} WHERE user_id = " . $userdata['user_id'] . " LIMIT 1"); $bb_cfg['board_timezone'] = $tz; cache_rm_user_sessions($userdata['user_id']); } break; case 'get_traf_stats': $user_id = (int) $this->request['user_id']; $btu = get_bt_userdata($user_id); $profiledata = get_userdata($user_id); $speed_up = $btu['speed_up'] ? humn_size($btu['speed_up']) . '/s' : '0 KB/s'; $speed_down = $btu['speed_down'] ? humn_size($btu['speed_down']) . '/s' : '0 KB/s'; $user_ratio = $btu['u_down_total'] > MIN_DL_FOR_RATIO ? '<b class="gen">' . get_bt_ratio($btu) . '</b>' : $lang['IT_WILL_BE_DOWN'] . ' <b>' . humn_size(MIN_DL_FOR_RATIO) . '</b>'; $html = ' <tr class="row3"> <th style="padding: 0;"></th> <th>' . $lang['DOWNLOADED'] . '</th> <th>' . $lang['UPLOADED'] . '</th> <th>' . $lang['RELEASED'] . '</th> <th>' . $lang['BONUS'] . '</th>'; $html .= $bb_cfg['seed_bonus_enabled'] ? '<th>' . $lang['SEED_BONUS'] . '</th>' : ''; $html .= '</tr> <tr class="row1"> <td>' . $lang['TOTAL_TRAF'] . '</td> <td id="u_down_total"><span class="editable bold leechmed">' . humn_size($btu['u_down_total']) . '</span></td> <td id="u_up_total"><span class="editable bold seedmed">' . humn_size($btu['u_up_total']) . '</span></td> <td id="u_up_release"><span class="editable bold seedmed">' . humn_size($btu['u_up_release']) . '</span></td> <td id="u_up_bonus"><span class="editable bold seedmed">' . humn_size($btu['u_up_bonus']) . '</span></td>';
function send_torrent_with_passkey($filename) { global $attachment, $auth_pages, $userdata, $bb_cfg, $tr_cfg, $lang; if (!$bb_cfg['bt_add_auth_key'] || $attachment['extension'] !== TORRENT_EXT || !($size = @filesize($filename))) { return; } $post_id = $poster_id = $passkey_val = ''; $user_id = $userdata['user_id']; $attach_id = $attachment['attach_id']; if (!($passkey_key = $bb_cfg['passkey_key'])) { bb_die('Could not add passkey (wrong config $bb_cfg[\'passkey_key\'])'); } // Get $post_id & $poster_id foreach ($auth_pages as $rid => $row) { if ($row['attach_id'] == $attach_id) { $post_id = $row['post_id']; $poster_id = $row['user_id_1']; break; } } // Get $topic_id $topic_id_sql = 'SELECT topic_id FROM ' . BB_POSTS . ' WHERE post_id = ' . (int) $post_id; if (!($topic_id_result = DB()->sql_query($topic_id_sql))) { bb_die('Could not query post information'); } $topic_id_row = DB()->sql_fetchrow($topic_id_result); $topic_id = $topic_id_row['topic_id']; if (!$attachment['tracker_status']) { bb_die($lang['PASSKEY_ERR_TOR_NOT_REG']); } if (bf($userdata['user_opt'], 'user_opt', 'dis_passkey') && !IS_GUEST) { bb_die('Could not add passkey'); } if ($bt_userdata = get_bt_userdata($user_id)) { $passkey_val = $bt_userdata['auth_key']; } if (!$passkey_val) { if (!($passkey_val = generate_passkey($user_id))) { bb_simple_die('Could not generate passkey'); } elseif ($bb_cfg['ocelot']['enabled']) { ocelot_update_tracker('add_user', array('id' => $user_id, 'passkey' => $passkey_val)); } } // Ratio limits $min_ratio = $bb_cfg['bt_min_ratio_allow_dl_tor']; if ($min_ratio && $user_id != $poster_id && ($user_ratio = get_bt_ratio($bt_userdata)) !== null) { if ($user_ratio < $min_ratio && $post_id) { $dl = DB()->fetch_row("\n\t\t\t\tSELECT dl.user_status\n\t\t\t\tFROM " . BB_POSTS . " p\n\t\t\t\tLEFT JOIN " . BB_BT_DLSTATUS . " dl ON dl.topic_id = p.topic_id AND dl.user_id = {$user_id}\n\t\t\t\tWHERE p.post_id = {$post_id}\n\t\t\t\tLIMIT 1\n\t\t\t"); if (!isset($dl['user_status']) || $dl['user_status'] != DL_STATUS_COMPLETE) { bb_die(sprintf($lang['BT_LOW_RATIO_FOR_DL'], round($user_ratio, 2), "search.php?dlu={$user_id}&dlc=1")); } } } // Announce URL $ann_url = $bb_cfg['bt_announce_url']; if (!($tor = bdecode_file($filename))) { bb_die('This is not a bencoded file'); } $announce = $bb_cfg['ocelot']['enabled'] ? strval($bb_cfg['ocelot']['url'] . $passkey_val . "/announce") : strval($ann_url . "?{$passkey_key}={$passkey_val}"); // Replace original announce url with tracker default if ($bb_cfg['bt_replace_ann_url'] || !isset($tor['announce'])) { $tor['announce'] = $announce; } // Delete all additional urls if ($bb_cfg['bt_del_addit_ann_urls'] || $bb_cfg['bt_disable_dht']) { unset($tor['announce-list']); } elseif (isset($tor['announce-list'])) { $tor['announce-list'] = array_merge($tor['announce-list'], array(array($announce))); } // Add retracker if (isset($tr_cfg['retracker']) && $tr_cfg['retracker']) { if (bf($userdata['user_opt'], 'user_opt', 'user_retracker') || IS_GUEST) { if (!isset($tor['announce-list'])) { $tor['announce-list'] = array(array($announce), array($tr_cfg['retracker_host'])); } else { $tor['announce-list'] = array_merge($tor['announce-list'], array(array($tr_cfg['retracker_host']))); } } } // Add publisher & topic url $publisher_name = $bb_cfg['server_name']; $publisher_url = make_url(TOPIC_URL . $topic_id); $tor['publisher'] = strval($publisher_name); unset($tor['publisher.utf-8']); $tor['publisher-url'] = strval($publisher_url); unset($tor['publisher-url.utf-8']); $tor['comment'] = strval($publisher_url); unset($tor['comment.utf-8']); // Send torrent $output = bencode($tor); $dl_fname = $bb_cfg['torrent_name_style'] ? '[' . $bb_cfg['server_name'] . '].t' . $topic_id . '.torrent' : clean_filename(basename($attachment['real_filename'])); if (!empty($_COOKIE['explain'])) { $out = "attach path: {$filename}<br /><br />"; $tor['info']['pieces'] = '[...] ' . strlen($tor['info']['pieces']) . ' bytes'; $out .= print_r($tor, true); bb_die("<pre>{$out}</pre>"); } header("Content-Type: application/x-bittorrent; name=\"{$dl_fname}\""); header("Content-Disposition: attachment; filename=\"{$dl_fname}\""); bb_exit($output); }