mirror of
https://github.com/BillyOutlast/Gazelle-Porn.git
synced 2026-07-01 06:41:50 -04:00
sync: 2022-12-18 20:03:35 +0000
This commit is contained in:
+211
-215
@@ -3,156 +3,152 @@
|
||||
namespace Gazelle\Torrent;
|
||||
|
||||
use Torrents;
|
||||
use Lang;
|
||||
|
||||
class TorrentSlotGroupStatus {
|
||||
const Full = 1; // 满
|
||||
const Free = 2; // 有空闲
|
||||
const Empty = 3; // 空
|
||||
}
|
||||
|
||||
class TorrentSlotResolution {
|
||||
const None = 0;
|
||||
const SD = 1;
|
||||
const HD720P = 2;
|
||||
const HD1080P = 3;
|
||||
const UHD = 4;
|
||||
}
|
||||
|
||||
class TorrentSlotType {
|
||||
const None = 0;
|
||||
const Quality = 1;
|
||||
const NTSCUntouched = 2;
|
||||
const PALUntouched = 3;
|
||||
const Retention = 4;
|
||||
const Feature = 5;
|
||||
const ChineseQuality = 6;
|
||||
const EnglishQuality = 7;
|
||||
const X265ChineseQuality = 8;
|
||||
const X265EnglishQuality = 9;
|
||||
const Remux = 10;
|
||||
const DIY = 11;
|
||||
const Untouched = 12;
|
||||
}
|
||||
|
||||
class TorrentSlotGroup {
|
||||
const SDEncode = 1;
|
||||
const SDUntouched = 2;
|
||||
const HDEncode = 3;
|
||||
const HDUntouched = 4;
|
||||
const UHDEncode = 5;
|
||||
const UHDUntouched = 6;
|
||||
}
|
||||
|
||||
class TorrentSlot {
|
||||
// Slot resolution
|
||||
public const TorrentSlotResolutionNone = 0;
|
||||
public const TorrentSlotResolutionSD = 1;
|
||||
public const TorrentSlotResolutionHD720P = 2;
|
||||
public const TorrentSlotResolutionHD1080P = 3;
|
||||
public const TorrentSlotResolutionUHD = 4;
|
||||
|
||||
// Slot group
|
||||
public const TorrentSlotGroupSDEncode = 1;
|
||||
public const TorrentSlotGroupSDUntouched = 2;
|
||||
public const TorrentSlotGroupHDEncode = 3;
|
||||
public const TorrentSlotGroupHDUntouched = 4;
|
||||
public const TorrentSlotGroupUHDEncode = 5;
|
||||
public const TorrentSlotGroupUHDUntouched = 6;
|
||||
|
||||
// Slot status
|
||||
public const TorrentSlotStatusFull = 1;
|
||||
public const TorrentSlotStatusFree = 2;
|
||||
public const TorrentSlotStatusEmpty = 3;
|
||||
|
||||
|
||||
// Slot type
|
||||
public const TorrentSlotTypeNone = 0;
|
||||
public const TorrentSlotTypeQuality = 1;
|
||||
public const TorrentSlotTypeNTSCUntouched = 2;
|
||||
public const TorrentSlotTypePALUntouched = 3;
|
||||
public const TorrentSlotTypeRetention = 4;
|
||||
public const TorrentSlotTypeFeature = 5;
|
||||
public const TorrentSlotTypeChineseQuality = 6;
|
||||
public const TorrentSlotTypeEnglishQuality = 7;
|
||||
public const TorrentSlotTypeX265ChineseQuality = 8;
|
||||
public const TorrentSlotTypeX265EnglishQuality = 9;
|
||||
public const TorrentSlotTypeRemux = 10;
|
||||
public const TorrentSlotTypeDIY = 11;
|
||||
public const TorrentSlotTypeUntouched = 12;
|
||||
|
||||
const SDEncodeSlots = [
|
||||
TorrentSlotType::Quality,
|
||||
TorrentSlotType::ChineseQuality,
|
||||
self::TorrentSlotTypeQuality,
|
||||
self::TorrentSlotTypeChineseQuality,
|
||||
];
|
||||
const SDUntouchedSlots = [
|
||||
TorrentSlotType::NTSCUntouched,
|
||||
TorrentSlotType::PALUntouched,
|
||||
self::TorrentSlotTypeNTSCUntouched,
|
||||
self::TorrentSlotTypePALUntouched,
|
||||
];
|
||||
const HD720PEncodeSlots = [
|
||||
TorrentSlotType::Retention,
|
||||
TorrentSlotType::Feature,
|
||||
TorrentSlotType::ChineseQuality,
|
||||
TorrentSlotType::EnglishQuality,
|
||||
self::TorrentSlotTypeRetention,
|
||||
self::TorrentSlotTypeFeature,
|
||||
self::TorrentSlotTypeChineseQuality,
|
||||
self::TorrentSlotTypeEnglishQuality,
|
||||
];
|
||||
const HD1080PEncodeSlots = [
|
||||
TorrentSlotType::Retention,
|
||||
TorrentSlotType::Feature,
|
||||
TorrentSlotType::ChineseQuality,
|
||||
TorrentSlotType::EnglishQuality,
|
||||
TorrentSlotType::X265ChineseQuality,
|
||||
TorrentSlotType::X265EnglishQuality,
|
||||
self::TorrentSlotTypeRetention,
|
||||
self::TorrentSlotTypeFeature,
|
||||
self::TorrentSlotTypeChineseQuality,
|
||||
self::TorrentSlotTypeEnglishQuality,
|
||||
self::TorrentSlotTypeX265ChineseQuality,
|
||||
self::TorrentSlotTypeX265EnglishQuality,
|
||||
];
|
||||
const HD720PUntouchedSlots = [
|
||||
TorrentSlotType::Remux,
|
||||
TorrentSlotType::Untouched,
|
||||
self::TorrentSlotTypeRemux,
|
||||
self::TorrentSlotTypeUntouched,
|
||||
];
|
||||
|
||||
const HD1080PUntouchedSlots = [
|
||||
TorrentSlotType::Remux,
|
||||
TorrentSlotType::Untouched,
|
||||
TorrentSlotType::DIY,
|
||||
self::TorrentSlotTypeRemux,
|
||||
self::TorrentSlotTypeUntouched,
|
||||
self::TorrentSlotTypeDIY,
|
||||
];
|
||||
const UHDEncodeSlots = [
|
||||
TorrentSlotType::Retention,
|
||||
TorrentSlotType::Feature,
|
||||
TorrentSlotType::ChineseQuality,
|
||||
TorrentSlotType::EnglishQuality,
|
||||
self::TorrentSlotTypeRetention,
|
||||
self::TorrentSlotTypeFeature,
|
||||
self::TorrentSlotTypeChineseQuality,
|
||||
self::TorrentSlotTypeEnglishQuality,
|
||||
];
|
||||
const UHDUntouchedSlots = [
|
||||
TorrentSlotType::Remux,
|
||||
TorrentSlotType::DIY,
|
||||
TorrentSlotType::Untouched,
|
||||
self::TorrentSlotTypeRemux,
|
||||
self::TorrentSlotTypeDIY,
|
||||
self::TorrentSlotTypeUntouched,
|
||||
];
|
||||
|
||||
|
||||
|
||||
const SDSlots = [
|
||||
TorrentSlotType::None,
|
||||
TorrentSlotType::Quality,
|
||||
TorrentSlotType::ChineseQuality,
|
||||
TorrentSlotType::NTSCUntouched,
|
||||
TorrentSlotType::PALUntouched,
|
||||
self::TorrentSlotTypeNone,
|
||||
self::TorrentSlotTypeQuality,
|
||||
self::TorrentSlotTypeChineseQuality,
|
||||
self::TorrentSlotTypeNTSCUntouched,
|
||||
self::TorrentSlotTypePALUntouched,
|
||||
];
|
||||
const HD720PSlots = [
|
||||
TorrentSlotType::None,
|
||||
TorrentSlotType::Retention,
|
||||
TorrentSlotType::Feature,
|
||||
TorrentSlotType::ChineseQuality,
|
||||
TorrentSlotType::EnglishQuality,
|
||||
TorrentSlotType::Remux,
|
||||
TorrentSlotType::Untouched,
|
||||
self::TorrentSlotTypeNone,
|
||||
self::TorrentSlotTypeRetention,
|
||||
self::TorrentSlotTypeFeature,
|
||||
self::TorrentSlotTypeChineseQuality,
|
||||
self::TorrentSlotTypeEnglishQuality,
|
||||
self::TorrentSlotTypeRemux,
|
||||
self::TorrentSlotTypeUntouched,
|
||||
];
|
||||
const HD1080PSlots = [
|
||||
TorrentSlotType::None,
|
||||
TorrentSlotType::Retention,
|
||||
TorrentSlotType::Feature,
|
||||
TorrentSlotType::ChineseQuality,
|
||||
TorrentSlotType::EnglishQuality,
|
||||
TorrentSlotType::X265ChineseQuality,
|
||||
TorrentSlotType::X265EnglishQuality,
|
||||
TorrentSlotType::Remux,
|
||||
TorrentSlotType::DIY,
|
||||
TorrentSlotType::Untouched,
|
||||
self::TorrentSlotTypeNone,
|
||||
self::TorrentSlotTypeRetention,
|
||||
self::TorrentSlotTypeFeature,
|
||||
self::TorrentSlotTypeChineseQuality,
|
||||
self::TorrentSlotTypeEnglishQuality,
|
||||
self::TorrentSlotTypeX265ChineseQuality,
|
||||
self::TorrentSlotTypeX265EnglishQuality,
|
||||
self::TorrentSlotTypeRemux,
|
||||
self::TorrentSlotTypeDIY,
|
||||
self::TorrentSlotTypeUntouched,
|
||||
];
|
||||
const UHDSlots = [
|
||||
TorrentSlotType::None,
|
||||
TorrentSlotType::Retention,
|
||||
TorrentSlotType::Feature,
|
||||
TorrentSlotType::ChineseQuality,
|
||||
TorrentSlotType::EnglishQuality,
|
||||
TorrentSlotType::Remux,
|
||||
TorrentSlotType::DIY,
|
||||
TorrentSlotType::Untouched,
|
||||
self::TorrentSlotTypeNone,
|
||||
self::TorrentSlotTypeRetention,
|
||||
self::TorrentSlotTypeFeature,
|
||||
self::TorrentSlotTypeChineseQuality,
|
||||
self::TorrentSlotTypeEnglishQuality,
|
||||
self::TorrentSlotTypeRemux,
|
||||
self::TorrentSlotTypeDIY,
|
||||
self::TorrentSlotTypeUntouched,
|
||||
];
|
||||
|
||||
const Slots = [
|
||||
TorrentSlotResolution::SD => self::SDSlots,
|
||||
TorrentSlotResolution::HD720P => self::HD720PSlots,
|
||||
TorrentSlotResolution::HD1080P => self::HD1080PSlots,
|
||||
TorrentSlotResolution::UHD => self::UHDSlots,
|
||||
self::TorrentSlotResolutionSD => self::SDSlots,
|
||||
self::TorrentSlotResolutionHD720P => self::HD720PSlots,
|
||||
self::TorrentSlotResolutionHD1080P => self::HD1080PSlots,
|
||||
self::TorrentSlotResolutionUHD => self::UHDSlots,
|
||||
];
|
||||
|
||||
const MaxSlotCount = [TorrentSlotType::Quality => 2];
|
||||
const MaxSlotCount = [self::TorrentSlotTypeQuality => 2];
|
||||
|
||||
public static function get_slot_resolution($Resolution) {
|
||||
global $StandardDefinition, $UltraDefinition;
|
||||
if (in_array($Resolution, $StandardDefinition)) {
|
||||
return TorrentSlotResolution::SD;
|
||||
return self::TorrentSlotResolutionSD;
|
||||
} else if ($Resolution == '720p') {
|
||||
return TorrentSlotResolution::HD720P;
|
||||
return self::TorrentSlotResolutionHD720P;
|
||||
} else if (in_array($Resolution, ['1080i', '1080p'])) {
|
||||
return TorrentSlotResolution::HD1080P;
|
||||
return self::TorrentSlotResolutionHD1080P;
|
||||
} else if (in_array($Resolution, $UltraDefinition)) {
|
||||
return TorrentSlotResolution::UHD;
|
||||
return self::TorrentSlotResolutionUHD;
|
||||
} else if (empty($Resolution)) {
|
||||
return TorrentSlotResolution::None;
|
||||
return self::TorrentSlotResolutionNone;
|
||||
}
|
||||
return TorrentSlotResolution::SD;
|
||||
return self::TorrentSlotResolutionSD;
|
||||
}
|
||||
|
||||
public static function get_resolution_slots($Resolution) {
|
||||
@@ -175,25 +171,25 @@ class TorrentSlot {
|
||||
$UHDSlotTorrents = [];
|
||||
foreach ($Torrents as $Torrent) {
|
||||
$Resolution = self::get_slot_resolution($Torrent['Resolution']);
|
||||
if ($Resolution == TorrentSlotResolution::SD) {
|
||||
if ($Resolution == self::TorrentSlotResolutionSD) {
|
||||
if (isset($SDSlotTorrents[$Torrent['Slot']])) {
|
||||
$SDSlotTorrents[$Torrent['Slot']]++;
|
||||
} else {
|
||||
$SDSlotTorrents[$Torrent['Slot']] = 1;
|
||||
}
|
||||
} else if (in_array($Resolution, [TorrentSlotResolution::HD720P])) {
|
||||
} else if (in_array($Resolution, [self::TorrentSlotResolutionHD720P])) {
|
||||
if (isset($HD720PSlotTorrents[$Torrent['Slot']])) {
|
||||
$HD720PSlotTorrents[$Torrent['Slot']]++;
|
||||
} else {
|
||||
$HD720PSlotTorrents[$Torrent['Slot']] = 1;
|
||||
}
|
||||
} else if (in_array($Resolution, [TorrentSlotResolution::HD1080P])) {
|
||||
} else if (in_array($Resolution, [self::TorrentSlotResolutionHD1080P])) {
|
||||
if (isset($HD1080PSlotTorrents[$Torrent['Slot']])) {
|
||||
$HD1080PSlotTorrents[$Torrent['Slot']]++;
|
||||
} else {
|
||||
$HD1080PSlotTorrents[$Torrent['Slot']] = 1;
|
||||
}
|
||||
} else if ($Resolution == TorrentSlotResolution::UHD) {
|
||||
} else if ($Resolution == self::TorrentSlotResolutionUHD) {
|
||||
if (isset($UHDSlotTorrents[$Torrent['Slot']])) {
|
||||
$UHDSlotTorrents[$Torrent['Slot']]++;
|
||||
} else {
|
||||
@@ -203,12 +199,12 @@ class TorrentSlot {
|
||||
}
|
||||
list($HD720PEncodeStatus, $HD720PEncodeMissSlots) = self::check_slot_status($HD720PSlotTorrents, self::HD720PEncodeSlots);
|
||||
list($HD1080PEncodeStatus, $HD10800PEncodeMissSlots) = self::check_slot_status($HD1080PSlotTorrents, self::HD1080PEncodeSlots);
|
||||
$HDEncodeStatus = TorrentSlotGroupStatus::Free;
|
||||
if ($HD720PEncodeStatus == TorrentSlotGroupStatus::Full && $HD1080PEncodeStatus == TorrentSlotGroupStatus::Full) {
|
||||
$HDEncodeStatus = TorrentSlotGroupStatus::Full;
|
||||
$HDEncodeStatus = self::TorrentSlotStatusFree;
|
||||
if ($HD720PEncodeStatus == self::TorrentSlotStatusFull && $HD1080PEncodeStatus == self::TorrentSlotStatusFull) {
|
||||
$HDEncodeStatus = self::TorrentSlotStatusFull;
|
||||
}
|
||||
if ($HD720PEncodeStatus == TorrentSlotGroupStatus::Empty && $HD1080PEncodeStatus == TorrentSlotGroupStatus::Empty) {
|
||||
$HDEncodeStatus = TorrentSlotGroupStatus::Empty;
|
||||
if ($HD720PEncodeStatus == self::TorrentSlotStatusEmpty && $HD1080PEncodeStatus == self::TorrentSlotStatusEmpty) {
|
||||
$HDEncodeStatus = self::TorrentSlotStatusEmpty;
|
||||
}
|
||||
$HDEncodeMissSlots = $HD720PEncodeMissSlots;
|
||||
foreach ($HD10800PEncodeMissSlots as $MissSlot) {
|
||||
@@ -219,12 +215,12 @@ class TorrentSlot {
|
||||
|
||||
list($HD720PUntouchedStatus, $HD720PUntouchedMissSlots) = self::check_slot_status($HD720PSlotTorrents, self::HD720PUntouchedSlots);
|
||||
list($HD1080PUntouchedStatus, $HD1080PUntouchedMissSlots) = self::check_slot_status($HD1080PSlotTorrents, self::HD1080PUntouchedSlots);
|
||||
$HDUntouchedStatus = TorrentSlotGroupStatus::Free;
|
||||
if ($HD720PUntouchedStatus == TorrentSlotGroupStatus::Full && $HD1080PUntouchedStatus == TorrentSlotGroupStatus::Full) {
|
||||
$HDUntouchedStatus = TorrentSlotGroupStatus::Full;
|
||||
$HDUntouchedStatus = self::TorrentSlotStatusFree;
|
||||
if ($HD720PUntouchedStatus == self::TorrentSlotStatusFull && $HD1080PUntouchedStatus == self::TorrentSlotStatusFull) {
|
||||
$HDUntouchedStatus = self::TorrentSlotStatusFull;
|
||||
}
|
||||
if ($HD720PEncodeStatus == TorrentSlotGroupStatus::Empty && $HD1080PUntouchedStatus == TorrentSlotGroupStatus::Empty) {
|
||||
$HDUntouchedStatus = TorrentSlotGroupStatus::Empty;
|
||||
if ($HD720PEncodeStatus == self::TorrentSlotStatusEmpty && $HD1080PUntouchedStatus == self::TorrentSlotStatusEmpty) {
|
||||
$HDUntouchedStatus = self::TorrentSlotStatusEmpty;
|
||||
}
|
||||
$HDUntouchedMissSlots = $HD720PUntouchedMissSlots;
|
||||
foreach ($HD1080PUntouchedMissSlots as $MissSlot) {
|
||||
@@ -234,12 +230,12 @@ class TorrentSlot {
|
||||
}
|
||||
|
||||
return [
|
||||
TorrentSlotGroup::SDEncode => self::check_slot_status($SDSlotTorrents, self::SDEncodeSlots),
|
||||
TorrentSlotGroup::SDUntouched => self::check_slot_status($SDSlotTorrents, self::SDUntouchedSlots),
|
||||
TorrentSlotGroup::HDEncode => [$HDEncodeStatus, $HDEncodeMissSlots],
|
||||
TorrentSlotGroup::HDUntouched => [$HDUntouchedStatus, $HDUntouchedMissSlots],
|
||||
TorrentSlotGroup::UHDEncode => self::check_slot_status($UHDSlotTorrents, self::UHDEncodeSlots),
|
||||
TorrentSlotGroup::UHDUntouched => self::check_slot_status($UHDSlotTorrents, self::UHDUntouchedSlots),
|
||||
self::TorrentSlotGroupSDEncode => self::check_slot_status($SDSlotTorrents, self::SDEncodeSlots),
|
||||
self::TorrentSlotGroupSDUntouched => self::check_slot_status($SDSlotTorrents, self::SDUntouchedSlots),
|
||||
self::TorrentSlotGroupHDEncode => [$HDEncodeStatus, $HDEncodeMissSlots],
|
||||
self::TorrentSlotGroupHDUntouched => [$HDUntouchedStatus, $HDUntouchedMissSlots],
|
||||
self::TorrentSlotGroupUHDEncode => self::check_slot_status($UHDSlotTorrents, self::UHDEncodeSlots),
|
||||
self::TorrentSlotGroupUHDUntouched => self::check_slot_status($UHDSlotTorrents, self::UHDUntouchedSlots),
|
||||
];
|
||||
}
|
||||
private static function check_slot_status($SlotTorrents, $SlotGroup) {
|
||||
@@ -261,12 +257,12 @@ class TorrentSlot {
|
||||
}
|
||||
}
|
||||
if ($allempty) {
|
||||
return [TorrentSlotGroupStatus::Empty, $MissSlots];
|
||||
return [self::TorrentSlotStatusEmpty, $MissSlots];
|
||||
}
|
||||
if (!$allfull) {
|
||||
return [TorrentSlotGroupStatus::Free, $MissSlots];
|
||||
return [self::TorrentSlotStatusFree, $MissSlots];
|
||||
}
|
||||
return [TorrentSlotGroupStatus::Full, $MissSlots];
|
||||
return [self::TorrentSlotStatusFull, $MissSlots];
|
||||
}
|
||||
|
||||
public static function convert_slot_torrents($Torrents) {
|
||||
@@ -289,16 +285,16 @@ class TorrentSlot {
|
||||
continue;
|
||||
}
|
||||
switch (self::get_slot_resolution($Torrent['Resolution'])) {
|
||||
case TorrentSlotResolution::SD:
|
||||
case self::TorrentSlotResolutionSD:
|
||||
$SDTorrents[$Slot][] = $Torrent;
|
||||
break;
|
||||
case TorrentSlotResolution::HD720P:
|
||||
case self::TorrentSlotResolutionHD720P:
|
||||
$HD720PTorrents[$Slot][] = $Torrent;
|
||||
break;
|
||||
case TorrentSlotResolution::HD1080P:
|
||||
case self::TorrentSlotResolutionHD1080P:
|
||||
$HD1080PTorrents[$Slot][] = $Torrent;
|
||||
break;
|
||||
case TorrentSlotResolution::UHD:
|
||||
case self::TorrentSlotResolutionUHD:
|
||||
$UHDTorrents[$Slot][] = $Torrent;
|
||||
break;
|
||||
}
|
||||
@@ -310,13 +306,13 @@ class TorrentSlot {
|
||||
|
||||
$HD720TS = self::filter_slot_torrent(self::HD720PSlots, $HD720PTorrents, '720p');
|
||||
foreach ($HD720TS[0] as $T) {
|
||||
if (!isset($T['Missing']) && in_array($T['Slot'], [TorrentSlotType::ChineseQuality, TorrentSlotType::EnglishQuality])) {
|
||||
if (!isset($T['Missing']) && in_array($T['Slot'], [self::TorrentSlotTypeChineseQuality, self::TorrentSlotTypeEnglishQuality])) {
|
||||
$Has720PQualitySlot = true;
|
||||
}
|
||||
}
|
||||
$TS = self::filter_slot_torrent(self::SDSlots, $SDTorrents, 'NTSC');
|
||||
foreach ($TS[0] as $T) {
|
||||
if ($T['Slot'] == TorrentSlotType::Quality && $Has720PQualitySlot && !isset($T['ExtraSlot'])) {
|
||||
if ($T['Slot'] == self::TorrentSlotTypeQuality && $Has720PQualitySlot && !isset($T['ExtraSlot'])) {
|
||||
$T['Dupe'] = true;
|
||||
}
|
||||
$Ret[] = $T;
|
||||
@@ -324,18 +320,18 @@ class TorrentSlot {
|
||||
foreach ($HD720TS[0] as $T) {
|
||||
$Ret[] = $T;
|
||||
}
|
||||
$Missing[TorrentSlotResolution::SD] = $TS[1];
|
||||
$Missing[TorrentSlotResolution::HD720P] = $HD720TS[1];
|
||||
$Missing[self::TorrentSlotResolutionSD] = $TS[1];
|
||||
$Missing[self::TorrentSlotResolutionHD720P] = $HD720TS[1];
|
||||
$TS = self::filter_slot_torrent(self::HD1080PSlots, $HD1080PTorrents, '1080p');
|
||||
foreach ($TS[0] as $T) {
|
||||
$Ret[] = $T;
|
||||
}
|
||||
$Missing[TorrentSlotResolution::HD1080P] = $TS[1];
|
||||
$Missing[self::TorrentSlotResolutionHD1080P] = $TS[1];
|
||||
$TS = self::filter_slot_torrent(self::UHDSlots, $UHDTorrents, '2160p');
|
||||
foreach ($TS[0] as $T) {
|
||||
$Ret[] = $T;
|
||||
}
|
||||
$Missing[TorrentSlotResolution::UHD] = $TS[1];
|
||||
$Missing[self::TorrentSlotResolutionUHD] = $TS[1];
|
||||
return [$Ret, $Missing];
|
||||
}
|
||||
private static function filter_slot_torrent($Slots, $Torrents, $Resolution) {
|
||||
@@ -356,7 +352,7 @@ class TorrentSlot {
|
||||
}
|
||||
}
|
||||
} else if ($count <= 0) {
|
||||
if ($Slot == TorrentSlotType::None) {
|
||||
if ($Slot == self::TorrentSlotTypeNone) {
|
||||
continue;
|
||||
}
|
||||
$MissingSlot[] = $Slot;
|
||||
@@ -375,7 +371,7 @@ class TorrentSlot {
|
||||
$Processing = Torrents::processing_value($Torrent);
|
||||
$Resolution = $Torrent['Resolution'];
|
||||
if (in_array(Torrents::resolution_level($Torrent), [SUBGROUP_3D, SUBGROUP_Extra])) {
|
||||
return TorrentSlotType::None;
|
||||
return self::TorrentSlotTypeNone;
|
||||
}
|
||||
$Codec = $Torrent['Codec'];
|
||||
$SpecialSub = isset($Torrent['SpecialSub']) && !empty($Torrent['SpecialSub']);
|
||||
@@ -388,95 +384,95 @@ class TorrentSlot {
|
||||
}
|
||||
}
|
||||
switch (self::get_slot_resolution($Resolution)) {
|
||||
case TorrentSlotResolution::SD:
|
||||
case self::TorrentSlotResolutionSD:
|
||||
if ($Processing == 'Encode') {
|
||||
if ($ChineseSubtitle) {
|
||||
return TorrentSlotType::ChineseQuality;
|
||||
return self::TorrentSlotTypeChineseQuality;
|
||||
}
|
||||
return TorrentSlotType::Quality;
|
||||
return self::TorrentSlotTypeQuality;
|
||||
}
|
||||
if ($Processing == 'Untouched') {
|
||||
if ($Resolution == 'NTSC') {
|
||||
return TorrentSlotType::NTSCUntouched;
|
||||
return self::TorrentSlotTypeNTSCUntouched;
|
||||
} else if ($Resolution = 'PAL') {
|
||||
return TorrentSlotType::PALUntouched;
|
||||
return self::TorrentSlotTypePALUntouched;
|
||||
}
|
||||
}
|
||||
return TorrentSlotType::None;
|
||||
case TorrentSlotResolution::HD720P:
|
||||
return self::TorrentSlotTypeNone;
|
||||
case self::TorrentSlotResolutionHD720P:
|
||||
if ($Processing == 'Untouched') {
|
||||
return TorrentSlotType::Untouched;
|
||||
return self::TorrentSlotTypeUntouched;
|
||||
} else if ($Processing == 'Remux') {
|
||||
return TorrentSlotType::Remux;
|
||||
return self::TorrentSlotTypeRemux;
|
||||
} else {
|
||||
if ($SpecialSub || $ChineseDubbed) {
|
||||
return TorrentSlotType::Feature;
|
||||
return self::TorrentSlotTypeFeature;
|
||||
}
|
||||
if ($ChineseSubtitle) {
|
||||
return TorrentSlotType::ChineseQuality;
|
||||
return self::TorrentSlotTypeChineseQuality;
|
||||
} else {
|
||||
return TorrentSlotType::EnglishQuality;
|
||||
return self::TorrentSlotTypeEnglishQuality;
|
||||
}
|
||||
}
|
||||
return TorrentSlotType::None;
|
||||
case TorrentSlotResolution::HD1080P:
|
||||
return self::TorrentSlotTypeNone;
|
||||
case self::TorrentSlotResolutionHD1080P:
|
||||
if ($Processing == 'Untouched') {
|
||||
return TorrentSlotType::Untouched;
|
||||
return self::TorrentSlotTypeUntouched;
|
||||
} else if ($Processing == 'Remux') {
|
||||
return TorrentSlotType::Remux;
|
||||
return self::TorrentSlotTypeRemux;
|
||||
} else if ($Processing == 'DIY') {
|
||||
return TorrentSlotType::DIY;
|
||||
return self::TorrentSlotTypeDIY;
|
||||
} else {
|
||||
if ($Codec == 'x265' || $Codec == 'H.265') {
|
||||
if ($ChineseSubtitle) {
|
||||
return TorrentSlotType::X265ChineseQuality;
|
||||
return self::TorrentSlotTypeX265ChineseQuality;
|
||||
} else {
|
||||
return TorrentSlotType::X265EnglishQuality;
|
||||
return self::TorrentSlotTypeX265EnglishQuality;
|
||||
}
|
||||
} else if ($Codec == 'x264' || $Codec == 'H.264') {
|
||||
if ($SpecialSub || $ChineseDubbed) {
|
||||
return TorrentSlotType::Feature;
|
||||
return self::TorrentSlotTypeFeature;
|
||||
}
|
||||
if ($ChineseSubtitle) {
|
||||
return TorrentSlotType::ChineseQuality;
|
||||
return self::TorrentSlotTypeChineseQuality;
|
||||
} else {
|
||||
return TorrentSlotType::EnglishQuality;
|
||||
return self::TorrentSlotTypeEnglishQuality;
|
||||
}
|
||||
}
|
||||
}
|
||||
return TorrentSlotType::None;
|
||||
case TorrentSlotResolution::UHD:
|
||||
return self::TorrentSlotTypeNone;
|
||||
case self::TorrentSlotResolutionUHD:
|
||||
if ($Processing == 'Untouched') {
|
||||
return TorrentSlotType::Untouched;
|
||||
return self::TorrentSlotTypeUntouched;
|
||||
} else if ($Processing == 'Remux') {
|
||||
return TorrentSlotType::Remux;
|
||||
return self::TorrentSlotTypeRemux;
|
||||
} else if ($Processing == 'DIY') {
|
||||
return TorrentSlotType::DIY;
|
||||
return self::TorrentSlotTypeDIY;
|
||||
} else {
|
||||
if ($SpecialSub || $ChineseDubbed) {
|
||||
return TorrentSlotType::Feature;
|
||||
return self::TorrentSlotTypeFeature;
|
||||
}
|
||||
if ($ChineseSubtitle) {
|
||||
return TorrentSlotType::ChineseQuality;
|
||||
return self::TorrentSlotTypeChineseQuality;
|
||||
} else {
|
||||
return TorrentSlotType::EnglishQuality;
|
||||
return self::TorrentSlotTypeEnglishQuality;
|
||||
}
|
||||
}
|
||||
return TorrentSlotType::None;
|
||||
return self::TorrentSlotTypeNone;
|
||||
}
|
||||
return TorrentSlotType::None;
|
||||
return self::TorrentSlotTypeNone;
|
||||
}
|
||||
|
||||
|
||||
public static function empty_slot_title($SlotResolution) {
|
||||
switch ($SlotResolution) {
|
||||
case TorrentSlotResolution::SD:
|
||||
case self::TorrentSlotResolutionSD:
|
||||
return "empty_slots";
|
||||
case TorrentSlotResolution::HD720P:
|
||||
case self::TorrentSlotResolutionHD720P:
|
||||
return "720p_empty_slots";
|
||||
case TorrentSlotResolution::HD1080P:
|
||||
case self::TorrentSlotResolutionHD1080P:
|
||||
return "1080p_empty_slots";
|
||||
case TorrentSlotResolution::UHD:
|
||||
case self::TorrentSlotResolutionUHD:
|
||||
return "empty_slots";
|
||||
}
|
||||
}
|
||||
@@ -485,40 +481,40 @@ class TorrentSlot {
|
||||
public static function empty_slot_tooltip($Slot) {
|
||||
$str = '';
|
||||
switch ($Slot) {
|
||||
case TorrentSlotType::Quality:
|
||||
case self::TorrentSlotTypeQuality:
|
||||
$str = 'quality_slot_requirements';
|
||||
break;
|
||||
case TorrentSlotType::NTSCUntouched:
|
||||
case self::TorrentSlotTypeNTSCUntouched:
|
||||
$str = 'untouched_slot_requirements';
|
||||
break;
|
||||
case TorrentSlotType::PALUntouched:
|
||||
case self::TorrentSlotTypePALUntouched:
|
||||
$str = 'untouched_slot_requirements';
|
||||
break;
|
||||
case TorrentSlotType::X265ChineseQuality:
|
||||
case self::TorrentSlotTypeX265ChineseQuality:
|
||||
$str = 'cn_quality_slot_requirements';
|
||||
break;
|
||||
case TorrentSlotType::X265EnglishQuality:
|
||||
case self::TorrentSlotTypeX265EnglishQuality:
|
||||
$str = 'en_quality_slot_requirements';
|
||||
break;
|
||||
case TorrentSlotType::ChineseQuality:
|
||||
case self::TorrentSlotTypeChineseQuality:
|
||||
$str = 'cn_quality_slot_requirements';
|
||||
break;
|
||||
case TorrentSlotType::EnglishQuality:
|
||||
case self::TorrentSlotTypeEnglishQuality:
|
||||
$str = 'en_quality_slot_requirements';
|
||||
break;
|
||||
case TorrentSlotType::Retention:
|
||||
case self::TorrentSlotTypeRetention:
|
||||
$str = 'retention_slot_requirements';
|
||||
break;
|
||||
case TorrentSlotType::Feature:
|
||||
case self::TorrentSlotTypeFeature:
|
||||
$str = 'feature_slot_requirements';
|
||||
break;
|
||||
case TorrentSlotType::Remux:
|
||||
case self::TorrentSlotTypeRemux:
|
||||
$str = 'remux_slot_requirements';
|
||||
break;
|
||||
case TorrentSlotType::Untouched:
|
||||
case self::TorrentSlotTypeUntouched:
|
||||
$str = 'untouched_slot_requirements';
|
||||
break;
|
||||
case TorrentSlotType::DIY:
|
||||
case self::TorrentSlotTypeDIY:
|
||||
$str = 'diy_slot_requirements';
|
||||
break;
|
||||
default:
|
||||
@@ -529,29 +525,29 @@ class TorrentSlot {
|
||||
|
||||
public static function slot_option_lang($Slot) {
|
||||
switch ($Slot) {
|
||||
case TorrentSlotType::Quality:
|
||||
case self::TorrentSlotTypeQuality:
|
||||
return 'quality_slot';
|
||||
case TorrentSlotType::NTSCUntouched:
|
||||
case self::TorrentSlotTypeNTSCUntouched:
|
||||
return 'untouched_slot_ntsc';
|
||||
case TorrentSlotType::PALUntouched:
|
||||
case self::TorrentSlotTypePALUntouched:
|
||||
return 'untouched_slot_pal';
|
||||
case TorrentSlotType::X265ChineseQuality:
|
||||
case self::TorrentSlotTypeX265ChineseQuality:
|
||||
return 'cn_quality_slot_x265';
|
||||
case TorrentSlotType::X265EnglishQuality:
|
||||
case self::TorrentSlotTypeX265EnglishQuality:
|
||||
return 'en_quality_slot_x265';
|
||||
case TorrentSlotType::ChineseQuality:
|
||||
case self::TorrentSlotTypeChineseQuality:
|
||||
return 'cn_quality_slot';
|
||||
case TorrentSlotType::EnglishQuality:
|
||||
case self::TorrentSlotTypeEnglishQuality:
|
||||
return 'en_quality_slot';
|
||||
case TorrentSlotType::Retention:
|
||||
case self::TorrentSlotTypeRetention:
|
||||
return 'retention_slot';
|
||||
case TorrentSlotType::Feature:
|
||||
case self::TorrentSlotTypeFeature:
|
||||
return 'feature_slot';
|
||||
case TorrentSlotType::Remux:
|
||||
case self::TorrentSlotTypeRemux:
|
||||
return 'remux_slot';
|
||||
case TorrentSlotType::Untouched:
|
||||
case self::TorrentSlotTypeUntouched:
|
||||
return 'untouched_slot';
|
||||
case TorrentSlotType::DIY:
|
||||
case self::TorrentSlotTypeDIY:
|
||||
return 'diy_slot';
|
||||
}
|
||||
return '';
|
||||
@@ -578,27 +574,27 @@ class TorrentSlot {
|
||||
|
||||
public static function slot_name($Slot) {
|
||||
switch ($Slot) {
|
||||
case TorrentSlotType::None:
|
||||
case self::TorrentSlotTypeNone:
|
||||
return "empty";
|
||||
case TorrentSlotType::ChineseQuality:
|
||||
case TorrentSlotType::X265ChineseQuality:
|
||||
case self::TorrentSlotTypeChineseQuality:
|
||||
case self::TorrentSlotTypeX265ChineseQuality:
|
||||
return 'cn_quality';
|
||||
case TorrentSlotType::Quality:
|
||||
case self::TorrentSlotTypeQuality:
|
||||
return 'quality';
|
||||
case TorrentSlotType::EnglishQuality:
|
||||
case TorrentSlotType::X265EnglishQuality:
|
||||
case self::TorrentSlotTypeEnglishQuality:
|
||||
case self::TorrentSlotTypeX265EnglishQuality:
|
||||
return 'en_quality';
|
||||
case TorrentSlotType::Retention:
|
||||
case self::TorrentSlotTypeRetention:
|
||||
return 'retention';
|
||||
case TorrentSlotType::Feature:
|
||||
case self::TorrentSlotTypeFeature:
|
||||
return 'feature';
|
||||
case TorrentSlotType::DIY:
|
||||
case self::TorrentSlotTypeDIY:
|
||||
return 'diy';
|
||||
case TorrentSlotType::Remux:
|
||||
case self::TorrentSlotTypeRemux:
|
||||
return 'remux';
|
||||
case TorrentSlotType::Untouched:
|
||||
case TorrentSlotType::NTSCUntouched:
|
||||
case TorrentSlotType::PALUntouched:
|
||||
case self::TorrentSlotTypeUntouched:
|
||||
case self::TorrentSlotTypeNTSCUntouched:
|
||||
case self::TorrentSlotTypePALUntouched:
|
||||
return 'untouched';
|
||||
}
|
||||
return '';
|
||||
|
||||
+1
-1
@@ -48,7 +48,7 @@ class Upload extends Base {
|
||||
$LogName = Torrents::torrent_name($this->properties, false);
|
||||
$TotalSize = $this->properties['Size'];
|
||||
Misc::write_log("Torrent $TorrentID ($LogName) was uploaded by " . $this->user['Username'] . ($this->useAPI ? ' using the api' : ''));
|
||||
Torrents::write_group_log($GroupID, $TorrentID, $this->user['ID'], "uploaded (" . number_format($TotalSize / (1024 * 1024 * 1024), 2) . ' GiB) " . "', 0);
|
||||
Torrents::write_group_log($GroupID, $TorrentID, $this->user['ID'], "uploaded (" . number_format($TotalSize / (1024 * 1024 * 1024), 2) . ' GiB)', 0);
|
||||
|
||||
$this->clearCache();
|
||||
Tracker::update_tracker('add_torrent', array('id' => $TorrentID, 'info_hash' => rawurlencode($this->properties['InfoHash']), 'freetorrent' => $this->properties['FreeLeech']));
|
||||
|
||||
+37
-5
@@ -197,27 +197,59 @@ class Time {
|
||||
$return = '';
|
||||
|
||||
if ($years > 0 && $levels > 0) {
|
||||
$return .= $years . 'y';
|
||||
if ($years > 1) {
|
||||
$return .= "$years " . t('server.time.ys');
|
||||
} else {
|
||||
$return .= "$years " . t('server.time.y');
|
||||
}
|
||||
$levels--;
|
||||
}
|
||||
|
||||
if ($months > 0 && $levels > 0) {
|
||||
$return .= $months . 'mo';
|
||||
if ($return != '') {
|
||||
$return .= ', ';
|
||||
}
|
||||
if ($months > 1) {
|
||||
$return .= "$months " . t('server.time.ms');
|
||||
} else {
|
||||
$return .= "$months " . t('server.time.m');
|
||||
}
|
||||
$levels--;
|
||||
}
|
||||
|
||||
if ($weeks > 0 && $levels > 0) {
|
||||
$return .= $weeks . 'w';
|
||||
if ($return != '') {
|
||||
$return .= ', ';
|
||||
}
|
||||
if ($weeks > 1) {
|
||||
$return .= "$weeks " . t('server.time.ws');
|
||||
} else {
|
||||
$return .= "$weeks " . t('server.time.w');
|
||||
}
|
||||
$levels--;
|
||||
}
|
||||
|
||||
if ($days > 0 && $levels > 0) {
|
||||
$return .= $days . 'd';
|
||||
if ($return != '') {
|
||||
$return .= ', ';
|
||||
}
|
||||
if ($days > 1) {
|
||||
$return .= "$days " . t('server.time.ds');
|
||||
} else {
|
||||
$return .= "$days " . t('server.time.d');
|
||||
}
|
||||
$levels--;
|
||||
}
|
||||
|
||||
if ($hours > 0 && $levels > 0) {
|
||||
$return .= $hours . 'h';
|
||||
if ($return != '') {
|
||||
$return .= ', ';
|
||||
}
|
||||
if ($hours > 1) {
|
||||
$return .= "$hours " . t('server.time.hs');
|
||||
} else {
|
||||
$return .= "$hours " . t('server.time.h');
|
||||
}
|
||||
}
|
||||
|
||||
if ($span) {
|
||||
|
||||
@@ -23,28 +23,8 @@
|
||||
|
||||
define('BORIS', 1);
|
||||
|
||||
require(__DIR__ . '/classes/classloader.php');
|
||||
|
||||
require_once(__DIR__ . '/classes/config.php');
|
||||
require_once(__DIR__ . '/classes/const.php');
|
||||
require_once(__DIR__ . '/classes/cache.class.php');
|
||||
require_once(__DIR__ . '/classes/mysql.class.php');
|
||||
require_once(__DIR__ . '/classes/debug.class.php');
|
||||
require_once(__DIR__ . '/vendor/autoload.php');
|
||||
require_once(__DIR__ . '/classes/paranoia.class.php');
|
||||
require_once(__DIR__ . '/classes/time.class.php');
|
||||
require_once(__DIR__ . '/classes/util.php');
|
||||
require(__DIR__ . 'classes/includes.php');
|
||||
require_once(__DIR__ . '/vendor/d11wtq/boris/lib/autoload.php');
|
||||
|
||||
$Cache = new CACHE($CONFIG['MemcachedServers']);
|
||||
$DB = new DB_MYSQL;
|
||||
$Debug = new DEBUG;
|
||||
$Debug->handle_errors();
|
||||
|
||||
G::$Cache = &$Cache;
|
||||
G::$DB = &$DB;
|
||||
G::$Debug = &$Debug;
|
||||
|
||||
$b = new \Boris\Boris(CONFIG['SITE_NAME'] . '> ');
|
||||
$preload = [
|
||||
'cache' => $Cache,
|
||||
|
||||
@@ -1,131 +0,0 @@
|
||||
<?
|
||||
|
||||
use Gazelle\Util\Crypto;
|
||||
|
||||
require 'config.php'; //The config contains all site wide configuration information as well as memcached rules
|
||||
require 'const.php';
|
||||
require(CONFIG['SERVER_ROOT'] . '/classes/debug.class.php');
|
||||
require(CONFIG['SERVER_ROOT'] . '/classes/cache.class.php'); //Require the caching class
|
||||
|
||||
$Debug = new DEBUG;
|
||||
$Cache = new CACHE($CONFIG['MemcachedServers']); //Load the caching class
|
||||
|
||||
$SSL = $_SERVER['SERVER_PORT'] === '443';
|
||||
|
||||
if (isset($_COOKIE['session'])) {
|
||||
$LoginCookie = Crypto::decrypt($_COOKIE['session'], CONFIG['ENCKEY']);
|
||||
}
|
||||
if (isset($LoginCookie)) {
|
||||
list($SessionID, $UserID) = explode("|~|", Crypto::decrypt($LoginCookie, CONFIG['ENCKEY']));
|
||||
|
||||
if (!$UserID || !$SessionID) {
|
||||
die('Not logged in!');
|
||||
}
|
||||
|
||||
if (!$Enabled = $Cache->get_value("enabled_$UserID")) {
|
||||
require(CONFIG['SERVER_ROOT'] . '/classes/mysql.class.php'); //Require the database wrapper
|
||||
$DB = new DB_MYSQL; //Load the database wrapper
|
||||
$DB->query("
|
||||
SELECT Enabled
|
||||
FROM users_main
|
||||
WHERE ID = '$UserID'");
|
||||
list($Enabled) = $DB->next_record();
|
||||
$Cache->cache_value("enabled_$UserID", $Enabled, 0);
|
||||
}
|
||||
} else {
|
||||
die('Not logged in!');
|
||||
}
|
||||
|
||||
function error($Error) {
|
||||
die($Error);
|
||||
}
|
||||
|
||||
function is_number($Str) {
|
||||
if ($Str < 0) {
|
||||
return false;
|
||||
}
|
||||
// We're converting input to a int, then string and comparing to original
|
||||
return ($Str == strval(intval($Str)) ? true : false);
|
||||
}
|
||||
|
||||
function display_str($Str) {
|
||||
if ($Str != '') {
|
||||
$Str = make_utf8($Str);
|
||||
$Str = mb_convert_encoding($Str, 'HTML-ENTITIES', 'UTF-8');
|
||||
$Str = preg_replace("/&(?![A-Za-z]{0,4}\w{2,3};|#[0-9]{2,5};)/m", '&', $Str);
|
||||
|
||||
$Replace = array(
|
||||
"'", '"', "<", ">",
|
||||
'€', '‚', 'ƒ', '„', '…', '†', '‡', 'ˆ', '‰', 'Š', '‹', 'Œ', 'Ž', '‘', '’', '“', '”', '•', '–', '—', '˜', '™', 'š', '›', 'œ', 'ž', 'Ÿ'
|
||||
);
|
||||
|
||||
$With = array(
|
||||
''', '"', '<', '>',
|
||||
'€', '‚', 'ƒ', '„', '…', '†', '‡', 'ˆ', '‰', 'Š', '‹', 'Œ', 'Ž', '‘', '’', '“', '”', '•', '–', '—', '˜', '™', 'š', '›', 'œ', 'ž', 'Ÿ'
|
||||
);
|
||||
|
||||
$Str = str_replace($Replace, $With, $Str);
|
||||
}
|
||||
return $Str;
|
||||
}
|
||||
|
||||
function make_utf8($Str) {
|
||||
if ($Str != '') {
|
||||
if (is_utf8($Str)) {
|
||||
$Encoding = 'UTF-8';
|
||||
}
|
||||
if (empty($Encoding)) {
|
||||
$Encoding = mb_detect_encoding($Str, 'UTF-8, ISO-8859-1');
|
||||
}
|
||||
if (empty($Encoding)) {
|
||||
$Encoding = 'ISO-8859-1';
|
||||
}
|
||||
if ($Encoding == 'UTF-8') {
|
||||
return $Str;
|
||||
} else {
|
||||
return @mb_convert_encoding($Str, 'UTF-8', $Encoding);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function is_utf8($Str) {
|
||||
return preg_match(
|
||||
'%^(?:
|
||||
[\x09\x0A\x0D\x20-\x7E] // ASCII
|
||||
| [\xC2-\xDF][\x80-\xBF] // non-overlong 2-byte
|
||||
| \xE0[\xA0-\xBF][\x80-\xBF] // excluding overlongs
|
||||
| [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} // straight 3-byte
|
||||
| \xED[\x80-\x9F][\x80-\xBF] // excluding surrogates
|
||||
| \xF0[\x90-\xBF][\x80-\xBF]{2} // planes 1-3
|
||||
| [\xF1-\xF3][\x80-\xBF]{3} // planes 4-15
|
||||
| \xF4[\x80-\x8F][\x80-\xBF]{2} // plane 16
|
||||
)*$%xs',
|
||||
$Str
|
||||
);
|
||||
}
|
||||
|
||||
function display_array($Array, $DontEscape = array()) {
|
||||
foreach ($Array as $Key => $Val) {
|
||||
if (!in_array($Key, $DontEscape)) {
|
||||
$Array[$Key] = display_str($Val);
|
||||
}
|
||||
}
|
||||
return $Array;
|
||||
}
|
||||
|
||||
function make_secret($Length = 32) {
|
||||
$NumBytes = (int) round($Length / 2);
|
||||
$Secret = bin2hex(openssl_random_pseudo_bytes($NumBytes));
|
||||
return substr($Secret, 0, $Length);
|
||||
}
|
||||
|
||||
// Send a message to an IRC bot listening on CONFIG['SOCKET_LISTEN_PORT']
|
||||
function send_irc($Raw) {
|
||||
if (CONFIG['DISABLE_IRC'] === true) {
|
||||
return;
|
||||
}
|
||||
$IRCSocket = fsockopen(CONFIG['SOCKET_LISTEN_ADDRESS'], CONFIG['SOCKET_LISTEN_PORT']);
|
||||
$Raw = str_replace(array("\n", "\r"), '', $Raw);
|
||||
fwrite($IRCSocket, $Raw);
|
||||
fclose($IRCSocket);
|
||||
}
|
||||
@@ -41,7 +41,7 @@ class ImageTools {
|
||||
'fastpic.ru',
|
||||
);
|
||||
|
||||
private static $Whitelist = ['kshare.club', 'pixhost.to', 'ptpimg.me', 'img.pterclub.com', 'yes.ilikeshots.club', 'imgbox.com'];
|
||||
private static $Whitelist = ['kshare.club', 'pixhost.to', 'ptpimg.me', 'img.pterclub.com', 'yes.ilikeshots.club', 'imgbox.com', 's3.pterclub.com'];
|
||||
|
||||
/**
|
||||
* Array of image hosts that provide thumbnailing
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
<?
|
||||
|
||||
require('config.php');
|
||||
|
||||
set_include_path(CONFIG['SERVER_ROOT']);
|
||||
require('classes/const.php');
|
||||
require('classes/classloader.php');
|
||||
require('classes/debug.class.php'); //Require the debug class
|
||||
require('classes/mysql.class.php'); //Require the database wrapper
|
||||
require('classes/cache.class.php'); //Require the caching class
|
||||
require('classes/time.class.php'); //Require the time class
|
||||
require('classes/lang.class.php'); //Require the lang class
|
||||
require('classes/regex.php');
|
||||
require('classes/util.php');
|
||||
require('vendor/autoload.php');
|
||||
|
||||
$DB = new DB_MYSQL;
|
||||
$Debug = new DEBUG;
|
||||
$Debug->handle_errors();
|
||||
$Cache = new CACHE($CONFIG['MemcachedServers']);
|
||||
|
||||
$Twig = new Twig\Environment(
|
||||
new Twig\Loader\FilesystemLoader([
|
||||
CONFIG['SERVER_ROOT'] . '/templates',
|
||||
CONFIG['SERVER_ROOT'] . '/src/locales',
|
||||
]),
|
||||
['debug' => CONFIG['DEBUG_MODE'], 'cache' => CONFIG['SERVER_ROOT'] . '/.cache/twig']
|
||||
);
|
||||
|
||||
ImageTools::init(CONFIG['IMAGE_PROVIDER']);
|
||||
|
||||
G::$Cache = &$Cache;
|
||||
G::$DB = &$DB;
|
||||
G::$Debug = &$Debug;
|
||||
G::$Twig = &$Twig;
|
||||
@@ -11,22 +11,19 @@
|
||||
/*------------------------------------------------------*/
|
||||
|
||||
/********************************************************/
|
||||
|
||||
require('config.php');
|
||||
require('const.php');
|
||||
|
||||
// Autoload classes.
|
||||
require(CONFIG['SERVER_ROOT'] . '/classes/classloader.php');
|
||||
|
||||
use Gazelle\Util\Crypto;
|
||||
use Gazelle\Manager\Donation;
|
||||
|
||||
|
||||
//Deal with dumbasses
|
||||
if (isset($_REQUEST['info_hash']) && isset($_REQUEST['peer_id'])) {
|
||||
die('d14:failure reason40:Invalid .torrent, try downloading again.e');
|
||||
}
|
||||
|
||||
|
||||
require(__DIR__ . '/includes.php');
|
||||
|
||||
require(CONFIG['SERVER_ROOT'] . '/classes/proxies.class.php');
|
||||
|
||||
// Get the user's actual IP address if they're proxied.
|
||||
@@ -59,42 +56,10 @@ if (!defined('PHP_WINDOWS_VERSION_MAJOR')) {
|
||||
|
||||
ob_start(); //Start a buffer, mainly in case there is a mysql error
|
||||
|
||||
set_include_path(CONFIG['SERVER_ROOT']);
|
||||
require('classes/paranoia.class.php'); //Require the paranoia check_paranoia function
|
||||
require('classes/vite.php');
|
||||
|
||||
require(CONFIG['SERVER_ROOT'] . '/classes/debug.class.php'); //Require the debug class
|
||||
require(CONFIG['SERVER_ROOT'] . '/classes/mysql.class.php'); //Require the database wrapper
|
||||
require(CONFIG['SERVER_ROOT'] . '/classes/cache.class.php'); //Require the caching class
|
||||
require(CONFIG['SERVER_ROOT'] . '/classes/time.class.php'); //Require the time class
|
||||
require(CONFIG['SERVER_ROOT'] . '/classes/lang.class.php'); //Require the time class
|
||||
require(CONFIG['SERVER_ROOT'] . '/classes/paranoia.class.php'); //Require the paranoia check_paranoia function
|
||||
require(CONFIG['SERVER_ROOT'] . '/classes/regex.php');
|
||||
require(CONFIG['SERVER_ROOT'] . '/classes/util.php');
|
||||
require(CONFIG['SERVER_ROOT'] . '/classes/vite.php');
|
||||
require(CONFIG['SERVER_ROOT'] . '/app/Torrent/TorrentSlot.php');
|
||||
|
||||
$Debug = new DEBUG;
|
||||
$Debug->handle_errors();
|
||||
$Debug->set_flag('Debug constructed');
|
||||
|
||||
$DB = new DB_MYSQL;
|
||||
|
||||
$Cache = new CACHE($CONFIG['MemcachedServers']);
|
||||
|
||||
$Twig = new Twig\Environment(
|
||||
new Twig\Loader\FilesystemLoader([
|
||||
CONFIG['SERVER_ROOT'] . '/templates',
|
||||
CONFIG['SERVER_ROOT'] . '/src/locales',
|
||||
]),
|
||||
['debug' => CONFIG['DEBUG_MODE'], 'cache' => CONFIG['SERVER_ROOT'] . '/.cache/twig']
|
||||
);
|
||||
|
||||
|
||||
ImageTools::init(CONFIG['IMAGE_PROVIDER']);
|
||||
|
||||
G::$Cache = &$Cache;
|
||||
G::$DB = &$DB;
|
||||
G::$Debug = &$Debug;
|
||||
G::$Twig = &$Twig;
|
||||
G::$Debug->set_flag('Debug constructed');
|
||||
|
||||
//Begin browser identification
|
||||
if (session_status() === PHP_SESSION_NONE) {
|
||||
|
||||
@@ -1682,22 +1682,3 @@ class Text {
|
||||
return str_replace(["<br />", "<br>"], "\n", $Str);
|
||||
}
|
||||
}
|
||||
/*
|
||||
|
||||
// Uncomment this part to test the class via command line:
|
||||
function display_str($Str) {
|
||||
return $Str;
|
||||
}
|
||||
function check_perms($Perm) {
|
||||
return true;
|
||||
}
|
||||
$Str = "hello
|
||||
[pre]http://anonym.to/?http://whatshirts.portmerch.com/
|
||||
====hi====
|
||||
===hi===
|
||||
==hi==[/pre]
|
||||
====hi====
|
||||
hi";
|
||||
echo Text::full_format($Str);
|
||||
echo "\n"
|
||||
*/
|
||||
|
||||
@@ -5,7 +5,6 @@ use Gazelle\Torrent\EditionInfo;
|
||||
use Gazelle\Torrent\Region;
|
||||
use Gazelle\Torrent\Language;
|
||||
use Gazelle\Torrent\TorrentSlot;
|
||||
use Gazelle\Torrent\TorrentSlotType;
|
||||
use Illuminate\Support\Facades\File;
|
||||
use Gazelle\Util\Time;
|
||||
|
||||
@@ -1187,7 +1186,7 @@ WHERE ud.TorrentID=? AND ui.NotifyOnDeleteDownloaded='1' AND ud.UserID NOT IN ({
|
||||
if ($Item == 'Processing' && !empty($Processing)) {
|
||||
if ($Style) {
|
||||
if ($Option['SettingTorrentTitle']['Alternative']) {
|
||||
if ($Data['Slot'] != TorrentSlotType::None) {
|
||||
if ($Data['Slot'] != TorrentSlot::TorrentSlotTypeNone) {
|
||||
$Slot = TorrentSlot::slot_name($Data['Slot']);
|
||||
$Processing = icon("Torrent/slot_${Slot}");
|
||||
}
|
||||
|
||||
@@ -168,7 +168,7 @@ class Users {
|
||||
'Class' => 0
|
||||
);
|
||||
} else {
|
||||
$UserInfo = G::$DB->next_record(MYSQLI_ASSOC, array('Paranoia', 'Title'));
|
||||
$UserInfo = G::$DB->next_record(MYSQLI_ASSOC, false);
|
||||
$UserInfo['CatchupTime'] = strtotime($UserInfo['CatchupTime']);
|
||||
$UserInfo['Paranoia'] = unserialize_array($UserInfo['Paranoia']);
|
||||
if ($UserInfo['Paranoia'] === false) {
|
||||
|
||||
+2
-26
@@ -66,7 +66,6 @@ function is_bool_value($Value) {
|
||||
|
||||
/**
|
||||
* HTML-escape a string for output.
|
||||
* This is preferable to htmlspecialchars because it doesn't screw up upon a double escape.
|
||||
*
|
||||
* @param string $Str
|
||||
* @return string escaped string.
|
||||
@@ -75,30 +74,7 @@ function display_str($Str) {
|
||||
if ($Str === null || $Str === false || is_array($Str)) {
|
||||
return '';
|
||||
}
|
||||
if ($Str != '' && !is_number($Str)) {
|
||||
$Str = Format::make_utf8($Str);
|
||||
$Str = mb_convert_encoding($Str, 'HTML-ENTITIES', 'UTF-8');
|
||||
$Str = preg_replace("/&(?![A-Za-z]{0,4}\w{2,3};|#[0-9]{2,6};)/m", '&', $Str);
|
||||
|
||||
$Replace = array(
|
||||
"'", '"', "<", ">",
|
||||
'€', '‚', 'ƒ', '„', '…', '†', '‡', 'ˆ',
|
||||
'‰', 'Š', '‹', 'Œ', 'Ž', '‘', '’', '“',
|
||||
'”', '•', '–', '—', '˜', '™', 'š', '›',
|
||||
'œ', 'ž', 'Ÿ'
|
||||
);
|
||||
|
||||
$With = array(
|
||||
''', '"', '<', '>',
|
||||
'€', '‚', 'ƒ', '„', '…', '†', '‡', 'ˆ',
|
||||
'‰', 'Š', '‹', 'Œ', 'Ž', '‘', '’', '“',
|
||||
'”', '•', '–', '—', '˜', '™', 'š', '›',
|
||||
'œ', 'ž', 'Ÿ'
|
||||
);
|
||||
|
||||
$Str = str_replace($Replace, $With, $Str);
|
||||
}
|
||||
return $Str;
|
||||
return htmlspecialchars($Str, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8', false);
|
||||
}
|
||||
|
||||
|
||||
@@ -184,7 +160,7 @@ function add_json_info($Json) {
|
||||
],
|
||||
]);
|
||||
}
|
||||
if (!isset($Json['debug']) && check_perms('site_debug')) {
|
||||
if (!isset($Json['debug']) && G::$LoggedUser && check_perms('site_debug')) {
|
||||
/** @var DEBUG $Debug */
|
||||
global $Debug;
|
||||
$Json = array_merge($Json, [
|
||||
|
||||
+2
-28
@@ -14,12 +14,8 @@ $ScriptStartTime = microtime(true); //To track how long a page takes to create
|
||||
if (isset($_GET['clearcache'])) {
|
||||
unset($_GET['clearcache']);
|
||||
}
|
||||
require_once(__DIR__ . '/../classes/classloader.php');
|
||||
require_once(__DIR__ . '/../classes/config.php');
|
||||
require_once(__DIR__ . '/../classes/mysql.class.php');
|
||||
require_once(__DIR__ . '/../classes/const.php');
|
||||
require_once(__DIR__ . '/../vendor/autoload.php');
|
||||
require_once(__DIR__ . '/../classes/util.php');
|
||||
|
||||
require(__DIR__ . '/../classes/includes.php');
|
||||
|
||||
$available = [
|
||||
'generate_invite',
|
||||
@@ -43,28 +39,6 @@ if (empty($_GET['api_key'])) {
|
||||
json_error('invalid parameters');
|
||||
}
|
||||
|
||||
$Cache = new CACHE($CONFIG['MemcachedServers']);
|
||||
$DB = new DB_MYSQL;
|
||||
$Debug = new DEBUG;
|
||||
$Twig = new Twig\Environment(
|
||||
new \Twig\Loader\FilesystemLoader([
|
||||
__DIR__ . '/../templates',
|
||||
__DIR__ . '/../src/locales',
|
||||
]),
|
||||
[
|
||||
'debug' => CONFIG['DEBUG_MODE'],
|
||||
'cache' => __DIR__ . '/../.cache/twig'
|
||||
]
|
||||
);
|
||||
$Debug->handle_errors();
|
||||
|
||||
ImageTools::init(CONFIG['IMAGE_PROVIDER']);
|
||||
|
||||
G::$Cache = &$Cache;
|
||||
G::$DB = &$DB;
|
||||
G::$Debug = &$Debug;
|
||||
G::$Twig = &$Twig;
|
||||
|
||||
$app = $Cache->get_value("api_apps_{$token}");
|
||||
if (!is_array($app)) {
|
||||
$DB->prepared_query("
|
||||
|
||||
+3
-11
@@ -12,21 +12,13 @@ if (isset($_GET['clearcache'])) {
|
||||
unset($_GET['clearcache']);
|
||||
}
|
||||
|
||||
require __DIR__ . '/../classes/config.php'; // The config contains all site-wide configuration information as well as memcached rules
|
||||
require __DIR__ . '/../classes/const.php';
|
||||
|
||||
require(CONFIG['SERVER_ROOT'] . '/classes/classloader.php');
|
||||
require(CONFIG['SERVER_ROOT'] . '/classes/misc.class.php'); // Require the misc class
|
||||
require(CONFIG['SERVER_ROOT'] . '/classes/cache.class.php'); // Require the caching class
|
||||
require(CONFIG['SERVER_ROOT'] . '/classes/feed.class.php'); // Require the feeds class
|
||||
require(CONFIG['SERVER_ROOT'] . '/classes/util.php'); // Require the feeds class
|
||||
|
||||
$Cache = new CACHE($CONFIG['MemcachedServers']); // Load the caching class
|
||||
$Feed = new FEED; // Load the time class
|
||||
require(__DIR__ . '/../classes/includes.php');
|
||||
|
||||
header('Cache-Control: no-cache, must-revalidate, post-check=0, pre-check=0');
|
||||
header('Pragma:');
|
||||
header('Expires: ' . date('D, d M Y H:i:s', time() + (2 * 60 * 60)) . ' GMT');
|
||||
header('Last-Modified: ' . date('D, d M Y H:i:s') . ' GMT');
|
||||
|
||||
$Feed = new FEED; // Load the time class
|
||||
|
||||
require(CONFIG['SERVER_ROOT'] . '/sections/feeds/index.php');
|
||||
|
||||
@@ -1,12 +1,4 @@
|
||||
$(document).ready(function () {
|
||||
$('.forum_category').click(function (e) {
|
||||
var id = this.id
|
||||
var isChecked = $(this).text() != t('client.common.check_all')
|
||||
isChecked ? $(this).text(t('client.common.check_all')) : $(this).text(t('client.common.uncheck_all'))
|
||||
$("input[data-category='" + id + "']").attr('checked', !isChecked)
|
||||
e.preventDefault()
|
||||
})
|
||||
|
||||
$('#type_body').click(function () {
|
||||
$('#post_created_row').gshow()
|
||||
})
|
||||
@@ -14,3 +6,8 @@ $(document).ready(function () {
|
||||
$('#post_created_row').ghide()
|
||||
})
|
||||
})
|
||||
|
||||
function toggleAll(id) {
|
||||
var isChecked = $('#' + id).raw().checked
|
||||
$("input[data-category='" + id + "']").attr('checked', isChecked)
|
||||
}
|
||||
|
||||
@@ -1,24 +1,6 @@
|
||||
<?
|
||||
|
||||
require_once(__DIR__ . '/../classes/classloader.php');
|
||||
require_once(__DIR__ . '/../classes/config.php');
|
||||
require_once(__DIR__ . '/../classes/const.php');
|
||||
require_once(__DIR__ . '/../vendor/autoload.php');
|
||||
require_once(__DIR__ . '/../classes/util.php');
|
||||
require_once(__DIR__ . '/../classes/mysql.class.php');
|
||||
require_once(__DIR__ . '/../classes/cache.class.php');
|
||||
require_once(__DIR__ . '/../classes/time.class.php');
|
||||
|
||||
$DB = new DB_MYSQL;
|
||||
$Cache = new CACHE($CONFIG['MemcachedServers']);
|
||||
$Debug = new DEBUG;
|
||||
$Debug->handle_errors();
|
||||
|
||||
ImageTools::init(CONFIG['IMAGE_PROVIDER']);
|
||||
|
||||
G::$Cache = $Cache;
|
||||
G::$DB = $DB;
|
||||
G::$Debug = $Debug;
|
||||
require(__DIR__ . '../classes/includes.php');
|
||||
|
||||
$StartArtistID = $argv[1];
|
||||
$EndArtistID = $argv[2];
|
||||
|
||||
@@ -2,19 +2,10 @@
|
||||
|
||||
/* If ever can_leech and RatioWatchEnds get out of synch, no task will catch it */
|
||||
|
||||
require_once(__DIR__ . '/../classes/config.php');
|
||||
require_once(__DIR__ . '/../classes/const.php');
|
||||
require_once(__DIR__ . '/../vendor/autoload.php');
|
||||
require_once(__DIR__ . '/../classes/util.php');
|
||||
|
||||
$Debug = new DEBUG;
|
||||
$Debug->handle_errors();
|
||||
require(__DIR__ . '../classes/includes.php');
|
||||
|
||||
ini_set('max_execution_time', -1);
|
||||
|
||||
$DB = new DB_MYSQL;
|
||||
$Cache = new CACHE($CONFIG['MemcachedServers']);
|
||||
|
||||
$DB->prepared_query('
|
||||
SELECT um.ID, um.torrent_pass
|
||||
FROM users_main um
|
||||
|
||||
@@ -1,17 +1,9 @@
|
||||
<?php
|
||||
|
||||
require_once(__DIR__ . '/../classes/config.php');
|
||||
require_once(__DIR__ . '/../classes/const.php');
|
||||
require_once(__DIR__ . '/../vendor/autoload.php');
|
||||
require_once(__DIR__ . '/../classes/util.php');
|
||||
|
||||
$Debug = new DEBUG;
|
||||
$Debug->handle_errors();
|
||||
require(__DIR__ . '../classes/includes.php');
|
||||
|
||||
ini_set('max_execution_time', -1);
|
||||
|
||||
$DB = new DB_MYSQL;
|
||||
|
||||
define('CHUNK', 100);
|
||||
|
||||
$offset = 0;
|
||||
|
||||
@@ -1,18 +1,6 @@
|
||||
<?php
|
||||
|
||||
require_once(__DIR__ . '/../classes/config.php');
|
||||
require_once(__DIR__ . '/../classes/const.php');
|
||||
require_once(__DIR__ . '/../vendor/autoload.php');
|
||||
require_once(__DIR__ . '/../classes/util.php');
|
||||
|
||||
$Debug = new DEBUG;
|
||||
$Debug->handle_errors();
|
||||
|
||||
$DB = new DB_MYSQL;
|
||||
$Cache = new CACHE($CONFIG['MemcachedServers']);
|
||||
|
||||
G::$Cache = $Cache;
|
||||
G::$DB = $DB;
|
||||
require(__DIR__ . '../classes/includes.php');
|
||||
|
||||
$DB->prepared_query("
|
||||
DELETE FROM invite_tree
|
||||
|
||||
@@ -1,23 +1,5 @@
|
||||
<?
|
||||
require_once(__DIR__ . '/../classes/classloader.php');
|
||||
require_once(__DIR__ . '/../classes/config.php');
|
||||
require_once(__DIR__ . '/../classes/const.php');
|
||||
require_once(__DIR__ . '/../vendor/autoload.php');
|
||||
require_once(__DIR__ . '/../classes/util.php');
|
||||
require_once(__DIR__ . '/../classes/mysql.class.php');
|
||||
require_once(__DIR__ . '/../classes/cache.class.php');
|
||||
require_once(__DIR__ . '/../classes/time.class.php');
|
||||
|
||||
$DB = new DB_MYSQL;
|
||||
$Cache = new CACHE($CONFIG['MemcachedServers']);
|
||||
$Debug = new DEBUG;
|
||||
$Debug->handle_errors();
|
||||
|
||||
ImageTools::init(CONFIG['IMAGE_PROVIDER']);
|
||||
|
||||
G::$Cache = $Cache;
|
||||
G::$DB = $DB;
|
||||
G::$Debug = $Debug;
|
||||
require(__DIR__ . '../classes/includes.php');
|
||||
|
||||
$StartGroupID = $argv[1];
|
||||
$EndGroupID = $argv[2];
|
||||
|
||||
@@ -1,25 +1,5 @@
|
||||
<?
|
||||
require_once(__DIR__ . '/../classes/classloader.php');
|
||||
require_once(__DIR__ . '/../classes/config.php');
|
||||
require_once(__DIR__ . '/../classes/const.php');
|
||||
require_once(__DIR__ . '/../vendor/autoload.php');
|
||||
require_once(__DIR__ . '/../classes/util.php');
|
||||
require_once(__DIR__ . '/../classes/mysql.class.php');
|
||||
require_once(__DIR__ . '/../classes/cache.class.php');
|
||||
require_once(__DIR__ . '/../classes/time.class.php');
|
||||
|
||||
// fix movie main info and revision id
|
||||
|
||||
$DB = new DB_MYSQL;
|
||||
$Cache = new CACHE($CONFIG['MemcachedServers']);
|
||||
$Debug = new DEBUG;
|
||||
$Debug->handle_errors();
|
||||
|
||||
ImageTools::init(CONFIG['IMAGE_PROVIDER']);
|
||||
|
||||
G::$Cache = $Cache;
|
||||
G::$DB = $DB;
|
||||
G::$Debug = $Debug;
|
||||
require(__DIR__ . '../classes/includes.php');
|
||||
|
||||
$StartGroupID = $argv[1];
|
||||
$EndGroupID = $argv[2];
|
||||
|
||||
@@ -1,25 +1,5 @@
|
||||
<?
|
||||
require_once(__DIR__ . '/../classes/classloader.php');
|
||||
require_once(__DIR__ . '/../classes/config.php');
|
||||
require_once(__DIR__ . '/../classes/const.php');
|
||||
require_once(__DIR__ . '/../vendor/autoload.php');
|
||||
require_once(__DIR__ . '/../classes/util.php');
|
||||
require_once(__DIR__ . '/../classes/mysql.class.php');
|
||||
require_once(__DIR__ . '/../classes/cache.class.php');
|
||||
require_once(__DIR__ . '/../classes/time.class.php');
|
||||
|
||||
// fix movie main info and revision id
|
||||
|
||||
$DB = new DB_MYSQL;
|
||||
$Cache = new CACHE($CONFIG['MemcachedServers']);
|
||||
$Debug = new DEBUG;
|
||||
$Debug->handle_errors();
|
||||
|
||||
ImageTools::init(CONFIG['IMAGE_PROVIDER']);
|
||||
|
||||
G::$Cache = $Cache;
|
||||
G::$DB = $DB;
|
||||
G::$Debug = $Debug;
|
||||
require(__DIR__ . '../classes/includes.php');
|
||||
|
||||
$StartGroupID = $argv[1];
|
||||
$EndGroupID = $argv[2];
|
||||
|
||||
@@ -4,24 +4,7 @@ define('MEMORY_EXCEPTION', true);
|
||||
define('TIME_EXCEPTION', true);
|
||||
define('ERROR_EXCEPTION', true);
|
||||
|
||||
require_once(__DIR__ . '/../classes/paranoia.class.php'); //Require the paranoia check_paranoia function
|
||||
require_once(__DIR__ . '/../classes/classloader.php');
|
||||
require_once(__DIR__ . '/../classes/config.php');
|
||||
require_once(__DIR__ . '/../classes/const.php');
|
||||
require_once(__DIR__ . '/../vendor/autoload.php');
|
||||
require_once(__DIR__ . '/../classes/util.php');
|
||||
require_once(__DIR__ . '/../classes/mysql.class.php');
|
||||
require_once(__DIR__ . '/../classes/cache.class.php');
|
||||
require_once(__DIR__ . '/../classes/time.class.php');
|
||||
|
||||
$Debug = new DEBUG;
|
||||
$Debug->handle_errors();
|
||||
|
||||
$DB = new DB_MYSQL;
|
||||
$Cache = new CACHE($CONFIG['MemcachedServers']);
|
||||
|
||||
G::$Cache = $Cache;
|
||||
G::$DB = $DB;
|
||||
require(__DIR__ . '../classes/includes.php');
|
||||
|
||||
define('WIDTH', 585);
|
||||
define('HEIGHT', 400);
|
||||
|
||||
@@ -1,26 +1,9 @@
|
||||
<?php
|
||||
|
||||
require(__DIR__ . '../classes/includes.php');
|
||||
|
||||
use Gazelle\Torrent\TorrentSlot;
|
||||
|
||||
require_once(__DIR__ . '/../classes/classloader.php');
|
||||
require_once(__DIR__ . '/../classes/config.php');
|
||||
require_once(__DIR__ . '/../classes/const.php');
|
||||
require_once(__DIR__ . '/../vendor/autoload.php');
|
||||
require_once(__DIR__ . '/../classes/util.php');
|
||||
require_once(__DIR__ . '/../classes/mysql.class.php');
|
||||
require_once(__DIR__ . '/../classes/cache.class.php');
|
||||
require_once(__DIR__ . '/../classes/time.class.php');
|
||||
|
||||
$DB = new DB_MYSQL;
|
||||
$Cache = new CACHE($CONFIG['MemcachedServers']);
|
||||
$Debug = new DEBUG;
|
||||
$Debug->handle_errors();
|
||||
|
||||
G::$Cache = $Cache;
|
||||
G::$DB = $DB;
|
||||
G::$Debug = $Debug;
|
||||
|
||||
|
||||
$DB->query("SELECT
|
||||
ID, Processing, Resolution, Codec, SpecialSub, ChineseDubbed, SubtitleType, Subtitles
|
||||
FROM
|
||||
|
||||
+1
-19
@@ -6,28 +6,10 @@ define('MEMORY_EXCEPTION', true);
|
||||
define('TIME_EXCEPTION', true);
|
||||
define('ERROR_EXCEPTION', true);
|
||||
|
||||
require_once(__DIR__ . '/../classes/config.php');
|
||||
require_once(__DIR__ . '/../classes/const.php');
|
||||
require_once(__DIR__ . '/../vendor/autoload.php');
|
||||
require(__DIR__ . '../classes/includes.php');
|
||||
|
||||
use Gazelle\Util\Crypto;
|
||||
use Twig\Loader\FilesystemLoader;
|
||||
use Twig\Environment;
|
||||
|
||||
require('classes/proxies.class.php');
|
||||
|
||||
set_include_path(CONFIG['SERVER_ROOT']);
|
||||
|
||||
require_once(CONFIG['SERVER_ROOT'] . 'classes/time.class.php');
|
||||
require_once(CONFIG['SERVER_ROOT'] . 'classes/util.php');
|
||||
|
||||
$Debug = new DEBUG;
|
||||
$Debug->handle_errors();
|
||||
$Debug->set_flag('Debug constructed');
|
||||
|
||||
$DB = new DB_MYSQL;
|
||||
$Cache = new CACHE($CONFIG['MemcachedServers']);
|
||||
|
||||
$in = fopen($argv[1], 'r');
|
||||
|
||||
$row = fgets($in);
|
||||
|
||||
@@ -24,9 +24,11 @@ $Items = $Bonus->getList();
|
||||
</div>
|
||||
|
||||
<div class="LayoutBody">
|
||||
<div class="alertbar blend">
|
||||
"<?= t("server.bonus.${item['Label']}") ?>" <?= t('server.bonus.purchased') ?>
|
||||
</div>
|
||||
<? if (isset($_GET['complete'])) { ?>
|
||||
<div class="alertbar blend">
|
||||
"<?= t("server.bonus.${item['Label']}") ?>" <?= t('server.bonus.purchased') ?>
|
||||
</div>
|
||||
<? } ?>
|
||||
<? if (count($Items) > 0) { ?>
|
||||
<div class="TableContainer">
|
||||
<table class="TableBonusStore Table">
|
||||
|
||||
@@ -65,7 +65,7 @@ switch ($_GET['feed']) {
|
||||
if (strtotime($NewsTime) >= time()) {
|
||||
continue;
|
||||
}
|
||||
echo $Feed->item($Title, Text::strip_bbcode($Body), "index.php#news$NewsID", CONFIG['SITE_NAME'] . ' Staff', '', '', $NewsTime);
|
||||
echo $Feed->item($Title, Text::full_format($Body), "index.php#news$NewsID", CONFIG['SITE_NAME'] . ' Staff', '', '', $NewsTime);
|
||||
if (++$Count > 4) {
|
||||
break;
|
||||
}
|
||||
@@ -95,9 +95,9 @@ switch ($_GET['feed']) {
|
||||
foreach ($Blog as $BlogItem) {
|
||||
list($BlogID, $Author, $AuthorID, $Title, $Body, $BlogTime, $ThreadID) = $BlogItem;
|
||||
if ($ThreadID) {
|
||||
echo $Feed->item($Title, Text::strip_bbcode($Body), "forums.php?action=viewthread&threadid=$ThreadID", CONFIG['SITE_NAME'] . ' Staff', '', '', $BlogTime);
|
||||
echo $Feed->item($Title, Text::full_format($Body), "forums.php?action=viewthread&threadid=$ThreadID", CONFIG['SITE_NAME'] . ' Staff', '', '', $BlogTime);
|
||||
} else {
|
||||
echo $Feed->item($Title, Text::strip_bbcode($Body), "blog.php#blog$BlogID", CONFIG['SITE_NAME'] . ' Staff', '', '', $BlogTime);
|
||||
echo $Feed->item($Title, Text::full_format($Body), "blog.php#blog$BlogID", CONFIG['SITE_NAME'] . ' Staff', '', '', $BlogTime);
|
||||
}
|
||||
}
|
||||
break;
|
||||
@@ -117,7 +117,7 @@ switch ($_GET['feed']) {
|
||||
}
|
||||
foreach ($Changelog as $Change) {
|
||||
list($Message, $Author, $Date) = $Change;
|
||||
echo $Feed->item("$Date by $Author", $Message, 'tools.php?action=change_log', CONFIG['SITE_NAME'] . ' Staff', '', '', $Date);
|
||||
echo $Feed->item("$Date by $Author", Text::full_format($Message), 'tools.php?action=change_log', CONFIG['SITE_NAME'] . ' Staff', '', '', $Date);
|
||||
}
|
||||
break;
|
||||
case 'torrents_all':
|
||||
|
||||
@@ -82,7 +82,7 @@ if (!Forums::check_forumperm($ForumID)) {
|
||||
$Pages = Format::get_pages($Page, $Forums[$ForumID]['NumTopics'], CONFIG['TOPICS_PER_PAGE'], 9);
|
||||
|
||||
// Start printing
|
||||
View::show_header(t('server.forums.forums') . '> ' . $Forums[$ForumID]['Name'], '', $IsDonorForum ? 'donor' : '', 'PageForumShow');
|
||||
View::show_header($Forums[$ForumID]['Name'], '', $IsDonorForum ? 'donor' : '', 'PageForumShow');
|
||||
?>
|
||||
<div class="LayoutBody">
|
||||
<div class="BodyHeader">
|
||||
|
||||
+47
-58
@@ -83,6 +83,14 @@ if (!empty($_GET['threadid']) && is_number($_GET['threadid'])) {
|
||||
} else {
|
||||
$ThreadID = '';
|
||||
}
|
||||
$ForumCategories = [];
|
||||
$LastCategoryID = -1;
|
||||
foreach ($Forums as $Forum) {
|
||||
if (!Forums::check_forumperm($Forum['ID'])) {
|
||||
continue;
|
||||
}
|
||||
$ForumCategories[$Forum['CategoryID']][] = $Forum;
|
||||
}
|
||||
|
||||
// Let's hope we got some results - start printing out the content.
|
||||
View::show_header(t('server.forums.forums_greater_than_search'), 'bbcode,forum_search,datetime_picker', 'PageFormSearch');
|
||||
@@ -140,75 +148,56 @@ View::show_header(t('server.forums.forums_greater_than_search'), 'bbcode,forum_s
|
||||
<td class="Form-label"><?= t('server.forums.post_created') ?>:</td>
|
||||
<td class="Form-inputs">
|
||||
<?= t('server.forums.after') ?>:
|
||||
<input class="Input" type="text" name="post_created_after" id="post_created_after" value="<?= $PostAfterDate ?>" />
|
||||
<input class="Input is-small" type="text" name="post_created_after" id="post_created_after" value="<?= $PostAfterDate ?>" />
|
||||
<?= t('server.forums.before') ?>:
|
||||
<input class="Input" type="text" name="post_created_before" id="post_created_before" value="<?= $PostBeforeDate ?>" />
|
||||
<input class="Input is-small" type="text" name="post_created_before" id="post_created_before" value="<?= $PostBeforeDate ?>" />
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="Form-row" variant="alighLeft">
|
||||
<td class="Form-label"><?= t('server.forums.search_forums') ?>:</td>
|
||||
<td class="Form-inputs">
|
||||
<table class="SearchForum-forumList" id="forum_search_cat_list">
|
||||
<?
|
||||
// List of forums
|
||||
$Open = false;
|
||||
$LastCategoryID = -1;
|
||||
$Columns = 0;
|
||||
$i = 0;
|
||||
<td class="Form-items" id="forum_search_cat_list">
|
||||
<?
|
||||
// List of forums
|
||||
foreach ($ForumCategories as $Category => $Forums) {
|
||||
$CheckAll = true;
|
||||
foreach ($Forums as $Forum) {
|
||||
if (!Forums::check_forumperm($Forum['ID'])) {
|
||||
continue;
|
||||
if (!in_array($Forum['ID'], $_GET['forums'])) {
|
||||
$CheckAll = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
$Columns++;
|
||||
?>
|
||||
<div class="Form-inputs">
|
||||
<strong><?= $ForumCats[$Category] ?></strong> -
|
||||
<div class="Checkbox">
|
||||
<input class="Input" type="checkbox" id="forum_category_<?= $Category ?>" onchange="toggleAll('forum_category_' + <?= $Category ?>);" <?= $CheckAll ? ' checked="checked"' : '' ?> />
|
||||
<label class="Checkbox-label" for="toggle_category_<?= $Category ?>"><?= t('client.common.check_all') ?></label>
|
||||
</div>
|
||||
<?
|
||||
foreach ($Forums as $Forum) {
|
||||
?>
|
||||
<div class="Checkbox">
|
||||
<input class="Input" type="checkbox" name="forums[]" value="<?= $Forum['ID'] ?>" data-category="forum_category_<?= $Category ?>" id="forum_<?= $Forum['ID'] ?>" <? if (isset($_GET['forums']) && in_array($Forum['ID'], $_GET['forums'])) {
|
||||
echo ' checked="checked"';
|
||||
} ?> />
|
||||
<label class="Checkbox-label" for="forum_<?= $Forum['ID'] ?>"><?= htmlspecialchars($Forum['Name']) ?></label>
|
||||
</div>
|
||||
<?
|
||||
|
||||
if ($Forum['CategoryID'] != $LastCategoryID) {
|
||||
$LastCategoryID = $Forum['CategoryID'];
|
||||
if ($Open) {
|
||||
if ($Columns % 5) { ?>
|
||||
<td colspan="<?= (5 - ($Columns % 5)) ?>"></td>
|
||||
<?
|
||||
}
|
||||
|
||||
?>
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
<?
|
||||
}
|
||||
?>
|
||||
</td>
|
||||
</tr>
|
||||
<?
|
||||
}
|
||||
$Columns = 0;
|
||||
$Open = true;
|
||||
$i++;
|
||||
?>
|
||||
<tr class="Form-row" variant="alignLeft">
|
||||
<td colspan="5" class="forum_cat">
|
||||
<strong><?= $ForumCats[$Forum['CategoryID']] ?></strong>
|
||||
<a href="#" class="brackets forum_category" id="forum_category_<?= $i ?>"><?= t('server.forums.check_all') ?></a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="Form-row" variant="alignLeft">
|
||||
<? } elseif ($Columns % 5 == 0) { ?>
|
||||
</tr>
|
||||
<tr class="Form-row" variant="alignLeft">
|
||||
<? } ?>
|
||||
<td class="Form-submit">
|
||||
<div class="Checkbox">
|
||||
<input class="Input" type="checkbox" name="forums[]" value="<?= $Forum['ID'] ?>" data-category="forum_category_<?= $i ?>" id="forum_<?= $Forum['ID'] ?>" <? if (isset($_GET['forums']) && in_array($Forum['ID'], $_GET['forums'])) {
|
||||
echo ' checked="checked"';
|
||||
} ?> />
|
||||
<label class="Checkbox-label" for="forum_<?= $Forum['ID'] ?>"><?= htmlspecialchars($Forum['Name']) ?></label>
|
||||
</div>
|
||||
</td>
|
||||
<? }
|
||||
if ($Columns % 5) { ?>
|
||||
<td colspan="<?= (4 - ($Columns % 5)) ?>"></td>
|
||||
<? } ?>
|
||||
</tr>
|
||||
<? } else { ?>
|
||||
|
||||
<input type="hidden" name="threadid" value="<?= $ThreadID ?>" />
|
||||
<? } ?>
|
||||
</table>
|
||||
<? } else { ?>
|
||||
<input type="hidden" name="threadid" value="<?= $ThreadID ?>" />
|
||||
<? } ?>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="SearchPageFooter">
|
||||
<div class="SearchPageFooter-actions">
|
||||
|
||||
@@ -166,7 +166,7 @@ if ($QuoteNotificationsCount === false || $QuoteNotificationsCount > 0) {
|
||||
}
|
||||
|
||||
// Start printing
|
||||
View::show_header($ThreadInfo['Title'] . ' < ' . $Forums[$ForumID]['Name'] . ' < Forums', 'comments,subscriptions,bbcode,thumb', $IsDonorForum ? 'donor' : '', 'PageForumThread');
|
||||
View::show_header($ThreadInfo['Title'], 'comments,subscriptions,bbcode,thumb', $IsDonorForum ? 'donor' : '', 'PageForumThread');
|
||||
?>
|
||||
<div class="LayoutBody">
|
||||
<div class="BodyHeader">
|
||||
|
||||
+51
-35
@@ -82,47 +82,63 @@ View::show_header(($Section === 'sentbox' ? t('server.inbox.sentbox') : t('serve
|
||||
</div>
|
||||
|
||||
<div class="BodyContent">
|
||||
<? if ($Count == 0 && empty($_GET['search'])) { ?>
|
||||
<div class="BoxBody">
|
||||
<?= t('server.inbox.your') ?><?= ($Section === 'sentbox' ? t('server.inbox.sentbox') : t('server.inbox.inbox')) ?><?= t('server.inbox.is_empty') ?>
|
||||
</div>
|
||||
<? } else { ?>
|
||||
<div class="Box">
|
||||
<form class="Box-body Form SearchInbox u-vstack" name="<?= ($Section === 'sentbox' ? 'sentbox' : 'inbox') ?>" action="inbox.php" method="get" id="searchbox">
|
||||
<div class="SearchInbox-row">
|
||||
<input type="hidden" name="action" value="<?= $Section ?>" />
|
||||
<div class="Radio">
|
||||
<input class="Input" type="radio" name="searchtype" value="user" id="radio-user" <?= (empty($_GET['searchtype']) || $_GET['searchtype'] === 'user' ? ' checked="checked"' : '') ?> />
|
||||
<label class="Radio-label" for="radio-user"><?= t('server.inbox.user') ?></label>
|
||||
<? if ($Count == 0 && empty($_GET['search'])) {
|
||||
View::line(t('server.inbox.your') . ($Section === 'sentbox' ? t('server.inbox.sentbox') : t('server.inbox.inbox')) . t('server.inbox.is_empty'));
|
||||
} else { ?>
|
||||
<form class="SearchPage Form Box SearchInbox" name="<?= ($Section === 'sentbox' ? 'sentbox' : 'inbox') ?>" action="inbox.php" method="get" id="searchbox">
|
||||
<div class="SearchPageBody">
|
||||
<input type="hidden" name="action" value="<?= $Section ?>" />
|
||||
<div class="Form-rowList">
|
||||
<div class="Form-row">
|
||||
<div class="Form-label">
|
||||
<?= t('server.torrents.search_for') ?>
|
||||
</div>
|
||||
<div class="Form-inputs">
|
||||
<input class="Input" type="text" name="search" placeholder="<?= (!empty($_GET['search']) ? display_str($_GET['search']) : t('server.inbox.placeholder_search') . ($Section === 'sentbox' ? t('server.inbox.sentbox') : t('server.inbox.inbox'))) ?>" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="Radio">
|
||||
<input class="Input" type="radio" name="searchtype" value="subject" id="radio-subject" <?= (!empty($_GET['searchtype']) && $_GET['searchtype'] === 'subject' ? ' checked="checked"' : '') ?> />
|
||||
<label class="Radio-label" for="radio-subject"><?= t('server.inbox.subject') ?></label>
|
||||
<div class="Form-row">
|
||||
<div class="Form-label">
|
||||
<?= t('server.wiki.search_in') ?>
|
||||
</div>
|
||||
<div class="Form-inputs">
|
||||
<div class="RadioGroup">
|
||||
<div class="Radio">
|
||||
<input class="Input" type="radio" name="searchtype" value="user" id="radio-user" <?= (empty($_GET['searchtype']) || $_GET['searchtype'] === 'user' ? ' checked="checked"' : '') ?> />
|
||||
<label class="Radio-label" for="radio-user"><?= t('server.inbox.user') ?></label>
|
||||
</div>
|
||||
<div class="Radio">
|
||||
<input class="Input" type="radio" name="searchtype" value="subject" id="radio-subject" <?= (!empty($_GET['searchtype']) && $_GET['searchtype'] === 'subject' ? ' checked="checked"' : '') ?> />
|
||||
<label class="Radio-label" for="radio-subject"><?= t('server.inbox.subject') ?></label>
|
||||
</div>
|
||||
<div class="Radio">
|
||||
<input class="Input" type="radio" name="searchtype" value="message" id="radio-message" <?= (!empty($_GET['searchtype']) && $_GET['searchtype'] === 'message' ? ' checked="checked"' : '') ?> />
|
||||
<label class="Radio-label" for="radio-message"><?= t('server.inbox.message') ?></label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="Radio">
|
||||
<input class="Input" type="radio" name="searchtype" value="message" id="radio-message" <?= (!empty($_GET['searchtype']) && $_GET['searchtype'] === 'message' ? ' checked="checked"' : '') ?> />
|
||||
<label class="Radio-label" for="radio-message"><?= t('server.inbox.message') ?></label>
|
||||
</div>
|
||||
<span class="SearchInbox-actions">
|
||||
<? // provide a temporary toggle for sorting PMs
|
||||
$ToggleTitle = 'Temporary toggle switch for sorting PMs. To permanently change the sorting behavior, edit the setting in your profile.';
|
||||
$BaseURL = "inbox.php?action={$_GET['action']}";
|
||||
|
||||
if ($_GET['sort'] === 'unread') { ?>
|
||||
<a href="<?= $BaseURL ?>" class="brackets" data-tooltip="<?= $ToggleTitle ?>"><?= t('server.inbox.list_latest_first') ?></a>
|
||||
<? } else { ?>
|
||||
<a href="<?= $BaseURL ?>&sort=unread" class="brackets" data-tooltip="<?= $ToggleTitle ?>"><?= t('server.inbox.list_unread_first') ?></a>
|
||||
<? } ?>
|
||||
</span>
|
||||
<div class="Form-row">
|
||||
<div class="Form-label">
|
||||
<?= t('server.tools.order_by') ?>
|
||||
</div>
|
||||
<div class="Form-inputs">
|
||||
<select class="Input" name="sort">
|
||||
<option class="Select-option" value="latest" <? Format::selected('sort', 'latest') ?>><?= t('server.inbox.list_latest_first') ?></option>
|
||||
<option class="Select-option" value="unread" <? Format::selected('sort', 'unread') ?>><?= t('server.inbox.list_unread_first') ?></option>
|
||||
</select>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SearchInbox-row">
|
||||
<input class="Input" type="text" name="search" placeholder="<?= (!empty($_GET['search']) ? display_str($_GET['search']) : t('server.inbox.placeholder_search') . ($Section === 'sentbox' ? t('server.inbox.sentbox') : t('server.inbox.inbox'))) ?>" />
|
||||
</div>
|
||||
<div class="SearchInbox-actions">
|
||||
</div>
|
||||
<div class="SearchPageFooter">
|
||||
<div class="SearchPageFooter-actions">
|
||||
<button class="Button" type="submit"><?= t('server.common.search') ?></button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<? if ($Count == 0) { ?>
|
||||
<div class="center"><?= t('server.inbox.no_results') ?></div>
|
||||
<? } else { ?>
|
||||
|
||||
@@ -416,7 +416,10 @@ View::show_header($Title, '', 'PageRequestHome');
|
||||
<tr class="Form-row is-release">
|
||||
<td class="Form-label"><?= t('server.requests.release_list') ?></td>
|
||||
<td class="Form-inputs">
|
||||
<input class="Input" type="checkbox" id="toggle_releases" onchange="globalapp.requestToggle('releases', 0);" <?= (!$Submitted || !empty($ReleaseArray) && count($ReleaseArray) === count($ReleaseTypes) ? ' checked="checked"' : '') ?> /> <label for="toggle_releases">All</label>
|
||||
<div class="Checkbox">
|
||||
<input class="Input" type="checkbox" id="toggle_releases" onchange="globalapp.allToggle('releases', 0);" <?= (!$Submitted || !empty($ReleaseArray) && count($ReleaseArray) === count($ReleaseTypes) ? ' checked="checked"' : '') ?> />
|
||||
<label for="toggle_releases"><?= t('server.forums.check_all') ?></label>
|
||||
</div>
|
||||
<?
|
||||
foreach ($ReleaseTypes as $Key) {
|
||||
?>
|
||||
@@ -433,8 +436,8 @@ View::show_header($Title, '', 'PageRequestHome');
|
||||
<td class="Form-label"><?= t('server.requests.source_list') ?>:</td>
|
||||
<td class="Form-inputs">
|
||||
<div class="Checkbox">
|
||||
<input class="Input" type="checkbox" id="toggle_source" onchange="globalapp.requestToggle('sources', 0);" <?= (!$Submitted || !empty($SourceArray) && count($SourceArray) === count($Sources) ? ' checked="checked"' : '') ?> />
|
||||
<label class="Checkbox-label" for="toggle_source">All</label>
|
||||
<input class="Input" type="checkbox" id="toggle_source" onchange="globalapp.allToggle('source', 0);" <?= (!$Submitted || !empty($SourceArray) && count($SourceArray) === count($Sources) ? ' checked="checked"' : '') ?> />
|
||||
<label class="Checkbox-label" for="toggle_source"><?= t('server.forums.check_all') ?></label>
|
||||
</div>
|
||||
<?
|
||||
foreach ($Sources as $Key => $Val) {
|
||||
@@ -450,8 +453,8 @@ View::show_header($Title, '', 'PageRequestHome');
|
||||
<td class="Form-label"><?= t('server.requests.codec_list') ?>:</td>
|
||||
<td class="Form-inputs">
|
||||
<div class="Checkbox">
|
||||
<input class="Input" type="checkbox" id="toggle_codec" onchange="globalapp.requestToggle('codec', 0);" <?= (!$Submitted || !empty($CodecArray) && count($CodecArray) === count($Codecs) ? ' checked="checked"' : '') ?> />
|
||||
<label class="Checkbox-label" for="toggle_codec">All</label>
|
||||
<input class="Input" type="checkbox" id="toggle_codec" onchange="globalapp.allToggle('codec', 0);" <?= (!$Submitted || !empty($CodecArray) && count($CodecArray) === count($Codecs) ? ' checked="checked"' : '') ?> />
|
||||
<label class="Checkbox-label" for="toggle_codec"><?= t('server.forums.check_all') ?></label>
|
||||
</div>
|
||||
<?
|
||||
foreach ($Codecs as $Key => $Val) {
|
||||
@@ -467,8 +470,8 @@ View::show_header($Title, '', 'PageRequestHome');
|
||||
<td class="Form-label"><?= t('server.requests.container_list') ?>:</td>
|
||||
<td class="Form-inputs">
|
||||
<div class="Checkbox">
|
||||
<input class="Input" type="checkbox" id="toggle_container" onchange="globalapp.requestToggle('container', 0);" <?= (!$Submitted || !empty($ContainerArray) && count($ContainerArray) === count($Containers) ? ' checked="checked"' : '') ?> />
|
||||
<label class="Checkbox-label" for="toggle_container">All</label>
|
||||
<input class="Input" type="checkbox" id="toggle_container" onchange="globalapp.allToggle('container', 0);" <?= (!$Submitted || !empty($ContainerArray) && count($ContainerArray) === count($Containers) ? ' checked="checked"' : '') ?> />
|
||||
<label class="Checkbox-label" for="toggle_container"><?= t('server.forums.check_all') ?></label>
|
||||
</div>
|
||||
<?
|
||||
foreach ($Containers as $Key => $Val) {
|
||||
@@ -486,8 +489,8 @@ View::show_header($Title, '', 'PageRequestHome');
|
||||
<td class="Form-label"><?= t('server.requests.resolution_list') ?>:</td>
|
||||
<td class="Form-inputs">
|
||||
<div class="Checkbox">
|
||||
<input class="Input" type="checkbox" id="toggle_resolution" onchange="globalapp.requestToggle('resolution', 0);" <?= (!$Submitted || !empty($ResolutionArray) && count($ResolutionArray) === count($Resolutions) ? ' checked="checked"' : '') ?> />
|
||||
<label class="Checkbox-label" for="toggle_resolution">All</label>
|
||||
<input class="Input" type="checkbox" id="toggle_resolution" onchange="globalapp.allToggle('resolution', 0);" <?= (!$Submitted || !empty($ResolutionArray) && count($ResolutionArray) === count($Resolutions) ? ' checked="checked"' : '') ?> />
|
||||
<label class="Checkbox-label" for="toggle_resolution"><?= t('server.forums.check_all') ?></label>
|
||||
</div>
|
||||
<?
|
||||
foreach ($Resolutions as $Key => $Val) {
|
||||
@@ -505,7 +508,7 @@ View::show_header($Title, '', 'PageRequestHome');
|
||||
</div>
|
||||
<div class="SearchPageFooter">
|
||||
<div class="SearchPageFooter-actions">
|
||||
<input class="Button" type="submit" value="<?= t('server.torrents.search_requests') ?>" />
|
||||
<input class="Button" type="submit" value="<?= t('server.common.search') ?>" />
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
@@ -341,7 +341,7 @@ View::show_header(($NewRequest ? t('server.requests.new_create') : t('server.req
|
||||
<td class="Form-items">
|
||||
<div class="Form-inputs">
|
||||
<div class="Checkbox">
|
||||
<input type="checkbox" name="all_sources" id="toggle_sources" onchange="globalapp.requestToggle('sources', <?= ($NewRequest ? 1 : 0) ?>);" <?= !empty($SourceArray) && (count($SourceArray) === count($Sources)) ? ' checked="checked"' : ''; ?> /><label for="toggle_sources"> <?= t('server.requests.all') ?></label>
|
||||
<input type="checkbox" name="all_sources" id="toggle_sources" onchange="globalapp.allToggle('sources', <?= ($NewRequest ? 1 : 0) ?>);" <?= !empty($SourceArray) && (count($SourceArray) === count($Sources)) ? ' checked="checked"' : ''; ?> /><label for="toggle_sources"> <?= t('server.requests.all') ?></label>
|
||||
</div>
|
||||
<? foreach ($Sources as $Key => $Val) { ?>
|
||||
<div class="Checkbox"><input type="checkbox" name="sources[]" value="<?= $Key ?>" onchange="if (!this.checked) { $('#toggle_sources').raw().checked = false; }" id="source_<?= $Key ?>" <?= (!empty($SourceArray) && in_array($Key, $SourceArray) ? ' checked="checked"' : '') ?> /><label for="source_<?= $Key ?>"> <?= $Val ?></label></div>
|
||||
@@ -354,7 +354,7 @@ View::show_header(($NewRequest ? t('server.requests.new_create') : t('server.req
|
||||
<td class="Form-items">
|
||||
<div class="Form-inputs">
|
||||
<div class="Checkbox">
|
||||
<input type="checkbox" name="all_codecs" id="toggle_codecs" onchange="globalapp.requestToggle('codecs', <?= ($NewRequest ? 1 : 0) ?>);" <?= (!empty($CodecArray) && (count($CodecArray) === count($Codecs)) ? ' checked="checked"' : '') ?> /><label for="toggle_codecs"> <?= t('server.requests.all') ?></label>
|
||||
<input type="checkbox" name="all_codecs" id="toggle_codecs" onchange="globalapp.allToggle('codecs', <?= ($NewRequest ? 1 : 0) ?>);" <?= (!empty($CodecArray) && (count($CodecArray) === count($Codecs)) ? ' checked="checked"' : '') ?> /><label for="toggle_codecs"> <?= t('server.requests.all') ?></label>
|
||||
</div>
|
||||
<? foreach ($Codecs as $Key => $Val) { ?>
|
||||
<div class="Checkbox">
|
||||
@@ -369,7 +369,7 @@ View::show_header(($NewRequest ? t('server.requests.new_create') : t('server.req
|
||||
<td class="Form-items">
|
||||
<div class="Form-inputs">
|
||||
<div class="Checkbox">
|
||||
<input type="checkbox" name="all_containers" id="toggle_containers" onchange="globalapp.requestToggle('containers', <?= ($NewRequest ? 1 : 0) ?>);" <?= (!empty($ContainerArray) && (count($ContainerArray) === count($Containers)) ? ' checked="checked"' : '') ?> /><label for="toggle_containers"> <?= t('server.requests.all') ?></label>
|
||||
<input type="checkbox" name="all_containers" id="toggle_containers" onchange="globalapp.allToggle('containers', <?= ($NewRequest ? 1 : 0) ?>);" <?= (!empty($ContainerArray) && (count($ContainerArray) === count($Containers)) ? ' checked="checked"' : '') ?> /><label for="toggle_containers"> <?= t('server.requests.all') ?></label>
|
||||
</div>
|
||||
<? foreach ($Containers as $Key => $Val) { ?>
|
||||
<div class="Checkbox">
|
||||
@@ -384,7 +384,7 @@ View::show_header(($NewRequest ? t('server.requests.new_create') : t('server.req
|
||||
<td class="Form-items">
|
||||
<div class="Form-inputs">
|
||||
<div class="Checkbox">
|
||||
<input type="checkbox" name="all_resolutions" id="toggle_resolutions" onchange="globalapp.requestToggle('resolutions', <?= ($NewRequest ? 1 : 0) ?>);" <?= (!empty($ResolutionArray) && (count($ResolutionArray) === count($Resolutions)) ? ' checked="checked"' : '') ?> /><label for="toggle_resolutions"> <?= t('server.requests.all') ?></label>
|
||||
<input type="checkbox" name="all_resolutions" id="toggle_resolutions" onchange="globalapp.allToggle('resolutions', <?= ($NewRequest ? 1 : 0) ?>);" <?= (!empty($ResolutionArray) && (count($ResolutionArray) === count($Resolutions)) ? ' checked="checked"' : '') ?> /><label for="toggle_resolutions"> <?= t('server.requests.all') ?></label>
|
||||
</div>
|
||||
<? foreach ($Resolutions as $Key => $Val) { ?>
|
||||
<div class="Checkbox">
|
||||
|
||||
@@ -91,15 +91,19 @@ View::show_header('Staff Inbox', 'PageStaffPMScoreboard');
|
||||
foreach ($Results as $Result) {
|
||||
[$UserID, $Username, $Num, $Extra] = $Result;
|
||||
?>
|
||||
<tr>
|
||||
<td><a href="/reportsv2.php?view=resolver&id=<?= $UserID ?>"><?= $Username ?></a></td>
|
||||
<td><?= $Num ?></td>
|
||||
<td><?= $Extra ?></td>
|
||||
<tr class="Table-row">
|
||||
<td class="Table-cell"><a href="/reportsv2.php?view=resolver&id=<?= $UserID ?>"><?= $Username ?></a></td>
|
||||
<td class="Table-cell"><?= $Num ?></td>
|
||||
<td class="Table-cell"><?= $Extra ?></td>
|
||||
</tr>
|
||||
<?php } ?>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<?php
|
||||
$DB->prepared_query($BaseSQL, 365000, 365000, $LoggedUser['Class'], ...$SupportStaff);
|
||||
$Results = $DB->to_array();
|
||||
?>
|
||||
<div class="Group">
|
||||
<div class="Group-header">
|
||||
<div class="Group-headerTitle"><?= t('server.staffpm.inbox_actions_total') ?></div>
|
||||
@@ -115,10 +119,10 @@ View::show_header('Staff Inbox', 'PageStaffPMScoreboard');
|
||||
foreach ($Results as $Result) {
|
||||
[$UserID, $Username, $Num, $Extra] = $Result;
|
||||
?>
|
||||
<tr>
|
||||
<td><a href="/reportsv2.php?view=resolver&id=<?= $UserID ?>"><?= $Username ?></a></td>
|
||||
<td><?= $Num ?></td>
|
||||
<td><?= $Extra ?></td>
|
||||
<tr class="Table-row">
|
||||
<td class="Table-cell"><a href="/reportsv2.php?view=resolver&id=<?= $UserID ?>"><?= $Username ?></a></td>
|
||||
<td class="Table-cell"><?= $Num ?></td>
|
||||
<td class="Table-cell"><?= $Extra ?></td>
|
||||
</tr>
|
||||
<?php } ?>
|
||||
</table>
|
||||
@@ -145,10 +149,10 @@ View::show_header('Staff Inbox', 'PageStaffPMScoreboard');
|
||||
foreach ($Results as $Result) {
|
||||
[$UserID, $Username, $Num, $Extra] = $Result;
|
||||
?>
|
||||
<tr>
|
||||
<td><a href="/reportsv2.php?view=resolver&id=<?= $UserID ?>"><?= $Username ?></a></td>
|
||||
<td><?= $Num ?></td>
|
||||
<td><?= $Extra ?></td>
|
||||
<tr class="Table-row">
|
||||
<td class="Table-cell"><a href="/reportsv2.php?view=resolver&id=<?= $UserID ?>"><?= $Username ?></a></td>
|
||||
<td class="Table-cell"><?= $Num ?></td>
|
||||
<td class="Table-cell"><?= $Extra ?></td>
|
||||
</tr>
|
||||
<?php } ?>
|
||||
</table>
|
||||
@@ -175,22 +179,20 @@ View::show_header('Staff Inbox', 'PageStaffPMScoreboard');
|
||||
foreach ($Results as $Result) {
|
||||
[$UserID, $Username, $Num, $Extra] = $Result;
|
||||
?>
|
||||
<tr>
|
||||
<td><a href="/reportsv2.php?view=resolver&id=<?= $UserID ?>"><?= $Username ?></a></td>
|
||||
<td><?= $Num ?></td>
|
||||
<td><?= $Extra ?></td>
|
||||
<tr class="Table-row">
|
||||
<td class="Table-cell"><a href="/reportsv2.php?view=resolver&id=<?= $UserID ?>"><?= $Username ?></a></td>
|
||||
<td class="Table-cell"><?= $Num ?></td>
|
||||
<td class="Table-cell"><?= $Extra ?></td>
|
||||
</tr>
|
||||
<?php } ?>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php
|
||||
$DB->prepared_query($BaseSQL, 365000, 365000, $LoggedUser['Class'], ...$SupportStaff);
|
||||
$Results = $DB->to_array();
|
||||
?>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?php
|
||||
View::show_footer();
|
||||
<?php
|
||||
View::show_footer();
|
||||
|
||||
@@ -204,10 +204,10 @@ View::show_header('Site Information', '', 'PageToolSiteInfo');
|
||||
</div>
|
||||
</div>
|
||||
<div class="Group-body BoxBody">
|
||||
<span style="width: 150px; display: inline-block;">Branch:</span> <?= $GitBranch ?>
|
||||
<span style="width: 150px; display: inline-block;">Local Hash:</span> <?= $GitHash ?>
|
||||
<span style="width: 150px; display: inline-block;">Remote Hash:</span> <?= $RemoteHash ?>
|
||||
<span style="width: 150px; display: inline-block;">Tag:</span> <?= $Tag ?>
|
||||
<strong style="width: 150px; display: inline-block;">Branch</strong> <?= $GitBranch ?>
|
||||
<strong style="width: 150px; display: inline-block;">Local Hash</strong> <?= $GitHash ?>
|
||||
<strong style="width: 150px; display: inline-block;">Remote Hash</strong> <?= $RemoteHash ?>
|
||||
<strong style="width: 150px; display: inline-block;">Tag</strong> <?= $Tag ?>
|
||||
</div>
|
||||
</div>
|
||||
<div class="Group">
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
<?
|
||||
|
||||
use Gazelle\Manager\Tag;
|
||||
use Gazelle\Torrent\TorrentSlot;
|
||||
use Gazelle\Torrent\TorrentSlotType;
|
||||
|
||||
include(CONFIG['SERVER_ROOT'] . '/classes/torrenttable.class.php');
|
||||
function compare($X, $Y) {
|
||||
@@ -916,7 +914,7 @@ View::show_header($Title, 'browse,comments,torrent,bbcode,recommend,cover_art,su
|
||||
$MissSlots = $MissingSlots[TorrentSlot::get_slot_resolution($Resolution)];
|
||||
$MissSlotNames = [];
|
||||
foreach ($MissSlots as $MissingSlot) {
|
||||
if ($MissingSlot == TorrentSlotType::None) {
|
||||
if ($MissingSlot == TorrentSlot::TorrentSlotTypeNone) {
|
||||
continue;
|
||||
}
|
||||
$SlotTooltip = TorrentSlot::empty_slot_tooltip($MissingSlot);
|
||||
@@ -964,7 +962,7 @@ View::show_header($Title, 'browse,comments,torrent,bbcode,recommend,cover_art,su
|
||||
<optgroup class="Select-group" label="<?= $extraName ?>">
|
||||
<?
|
||||
foreach (TorrentSlot::get_resolution_slots($Resolution) as $RSlot) {
|
||||
if ($RSlot == TorrentSlotType::None) {
|
||||
if ($RSlot == TorrentSlot::TorrentSlotTypeNone) {
|
||||
continue;
|
||||
}
|
||||
?>
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
<?
|
||||
// todo by qwerty 冗余代码和browse.php
|
||||
|
||||
use Gazelle\Torrent\TorrentSlotGroup;
|
||||
use Gazelle\Torrent\TorrentSlotGroupStatus;
|
||||
use Gazelle\Torrent\TorrentSlot;
|
||||
|
||||
include(CONFIG['SERVER_ROOT'] . '/sections/torrents/functions.php');
|
||||
@@ -150,17 +148,17 @@ HTML;
|
||||
foreach ($SlotStatus as $type => $Status) {
|
||||
list($status, $misslots) = $Status;
|
||||
switch ($status) {
|
||||
case TorrentSlotGroupStatus::Empty:
|
||||
case TorrentSlot::TorrentSlotStatusEmpty:
|
||||
// 空的class
|
||||
$SlotStatusClass[$type] = '';
|
||||
$text[$type] = "<span class='u-colorSuccess' data-tooltip='" . t('server.torrents.slot_status_empty') . "'>" . icon('check') . "</span>";
|
||||
break;
|
||||
case TorrentSlotGroupStatus::Full:
|
||||
case TorrentSlot::TorrentSlotStatusFull:
|
||||
// 满的class
|
||||
$SlotStatusClass[$type] = '';
|
||||
$text[$type] = "<span class='u-colorWarning' title = '" . t('server.torrents.slot_status_full') . "'>" . icon('times') . "</span>";
|
||||
break;
|
||||
case TorrentSlotGroupStatus::Free:
|
||||
case TorrentSlot::TorrentSlotStatusFree:
|
||||
// 有空位的class
|
||||
$SlotStatusClass[$type] = '';
|
||||
$SlotsTitle = '';
|
||||
@@ -186,15 +184,15 @@ HTML;
|
||||
<td class="TableMissing-cellName Table-cell"><a href="torrents.php?id=<?= $GroupID ?>&view=slot#slot"><?= $GroupName ?><a></td>
|
||||
<td class="TableMissing-cellSnatches Table-cell"><?= $SnatchedCount ?></td>
|
||||
<td class="TableMissing-cellRequests Table-cell"><?= $RequestCount ?></td>
|
||||
<td class="TableMissing-cellSDEncode Table-cell <?= $SlotStatusClass[TorrentSlotGroup::SDEncode] ?>"><?= $text[TorrentSlotGroup::SDEncode] ?>
|
||||
<td class="TableMissing-cellSDEncode Table-cell <?= $SlotStatusClass[TorrentSlot::TorrentSlotGroupSDEncode] ?>"><?= $text[TorrentSlot::TorrentSlotGroupSDEncode] ?>
|
||||
</td>
|
||||
<td class="TableMissing-cellSDUntouched Table-cell <?= $SlotStatusClass[TorrentSlotGroup::SDUntouched] ?>"><?= $text[TorrentSlotGroup::SDUntouched] ?>
|
||||
<td class="TableMissing-cellSDUntouched Table-cell <?= $SlotStatusClass[TorrentSlot::TorrentSlotGroupSDUntouched] ?>"><?= $text[TorrentSlot::TorrentSlotGroupSDUntouched] ?>
|
||||
</td>
|
||||
<td class="TableMissing-cellHDEncode Table-cell <?= $SlotStatusClass[TorrentSlotGroup::HDEncode] ?>"><?= $text[TorrentSlotGroup::HDEncode] ?>
|
||||
<td class="TableMissing-cellHDEncode Table-cell <?= $SlotStatusClass[TorrentSlot::TorrentSlotGroupHDEncode] ?>"><?= $text[TorrentSlot::TorrentSlotGroupHDEncode] ?>
|
||||
</td>
|
||||
<td class="TableMissing-cellHDUntouched Table-cell <?= $SlotStatusClass[TorrentSlotGroup::HDUntouched] ?>"><?= $text[TorrentSlotGroup::HDUntouched] ?></td>
|
||||
<td class="TableMissing-cellUHDEncode Table-cell <?= $SlotStatusClass[TorrentSlotGroup::UHDEncode] ?>"><?= $text[TorrentSlotGroup::UHDEncode] ?></td>
|
||||
<td class="TableMissing-cellUHDUntouched Table-cell <?= $SlotStatusClass[TorrentSlotGroup::UHDUntouched] ?>"><?= $text[TorrentSlotGroup::UHDUntouched] ?></td>
|
||||
<td class="TableMissing-cellHDUntouched Table-cell <?= $SlotStatusClass[TorrentSlot::TorrentSlotGroupHDUntouched] ?>"><?= $text[TorrentSlot::TorrentSlotGroupHDUntouched] ?></td>
|
||||
<td class="TableMissing-cellUHDEncode Table-cell <?= $SlotStatusClass[TorrentSlot::TorrentSlotGroupUHDEncode] ?>"><?= $text[TorrentSlot::TorrentSlotGroupUHDEncode] ?></td>
|
||||
<td class="TableMissing-cellUHDUntouched Table-cell <?= $SlotStatusClass[TorrentSlot::TorrentSlotGroupUHDUntouched] ?>"><?= $text[TorrentSlot::TorrentSlotGroupUHDUntouched] ?></td>
|
||||
</tr>
|
||||
<?
|
||||
}
|
||||
|
||||
@@ -129,8 +129,13 @@ $SingleDateChoices = array('inarray' => array('on', 'before', 'after'));
|
||||
$NumberChoices = array('inarray' => array('equal', 'above', 'below', 'between', 'buffer'));
|
||||
$YesNo = array('inarray' => array('any', 'yes', 'no'));
|
||||
$DisabledField = array('inarray' => array("DisableAnyone", "DisablePosting", "DisableAvatar", "DisableForums", "DisableIRC", "DisablePM", "DisableLeech", "DisableRequests", "DisableUpload", "DisablePoints", "DisableTagging", "DisableWiki", "DisableInvites", "DisableCheckAll", "DisableCheckSelf"));
|
||||
$OrderVals = array('inarray' => array('Username', 'Ratio', 'IP', 'Email', 'Joined', 'Last Seen', 'Uploaded', 'Downloaded', 'Invites', 'Snatches'));
|
||||
$WayVals = array('inarray' => array('Ascending', 'Descending'));
|
||||
$OrderVals = array(
|
||||
'inarray' =>
|
||||
array('Username', 'Ratio', 'IP Address', 'Email', 'Joined', 'Last Seen', 'Uploaded', 'Downloaded', 'Invites', 'Snatches')
|
||||
);
|
||||
$WayVals = array(
|
||||
'inarray' => array('Ascending', 'Descending')
|
||||
);
|
||||
|
||||
$email_history_checked = true;
|
||||
$ip_history_checked = true;
|
||||
@@ -984,14 +989,14 @@ $DB->set_query_id($Results);
|
||||
foreach (array_shift($OrderVals) as $Cur) { ?>
|
||||
<option class="Select-option" value="<?= $Cur ?>" <? if (isset($_GET['order']) && $_GET['order'] == $Cur || (!isset($_GET['order']) && $Cur == 'Joined')) {
|
||||
echo ' selected="selected"';
|
||||
} ?>><?= $Cur ?></option>
|
||||
} ?>><?= t('server.user.' . str_replace(' ', '_', strtolower($Cur))) ?></option>
|
||||
<? } ?>
|
||||
</select>
|
||||
<select class="Input" name="way">
|
||||
<? foreach (array_shift($WayVals) as $Cur) { ?>
|
||||
<option class="Select-option" value="<?= $Cur ?>" <? if (isset($_GET['way']) && $_GET['way'] == $Cur || (!isset($_GET['way']) && $Cur == 'Descending')) {
|
||||
echo ' selected="selected"';
|
||||
} ?>><?= $Cur ?></option>
|
||||
} ?>><?= t('server.tools.' . strtolower($Cur)) ?></option>
|
||||
<? } ?>
|
||||
</select>
|
||||
</td>
|
||||
|
||||
+79
-44
@@ -1,7 +1,7 @@
|
||||
<?
|
||||
|
||||
use Gazelle\Manager\Donation;
|
||||
use Gazelle\Torrent\TorrentSlotType;
|
||||
use Gazelle\Torrent\TorrentSlot;
|
||||
|
||||
$UserID = $_REQUEST['userid'];
|
||||
if (!is_number($UserID)) {
|
||||
@@ -55,7 +55,7 @@ if (!is_array($Paranoia)) {
|
||||
$apiToken = $DB->query(
|
||||
"
|
||||
SELECT Token FROM api_applications
|
||||
WHERE UserID = $UserID",
|
||||
WHERE UserID = $UserID"
|
||||
);
|
||||
list($apiToken) = $DB->next_record();
|
||||
|
||||
@@ -67,8 +67,12 @@ function paranoia_level($Setting) {
|
||||
|
||||
function display_paranoia($FieldName) {
|
||||
$Level = paranoia_level($FieldName);
|
||||
print "\t\t\t\t\t<input id=\"input-p_{$FieldName}_c\" type=\"checkbox\" name=\"p_{$FieldName}_c\"" . checked($Level >= 1) . " onchange=\"AlterParanoia()\" />\n<label for=\"input-p_{$FieldName}_c\">" . t('server.user.show_count') . "</label>" . "\n";
|
||||
print "\t\t\t\t\t<input id=\"input-p_{$FieldName}_l\" type=\"checkbox\" name=\"p_{$FieldName}_l\"" . checked($Level >= 2) . " onchange=\"AlterParanoia()\" />\n<label for=\"input-p_{$FieldName}_l\">" . t('server.user.show_list') . "</label>" . "\n";
|
||||
print "<div class=\"Checkbox\">";
|
||||
print "\t\t\t\t\t<input class=\"Input\" id=\"input-p_{$FieldName}_c\" type=\"checkbox\" name=\"p_{$FieldName}_c\"" . checked($Level >= 1) . " onchange=\"AlterParanoia()\" />\n<label for=\"input-p_{$FieldName}_c\">" . t('server.user.show_count') . "</label>" . "\n";
|
||||
print "</div>";
|
||||
print "<div class=\"Checkbox\">";
|
||||
print "\t\t\t\t\t<input class=\"CheckBox-label\" id=\"input-p_{$FieldName}_l\" type=\"checkbox\" name=\"p_{$FieldName}_l\"" . checked($Level >= 2) . " onchange=\"AlterParanoia()\" />\n<label for=\"input-p_{$FieldName}_l\">" . t('server.user.show_list') . "</label>" . "\n";
|
||||
print "</div>";
|
||||
}
|
||||
|
||||
function checked($Checked) {
|
||||
@@ -283,7 +287,7 @@ echo $Val->GenerateJS('userform');
|
||||
<strong><?= t('server.user.donorforum_4') ?>:</strong>
|
||||
<?
|
||||
$Previews = [
|
||||
['Codec' => 'x265', 'Source' => 'WEB', 'Resolution' => '720p', 'Container' => 'MKV', 'Processing' => 'Encode', 'Slot' => TorrentSlotType::EnglishQuality, 'RemasterTitle' => 'dolby_vision / dolby_atmos / masters_of_cinema', 'ReleaseGroup' => 'Release Group'],
|
||||
['Codec' => 'x265', 'Source' => 'WEB', 'Resolution' => '720p', 'Container' => 'MKV', 'Processing' => 'Encode', 'Slot' => TorrentSlot::TorrentSlotTypeEnglishQuality, 'RemasterTitle' => 'dolby_vision / dolby_atmos / masters_of_cinema', 'ReleaseGroup' => 'Release Group'],
|
||||
];
|
||||
?>
|
||||
<? foreach ($Previews as $Preview) {
|
||||
@@ -853,8 +857,10 @@ echo $Val->GenerateJS('userform');
|
||||
<tr class="Form-row" id="para_lastseen_tr">
|
||||
<td class="Form-label" data-tooltip="<?= t('server.user.st_lastseen_title') ?>"><strong><?= t('server.user.st_lastactivity') ?></strong></td>
|
||||
<td class="Form-inputs">
|
||||
<input id="input-p_lastseen" type="checkbox" name="p_lastseen" <?= checked(!in_array('lastseen', $Paranoia)) ?> />
|
||||
<label for="input-p_lastseen"> <?= t('server.user.st_lastseen') ?></label>
|
||||
<div class="Checkbox">
|
||||
<input id="input-p_lastseen" class="Input" type="checkbox" name="p_lastseen" <?= checked(!in_array('lastseen', $Paranoia)) ?> />
|
||||
<label class="Checkbox-label" for="input-p_lastseen"> <?= t('server.user.st_lastseen') ?></label>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="Form-row" id="para_presets_tr">
|
||||
@@ -887,21 +893,31 @@ echo $Val->GenerateJS('userform');
|
||||
$RatioChecked = checked(!in_array('ratio', $Paranoia));
|
||||
$BonusCheched = checked(!in_array('bonuspoints', $Paranoia));
|
||||
?>
|
||||
<input id="input-p_uploaded" type="checkbox" name="p_uploaded" onchange="AlterParanoia();" <?= $UploadChecked ?> />
|
||||
<label for="input-p_uploaded"> <?= t('server.user.para_uploaded') ?></label>
|
||||
<input id="input-p_downloaded" type="checkbox" name="p_downloaded" onchange="AlterParanoia();" <?= $DownloadChecked ?> />
|
||||
<label for="input-p_downloaded"> <?= t('server.user.para_downloaded') ?></label>
|
||||
<input id="input-p_ratio" type="checkbox" name="p_ratio" onchange="AlterParanoia();" <?= $RatioChecked ?> />
|
||||
<label for="input-p_ratio"> <?= t('server.user.para_ratio') ?></label>
|
||||
<input id="input-p_bonuspoints" type="checkbox" name="p_bonuspoints" <?= $BonusCheched ?> />
|
||||
<label for="input-p_bonuspoints"> <?= t('server.user.para_bonus') ?></label>
|
||||
<div class="Checkbox">
|
||||
<input class="Input" id="input-p_uploaded" type="checkbox" name="p_uploaded" onchange="AlterParanoia();" <?= $UploadChecked ?> />
|
||||
<label class="Checkbox-label" for="input-p_uploaded"> <?= t('server.user.para_uploaded') ?></label>
|
||||
</div>
|
||||
<div class="Checkbox">
|
||||
<input class="Input" id="input-p_downloaded" type="checkbox" name="p_downloaded" onchange="AlterParanoia();" <?= $DownloadChecked ?> />
|
||||
<label class="Checkbox-label" for="input-p_downloaded"> <?= t('server.user.para_downloaded') ?></label>
|
||||
</div>
|
||||
<div class="Checkbox">
|
||||
<input class="Input" id="input-p_ratio" type="checkbox" name="p_ratio" onchange="AlterParanoia();" <?= $RatioChecked ?> />
|
||||
<label class="Checkbox-label" for="input-p_ratio"> <?= t('server.user.para_ratio') ?></label>
|
||||
</div>
|
||||
<div class="Checkbox">
|
||||
<input class="Input" id="input-p_bonuspoints" type="checkbox" name="p_bonuspoints" <?= $BonusCheched ?> />
|
||||
<label class="Checkbox-label" for="input-p_bonuspoints"> <?= t('server.user.para_bonus') ?></label>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="Form-row" id="para_reqratio_tr">
|
||||
<td class="Form-label"><strong><?= t('server.user.para_reratio') ?></strong></td>
|
||||
<td class="Form-inputs">
|
||||
<input id="input-p_requiredratio" type="checkbox" name="p_requiredratio" <?= checked(!in_array('requiredratio', $Paranoia)) ?> />
|
||||
<label for="input-p_requiredratio"> <?= t('server.user.para_reratio') ?></label>
|
||||
<div class="Checkbox">
|
||||
<input class="Input" id="input-p_requiredratio" type="checkbox" name="p_requiredratio" <?= checked(!in_array('requiredratio', $Paranoia)) ?> />
|
||||
<label class="Checkbox-label" for="input-p_requiredratio"> <?= t('server.user.para_reratio') ?></label>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="Form-row" id="para_comments_tr">
|
||||
@@ -930,12 +946,18 @@ echo $Val->GenerateJS('userform');
|
||||
$RequestsFilledBountyChecked = checked(!in_array('requestsfilled_bounty', $Paranoia));
|
||||
$RequestsFilledListChecked = checked(!in_array('requestsfilled_list', $Paranoia));
|
||||
?>
|
||||
<input id="input-p_requestsfilled_count" type="checkbox" name="p_requestsfilled_count" onchange="AlterParanoia();" <?= $RequestsFilledCountChecked ?> />
|
||||
<label for="input-p_requestsfilled_count"> <?= t('server.user.show_count') ?></label>
|
||||
<input id="input-p_requestsfilled_bounty" type="checkbox" name="p_requestsfilled_bounty" onchange="AlterParanoia();" <?= $RequestsFilledBountyChecked ?> />
|
||||
<label for="input-p_requestsfilled_bounty"> <?= t('server.user.show_bounty') ?></label>
|
||||
<input id="input-p_requestsfilled_list" type="checkbox" name="p_requestsfilled_list" onchange="AlterParanoia();" <?= $RequestsFilledListChecked ?> />
|
||||
<label for="input-p_requestsfilled_list"> <?= t('server.user.show_list') ?></label>
|
||||
<div class="Checkbox">
|
||||
<input class="Input" id="input-p_requestsfilled_count" type="checkbox" name="p_requestsfilled_count" onchange="AlterParanoia();" <?= $RequestsFilledCountChecked ?> />
|
||||
<label class="Checkbox-label" for="input-p_requestsfilled_count"> <?= t('server.user.show_count') ?></label>
|
||||
</div>
|
||||
<div class="Checkbox">
|
||||
<input class="Input" id="input-p_requestsfilled_bounty" type="checkbox" name="p_requestsfilled_bounty" onchange="AlterParanoia();" <?= $RequestsFilledBountyChecked ?> />
|
||||
<label class="Checkbox-label" for="input-p_requestsfilled_bounty"> <?= t('server.user.show_bounty') ?></label>
|
||||
</div>
|
||||
<div class="Checkbox">
|
||||
<input class="Input" id="input-p_requestsfilled_list" type="checkbox" name="p_requestsfilled_list" onchange="AlterParanoia();" <?= $RequestsFilledListChecked ?> />
|
||||
<label class="Checkbox-label" for="input-p_requestsfilled_list"> <?= t('server.user.show_list') ?></label>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="Form-row" id="para_reqvote_tr">
|
||||
@@ -946,12 +968,18 @@ echo $Val->GenerateJS('userform');
|
||||
$RequestsVotedBountyChecked = checked(!in_array('requestsvoted_bounty', $Paranoia));
|
||||
$RequestsVotedListChecked = checked(!in_array('requestsvoted_list', $Paranoia));
|
||||
?>
|
||||
<input id="input-p_requestsvoted_count" type="checkbox" name="p_requestsvoted_count" onchange="AlterParanoia();" <?= $RequestsVotedCountChecked ?> />
|
||||
<label for="input-p_requestsvoted_count"> <?= t('server.user.show_count') ?></label>
|
||||
<input id="input-p_requestsvoted_bounty" type="checkbox" name="p_requestsvoted_bounty" onchange="AlterParanoia();" <?= $RequestsVotedBountyChecked ?> />
|
||||
<label for="input-p_requestsvoted_bounty"> <?= t('server.user.show_bounty') ?></label>
|
||||
<input id="input-p_requestsvoted_list" type="checkbox" name="p_requestsvoted_list" onchange="AlterParanoia();" <?= $RequestsVotedListChecked ?> />
|
||||
<label for="input-p_requestsvoted_list"> <?= t('server.user.show_list') ?></label>
|
||||
<div class="Checkbox">
|
||||
<input class="Input" id="input-p_requestsvoted_count" type="checkbox" name="p_requestsvoted_count" onchange="AlterParanoia();" <?= $RequestsVotedCountChecked ?> />
|
||||
<label class="Checkbox-label" for="input-p_requestsvoted_count"> <?= t('server.user.show_count') ?></label>
|
||||
</div>
|
||||
<div class="Checkbox">
|
||||
<input class="Input" id="input-p_requestsvoted_bounty" type="checkbox" name="p_requestsvoted_bounty" onchange="AlterParanoia();" <?= $RequestsVotedBountyChecked ?> />
|
||||
<label class="Checkbox-label" for="input-p_requestsvoted_bounty"> <?= t('server.user.show_bounty') ?></label>
|
||||
</div>
|
||||
<div class="Checkbox">
|
||||
<input class="Input" id="input-p_requestsvoted_list" type="checkbox" name="p_requestsvoted_list" onchange="AlterParanoia();" <?= $RequestsVotedListChecked ?> />
|
||||
<label class="Checkbox-label" for="input-p_requestsvoted_list"> <?= t('server.user.show_list') ?></label>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="Form-row" id="para_upltor_tr">
|
||||
@@ -1002,8 +1030,10 @@ echo $Val->GenerateJS('userform');
|
||||
<tr class="Form-row" id="para_emailshowtotc_tr">
|
||||
<td class="Form-label" data-tooltip="<?= t('server.user.para_emailshowtotc_title') ?>"><strong><?= t('server.user.para_emailshowtotc') ?></strong></td>
|
||||
<td class="Form-inputs">
|
||||
<input id="input-p_emailshowtotc" type="checkbox" name="p_emailshowtotc" <?= checked(in_array('emailshowtotc', $Paranoia)) ?> />
|
||||
<label for="input-p_emailshowtotc"> <?= t('server.user.para_emailshowtotc_label') ?></label>
|
||||
<div class="Checkbox">
|
||||
<input class="Input" id="input-p_emailshowtotc" type="checkbox" name="p_emailshowtotc" <?= checked(in_array('emailshowtotc', $Paranoia)) ?> />
|
||||
<label class="Checkbox-label" for="input-p_emailshowtotc"> <?= t('server.user.para_emailshowtotc_label') ?></label>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<?
|
||||
@@ -1016,8 +1046,10 @@ echo $Val->GenerateJS('userform');
|
||||
<tr class="Form-row" id="para_invited_tr">
|
||||
<td class="Form-label" data-tooltip="This option controls the display of your <?= CONFIG['SITE_NAME'] ?> invitees."><strong><?= t('server.user.para_invited') ?></strong></td>
|
||||
<td class="Form-inputs">
|
||||
<input id="input-p_invitedcount" type="checkbox" name="p_invitedcount" <?= checked(!in_array('invitedcount', $Paranoia)) ?> />
|
||||
<label for="input-p_invitedcount"> <?= t('server.user.show_count') ?></label>
|
||||
<div class="Checkbox">
|
||||
<input class="Input" id="input-p_invitedcount" type="checkbox" name="p_invitedcount" <?= checked(!in_array('invitedcount', $Paranoia)) ?> />
|
||||
<label class="Checkbox-label" for="input-p_invitedcount"> <?= t('server.user.show_count') ?></label>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<?
|
||||
@@ -1030,8 +1062,10 @@ echo $Val->GenerateJS('userform');
|
||||
<tr class="Form-row" id="para_artistsadded_tr">
|
||||
<td class="Form-label" data-tooltip="<?= t('server.user.para_artistsadded_title') ?>"><strong><?= t('server.user.para_artistsadded') ?></strong></td>
|
||||
<td class="Form-inputs">
|
||||
<input id="input-p_artistsadded" type="checkbox" name="p_artistsadded" <?= checked(!in_array('artistsadded', $Paranoia)) ?> />
|
||||
<label for="input-p_artistsadded"> <?= t('server.user.show_count') ?></label>
|
||||
<div class="Checkbox">
|
||||
<input class="Input" id="input-p_artistsadded" type="checkbox" name="p_artistsadded" <?= checked(!in_array('artistsadded', $Paranoia)) ?> />
|
||||
<label class="Checkbox-label" for="input-p_artistsadded"> <?= t('server.user.show_count') ?></label>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<?
|
||||
@@ -1040,8 +1074,10 @@ echo $Val->GenerateJS('userform');
|
||||
<tr class="Form-row" id="para_badgedisplay_tr">
|
||||
<td class="Form-label" data-tooltip="para_badgedisplay_title"><strong><?= t('server.user.para_badgedisplay') ?></strong></td>
|
||||
<td class="Form-inputs">
|
||||
<input id="input-p_badgedisplay" type="checkbox" name="p_badgedisplay" <?= checked(!in_array('badgedisplay', $Paranoia)) ?> />
|
||||
<label for="input-p_badgedisplay"> <?= t('server.user.para_badgedisplay_label') ?></label>
|
||||
<div class="Checkbox">
|
||||
<input class="Input" id="input-p_badgedisplay" type="checkbox" name="p_badgedisplay" <?= checked(!in_array('badgedisplay', $Paranoia)) ?> />
|
||||
<label class="Checkbox-label" for="input-p_badgedisplay"> <?= t('server.user.para_badgedisplay_label') ?></label>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<?
|
||||
@@ -1061,11 +1097,10 @@ echo $Val->GenerateJS('userform');
|
||||
<tr class="Form-row" id="acc_resetpk_tr">
|
||||
<td class="Form-label" data-tooltip-interactive="<?= t('server.user.resetpk_title') ?>"><strong><?= t('server.user.resetpk') ?></strong></td>
|
||||
<td class="Form-inputs">
|
||||
<div>
|
||||
<input id="input-resetpasskey" type="checkbox" name="resetpasskey" id="resetpasskey" />
|
||||
<label for="input-resetpasskey"><?= t('server.user.resetpk_note') ?></label>
|
||||
<div class="Checkbox">
|
||||
<input class="Input" id="input-resetpasskey" type="checkbox" name="resetpasskey" id="resetpasskey" />
|
||||
<label class="Checkbox-label" for="input-resetpasskey"><?= t('server.user.resetpk_note') ?></label>
|
||||
</div>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="Form-row" id="acc_irckey_tr">
|
||||
@@ -1149,9 +1184,9 @@ echo $Val->GenerateJS('userform');
|
||||
<tr class="Form-row" id="api_token">
|
||||
<td class="Form-label"><strong><?= t('server.user.api') ?></strong></td>
|
||||
<td class="Form-inputs">
|
||||
<div>
|
||||
<input id="input-resetApiKey" type="checkbox" name="resetApiKey" id="resetApiKey" />
|
||||
<label for="input-resetApiKey"><?= t('server.user.api_note') ?></label>
|
||||
<div class="Checkbox">
|
||||
<input class="Input" id="input-resetApiKey" type="checkbox" name="resetApiKey" id="resetApiKey" />
|
||||
<label class="Checkbox-label" for="input-resetApiKey"><?= t('server.user.api_note') ?></label>
|
||||
</div>
|
||||
<?php if (isset($apiToken)) { ?>
|
||||
<div class="FormOneLine">
|
||||
|
||||
@@ -25,7 +25,7 @@ $DeleteKeys = false;
|
||||
// Variables for database input
|
||||
$Class = (int)$_POST['Class'];
|
||||
$Username = db_string($_POST['Username']);
|
||||
$Title = db_string(Text::full_format($_POST['Title']));
|
||||
$Title = db_string($_POST['Title']);
|
||||
$Donor = isset($_POST['Donor']) ? 1 : 0;
|
||||
$Artist = isset($_POST['Artist']) ? 1 : 0;
|
||||
$SecondaryClasses = isset($_POST['secondary_classes']) ? $_POST['secondary_classes'] : array();
|
||||
@@ -386,13 +386,14 @@ if ($Username !== $Cur['Username'] && check_perms('users_edit_usernames', $Cur['
|
||||
$LightUpdates['Username'] = $Username;
|
||||
}
|
||||
|
||||
if ($Title != db_string(display_str($Cur['Title'])) && check_perms('users_edit_titles')) {
|
||||
if ($Title != db_string($Cur['Title']) && check_perms('users_edit_titles')) {
|
||||
// Using the unescaped value for the test to avoid confusion
|
||||
if (mb_strlen($_POST['Title']) > 2048) {
|
||||
error("Custom titles have a maximum length of 2,048 characters.");
|
||||
header("Location: user.php?id=$UserID");
|
||||
die();
|
||||
} else {
|
||||
|
||||
$UpdateSet[] = "Title = '$Title'";
|
||||
$EditSummary[] = "title changed to [code]{$Title}[/code]";
|
||||
$LightUpdates['Title'] = $_POST['Title'];
|
||||
|
||||
@@ -1,3 +1,11 @@
|
||||
ul.List li {
|
||||
margin-left: 15px;
|
||||
list-style-type: disc;
|
||||
}
|
||||
ol.List li {
|
||||
margin-left: 15px;
|
||||
list-style-type: decimal;
|
||||
}
|
||||
.MenuList .SubMenu li {
|
||||
margin-left: 15px;
|
||||
position: relative;
|
||||
|
||||
@@ -1,12 +1,3 @@
|
||||
.SearchInbox-row {
|
||||
display: flex;
|
||||
gap: var(--global-space-default);
|
||||
}
|
||||
|
||||
.SearchInbox-actions {
|
||||
margin-left: auto;
|
||||
}
|
||||
|
||||
#inbox div.box.vertical_space {
|
||||
background: var(--Box-background);
|
||||
color: var(--Box-color);
|
||||
|
||||
@@ -140,7 +140,7 @@ globalapp.requestAddTag = function requestAddTag() {
|
||||
}
|
||||
}
|
||||
|
||||
globalapp.requestToggle = function reqeustToggle(id, disable) {
|
||||
globalapp.allToggle = function allToggle(id, disable) {
|
||||
var arr = document.getElementsByName(id + '[]')
|
||||
var master = $('#toggle_' + id).raw().checked
|
||||
for (const element of arr) {
|
||||
|
||||
@@ -7,7 +7,15 @@ const BD = ['Blu-ray']
|
||||
const SELECT_HAS_OTHER_INPUT = ['Other']
|
||||
const SELECT_REQUIRED = ['', '---']
|
||||
const IMDB_ID_PATTERN = /tt\d+/
|
||||
const IMAGE_HOSTS = ['kshare.club', 'pixhost.to', 'ptpimg.me', 'img.pterclub.com', 'yes.ilikeshots.club', 'imgbox.com']
|
||||
const IMAGE_HOSTS = [
|
||||
'kshare.club',
|
||||
'pixhost.to',
|
||||
'ptpimg.me',
|
||||
'img.pterclub.com',
|
||||
'yes.ilikeshots.club',
|
||||
'imgbox.com',
|
||||
's3.pterclub.com',
|
||||
]
|
||||
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
registerValidation()
|
||||
|
||||
@@ -71,7 +71,7 @@ Before you upload anything, if you are still unsure of what a rule means, PLEASE
|
||||
<Heading3 id="2.2">2.2. Torrent Description</Heading3>
|
||||
|
||||
<Heading4 id="2.2.1">2.2.1. **Screenshots: You should provide at least 3 display resolution PNG screenshots in "Torrent Description" area at upload page. They have to be saved at [official image host](upload.php?action=image).** You can also use [pixhost.to](https://pixhost.to), [ptpimg.me](https://ptpimg.me), [yes.ilikeshots.club](https://yes.ilikeshots.club/), <a
|
||||
href='https://imgbox.com'>imgbox.com</a> or [img.pterclub.com](https://img.pterclub.com) as an alternative.</Heading4>
|
||||
href='https://imgbox.com'>imgbox.com</a> or [s3.pterclub.com](https://s3.pterclub.com) as an alternative.</Heading4>
|
||||
|
||||
<Heading4 id="2.2.2">2.2.2. **Mediainfo: You must use MediaInfo or BDInfo for Blu-ray discs to provide the specifications of your uploads. You have to provide information for each if there are multiple video files in your torrents. Editing MediaInfo log is strictly forbidden.** Please report it if you sure it is not right.</Heading4>
|
||||
|
||||
|
||||
@@ -6448,7 +6448,7 @@ server.user.equal: |-
|
||||
server.user.equals: |-
|
||||
Equals
|
||||
server.user.ex_style: |-
|
||||
External stylesheet URL
|
||||
External CSS URL
|
||||
server.user.ex_style_title: |-
|
||||
Providing a link to an externally-hosted stylesheet will override your default stylesheet selection.
|
||||
server.user.expand: |-
|
||||
@@ -8439,3 +8439,5 @@ server.wiki.created: |-
|
||||
Created
|
||||
server.wiki.edited: |-
|
||||
Edited
|
||||
server.user.snatches: |-
|
||||
Snatches
|
||||
|
||||
@@ -6430,7 +6430,7 @@ server.user.equal: |-
|
||||
server.user.equals: |-
|
||||
É igual a
|
||||
server.user.ex_style: |-
|
||||
URL da folha de estilos externa
|
||||
URL do CSS externo
|
||||
server.user.ex_style_title: |-
|
||||
Fornecer um link para uma folha de estilos hospedada externamente irá substituir sua seleção de folha de estilo padrão.
|
||||
server.user.expand: |-
|
||||
@@ -8283,3 +8283,5 @@ client.stats.user_platform_distribution: |-
|
||||
Plataforma de Usuário Distribuição
|
||||
client.stats.peers: |-
|
||||
Peers
|
||||
server.user.snatches: |-
|
||||
Encontrado
|
||||
|
||||
@@ -539,7 +539,7 @@ server.bonus.about_bonus_points: |-
|
||||
server.bonus.bbcode_allowed: |-
|
||||
允许 BBCode
|
||||
server.bonus.bonus_point_rates: |-
|
||||
积分计算
|
||||
积分速率
|
||||
server.bonus.bonus_points_purchase_history: |-
|
||||
积分消费历史
|
||||
server.bonus.bonus_points_shop: |-
|
||||
@@ -6328,7 +6328,7 @@ server.user.equal: |-
|
||||
server.user.equals: |-
|
||||
匹配
|
||||
server.user.ex_style: |-
|
||||
外部样式链接
|
||||
外部 CSS 链接
|
||||
server.user.ex_style_title: |-
|
||||
填写外部 Stylesheet 样式链接可覆盖你所选择的预置样式。
|
||||
server.user.expand: |-
|
||||
@@ -6412,9 +6412,9 @@ server.user.ip_address: |-
|
||||
server.user.ip_history: |-
|
||||
IP 历史
|
||||
server.user.api: |-
|
||||
接口密钥
|
||||
API 密钥
|
||||
server.user.api_note: |-
|
||||
重置您的 API 密钥。您必须在使用旧 API 的所有应用程序中更新 API。
|
||||
重置你的 API 密钥,重置后所有在使用旧 API 密钥的应用都需要更新。
|
||||
server.user.api_copy: |-
|
||||
复制到剪贴板
|
||||
server.user.irc: |-
|
||||
@@ -8299,3 +8299,5 @@ server.wiki.created: |-
|
||||
创建时间
|
||||
server.wiki.edited: |-
|
||||
编辑时间
|
||||
server.user.snatches: |-
|
||||
已完成
|
||||
|
||||
Reference in New Issue
Block a user