Exemple #1
0
function isThreadSeed()
{
    global $_isThreadSeed;
    if (empty($_isThreadSeed)) {
        global $_G;
        $tid = $_G['tid'];
        $_isThreadSeed = PTHelper::isThreadHasSeed($tid);
    }
    return $_isThreadSeed;
}
Exemple #2
0
 /**
  * 原来花园“您正在使用**地址登录”的位置
  * @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);
    }
Exemple #4
0
    $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) {
Exemple #5
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++;
        }
Exemple #6
0
            $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);
        }
        //上面查到的是乱序的,必须重新排一遍序。
Exemple #7
0
    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;
    }
Exemple #8
0
            $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);
    }
}
Exemple #10
0
 /**
  * 处理浏览帖子逻辑,并返回一个 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);
}