[admin] set torrent pos_state_until

This commit is contained in:
xiaomlove
2022-09-18 03:33:13 +08:00
parent 29fc44e555
commit 464880f1fb
3 changed files with 34 additions and 9 deletions
@@ -155,13 +155,17 @@ class TorrentResource extends Resource
->label(__('label.torrent.pos_state')) ->label(__('label.torrent.pos_state'))
->options(Torrent::listPosStates(true)) ->options(Torrent::listPosStates(true))
->required() ->required()
,
Forms\Components\DateTimePicker::make('pos_state_until')
->label(__('label.deadline'))
,
]) ])
->icon('heroicon-o-arrow-circle-up') ->icon('heroicon-o-arrow-circle-up')
->action(function (Collection $records, array $data) { ->action(function (Collection $records, array $data) {
$idArr = $records->pluck('id')->toArray(); $idArr = $records->pluck('id')->toArray();
try { try {
$torrentRep = new TorrentRepository(); $torrentRep = new TorrentRepository();
$torrentRep->setPosState($idArr, $data['pos_state']); $torrentRep->setPosState($idArr, $data['pos_state'], $data['pos_state_until']);
} catch (\Exception $exception) { } catch (\Exception $exception) {
do_log($exception->getMessage() . $exception->getTraceAsString(), 'error'); do_log($exception->getMessage() . $exception->getTraceAsString(), 'error');
Filament::notify('danger', class_basename($exception)); Filament::notify('danger', class_basename($exception));
+16 -6
View File
@@ -3,6 +3,7 @@
namespace App\Models; namespace App\Models;
use App\Repositories\TagRepository; use App\Repositories\TagRepository;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Casts\Attribute; use Illuminate\Database\Eloquent\Casts\Attribute;
use JeroenG\Explorer\Application\Explored; use JeroenG\Explorer\Application\Explored;
use Laravel\Scout\Searchable; use Laravel\Scout\Searchable;
@@ -15,7 +16,7 @@ class Torrent extends NexusModel
'size', 'added', 'type', 'numfiles', 'owner', 'nfo', 'sp_state', 'promotion_time_type', 'size', 'added', 'type', 'numfiles', 'owner', 'nfo', 'sp_state', 'promotion_time_type',
'promotion_until', 'anonymous', 'url', 'pos_state', 'cache_stamp', 'picktype', 'picktime', 'promotion_until', 'anonymous', 'url', 'pos_state', 'cache_stamp', 'picktype', 'picktime',
'last_reseed', 'pt_gen', 'technical_info', 'leechers', 'seeders', 'cover', 'last_action', 'last_reseed', 'pt_gen', 'technical_info', 'leechers', 'seeders', 'cover', 'last_action',
'times_completed', 'approval_status', 'banned', 'visible', 'times_completed', 'approval_status', 'banned', 'visible', 'pos_state_until',
]; ];
private static $globalPromotionState; private static $globalPromotionState;
@@ -30,11 +31,13 @@ class Torrent extends NexusModel
'added' => 'datetime', 'added' => 'datetime',
'pt_gen' => 'array', 'pt_gen' => 'array',
'promotion_until' => 'datetime', 'promotion_until' => 'datetime',
'pos_state_until' => 'datetime',
]; ];
public static $commentFields = [ public static $commentFields = [
'id', 'name', 'added', 'visible', 'banned', 'owner', 'sp_state', 'pos_state', 'hr', 'picktype', 'picktime', 'id', 'name', 'added', 'visible', 'banned', 'owner', 'sp_state', 'pos_state', 'hr', 'picktype', 'picktime',
'last_action', 'leechers', 'seeders', 'times_completed', 'views', 'size', 'cover', 'anonymous', 'approval_status' 'last_action', 'leechers', 'seeders', 'times_completed', 'views', 'size', 'cover', 'anonymous', 'approval_status',
'pos_state_until'
]; ];
public static $basicRelations = [ public static $basicRelations = [
@@ -193,11 +196,18 @@ class Torrent extends NexusModel
return $spState; return $spState;
} }
protected function posStateText(): Attribute protected function getPosStateTextAttribute()
{ {
return new Attribute( $text = nexus_trans('torrent.pos_state_' . $this->pos_state);
get: fn($value, $attributes) => nexus_trans('torrent.pos_state_' . $attributes['pos_state']) if ($this->pos_state != Torrent::POS_STATE_STICKY_NONE) {
); if ($this->pos_state_until) {
$append = format_datetime($this->pos_state_until);
} else {
$append = nexus_trans('label.permanent');
}
$text .= "($append)";
}
return $text;
} }
protected function approvalStatusText(): Attribute protected function approvalStatusText(): Attribute
+13 -2
View File
@@ -598,11 +598,22 @@ class TorrentRepository extends BaseRepository
} }
public function setPosState($id, $posState): int public function setPosState($id, $posState, $posStateUntil = null): int
{ {
user_can('torrentsticky', true); user_can('torrentsticky', true);
if ($posState == Torrent::POS_STATE_STICKY_NONE) {
$posStateUntil = null;
}
if ($posStateUntil && Carbon::parse($posStateUntil)->lte(now())) {
$posState = Torrent::POS_STATE_STICKY_NONE;
$posStateUntil = null;
}
$update = [
'pos_state' => $posState,
'pos_state_until' => $posStateUntil,
];
$idArr = Arr::wrap($id); $idArr = Arr::wrap($id);
return Torrent::query()->whereIn('id', $idArr)->update(['pos_state' => $posState]); return Torrent::query()->whereIn('id', $idArr)->update($update);
} }
public function buildUploadFieldInput($name, $value, $noteText, $btnText): string public function buildUploadFieldInput($name, $value, $noteText, $btnText): string