mirror of
https://github.com/BillyOutlast/Gazelle-Porn.git
synced 2026-07-01 06:41:50 -04:00
sync: 2025-01-05 20:03:56 +0000
This commit is contained in:
Vendored
+2
-1
@@ -22,5 +22,6 @@
|
||||
"formatFiles.excludedFolders": ["node_modules", ".vscode", ".git", "dist", ".chrome", "vendor"],
|
||||
"editor.detectIndentation": false,
|
||||
"intelephense.environment.phpVersion": "7.4",
|
||||
"makefile.configureOnOpen": false
|
||||
"makefile.configureOnOpen": false,
|
||||
"editor.wordWrap": "off"
|
||||
}
|
||||
|
||||
@@ -5,18 +5,17 @@ namespace Gazelle\Action;
|
||||
class BasicReward {
|
||||
public static function getReward($action): RewardInfo {
|
||||
$rewardInfo = new RewardInfo;
|
||||
global $BaseRewardConfig;
|
||||
$config = $BaseRewardConfig[$action];
|
||||
$rewardInfo->tokenCount = !empty($config['token']) ? $config['token'] : 0;
|
||||
if (!empty($config['token_valid_day']) && $config['token_valid_day'] > 0) {
|
||||
$rewardInfo->tokenExpireTime = add_day(date('Y-m-d'), $config['token_valid_day']);
|
||||
$config = CONFIG['BaseRewardConfig'][$action];
|
||||
$rewardInfo->tokenCount = !empty($config['Token']) ? $config['Token'] : 0;
|
||||
if (!empty($config['TokenValidDay']) && $config['TokenValidDay'] > 0) {
|
||||
$rewardInfo->tokenExpireTime = add_day(date('Y-m-d'), $config['TokenValidDay']);
|
||||
}
|
||||
$rewardInfo->inviteCount = !empty($config['invite']) ? $config['invite'] : 0;
|
||||
if (!empty($config['invite_valid_day']) && $config['invite_valid_day'] > 0) {
|
||||
$rewardInfo->invteExpireTime = add_day(date('Y-m-d'), $config['invite_valid_day']);
|
||||
$rewardInfo->inviteCount = !empty($config['Invite']) ? $config['Invite'] : 0;
|
||||
if (!empty($config['InviteValidDay']) && $config['InviteValidDay'] > 1) {
|
||||
$rewardInfo->invteExpireTime = add_day(date('Y-m-d'), $config['InviteValidDay']);
|
||||
}
|
||||
$rewardInfo->bonus = !empty($config['bonus']) ? $config['bonus'] : 0;
|
||||
$rewardInfo->badgeID = !empty($config['badge_id']) ? $config['badge_id'] : 0;
|
||||
$rewardInfo->bonus = !empty($config['Bonus']) ? $config['Bonus'] : 0;
|
||||
$rewardInfo->badgeID = !empty($config['Badge_id']) ? $config['Badge_id'] : 0;
|
||||
return $rewardInfo;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,16 +3,16 @@
|
||||
namespace Gazelle\Action;
|
||||
|
||||
abstract class UserActionEnum {
|
||||
const UploadTorrent = "upload_torrent";
|
||||
const CheckTorrent = "check_torrent";
|
||||
const Report = "report_torrent";
|
||||
const CreateRequest = "create_request";
|
||||
const FillRequest = "fill_request";
|
||||
const CreateCollage = "create_collage";
|
||||
const FillCollage = "fill_collage";
|
||||
const EditMovie = "edit_movie";
|
||||
const EditArtist = "edit_artist";
|
||||
const PostComment = "post_comment";
|
||||
const CreateTopic = "create_topic";
|
||||
const InviteFriend = "invite_friend"; // need register success
|
||||
const UploadTorrent = "UploadTorrent";
|
||||
const CheckTorrent = "CheckTorrent";
|
||||
const Report = "Report";
|
||||
const CreateRequest = "CreateRequest";
|
||||
const FillRequest = "FillRequest";
|
||||
const CreateCollage = "CreateCollage";
|
||||
const FillCollage = "FillCollage";
|
||||
const EditMovie = "EditMovie";
|
||||
const EditArtist = "EditArtist";
|
||||
const PostComment = "PostComment";
|
||||
const CreateTopic = "CreateTopic";
|
||||
const InviteFriend = "InviteFriend"; // need register success
|
||||
}
|
||||
|
||||
@@ -61,13 +61,13 @@ class ActionTrigger extends \Gazelle\Base {
|
||||
$this->rewardManager->sendReward($reward, [$this->user['ID']], "Basic reward for Create Topic($TopicID).", false, true);
|
||||
}
|
||||
|
||||
public function triggerInviteeRegister(int $Inviter) {
|
||||
public function triggerInviteeRegister(int $Inviter, int $Invitee) {
|
||||
$reward = BasicReward::getReward(UserActionEnum::InviteFriend);
|
||||
$this->rewardManager->sendReward($reward, [$Inviter], "Basic reward for invite user($this->user['ID']).", false, true);
|
||||
$this->rewardManager->sendReward($reward, [$Inviter], "Basic reward for invite user($Invitee).", false, true);
|
||||
}
|
||||
|
||||
public function triggerReport(int $Type, int $ID, $ReportID) {
|
||||
public function triggerReport(string $Type, int $TorrentID, int $ReportID) {
|
||||
$reward = BasicReward::getReward(UserActionEnum::Report);
|
||||
$this->rewardManager->sendReward($reward, [$this->user['ID']], "Basic reward for report($ReportID) $Type($ID).", false, true);
|
||||
$this->rewardManager->sendReward($reward, [$this->user['ID']], "Basic reward for report($ReportID) $Type for torrent($TorrentID).", false, true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -175,7 +175,7 @@ class Donation extends \Gazelle\Base {
|
||||
}
|
||||
|
||||
public function getPendingDonationCount() {
|
||||
if (!$Count = $this->cache->get_value("donations_pending_count")) {
|
||||
if ($Count = $this->cache->get_value("donations_pending_count") === false) {
|
||||
$this->db->prepared_query('SELECT count(*) FROM donations_prepaid_card where status = ?', PrepaidCardStatus::Pending);
|
||||
list($Count) = $this->db->next_record();
|
||||
$this->cache->cache_value("donations_pending_count", $Count);
|
||||
@@ -185,14 +185,13 @@ class Donation extends \Gazelle\Base {
|
||||
|
||||
|
||||
public function getYearProgress() {
|
||||
if (!$YearSum = $this->cache->get_value("donations_year_sum")) {
|
||||
|
||||
if (($YearSum = $this->cache->get_value("donations_year_sum")) === false) {
|
||||
$this->db->query(
|
||||
"SELECT sum(rank) from donations
|
||||
where time >= '" . date("Y-01-01") . "'"
|
||||
);
|
||||
list($YearSum) = $this->db->next_record();
|
||||
$this->cache->cache_value("donations_year_sum", $YearSum);
|
||||
$this->cache->cache_value("donations_year_sum", $YearSum, 86400);
|
||||
}
|
||||
if (empty($YearSum)) {
|
||||
return 0;
|
||||
|
||||
@@ -15,7 +15,7 @@ class Reward extends \Gazelle\Base {
|
||||
}
|
||||
$send = false;
|
||||
$BadgeName = '';
|
||||
if ($rewardInfo->badgeID > 0) {
|
||||
if (CONFIG['ENABLE_BADGE'] && $rewardInfo->badgeID > 0) {
|
||||
$Badge = Badges::get_badges_by_id($rewardInfo->badgeID);
|
||||
$BadgeName = $Badge['Label'];
|
||||
if (empty($BadgeName)) {
|
||||
@@ -34,7 +34,7 @@ class Reward extends \Gazelle\Base {
|
||||
$this->addInvites($toUserIDs, $rewardInfo->inviteCount, $rewardInfo->invteExpireTime);
|
||||
$send = true;
|
||||
}
|
||||
if (CONFIG['ENABLE_BADGE'] && $rewardInfo->bonus > 0) {
|
||||
if ($rewardInfo->bonus > 0) {
|
||||
$this->addBonus($toUserIDs, $rewardInfo->bonus);
|
||||
$send = true;
|
||||
}
|
||||
|
||||
@@ -623,19 +623,6 @@ class TorrentSlot {
|
||||
return $Ret;
|
||||
}
|
||||
|
||||
public static function resolution_name($resolution) {
|
||||
switch ($resolution) {
|
||||
case self::TorrentSlotResolutionSD:
|
||||
case self::TorrentSlotResolutionHD720P:
|
||||
return "group_standard_resolution";
|
||||
case self::TorrentSlotResolutionHD1080P:
|
||||
return "group_high_resolution";
|
||||
case self::TorrentSlotResolutionUHD:
|
||||
return "group_ultra_high_resolution";
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
public static function slot_filter_name($Slot) {
|
||||
switch ($Slot) {
|
||||
case self::TorrentSlotTypeNone:
|
||||
|
||||
+3
-4
@@ -220,7 +220,7 @@ class Upload extends Base {
|
||||
}
|
||||
$properties['Subtitles'] = implode(',', $Params['subtitles']);
|
||||
|
||||
$properties['Makers'] = isset($POST['makers']) ? $Params['makers'] : "";
|
||||
$properties['Makers'] = isset($Params['makers']) ? $Params['makers'] : "";
|
||||
$properties['SpecialSub'] = isset($Params['special_effects_subtitles']) ? 1 : 0;
|
||||
$properties['ChineseDubbed'] = isset($Params['chinese_dubbed']) ? 1 : 0;
|
||||
|
||||
@@ -276,7 +276,7 @@ class Upload extends Base {
|
||||
}
|
||||
$ReleaseGroup = Users::get_release_group_by_id($properties['Makers']);
|
||||
if (count($ReleaseGroup) > 0) {
|
||||
$properties['FreeEndTime'] = Time::timePlus(3600 * CONFIG['TORRENT_UPLOAD_FREE_HOUR']);
|
||||
$properties['FreeEndTime'] = Time::timePlus(3600 * CONFIG['PG_TORRENT_UPLOAD_FREE_HOUR']);
|
||||
} else {
|
||||
$properties['FreeEndTime'] = Time::timePlus(3600 * CONFIG['TORRENT_UPLOAD_FREE_HOUR']);
|
||||
}
|
||||
@@ -370,10 +370,9 @@ class Upload extends Base {
|
||||
$TotalSize = $this->properties['Size'];
|
||||
$TorrentID = $this->properties['TorrentID'];
|
||||
$UserID = $this->user['ID'];
|
||||
$GroupID = $this->properties['GroupID'];
|
||||
$FirstTorrent = $TotalSize > 2 * 1024 * 1024 * 1024 ? 1 : $TorrentID;
|
||||
$this->db->query("update users_main set firsttorrent=IF(firsttorrent = 0, $FirstTorrent, firsttorrent) ,TotalUploads=TotalUploads+1 where id=" . $this->user['ID']);
|
||||
$RecentUploads = $this->cache->delete_value("recent_uploads_$UserID");
|
||||
$this->cache->delete_value("recent_uploads_$UserID");
|
||||
}
|
||||
|
||||
private function fetchMovieData() {
|
||||
|
||||
@@ -10,7 +10,12 @@ class Artists {
|
||||
const Cinematographer = 5;
|
||||
const Actor = 6;
|
||||
const Importances = [
|
||||
self::Director, self::Writter, self::Producer, self::Composer, self::Cinematographer, self::Actor
|
||||
self::Director,
|
||||
self::Writter,
|
||||
self::Producer,
|
||||
self::Composer,
|
||||
self::Cinematographer,
|
||||
self::Actor
|
||||
];
|
||||
|
||||
public static function update_artist_alias($OldName, $Name, $ArtistID) {
|
||||
@@ -154,6 +159,24 @@ class Artists {
|
||||
return G::$DB->to_array('IMDBID', MYSQLI_ASSOC);
|
||||
}
|
||||
|
||||
public static function update_artist_info($IMDBIDs) {
|
||||
$FullArtistDetails = MOVIE::get_artists($IMDBIDs);
|
||||
foreach ($IMDBIDs as $IMDBID) {
|
||||
$ArtistDetail = MOVIE::get_default_artist($IMDBID);
|
||||
$Detail = $FullArtistDetails[$IMDBID];
|
||||
if ($Detail) {
|
||||
$ArtistDetail = $Detail;
|
||||
}
|
||||
$Artist['IMDBID'] = $IMDBID;
|
||||
$Artist['Image'] = $ArtistDetail['Image'];
|
||||
$Artist['Description'] = $ArtistDetail['Description'];
|
||||
$Artist['MainDescription'] = $ArtistDetail['MainDescription'];
|
||||
$Artist['Birthday'] = $ArtistDetail['Birthday'];
|
||||
$Artist['PlaceOfBirth'] = $ArtistDetail['PlaceOfBirth'];
|
||||
Artists::add_artist($Artist);
|
||||
}
|
||||
}
|
||||
|
||||
public static function new_artist($ArtistForm, $MovieIMDNBID, $Limit = 10) {
|
||||
foreach ($ArtistForm[Artists::Actor] as $Num => $Artist) {
|
||||
if ($Artist['IMDBID']) {
|
||||
@@ -226,11 +249,19 @@ class Artists {
|
||||
G::$DB->prepared_query("INSERT INTO artists_alias (ArtistID, Name)
|
||||
VALUES (?, ?)", $OldID, $Name);
|
||||
$Updates[] = "Name = '" . db_string($Name) . "'";
|
||||
} else if (!empty($OldArtist['Name'])) {
|
||||
$Name = $OldArtist['Name'];
|
||||
} else {
|
||||
$Name = '';
|
||||
}
|
||||
if (!empty($SubName) && empty($OldSubName)) {
|
||||
G::$DB->prepared_query("INSERT INTO artists_alias (ArtistID, Name)
|
||||
VALUES (?, ?)", $OldID, $SubName);
|
||||
$Updates[] = "SubName = '" . db_string($SubName) . "'";
|
||||
} else if (!empty($OldArtist['SubName'])) {
|
||||
$SubName = $OldArtist['SubName'];
|
||||
} else {
|
||||
$SubName = '';
|
||||
}
|
||||
if (empty($OldArtist['Image']) && !empty($Image)) {
|
||||
$Updates[] = "Image = '" . db_string($Image) . "'";
|
||||
|
||||
@@ -31,12 +31,10 @@ class Contest {
|
||||
INNER JOIN contest_type t ON (t.ID = c.ContestTypeID)
|
||||
WHERE c.DateEnd = (select max(DateEnd) from contest)
|
||||
");
|
||||
if (G::$DB->has_results()) {
|
||||
$Contest = G::$DB->next_record(MYSQLI_ASSOC);
|
||||
// Cache this for three days
|
||||
G::$Cache->cache_value("contest_{$Contest['ID']}", $Contest, 86400 * 3);
|
||||
G::$Cache->cache_value('contest_current', $Contest, 86400 * 3);
|
||||
}
|
||||
$Contest = G::$DB->next_record(MYSQLI_ASSOC);
|
||||
// Cache this for three days
|
||||
G::$Cache->cache_value("contest_{$Contest['ID']}", $Contest, 86400);
|
||||
G::$Cache->cache_value('contest_current', $Contest, 86400);
|
||||
}
|
||||
return $Contest;
|
||||
}
|
||||
|
||||
@@ -10,7 +10,7 @@ class RecommendGroups {
|
||||
$QueryID = G::$DB->get_query_id();
|
||||
G::$DB->prepared_query("
|
||||
SELECT
|
||||
g.ID,
|
||||
DISTINCT g.ID,
|
||||
g.Name,
|
||||
g.SubName,
|
||||
g.IMDBRating,
|
||||
@@ -19,10 +19,11 @@ class RecommendGroups {
|
||||
rg.EndTime,
|
||||
GROUP_CONCAT(DISTINCT tags.Name ORDER BY `TagID` SEPARATOR ' ') as TagList
|
||||
FROM recommend_group AS rg
|
||||
LEFT JOIN torrents_group AS g ON rg.GroupID = g.ID
|
||||
RIGHT JOIN torrents_group AS g ON rg.GroupID = g.ID
|
||||
LEFT JOIN torrents_tags AS tt ON tt.GroupID = g.ID
|
||||
LEFT JOIN tags ON tags.ID = tt.TagID
|
||||
WHERE rg.EndTime > ?
|
||||
GROUP BY rg.GroupID
|
||||
ORDER BY rg.EndTime DESC
|
||||
LIMIT 10", sqltime());
|
||||
|
||||
|
||||
@@ -307,4 +307,65 @@ class Requests {
|
||||
}
|
||||
return self::get_requests($Requests);
|
||||
}
|
||||
|
||||
public static function delete_request($RequestID, $OperatorID = 0, $OperatorName, $Reason) {
|
||||
//Do we need to get artists?
|
||||
G::$DB->query(
|
||||
"SELECT
|
||||
UserID,
|
||||
Title,
|
||||
GroupID
|
||||
FROM requests
|
||||
WHERE ID = $RequestID"
|
||||
);
|
||||
list($UserID, $Title, $GroupID) = G::$DB->next_record();
|
||||
if ($OperatorID != 0 && $OperatorID != $UserID && !check_perms('site_moderate_requests')) {
|
||||
error(403);
|
||||
}
|
||||
$FullName = $Title;
|
||||
// Delete request, votes and tags
|
||||
G::$DB->query("DELETE FROM requests WHERE ID = '$RequestID'");
|
||||
G::$DB->query("DELETE FROM requests_votes WHERE RequestID = '$RequestID'");
|
||||
G::$DB->query("DELETE FROM requests_tags WHERE RequestID = '$RequestID'");
|
||||
Comments::delete_page('requests', $RequestID);
|
||||
|
||||
G::$DB->query(
|
||||
"SELECT ArtistID
|
||||
FROM requests_artists
|
||||
WHERE RequestID = $RequestID"
|
||||
);
|
||||
$RequestArtists = G::$DB->to_array();
|
||||
foreach ($RequestArtists as $RequestArtist) {
|
||||
G::$Cache->delete_value("artists_requests_$RequestArtist");
|
||||
}
|
||||
G::$DB->query(
|
||||
"DELETE FROM requests_artists
|
||||
WHERE RequestID = '$RequestID'"
|
||||
);
|
||||
G::$Cache->delete_value("request_artists_$RequestID");
|
||||
|
||||
G::$DB->query(
|
||||
"REPLACE INTO sphinx_requests_delta
|
||||
(ID, TimeAdded)
|
||||
VALUES
|
||||
($RequestID, Unix_TIMESTAMP())"
|
||||
);
|
||||
|
||||
if ($UserID != $OperatorID) {
|
||||
Misc::send_pm_with_tpl($UserID, 'request_deleted', [
|
||||
'FullName' => $FullName,
|
||||
'LoggedUserID' => $OperatorID,
|
||||
'LoggedUserUsername' => $OperatorName,
|
||||
'Reason' => $Reason,
|
||||
]);
|
||||
}
|
||||
|
||||
Misc::write_log("Request $RequestID ($FullName) was deleted by user " . $OperatorID . ' (' . $OperatorName . ') for the reason: ' . $Reason);
|
||||
|
||||
G::$Cache->delete_value("request_$RequestID");
|
||||
G::$Cache->delete_value("request_votes_$RequestID");
|
||||
if ($GroupID) {
|
||||
G::$Cache->delete_value("requests_group_$GroupID");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1144,7 +1144,7 @@ class Text {
|
||||
) {
|
||||
$TableStyle = ' style="width: ' . intval($Block['Attr']) . '%;"';
|
||||
}
|
||||
$Str .= "<div class=\"TalbeContainer\"><table class=\"Table\"$TableStyle>";
|
||||
$Str .= "<div class=\"TalbeContainer\"><table class=\"Table\" $TableStyle>";
|
||||
foreach ($Block['Val'] as $tr) {
|
||||
if (is_string($tr)) {
|
||||
$tr = trim($tr);
|
||||
@@ -1171,7 +1171,7 @@ class Text {
|
||||
$Str .= '</tr>';
|
||||
}
|
||||
} else {
|
||||
$Str .= '<tr class="Table-row"><td class="Table-cell">' . self::to_html([$tr]) . '</td></tr>';
|
||||
$Str .= self::to_html([$tr]);
|
||||
}
|
||||
}
|
||||
$Str .= '</table></div>';
|
||||
|
||||
@@ -26,10 +26,10 @@ class Top10Movies {
|
||||
$Key = "top10_movies_${Name}_${Limit}";
|
||||
$Data = $Cache->get_value($Key);
|
||||
if ($Data !== false) {
|
||||
// return $Data;
|
||||
return $Data;
|
||||
}
|
||||
if (!$Cache->get_query_lock($Key)) {
|
||||
// return false;
|
||||
return false;
|
||||
}
|
||||
$Query = strtr($this->BaseQuery, [
|
||||
'{rest}' => $this->rest($Name),
|
||||
|
||||
@@ -192,40 +192,38 @@ class TORRENT_FORM {
|
||||
?>
|
||||
<tr class="Form-row" id="freetorrent">
|
||||
<td class="Form-label"><?= t('server.upload.freeleech') ?>:</td>
|
||||
<td class="Form-items">
|
||||
<div class="Form-inputs">
|
||||
<select class="Input" name="freeleech">
|
||||
<?
|
||||
$FL = Torrents::freeleech_option();
|
||||
foreach ($FL as $Key => $Name) {
|
||||
?>
|
||||
<option class="Select-option" value="<?= $Key ?>" <?= ($Key == $Torrent['FreeTorrent'] ? ' selected="selected"' : '') ?>>
|
||||
<?= $Name ?></option>
|
||||
<? } ?>
|
||||
</select>
|
||||
<script>
|
||||
$(document).ready(() => {
|
||||
$("#limit-time").click(() => {
|
||||
if ($("#limit-time")[0].checked) {
|
||||
$("#input-free-date,#input-free-time").show()
|
||||
if (<?= $Torrent['FreeEndTime'] ? "false" : "true" ?>) {
|
||||
const d = new Date()
|
||||
$("#input-free-date")[0].value = d.getFullYear() + "-" + ("0" + (d.getMonth() +
|
||||
1)).substr(-2) + "-" + ("0" + d.getDate()).substr(-2)
|
||||
$("#input-free-time")[0].value = ("0" + d.getHours()).substr(-2) + ":" + ("0" + d
|
||||
.getMinutes()).substr(-2)
|
||||
}
|
||||
|
||||
} else {
|
||||
$("#input-free-date,#input-free-time").hide()
|
||||
<td class="Form-inputs">
|
||||
<select class="Input" name="freeleech">
|
||||
<?
|
||||
$FL = Torrents::freeleech_option();
|
||||
foreach ($FL as $Key => $Name) {
|
||||
?>
|
||||
<option class="Select-option" value="<?= $Key ?>" <?= ($Key == $Torrent['FreeTorrent'] ? ' selected="selected"' : '') ?>>
|
||||
<?= $Name ?></option>
|
||||
<? } ?>
|
||||
</select>
|
||||
<script>
|
||||
$(document).ready(() => {
|
||||
$("#limit-time").click(() => {
|
||||
if ($("#limit-time")[0].checked) {
|
||||
$("#input-free-date,#input-free-time").show()
|
||||
if (<?= $Torrent['FreeEndTime'] ? "false" : "true" ?>) {
|
||||
const d = new Date()
|
||||
$("#input-free-date")[0].value = d.getFullYear() + "-" + ("0" + (d.getMonth() +
|
||||
1)).substr(-2) + "-" + ("0" + d.getDate()).substr(-2)
|
||||
$("#input-free-time")[0].value = ("0" + d.getHours()).substr(-2) + ":" + ("0" + d
|
||||
.getMinutes()).substr(-2)
|
||||
}
|
||||
})
|
||||
|
||||
} else {
|
||||
$("#input-free-date,#input-free-time").hide()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<div class="Checkbox">
|
||||
<input class="Input" type="checkbox" id="limit-time" name="limit-time" <?= $Torrent['FreeEndTime'] ? " checked=\"checked\"" : "" ?> />
|
||||
<label class="Checkbox-label" for="limit-time" style="display: inline;">定时</label>
|
||||
</div>
|
||||
})
|
||||
</script>
|
||||
<div class="Checkbox">
|
||||
<input class="Input" type="checkbox" id="limit-time" name="limit-time" <?= $Torrent['FreeEndTime'] ? " checked=\"checked\"" : "" ?> />
|
||||
<label class="Checkbox-label" for="limit-time" style="display: inline;">定时</label>
|
||||
</div>
|
||||
<input class="Input" type="date" id="input-free-date" name="free-date" <?= $Torrent['FreeEndTime'] ? "value=\"" . substr($Torrent['FreeEndTime'], 0, 10) . "\"" : "style=\"display:none;\"" ?> /><input class="Input" id="input-free-time" name="free-time" type="time" <?= $Torrent['FreeEndTime'] ? "value=\"" . substr($Torrent['FreeEndTime'], 11, 5) . "\"" : "style=\"display:none;\"" ?> />
|
||||
<?= t('server.upload.because') ?>
|
||||
|
||||
@@ -605,6 +605,7 @@ class Torrents {
|
||||
* @param string $OcelotReason The deletion reason for ocelot to report to users.
|
||||
*/
|
||||
public static function delete_torrent($ID, $GroupID = 0, $OcelotReason = -1) {
|
||||
// remove requests
|
||||
$QueryID = G::$DB->get_query_id();
|
||||
if (!$GroupID) {
|
||||
G::$DB->query("
|
||||
@@ -630,7 +631,6 @@ class Torrents {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
G::$DB->query("
|
||||
SELECT info_hash
|
||||
FROM torrents
|
||||
@@ -694,9 +694,29 @@ class Torrents {
|
||||
REPLACE INTO sphinx_delta (ID, Time)
|
||||
VALUES ($ID, UNIX_TIMESTAMP())");
|
||||
|
||||
// remove requests
|
||||
G::$DB->query("SELECT ID, SourceTorrent FROM requests WHERE GroupID = $GroupID");
|
||||
$Requests = G::$DB->to_array(false, MYSQLI_ASSOC);
|
||||
foreach ($Requests as $Request) {
|
||||
$Link = $Request['SourceTorrent'];
|
||||
if (!preg_match('/' . TORRENT_REGEX . '/i', $Link, $Matches)) {
|
||||
continue;
|
||||
}
|
||||
if ($Matches[2] != $ID) {
|
||||
continue;
|
||||
}
|
||||
$RequestID = $Request['ID'];
|
||||
break;
|
||||
}
|
||||
if (!empty($RequestID)) {
|
||||
Requests::delete_request($RequestID, 0, 'System', 'Torrent deleted');
|
||||
}
|
||||
|
||||
|
||||
G::$Cache->delete_value("torrent_download_$ID");
|
||||
G::$Cache->delete_value("torrent_group_$GroupID");
|
||||
G::$Cache->delete_value("torrents_details_$GroupID");
|
||||
G::$Cache->delete_value("recommend_group");
|
||||
G::$DB->set_query_id($QueryID);
|
||||
}
|
||||
|
||||
@@ -1759,7 +1779,8 @@ WHERE ud.TorrentID=? AND ui.NotifyOnDeleteDownloaded='1' AND ud.UserID NOT IN ({
|
||||
$Body = $Artist['Body'];
|
||||
$MainBody = $Artist['MainBody'];
|
||||
$Image = $Artist['Image'];
|
||||
$ArtistInfo = $ArtistInfos[$Artist['IMDBID']];
|
||||
$ArtistIMDBID = $Artist['IMDBID'];
|
||||
$ArtistInfo = $ArtistInfos[$ArtistIMDBID];
|
||||
if (empty($ArtistInfo)) {
|
||||
continue;
|
||||
}
|
||||
@@ -1789,7 +1810,7 @@ WHERE ud.TorrentID=? AND ui.NotifyOnDeleteDownloaded='1' AND ud.UserID NOT IN ({
|
||||
"INSERT INTO wiki_artists
|
||||
(PageID, Body, MainBody, Image, UserID, Summary, Time, IMDBID, SubName, Name)
|
||||
VALUES
|
||||
('$ArtistID', '$Body', '$MainBody', '$Image', '0', 'Auto load', '" . sqltime() . "', '$IMDBID', '$SubName', '$Name')"
|
||||
('$ArtistID', '$Body', '$MainBody', '$Image', '0', 'Auto load', '" . sqltime() . "', '$ArtistIMDBID', '$SubName', '$Name')"
|
||||
);
|
||||
$RevisionID = G::$DB->inserted_id();
|
||||
$UpdateSQL[] = "RevisionID = $RevisionID";
|
||||
|
||||
@@ -152,7 +152,7 @@ class TorrentGroupCoverTableView extends GroupTorrentTableView {
|
||||
</div>
|
||||
<img class="TorrentCover-image" src="<?= ImageTools::process($RS['WikiImage'], false) ?>" />
|
||||
</div>
|
||||
<b><?= display_str($Name) ?></b>
|
||||
<div class="TorrentCover-title"><?= display_str($Name) ?></div>
|
||||
</a>
|
||||
<? } ?>
|
||||
</div>
|
||||
@@ -185,7 +185,7 @@ class TorrentUnGroupCoverTableView extends UnGroupTorrentTableView {
|
||||
</div>
|
||||
<img class="TorrentCover-image" src="<?= ImageTools::process($RS['WikiImage'], false) ?>" />
|
||||
</div>
|
||||
<b><?= display_str($Name) ?></b>
|
||||
<div class="TorrentCover-title"><?= display_str($Name) ?></div>
|
||||
</a>
|
||||
<? } ?>
|
||||
</div>
|
||||
@@ -1172,7 +1172,7 @@ class GroupTorrentTableView extends TorrentTableView {
|
||||
if ($NewEdition) {
|
||||
$EditionID++;
|
||||
?>
|
||||
<tr class="TableTorrent-rowCategory Table-row <?= $this->WithCheck && $GroupChecked ? "torrent_all_checked " : "torrent_all_unchecked" ?> <?= (!empty($LoggedUser['TorrentGrouping']) && $LoggedUser['TorrentGrouping'] === 1 ? ' hidden' : '') ?>" group-id="<?= $GroupID ?>">
|
||||
<tr class="TableTorrent-rowCategory Table-row <?= $this->WithCheck && $GroupChecked ? "torrent_all_checked " : "torrent_all_unchecked" ?> <?= (!empty($LoggedUser['TorrentGrouping']) && $LoggedUser['TorrentGrouping'] === 1 ? ' u-hidden' : '') ?>" group-id="<?= $GroupID ?>">
|
||||
<td class="TableTorrent-cellCategory Table-cell" colspan="<?= $Cols ?>">
|
||||
<? if ($this->CollapseTorrent) { ?>
|
||||
<a class="u-toggleEdition-button" href="#" onclick="globalapp.toggleEdition(event, <?= $GroupID ?>, <?= $EditionID ?>)" data-tooltip="<?= t('server.common.collapse_this_edition_title') ?>">−</a>
|
||||
@@ -1209,7 +1209,7 @@ class GroupTorrentTableView extends TorrentTableView {
|
||||
}
|
||||
?>
|
||||
<? /* GroupTorrentTableView */ ?>
|
||||
<tr class="TableTorrent-rowTitle Table-row <?= $this->WithCheck && $TorrentChecked ? "torrent_checked " : "torrent_unchecked" ?> <?= $SnatchedGroupClass . (!empty($LoggedUser['TorrentGrouping']) && $LoggedUser['TorrentGrouping'] == 1 ? ' hidden' : '') ?>" group-id="<?= $GroupID ?>" edition-id="<?= $EditionID ?>">
|
||||
<tr class="TableTorrent-rowTitle Table-row <?= $this->WithCheck && $TorrentChecked ? "torrent_checked " : "torrent_unchecked" ?> <?= $SnatchedGroupClass . (!empty($LoggedUser['TorrentGrouping']) && $LoggedUser['TorrentGrouping'] == 1 ? ' u-hidden' : '') ?>" group-id="<?= $GroupID ?>" edition-id="<?= $EditionID ?>">
|
||||
<td class="Table-cell is-name" colspan="<?= $Cols ?>">
|
||||
<div class="TableTorrent-title">
|
||||
<span class="TableTorrent-titleActions">
|
||||
|
||||
@@ -1112,4 +1112,66 @@ class Users {
|
||||
}
|
||||
return $list;
|
||||
}
|
||||
|
||||
public static function add_secondary_class($UserID, $Classes) {
|
||||
foreach ($Classes as $PermID) {
|
||||
$ClassChanges[] = $Classes[$PermID]['Name'];
|
||||
}
|
||||
$ClassChangeStr = implode(', ', $ClassChanges);
|
||||
$Values = [];
|
||||
foreach ($Classes as $PermID) {
|
||||
$Values[] = $UserID;
|
||||
$Values[] = $PermID;
|
||||
}
|
||||
if (in_array('31', $Classes)) {
|
||||
Misc::send_pm_with_tpl($UserID, 'official_recruiter', ['SiteName' => CONFIG['SITE_NAME']]);
|
||||
}
|
||||
$sqltime = sqltime();
|
||||
G::$DB->begin_transaction();
|
||||
try {
|
||||
G::$DB->prepared_query(
|
||||
"INSERT INTO users_levels (UserID, PermissionID)
|
||||
VALUES " . implode(', ', array_fill(0, count($Values) / 2, '(?, ?)')),
|
||||
...$Values
|
||||
);
|
||||
G::$DB->prepared_query("
|
||||
UPDATE users_info AS ui
|
||||
SET ui.AdminComment = CONCAT('$sqltime - Secondary classes added $ClassChangeStr.\n\n', ui.AdminComment)
|
||||
WHERE ui.UserID = ?", $UserID);
|
||||
} catch (Exception $e) {
|
||||
G::$DB->rollback();
|
||||
error_log($e);
|
||||
}
|
||||
G::$DB->commit();
|
||||
G::$Cache->delete_value("user_info_$UserID");
|
||||
G::$Cache->delete_value("user_info_heavy_$UserID");
|
||||
}
|
||||
|
||||
public static function remove_secondary_class($UserID, $Classes) {
|
||||
foreach ($Classes as $PermID) {
|
||||
$ClassChanges[] = $Classes[$PermID]['Name'];
|
||||
}
|
||||
$ClassChangeStr = implode(', ', $ClassChanges);
|
||||
$sqltime = sqltime();
|
||||
G::$DB->begin_transaction();
|
||||
try {
|
||||
G::$DB->prepared_query(
|
||||
"
|
||||
DELETE FROM users_levels
|
||||
WHERE UserID = '$UserID'
|
||||
AND PermissionID IN (" . implode(', ', array_fill(0, count($Classes), '?')) . ")",
|
||||
...$Classes
|
||||
);
|
||||
G::$DB->prepared_query("
|
||||
UPDATE users_info AS ui
|
||||
SET ui.AdminComment = CONCAT('$sqltime - Secondary classes added $ClassChangeStr.\n\n', ui.AdminComment)
|
||||
WHERE ui.UserID = ?", $UserID);
|
||||
} catch (Exception $e) {
|
||||
G::$DB->rollback();
|
||||
error_log($e);
|
||||
}
|
||||
G::$DB->commit();
|
||||
G::$Cache->delete_value("user_info_$UserID");
|
||||
G::$Cache->delete_value("user_info_heavy_$UserID");
|
||||
}
|
||||
}
|
||||
|
||||
+20
-39
@@ -253,46 +253,27 @@ $CONFIG['UPLOAD_RANK_SHOW_END_TIME'] = '0000-00-00 00:00:00';
|
||||
$CONFIG['RELEASE_GROUP'] = [];
|
||||
$CONFIG['RELEASE_GROUP_MEMBER'] = [];
|
||||
|
||||
$CONFIG['BaseRewardConfig'] = [
|
||||
'UploadTorrent' => [
|
||||
'Token' => 0,
|
||||
'TokenValidDay' => 0,
|
||||
|
||||
'Invite' => 0,
|
||||
'InviteValidDay' => 0,
|
||||
|
||||
|
||||
$PointRadios = [
|
||||
'DownloadCount' => 0.75,
|
||||
'UploadCount' => 1,
|
||||
'CheckCount' => 7.5,
|
||||
'RSReportCount' => 0.5,
|
||||
'RPReportCount' => 12.5,
|
||||
'EditCount' => 1,
|
||||
'PostCount' => 0.5,
|
||||
'SendJF' => 0.1,
|
||||
'ApplyCount' => 1.5,
|
||||
];
|
||||
|
||||
$Bases = [
|
||||
"Sysop" => 8000,
|
||||
"Administrator" => 8000,
|
||||
"Developer" => 8000,
|
||||
|
||||
"Senior Moderator" => 7000, // cancel
|
||||
|
||||
"Moderator" => 7000,
|
||||
"Torrent Moderator" => 6000,
|
||||
"Forum Moderator" => 5000,
|
||||
|
||||
"Torrent Inspector" => 3000,
|
||||
"First Line Support" => 3000,
|
||||
"Translators" => 3000,
|
||||
];
|
||||
|
||||
$BaseRewardConfig = [
|
||||
'upload_torrent' => [
|
||||
'token' => 0,
|
||||
'token_valid_day' => 0,
|
||||
|
||||
'invite' => 0,
|
||||
'invite_valid_day' => 0,
|
||||
|
||||
'bonus' => 0,
|
||||
'badge_id' => 0,
|
||||
'Bonus' => 0,
|
||||
'BadgeID' => 0,
|
||||
],
|
||||
];
|
||||
|
||||
$CONFIG['SecondaryClassAwardConfig'] = [
|
||||
'TI_CHECK_COUNT' => 0,
|
||||
'TI_PERMISSION_ID' => 0,
|
||||
'TI_SALARY' => 0,
|
||||
'UP_UPLOAD_COUNT' => 0,
|
||||
'UPLOADER_PERMISSION_ID' => 0,
|
||||
'UPLOADER_SALARY' => 0,
|
||||
'SD_SEED_SIZE' => 0, //GB
|
||||
'SEEDER_PERMISSION_ID' => 0,
|
||||
'SEEDER_SALARY' => 0,
|
||||
];
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
use Phinx\Migration\AbstractMigration;
|
||||
|
||||
class EventsVarchar255 extends AbstractMigration {
|
||||
/**
|
||||
* Change Method.
|
||||
*
|
||||
* Write your reversible migrations using this method.
|
||||
*
|
||||
* More information on writing migrations is available here:
|
||||
* http://docs.phinx.org/en/latest/migrations.html#the-abstractmigration-class
|
||||
*
|
||||
* The following commands can be used in this method and Phinx will
|
||||
* automatically reverse them when rolling back:
|
||||
*
|
||||
* createTable
|
||||
* renameTable
|
||||
* addColumn
|
||||
* addCustomColumn
|
||||
* renameColumn
|
||||
* addIndex
|
||||
* addForeignKey
|
||||
*
|
||||
* Any other destructive changes will result in an error when trying to
|
||||
* rollback the migration.
|
||||
*
|
||||
* Remember to call "create()" or "update()" and NOT "save()" when working
|
||||
* with the Table class.
|
||||
*/
|
||||
public function change() {
|
||||
$users = $this->table('events_reward_log');
|
||||
$users->changeColumn('Remark', 'string', ['limit' => 255])
|
||||
->save();
|
||||
}
|
||||
}
|
||||
@@ -179,9 +179,6 @@ if ($NotificationsManager->is_traditional(NotificationsManager::TORRENTS)) {
|
||||
if (check_perms('users_mod')) {
|
||||
$ModBar[] = '<a class="Button ButtonHeader" href="tools.php">' . t('server.pub.toolbox') . '</a>';
|
||||
}
|
||||
if (check_perms('staff_award')) {
|
||||
$ModBar[] = '<a class="Button ButtonHeader" href="tools.php?action=award">' . t('server.pub.statistics') . '</a>';
|
||||
}
|
||||
if (check_perms('users_give_donor')) {
|
||||
$Count = $donation->getPendingDonationCount();
|
||||
if ($Count > 0) {
|
||||
@@ -426,6 +423,19 @@ if ($_REQUEST['action']) {
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
<?
|
||||
if (G::$LoggedUser['FLTokens'] > 0) { ?>
|
||||
<li class="HeaderStat-item is-bp" data-tooltip="<?= t('server.common.fltoken') ?>">
|
||||
<a class="HeaderStat-link LinkHeader Link" href="userhistory.php?action=token_history&userid=<?= G::$LoggedUser['ID'] ?>">
|
||||
<?= icon('token') ?>
|
||||
<span class="HeaderStat-value is-bp" id="header-bp-value" data-value="<?= G::$LoggedUser['TimedTokens'] + G::$LoggedUser['FLTokens'] ?>">
|
||||
<?
|
||||
$Tokens = G::$LoggedUser['TimedTokens'] == 0 ? G::$LoggedUser['FLTokens'] : (G::$LoggedUser['FLTokens'] - G::$LoggedUser['TimedTokens']) . '+' . G::$LoggedUser['TimedTokens'];
|
||||
echo $Tokens; ?>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
<? } ?>
|
||||
<? if (CONFIG['ENABLE_HNR']) { ?>
|
||||
<li class="HeaderStat-item isHnr">
|
||||
<a class="HeaderStat-link LinkHeader Link" href="rules.php?p=ratio">
|
||||
|
||||
@@ -78,7 +78,6 @@ switch ($Document) {
|
||||
case 'activity':
|
||||
case 'badges':
|
||||
case 'subtitles':
|
||||
case 'task':
|
||||
$Valid = true;
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -74,7 +74,7 @@ if ($Data) {
|
||||
error(404);
|
||||
}
|
||||
|
||||
list($Name, $Image, $Body, $MainBody, $IMDBID, $SubName, $Birthday, $PlaceOfBirth) = $DB->next_record(MYSQLI_NUM);
|
||||
list($Name, $Image, $Body, $MainBody, $IMDBID, $SubName, $Birthday, $PlaceOfBirth) = G::$DB->next_record(MYSQLI_NUM);
|
||||
}
|
||||
|
||||
//----------------- Build list and get stats
|
||||
@@ -355,12 +355,16 @@ View::show_header($ArtistHeaderName, 'browse,bbcode,comments,voting,recommend,su
|
||||
</span>
|
||||
</div>
|
||||
<div class="MovieInfo-synopsis" data-tooltip="<?= t('server.torrents.fold_tooltip') ?>">
|
||||
<p class="HtmlText">
|
||||
<div class="HtmlText">
|
||||
<?
|
||||
$Content = Text::full_format(Lang::choose_content($MainBody, $Body));
|
||||
echo $Content ? $Content : '<i>' . t('server.artist.empty_introduction_note') . '</i>'
|
||||
if ($Content) {
|
||||
View::long_text('movie_info_synopsis', display_str($Content), 5);
|
||||
} else {
|
||||
echo '<i>' . t('server.artist.empty_introduction_note') . '</i>';
|
||||
}
|
||||
?>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -27,8 +27,8 @@ if ($_GET['action'] === 'revert') { // if we're reverting to a previous revision
|
||||
error(0);
|
||||
}
|
||||
} else { // with edit, the variables are passed with POST
|
||||
$Body = db_string($_POST['body']);
|
||||
$MainBody = db_string($_POST['mainbody']);
|
||||
$Body = db_string(preg_replace("/\r|\n/", "", trim($_POST['body'])));
|
||||
$MainBody = db_string(preg_replace("/\r|\n/", "", trim($_POST['mainbody'])));
|
||||
$Summary = db_string($_POST['summary']);
|
||||
$Image = db_string($_POST['image']);
|
||||
$IMDBID = db_string($_POST['imdb_id']);
|
||||
@@ -70,6 +70,10 @@ if (!$RevisionID) { // edit
|
||||
$TotalSummary .= "修改名称";
|
||||
}
|
||||
$TotalSummary .= $Summary ? " 原因:$Summary" : "";
|
||||
if (empty($TotalSummary)) {
|
||||
header("Location: artist.php?id=$ArtistID");
|
||||
die();
|
||||
}
|
||||
$DB->query("
|
||||
INSERT INTO wiki_artists
|
||||
(PageID, Body, MainBody, Image, UserID, Summary, Time, IMDBID, SubName, Name)
|
||||
@@ -112,6 +116,8 @@ $DB->query(
|
||||
WHERE ArtistID = '$ArtistID'"
|
||||
);
|
||||
|
||||
Artists::update_artist_info([$IMDBID]);
|
||||
|
||||
// There we go, all done!
|
||||
$Cache->delete_value("artist_$ArtistID"); // Delete artist cache
|
||||
$trigger = new ActionTrigger;
|
||||
|
||||
@@ -51,8 +51,8 @@ if (isset($_GET['action'])) {
|
||||
case 'upload-4':
|
||||
require_once(CONFIG['SERVER_ROOT'] . '/sections/bonus/upload.php');
|
||||
break;
|
||||
case 'recommend-movie-1':
|
||||
case 'recommend-movie-7':
|
||||
case 'recommend-movie-30':
|
||||
require_once(CONFIG['SERVER_ROOT'] . '/sections/bonus/recommend_movie.php');
|
||||
break;
|
||||
default:
|
||||
|
||||
@@ -8,19 +8,19 @@ $Label = $_REQUEST['label'];
|
||||
if (isset($_POST['confirm']) && isset($_POST['torrent_group_id'])) {
|
||||
authorize();
|
||||
|
||||
if (!preg_match('/^recommend-movie-([1|7])$/', $Label, $match)) {
|
||||
error(t('server.bonus.you_cannot_afford_this_item'));
|
||||
if (!preg_match('/^recommend-movie-([7|30])$/', $Label, $match)) {
|
||||
error(t('server.bonus.you_cannot_afford_this_item'));
|
||||
}
|
||||
|
||||
$flag = $Bonus->purchaseRecommendMovie($ID, $Label, G::$LoggedUser['EffectiveClass']);
|
||||
|
||||
if($flag) {
|
||||
$LimitEndTime = date('Y-m-d H:i:s', strtotime("+{$match[1]} day"));
|
||||
\Torrents::freeleech_groups($_POST['torrent_group_id'], 1, 0, $LimitEndTime);
|
||||
\RecommendGroups::recommend_group_buy($ID, $_POST['torrent_group_id'], $LimitEndTime);
|
||||
header('Location: bonus.php?complete=' . urlencode($Label));
|
||||
}else {
|
||||
error(t('server.bonus.you_cannot_afford_this_item'));
|
||||
if ($flag) {
|
||||
$LimitEndTime = date('Y-m-d H:i:s', strtotime("+{$match[1]} day"));
|
||||
\Torrents::freeleech_groups($_POST['torrent_group_id'], 1, 0, $LimitEndTime);
|
||||
\RecommendGroups::recommend_group_buy($ID, $_POST['torrent_group_id'], $LimitEndTime);
|
||||
header('Location: bonus.php?complete=' . urlencode($Label));
|
||||
} else {
|
||||
error(t('server.bonus.you_cannot_afford_this_item'));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -36,7 +36,7 @@ $Items = $Bonus->getList();
|
||||
<tr class="Table-rowHeader">
|
||||
<td class="Table-cell" width="30px">#</td>
|
||||
<td class="Table-cell"><?= t('server.bonus.description') ?></td>
|
||||
<td class="Table-cell" width="45px"><?= t('server.bonus.points_price') ?></td>
|
||||
<td class="Table-cell" width="80px"><?= t('server.bonus.points_price') ?></td>
|
||||
<td class="Table-cell" width="70px"><?= t('server.common.actions') ?></td>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
@@ -30,6 +30,7 @@ if (!empty($_REQUEST['confirm'])) {
|
||||
WHERE ID = '$UserID'");
|
||||
$Cache->increment('stats_user_count');
|
||||
include('step2.php');
|
||||
die();
|
||||
}
|
||||
|
||||
// Confirm registration
|
||||
@@ -277,9 +278,9 @@ if (!empty($_REQUEST['confirm'])) {
|
||||
(UserID, InviterID, TreePosition, TreeID, TreeLevel)
|
||||
VALUES
|
||||
('$UserID', '$InviterID', '$TreePosition', '$TreeID', '$TreeLevel')");
|
||||
$trigger = new ActionTrigger;
|
||||
$trigger->triggerInviteeRegister($InviterID);
|
||||
}
|
||||
$trigger = new ActionTrigger;
|
||||
$trigger->triggerInviteeRegister($InviterID, $UserID);
|
||||
} else { // No inviter (open registration)
|
||||
$DB->query("
|
||||
SELECT MAX(TreeID)
|
||||
|
||||
@@ -1,7 +1,4 @@
|
||||
<?
|
||||
|
||||
use Gazelle\Manager\ActionTrigger;
|
||||
|
||||
authorize();
|
||||
|
||||
if (empty($_POST['id']) || !is_number($_POST['id']) || empty($_POST['type']) || ($_POST['type'] !== 'request_update' && empty($_POST['reason']))) {
|
||||
@@ -73,9 +70,6 @@ $DB->query('
|
||||
(' . db_string($LoggedUser['ID']) . ", $ID, '$Short', '" . sqltime() . "', '" . db_string($Reason) . "')");
|
||||
$ReportID = $DB->inserted_id();
|
||||
|
||||
$trigger = new ActionTrigger;
|
||||
$trigger->triggerReport($Short, $ID, $ReportID);
|
||||
|
||||
$Channels = array();
|
||||
|
||||
if ($Short === 'request_update') {
|
||||
|
||||
@@ -11,6 +11,8 @@
|
||||
* Then it just inserts the report to the DB and increments the counter.
|
||||
*/
|
||||
|
||||
use Gazelle\Manager\ActionTrigger;
|
||||
|
||||
authorize();
|
||||
|
||||
if (!is_number($_POST['torrentid'])) {
|
||||
@@ -132,6 +134,10 @@ $DB->query("
|
||||
|
||||
$ReportID = $DB->inserted_id();
|
||||
|
||||
$trigger = new ActionTrigger;
|
||||
$trigger->triggerReport($Type, $TorrentID, $ReportID);
|
||||
|
||||
|
||||
if ($Type != "rescore" && $Type != "lossyapproval" && $Type != "upload_contest" && $Type != 'edited') {
|
||||
$DB->query("
|
||||
SELECT
|
||||
@@ -157,8 +163,20 @@ if ($Type != "rescore" && $Type != "lossyapproval" && $Type != "upload_contest"
|
||||
if ($DB->has_results()) {
|
||||
$Data = G::$DB->next_record(MYSQLI_ASSOC);
|
||||
list(
|
||||
$UserID, $GroupID, $Size, $InfoHash, $Name, $SubName, $Year, $Time, $Source, $Codec, $Container, $Resolution,
|
||||
$RemasterTitle, $RemasterYear
|
||||
$UserID,
|
||||
$GroupID,
|
||||
$Size,
|
||||
$InfoHash,
|
||||
$Name,
|
||||
$SubName,
|
||||
$Year,
|
||||
$Time,
|
||||
$Source,
|
||||
$Codec,
|
||||
$Container,
|
||||
$Resolution,
|
||||
$RemasterTitle,
|
||||
$RemasterYear
|
||||
) = array_values($Data);
|
||||
$Torrent = Torrents::get_torrent($TorrentID);
|
||||
$RawName = Torrents::torrent_name($Torrent, false);
|
||||
|
||||
@@ -27,8 +27,6 @@ if ($RequestType == 2) {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
//Convenience variables
|
||||
$IsFilled = !empty($Request['TorrentID']);
|
||||
$CanVote = !$IsFilled && check_perms('site_vote');
|
||||
@@ -42,6 +40,7 @@ if ($Request['CategoryID'] === '0') {
|
||||
|
||||
//Do we need to get artists?
|
||||
$ArtistForm = Requests::get_artists($RequestID);
|
||||
$Director = Artists::get_first_directors($ArtistForm);
|
||||
$ArtistName = Artists::display_artists($ArtistForm, false, false);
|
||||
$RequestGroupName = Torrents::group_name($Request, false);
|
||||
|
||||
|
||||
@@ -9,67 +9,5 @@ if (!is_number($RequestID)) {
|
||||
error(0);
|
||||
}
|
||||
|
||||
$DB->query("
|
||||
SELECT
|
||||
UserID,
|
||||
Title,
|
||||
CategoryID,
|
||||
GroupID
|
||||
FROM requests
|
||||
WHERE ID = $RequestID");
|
||||
list($UserID, $Title, $CategoryID, $GroupID) = $DB->next_record();
|
||||
|
||||
if ($LoggedUser['ID'] != $UserID && !check_perms('site_moderate_requests')) {
|
||||
error(403);
|
||||
}
|
||||
|
||||
$CategoryName = $Categories[$CategoryID - 1];
|
||||
|
||||
//Do we need to get artists?
|
||||
$FullName = $Title;
|
||||
|
||||
|
||||
|
||||
// Delete request, votes and tags
|
||||
$DB->query("DELETE FROM requests WHERE ID = '$RequestID'");
|
||||
$DB->query("DELETE FROM requests_votes WHERE RequestID = '$RequestID'");
|
||||
$DB->query("DELETE FROM requests_tags WHERE RequestID = '$RequestID'");
|
||||
Comments::delete_page('requests', $RequestID);
|
||||
|
||||
$DB->query("
|
||||
SELECT ArtistID
|
||||
FROM requests_artists
|
||||
WHERE RequestID = $RequestID");
|
||||
$RequestArtists = $DB->to_array();
|
||||
foreach ($RequestArtists as $RequestArtist) {
|
||||
$Cache->delete_value("artists_requests_$RequestArtist");
|
||||
}
|
||||
$DB->query("
|
||||
DELETE FROM requests_artists
|
||||
WHERE RequestID = '$RequestID'");
|
||||
$Cache->delete_value("request_artists_$RequestID");
|
||||
|
||||
G::$DB->query("
|
||||
REPLACE INTO sphinx_requests_delta
|
||||
(ID, TimeAdded)
|
||||
VALUES
|
||||
($RequestID, Unix_TIMESTAMP())");
|
||||
|
||||
if ($UserID != $LoggedUser['ID']) {
|
||||
Misc::send_pm_with_tpl($UserID, 'request_deleted', [
|
||||
'FullName' => $FullName,
|
||||
'LoggedUserID' => $LoggedUser['ID'],
|
||||
'LoggedUserUsername' => $LoggedUser['Username'],
|
||||
'Reason' => $_POST['reason'],
|
||||
]);
|
||||
}
|
||||
|
||||
Misc::write_log("Request $RequestID ($FullName) was deleted by user " . $LoggedUser['ID'] . ' (' . $LoggedUser['Username'] . ') for the reason: ' . $_POST['reason']);
|
||||
|
||||
$Cache->delete_value("request_$RequestID");
|
||||
$Cache->delete_value("request_votes_$RequestID");
|
||||
if ($GroupID) {
|
||||
$Cache->delete_value("requests_group_$GroupID");
|
||||
}
|
||||
|
||||
Requests::delete_request($RequestID, G::$LoggedUser['ID'], G::$LoggedUser['Username'], $_POST['reason']);
|
||||
header('Location: requests.php');
|
||||
|
||||
@@ -81,7 +81,7 @@ if ($RequestType == 1) {
|
||||
WHERE xu.fid = '$SourceTorrentID' and xu.uid = $FillerID and active = 1 and xu.remaining = 0 "
|
||||
);
|
||||
if (!$DB->has_results()) {
|
||||
//$Err = t('server.requests.cant_fill');
|
||||
$Err = t('server.requests.cant_fill');
|
||||
}
|
||||
$TorrentID = $SourceTorrentID;
|
||||
}
|
||||
@@ -172,7 +172,7 @@ foreach ($ArtistIDs as $ArtistID) {
|
||||
$Cache->delete_value("artists_requests_$ArtistID");
|
||||
}
|
||||
$trigger = new ActionTrigger;
|
||||
$trigger->triggerFillRequest($RequestID, $TorretnID);
|
||||
$trigger->triggerFillRequest($RequestID, $TorrentID);
|
||||
|
||||
Requests::update_sphinx_requests($RequestID);
|
||||
$SphQL = new SphinxqlQuery();
|
||||
|
||||
@@ -1,51 +0,0 @@
|
||||
<?php
|
||||
|
||||
//------------- Delete dead torrents ------------------------------------//
|
||||
//sleep(10);
|
||||
include(CONFIG['SERVER_ROOT'] . '/sections/tools/managers/award_functions.php');
|
||||
$Year = date('Y');
|
||||
$Month = date('n') - 1;
|
||||
$Quarter = 0;
|
||||
if (!$Month) {
|
||||
$Month = 12;
|
||||
$Year -= 1;
|
||||
}
|
||||
$Time = timeConvert($Year, $Quarter, $Month);
|
||||
$AwardDatas = [
|
||||
getAwardData("Sysop", $Time),
|
||||
getAwardData("Administrator", $Time),
|
||||
getAwardData("Moderator", $Time),
|
||||
getAwardData("Torrent Moderator", $Time),
|
||||
getAwardData("Forum Moderator", $Time),
|
||||
getAwardData("Torrent Inspector", $Time),
|
||||
getAwardData("First Line Support", $Time),
|
||||
getAwardData("Interviewer", $Time),
|
||||
getAwardData("Translators", $Time),
|
||||
getAwardData("Developer", $Time),
|
||||
];
|
||||
$MaxValue = [
|
||||
'DownloadCount' => 0,
|
||||
'UploadCount' => 0,
|
||||
'CheckCount' => 0,
|
||||
'RSReportCount' => 0,
|
||||
'RPReportCount' => 0,
|
||||
'EditCount' => 0,
|
||||
'PostCount' => 0,
|
||||
'SendJF' => 0,
|
||||
'Point' => 0,
|
||||
'ApplyCount' => 0,
|
||||
];
|
||||
makePoint($AwardDatas, $Bases, $PointRadios, $MaxValue);
|
||||
$PutoutUsersIDs = [];
|
||||
$testMsg = "";
|
||||
foreach ($AwardDatas as $data) {
|
||||
foreach ($data['Users'] as $User) {
|
||||
if (!in_array($User['UserID'], $PutoutUsersIDs)) {
|
||||
$PutoutUsersIDs[] = $User['UserID'];
|
||||
$DB->query("UPDATE users_main SET BonusPoints = BonusPoints + " . $User['Salary'] . " WHERE ID = " . $User['UserID']);
|
||||
$Cache->delete_value('user_stats_' . $User['UserID']);
|
||||
$testMsg .= $User['UserID'] . ", " . $User['Salary'] . "\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
print_r($testMsg);
|
||||
@@ -0,0 +1,187 @@
|
||||
<?
|
||||
|
||||
use Gazelle\Action\RewardInfo;
|
||||
use Gazelle\Manager\Reward;
|
||||
|
||||
include(CONFIG['SERVER_ROOT'] . '/sections/tools/managers/award_functions.php');
|
||||
$PromoteYear = date('Y');
|
||||
$PromoteMonth = date('n') - 1;
|
||||
if (!$PromoteMonth) {
|
||||
$PromoteMonth = 12;
|
||||
$PromoteYear -= 1;
|
||||
}
|
||||
|
||||
$DemoteMonth = $PromoteMonth - 1;
|
||||
$DemoteYear = $PromoteYear;
|
||||
if (!$DemoteMonth) {
|
||||
$DemoteMonth = 12;
|
||||
$DemoteYear -= 1;
|
||||
}
|
||||
$Quarter = 0;
|
||||
|
||||
|
||||
$PromoteTime = timeConvert($PromoteYear, $Quarter, $PromoteMonth);
|
||||
list($promoteFromY, $promoteFromM, $promoteToY, $promoteToM) = $PromoteTime;
|
||||
|
||||
$DemoteTime = timeConvert($DemoteYear, $Quarter, $DemoteMonth);
|
||||
list($demoteFromY, $demoteFromM,,) = $DemoteTime;
|
||||
$demoteToY = $promoteToY;
|
||||
$demoteToM = $promoteToM;
|
||||
|
||||
// TI
|
||||
$PromoteCheckCount = CONFIG['SecondaryClassAwardConfig']['TI_CHECK_COUNT'];
|
||||
$TIPermissionID = CONFIG['SecondaryClassAwardConfig']['TI_PERMISSION_ID'];
|
||||
if ($PromoteCheckCount > 0 && !empty($TIPermissionID)) {
|
||||
// promote
|
||||
$sql =
|
||||
"SELECT tc.UserID as UserID, COUNT(DISTINCT torrentid) AS Count, ul.PermissionID FROM torrents_check tc
|
||||
LEFT JOIN users_levels ul ON ul.PermissionID = $TIPermissionID and ul.UserID = tc.UserID
|
||||
WHERE tc.Time >= '$promoteFromY-$promoteFromM-1' AND tc.Time < '$promoteToY-$promoteToM-1' AND tc.Type = 1
|
||||
GROUP By UserID
|
||||
HAVING Count >= $PromoteCheckCount AND PermissionID is null";
|
||||
G::$DB->query($sql);
|
||||
$Ret = G::$DB->to_array(false, MYSQLI_ASSOC);
|
||||
$PromotedUserID = [];
|
||||
foreach ($Ret as $Data) {
|
||||
Users::add_secondary_class($Data['UserID'], [$TIPermissionID]);
|
||||
echo "Add TI secondary class to $UserID";
|
||||
$PromotedUserID[] = $Data['UserID'];
|
||||
}
|
||||
// demote
|
||||
$DemoteCheckCount = 2 * CONFIG['SecondaryClassAwardConfig']['TI_CHECK_COUNT'];
|
||||
$sql =
|
||||
"SELECT tc.UserID as UserID, COUNT(DISTINCT torrentid) AS Count, ul.PermissionID FROM torrents_check tc
|
||||
RIGHT JOIN users_levels ul ON ul.PermissionID = $TIPermissionID and ul.UserID = tc.UserID
|
||||
WHERE `Time` >= '$demoteFromY-$demoteFromM-1' AND `Time` < '$demoteToY-$demoteToM-1' AND `Type` = 1
|
||||
GROUP By UserID
|
||||
HAVING Count < $DemoteCheckCount AND PermissionID is not null";
|
||||
G::$DB->query($sql);
|
||||
$Ret = G::$DB->to_array(false, MYSQLI_ASSOC);
|
||||
foreach ($Ret as $Data) {
|
||||
if (in_array($Data['UserID'], $PromotedUserID)) {
|
||||
continue;
|
||||
}
|
||||
Users::remove_secondary_class($Data['UserID'], [$TIPermissionID]);
|
||||
echo "Drop TI secondary class from $UserID";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Uploader
|
||||
$PromoteUploadCount = CONFIG['SecondaryClassAwardConfig']['UP_UPLOAD_COUNT'];
|
||||
$UploaderPermissionID = CONFIG['SecondaryClassAwardConfig']['UPLOADER_PERMISSION_ID'];
|
||||
if ($PromoteUploadCount > 0 && !empty($UploaderPermissionID)) {
|
||||
// promote
|
||||
$sql =
|
||||
"SELECT t.UserID as UserID, COUNT(t.ID) AS Count, ul.PermissionID FROM torrents t
|
||||
LEFT JOIN users_levels ul ON ul.PermissionID = $UploaderPermissionID and ul.UserID = t.UserID
|
||||
WHERE t.Time >= '$promoteFromY-$promoteFromM-1' AND t.Time < '$promoteToY-$promoteToM-1'
|
||||
GROUP By UserID
|
||||
HAVING Count >= $PromoteUploadCount AND PermissionID is null";
|
||||
G::$DB->query($sql);
|
||||
$Ret = G::$DB->to_array(false, MYSQLI_ASSOC);
|
||||
$PromotedUserID = [];
|
||||
foreach ($Ret as $Data) {
|
||||
Users::add_secondary_class($Data['UserID'], [$UploaderPermissionID]);
|
||||
echo "Add Uploader secondary class to $UserID";
|
||||
$PromotedUserID[] = $Data['UserID'];
|
||||
}
|
||||
// demote
|
||||
$DemoteUploadCount = 2 * CONFIG['SecondaryClassAwardConfig']['UP_UPLOAD_COUNT'];
|
||||
$sql =
|
||||
"SELECT t.UserID as UserID, COUNT(DISTINCT t.ID) AS Count, ul.PermissionID FROM torrents t
|
||||
RIGHT JOIN users_levels ul ON ul.PermissionID = $UploaderPermissionID and ul.UserID = t.UserID
|
||||
WHERE t.Time >= '$demoteFromY-$demoteFromM-1' AND t.Time < '$demoteToY-$demoteToM-1'
|
||||
GROUP By UserID
|
||||
HAVING Count < $DemoteUploadCount AND PermissionID is not null";
|
||||
G::$DB->query($sql);
|
||||
$Ret = G::$DB->to_array(false, MYSQLI_ASSOC);
|
||||
foreach ($Ret as $Data) {
|
||||
if (in_array($Data['UserID'], $PromotedUserID)) {
|
||||
continue;
|
||||
}
|
||||
Users::remove_secondary_class($Data['UserID'], [$UploaderPermissionID]);
|
||||
echo "Drop Uploader secondary class from $UserID";
|
||||
}
|
||||
}
|
||||
|
||||
// Seeder
|
||||
$PromoteSeedCount = CONFIG['SecondaryClassAwardConfig']['SD_SEED_SIZE'];
|
||||
$SeederPermissionID = CONFIG['SecondaryClassAwardConfig']['SEEDER_PERMISSION_ID'];
|
||||
if ($PromoteSeedCount > 0 && !empty($SeederPermissionID)) {
|
||||
// promote
|
||||
$sql = "SELECT xfu.uid AS UserID, ul.PermissionID, floor(IFNULL(SUM(t.SIZE), 0) / 1024 / 1024 / 1024) AS Size FROM xbt_files_users xfu
|
||||
LEFT JOIN users_levels ul ON ul.UserID = xfu.uid AND ul.PermissionID = $SeederPermissionID
|
||||
RIGHT JOIN torrents t ON xfu.fid = t.ID
|
||||
WHERE active = 1 AND remaining = 0 AND mtime > Unix_timestamp(Now() - interval 1 hour)
|
||||
GROUP BY UserID
|
||||
Having Size >= $PromoteSeedCount AND PermissionID is null";
|
||||
G::$DB->query($sql);
|
||||
$Ret = G::$DB->to_array(false, MYSQLI_ASSOC);
|
||||
foreach ($Ret as $Data) {
|
||||
Users::add_secondary_class($Data['UserID'], [$SeederPermissionID]);
|
||||
echo "Add Seeder secondary class to $UserID";
|
||||
}
|
||||
// demote
|
||||
$DemoteSeedCount = 2 * CONFIG['SecondaryClassAwardConfig']['SD_SEED_SIZE'];
|
||||
$sql = "SELECT xfu.uid AS UserID, ul.PermissionID, floor(IFNULL(SUM(t.SIZE), 0) / 1024 / 1024 / 1024) AS Size FROM xbt_files_users xfu
|
||||
RIGHT JOIN users_levels ul ON ul.UserID = xfu.uid AND ul.PermissionID = $SeederPermissionID
|
||||
RIGHT JOIN torrents t ON xfu.fid = t.ID
|
||||
WHERE active = 1 AND remaining = 0 AND mtime > Unix_timestamp(Now() - interval 1 hour)
|
||||
GROUP BY UserID
|
||||
Having Size < $DemoteSeedCount AND PermissionID is not null";
|
||||
G::$DB->query($sql);
|
||||
$Ret = G::$DB->to_array(false, MYSQLI_ASSOC);
|
||||
foreach ($Ret as $Data) {
|
||||
Users::remove_secondary_class($Data['UserID'], [$SeederPermissionID]);
|
||||
echo "Drop Seeder secondary class from $UserID";
|
||||
}
|
||||
}
|
||||
|
||||
// check rewards
|
||||
$rewardManager = new Reward;
|
||||
if (!empty($TIPermissionID) && CONFIG['SecondaryClassAwardConfig']['TI_SALARY'] > 0) {
|
||||
$sql =
|
||||
"SELECT tc.UserID as UserID, COUNT(DISTINCT torrentid) AS Count FROM torrents_check tc
|
||||
RIGHT JOIN users_levels ul ON ul.PermissionID = $TIPermissionID and ul.UserID = tc.UserID
|
||||
WHERE tc.Time >= '$promoteFromY-$promoteFromM-1' AND tc.Time < '$promoteToY-$promoteToM-1' AND tc.Type = 1
|
||||
GROUP By UserID";
|
||||
G::$DB->query($sql);
|
||||
$Ret = G::$DB->to_array(false, MYSQLI_ASSOC);
|
||||
foreach ($Ret as $Data) {
|
||||
$RewardInfo = new RewardInfo;
|
||||
$RewardInfo->bonus = CONFIG['SecondaryClassAwardConfig']['TI_SALARY'] * $Data['Count'];
|
||||
$rewardManager->sendReward($RewardInfo, [$Data['UserID']], "TI salary.", true, true);
|
||||
}
|
||||
}
|
||||
// upload rewards
|
||||
if (!empty($UploaderPermissionID) && CONFIG['SecondaryClassAwardConfig']['UPLOADER_SALARY'] > 0) {
|
||||
$sql =
|
||||
"SELECT t.UserID as UserID, COUNT(t.ID) AS Count FROM torrents t
|
||||
RIGHT JOIN users_levels ul ON ul.PermissionID = $UploaderPermissionID and ul.UserID = t.UserID
|
||||
WHERE t.Time >= '$promoteFromY-$promoteFromM-1' AND t.Time < '$promoteToY-$promoteToM-1'
|
||||
GROUP By UserID";
|
||||
G::$DB->query($sql);
|
||||
$Ret = G::$DB->to_array(false, MYSQLI_ASSOC);
|
||||
foreach ($Ret as $Data) {
|
||||
$RewardInfo = new RewardInfo;
|
||||
$RewardInfo->bonus = CONFIG['SecondaryClassAwardConfig']['UPLOADER_SALARY'] * $Data['Count'];
|
||||
$rewardManager->sendReward($RewardInfo, [$Data['UserID']], "Uploader salary.", true, true);
|
||||
}
|
||||
}
|
||||
|
||||
// seed reward
|
||||
if (!empty($SeederPermissionID) && CONFIG['SecondaryClassAwardConfig']['SEEDER_SALARY'] > 0) {
|
||||
$sql = "SELECT xfu.uid AS UserID, floor(IFNULL(SUM(t.SIZE), 0) / 1024 / 1024 / 1024) AS Size FROM xbt_files_users xfu
|
||||
RIGHT JOIN users_levels ul ON ul.UserID = xfu.uid AND ul.PermissionID = $SeederPermissionID
|
||||
RIGHT JOIN torrents t ON xfu.fid = t.ID
|
||||
WHERE active = 1 AND remaining = 0 AND mtime > Unix_timestamp(Now() - interval 1 hour)
|
||||
GROUP BY UserID";
|
||||
G::$DB->query($sql);
|
||||
$Ret = G::$DB->to_array(false, MYSQLI_ASSOC);
|
||||
foreach ($Ret as $Data) {
|
||||
$RewardInfo = new RewardInfo;
|
||||
$RewardInfo->bonus = CONFIG['SecondaryClassAwardConfig']['SEEDER_SALARY'] * $Data['Size'];
|
||||
$rewardManager->sendReward($RewardInfo, [$Data['UserID']], "Seeder salary.", true, true);
|
||||
}
|
||||
}
|
||||
+28
-38
@@ -9,6 +9,11 @@ $SupportStaff = get_support();
|
||||
$action = $_GET['action'];
|
||||
|
||||
list($Secondary, $Staff) = $SupportStaff;
|
||||
$SupportStaffList = [];
|
||||
foreach ($Secondary as $StaffMember) {
|
||||
list($ID, $ClassID, $Class, $ClassName, $StaffGroup, $Username, $Paranoia, $LastAccess, $Remark) = $StaffMember;
|
||||
$SupportStaffList[$ClassName][] = $StaffMember;
|
||||
}
|
||||
?>
|
||||
|
||||
<div class="LayoutBody">
|
||||
@@ -41,47 +46,32 @@ list($Secondary, $Staff) = $SupportStaff;
|
||||
</div>
|
||||
<div class="Group-body">
|
||||
<?= t('server.staff.fl_support_note') ?>
|
||||
<?
|
||||
$CurClass = 0;
|
||||
$CloseTable = false;
|
||||
foreach ($Secondary as $StaffMember) {
|
||||
list($ID, $ClassID, $Class, $ClassName, $StaffGroup, $Username, $Paranoia, $LastAccess, $Remark) = $StaffMember;
|
||||
if ($Class != $CurClass) { // Start new class of staff members
|
||||
$Row = 'a';
|
||||
if ($CloseTable) {
|
||||
$CloseTable = false;
|
||||
// the "\t" and "\n" are used here to make the HTML look pretty
|
||||
echo "</table></div></div>";
|
||||
}
|
||||
$CurClass = $Class;
|
||||
$CloseTable = true;
|
||||
<table class="TableUser Table">
|
||||
<tr class="Table-rowHeader">
|
||||
<td class="Table-cell" width="200px"><?= t('server.apply.role') ?></td>
|
||||
<td class="Table-cell"><?= t('server.common.user') ?></td>
|
||||
</tr>
|
||||
<?
|
||||
foreach ($SupportStaffList as $ClassName => $StaffMembers) {
|
||||
|
||||
$HTMLID = str_replace(' ', '_', strtolower($ClassName));
|
||||
?>
|
||||
<div class="Box">
|
||||
<div class="Box-header">
|
||||
<div class="Box-headerTitle">
|
||||
<div id="<?= $HTMLID ?>"><i><?= $ClassName ?></i></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="Box-body">
|
||||
<table class="TableUser Table is-inner">
|
||||
<tr class="Table-rowHeader">
|
||||
<td class="Table-cell" style="width: 130px;"><?= t('server.staff.username') ?></td>
|
||||
<td class="Table-cell" style="width: 200px;"><?= t('server.staff.lastseen') ?></td>
|
||||
<td class="Table-cell"><?= t('server.staff.support') ?></td>
|
||||
</tr>
|
||||
<?
|
||||
}
|
||||
$Row = make_staff_row($Row, $ID, $Paranoia, $Class, $LastAccess, $Remark);
|
||||
$UserNameList = implode(', ', array_map(function ($StaffMember) {
|
||||
list($ID, $ClassID, $Class, $ClassName, $StaffGroup, $Username, $Paranoia, $LastAccess, $Remark) = $StaffMember;
|
||||
return Users::format_username($ID, false, false, false);
|
||||
}, $StaffMembers));
|
||||
?>
|
||||
<tr class="Table-row">
|
||||
<td class="Table-cell" id="<?= $HTMLID ?>"><?= $ClassName ?></td>
|
||||
<td class="Table-cell"><?= $UserNameList ?></td>
|
||||
</tr>
|
||||
<?
|
||||
}
|
||||
?>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<?
|
||||
?>
|
||||
?>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<?
|
||||
?>
|
||||
<? if (check_perms('show_admin_team')) {
|
||||
|
||||
foreach ($Staff as $SectionName => $StaffSection) {
|
||||
@@ -89,7 +79,7 @@ list($Secondary, $Staff) = $SupportStaff;
|
||||
continue;
|
||||
}
|
||||
?>
|
||||
<div class="Group">
|
||||
<div class=" Group">
|
||||
<div class="Group-header">
|
||||
<div class="Group-headerTitle"><?= $SectionName ?></div>
|
||||
</div>
|
||||
|
||||
@@ -25,7 +25,7 @@ if (empty($AllSubtitles)) {
|
||||
foreach ($AllSubtitles as $Subtitle) {
|
||||
$LanguageArray = explode(',', $Subtitle['languages']);
|
||||
$IsNew = time_ago($Subtitle['upload_time']) < 600;
|
||||
$CanRM = check_perms('users_mod') || $Subtitle['Uploader'] == $LoggedUser['ID'];
|
||||
$CanRM = check_perms('users_mod') || $Subtitle['uploader'] == $LoggedUser['ID'];
|
||||
$UserInfo = Users::user_info($Subtitle['uploader']);
|
||||
$UploaderName = $UserInfo['Username'];
|
||||
if ($UploaderName == '') {
|
||||
|
||||
@@ -77,14 +77,6 @@ switch ($_REQUEST['action']) {
|
||||
include(CONFIG['SERVER_ROOT'] . '/sections/tools/managers/forum_alter.php');
|
||||
break;
|
||||
|
||||
case 'award':
|
||||
if (check_perms('staff_award')) {
|
||||
include(CONFIG['SERVER_ROOT'] . '/sections/tools/managers/award.php');
|
||||
} else {
|
||||
error(403);
|
||||
}
|
||||
break;
|
||||
|
||||
case 'whitelist':
|
||||
include(CONFIG['SERVER_ROOT'] . '/sections/tools/managers/whitelist_list.php');
|
||||
break;
|
||||
|
||||
@@ -1,209 +0,0 @@
|
||||
<?
|
||||
include(CONFIG['SERVER_ROOT'] . '/sections/tools/managers/award_functions.php');
|
||||
View::show_header(t('server.pub.statistics'), '', 'PageToolAward');
|
||||
$Year = isset($_GET['year']) ? intval($_GET['year']) : 0;
|
||||
$Quarter = isset($_GET['quarter']) ? intval($_GET['quarter']) : 0;
|
||||
$Month = isset($_GET['month']) ? intval($_GET['month']) : 0;
|
||||
|
||||
if (!$Year && !$Quarter && !$Month) {
|
||||
$Month = date('n');
|
||||
}
|
||||
if (!$Year) {
|
||||
$Year = date('Y');
|
||||
}
|
||||
if ($Quarter && $Month) {
|
||||
$Month = 0;
|
||||
}
|
||||
$QUARTER = array("", t('server.tools.quarter_1'), t('server.tools.quarter_2'), t('server.tools.quarter_3'), t('server.tools.quarter_4'));
|
||||
?>
|
||||
<div class="LayoutBody">
|
||||
<div class="BodyHeader">
|
||||
<h2 class="BodyHeader-nav"><?= t('server.pub.statistics') ?></h2>
|
||||
</div>
|
||||
|
||||
<h2 id="award-title" style="text-align: center;"><?= t('server.tools.year', ['Values' => [$Year]]) . ($Month ? t('server.tools.month', ['Values' => [$Month]]) : "") . ($Quarter ? "$QUARTER[$Quarter]" : "") ?></h2>
|
||||
|
||||
<div class="BoxBody">
|
||||
<table id="table-select">
|
||||
<?
|
||||
printYearTR(2021, ($Month || $Quarter) ? 0 : $Year);
|
||||
printQuarterTR($Year, $Quarter);
|
||||
printMonthTR($Year, $Month);
|
||||
?>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<?
|
||||
$Time = timeConvert($Year, $Quarter, $Month);
|
||||
$AwardDatas = [
|
||||
getAwardData("Sysop", $Time),
|
||||
getAwardData("Administrator", $Time),
|
||||
getAwardData("Developer", $Time),
|
||||
getAwardData("Senior Moderator", $Time),
|
||||
getAwardData("Moderator", $Time),
|
||||
getAwardData("Torrent Moderator", $Time),
|
||||
getAwardData("Forum Moderator", $Time),
|
||||
getAwardData("Torrent Inspector", $Time),
|
||||
getAwardData("First Line Support", $Time),
|
||||
getAwardData("Interviewer", $Time),
|
||||
getAwardData("Translators", $Time),
|
||||
];
|
||||
$MaxValue = [
|
||||
'DownloadCount' => 0,
|
||||
'UploadCount' => 0,
|
||||
'CheckCount' => 0,
|
||||
'RSReportCount' => 0,
|
||||
'RPReportCount' => 0,
|
||||
'EditCount' => 0,
|
||||
'PostCount' => 0,
|
||||
'SendJF' => 0,
|
||||
'Point' => 0,
|
||||
'ApplyCount' => 0,
|
||||
];
|
||||
makePoint($AwardDatas, $Bases, $PointRadios, $MaxValue);
|
||||
//print_r ($AwardDatas);
|
||||
?>
|
||||
<!--
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
var top = $('#table-head-top').offset().top - parseFloat($('#table-head-top').css('marginTop').replace(/auto/, 0))
|
||||
$(window).scroll(function (event) {
|
||||
var y = $(this).scrollTop();
|
||||
if (y >= top) {
|
||||
$('#table-head-top').addClass('fixed');
|
||||
} else {
|
||||
$('#table-head-top').removeClass('fixed');
|
||||
}
|
||||
});
|
||||
})
|
||||
</script>
|
||||
-->
|
||||
<div id="salary-table">
|
||||
<div id="table-head-left">
|
||||
<div class="row1 th-span1 row-span-2"><?= t('server.tools.group') ?></div>
|
||||
<div class="row1 th-span1 row-span-2"><?= t('server.tools.id') ?></div>
|
||||
<?
|
||||
$row = 2;
|
||||
$PutoutUsersIDs = [];
|
||||
foreach ($AwardDatas as $data) {
|
||||
$first = true;
|
||||
$headLeftUsers = "";
|
||||
$rowspan = 0;
|
||||
foreach ($data['Users'] as $User) {
|
||||
if (!in_array($User['UserID'], $PutoutUsersIDs)) {
|
||||
if ($first) {
|
||||
$first = false;
|
||||
}
|
||||
$row++;
|
||||
$DivClassName = "row" . ($row % 2 ? "even" : "odd");
|
||||
$PutoutUsersIDs[] = $User['UserID'];
|
||||
$rowspan++;
|
||||
$headLeftUsers .= "<div class=\"$DivClassName div-username\">" . Users::format_username($User['UserID'], false, false, false) . "</div>";
|
||||
}
|
||||
}
|
||||
if (!$first) {
|
||||
$GroupNameMap = ['Moderator' => 'Mod', 'Torrent Moderator' => 'TM', 'Forum Moderator' => 'FM', 'Torrent Inspector' => 'TI', 'First Line Support' => 'FLS', 'Interviewer' => 'IN', 'Translators' => 'TL', 'Senior Moderator' => 'SM', 'Developer' => 'Dev', 'Administrator' => 'AD'];
|
||||
if (isset($GroupNameMap[$data['GroupName']])) {
|
||||
echo "<div class=\"group-name\" style=\"grid-row-start: span $rowspan;\" data-tooltip=\"" . $data['GroupName'] . "\">" . $GroupNameMap[$data['GroupName']] . "</div>";
|
||||
} else {
|
||||
echo "<div class=\"group-name\" style=\"grid-row-start: span $rowspan;\">" . $data['GroupName'] . "</div>";
|
||||
}
|
||||
echo $headLeftUsers;
|
||||
}
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
<div id="table-right-scroll">
|
||||
<div id="table-head-top" style="grid-template-columns: repeat(15, 1fr);">
|
||||
<div class="row1 th-span2"><?= t('server.tools.data') ?></div>
|
||||
<div class="row1 th-span4"><?= t('server.tools.torrent_management') ?></div>
|
||||
<div class="row1 th-span4"><?= t('server.tools.site_activities') ?></div>
|
||||
<div class="row1 th-span1"><?= t('server.tools.others') ?></div>
|
||||
<div class="row1 col-tail th-span4"><?= t('server.tools.wage_statistics') ?></div>
|
||||
<div class="row2 th-span1"><?= t('server.tools.snatches') ?></div>
|
||||
<div class="row2 th-span1"><?= t('server.tools.uploads') ?></div>
|
||||
<div class="row2 th-span1"><?= t('server.tools.checks') ?></div>
|
||||
<div class="row2 th-span1"><?= t('server.tools.reports_submitted') ?></div>
|
||||
<div class="row2 th-span1"><?= t('server.tools.reports_handled') ?></div>
|
||||
<div class="row2 th-span1"><?= t('server.tools.edit_requests_handled') ?></div>
|
||||
<div class="row2 th-span1"><?= t('server.tools.posts') ?></div>
|
||||
<div class="row2 th-span1"><?= t('server.tools.rewarded_times') ?></div>
|
||||
<div class="row2 th-span1"><?= t('server.tools.qq_group') ?></div>
|
||||
<div class="row2 th-span1"><?= t('server.tools.tg_group') ?></div>
|
||||
<div class="row2 th-span1"><?= t('server.tools.examined') ?></div>
|
||||
<div class="row2 th-span1"><?= t('server.tools.total_points') ?></div>
|
||||
<div class="row2 th-span1"><?= t('server.tools.floating_wage') ?></div>
|
||||
<div class="row2 th-span1"><?= t('server.tools.base_salary') ?></div>
|
||||
<div class="row2 th-span1 col-tail"><?= t('server.tools.total_wages') ?></div>
|
||||
|
||||
</div>
|
||||
<div id="table-content" style="grid-template-columns: repeat(15, 1fr);">
|
||||
<?
|
||||
$row = 2;
|
||||
$PutoutUsersIDs = [];
|
||||
$Gear = ["", t('server.tools.grade_1'), t('server.tools.grade_2'), t('server.tools.grade_3'), t('server.tools.grade_4'), t('server.tools.grade_5')];
|
||||
foreach ($AwardDatas as $data) {
|
||||
foreach ($data['Users'] as $User) {
|
||||
if (!in_array($User['UserID'], $PutoutUsersIDs)) {
|
||||
$row++;
|
||||
$DivClassName = "row$row row" . ($row % 2 ? "even" : "odd");
|
||||
$PutoutUsersIDs[] = $User['UserID'];
|
||||
?>
|
||||
<div class="<?= $DivClassName ?>" <?= $MaxValue['DownloadCount'] && $MaxValue['DownloadCount'] == $User['DownloadCount'] ? " style=\"color: #d39911;\"" : "" ?>><?= $User['DownloadCount'] ?></div>
|
||||
<div class="<?= $DivClassName ?>" <?= $MaxValue['UploadCount'] && $MaxValue['UploadCount'] == $User['UploadCount'] ? " style=\"color: #d39911;\"" : "" ?>><?= $User['UploadCount'] ?></div>
|
||||
<div class="<?= $DivClassName ?>" <?= $MaxValue['CheckCount'] && $MaxValue['CheckCount'] == $User['CheckCount'] ? " style=\"color: #d39911;\"" : "" ?>><?= $User['CheckCount'] ?></div>
|
||||
<div class="<?= $DivClassName ?>" <?= $MaxValue['RPReportCount'] && $MaxValue['RPReportCount'] == $User['RPReportCount'] ? " style=\"color: #d39911;\"" : "" ?>><?= $User['RPReportCount'] ?></div>
|
||||
<div class="<?= $DivClassName ?>" <?= $MaxValue['RSReportCount'] && $MaxValue['RSReportCount'] == $User['RSReportCount'] ? " style=\"color: #d39911;\"" : "" ?>><?= $User['RSReportCount'] ?></div>
|
||||
<div class="<?= $DivClassName ?>" <?= $MaxValue['EditCount'] && $MaxValue['EditCount'] == $User['EditCount'] ? " style=\"color: #d39911;\"" : "" ?>><?= $User['EditCount'] ?></div>
|
||||
<div class="<?= $DivClassName ?>" <?= $MaxValue['PostCount'] && $MaxValue['PostCount'] == $User['PostCount'] ? " style=\"color: #d39911;\"" : "" ?>><?= $User['PostCount'] ?></div>
|
||||
<div class="<?= $DivClassName ?>" <?= $MaxValue['SendJF'] && $MaxValue['SendJF'] == $User['SendJF'] ? " style=\"color: #d39911;\"" : "" ?>><?= $User['SendJF'] ?></div>
|
||||
<div class="<?= $DivClassName ?>"><?= $User['QQCount'] ?></div>
|
||||
<div class="<?= $DivClassName ?>"><?= $User['TGCount'] ?></div>
|
||||
<div class="<?= $DivClassName ?>" <?= $MaxValue['ApplyCount'] && $MaxValue['ApplyCount'] == $User['ApplyCount'] ? " style=\"color: #d39911;\"" : "" ?>><?= $User['ApplyCount'] ?></div>
|
||||
<div class="<?= $DivClassName ?>" <?= $MaxValue['Point'] && $MaxValue['Point'] == $User['Point'] ? " style=\"color: #d39911;\"" : "" ?>><strong><?= $User['Point'] ?></strong></div>
|
||||
<div class="<?= $DivClassName ?>"><?= $User['Brokerage'] ?></div>
|
||||
<div class="<?= $DivClassName ?>"><?= $User['Base'] ?></div>
|
||||
<div class="<?= $DivClassName ?> col-tail" data-tooltip="<?= $Gear[$User['Gear']] ?>"><strong><?= $User['Salary'] ?></strong></div>
|
||||
<?
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="floatright"><?= t('server.tools.explanation_thread') ?></div>
|
||||
</div>
|
||||
<script>
|
||||
function setCookie(cname, cvalue, exdays = 0) {
|
||||
var d = new Date();
|
||||
d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
|
||||
var expires = "expires=" + d.toUTCString();
|
||||
document.cookie = cname + "=" + cvalue + (exdays ? (";" + expires) : "") + ";path=/";
|
||||
}
|
||||
|
||||
function getCookie(cname) {
|
||||
var name = cname + "=";
|
||||
var ca = document.cookie.split(';');
|
||||
for (var i = 0; i < ca.length; i++) {
|
||||
var c = ca[i];
|
||||
while (c.charAt(0) == ' ') {
|
||||
c = c.substring(1);
|
||||
}
|
||||
if (c.indexOf(name) == 0) {
|
||||
return c.substring(name.length, c.length);
|
||||
}
|
||||
}
|
||||
return "";
|
||||
}
|
||||
$(document).ready(() => {
|
||||
var lastScroll = getCookie("lastScroll")
|
||||
if (lastScroll) {
|
||||
$(document).scrollTop(lastScroll)
|
||||
}
|
||||
$(document).scroll(() => {
|
||||
setCookie("lastScroll", $(document).scrollTop())
|
||||
})
|
||||
})
|
||||
</script>
|
||||
<? View::show_footer(); ?>
|
||||
@@ -81,7 +81,7 @@ View::show_header(t('server.tools.events_reward_history'));
|
||||
foreach ($Histories as $Recode) {
|
||||
?>
|
||||
<tr class="Table-row">
|
||||
<td class="Table-cell"><?= strlen($Recode['UserIDs']) > 1 ? '<a target="_blank" href="tools.php?action=events_reward_history&id=' . $Recode['ID'] . '">' . t('server.tools.show_all') . '</a>' : userIDs2Usernames($Recode['UserIDs'], ' ') ?></td>
|
||||
<td class="Table-cell"><?= count(explode(',', $Recode['UserIDs'])) > 1 ? '<a target="_blank" href="tools.php?action=events_reward_history&id=' . $Recode['ID'] . '">' . t('server.tools.show_all') . '</a>' : userIDs2Usernames($Recode['UserIDs'], ' ') ?></td>
|
||||
<td class="Table-cell"><?= Users::format_username($Recode['ByUserID']) ?></td>
|
||||
<td class="Table-cell"><?
|
||||
$Strs = [];
|
||||
|
||||
@@ -205,7 +205,7 @@ View::show_header(t('server.top10.top_10_users'), '', 'PageTop10User');
|
||||
$NameItem = $UserName;
|
||||
}
|
||||
} else if ($IsAnonymous) {
|
||||
$NameItem = $IsAnonymous;
|
||||
$NameItem = t('server.user.anonymous');
|
||||
} else {
|
||||
$NameItem = $UserName;
|
||||
}
|
||||
|
||||
@@ -172,6 +172,7 @@ if ($CheckAllTorrents) {
|
||||
list($AllUncheckedCnt) = G::$DB->next_record();
|
||||
}
|
||||
|
||||
|
||||
View::show_header(t('server.torrents.header'), 'browse', 'PageTorrentHome');
|
||||
//$TimeNow = new DateTime();
|
||||
//$TimeUntil = new DateTime('2016-12-16 03:50:00');
|
||||
@@ -440,6 +441,7 @@ View::show_header(t('server.torrents.header'), 'browse', 'PageTorrentHome');
|
||||
<span><?= t('server.torrents.unchecked_torrents_results_note', ['Values' => [$AllUncheckedCnt]]) ?></span>
|
||||
<? }
|
||||
?>
|
||||
|
||||
</div>
|
||||
<div class="SearchPageFooter-actions">
|
||||
<input class="Button" type="submit" value="<?= t('server.torrents.search_torrents') ?>" />
|
||||
|
||||
@@ -24,6 +24,7 @@ $View = isset($_GET['view']) ? $_GET['view'] : '';
|
||||
|
||||
// Group details
|
||||
$WikiBody = Lang::choose_content($TorrentDetails['MainWikiBody'], $TorrentDetails['WikiBody']);
|
||||
|
||||
$WikiImage = $TorrentDetails['WikiImage'];
|
||||
$GropuID = $TorrentDetails['ID'];
|
||||
$IMDBID = $TorrentDetails['IMDBID'];
|
||||
|
||||
@@ -148,7 +148,7 @@ if ($_REQUEST['usetoken'] && in_array($FreeTorrent, [Torrents::Normal, Torrents:
|
||||
UPDATE users_main
|
||||
SET FLTokens = FLTokens - $TokenUses
|
||||
WHERE ID = $UserID");
|
||||
G::$DB->prepared_query("DELETE FROM tokens_typed WHERE ID in (SELECT tmp.ID FROM (SELECT ID FROM tokens_typed order by EndTime limit $TokenUses) tmp)");
|
||||
G::$DB->prepared_query("DELETE FROM tokens_typed WHERE ID in (SELECT tmp.ID FROM (SELECT ID FROM tokens_typed WHERE UserID = $UserID order by EndTime limit $TokenUses) tmp)");
|
||||
} catch (Exception $e) {
|
||||
error_log($e);
|
||||
G::$DB->rollback();
|
||||
|
||||
@@ -35,9 +35,10 @@ $Title = Torrents::group_name($Group);
|
||||
list($TorrentID, $UserID, $Info, $Time) = $LogEntry;
|
||||
if (strpos($Info, 'deleted') !== false) {
|
||||
$Color = 'red';
|
||||
}
|
||||
if (strpos($Info, 'uploaded ') !== false) {
|
||||
} else if (strpos($Info, 'uploaded ') !== false) {
|
||||
$Color = 'green';
|
||||
} else {
|
||||
$Color = '';
|
||||
}
|
||||
?>
|
||||
<tr class="Table-row">
|
||||
|
||||
@@ -13,6 +13,7 @@ if ($NumReports < 0) {
|
||||
$ReportIDs = array_column($Reports, 'ID');
|
||||
$ReportsMessage = Reports::get_reports_messages($ReportIDs);
|
||||
$Reported = true;
|
||||
$ReportAdmin = check_perms('admin_reports');
|
||||
$UploaderID = Torrents::get_torrent($TorrentID)['UserID'];
|
||||
include(CONFIG['SERVER_ROOT'] . '/classes/reportsv2_type.php');
|
||||
?>
|
||||
@@ -50,19 +51,19 @@ include(CONFIG['SERVER_ROOT'] . '/classes/reportsv2_type.php');
|
||||
<div class="Box-body BoxList">
|
||||
<div class="BoxBody">
|
||||
<strong>
|
||||
<?= $ReportLinks; ?>
|
||||
<? if ($ReportAdmin) {
|
||||
?>
|
||||
<a href="reportsv2.php?view=report&id=<?= $Report['ID'] ?>">
|
||||
<?= $ReportLinks; ?>
|
||||
<?= $ReportType['title'] ?>
|
||||
</a>
|
||||
<?
|
||||
} else {
|
||||
?>
|
||||
<?= $ReportLinks; ?>
|
||||
<?= $ReportType['title'] ?>
|
||||
<?
|
||||
}
|
||||
?>
|
||||
<?= $ReportType['title'] ?>
|
||||
<?= t('server.torrents.at', ['Values' => [time_diff($Report['ReportedTime'], 2, true, true)]])
|
||||
?>
|
||||
</strong>
|
||||
|
||||
@@ -130,6 +130,9 @@ $OverrideClass = $Override === 2 ? 'paranoia_override' : '';
|
||||
<? } ?>
|
||||
</ul>
|
||||
</div>
|
||||
<?
|
||||
$hasTorrentItem = false;
|
||||
?>
|
||||
|
||||
<div class="SidebarItemUserCoummunity SidebarItem Box Group-column">
|
||||
<div class="Box-header">
|
||||
@@ -142,18 +145,21 @@ $OverrideClass = $Override === 2 ? 'paranoia_override' : '';
|
||||
$ViewCount = check_paranoia_here('requestsfilled_count');
|
||||
$ViewBounty = check_paranoia_here('requestsfilled_bounty');
|
||||
|
||||
if ($ViewCount && !$ViewBounty && !$ViewAll) { ?>
|
||||
if ($ViewCount && !$ViewBounty && !$ViewAll) {
|
||||
$hasTorrentItem = true ?>
|
||||
<li class="SidebarList-item isRequestFill" id="requst-fill-value" data-value="<?= $RequestsFilled ?>">
|
||||
<span><?= t('server.user.requestsfilled') ?>: </span>
|
||||
<span data-tooltip="<?= empty($RequestRank) ? '' : t('server.user.all_site') . ' ' . number_format($RequestRank) . '%' ?>"><?= number_format($RequestsFilled) ?> </span>
|
||||
</li>
|
||||
<? } elseif (!$ViewCount && $ViewBounty && !$ViewAll) { ?>
|
||||
<? } elseif (!$ViewCount && $ViewBounty && !$ViewAll) {
|
||||
$hasTorrentItem = true ?>
|
||||
<li class="SidebarList-item">
|
||||
<span><?= t('server.user.requestsfilled') ?>: </span>
|
||||
<?= Format::get_size($TotalBounty) ?>
|
||||
<?= t('server.user.collected') ?>
|
||||
</li>
|
||||
<? } elseif ($ViewCount && $ViewBounty && !$ViewAll) { ?>
|
||||
<? } elseif ($ViewCount && $ViewBounty && !$ViewAll) {
|
||||
$hasTorrentItem = true ?>
|
||||
<li class="SidebarList-item">
|
||||
<span><?= t('server.user.requestsfilled') ?>: </span>
|
||||
<span data-tooltip="<?= empty($RequestRank) ? '' : t('server.user.all_site') . ' ' . number_format($RequestRank) . '%' ?>"><?= number_format($RequestsFilled) ?></span>
|
||||
@@ -162,7 +168,8 @@ $OverrideClass = $Override === 2 ? 'paranoia_override' : '';
|
||||
<?= Format::get_size($TotalBounty) ?>)
|
||||
</span>
|
||||
</li>
|
||||
<? } elseif ($ViewAll) { ?>
|
||||
<? } elseif ($ViewAll) {
|
||||
$hasTorrentItem = true ?>
|
||||
<li class="SidebarList-item">
|
||||
<span class="<?= ($ViewCount === 2 ? 'paranoia_override' : '') ?>">
|
||||
<span><?= t('server.user.requestsfilled') ?>: </span>
|
||||
@@ -184,16 +191,20 @@ $OverrideClass = $Override === 2 ? 'paranoia_override' : '';
|
||||
$ViewCount = check_paranoia_here('requestsvoted_count');
|
||||
$ViewBounty = check_paranoia_here('requestsvoted_bounty');
|
||||
|
||||
if ($ViewCount && !$ViewBounty && !$ViewAll) { ?>
|
||||
if ($ViewCount && !$ViewBounty && !$ViewAll) {
|
||||
$hasTorrentItem = true ?>
|
||||
<li class="SidebarList-item"><?= t('server.user.requestscreated') ?>: <?= number_format($RequestsCreated) ?></li>
|
||||
<li class="SidebarList-item"><?= t('server.user.requestsvoted') ?> <?= number_format($RequestsVoted) ?></li>
|
||||
<? } elseif (!$ViewCount && $ViewBounty && !$ViewAll) { ?>
|
||||
<? } elseif (!$ViewCount && $ViewBounty && !$ViewAll) {
|
||||
$hasTorrentItem = true ?>
|
||||
<li class="SidebarList-item"><?= t('server.user.requestscreated') ?>: <?= Format::get_size($RequestsCreatedSpent) ?> <?= t('server.user.spent') ?></li>
|
||||
<li class="SidebarList-item"><?= t('server.user.requestsvoted') ?> <span data-tooltip="<?= empty($BountyRank) ? '' : t('server.user.all_site') . ' ' . number_format($BountyRank) . '%' ?>"><?= Format::get_size($TotalSpent) ?></span> <?= t('server.user.spent') ?></li>
|
||||
<? } elseif ($ViewCount && $ViewBounty && !$ViewAll) { ?>
|
||||
<? } elseif ($ViewCount && $ViewBounty && !$ViewAll) {
|
||||
$hasTorrentItem = true ?>
|
||||
<li class="SidebarList-item"><?= t('server.user.requestscreated') ?>: <?= number_format($RequestsCreated) ?> <?= t('server.user.for') ?> <?= Format::get_size($RequestsCreatedSpent) ?></li>
|
||||
<li class="SidebarList-item"><?= t('server.user.requestsvoted') ?> <?= number_format($RequestsVoted) ?> <?= t('server.user.for') ?><span data-tooltip="<?= empty($BountyRank) ? '' : t('server.user.all_site') . ' ' . number_format($BountyRank) . '%' ?>"> <?= Format::get_size($TotalSpent) ?></span></li>
|
||||
<? } elseif ($ViewAll) { ?>
|
||||
<? } elseif ($ViewAll) {
|
||||
$hasTorrentItem = true ?>
|
||||
<li class="SidebarList-item">
|
||||
<span class="<?= ($ViewCount === 2 ? 'paranoia_override' : '') ?>"><?= t('server.user.requestscreated') ?>:
|
||||
<a href="requests.php?type=created&userid=<?= $UserID ?>" class="brackets<?= ($ViewAll === 2 ? ' paranoia_override' : '') ?>">
|
||||
@@ -212,7 +223,8 @@ $OverrideClass = $Override === 2 ? 'paranoia_override' : '';
|
||||
</li>
|
||||
<? } ?>
|
||||
<?
|
||||
if ($CanViewUploads || $Override = check_paranoia_here('uploads+')) { ?>
|
||||
if ($CanViewUploads || $Override = check_paranoia_here('uploads+')) {
|
||||
$hasTorrentItem = true ?>
|
||||
<li class="SidebarList-item isUploadCount <?= $OverrideClass ?>" id="upload-count-value" data-value="<?= $Uploads ?>">
|
||||
<?= t('server.user.comm_upload') ?>:
|
||||
<a data-tooltip="<?= empty($UploadsRank) ? '' : t('server.user.all_site') . ' ' . number_format($UploadsRank) . '%' ?>" class="brackets <?= $OverrideClass ?>" href="torrents.php?type=uploaded&userid=<?= $UserID ?>">
|
||||
@@ -234,7 +246,8 @@ $OverrideClass = $Override === 2 ? 'paranoia_override' : '';
|
||||
</li>
|
||||
<? } ?>
|
||||
<?
|
||||
if ($CanViewUploads || $Override = check_paranoia_here('originals+')) { ?>
|
||||
if ($CanViewUploads || $Override = check_paranoia_here('originals+')) {
|
||||
$hasTorrentItem = true ?>
|
||||
<li class="SidebarList-item isOriginalUploadCount <?= $OverrideClass ?>" id="original-upload-count-value" data-value-buy="<?= $OriginalsBuy ?>" data-value-diy="<?= $OriginalsDiy ?>">
|
||||
<?= t('server.user.comm_originals') ?>:
|
||||
<span data-tooltip="<?= t('server.user.self_purchase_number') ?>">
|
||||
@@ -248,6 +261,7 @@ $OverrideClass = $Override === 2 ? 'paranoia_override' : '';
|
||||
<?
|
||||
}
|
||||
if ($Override = check_paranoia_here('seeding+')) {
|
||||
$hasTorrentItem = true
|
||||
?>
|
||||
<li class="SidebarList-item <?= $OverrideClass ?>">
|
||||
<?= t('server.user.comm_seeding') ?>:
|
||||
@@ -280,7 +294,8 @@ $OverrideClass = $Override === 2 ? 'paranoia_override' : '';
|
||||
</li>
|
||||
<?
|
||||
}
|
||||
if ($Override = check_paranoia_here('leeching+')) { ?>
|
||||
if ($Override = check_paranoia_here('leeching+')) {
|
||||
$hasTorrentItem = true ?>
|
||||
<li class="SidebarList-item <?= $OverrideClass ?>">
|
||||
<?= t('server.user.comm_leeching') ?>:
|
||||
<span class="user_commstats" id="user_commstats_leeching">
|
||||
@@ -299,7 +314,8 @@ $OverrideClass = $Override === 2 ? 'paranoia_override' : '';
|
||||
</li>
|
||||
<?
|
||||
}
|
||||
if ($Override = check_paranoia_here('snatched+')) { ?>
|
||||
if ($Override = check_paranoia_here('snatched+')) {
|
||||
$hasTorrentItem = true ?>
|
||||
<li class="SidebarList-item <?= $OverrideClass ?>">
|
||||
<?= t('server.user.comm_snatched') ?>:
|
||||
<span class="user_commstats" id="user_commstats_snatched"><a href="#" class="brackets" onclick="commStats(<?= $UserID ?>); return false;"><?= t('server.user.community_show') ?></a></a></span>
|
||||
@@ -308,14 +324,16 @@ $OverrideClass = $Override === 2 ? 'paranoia_override' : '';
|
||||
<?
|
||||
}
|
||||
}
|
||||
if ($Override = check_paranoia_here('snatched')) { ?>
|
||||
if ($Override = check_paranoia_here('snatched')) {
|
||||
$hasTorrentItem = true ?>
|
||||
[<a href="torrents.php?type=snatched&userid=<?= $UserID ?>" class="brackets <?= $OverrideClass ?>"><?= t('server.user.view') ?></a>
|
||||
<? if (check_perms('zip_downloader')) { ?>
|
||||
|<a href="torrents.php?action=redownload&type=snatches&userid=<?= $UserID ?>" onclick="return confirm('<?= t('server.user.redownloading_confirm') ?>');" class="brackets"><?= t('server.user.community_dl') ?></a></a>
|
||||
<? } ?>]
|
||||
</li>
|
||||
<? } ?>
|
||||
<? if (check_perms('site_view_torrent_snatchlist', $Class)) { ?>
|
||||
<? if (check_perms('site_view_torrent_snatchlist', $Class)) {
|
||||
$hasTorrentItem = true ?>
|
||||
<li class="SidebarList-item" id="comm_downloaded">
|
||||
<?= t('server.user.comm_downloaded') ?>:
|
||||
<span class="user_commstats" id="user_commstats_downloaded">
|
||||
@@ -329,9 +347,16 @@ $OverrideClass = $Override === 2 ? 'paranoia_override' : '';
|
||||
</a>]
|
||||
</li>
|
||||
<? } ?>
|
||||
<?
|
||||
if (!$hasTorrentItem) {
|
||||
?>
|
||||
<li class="SidebarList-item"><?= t('server.common.no_results') ?></li>
|
||||
<?
|
||||
} ?>
|
||||
</ul>
|
||||
<?
|
||||
if ($OwnProfile || check_perms('users_override_paranoia')) { ?>
|
||||
if ($OwnProfile || check_perms('users_override_paranoia')) {
|
||||
$hasTorrentItem = true ?>
|
||||
<?
|
||||
$DB->query("SELECT xs.uid, xs.tstamp, xs.fid, t.Size FROM xbt_snatched AS xs left join torrents AS t ON t.ID = xs.fid WHERE xs.uid =" . $UserID . " and xs.tstamp >= unix_timestamp(date_format(now(),'%Y-%m-01')) order by 2");
|
||||
$Requests = $DB->to_array();
|
||||
@@ -413,13 +438,19 @@ $OverrideClass = $Override === 2 ? 'paranoia_override' : '';
|
||||
}
|
||||
}
|
||||
?>
|
||||
<? } ?>
|
||||
<?
|
||||
}
|
||||
|
||||
?>
|
||||
<? if ($LoggedUser['AutoloadCommStats']) { ?>
|
||||
<script type="text/javascript">
|
||||
commStats(<?= $UserID ?>);
|
||||
</script>
|
||||
<? } ?>
|
||||
</div>
|
||||
<?
|
||||
$hasOther = false;
|
||||
?>
|
||||
<div class="SidebarItemUserCoummunity SidebarItem Box Group-column">
|
||||
<div class="Box-header">
|
||||
<?= t('server.common.others') ?>
|
||||
@@ -427,7 +458,9 @@ $OverrideClass = $Override === 2 ? 'paranoia_override' : '';
|
||||
|
||||
<ul class="SidebarList SidebarItem-body Box-body">
|
||||
<?
|
||||
if (($Override = check_paranoia_here('collages+')) && CONFIG['ENABLE_COLLAGES']) { ?>
|
||||
if (($Override = check_paranoia_here('collages+')) && CONFIG['ENABLE_COLLAGES']) {
|
||||
$hasOther = true;
|
||||
?>
|
||||
<li class="SidebarList-item isCollageCreateCount <?= $OverrideClass ?>" id="collage-create-count-value" data-value="<?= $NumCollages ?>">
|
||||
<span><?= t('server.user.community_collstart') ?>: </span>
|
||||
<? if ($Override = check_paranoia_here('collages')) { ?>
|
||||
@@ -440,7 +473,8 @@ $OverrideClass = $Override === 2 ? 'paranoia_override' : '';
|
||||
</li>
|
||||
<?
|
||||
}
|
||||
if (($Override = check_paranoia_here('collagecontribs+')) && CONFIG['ENABLE_COLLAGES']) { ?>
|
||||
if (($Override = check_paranoia_here('collagecontribs+')) && CONFIG['ENABLE_COLLAGES']) {
|
||||
$hasOther = true; ?>
|
||||
<li class="SidebarList-item isCollageContributeCount <?= $OverrideClass ?>" id="collage-countribute-count-value" data-value="<?= $NumCollageContribs ?>">
|
||||
<span><?= t('server.user.community_collcontrib') ?>: </span>
|
||||
<? if ($Override = check_paranoia_here('collagecontribs')) { ?>
|
||||
@@ -454,7 +488,8 @@ $OverrideClass = $Override === 2 ? 'paranoia_override' : '';
|
||||
<? }
|
||||
?>
|
||||
<?
|
||||
if (($Override = check_paranoia_here('artistsadded'))) { ?>
|
||||
if (($Override = check_paranoia_here('artistsadded'))) {
|
||||
$hasOther = true; ?>
|
||||
<li class="SidebarList-item" , id="artists_added">
|
||||
<span><?= t('server.user.u_artist') ?>: </span>
|
||||
<span data-tooltip="<?= !empty($ArtistsRank) ? t('server.user.all_site') . ' ' . $ArtistsRank . '%' : '' ?>">
|
||||
@@ -464,6 +499,7 @@ $OverrideClass = $Override === 2 ? 'paranoia_override' : '';
|
||||
<?
|
||||
}
|
||||
if ($Override = check_paranoia_here('invitedcount')) {
|
||||
$hasOther = true;
|
||||
$DB->query("SELECT COUNT(UserID) FROM users_info WHERE Inviter = '$UserID'");
|
||||
list($Invited) = $DB->next_record();
|
||||
?>
|
||||
@@ -474,6 +510,13 @@ $OverrideClass = $Override === 2 ? 'paranoia_override' : '';
|
||||
<?
|
||||
}
|
||||
?>
|
||||
<?
|
||||
if (!$hasOther) {
|
||||
?>
|
||||
<li class="SidebarList-item"><?= t('server.common.no_results') ?></li>
|
||||
<?
|
||||
}
|
||||
?>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -947,11 +947,11 @@ View::show_header($Username, "jquery.imagesloaded,jquery.wookmark,user,bbcode,co
|
||||
AND t.UserID != '$UserID'
|
||||
AND g.CategoryID = '1'
|
||||
AND g.WikiImage != ''
|
||||
GROUP BY g.ID
|
||||
GROUP BY t.ID
|
||||
ORDER BY s.tstamp DESC
|
||||
LIMIT 5");
|
||||
$RecentSnatches = $DB->to_array();
|
||||
$Cache->cache_value("recent_snatches_$UserID", $RecentSnatches, 0); //inf cache
|
||||
$Cache->cache_value("recent_snatches_$UserID", $RecentSnatches, 86400); //inf cache
|
||||
}
|
||||
if (!empty($RecentSnatches)) {
|
||||
?>
|
||||
@@ -991,11 +991,11 @@ View::show_header($Username, "jquery.imagesloaded,jquery.wookmark,user,bbcode,co
|
||||
WHERE t.UserID = '$UserID'
|
||||
AND g.CategoryID = '1'
|
||||
AND g.WikiImage != ''
|
||||
GROUP BY g.ID
|
||||
GROUP BY t.ID
|
||||
ORDER BY t.Time DESC
|
||||
LIMIT 5");
|
||||
$RecentUploads = $DB->to_array();
|
||||
$Cache->cache_value("recent_uploads_$UserID", $RecentUploads, 0); //inf cache
|
||||
$Cache->cache_value("recent_uploads_$UserID", $RecentUploads, 86400); //inf cache
|
||||
}
|
||||
if (!empty($RecentUploads)) {
|
||||
?>
|
||||
|
||||
@@ -21,6 +21,10 @@
|
||||
-webkit-line-clamp: 2;
|
||||
}
|
||||
|
||||
.LongText-text.LongText-line-5 {
|
||||
-webkit-line-clamp: 5;
|
||||
}
|
||||
|
||||
.LongText .LongText-text::before {
|
||||
content: '';
|
||||
height: calc(100% - var(--global-lineHeight));
|
||||
|
||||
@@ -100,10 +100,6 @@ Where
|
||||
background: var(--Box-header-background);
|
||||
}
|
||||
|
||||
.Table:is(.is-inner) :is(.Table-cellHeader, .Table-rowHeader .Table-cell) {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.Table :is(.Table-cellHeader, .Table-rowHeader .Table-cell):first-child {
|
||||
border-top-left-radius: var(--global-borderRadius);
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
.TorrentView-btn {
|
||||
font-size: var(--global-fontSize-sm);
|
||||
margin-left: auto;
|
||||
color: var(--Button-primary-background);
|
||||
color: var(--Button-default-color);
|
||||
background-color: transparent;
|
||||
border-color: transparent;
|
||||
cursor: pointer;
|
||||
|
||||
@@ -48,6 +48,14 @@ TorrentCover variant="OneLine | FiveGrid"
|
||||
word-break: break-all;
|
||||
}
|
||||
|
||||
.TorrentCover-item .TorrentCover-title {
|
||||
width: 160px;
|
||||
color: var(--TableTorrent-movieInfoTitle-color);
|
||||
padding-top: var(--global-space-sm);
|
||||
justify-content: center;
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.TorrentCover-imageContainer {
|
||||
width: 160px;
|
||||
height: 240px;
|
||||
@@ -60,9 +68,11 @@ TorrentCover variant="OneLine | FiveGrid"
|
||||
left: 0px;
|
||||
top: 0px;
|
||||
z-index: 1000;
|
||||
width: 24px;
|
||||
width: 26px;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
border-bottom-right-radius: var(--global-borderRadius);
|
||||
border-top-left-radius: var(--global-borderRadius);
|
||||
}
|
||||
|
||||
.TorrentCover-imdbTag {
|
||||
@@ -78,7 +88,10 @@ TorrentCover variant="OneLine | FiveGrid"
|
||||
z-index: 1000;
|
||||
color: var(--TableTorrent-coverTag-color);
|
||||
background-color: var(--TableTorrent-coverTag-background);
|
||||
padding: 0 2px;
|
||||
border-top-left-radius: var(--global-borderRadius);
|
||||
border-bottom-right-radius: var(--global-borderRadius);
|
||||
padding-right: 4px;
|
||||
padding-left: 2px;
|
||||
font-size: 75%;
|
||||
}
|
||||
@media (max-width: 768px) {
|
||||
@@ -92,8 +105,3 @@ TorrentCover variant="OneLine | FiveGrid"
|
||||
height: 100%;
|
||||
border-radius: var(--global-borderRadius);
|
||||
}
|
||||
|
||||
.TorrentCover-item b {
|
||||
color: var(--TableTorrent-movieInfoTitle-color);
|
||||
padding-top: var(--global-space-sm);
|
||||
}
|
||||
|
||||
@@ -158,7 +158,7 @@
|
||||
--Button-default-onHover-color: var(--global-onHover-color-onPrimary);
|
||||
--Button-default-onHover-boxShadow: var(--Button-default-boxShadow);
|
||||
--Button-default-onHover-border: var(--Button-default-border);
|
||||
--Button-primary-background: var(--Header-background);
|
||||
--Button-primary-background: var(--HeaderAnnounceItem-link-background);
|
||||
--Button-primary-color: var(--Button-default-color);
|
||||
--Button-primary-border: var(--Button-default-border);
|
||||
--Button-primary-boxShadow: var(--Button-default-boxShadow);
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
<svg class="icon" fill="currentColor" viewBox="0 0 24 24"
|
||||
xmlns="http://www.w3.org/2000/svg">
|
||||
<path
|
||||
d="M20 3H4c-1.103 0-2 .897-2 2v14c0 1.103.897 2 2 2h16c1.103 0 2-.897 2-2V5c0-1.103-.897-2-2-2zm.001 6c-.001 0-.001 0 0 0h-.466l-2.667-4H20l.001 4zM9.535 9 6.868 5h2.597l2.667 4H9.535zm5 0-2.667-4h2.597l2.667 4h-2.597zM4 5h.465l2.667 4H4V5zm0 14v-8h16l.002 8H4z" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 388 B |
@@ -664,10 +664,10 @@ server.bonus.upload-3: |-
|
||||
250GB upload
|
||||
server.bonus.upload-4: |-
|
||||
500GB upload
|
||||
server.bonus.recommend-movie-1: |-
|
||||
Recommend a movie 1 day
|
||||
server.bonus.recommend-movie-7: |-
|
||||
Recommend a movie 7 days
|
||||
Recommend a movie 7 day
|
||||
server.bonus.recommend-movie-30: |-
|
||||
Recommend a movie 30 days
|
||||
server.bonus.torrent_group_id: |-
|
||||
Torrent Group ID
|
||||
server.bonus.you_cannot_afford_this_item: |-
|
||||
@@ -5452,7 +5452,7 @@ server.torrents.reply: |-
|
||||
server.torrents.reply_at: |-
|
||||
reply the report
|
||||
server.torrents.reply_it_patiently: |-
|
||||
Please type your explanation to the report here, you can only submit once. Please be patient and objective, this reply can help staff to handle the report better.
|
||||
Please type your explanation to the report here. Please be patient and objective, this reply can help staff to handle the report better.
|
||||
server.torrents.report: |-
|
||||
Report
|
||||
server.torrents.reported: |-
|
||||
|
||||
@@ -444,10 +444,10 @@ server.bonus.upload-3: |-
|
||||
250GB de subida
|
||||
server.bonus.upload-4: |-
|
||||
500GB de subida
|
||||
server.bonus.recommend-movie-1: |-
|
||||
Recomendar una película (1)
|
||||
server.bonus.recommend-movie-7: |-
|
||||
Recomendar una película (7)
|
||||
server.bonus.recommend-movie-30: |-
|
||||
Recomendar una película (30)
|
||||
server.bonus.torrent_group_id: |-
|
||||
ID del grupo de torrents
|
||||
server.bookmarks.dont_notify_new: |-
|
||||
|
||||
@@ -663,10 +663,10 @@ server.bonus.upload-3: |-
|
||||
Upload de 250GB
|
||||
server.bonus.upload-4: |-
|
||||
Upload de 500GB
|
||||
server.bonus.recommend-movie-1: |-
|
||||
Filmes recomendados 1 dia
|
||||
server.bonus.recommend-movie-7: |-
|
||||
Filmes recomendados 7 dias
|
||||
Filmes recomendados 7 dia
|
||||
server.bonus.recommend-movie-30: |-
|
||||
Filmes recomendados 30 dias
|
||||
server.bonus.torrent_group_id: |-
|
||||
ID do grupo de sementes
|
||||
server.bonus.you_cannot_afford_this_item: |-
|
||||
@@ -5412,7 +5412,7 @@ server.torrents.reply: |-
|
||||
server.torrents.reply_at: |-
|
||||
responder a denúncia
|
||||
server.torrents.reply_it_patiently: |-
|
||||
Por favor, digite a sua explicação para o relatório aqui, você só pode enviar uma vez. Por favor, seja paciente e objetivo, esta resposta pode ajudar o pessoal a lidar melhor com o relatório.
|
||||
Por favor, digite a sua explicação para o relatório aqui. Por favor, seja paciente e objetivo, esta resposta pode ajudar o pessoal a lidar melhor com o relatório.
|
||||
server.torrents.report: |-
|
||||
Reportar
|
||||
server.torrents.reported: |-
|
||||
|
||||
@@ -650,10 +650,10 @@ server.bonus.upload-3: |-
|
||||
250GiB 上传量
|
||||
server.bonus.upload-4: |-
|
||||
500GiB 上传量
|
||||
server.bonus.recommend-movie-1: |-
|
||||
推荐电影 1天
|
||||
server.bonus.recommend-movie-7: |-
|
||||
推荐电影 7天
|
||||
推荐电影 7 天
|
||||
server.bonus.recommend-movie-30: |-
|
||||
推荐电影 30 天
|
||||
server.bonus.torrent_group_id: |-
|
||||
种子组ID
|
||||
server.bonus.you_cannot_afford_this_item: |-
|
||||
@@ -5363,7 +5363,7 @@ server.torrents.reply: |-
|
||||
server.torrents.reply_at: |-
|
||||
回复报告于
|
||||
server.torrents.reply_it_patiently: |-
|
||||
请在此填写你针对已有报告想作出的解释和说明,你只能提交一次,请保持礼貌、客观。该说明有助于管理更好地处理该报告。
|
||||
请在此填写你针对已有报告想作出的解释和说明,请保持礼貌、客观。该说明有助于管理更好地处理该报告。
|
||||
server.torrents.report: |-
|
||||
报告
|
||||
server.torrents.reported: |-
|
||||
@@ -8339,8 +8339,6 @@ client.stats.uv: |-
|
||||
日活跃用户数
|
||||
client.stats.seeding_user: |-
|
||||
做种的用户数
|
||||
server.forums.verbal: |-
|
||||
口头的
|
||||
server.wiki.created: |-
|
||||
提交时间
|
||||
server.wiki.edited: |-
|
||||
|
||||
Reference in New Issue
Block a user