schema([
//
]);
}
public static function table(Table $table): Table
{
return $table
->columns([
Tables\Columns\TextColumn::make('id')->sortable(),
Tables\Columns\TextColumn::make('basic_category.name')->label(__('label.torrent.category')),
Tables\Columns\TextColumn::make('name')->formatStateUsing(function (Torrent $record) {
$name = sprintf(
'
',
Str::limit($record->name, 40)
);
$tags = sprintf('%s
', $record->tagsFormatted);
return new HtmlString('' . $name . $tags . '
');
}),
Tables\Columns\TextColumn::make('posStateText')->label(__('label.torrent.pos_state')),
Tables\Columns\TextColumn::make('spStateText')->label(__('label.torrent.sp_state')),
Tables\Columns\TextColumn::make('size')->label(__('label.torrent.size'))->formatStateUsing(fn ($state) => mksize($state)),
Tables\Columns\TextColumn::make('seeders')->label(__('label.torrent.seeders')),
Tables\Columns\TextColumn::make('leechers')->label(__('label.torrent.leechers')),
// Tables\Columns\TextColumn::make('times_completed')->label(__('label.torrent.times_completed')),
Tables\Columns\BadgeColumn::make('approval_status')
->label(__('label.torrent.approval_status'))
->colors(array_flip(Torrent::listApprovalStatus(true, 'badge_color')))
->formatStateUsing(fn ($record) => $record->approvalStatusText),
Tables\Columns\TextColumn::make('added')->label(__('label.added'))->dateTime(),
Tables\Columns\TextColumn::make('user.username')
->label(__('label.user.label'))
->url(fn ($record) => sprintf('/userdetails.php?id=%s', $record->owner))
->openUrlInNewTab(true)
,
])
->defaultSort('id', 'desc')
->filters([
Tables\Filters\SelectFilter::make('approval_status')
->options(Torrent::listApprovalStatus(true))
->label(__('label.torrent.approval_status')),
Tables\Filters\SelectFilter::make('pos_state')
->options(Torrent::listPosStates(true))
->label(__('label.torrent.pos_state')),
Tables\Filters\SelectFilter::make('sp_state')
->options(Torrent::listPromotionTypes(true))
->label(__('label.torrent.sp_state')),
])
->actions([
// Tables\Actions\EditAction::make(),
Tables\Actions\Action::make('approval')
->label(__('admin.resources.torrent.action_approval'))
->form([
Forms\Components\Radio::make('approval_status')
->label(__('label.torrent.approval_status'))
->inline()
->required()
->options(Torrent::listApprovalStatus(true))
,
Forms\Components\Textarea::make('comment')->label(__('label.comment')),
])
->action(function (Torrent $record, array $data) {
$torrentRep = new TorrentRepository();
try {
$data['torrent_id'] = $record->id;
$torrentRep->approval(Auth::user(), $data);
} catch (\Exception $exception) {
do_log($exception->getMessage(), 'error');
}
})
])
->bulkActions([
// Tables\Actions\DeleteBulkAction::make(),
Tables\Actions\BulkAction::make('posState')
->label(__('admin.resources.torrent.bulk_action_pos_state'))
->form([
Forms\Components\Select::make('pos_state')
->label(__('label.torrent.pos_state'))
->options(Torrent::listPosStates(true))
])
->icon('heroicon-o-arrow-circle-up')
->action(function (Collection $records, array $data) {
$idArr = $records->pluck('id')->toArray();
Torrent::query()->whereIn('id', $idArr)->update(['pos_state' => $data['pos_state']]);
})
->deselectRecordsAfterCompletion(),
Tables\Actions\BulkAction::make('remove_tag')
->label(__('admin.resources.torrent.bulk_action_remove_tag'))
->requiresConfirmation()
->icon('heroicon-o-minus-circle')
->action(function (Collection $records) {
$idArr = $records->pluck('id')->toArray();
TorrentTag::query()->whereIn('torrent_id', $idArr)->delete();
})
->deselectRecordsAfterCompletion(),
Tables\Actions\BulkAction::make('attach_tag')
->label(__('admin.resources.torrent.bulk_action_attach_tag'))
->form([
Forms\Components\CheckboxList::make('tags')
->label(__('label.tag.label'))
->columns(4)
->options(TagRepository::createBasicQuery()->pluck('name', 'id')->toArray()),
])
->icon('heroicon-o-tag')
->action(function (Collection $records, array $data) {
if (empty($data['tags'])) {
return;
}
$insert = $torrentIdArr = [];
$time = now()->toDateTimeString();
foreach ($records as $torrent) {
$torrentIdArr[] = $torrent->id;
foreach ($data['tags'] as $tagId) {
$insert[] = [
'torrent_id' => $torrent->id,
'tag_id' => $tagId,
'created_at' => $time,
'updated_at' => $time,
];
}
}
TorrentTag::query()->whereIn('torrent_id', $torrentIdArr)->delete();
TorrentTag::query()->insert($insert);
})
->deselectRecordsAfterCompletion(),
]);
}
public static function getEloquentQuery(): Builder
{
return parent::getEloquentQuery()->with(['user', 'basic_category', 'tags']);
}
public static function getRelations(): array
{
return [
//
];
}
public static function getPages(): array
{
return [
'index' => Pages\ListTorrents::route('/'),
'create' => Pages\CreateTorrent::route('/create'),
'edit' => Pages\EditTorrent::route('/{record}/edit'),
];
}
}