function isThreadSeed() { global $_isThreadSeed; if (empty($_isThreadSeed)) { global $_G; $tid = $_G['tid']; $_isThreadSeed = PTHelper::isThreadHasSeed($tid); } return $_isThreadSeed; }
/** * 原来花园“您正在使用**地址登录”的位置 * @param array $params * @return string */ function global_cpnav_extra2($params) { $ip = PTHelper::GetIPString(); $iptype = PTHelper::GetIPType($ip); $ip = htmlentities($ip); /** * @var string $return */ include template('ngpt:hooks/global/cpnav_extra2'); return $return; }
/** * 用户信息栏项底部 * @return array */ function viewthread_sidebottom() { return []; global $_G; $up = $_G['user_info']['stat_up']; $down = $_G['user_info']['stat_down']; $up = PTHelper::getReadableFileSize($up); $down = PTHelper::getReadableFileSize($down); $script = <<<HTML <dl class="pil cl"> <dt>统计上传</dt><dd>{$up}</dd> <dt>统计下载</dt><dd>{$down}</dd> </dl> <br/> HTML; return array($script); }
$sql = <<<SQL SELECT seed_id FROM {$tbl} WHERE tid={$tid}; SQL; $seed = DB::fetch_first($sql); $reason = $_POST['reason']; $penalty = $_POST['penalty']; if (empty($seed) || empty($seed['seed_id'])) { deleteThreadAndSeed($tid); $seed_not_exists++; continue; } if (strlen($reason) <= 0) { $reason = '未写明理由'; } $data = ['penalty' => $penalty, 'reason' => $reason, 'seed_id' => $seed['seed_id']]; $res = PTHelper::getApiCurl("seed/delete", $data); if ($res['result'] != 'success') { if ($res['reason'] == 'not exists') { deleteThreadAndSeed($tid); $seed_not_exists++; continue; } else { throw new Exception("删除seed_id : {$seed['seed_id']} 失败" . $res['extra']); } } else { $seed_info = $res['extra']; $threadinfo = DB::query("SELECT tid FROM " . DB::table('forum_thread') . " WHERE tid='{$tid}' LIMIT 1;"); $threadnum = DB::num_rows($threadinfo); DB::free_result($threadinfo); // 如果帖子未删除 if ($threadnum <= 0) {
$tbl = DB::table("ngpt_seed"); $sql = <<<SQL SELECT seed_id FROM {$tbl} WHERE tid={$tid}; SQL; $seed = DB::fetch_first($sql); if (empty($seed) || empty($seed['seed_id'])) { $seed_not_exists++; } if (!isset($_POST['downcoe'])) { $_POST['downcoe'] = -1; } if (!isset($_POST['upcoe'])) { $_POST['upcoe'] = -1; } $data = ['seed_id' => $seed['seed_id'], 'upcoe' => $_POST['upcoe'], 'downcoe' => $_POST['downcoe'], 'replace' => $_POST['replace'], 'duration' => intval($_POST['duration']) * 3600 * 24, 'reason' => $reason]; $res = PTHelper::getApiCurl("seed/set-coef", $data); if ($res['result'] != 'success') { if ($res['reason'] == 'not exists') { $seed_not_exists++; } else { throw new Exception("修改seed_id : {$seed['seed_id']} 失败" . $res['extra']); } } else { $seed_info = $res['extra']; $threadinfo = DB::query("SELECT tid FROM " . DB::table('forum_thread') . " WHERE tid='{$tid}' LIMIT 1;"); $threadnum = DB::num_rows($threadinfo); DB::free_result($threadinfo); // 如果帖子未删除 if ($threadnum <= 0) { $thread_not_exists++; }
$form['upcoe_max'] = $upcoe * 100; } if ($onlyblue) { $form['downcoe_min'] = 0; $form['downcoe_max'] = 0; } else { if ($downcoelarger) { $form['downcoe_min'] = $downcoe * 100; } else { $form['downcoe_max'] = $downcoe * 100; } } if ($nodead) { $form['nodead'] = true; } $api = PTHelper::getApiCurl('seed/search', http_build_query($form), true); if (empty($api) || $api['result'] != 'succeed') { throw new Exception('搜索失败,请检查种子服务器配置'); } $seed_ids = $api['extra']; //获取所有的种子对应的tid $tbl = DB::table("ngpt_seed"); $ids = implode(',', $seed_ids); $res = []; if (!empty($ids)) { $sql = <<<SQL SELECT seed_id,tid FROM {$tbl} WHERE seed_id IN ({$ids}); SQL; $res = DB::fetch_all($sql); } //上面查到的是乱序的,必须重新排一遍序。
public static function getUserInfo($uid) { $key_u = 'ui' . $uid; $key_t = 'uitime' . $uid; loadcache([$key_t, $key_u]); $user_info = null; if (!empty($_G['cache'][$key_t]) && !empty($_G['cache'][$key_u])) { $user_info = json_decode($_G['cache'][$key_u], true); $time = intval($_G['cache'][$key_t]); if ($time < time()) { $user_info = null; } } if (empty($user_info)) { $user_info = PTHelper::getApiCurl('user/info', ['detail' => true]); savecache($key_u, json_encode($user_info)); savecache($key_t, time() + 120); $tbl = DB::table('common_member_count'); $up = $user_info['stat_up'] >> 20; $down = $user_info['stat_down'] >> 20; $sql = <<<EOF UPDATE {$tbl} SET extcredits2='{$up}', extcredits3='{$down}' WHERE uid='{$uid}'; EOF; $ret = DB::query($sql); } return $user_info; }
$picroot = $_G['siteurl'] . 'source/plugin/ngpt/static/image/'; $picrootvar = '\'' . $picroot . '\''; } else { $floatwindowid = 'resinfodisplay_file'; $ok = false; include template('ngpt:err/err-infloat'); } break; case 'labelinfo': $info = PTHelper::getApiCurl('seed/info', ['query_json' => json_encode([$_POST['seed_id'] => 0])], true)['extra']; $fields = json_decode($info[0]['detail_info'], true); $labels = ['infohash' => $info[0]['info_hash'], 'threadtype' => '', 'fields' => $fields]; break; case 'peerinfo': global $_G; $info = PTHelper::getApiCurl('seed/peer-info', ['seed_id' => $_POST['seed_id']])['extra']; $all = json_encode($info['all']); $leechers = json_encode($info['leechers']); $seeders = json_encode($info['seeders']); $history = ''; if ($_G['adminid'] == 1) { //TODO 种子下载历史 } break; default: showmessage('你在干嘛?'); } if ($ok) { include template("ngpt:resinfodisplay/resinfodisplay-{$_POST['op']}"); } echo <<<XML
$dztbl_ngpt_seeds = DB::table("ngpt_seed"); $sql = <<<EOF SELECT {$dztbl_ngpt_seeds}.seed_id, {$dztbl_ngpt_seeds}.tid, {$dztbl_ngpt_seeds}.fid FROM `{$dztbl_ngpt_seeds}` WHERE {$dztbl_ngpt_seeds}.tid IN ({$str_thread_ids}); EOF; $seeds = DB::fetch_all($sql); $req_json = []; foreach ($seeds as $seed) { $req_json[$seed['seed_id']] = $seed['tid']; } $data = ['query_json' => json_encode($req_json)]; $res = PTHelper::getApiCurl("seed/info", $data, true); if (empty($res) || $res['result'] == 'failed') { return; throw new Exception("种子服务器返回错误"); } else { $_G['threads_seeds'] = $res['extra']; foreach ($_G['threads_seeds'] as &$s) { $tmp = $s['coef_expire_time']; if ($tmp != 0) { $s['coef_expire_time'] = "剩余" . PTHelper::getReadableTimeFromMinutes($tmp / 60); } else { if (!($s['up_coef'] == 100 && $s['down_coef'] == 100)) { $s['coef_expire_time'] = '永久'; } else { $s['coef_expire_time'] = ''; } } $s['live_time'] = PTHelper::getReadableTimeFromMinutes($s['live_time'] / 60); } }
/** * 处理浏览帖子逻辑,并返回一个 Discuz 模板,该模板会被加入到帖子内容前 * 例: * return template("common/header"); * @param int $tid 即将浏览的帖子ID * @return string */ function viewthread($tid) { $record_seed = PTHelper::getSeedInfoBy('tid', $tid); $seedexists = $record_seed['is_valid']; $seedid = $record_seed['seed_id']; $infohash = $record_seed['info_hash']; $filename = $record_seed['file_name']; $filesize = $record_seed['file_size']; $filesize_str = PTHelper::getReadableFileSize($filesize); $filecount = $record_seed['file_count']; $seeds = $record_seed['seeder_count']; $leechers = $record_seed['leecher_count']; $finished = $record_seed['completed_count']; $lastactive = strtotime($record_seed['last_active_time']); $lastactive_str = date('Y-m-d H:i:s', $lastactive); $status = 'Normal'; //废弃的 $pubdate = strtotime($record_seed['pub_time']); $pubdate_str = date('Y-m-d H:i:s', $lastactive); $traffic = $record_seed['traffic_up']; $traffic_str = PTHelper::getReadableFileSize($traffic); $livetime = $record_seed['live_time']; $livetime_str = PTHelper::getReadableTimeFromMinutes($livetime / 60.0); $coef_expire = intval($record_seed['coef_expire_time']); if ($coef_expire != 0) { $coef_expire = PTHelper::getReadableTimeFromMinutes($coef_expire / 60.0); } else { $coef_expire = "永久"; } $upcoeff = $record_seed['up_coef']; $upcoeff_str = $upcoeff . "% " . $coef_expire; $downcoeff = $record_seed['down_coef']; $downcoeff_str = $downcoeff . "% " . $coef_expire; $seedingip_str = 'ipv4/ipv6'; $filename = $record_seed['torrent_name']; $downseedpageurl = PTHelper::getApiUrl("seed/download", ['seed_id' => $record_seed['seed_id']]); $downseedpageurl = preg_replace("/127.0.0.1/", $_SERVER['SERVER_ADDR'], $downseedpageurl); $candownloadstatus = 'normal'; $return = null; include template('ngpt:resthread-view'); return $return; }
$s_share_ratio_color_str = 'navy'; } elseif ($s_share_ratio < 5) { $s_share_ratio_color_str = 'mediumblue'; } elseif ($s_share_ratio < 10) { $s_share_ratio_color_str = '#00A200'; } else { $s_share_ratio_color_str = '#00DA00'; } // 正在上传、正在下载、完成数 if ($t_cdstate_b) { // 统计某个用户的实际上传中/下载中的种子数量 // 由于某个用户对一个种子可能只有v4或者只有v6,所以应该将二者合起来判断 // 由于 Discuz 不支持 UNION(安全性问题),所以只好在 PHP 中手工去重(去虫 XD) // 注意这么做可能会让机器开销增大! // 关于 $r1、$r2、$r3、$r4 的命名——确实有点作用域污染的意味,不过后面别用这么短的就可以了。 // 正在上传下载peer数 $numuploadingpeers = $detail_info['seeder_count']; $numdownloadingpeers = $detail_info['leecher_count']; // 正在上传下载数 $numuploadingseeds = $detail_info['seed_up_count']; $numdownloadingseeds = $detail_info['seed_down_count']; $numpublishedseeds = $detail_info['published_seed']; // 下载完成数 $numdownloadedseeds = $detail_info['completed_count']; } // passkey 和 tracker if ($t_cdstate_b) { $passkey = $detail_info['passkey']; $fulltracker = PTHelper::getApiUrl('tracker/announce'); $fulltracker = preg_replace("/127.0.0.1/", $_SERVER['SERVER_ADDR'], $fulltracker); }