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( '
%s
', 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'), ]; } }