diff --git a/app/Constants/FeatureConstants.php b/app/Constants/FeatureConstants.php index 9019777dd..612fe3131 100644 --- a/app/Constants/FeatureConstants.php +++ b/app/Constants/FeatureConstants.php @@ -15,6 +15,8 @@ class FeatureConstants final public const AUDIO_BITRATE_RESTRICTION = 'audio_bitrate_restriction'; + final public const IGNORE_ALL_FILE_VALIDATIONS = 'ignore_all_file_validations'; + final public const NULL_SCOPE = '__laravel_null'; final public const REQUIRED_ENCODER_VERSION = 'required_encoder_version'; diff --git a/app/Filament/Actions/BaseAction.php b/app/Filament/Actions/BaseAction.php new file mode 100644 index 000000000..9869f3872 --- /dev/null +++ b/app/Filament/Actions/BaseAction.php @@ -0,0 +1,28 @@ +requiresConfirmation(); + } +} \ No newline at end of file diff --git a/app/Filament/Actions/Discord/DiscordThreadAction.php b/app/Filament/Actions/Discord/DiscordThreadAction.php index 585bc441a..211bce379 100644 --- a/app/Filament/Actions/Discord/DiscordThreadAction.php +++ b/app/Filament/Actions/Discord/DiscordThreadAction.php @@ -5,16 +5,16 @@ namespace App\Filament\Actions\Discord; use App\Actions\Discord\DiscordThreadAction as DiscordThreadActionAction; +use App\Filament\Actions\BaseAction; +use App\Models\Discord\DiscordThread; use App\Models\Wiki\Anime; use Filament\Forms\Components\TextInput; use Filament\Forms\Form; -use Filament\Tables\Actions\Action; -use Illuminate\Database\Eloquent\Model; /** * Class DiscordThreadAction. */ -class DiscordThreadAction extends Action +class DiscordThreadAction extends BaseAction { /** * Initial setup for the action. @@ -25,6 +25,11 @@ protected function setUp(): void { parent::setUp(); + $this->label(__('filament.actions.anime.discord.thread.name')); + $this->icon('heroicon-o-chat-bubble-left-right'); + + $this->authorize('create', DiscordThread::class); + $this->fillForm(fn (Anime $record): array => ['name' => $record->getName()]); $this->action(fn (Anime $record, array $data) => (new DiscordThreadActionAction())->handle($record, $data)); diff --git a/app/Filament/Actions/Models/AssignHashidsAction.php b/app/Filament/Actions/Models/AssignHashidsAction.php index c14d4a77f..8d4f67462 100644 --- a/app/Filament/Actions/Models/AssignHashidsAction.php +++ b/app/Filament/Actions/Models/AssignHashidsAction.php @@ -6,14 +6,15 @@ use App\Actions\Models\AssignHashidsAction as AssignHashids; use App\Contracts\Models\HasHashids; +use App\Filament\Actions\BaseAction; use App\Models\BaseModel; +use App\Models\List\Playlist; use Exception; -use Filament\Tables\Actions\Action; /** * Class AssignHashidsAction. */ -class AssignHashidsAction extends Action +class AssignHashidsAction extends BaseAction { protected ?string $connection = null; @@ -26,6 +27,10 @@ protected function setUp(): void { parent::setUp(); + $this->label(__('filament.actions.models.assign_hashids.name')); + + $this->authorize('update', Playlist::class); + $this->action(fn (BaseModel $record) => $this->handle($record)); } diff --git a/app/Filament/Actions/Models/Auth/Permission/GiveRoleAction.php b/app/Filament/Actions/Models/Auth/Permission/GiveRoleAction.php index bbb6c780d..5cb7e8ad7 100644 --- a/app/Filament/Actions/Models/Auth/Permission/GiveRoleAction.php +++ b/app/Filament/Actions/Models/Auth/Permission/GiveRoleAction.php @@ -4,17 +4,17 @@ namespace App\Filament\Actions\Models\Auth\Permission; +use App\Filament\Actions\BaseAction; use App\Filament\Components\Fields\Select; use App\Models\Auth\Permission; use App\Models\Auth\Role; use Filament\Forms\Form; -use Filament\Tables\Actions\Action; use Illuminate\Support\Arr; /** * Class GiveRoleAction. */ -class GiveRoleAction extends Action +class GiveRoleAction extends BaseAction { final public const FIELD_ROLE = 'role'; @@ -27,6 +27,8 @@ protected function setUp(): void { parent::setUp(); + $this->label(__('filament.actions.permission.give_role.name')); + $this->action(fn (Permission $record, array $data) => $this->handle($record, $data)); } diff --git a/app/Filament/Actions/Models/Auth/Permission/RevokeRoleAction.php b/app/Filament/Actions/Models/Auth/Permission/RevokeRoleAction.php index be5f26017..71ed5a2ea 100644 --- a/app/Filament/Actions/Models/Auth/Permission/RevokeRoleAction.php +++ b/app/Filament/Actions/Models/Auth/Permission/RevokeRoleAction.php @@ -4,17 +4,17 @@ namespace App\Filament\Actions\Models\Auth\Permission; +use App\Filament\Actions\BaseAction; use App\Filament\Components\Fields\Select; use App\Models\Auth\Permission; use App\Models\Auth\Role; use Filament\Forms\Form; -use Filament\Tables\Actions\Action; use Illuminate\Support\Arr; /** * Class RevokeRoleAction. */ -class RevokeRoleAction extends Action +class RevokeRoleAction extends BaseAction { final public const FIELD_ROLE = 'role'; @@ -27,6 +27,8 @@ protected function setUp(): void { parent::setUp(); + $this->label(__('filament.actions.permission.revoke_role.name')); + $this->action(fn (Permission $record, array $data) => $this->handle($record, $data)); } diff --git a/app/Filament/Actions/Models/Auth/Role/GivePermissionAction.php b/app/Filament/Actions/Models/Auth/Role/GivePermissionAction.php index 7b3fab22c..6b3404730 100644 --- a/app/Filament/Actions/Models/Auth/Role/GivePermissionAction.php +++ b/app/Filament/Actions/Models/Auth/Role/GivePermissionAction.php @@ -4,17 +4,17 @@ namespace App\Filament\Actions\Models\Auth\Role; +use App\Filament\Actions\BaseAction; use App\Filament\Components\Fields\Select; use App\Models\Auth\Permission; use App\Models\Auth\Role; use Filament\Forms\Form; -use Filament\Tables\Actions\Action; use Illuminate\Support\Arr; /** * Class GivePermissionAction. */ -class GivePermissionAction extends Action +class GivePermissionAction extends BaseAction { final public const FIELD_PERMISSION = 'permission'; @@ -27,6 +27,8 @@ protected function setUp(): void { parent::setUp(); + $this->label(__('filament.actions.role.give_permission.name')); + $this->action(fn (Role $record, array $data) => $this->handle($record, $data)); } diff --git a/app/Filament/Actions/Models/Auth/Role/RevokePermissionAction.php b/app/Filament/Actions/Models/Auth/Role/RevokePermissionAction.php index b3c29563f..e61764af4 100644 --- a/app/Filament/Actions/Models/Auth/Role/RevokePermissionAction.php +++ b/app/Filament/Actions/Models/Auth/Role/RevokePermissionAction.php @@ -4,17 +4,17 @@ namespace App\Filament\Actions\Models\Auth\Role; +use App\Filament\Actions\BaseAction; use App\Filament\Components\Fields\Select; use App\Models\Auth\Permission; use App\Models\Auth\Role; use Filament\Forms\Form; -use Filament\Tables\Actions\Action; use Illuminate\Support\Arr; /** * Class RevokePermissionAction. */ -class RevokePermissionAction extends Action +class RevokePermissionAction extends BaseAction { final public const FIELD_PERMISSION = 'permission'; @@ -27,6 +27,8 @@ protected function setUp(): void { parent::setUp(); + $this->label(__('filament.actions.role.revoke_permission.name')); + $this->action(fn (Role $record, array $data) => $this->handle($record, $data)); } diff --git a/app/Filament/Actions/Models/Auth/User/GivePermissionAction.php b/app/Filament/Actions/Models/Auth/User/GivePermissionAction.php index f9168ecea..224a2fb5a 100644 --- a/app/Filament/Actions/Models/Auth/User/GivePermissionAction.php +++ b/app/Filament/Actions/Models/Auth/User/GivePermissionAction.php @@ -4,17 +4,17 @@ namespace App\Filament\Actions\Models\Auth\User; +use App\Filament\Actions\BaseAction; use App\Filament\Components\Fields\Select; use App\Models\Auth\Permission; use App\Models\Auth\User; use Filament\Forms\Form; -use Filament\Tables\Actions\Action; use Illuminate\Support\Arr; /** * Class GivePermissionAction. */ -class GivePermissionAction extends Action +class GivePermissionAction extends BaseAction { final public const FIELD_PERMISSION = 'permission'; @@ -27,6 +27,8 @@ protected function setUp(): void { parent::setUp(); + $this->label(__('filament.actions.user.give_permission.name')); + $this->action(fn (User $record, array $data) => $this->handle($record, $data)); } diff --git a/app/Filament/Actions/Models/Auth/User/GiveRoleAction.php b/app/Filament/Actions/Models/Auth/User/GiveRoleAction.php index 73ff83390..5d27b82c4 100644 --- a/app/Filament/Actions/Models/Auth/User/GiveRoleAction.php +++ b/app/Filament/Actions/Models/Auth/User/GiveRoleAction.php @@ -4,17 +4,17 @@ namespace App\Filament\Actions\Models\Auth\User; +use App\Filament\Actions\BaseAction; use App\Filament\Components\Fields\Select; use App\Models\Auth\Role; use App\Models\Auth\User; use Filament\Forms\Form; -use Filament\Tables\Actions\Action; use Illuminate\Support\Arr; /** * Class GiveRoleAction. */ -class GiveRoleAction extends Action +class GiveRoleAction extends BaseAction { final public const FIELD_ROLE = 'role'; @@ -27,6 +27,8 @@ protected function setUp(): void { parent::setUp(); + $this->label(__('filament.actions.user.give_role.name')); + $this->action(fn (User $record, array $data) => $this->handle($record, $data)); } diff --git a/app/Filament/Actions/Models/Auth/User/RevokePermissionAction.php b/app/Filament/Actions/Models/Auth/User/RevokePermissionAction.php index b046220c1..86515ef5e 100644 --- a/app/Filament/Actions/Models/Auth/User/RevokePermissionAction.php +++ b/app/Filament/Actions/Models/Auth/User/RevokePermissionAction.php @@ -4,17 +4,17 @@ namespace App\Filament\Actions\Models\Auth\User; +use App\Filament\Actions\BaseAction; use App\Filament\Components\Fields\Select; use App\Models\Auth\Permission; use App\Models\Auth\User; use Filament\Forms\Form; -use Filament\Tables\Actions\Action; use Illuminate\Support\Arr; /** * Class RevokePermissionAction. */ -class RevokePermissionAction extends Action +class RevokePermissionAction extends BaseAction { final public const FIELD_PERMISSION = 'permission'; @@ -27,6 +27,8 @@ protected function setUp(): void { parent::setUp(); + $this->label(__('filament.actions.user.revoke_permission.name')); + $this->action(fn (User $record, array $data) => $this->handle($record, $data)); } diff --git a/app/Filament/Actions/Models/Auth/User/RevokeRoleAction.php b/app/Filament/Actions/Models/Auth/User/RevokeRoleAction.php index 49a8e9f8f..8f585bd70 100644 --- a/app/Filament/Actions/Models/Auth/User/RevokeRoleAction.php +++ b/app/Filament/Actions/Models/Auth/User/RevokeRoleAction.php @@ -4,17 +4,17 @@ namespace App\Filament\Actions\Models\Auth\User; +use App\Filament\Actions\BaseAction; use App\Filament\Components\Fields\Select; use App\Models\Auth\Role; use App\Models\Auth\User; use Filament\Forms\Form; -use Filament\Tables\Actions\Action; use Illuminate\Support\Arr; /** * Class RevokeRoleAction. */ -class RevokeRoleAction extends Action +class RevokeRoleAction extends BaseAction { final public const FIELD_ROLE = 'role'; @@ -27,6 +27,8 @@ protected function setUp(): void { parent::setUp(); + $this->label(__('filament.actions.user.revoke_role.name')); + $this->action(fn (User $record, array $data) => $this->handle($record, $data)); } diff --git a/app/Filament/Actions/Models/Wiki/Anime/AttachAnimeImageAction.php b/app/Filament/Actions/Models/Wiki/Anime/AttachAnimeImageAction.php index e5ad4b001..7a32af17a 100644 --- a/app/Filament/Actions/Models/Wiki/Anime/AttachAnimeImageAction.php +++ b/app/Filament/Actions/Models/Wiki/Anime/AttachAnimeImageAction.php @@ -5,6 +5,7 @@ namespace App\Filament\Actions\Models\Wiki\Anime; use App\Actions\Models\Wiki\Anime\AttachAnimeImageAction as AttachAnimeImageActionAction; +use App\Enums\Models\Wiki\ImageFacet; use App\Filament\Actions\Models\Wiki\AttachImageAction; use App\Models\Wiki\Anime; @@ -22,6 +23,11 @@ protected function setUp(): void { parent::setUp(); + $this->facets([ + ImageFacet::COVER_SMALL, + ImageFacet::COVER_LARGE, + ]); + $this->action(fn (Anime $record, array $data) => (new AttachAnimeImageActionAction($this->facets))->handle($record, $data)); } } diff --git a/app/Filament/Actions/Models/Wiki/Anime/AttachAnimeResourceAction.php b/app/Filament/Actions/Models/Wiki/Anime/AttachAnimeResourceAction.php index ebf2ebe82..06d750377 100644 --- a/app/Filament/Actions/Models/Wiki/Anime/AttachAnimeResourceAction.php +++ b/app/Filament/Actions/Models/Wiki/Anime/AttachAnimeResourceAction.php @@ -25,6 +25,19 @@ protected function setUp(): void { parent::setUp(); + $this->sites([ + ResourceSite::ANIDB, + ResourceSite::ANILIST, + ResourceSite::ANIME_PLANET, + ResourceSite::ANN, + ResourceSite::KITSU, + ResourceSite::MAL, + ResourceSite::OFFICIAL_SITE, + ResourceSite::TWITTER, + ResourceSite::YOUTUBE, + ResourceSite::WIKI, + ]); + $this->action(fn (Anime $record, array $data) => (new AttachAnimeResourceActionAction($this->sites))->handle($record, $data)); } diff --git a/app/Filament/Actions/Models/Wiki/Anime/BackfillAnimeAction.php b/app/Filament/Actions/Models/Wiki/Anime/BackfillAnimeAction.php index cc8553621..b99ba1f15 100644 --- a/app/Filament/Actions/Models/Wiki/Anime/BackfillAnimeAction.php +++ b/app/Filament/Actions/Models/Wiki/Anime/BackfillAnimeAction.php @@ -17,6 +17,7 @@ use App\Actions\Models\Wiki\Anime\Studio\BackfillAnimeStudiosAction; use App\Enums\Models\Wiki\ImageFacet; use App\Enums\Models\Wiki\ResourceSite; +use App\Filament\Actions\BaseAction; use App\Models\Wiki\Anime; use App\Models\Wiki\ExternalResource; use App\Models\Wiki\Image; @@ -26,7 +27,7 @@ use Filament\Forms\Form; use Filament\Notifications\Actions\Action as NotificationAction; use Filament\Notifications\Notification; -use Filament\Tables\Actions\Action; +use Filament\Support\Enums\MaxWidth; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Queue\InteractsWithQueue; @@ -36,7 +37,7 @@ /** * Class BackfillAnimeAction. */ -class BackfillAnimeAction extends Action implements ShouldQueue +class BackfillAnimeAction extends BaseAction implements ShouldQueue { use InteractsWithQueue; use Queueable; @@ -61,6 +62,13 @@ protected function setUp(): void { parent::setUp(); + $this->label(__('filament.actions.anime.backfill.name')); + $this->icon('heroicon-o-bars-4'); + + $this->modalWidth(MaxWidth::FourExtraLarge); + + $this->authorize('create', Anime::class); + $this->action(fn (Anime $record, array $data) => $this->handle($record, $data)); } diff --git a/app/Filament/Actions/Models/Wiki/Artist/AttachArtistImageAction.php b/app/Filament/Actions/Models/Wiki/Artist/AttachArtistImageAction.php index db05578b1..1f77e6768 100644 --- a/app/Filament/Actions/Models/Wiki/Artist/AttachArtistImageAction.php +++ b/app/Filament/Actions/Models/Wiki/Artist/AttachArtistImageAction.php @@ -5,6 +5,7 @@ namespace App\Filament\Actions\Models\Wiki\Artist; use App\Actions\Models\Wiki\Artist\AttachArtistImageAction as AttachArtistImageActionAction; +use App\Enums\Models\Wiki\ImageFacet; use App\Filament\Actions\Models\Wiki\AttachImageAction; use App\Models\Wiki\Artist; @@ -22,6 +23,11 @@ protected function setUp(): void { parent::setUp(); + $this->facets([ + ImageFacet::COVER_SMALL, + ImageFacet::COVER_LARGE, + ]); + $this->action(fn (Artist $record, array $data) => (new AttachArtistImageActionAction($this->facets))->handle($record, $data)); } } diff --git a/app/Filament/Actions/Models/Wiki/Artist/AttachArtistResourceAction.php b/app/Filament/Actions/Models/Wiki/Artist/AttachArtistResourceAction.php index 54c23c63a..57a84a990 100644 --- a/app/Filament/Actions/Models/Wiki/Artist/AttachArtistResourceAction.php +++ b/app/Filament/Actions/Models/Wiki/Artist/AttachArtistResourceAction.php @@ -25,6 +25,20 @@ protected function setUp(): void { parent::setUp(); + $this->sites([ + ResourceSite::ANIDB, + ResourceSite::ANILIST, + ResourceSite::ANIME_PLANET, + ResourceSite::ANN, + ResourceSite::MAL, + ResourceSite::OFFICIAL_SITE, + ResourceSite::SPOTIFY, + ResourceSite::TWITTER, + ResourceSite::YOUTUBE, + ResourceSite::YOUTUBE_MUSIC, + ResourceSite::WIKI, + ]); + $this->action(fn (Artist $record, array $data) => (new AttachArtistResourceActionAction($this->sites))->handle($record, $data)); } diff --git a/app/Filament/Actions/Models/Wiki/AttachImageAction.php b/app/Filament/Actions/Models/Wiki/AttachImageAction.php index ea862430a..b48139b51 100644 --- a/app/Filament/Actions/Models/Wiki/AttachImageAction.php +++ b/app/Filament/Actions/Models/Wiki/AttachImageAction.php @@ -5,21 +5,36 @@ namespace App\Filament\Actions\Models\Wiki; use App\Enums\Models\Wiki\ImageFacet; +use App\Filament\Actions\BaseAction; use App\Models\Wiki\Anime; use App\Models\Wiki\Artist; use App\Models\Wiki\Image; use App\Models\Wiki\Studio; use Filament\Forms\Components\FileUpload; use Filament\Forms\Form; -use Filament\Tables\Actions\Action; /** * Class AttachImageAction. */ -abstract class AttachImageAction extends Action +abstract class AttachImageAction extends BaseAction { protected array $facets = []; + /** + * Initial setup for the action. + * + * @return void + */ + protected function setUp(): void + { + parent::setUp(); + + $this->label(__('filament.actions.models.wiki.attach_image.name')); + $this->icon('heroicon-o-photo'); + + $this->authorize('create', Image::class); + } + /** * Get the fields available on the action. * diff --git a/app/Filament/Actions/Models/Wiki/AttachResourceAction.php b/app/Filament/Actions/Models/Wiki/AttachResourceAction.php index 971e74b2d..d15860de7 100644 --- a/app/Filament/Actions/Models/Wiki/AttachResourceAction.php +++ b/app/Filament/Actions/Models/Wiki/AttachResourceAction.php @@ -5,6 +5,7 @@ namespace App\Filament\Actions\Models\Wiki; use App\Enums\Models\Wiki\ResourceSite; +use App\Filament\Actions\BaseAction; use App\Models\Wiki\Anime; use App\Models\Wiki\Artist; use App\Models\Wiki\ExternalResource; @@ -12,16 +13,33 @@ use App\Models\Wiki\Studio; use Filament\Forms\Components\TextInput; use Filament\Forms\Form; -use Filament\Tables\Actions\Action; +use Filament\Support\Enums\MaxWidth; use Illuminate\Contracts\Validation\ValidationRule; /** * Class AttachResourceAction. */ -abstract class AttachResourceAction extends Action +abstract class AttachResourceAction extends BaseAction { protected array $sites = []; + /** + * Initial setup for the action. + * + * @return void + */ + protected function setUp(): void + { + parent::setUp(); + + $this->label(__('filament.actions.models.wiki.attach_resource.name')); + $this->icon('heroicon-o-queue-list'); + + $this->modalWidth(MaxWidth::FourExtraLarge); + + $this->authorize('create', ExternalResource::class); + } + /** * Get the fields available on the action. * diff --git a/app/Filament/Actions/Models/Wiki/Audio/AttachAudioToRelatedVideosAction.php b/app/Filament/Actions/Models/Wiki/Audio/AttachAudioToRelatedVideosAction.php index 96c1ab7be..357766f51 100644 --- a/app/Filament/Actions/Models/Wiki/Audio/AttachAudioToRelatedVideosAction.php +++ b/app/Filament/Actions/Models/Wiki/Audio/AttachAudioToRelatedVideosAction.php @@ -4,17 +4,17 @@ namespace App\Filament\Actions\Models\Wiki\Audio; +use App\Filament\Actions\BaseAction; use App\Models\Wiki\Anime\Theme\AnimeThemeEntry; use App\Models\Wiki\Audio; use App\Models\Wiki\Video; -use Filament\Tables\Actions\Action; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Support\Facades\Log; /** * Class AttachAudioToRelatedVideosAction. */ -class AttachAudioToRelatedVideosAction extends Action implements ShouldQueue +class AttachAudioToRelatedVideosAction extends BaseAction implements ShouldQueue { /** * Initial setup for the action. @@ -25,6 +25,10 @@ protected function setUp(): void { parent::setUp(); + $this->label(__('filament.actions.audio.attach_related_videos.name')); + + $this->authorize('update', Video::class); + $this->action(fn (Audio $record) => $this->handle($record)); } diff --git a/app/Filament/Actions/Models/Wiki/Song/AttachSongResourceAction.php b/app/Filament/Actions/Models/Wiki/Song/AttachSongResourceAction.php index 85fb403b9..10261e766 100644 --- a/app/Filament/Actions/Models/Wiki/Song/AttachSongResourceAction.php +++ b/app/Filament/Actions/Models/Wiki/Song/AttachSongResourceAction.php @@ -25,6 +25,15 @@ protected function setUp(): void { parent::setUp(); + $this->sites([ + ResourceSite::ANIDB, + ResourceSite::SPOTIFY, + ResourceSite::YOUTUBE_MUSIC, + ResourceSite::YOUTUBE, + ResourceSite::APPLE_MUSIC, + ResourceSite::AMAZON_MUSIC, + ]); + $this->action(fn (Song $record, array $data) => (new AttachSongResourceActionAction($this->sites))->handle($record, $data)); } diff --git a/app/Filament/Actions/Models/Wiki/Studio/AttachStudioImageAction.php b/app/Filament/Actions/Models/Wiki/Studio/AttachStudioImageAction.php index 11f5b44b6..e818594af 100644 --- a/app/Filament/Actions/Models/Wiki/Studio/AttachStudioImageAction.php +++ b/app/Filament/Actions/Models/Wiki/Studio/AttachStudioImageAction.php @@ -5,6 +5,7 @@ namespace App\Filament\Actions\Models\Wiki\Studio; use App\Actions\Models\Wiki\Studio\AttachStudioImageAction as AttachStudioImageActionAction; +use App\Enums\Models\Wiki\ImageFacet; use App\Filament\Actions\Models\Wiki\AttachImageAction; use App\Models\Wiki\Studio; @@ -22,6 +23,11 @@ protected function setUp(): void { parent::setUp(); + $this->facets([ + ImageFacet::COVER_SMALL, + ImageFacet::COVER_LARGE, + ]); + $this->action(fn (Studio $record, array $data) => (new AttachStudioImageActionAction($this->facets))->handle($record, $data)); } } diff --git a/app/Filament/Actions/Models/Wiki/Studio/AttachStudioResourceAction.php b/app/Filament/Actions/Models/Wiki/Studio/AttachStudioResourceAction.php index 75bc6b6eb..df1b2e27a 100644 --- a/app/Filament/Actions/Models/Wiki/Studio/AttachStudioResourceAction.php +++ b/app/Filament/Actions/Models/Wiki/Studio/AttachStudioResourceAction.php @@ -25,6 +25,14 @@ protected function setUp(): void { parent::setUp(); + $this->sites([ + ResourceSite::ANIDB, + ResourceSite::ANILIST, + ResourceSite::ANIME_PLANET, + ResourceSite::ANN, + ResourceSite::MAL, + ]); + $this->action(fn (Studio $record, array $data) => (new AttachStudioResourceActionAction($this->sites))->handle($record, $data)); } diff --git a/app/Filament/Actions/Models/Wiki/Studio/BackfillStudioAction.php b/app/Filament/Actions/Models/Wiki/Studio/BackfillStudioAction.php index 42df6432b..614fe4d03 100644 --- a/app/Filament/Actions/Models/Wiki/Studio/BackfillStudioAction.php +++ b/app/Filament/Actions/Models/Wiki/Studio/BackfillStudioAction.php @@ -7,6 +7,7 @@ use App\Actions\Models\BackfillAction; use App\Actions\Models\Wiki\Studio\Image\BackfillLargeCoverImageAction; use App\Enums\Models\Wiki\ImageFacet; +use App\Filament\Actions\BaseAction; use App\Models\Wiki\Image; use App\Models\Wiki\Studio; use Exception; @@ -15,7 +16,7 @@ use Filament\Forms\Form; use Filament\Notifications\Actions\Action as NotificationAction; use Filament\Notifications\Notification; -use Filament\Tables\Actions\Action; +use Filament\Support\Enums\MaxWidth; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Queue\InteractsWithQueue; @@ -25,7 +26,7 @@ /** * Class BackfillStudioAction. */ -class BackfillStudioAction extends Action implements ShouldQueue +class BackfillStudioAction extends BaseAction implements ShouldQueue { use InteractsWithQueue; use Queueable; @@ -41,6 +42,12 @@ protected function setUp(): void { parent::setUp(); + $this->label(__('filament.actions.studio.backfill.name')); + + $this->modalWidth(MaxWidth::FourExtraLarge); + + $this->authorize('update', Studio::class); + $this->action(fn (Studio $record, array $data) => $this->handle($record, $data)); } diff --git a/app/Filament/Actions/Models/Wiki/Video/BackfillAudioAction.php b/app/Filament/Actions/Models/Wiki/Video/BackfillAudioAction.php index 941c69158..6819bed30 100644 --- a/app/Filament/Actions/Models/Wiki/Video/BackfillAudioAction.php +++ b/app/Filament/Actions/Models/Wiki/Video/BackfillAudioAction.php @@ -8,11 +8,13 @@ use App\Enums\Actions\Models\Wiki\Video\DeriveSourceVideo; use App\Enums\Actions\Models\Wiki\Video\OverwriteAudio; use App\Filament\Components\Fields\Select; +use App\Models\Wiki\Audio; use App\Models\Wiki\Video; use Exception; use Filament\Forms\Form; use Filament\Notifications\Actions\Action as NotificationAction; use Filament\Notifications\Notification; +use Filament\Support\Enums\MaxWidth; use Filament\Tables\Actions\Action; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; @@ -40,6 +42,14 @@ protected function setUp(): void { parent::setUp(); + $this->label(__('filament.actions.video.backfill.name')); + + $this->requiresConfirmation(); + + $this->modalWidth(MaxWidth::TwoExtraLarge); + + $this->authorize('create', Audio::class); + $this->action(fn (Video $record, array $data) => $this->handle($record, $data)); } diff --git a/app/Filament/Actions/Storage/StorageAction.php b/app/Filament/Actions/Storage/StorageAction.php index 90ba1eeb9..54c9aaf4b 100644 --- a/app/Filament/Actions/Storage/StorageAction.php +++ b/app/Filament/Actions/Storage/StorageAction.php @@ -5,13 +5,13 @@ namespace App\Filament\Actions\Storage; use App\Contracts\Actions\Storage\StorageAction as BaseStorageAction; +use App\Filament\Actions\BaseAction; use App\Models\BaseModel; -use Filament\Tables\Actions\Action; /** * Class StorageAction. */ -abstract class StorageAction extends Action +abstract class StorageAction extends BaseAction { /** * Initial setup for the action. diff --git a/app/Filament/Actions/Storage/Wiki/Audio/DeleteAudioAction.php b/app/Filament/Actions/Storage/Wiki/Audio/DeleteAudioAction.php index 6710a5ab7..5d1e5e200 100644 --- a/app/Filament/Actions/Storage/Wiki/Audio/DeleteAudioAction.php +++ b/app/Filament/Actions/Storage/Wiki/Audio/DeleteAudioAction.php @@ -14,6 +14,20 @@ */ class DeleteAudioAction extends DeleteAction { + /** + * Initial setup for the action. + * + * @return void + */ + protected function setUp(): void + { + parent::setUp(); + + $this->label(__('filament.actions.audio.delete.name')); + + $this->authorize('forcedelete', Audio::class); + } + /** * Get the underlying storage action. * diff --git a/app/Filament/Actions/Storage/Wiki/Audio/MoveAudioAction.php b/app/Filament/Actions/Storage/Wiki/Audio/MoveAudioAction.php index 30300d0c3..9ece48bc2 100644 --- a/app/Filament/Actions/Storage/Wiki/Audio/MoveAudioAction.php +++ b/app/Filament/Actions/Storage/Wiki/Audio/MoveAudioAction.php @@ -17,6 +17,20 @@ */ class MoveAudioAction extends MoveAction { + /** + * Initial setup for the action. + * + * @return void + */ + protected function setUp(): void + { + parent::setUp(); + + $this->label(__('filament.actions.audio.move.name')); + + $this->authorize('create', Audio::class); + } + /** * Get the underlying storage action. * diff --git a/app/Filament/Actions/Storage/Wiki/Video/DeleteVideoAction.php b/app/Filament/Actions/Storage/Wiki/Video/DeleteVideoAction.php index d258a7f1e..80af00818 100644 --- a/app/Filament/Actions/Storage/Wiki/Video/DeleteVideoAction.php +++ b/app/Filament/Actions/Storage/Wiki/Video/DeleteVideoAction.php @@ -14,6 +14,20 @@ */ class DeleteVideoAction extends DeleteAction { + /** + * Initial setup for the action. + * + * @return void + */ + protected function setUp(): void + { + parent::setUp(); + + $this->label(__('filament.actions.video.delete.name')); + + $this->authorize('forcedelete', Video::class); + } + /** * Get the underlying storage action. * diff --git a/app/Filament/Actions/Storage/Wiki/Video/MoveVideoAction.php b/app/Filament/Actions/Storage/Wiki/Video/MoveVideoAction.php index 27bdd5100..2db691a39 100644 --- a/app/Filament/Actions/Storage/Wiki/Video/MoveVideoAction.php +++ b/app/Filament/Actions/Storage/Wiki/Video/MoveVideoAction.php @@ -17,6 +17,20 @@ */ class MoveVideoAction extends MoveAction { + /** + * Initial setup for the action. + * + * @return void + */ + protected function setUp(): void + { + parent::setUp(); + + $this->label(__('filament.actions.video.move.name')); + + $this->authorize('create', Video::class); + } + /** * Get the underlying storage action. * diff --git a/app/Filament/Actions/Storage/Wiki/Video/Script/DeleteScriptAction.php b/app/Filament/Actions/Storage/Wiki/Video/Script/DeleteScriptAction.php index b0cb83179..44e542580 100644 --- a/app/Filament/Actions/Storage/Wiki/Video/Script/DeleteScriptAction.php +++ b/app/Filament/Actions/Storage/Wiki/Video/Script/DeleteScriptAction.php @@ -14,6 +14,20 @@ */ class DeleteScriptAction extends DeleteAction { + /** + * Initial setup for the action. + * + * @return void + */ + protected function setUp(): void + { + parent::setUp(); + + $this->label(__('filament.actions.video_script.delete.name')); + + $this->authorize('delete', VideoScript::class); + } + /** * Get the underlying storage action. * diff --git a/app/Filament/Actions/Storage/Wiki/Video/Script/MoveScriptAction.php b/app/Filament/Actions/Storage/Wiki/Video/Script/MoveScriptAction.php index 59e0fba67..4bbe5b7ac 100644 --- a/app/Filament/Actions/Storage/Wiki/Video/Script/MoveScriptAction.php +++ b/app/Filament/Actions/Storage/Wiki/Video/Script/MoveScriptAction.php @@ -17,6 +17,20 @@ */ class MoveScriptAction extends MoveAction { + /** + * Initial setup for the action. + * + * @return void + */ + protected function setUp(): void + { + parent::setUp(); + + $this->label(__('filament.actions.video_script.move.name')); + + $this->authorize('create', VideoScript::class); + } + /** * Get the underlying storage action. * diff --git a/app/Filament/BulkActions/BaseBulkAction.php b/app/Filament/BulkActions/BaseBulkAction.php index 9844d4a7f..4b878001d 100644 --- a/app/Filament/BulkActions/BaseBulkAction.php +++ b/app/Filament/BulkActions/BaseBulkAction.php @@ -5,11 +5,14 @@ namespace App\Filament\BulkActions; use App\Models\BaseModel; +use Filament\Support\Enums\MaxWidth; use Filament\Tables\Actions\BulkAction; use Illuminate\Database\Eloquent\Collection; /** * Class BaseBulkAction. + * + * Bulk actions are present in the table to perform an action on more than one model at once. */ abstract class BaseBulkAction extends BulkAction { @@ -22,6 +25,10 @@ protected function setUp(): void { parent::setUp(); + $this->requiresConfirmation(); + + $this->modalWidth(MaxWidth::FourExtraLarge); + $this->action(fn (Collection $records, array $data) => $this->handle($records, $data)); } diff --git a/app/Filament/BulkActions/Discord/DiscordVideoNotificationBulkAction.php b/app/Filament/BulkActions/Models/Wiki/Video/VideoDiscordNotificationBulkAction.php similarity index 68% rename from app/Filament/BulkActions/Discord/DiscordVideoNotificationBulkAction.php rename to app/Filament/BulkActions/Models/Wiki/Video/VideoDiscordNotificationBulkAction.php index c6fc255d6..fe02a2510 100644 --- a/app/Filament/BulkActions/Discord/DiscordVideoNotificationBulkAction.php +++ b/app/Filament/BulkActions/Models/Wiki/Video/VideoDiscordNotificationBulkAction.php @@ -2,20 +2,38 @@ declare(strict_types=1); -namespace App\Filament\BulkActions\Discord; +namespace App\Filament\BulkActions\Models\Wiki\Video; use App\Actions\Discord\DiscordVideoNotificationAction as DiscordVideoNotificationActionAction; use App\Filament\BulkActions\BaseBulkAction; use App\Filament\Components\Fields\Select; -use App\Models\Wiki\Video; +use App\Models\Discord\DiscordThread; use Filament\Forms\Form; +use Filament\Support\Enums\MaxWidth; use Illuminate\Database\Eloquent\Collection; /** - * Class DiscordVideoNotificationBulkAction. + * Class VideoDiscordNotificationBulkAction. */ -class DiscordVideoNotificationBulkAction extends BaseBulkAction +class VideoDiscordNotificationBulkAction extends BaseBulkAction { + /** + * Initial setup for the action. + * + * @return void + */ + protected function setUp(): void + { + parent::setUp(); + + $this->modalWidth(MaxWidth::Large); + + $this->label(__('filament.bulk_actions.discord.notification.name')); + $this->icon(__('filament.bulk_actions.discord.notification.icon')); + + $this->authorize('create', DiscordThread::class); + } + /** * Handle the action. * diff --git a/app/Filament/BulkActions/Storage/Base/DeleteBulkAction.php b/app/Filament/BulkActions/Storage/Base/DeleteBulkAction.php new file mode 100644 index 000000000..10c8ab69d --- /dev/null +++ b/app/Filament/BulkActions/Storage/Base/DeleteBulkAction.php @@ -0,0 +1,36 @@ +authorize('forcedeleteany'); + } + + /** + * Get the underlying storage action. + * + * @param BaseModel $model + * @param array $fields + * @return BaseDeleteAction + */ + abstract protected function storageAction(BaseModel $model, array $fields): BaseDeleteAction; +} diff --git a/app/Filament/BulkActions/Storage/StorageBulkAction.php b/app/Filament/BulkActions/Storage/StorageBulkAction.php new file mode 100644 index 000000000..04f346975 --- /dev/null +++ b/app/Filament/BulkActions/Storage/StorageBulkAction.php @@ -0,0 +1,47 @@ + $models + * @param array $fields + * @return void + */ + public function handle(Collection $models, array $fields): void + { + foreach ($models as $model) { + $action = $this->storageAction($model, $fields); + + $storageResults = $action->handle(); + + $storageResults->toLog(); + + $action->then($storageResults); + + $actionResult = $storageResults->toActionResult(); + } + } +} diff --git a/app/Filament/BulkActions/Storage/Wiki/Audio/DeleteAudioBulkAction.php b/app/Filament/BulkActions/Storage/Wiki/Audio/DeleteAudioBulkAction.php new file mode 100644 index 000000000..c887f8e0d --- /dev/null +++ b/app/Filament/BulkActions/Storage/Wiki/Audio/DeleteAudioBulkAction.php @@ -0,0 +1,40 @@ +label(__('filament.actions.audio.delete.name')); + } + + /** + * Get the underlying storage action. + * + * @param Audio $audio + * @param array $fields + * @return DeleteAudio + */ + protected function storageAction(BaseModel $audio, array $fields): DeleteAudio + { + return new DeleteAudio($audio); + } +} diff --git a/app/Filament/BulkActions/Storage/Wiki/Video/DeleteVideoBulkAction.php b/app/Filament/BulkActions/Storage/Wiki/Video/DeleteVideoBulkAction.php new file mode 100644 index 000000000..e7ac5482a --- /dev/null +++ b/app/Filament/BulkActions/Storage/Wiki/Video/DeleteVideoBulkAction.php @@ -0,0 +1,40 @@ +label(__('filament.actions.video.delete.name')); + } + + /** + * Get the underlying storage action. + * + * @param Video $video + * @param array $fields + * @return DeleteVideo + */ + protected function storageAction(BaseModel $video, array $fields): DeleteVideo + { + return new DeleteVideo($video); + } +} diff --git a/app/Filament/BulkActions/Storage/Wiki/Video/Script/DeleteScriptBulkAction.php b/app/Filament/BulkActions/Storage/Wiki/Video/Script/DeleteScriptBulkAction.php new file mode 100644 index 000000000..30b52f1d4 --- /dev/null +++ b/app/Filament/BulkActions/Storage/Wiki/Video/Script/DeleteScriptBulkAction.php @@ -0,0 +1,40 @@ +label(__('filament.actions.video_script.delete.name')); + } + + /** + * Get the underlying storage action. + * + * @param VideoScript $script + * @param array $fields + * @return DeleteScript + */ + protected function storageAction(BaseModel $script, array $fields): DeleteScript + { + return new DeleteScript($script); + } +} diff --git a/app/Filament/HeaderActions/BaseHeaderAction.php b/app/Filament/HeaderActions/BaseHeaderAction.php new file mode 100644 index 000000000..56167350a --- /dev/null +++ b/app/Filament/HeaderActions/BaseHeaderAction.php @@ -0,0 +1,27 @@ +requiresConfirmation(); + } +} \ No newline at end of file diff --git a/app/Filament/HeaderActions/Discord/DiscordThreadHeaderAction.php b/app/Filament/HeaderActions/Discord/DiscordThreadHeaderAction.php index 505c9f36f..4a56518be 100644 --- a/app/Filament/HeaderActions/Discord/DiscordThreadHeaderAction.php +++ b/app/Filament/HeaderActions/Discord/DiscordThreadHeaderAction.php @@ -5,15 +5,16 @@ namespace App\Filament\HeaderActions\Discord; use App\Actions\Discord\DiscordThreadAction as DiscordThreadActionAction; +use App\Filament\HeaderActions\BaseHeaderAction; +use App\Models\Discord\DiscordThread; use App\Models\Wiki\Anime; use Filament\Forms\Components\TextInput; use Filament\Forms\Form; -use Filament\Actions\Action; /** * Class DiscordThreadAction. */ -class DiscordThreadHeaderAction extends Action +class DiscordThreadHeaderAction extends BaseHeaderAction { /** * Initial setup for the action. @@ -24,6 +25,13 @@ protected function setUp(): void { parent::setUp(); + $this->label(__('filament.actions.anime.discord.thread.name')); + $this->icon('heroicon-o-chat-bubble-left-right'); + + $this->requiresConfirmation(); + + $this->authorize('create', DiscordThread::class); + $this->fillForm(fn (Anime $record): array => ['name' => $record->getName()]); $this->action(fn (Anime $record, array $data) => (new DiscordThreadActionAction())->handle($record, $data)); diff --git a/app/Filament/HeaderActions/Models/AssignHashidsHeaderAction.php b/app/Filament/HeaderActions/Models/AssignHashidsHeaderAction.php index 55a47eaee..89a5584cf 100644 --- a/app/Filament/HeaderActions/Models/AssignHashidsHeaderAction.php +++ b/app/Filament/HeaderActions/Models/AssignHashidsHeaderAction.php @@ -6,14 +6,15 @@ use App\Actions\Models\AssignHashidsAction as AssignHashids; use App\Contracts\Models\HasHashids; +use App\Filament\HeaderActions\BaseHeaderAction; use App\Models\BaseModel; +use App\Models\List\Playlist; use Exception; -use Filament\Actions\Action; /** * Class AssignHashidsHeaderAction. */ -class AssignHashidsHeaderAction extends Action +class AssignHashidsHeaderAction extends BaseHeaderAction { protected ?string $connection = null; @@ -26,6 +27,10 @@ protected function setUp(): void { parent::setUp(); + $this->label(__('filament.actions.models.assign_hashids.name')); + + $this->authorize('update', Playlist::class); + $this->action(fn (BaseModel $record) => $this->handle($record)); } diff --git a/app/Filament/HeaderActions/Models/Auth/Role/GivePermissionHeaderAction.php b/app/Filament/HeaderActions/Models/Auth/Role/GivePermissionHeaderAction.php index 589f966c3..2cb6a770b 100644 --- a/app/Filament/HeaderActions/Models/Auth/Role/GivePermissionHeaderAction.php +++ b/app/Filament/HeaderActions/Models/Auth/Role/GivePermissionHeaderAction.php @@ -5,16 +5,16 @@ namespace App\Filament\HeaderActions\Models\Auth\Role; use App\Filament\Components\Fields\Select; +use App\Filament\HeaderActions\BaseHeaderAction; use App\Models\Auth\Permission; use App\Models\Auth\Role; use Filament\Forms\Form; -use Filament\Actions\Action; use Illuminate\Support\Arr; /** * Class GivePermissionHeaderAction. */ -class GivePermissionHeaderAction extends Action +class GivePermissionHeaderAction extends BaseHeaderAction { final public const FIELD_PERMISSION = 'permission'; @@ -27,6 +27,8 @@ protected function setUp(): void { parent::setUp(); + $this->label(__('filament.actions.role.give_permission.name')); + $this->action(fn (Role $record, array $data) => $this->handle($record, $data)); } diff --git a/app/Filament/HeaderActions/Models/Auth/Role/RevokePermissionHeaderAction.php b/app/Filament/HeaderActions/Models/Auth/Role/RevokePermissionHeaderAction.php index 696f447c5..6f5a43cf9 100644 --- a/app/Filament/HeaderActions/Models/Auth/Role/RevokePermissionHeaderAction.php +++ b/app/Filament/HeaderActions/Models/Auth/Role/RevokePermissionHeaderAction.php @@ -5,16 +5,16 @@ namespace App\Filament\HeaderActions\Models\Auth\Role; use App\Filament\Components\Fields\Select; +use App\Filament\HeaderActions\BaseHeaderAction; use App\Models\Auth\Permission; use App\Models\Auth\Role; use Filament\Forms\Form; -use Filament\Actions\Action; use Illuminate\Support\Arr; /** * Class RevokePermissionHeaderAction. */ -class RevokePermissionHeaderAction extends Action +class RevokePermissionHeaderAction extends BaseHeaderAction { final public const FIELD_PERMISSION = 'permission'; @@ -27,6 +27,8 @@ protected function setUp(): void { parent::setUp(); + $this->label(__('filament.actions.role.revoke_permission.name')); + $this->action(fn (Role $record, array $data) => $this->handle($record, $data)); } diff --git a/app/Filament/HeaderActions/Models/Auth/User/GivePermissionHeaderAction.php b/app/Filament/HeaderActions/Models/Auth/User/GivePermissionHeaderAction.php index 93d013fe8..36dbad6b0 100644 --- a/app/Filament/HeaderActions/Models/Auth/User/GivePermissionHeaderAction.php +++ b/app/Filament/HeaderActions/Models/Auth/User/GivePermissionHeaderAction.php @@ -5,17 +5,16 @@ namespace App\Filament\HeaderActions\Models\Auth\User; use App\Filament\Components\Fields\Select; +use App\Filament\HeaderActions\BaseHeaderAction; use App\Models\Auth\Permission; use App\Models\Auth\User; use Filament\Forms\Form; -use Filament\Actions\Action; -use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Arr; /** * Class GivePermissionHeaderAction. */ -class GivePermissionHeaderAction extends Action +class GivePermissionHeaderAction extends BaseHeaderAction { final public const FIELD_PERMISSION = 'permission'; @@ -28,6 +27,8 @@ protected function setUp(): void { parent::setUp(); + $this->label(__('filament.actions.user.give_permission.name')); + $this->action(fn (User $record, array $data) => $this->handle($record, $data)); } diff --git a/app/Filament/HeaderActions/Models/Auth/User/GiveRoleHeaderAction.php b/app/Filament/HeaderActions/Models/Auth/User/GiveRoleHeaderAction.php index d57e8e2ad..d48fcfdc2 100644 --- a/app/Filament/HeaderActions/Models/Auth/User/GiveRoleHeaderAction.php +++ b/app/Filament/HeaderActions/Models/Auth/User/GiveRoleHeaderAction.php @@ -5,17 +5,16 @@ namespace App\Filament\HeaderActions\Models\Auth\User; use App\Filament\Components\Fields\Select; +use App\Filament\HeaderActions\BaseHeaderAction; use App\Models\Auth\Role; use App\Models\Auth\User; use Filament\Forms\Form; -use Filament\Actions\Action; -use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Arr; /** * Class GiveRoleHeaderAction. */ -class GiveRoleHeaderAction extends Action +class GiveRoleHeaderAction extends BaseHeaderAction { final public const FIELD_ROLE = 'role'; @@ -28,6 +27,8 @@ protected function setUp(): void { parent::setUp(); + $this->label(__('filament.actions.user.give_role.name')); + $this->action(fn (User $record, array $data) => $this->handle($record, $data)); } diff --git a/app/Filament/HeaderActions/Models/Auth/User/RevokePermissionHeaderAction.php b/app/Filament/HeaderActions/Models/Auth/User/RevokePermissionHeaderAction.php index 8c9d76fa2..a0255ae85 100644 --- a/app/Filament/HeaderActions/Models/Auth/User/RevokePermissionHeaderAction.php +++ b/app/Filament/HeaderActions/Models/Auth/User/RevokePermissionHeaderAction.php @@ -5,16 +5,16 @@ namespace App\Filament\HeaderActions\Models\Auth\User; use App\Filament\Components\Fields\Select; +use App\Filament\HeaderActions\BaseHeaderAction; use App\Models\Auth\Permission; use App\Models\Auth\User; use Filament\Forms\Form; -use Filament\Actions\Action; use Illuminate\Support\Arr; /** * Class RevokePermissionHeaderAction. */ -class RevokePermissionHeaderAction extends Action +class RevokePermissionHeaderAction extends BaseHeaderAction { final public const FIELD_PERMISSION = 'permission'; @@ -27,6 +27,8 @@ protected function setUp(): void { parent::setUp(); + $this->label(__('filament.actions.user.revoke_permission.name')); + $this->action(fn (User $record, array $data) => $this->handle($record, $data)); } diff --git a/app/Filament/HeaderActions/Models/Auth/User/RevokeRoleHeaderAction.php b/app/Filament/HeaderActions/Models/Auth/User/RevokeRoleHeaderAction.php index 0a76e87a3..32801a7bb 100644 --- a/app/Filament/HeaderActions/Models/Auth/User/RevokeRoleHeaderAction.php +++ b/app/Filament/HeaderActions/Models/Auth/User/RevokeRoleHeaderAction.php @@ -5,16 +5,16 @@ namespace App\Filament\HeaderActions\Models\Auth\User; use App\Filament\Components\Fields\Select; +use App\Filament\HeaderActions\BaseHeaderAction; use App\Models\Auth\Role; use App\Models\Auth\User; use Filament\Forms\Form; -use Filament\Actions\Action; use Illuminate\Support\Arr; /** * Class RevokeRoleHeaderAction. */ -class RevokeRoleHeaderAction extends Action +class RevokeRoleHeaderAction extends BaseHeaderAction { final public const FIELD_ROLE = 'role'; @@ -27,6 +27,8 @@ protected function setUp(): void { parent::setUp(); + $this->label(__('filament.actions.user.revoke_role.name')); + $this->action(fn (User $record, array $data) => $this->handle($record, $data)); } diff --git a/app/Filament/HeaderActions/Models/Wiki/Anime/AttachAnimeImageHeaderAction.php b/app/Filament/HeaderActions/Models/Wiki/Anime/AttachAnimeImageHeaderAction.php index 7a3051d78..20c8d115f 100644 --- a/app/Filament/HeaderActions/Models/Wiki/Anime/AttachAnimeImageHeaderAction.php +++ b/app/Filament/HeaderActions/Models/Wiki/Anime/AttachAnimeImageHeaderAction.php @@ -5,6 +5,7 @@ namespace App\Filament\HeaderActions\Models\Wiki\Anime; use App\Actions\Models\Wiki\Anime\AttachAnimeImageAction as AttachAnimeImageActionAction; +use App\Enums\Models\Wiki\ImageFacet; use App\Filament\HeaderActions\Models\Wiki\AttachImageHeaderAction; use App\Models\Wiki\Anime; @@ -22,6 +23,11 @@ protected function setUp(): void { parent::setUp(); + $this->facets([ + ImageFacet::COVER_SMALL, + ImageFacet::COVER_LARGE, + ]); + $this->action(fn (Anime $record, array $data) => (new AttachAnimeImageActionAction($this->facets))->handle($record, $data)); } } diff --git a/app/Filament/HeaderActions/Models/Wiki/Anime/AttachAnimeResourceHeaderAction.php b/app/Filament/HeaderActions/Models/Wiki/Anime/AttachAnimeResourceHeaderAction.php index 87571fc02..114cf6285 100644 --- a/app/Filament/HeaderActions/Models/Wiki/Anime/AttachAnimeResourceHeaderAction.php +++ b/app/Filament/HeaderActions/Models/Wiki/Anime/AttachAnimeResourceHeaderAction.php @@ -25,6 +25,19 @@ protected function setUp(): void { parent::setUp(); + $this->sites([ + ResourceSite::ANIDB, + ResourceSite::ANILIST, + ResourceSite::ANIME_PLANET, + ResourceSite::ANN, + ResourceSite::KITSU, + ResourceSite::MAL, + ResourceSite::OFFICIAL_SITE, + ResourceSite::TWITTER, + ResourceSite::YOUTUBE, + ResourceSite::WIKI, + ]); + $this->action(fn (Anime $record, array $data) => (new AttachAnimeResourceActionAction($this->sites))->handle($record, $data)); } diff --git a/app/Filament/HeaderActions/Models/Wiki/Anime/BackfillAnimeHeaderAction.php b/app/Filament/HeaderActions/Models/Wiki/Anime/BackfillAnimeHeaderAction.php index 695962862..6b42e5a11 100644 --- a/app/Filament/HeaderActions/Models/Wiki/Anime/BackfillAnimeHeaderAction.php +++ b/app/Filament/HeaderActions/Models/Wiki/Anime/BackfillAnimeHeaderAction.php @@ -17,6 +17,7 @@ use App\Actions\Models\Wiki\Anime\Studio\BackfillAnimeStudiosAction; use App\Enums\Models\Wiki\ImageFacet; use App\Enums\Models\Wiki\ResourceSite; +use App\Filament\HeaderActions\BaseHeaderAction; use App\Models\Wiki\Anime; use App\Models\Wiki\ExternalResource; use App\Models\Wiki\Image; @@ -26,7 +27,6 @@ use Filament\Forms\Form; use Filament\Notifications\Actions\Action as NotificationAction; use Filament\Notifications\Notification; -use Filament\Actions\Action; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Queue\InteractsWithQueue; @@ -36,7 +36,7 @@ /** * Class BackfillAnimeHeaderAction. */ -class BackfillAnimeHeaderAction extends Action implements ShouldQueue +class BackfillAnimeHeaderAction extends BaseHeaderAction implements ShouldQueue { use InteractsWithQueue; use Queueable; @@ -61,6 +61,11 @@ protected function setUp(): void { parent::setUp(); + $this->label(__('filament.actions.anime.backfill.name')); + $this->icon('heroicon-o-bars-4'); + + $this->authorize('create', Anime::class); + $this->action(fn (Anime $record, array $data) => $this->handle($record, $data)); } diff --git a/app/Filament/HeaderActions/Models/Wiki/Artist/AttachArtistImageHeaderAction.php b/app/Filament/HeaderActions/Models/Wiki/Artist/AttachArtistImageHeaderAction.php index c17f6794b..0089996ba 100644 --- a/app/Filament/HeaderActions/Models/Wiki/Artist/AttachArtistImageHeaderAction.php +++ b/app/Filament/HeaderActions/Models/Wiki/Artist/AttachArtistImageHeaderAction.php @@ -5,6 +5,7 @@ namespace App\Filament\HeaderActions\Models\Wiki\Artist; use App\Actions\Models\Wiki\Artist\AttachArtistImageAction as AttachArtistImageActionAction; +use App\Enums\Models\Wiki\ImageFacet; use App\Filament\HeaderActions\Models\Wiki\AttachImageHeaderAction; use App\Models\Wiki\Artist; @@ -22,6 +23,11 @@ protected function setUp(): void { parent::setUp(); + $this->facets([ + ImageFacet::COVER_SMALL, + ImageFacet::COVER_LARGE, + ]); + $this->action(fn (Artist $record, array $data) => (new AttachArtistImageActionAction($this->facets))->handle($record, $data)); } } diff --git a/app/Filament/HeaderActions/Models/Wiki/Artist/AttachArtistResourceHeaderAction.php b/app/Filament/HeaderActions/Models/Wiki/Artist/AttachArtistResourceHeaderAction.php index 51500118a..61bbc08d4 100644 --- a/app/Filament/HeaderActions/Models/Wiki/Artist/AttachArtistResourceHeaderAction.php +++ b/app/Filament/HeaderActions/Models/Wiki/Artist/AttachArtistResourceHeaderAction.php @@ -25,6 +25,20 @@ protected function setUp(): void { parent::setUp(); + $this->sites([ + ResourceSite::ANIDB, + ResourceSite::ANILIST, + ResourceSite::ANIME_PLANET, + ResourceSite::ANN, + ResourceSite::MAL, + ResourceSite::OFFICIAL_SITE, + ResourceSite::SPOTIFY, + ResourceSite::TWITTER, + ResourceSite::YOUTUBE, + ResourceSite::YOUTUBE_MUSIC, + ResourceSite::WIKI, + ]); + $this->action(fn (Artist $record, array $data) => (new AttachArtistResourceActionAction($this->sites))->handle($record, $data)); } diff --git a/app/Filament/HeaderActions/Models/Wiki/AttachImageHeaderAction.php b/app/Filament/HeaderActions/Models/Wiki/AttachImageHeaderAction.php index 2950cf903..fc5d52f16 100644 --- a/app/Filament/HeaderActions/Models/Wiki/AttachImageHeaderAction.php +++ b/app/Filament/HeaderActions/Models/Wiki/AttachImageHeaderAction.php @@ -5,21 +5,36 @@ namespace App\Filament\HeaderActions\Models\Wiki; use App\Enums\Models\Wiki\ImageFacet; +use App\Filament\HeaderActions\BaseHeaderAction; use App\Models\Wiki\Anime; use App\Models\Wiki\Artist; use App\Models\Wiki\Image; use App\Models\Wiki\Studio; use Filament\Forms\Components\FileUpload; use Filament\Forms\Form; -use Filament\Actions\Action; /** * Class AttachImageHeaderAction. */ -abstract class AttachImageHeaderAction extends Action +abstract class AttachImageHeaderAction extends BaseHeaderAction { protected array $facets = []; + /** + * Initial setup for the action. + * + * @return void + */ + protected function setUp(): void + { + parent::setUp(); + + $this->label(__('filament.actions.models.wiki.attach_image.name')); + $this->icon('heroicon-o-photo'); + + $this->authorize('create', Image::class); + } + /** * Get the fields available on the action. * diff --git a/app/Filament/HeaderActions/Models/Wiki/AttachResourceHeaderAction.php b/app/Filament/HeaderActions/Models/Wiki/AttachResourceHeaderAction.php index f156e54bf..06d900b3e 100644 --- a/app/Filament/HeaderActions/Models/Wiki/AttachResourceHeaderAction.php +++ b/app/Filament/HeaderActions/Models/Wiki/AttachResourceHeaderAction.php @@ -5,6 +5,7 @@ namespace App\Filament\HeaderActions\Models\Wiki; use App\Enums\Models\Wiki\ResourceSite; +use App\Filament\HeaderActions\BaseHeaderAction; use App\Models\Wiki\Anime; use App\Models\Wiki\Artist; use App\Models\Wiki\ExternalResource; @@ -12,16 +13,33 @@ use App\Models\Wiki\Studio; use Filament\Forms\Components\TextInput; use Filament\Forms\Form; -use Filament\Actions\Action; +use Filament\Support\Enums\MaxWidth; use Illuminate\Contracts\Validation\ValidationRule; /** * Class AttachResourceHeaderAction. */ -abstract class AttachResourceHeaderAction extends Action +abstract class AttachResourceHeaderAction extends BaseHeaderAction { protected array $sites = []; + /** + * Initial setup for the action. + * + * @return void + */ + protected function setUp(): void + { + parent::setUp(); + + $this->label(__('filament.actions.models.wiki.attach_resource.name')); + $this->icon('heroicon-o-queue-list'); + + $this->modalWidth(MaxWidth::FourExtraLarge); + + $this->authorize('create', ExternalResource::class); + } + /** * Get the fields available on the action. * diff --git a/app/Filament/HeaderActions/Models/Wiki/Audio/AttachAudioToRelatedVideosHeaderAction.php b/app/Filament/HeaderActions/Models/Wiki/Audio/AttachAudioToRelatedVideosHeaderAction.php index a603baf13..03c2cb0fd 100644 --- a/app/Filament/HeaderActions/Models/Wiki/Audio/AttachAudioToRelatedVideosHeaderAction.php +++ b/app/Filament/HeaderActions/Models/Wiki/Audio/AttachAudioToRelatedVideosHeaderAction.php @@ -4,18 +4,17 @@ namespace App\Filament\HeaderActions\Models\Wiki\Audio; -use App\Models\BaseModel; +use App\Filament\HeaderActions\BaseHeaderAction; use App\Models\Wiki\Anime\Theme\AnimeThemeEntry; use App\Models\Wiki\Audio; use App\Models\Wiki\Video; -use Filament\Actions\Action; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Support\Facades\Log; /** * Class AttachAudioToRelatedVideosHeaderAction. */ -class AttachAudioToRelatedVideosHeaderAction extends Action implements ShouldQueue +class AttachAudioToRelatedVideosHeaderAction extends BaseHeaderAction implements ShouldQueue { /** * Initial setup for the action. @@ -26,6 +25,10 @@ protected function setUp(): void { parent::setUp(); + $this->label(__('filament.actions.audio.attach_related_videos.name')); + + $this->authorize('update', Video::class); + $this->action(fn (Audio $record) => $this->handle($record)); } diff --git a/app/Filament/HeaderActions/Models/Wiki/Song/AttachSongResourceHeaderAction.php b/app/Filament/HeaderActions/Models/Wiki/Song/AttachSongResourceHeaderAction.php index e6e9d4f69..2c808a328 100644 --- a/app/Filament/HeaderActions/Models/Wiki/Song/AttachSongResourceHeaderAction.php +++ b/app/Filament/HeaderActions/Models/Wiki/Song/AttachSongResourceHeaderAction.php @@ -25,6 +25,15 @@ protected function setUp(): void { parent::setUp(); + $this->sites([ + ResourceSite::ANIDB, + ResourceSite::SPOTIFY, + ResourceSite::YOUTUBE_MUSIC, + ResourceSite::YOUTUBE, + ResourceSite::APPLE_MUSIC, + ResourceSite::AMAZON_MUSIC, + ]); + $this->action(fn (Song $record, array $data) => (new AttachSongResourceActionAction($this->sites))->handle($record, $data)); } diff --git a/app/Filament/HeaderActions/Models/Wiki/Studio/AttachStudioImageHeaderAction.php b/app/Filament/HeaderActions/Models/Wiki/Studio/AttachStudioImageHeaderAction.php index ad3beb19d..6dc5a86f5 100644 --- a/app/Filament/HeaderActions/Models/Wiki/Studio/AttachStudioImageHeaderAction.php +++ b/app/Filament/HeaderActions/Models/Wiki/Studio/AttachStudioImageHeaderAction.php @@ -5,6 +5,7 @@ namespace App\Filament\HeaderActions\Models\Wiki\Studio; use App\Actions\Models\Wiki\Studio\AttachStudioImageAction as AttachStudioImageActionAction; +use App\Enums\Models\Wiki\ImageFacet; use App\Filament\HeaderActions\Models\Wiki\AttachImageHeaderAction; use App\Models\Wiki\Studio; @@ -22,6 +23,11 @@ protected function setUp(): void { parent::setUp(); + $this->facets([ + ImageFacet::COVER_SMALL, + ImageFacet::COVER_LARGE, + ]); + $this->action(fn (Studio $record, array $data) => (new AttachStudioImageActionAction($this->facets))->handle($record, $data)); } } diff --git a/app/Filament/HeaderActions/Models/Wiki/Studio/AttachStudioResourceHeaderAction.php b/app/Filament/HeaderActions/Models/Wiki/Studio/AttachStudioResourceHeaderAction.php index 9cba1d697..98c2e9f3e 100644 --- a/app/Filament/HeaderActions/Models/Wiki/Studio/AttachStudioResourceHeaderAction.php +++ b/app/Filament/HeaderActions/Models/Wiki/Studio/AttachStudioResourceHeaderAction.php @@ -25,6 +25,14 @@ protected function setUp(): void { parent::setUp(); + $this->sites([ + ResourceSite::ANIDB, + ResourceSite::ANILIST, + ResourceSite::ANIME_PLANET, + ResourceSite::ANN, + ResourceSite::MAL, + ]); + $this->action(fn (Studio $record, array $data) => (new AttachStudioResourceActionAction($this->sites))->handle($record, $data)); } diff --git a/app/Filament/HeaderActions/Models/Wiki/Studio/BackfillStudioHeaderAction.php b/app/Filament/HeaderActions/Models/Wiki/Studio/BackfillStudioHeaderAction.php index 7508d1953..58ea81b03 100644 --- a/app/Filament/HeaderActions/Models/Wiki/Studio/BackfillStudioHeaderAction.php +++ b/app/Filament/HeaderActions/Models/Wiki/Studio/BackfillStudioHeaderAction.php @@ -7,7 +7,7 @@ use App\Actions\Models\BackfillAction; use App\Actions\Models\Wiki\Studio\Image\BackfillLargeCoverImageAction; use App\Enums\Models\Wiki\ImageFacet; -use App\Models\BaseModel; +use App\Filament\HeaderActions\BaseHeaderAction; use App\Models\Wiki\Image; use App\Models\Wiki\Studio; use Exception; @@ -16,7 +16,7 @@ use Filament\Forms\Form; use Filament\Notifications\Actions\Action as NotificationAction; use Filament\Notifications\Notification; -use Filament\Actions\Action; +use Filament\Support\Enums\MaxWidth; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Queue\InteractsWithQueue; @@ -26,7 +26,7 @@ /** * Class BackfillStudioHeaderAction. */ -class BackfillStudioHeaderAction extends Action implements ShouldQueue +class BackfillStudioHeaderAction extends BaseHeaderAction implements ShouldQueue { use InteractsWithQueue; use Queueable; @@ -42,6 +42,12 @@ protected function setUp(): void { parent::setUp(); + $this->label(__('filament.actions.studio.backfill.name')); + + $this->modalWidth(MaxWidth::FourExtraLarge); + + $this->authorize('update', Studio::class); + $this->action(fn (Studio $record, array $data) => $this->handle($record, $data)); } diff --git a/app/Filament/HeaderActions/Models/Wiki/Video/BackfillAudioHeaderAction.php b/app/Filament/HeaderActions/Models/Wiki/Video/BackfillAudioHeaderAction.php index 6f1aa20c5..e20e61eda 100644 --- a/app/Filament/HeaderActions/Models/Wiki/Video/BackfillAudioHeaderAction.php +++ b/app/Filament/HeaderActions/Models/Wiki/Video/BackfillAudioHeaderAction.php @@ -8,12 +8,14 @@ use App\Enums\Actions\Models\Wiki\Video\DeriveSourceVideo; use App\Enums\Actions\Models\Wiki\Video\OverwriteAudio; use App\Filament\Components\Fields\Select; +use App\Filament\HeaderActions\BaseHeaderAction; +use App\Models\Wiki\Audio; use App\Models\Wiki\Video; use Exception; use Filament\Forms\Form; use Filament\Notifications\Actions\Action as NotificationAction; use Filament\Notifications\Notification; -use Filament\Actions\Action; +use Filament\Support\Enums\MaxWidth; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Queue\InteractsWithQueue; @@ -23,7 +25,7 @@ /** * Class BackfillAudioHeaderAction. */ -class BackfillAudioHeaderAction extends Action implements ShouldQueue +class BackfillAudioHeaderAction extends BaseHeaderAction implements ShouldQueue { use InteractsWithQueue; use Queueable; @@ -40,6 +42,12 @@ protected function setUp(): void { parent::setUp(); + $this->label(__('filament.actions.video.backfill.name')); + + $this->modalWidth(MaxWidth::TwoExtraLarge); + + $this->authorize('create', Audio::class); + $this->action(fn (Video $record, array $data) => $this->handle($record, $data)); } diff --git a/app/Filament/HeaderActions/Storage/StorageHeaderAction.php b/app/Filament/HeaderActions/Storage/StorageHeaderAction.php index 7cd17613d..efc7e0fa9 100644 --- a/app/Filament/HeaderActions/Storage/StorageHeaderAction.php +++ b/app/Filament/HeaderActions/Storage/StorageHeaderAction.php @@ -5,14 +5,13 @@ namespace App\Filament\HeaderActions\Storage; use App\Contracts\Actions\Storage\StorageAction as BaseStorageAction; +use App\Filament\HeaderActions\BaseHeaderAction; use App\Models\BaseModel; -use Filament\Actions\Action; -use Illuminate\Database\Eloquent\Model; /** * Class StorageHeaderAction. */ -abstract class StorageHeaderAction extends Action +abstract class StorageHeaderAction extends BaseHeaderAction { /** * Initial setup for the action. diff --git a/app/Filament/HeaderActions/Storage/Wiki/Audio/DeleteAudioHeaderAction.php b/app/Filament/HeaderActions/Storage/Wiki/Audio/DeleteAudioHeaderAction.php index 02c0ad453..7e63df554 100644 --- a/app/Filament/HeaderActions/Storage/Wiki/Audio/DeleteAudioHeaderAction.php +++ b/app/Filament/HeaderActions/Storage/Wiki/Audio/DeleteAudioHeaderAction.php @@ -14,6 +14,20 @@ */ class DeleteAudioHeaderAction extends DeleteHeaderAction { + /** + * Initial setup for the action. + * + * @return void + */ + protected function setUp(): void + { + parent::setUp(); + + $this->label(__('filament.actions.audio.delete.name')); + + $this->authorize('forcedelete', Audio::class); + } + /** * Get the underlying storage action. * diff --git a/app/Filament/HeaderActions/Storage/Wiki/Audio/MoveAudioHeaderAction.php b/app/Filament/HeaderActions/Storage/Wiki/Audio/MoveAudioHeaderAction.php index 5ab0a5581..827297040 100644 --- a/app/Filament/HeaderActions/Storage/Wiki/Audio/MoveAudioHeaderAction.php +++ b/app/Filament/HeaderActions/Storage/Wiki/Audio/MoveAudioHeaderAction.php @@ -17,6 +17,20 @@ */ class MoveAudioHeaderAction extends MoveHeaderAction { + /** + * Initial setup for the action. + * + * @return void + */ + protected function setUp(): void + { + parent::setUp(); + + $this->label(__('filament.actions.audio.move.name')); + + $this->authorize('create', Audio::class); + } + /** * Get the underlying storage action. * diff --git a/app/Filament/HeaderActions/Storage/Wiki/Video/DeleteVideoHeaderAction.php b/app/Filament/HeaderActions/Storage/Wiki/Video/DeleteVideoHeaderAction.php index 5710c4190..0a1f835fd 100644 --- a/app/Filament/HeaderActions/Storage/Wiki/Video/DeleteVideoHeaderAction.php +++ b/app/Filament/HeaderActions/Storage/Wiki/Video/DeleteVideoHeaderAction.php @@ -14,6 +14,20 @@ */ class DeleteVideoHeaderAction extends DeleteHeaderAction { + /** + * Initial setup for the action. + * + * @return void + */ + protected function setUp(): void + { + parent::setUp(); + + $this->label(__('filament.actions.video.delete.name')); + + $this->authorize('forcedelete', Video::class); + } + /** * Get the underlying storage action. * diff --git a/app/Filament/HeaderActions/Storage/Wiki/Video/MoveVideoHeaderAction.php b/app/Filament/HeaderActions/Storage/Wiki/Video/MoveVideoHeaderAction.php index 3f7ab3ba2..42d80aad4 100644 --- a/app/Filament/HeaderActions/Storage/Wiki/Video/MoveVideoHeaderAction.php +++ b/app/Filament/HeaderActions/Storage/Wiki/Video/MoveVideoHeaderAction.php @@ -17,6 +17,20 @@ */ class MoveVideoHeaderAction extends MoveHeaderAction { + /** + * Initial setup for the action. + * + * @return void + */ + protected function setUp(): void + { + parent::setUp(); + + $this->label(__('filament.actions.video.move.name')); + + $this->authorize('create', Video::class); + } + /** * Get the underlying storage action. * diff --git a/app/Filament/HeaderActions/Storage/Wiki/Video/Script/DeleteScriptHeaderAction.php b/app/Filament/HeaderActions/Storage/Wiki/Video/Script/DeleteScriptHeaderAction.php index 75aeac956..559f0f68a 100644 --- a/app/Filament/HeaderActions/Storage/Wiki/Video/Script/DeleteScriptHeaderAction.php +++ b/app/Filament/HeaderActions/Storage/Wiki/Video/Script/DeleteScriptHeaderAction.php @@ -14,6 +14,20 @@ */ class DeleteScriptHeaderAction extends DeleteHeaderAction { + /** + * Initial setup for the action. + * + * @return void + */ + protected function setUp(): void + { + parent::setUp(); + + $this->label(__('filament.actions.video_script.delete.name')); + + $this->authorize('delete', VideoScript::class); + } + /** * Get the underlying storage action. * diff --git a/app/Filament/HeaderActions/Storage/Wiki/Video/Script/MoveScriptHeaderAction.php b/app/Filament/HeaderActions/Storage/Wiki/Video/Script/MoveScriptHeaderAction.php index 3804ab6fc..2d2fe1c52 100644 --- a/app/Filament/HeaderActions/Storage/Wiki/Video/Script/MoveScriptHeaderAction.php +++ b/app/Filament/HeaderActions/Storage/Wiki/Video/Script/MoveScriptHeaderAction.php @@ -9,7 +9,6 @@ use App\Models\Wiki\Video\VideoScript; use App\Filament\HeaderActions\Storage\Base\MoveHeaderAction; use App\Models\BaseModel; -use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Arr; use Illuminate\Support\Facades\Config; @@ -18,6 +17,20 @@ */ class MoveScriptHeaderAction extends MoveHeaderAction { + /** + * Initial setup for the action. + * + * @return void + */ + protected function setUp(): void + { + parent::setUp(); + + $this->label(__('filament.actions.video_script.move.name')); + + $this->authorize('create', VideoScript::class); + } + /** * Get the underlying storage action. * diff --git a/app/Filament/RelationManagers/BaseRelationManager.php b/app/Filament/RelationManagers/BaseRelationManager.php index 93a3376c0..3e233b824 100644 --- a/app/Filament/RelationManagers/BaseRelationManager.php +++ b/app/Filament/RelationManagers/BaseRelationManager.php @@ -4,6 +4,7 @@ namespace App\Filament\RelationManagers; +use App\Filament\Components\Columns\TextColumn; use App\Filament\Components\Fields\Select; use App\Filament\RelationManagers\Wiki\ResourceRelationManager; use App\Filament\Resources\Wiki\Artist\RelationManagers\SongArtistRelationManager; @@ -12,8 +13,11 @@ use App\Filament\Resources\Wiki\ExternalResource\RelationManagers\SongResourceRelationManager; use App\Filament\Resources\Wiki\ExternalResource\RelationManagers\StudioResourceRelationManager; use App\Filament\Resources\Wiki\Song\RelationManagers\ArtistSongRelationManager; +use App\Models\BaseModel; +use App\Pivots\BasePivot; use App\Pivots\Wiki\AnimeResource; use App\Pivots\Wiki\ArtistSong; +use DateTime; use Filament\Forms\Components\TextInput; use Filament\Forms\Form; use Filament\Resources\RelationManagers\RelationManager; @@ -23,6 +27,7 @@ use Filament\Tables\Filters\TrashedFilter; use Filament\Tables\Table; use Illuminate\Database\Eloquent\Relations\BelongsToMany; +use Illuminate\Support\Arr; /** * Class BaseRelationManager. @@ -52,6 +57,26 @@ public function isReadOnly(): bool public function table(Table $table): Table { return $table + ->columns(array_merge( + $table->getColumns(), + [ + TextColumn::make(BasePivot::ATTRIBUTE_CREATED_AT) + ->label(__('filament.fields.base.created_at')) + ->hidden(fn ($livewire) => !($livewire->getRelationship() instanceof BelongsToMany)) + ->formatStateUsing(function (BaseModel $record) { + $pivot = current($record->getRelations()); + return (new DateTime(Arr::get($pivot->getAttributes(), BasePivot::ATTRIBUTE_CREATED_AT)))->format('M j, Y H:i:s'); + }), + + TextColumn::make(BasePivot::ATTRIBUTE_UPDATED_AT) + ->label(__('filament.fields.base.updated_at')) + ->hidden(fn ($livewire) => !($livewire->getRelationship() instanceof BelongsToMany)) + ->formatStateUsing(function (BaseModel $record) { + $pivot = current($record->getRelations()); + return (new DateTime(Arr::get($pivot->getAttributes(), BasePivot::ATTRIBUTE_UPDATED_AT)))->format('M j, Y H:i:s'); + }), + ], + )) ->filters(static::getFilters()) ->filtersFormMaxHeight('400px') ->actions(static::getActions()) diff --git a/app/Filament/Resources/Admin/Dump.php b/app/Filament/Resources/Admin/Dump.php index 6d2e5e04c..4e7655dc9 100644 --- a/app/Filament/Resources/Admin/Dump.php +++ b/app/Filament/Resources/Admin/Dump.php @@ -250,29 +250,13 @@ public static function getHeaderActions(): array { return [ ActionGroup::make([ - DumpWikiTableAction::make('dump-wiki') - ->label(__('filament.actions.dump.dump.name.wiki')) - ->icon(__('filament.table_actions.dump.dump.icon')) - ->requiresConfirmation() - ->authorize('create', DumpModel::class), + DumpWikiTableAction::make('dump-wiki'), - DumpDocumentTableAction::make('dump-document') - ->label(__('filament.actions.dump.dump.name.document')) - ->icon(__('filament.table_actions.dump.dump.icon')) - ->requiresConfirmation() - ->authorize('create', DumpModel::class), + DumpDocumentTableAction::make('dump-document'), - PruneDumpTableAction::make('prune-dump') - ->label(__('filament.actions.dump.prune.name')) - ->icon(__('filament.table_actions.dump.prune.icon')) - ->requiresConfirmation() - ->authorize('forcedeleteany', DumpModel::class), + PruneDumpTableAction::make('prune-dump'), - ReconcileDumpTableAction::make('reconcile-dump') - ->label(__('filament.actions.repositories.name', ['label' => __('filament.resources.label.dumps')])) - ->icon(__('filament.table_actions.base.reconcile.icon')) - ->requiresConfirmation() - ->authorize('create', DumpModel::class), + ReconcileDumpTableAction::make('reconcile-dump'), ]), ]; } diff --git a/app/Filament/Resources/Admin/Feature.php b/app/Filament/Resources/Admin/Feature.php index 5efc82c9b..67bdb0df0 100644 --- a/app/Filament/Resources/Admin/Feature.php +++ b/app/Filament/Resources/Admin/Feature.php @@ -4,6 +4,7 @@ namespace App\Filament\Resources\Admin; +use App\Constants\FeatureConstants; use App\Filament\Components\Columns\TextColumn; use App\Filament\Components\Infolist\TextEntry; use App\Filament\Resources\BaseResource; @@ -17,6 +18,7 @@ use Filament\Infolists\Components\Section; use Filament\Infolists\Infolist; use Filament\Tables\Table; +use Illuminate\Database\Eloquent\Builder; /** * Class Feature. @@ -143,6 +145,7 @@ public static function form(Form $form): Form public static function table(Table $table): Table { return parent::table($table) + ->modifyQueryUsing(fn (Builder $query) => $query->where(FeatureModel::ATTRIBUTE_SCOPE, FeatureConstants::NULL_SCOPE)) ->columns([ TextColumn::make(FeatureModel::ATTRIBUTE_ID) ->label(__('filament.fields.base.id')) @@ -151,6 +154,7 @@ public static function table(Table $table): Table TextColumn::make(FeatureModel::ATTRIBUTE_NAME) ->label(__('filament.fields.feature.key.name')) ->sortable() + ->searchable() ->copyableWithMessage(), TextColumn::make(FeatureModel::ATTRIBUTE_VALUE) diff --git a/app/Filament/Resources/Auth/Permission.php b/app/Filament/Resources/Auth/Permission.php index da3862a11..42c384800 100644 --- a/app/Filament/Resources/Auth/Permission.php +++ b/app/Filament/Resources/Auth/Permission.php @@ -226,13 +226,9 @@ public static function getActions(): array parent::getActions(), [ ActionGroup::make([ - GiveRoleAction::make('give-role') - ->label(__('filament.actions.permission.give_role.name')) - ->requiresConfirmation(), + GiveRoleAction::make('give-role'), - RevokeRoleAction::make('revoke-role') - ->label(__('filament.actions.permission.revoke_role.name')) - ->requiresConfirmation(), + RevokeRoleAction::make('revoke-role'), ]), ], ); diff --git a/app/Filament/Resources/Auth/Role.php b/app/Filament/Resources/Auth/Role.php index 880c3b464..b2f003276 100644 --- a/app/Filament/Resources/Auth/Role.php +++ b/app/Filament/Resources/Auth/Role.php @@ -285,13 +285,9 @@ public static function getActions(): array parent::getActions(), [ ActionGroup::make([ - GivePermissionAction::make('give-permission') - ->label(__('filament.actions.role.give_permission.name')) - ->requiresConfirmation(), + GivePermissionAction::make('give-permission'), - RevokePermissionAction::make('revoke-permission') - ->label(__('filament.actions.role.revoke_permission.name')) - ->requiresConfirmation(), + RevokePermissionAction::make('revoke-permission'), ]), ], ); diff --git a/app/Filament/Resources/Auth/Role/Pages/EditRole.php b/app/Filament/Resources/Auth/Role/Pages/EditRole.php index 755413d47..883a978c8 100644 --- a/app/Filament/Resources/Auth/Role/Pages/EditRole.php +++ b/app/Filament/Resources/Auth/Role/Pages/EditRole.php @@ -30,13 +30,9 @@ protected function getHeaderActions(): array parent::getHeaderActions(), [ ActionGroup::make([ - GivePermissionHeaderAction::make('give-permission') - ->label(__('filament.actions.role.give_permission.name')) - ->requiresConfirmation(), + GivePermissionHeaderAction::make('give-permission'), - RevokePermissionHeaderAction::make('revoke-permission') - ->label(__('filament.actions.role.revoke_permission.name')) - ->requiresConfirmation(), + RevokePermissionHeaderAction::make('revoke-permission'), ]), ], ); diff --git a/app/Filament/Resources/Auth/User.php b/app/Filament/Resources/Auth/User.php index fa5d32fce..c802040e4 100644 --- a/app/Filament/Resources/Auth/User.php +++ b/app/Filament/Resources/Auth/User.php @@ -257,21 +257,13 @@ public static function getActions(): array parent::getActions(), [ ActionGroup::make([ - GiveRoleAction::make('give-role') - ->label(__('filament.actions.user.give_role.name')) - ->requiresConfirmation(), + GiveRoleAction::make('give-role'), - RevokeRoleAction::make('revoke-role') - ->label(__('filament.actions.user.revoke_role.name')) - ->requiresConfirmation(), + RevokeRoleAction::make('revoke-role'), - GivePermissionAction::make('give-permission') - ->label(__('filament.actions.user.give_permission.name')) - ->requiresConfirmation(), + GivePermissionAction::make('give-permission'), - RevokePermissionAction::make('revoke-permission') - ->label(__('filament.actions.user.revoke_permission.name')) - ->requiresConfirmation(), + RevokePermissionAction::make('revoke-permission'), ]), ], ); diff --git a/app/Filament/Resources/Auth/User/Pages/EditUser.php b/app/Filament/Resources/Auth/User/Pages/EditUser.php index 20e0424e3..2516bc5ce 100644 --- a/app/Filament/Resources/Auth/User/Pages/EditUser.php +++ b/app/Filament/Resources/Auth/User/Pages/EditUser.php @@ -32,21 +32,13 @@ protected function getHeaderActions(): array parent::getHeaderActions(), [ ActionGroup::make([ - GiveRoleHeaderAction::make('give-role') - ->label(__('filament.actions.user.give_role.name')) - ->requiresConfirmation(), + GiveRoleHeaderAction::make('give-role'), - RevokeRoleHeaderAction::make('revoke-role') - ->label(__('filament.actions.user.revoke_role.name')) - ->requiresConfirmation(), + RevokeRoleHeaderAction::make('revoke-role'), - GivePermissionHeaderAction::make('give-permission') - ->label(__('filament.actions.user.give_permission.name')) - ->requiresConfirmation(), + GivePermissionHeaderAction::make('give-permission'), - RevokePermissionHeaderAction::make('revoke-permission') - ->label(__('filament.actions.user.revoke_permission.name')) - ->requiresConfirmation(), + RevokePermissionHeaderAction::make('revoke-permission'), ]), ], ); diff --git a/app/Filament/Resources/Base/BaseEditResource.php b/app/Filament/Resources/Base/BaseEditResource.php index 5d9a1ad04..eb774a30f 100644 --- a/app/Filament/Resources/Base/BaseEditResource.php +++ b/app/Filament/Resources/Base/BaseEditResource.php @@ -27,7 +27,8 @@ protected function getHeaderActions(): array { return [ ViewAction::make() - ->label(__('filament.actions.base.view')), + ->label(__('filament.actions.base.view')) + ->hidden(fn ($livewire) => $livewire instanceof BaseViewResource), ActionGroup::make([ DeleteAction::make() diff --git a/app/Filament/Resources/Discord/DiscordThread.php b/app/Filament/Resources/Discord/DiscordThread.php index 7c2fbf145..f11fee79b 100644 --- a/app/Filament/Resources/Discord/DiscordThread.php +++ b/app/Filament/Resources/Discord/DiscordThread.php @@ -24,7 +24,6 @@ use Filament\Forms\Set; use Filament\Infolists\Components\Section; use Filament\Infolists\Infolist; -use Filament\Support\Enums\MaxWidth; use Filament\Tables\Actions\ActionGroup; use Filament\Tables\Table; use Illuminate\Support\Arr; @@ -290,19 +289,9 @@ public static function getHeaderActions(): array parent::getHeaderActions(), [ ActionGroup::make([ - DiscordEditMessageTableAction::make('edit-message') - ->label(__('filament.table_actions.discord_thread.message.edit.name')) - ->icon(__('filament.table_actions.discord_thread.message.edit.icon')) - ->requiresConfirmation() - ->modalWidth(MaxWidth::FourExtraLarge) - ->authorize('forcedeleteany', DiscordThreadModel::class), + DiscordEditMessageTableAction::make('edit-message'), - DiscordSendMessageTableAction::make('send-message') - ->label(__('filament.table_actions.discord_thread.message.send.name')) - ->icon(__('filament.table_actions.discord_thread.message.send.icon')) - ->requiresConfirmation() - ->modalWidth(MaxWidth::FourExtraLarge) - ->authorize('forcedeleteany', DiscordThreadModel::class), + DiscordSendMessageTableAction::make('send-message'), ]), ], ); diff --git a/app/Filament/Resources/List/Playlist.php b/app/Filament/Resources/List/Playlist.php index 57514f95b..7da761213 100644 --- a/app/Filament/Resources/List/Playlist.php +++ b/app/Filament/Resources/List/Playlist.php @@ -336,9 +336,7 @@ public static function getActions(): array parent::getActions(), [ AssignHashidsAction::make('assign-hashids') - ->label(__('filament.actions.models.assign_hashids.name')) ->setConnection('playlists') - ->requiresConfirmation() ->authorize('update', PlaylistModel::class), ], ); diff --git a/app/Filament/Resources/List/Playlist/Pages/EditPlaylist.php b/app/Filament/Resources/List/Playlist/Pages/EditPlaylist.php index 9598befd1..382d2b8e7 100644 --- a/app/Filament/Resources/List/Playlist/Pages/EditPlaylist.php +++ b/app/Filament/Resources/List/Playlist/Pages/EditPlaylist.php @@ -29,9 +29,7 @@ protected function getHeaderActions(): array parent::getHeaderActions(), [ AssignHashidsHeaderAction::make('assign-hashids') - ->label(__('filament.actions.models.assign_hashids.name')) ->setConnection('playlists') - ->requiresConfirmation() ->authorize('update', PlaylistModel::class) ], ); diff --git a/app/Filament/Resources/List/Playlist/Track.php b/app/Filament/Resources/List/Playlist/Track.php index 99008cff7..d08e81b5f 100644 --- a/app/Filament/Resources/List/Playlist/Track.php +++ b/app/Filament/Resources/List/Playlist/Track.php @@ -272,9 +272,7 @@ public static function getActions(): array parent::getActions(), [ AssignHashidsAction::make('assign-hashids') - ->label(__('filament.actions.models.assign_hashids.name')) ->setConnection('playlists') - ->requiresConfirmation() ->authorize('update', TrackModel::class), ], ); diff --git a/app/Filament/Resources/List/Playlist/Track/Pages/EditTrack.php b/app/Filament/Resources/List/Playlist/Track/Pages/EditTrack.php index def4ea93b..a85777140 100644 --- a/app/Filament/Resources/List/Playlist/Track/Pages/EditTrack.php +++ b/app/Filament/Resources/List/Playlist/Track/Pages/EditTrack.php @@ -29,9 +29,7 @@ protected function getHeaderActions(): array parent::getHeaderActions(), [ AssignHashidsHeaderAction::make('assign-hashids') - ->label(__('filament.actions.models.assign_hashids.name')) ->setConnection('playlists') - ->requiresConfirmation() ->authorize('update', PlaylistTrack::class) ], ); diff --git a/app/Filament/Resources/Wiki/Anime.php b/app/Filament/Resources/Wiki/Anime.php index 7a784e675..5d23d9e15 100644 --- a/app/Filament/Resources/Wiki/Anime.php +++ b/app/Filament/Resources/Wiki/Anime.php @@ -6,7 +6,6 @@ use App\Enums\Models\Wiki\AnimeMediaFormat; use App\Enums\Models\Wiki\AnimeSeason; -use App\Enums\Models\Wiki\ImageFacet; use App\Enums\Models\Wiki\ResourceSite; use App\Filament\Actions\Discord\DiscordThreadAction; use App\Filament\Actions\Models\Wiki\Anime\AttachAnimeImageAction; @@ -28,10 +27,7 @@ use App\Filament\Resources\Wiki\Anime\RelationManagers\SynonymAnimeRelationManager; use App\Filament\Resources\Wiki\Anime\RelationManagers\ThemeAnimeRelationManager; use App\Filament\Resources\Wiki\ExternalResource\RelationManagers\AnimeResourceRelationManager; -use App\Models\Discord\DiscordThread; use App\Models\Wiki\Anime as AnimeModel; -use App\Models\Wiki\ExternalResource; -use App\Models\Wiki\Image; use App\Pivots\Wiki\AnimeResource; use Filament\Forms\Components\MarkdownEditor; use Filament\Forms\Components\TextInput; @@ -40,7 +36,6 @@ use Filament\Infolists\Components\Section; use Filament\Infolists\Infolist; use Filament\Resources\RelationManagers\RelationGroup; -use Filament\Support\Enums\MaxWidth; use Filament\Tables\Actions\ActionGroup; use Filament\Tables\Filters\SelectFilter; use Filament\Tables\Table; @@ -403,19 +398,6 @@ public static function getFilters(): array */ public static function getActions(): array { - $resourceSites = [ - ResourceSite::ANIDB, - ResourceSite::ANILIST, - ResourceSite::ANIME_PLANET, - ResourceSite::ANN, - ResourceSite::KITSU, - ResourceSite::MAL, - ResourceSite::OFFICIAL_SITE, - ResourceSite::TWITTER, - ResourceSite::YOUTUBE, - ResourceSite::WIKI, - ]; - $streamingResourceSites = [ ResourceSite::CRUNCHYROLL, ResourceSite::HIDIVE, @@ -425,50 +407,22 @@ public static function getActions(): array ResourceSite::AMAZON_PRIME_VIDEO, ]; - $facets = [ - ImageFacet::COVER_SMALL, - ImageFacet::COVER_LARGE, - ]; - return array_merge( parent::getActions(), [ ActionGroup::make([ - DiscordThreadAction::make('discord-thread') - ->label(__('filament.actions.anime.discord.thread.name')) - ->icon('heroicon-o-chat-bubble-left-right') - ->requiresConfirmation() - ->authorize('create', DiscordThread::class), - - BackfillAnimeAction::make('backfill-anime') - ->label(__('filament.actions.anime.backfill.name')) - ->icon('heroicon-o-bars-4') - ->requiresConfirmation() - ->modalWidth(MaxWidth::FourExtraLarge) - ->authorize('create', AnimeModel::class), - - AttachAnimeImageAction::make('attach-anime-image') - ->label(__('filament.actions.models.wiki.attach_image.name')) - ->icon('heroicon-o-photo') - ->facets($facets) - ->requiresConfirmation() - ->authorize('create', Image::class), - - AttachAnimeResourceAction::make('attach-anime-resource') - ->label(__('filament.actions.models.wiki.attach_resource.name')) - ->icon('heroicon-o-queue-list') - ->sites($resourceSites) - ->requiresConfirmation() - ->modalWidth(MaxWidth::FourExtraLarge) - ->authorize('create', ExternalResource::class), + DiscordThreadAction::make('discord-thread'), + + BackfillAnimeAction::make('backfill-anime'), + + AttachAnimeImageAction::make('attach-anime-image'), + + AttachAnimeResourceAction::make('attach-anime-resource'), AttachAnimeResourceAction::make('attach-anime-streaming-resource') ->label(__('filament.actions.models.wiki.attach_streaming_resource.name')) ->icon('heroicon-o-tv') - ->sites($streamingResourceSites) - ->requiresConfirmation() - ->modalWidth(MaxWidth::FourExtraLarge) - ->authorize('create', ExternalResource::class), + ->sites($streamingResourceSites), ]), ], ); diff --git a/app/Filament/Resources/Wiki/Anime/Pages/EditAnime.php b/app/Filament/Resources/Wiki/Anime/Pages/EditAnime.php index ffb5f4dab..5e6cec14d 100644 --- a/app/Filament/Resources/Wiki/Anime/Pages/EditAnime.php +++ b/app/Filament/Resources/Wiki/Anime/Pages/EditAnime.php @@ -12,12 +12,7 @@ use App\Filament\HeaderActions\Models\Wiki\Anime\BackfillAnimeHeaderAction; use App\Filament\Resources\Wiki\Anime; use App\Filament\Resources\Base\BaseEditResource; -use App\Models\Discord\DiscordThread; -use App\Models\Wiki\Anime as AnimeModel; -use App\Models\Wiki\ExternalResource; -use App\Models\Wiki\Image; use Filament\Actions\ActionGroup; -use Filament\Support\Enums\MaxWidth; /** * Class EditAnime. @@ -66,41 +61,18 @@ protected function getHeaderActions(): array parent::getHeaderActions(), [ ActionGroup::make([ - DiscordThreadHeaderAction::make('discord-thread-header') - ->label(__('filament.actions.anime.discord.thread.name')) - ->icon('heroicon-o-chat-bubble-left-right') - ->requiresConfirmation() - ->authorize('create', DiscordThread::class), + DiscordThreadHeaderAction::make('discord-thread-header'), - BackfillAnimeHeaderAction::make('backfill-anime') - ->label(__('filament.actions.anime.backfill.name')) - ->icon('heroicon-o-bars-4') - ->requiresConfirmation() - ->modalWidth(MaxWidth::FourExtraLarge) - ->authorize('create', AnimeModel::class), + BackfillAnimeHeaderAction::make('backfill-anime'), - AttachAnimeImageHeaderAction::make('attach-anime-image') - ->label(__('filament.actions.models.wiki.attach_image.name')) - ->icon('heroicon-o-photo') - ->facets($facets) - ->requiresConfirmation() - ->authorize('create', Image::class), + AttachAnimeImageHeaderAction::make('attach-anime-image'), - AttachAnimeResourceHeaderAction::make('attach-anime-resource') - ->label(__('filament.actions.models.wiki.attach_resource.name')) - ->icon('heroicon-o-queue-list') - ->sites($resourceSites) - ->requiresConfirmation() - ->modalWidth(MaxWidth::FourExtraLarge) - ->authorize('create', ExternalResource::class), + AttachAnimeResourceHeaderAction::make('attach-anime-resource'), AttachAnimeResourceHeaderAction::make('attach-anime-streaming-resource') ->label(__('filament.actions.models.wiki.attach_streaming_resource.name')) ->icon('heroicon-o-tv') - ->sites($streamingResourceSites) - ->requiresConfirmation() - ->modalWidth(MaxWidth::FourExtraLarge) - ->authorize('create', ExternalResource::class), + ->sites($streamingResourceSites), ]), ], ); diff --git a/app/Filament/Resources/Wiki/Artist.php b/app/Filament/Resources/Wiki/Artist.php index 020ab6a99..c24387f89 100644 --- a/app/Filament/Resources/Wiki/Artist.php +++ b/app/Filament/Resources/Wiki/Artist.php @@ -4,8 +4,6 @@ namespace App\Filament\Resources\Wiki; -use App\Enums\Models\Wiki\ImageFacet; -use App\Enums\Models\Wiki\ResourceSite; use App\Filament\Actions\Models\Wiki\Artist\AttachArtistImageAction; use App\Filament\Actions\Models\Wiki\Artist\AttachArtistResourceAction; use App\Filament\Components\Columns\TextColumn; @@ -31,7 +29,6 @@ use Filament\Infolists\Components\Section; use Filament\Infolists\Infolist; use Filament\Resources\RelationManagers\RelationGroup; -use Filament\Support\Enums\MaxWidth; use Filament\Tables\Actions\ActionGroup; use Filament\Tables\Table; use Illuminate\Support\Str; @@ -314,43 +311,13 @@ public static function getFilters(): array */ public static function getActions(): array { - $facets = [ - ImageFacet::COVER_SMALL, - ImageFacet::COVER_LARGE, - ]; - - $resourceSites = [ - ResourceSite::ANIDB, - ResourceSite::ANILIST, - ResourceSite::ANIME_PLANET, - ResourceSite::ANN, - ResourceSite::MAL, - ResourceSite::OFFICIAL_SITE, - ResourceSite::SPOTIFY, - ResourceSite::TWITTER, - ResourceSite::YOUTUBE, - ResourceSite::YOUTUBE_MUSIC, - ResourceSite::WIKI, - ]; - return array_merge( parent::getActions(), [ ActionGroup::make([ - AttachArtistImageAction::make('attach-artist-image') - ->label(__('filament.actions.models.wiki.attach_image.name')) - ->icon('heroicon-o-photo') - ->facets($facets) - ->requiresConfirmation() - ->authorize('create', Image::class), - - AttachArtistResourceAction::make('attach-artist-resource') - ->label(__('filament.actions.models.wiki.attach_resource.name')) - ->icon('heroicon-o-queue-list') - ->sites($resourceSites) - ->requiresConfirmation() - ->modalWidth(MaxWidth::FourExtraLarge) - ->authorize('create', ExternalResource::class), + AttachArtistImageAction::make('attach-artist-image'), + + AttachArtistResourceAction::make('attach-artist-resource'), ]) ], ); diff --git a/app/Filament/Resources/Wiki/Artist/Pages/EditArtist.php b/app/Filament/Resources/Wiki/Artist/Pages/EditArtist.php index b8dcdeb05..a6442c7c4 100644 --- a/app/Filament/Resources/Wiki/Artist/Pages/EditArtist.php +++ b/app/Filament/Resources/Wiki/Artist/Pages/EditArtist.php @@ -4,16 +4,11 @@ namespace App\Filament\Resources\Wiki\Artist\Pages; -use App\Enums\Models\Wiki\ImageFacet; -use App\Enums\Models\Wiki\ResourceSite; use App\Filament\HeaderActions\Models\Wiki\Artist\AttachArtistImageHeaderAction; use App\Filament\HeaderActions\Models\Wiki\Artist\AttachArtistResourceHeaderAction; use App\Filament\Resources\Base\BaseEditResource; use App\Filament\Resources\Wiki\Artist; -use App\Models\Wiki\ExternalResource; -use App\Models\Wiki\Image; use Filament\Actions\ActionGroup; -use Filament\Support\Enums\MaxWidth; /** * Class EditArtist. @@ -31,43 +26,13 @@ class EditArtist extends BaseEditResource */ protected function getHeaderActions(): array { - $facets = [ - ImageFacet::COVER_SMALL, - ImageFacet::COVER_LARGE, - ]; - - $resourceSites = [ - ResourceSite::ANIDB, - ResourceSite::ANILIST, - ResourceSite::ANIME_PLANET, - ResourceSite::ANN, - ResourceSite::MAL, - ResourceSite::OFFICIAL_SITE, - ResourceSite::SPOTIFY, - ResourceSite::TWITTER, - ResourceSite::YOUTUBE, - ResourceSite::YOUTUBE_MUSIC, - ResourceSite::WIKI, - ]; - return array_merge( parent::getHeaderActions(), [ ActionGroup::make([ - AttachArtistImageHeaderAction::make('attach-artist-image') - ->label(__('filament.actions.models.wiki.attach_image.name')) - ->icon('heroicon-o-photo') - ->facets($facets) - ->requiresConfirmation() - ->authorize('create', Image::class), + AttachArtistImageHeaderAction::make('attach-artist-image'), - AttachArtistResourceHeaderAction::make('attach-artist-resource') - ->label(__('filament.actions.models.wiki.attach_resource.name')) - ->icon('heroicon-o-queue-list') - ->sites($resourceSites) - ->requiresConfirmation() - ->modalWidth(MaxWidth::FourExtraLarge) - ->authorize('create', ExternalResource::class), + AttachArtistResourceHeaderAction::make('attach-artist-resource'), ]) ], ); diff --git a/app/Filament/Resources/Wiki/Audio.php b/app/Filament/Resources/Wiki/Audio.php index 8382d4d18..aeeae5ae0 100644 --- a/app/Filament/Resources/Wiki/Audio.php +++ b/app/Filament/Resources/Wiki/Audio.php @@ -7,6 +7,7 @@ use App\Filament\Actions\Models\Wiki\Audio\AttachAudioToRelatedVideosAction; use App\Filament\Actions\Storage\Wiki\Audio\DeleteAudioAction; use App\Filament\Actions\Storage\Wiki\Audio\MoveAudioAction; +use App\Filament\BulkActions\Storage\Wiki\Audio\DeleteAudioBulkAction; use App\Filament\Components\Columns\TextColumn; use App\Filament\Components\Filters\NumberFilter; use App\Filament\Components\Infolist\TextEntry; @@ -19,13 +20,11 @@ use App\Filament\TableActions\Repositories\Storage\Wiki\Audio\ReconcileAudioTableAction; use App\Filament\TableActions\Storage\Wiki\Audio\UploadAudioTableAction; use App\Models\Wiki\Audio as AudioModel; -use App\Models\Wiki\Video; use Filament\Forms\Components\TextInput; use Filament\Forms\Form; use Filament\Infolists\Components\Section; use Filament\Infolists\Infolist; use Filament\Resources\RelationManagers\RelationGroup; -use Filament\Support\Enums\MaxWidth; use Filament\Tables\Actions\ActionGroup; use Filament\Tables\Table; @@ -168,6 +167,7 @@ public static function table(Table $table): Table TextColumn::make(AudioModel::ATTRIBUTE_FILENAME) ->label(__('filament.fields.audio.filename.name')) ->sortable() + ->searchable() ->copyableWithMessage(), ]); } @@ -256,22 +256,11 @@ public static function getActions(): array parent::getActions(), [ ActionGroup::make([ - MoveAudioAction::make('move-audio') - ->label(__('filament.actions.audio.move.name')) - ->requiresConfirmation() - ->modalWidth(MaxWidth::FourExtraLarge) - ->authorize('create', AudioModel::class), + MoveAudioAction::make('move-audio'), - DeleteAudioAction::make('delete-audio') - ->label(__('filament.actions.audio.delete.name')) - ->requiresConfirmation() - ->modalWidth(MaxWidth::FourExtraLarge) - ->authorize('delete', AudioModel::class), + DeleteAudioAction::make('delete-audio'), - AttachAudioToRelatedVideosAction::make('attach-audio-related-video') - ->label(__('filament.actions.audio.attach_related_videos.name')) - ->requiresConfirmation() - ->authorize('update', Video::class), + AttachAudioToRelatedVideosAction::make('attach-audio-related-video'), ]), ], ); @@ -288,7 +277,9 @@ public static function getBulkActions(): array { return array_merge( parent::getBulkActions(), - [], + [ + DeleteAudioBulkAction::make('delete-audio'), + ], ); } @@ -303,18 +294,9 @@ public static function getHeaderActions(): array { return [ ActionGroup::make([ - UploadAudioTableAction::make('upload-audio') - ->label(__('filament.actions.audio.upload.name')) - ->icon(__('filament.table_actions.base.upload.icon')) - ->requiresConfirmation() - ->modalWidth(MaxWidth::FourExtraLarge) - ->authorize('create', AudioModel::class), + UploadAudioTableAction::make('upload-audio'), - ReconcileAudioTableAction::make('reconcile-audio') - ->label(__('filament.actions.repositories.name', ['label' => __('filament.resources.label.audios')])) - ->icon(__('filament.table_actions.base.reconcile.icon')) - ->requiresConfirmation() - ->authorize('create', AudioModel::class), + ReconcileAudioTableAction::make('reconcile-audio'), ]), ]; } diff --git a/app/Filament/Resources/Wiki/Audio/Pages/EditAudio.php b/app/Filament/Resources/Wiki/Audio/Pages/EditAudio.php index c18902e98..3202e5aa6 100644 --- a/app/Filament/Resources/Wiki/Audio/Pages/EditAudio.php +++ b/app/Filament/Resources/Wiki/Audio/Pages/EditAudio.php @@ -9,10 +9,7 @@ use App\Filament\HeaderActions\Storage\Wiki\Audio\MoveAudioHeaderAction; use App\Filament\Resources\Wiki\Audio; use App\Filament\Resources\Base\BaseEditResource; -use App\Models\Wiki\Audio as AudioModel; -use App\Models\Wiki\Video; use Filament\Actions\ActionGroup; -use Filament\Support\Enums\MaxWidth; /** * Class EditAudio. @@ -34,22 +31,11 @@ protected function getHeaderActions(): array parent::getHeaderActions(), [ ActionGroup::make([ - MoveAudioHeaderAction::make('move-audio') - ->label(__('filament.actions.audio.move.name')) - ->requiresConfirmation() - ->modalWidth(MaxWidth::FourExtraLarge) - ->authorize('create', AudioModel::class), + MoveAudioHeaderAction::make('move-audio'), - DeleteAudioHeaderAction::make('delete-audio') - ->label(__('filament.actions.audio.delete.name')) - ->requiresConfirmation() - ->modalWidth(MaxWidth::FourExtraLarge) - ->authorize('delete', AudioModel::class), + DeleteAudioHeaderAction::make('delete-audio'), - AttachAudioToRelatedVideosHeaderAction::make('attach-audio-related-video') - ->label(__('filament.actions.audio.attach_related_videos.name')) - ->requiresConfirmation() - ->authorize('update', Video::class), + AttachAudioToRelatedVideosHeaderAction::make('attach-audio-related-video'), ]), ], ); diff --git a/app/Filament/Resources/Wiki/Image.php b/app/Filament/Resources/Wiki/Image.php index 8892da6b7..9d630d215 100644 --- a/app/Filament/Resources/Wiki/Image.php +++ b/app/Filament/Resources/Wiki/Image.php @@ -24,7 +24,6 @@ use Filament\Infolists\Components\Section; use Filament\Infolists\Infolist; use Filament\Resources\RelationManagers\RelationGroup; -use Filament\Support\Enums\MaxWidth; use Filament\Tables\Columns\ImageColumn; use Filament\Tables\Filters\SelectFilter; use Filament\Tables\Table; @@ -277,12 +276,7 @@ public static function getBulkActions(): array public static function getHeaderActions(): array { return [ - UploadImageTableAction::make('upload-image') - ->label(__('filament.actions.models.wiki.upload_image.name')) - ->requiresConfirmation() - ->facets([ImageFacet::GRILL, ImageFacet::DOCUMENT]) - ->modalWidth(MaxWidth::FourExtraLarge) - ->authorize('create', ImageModel::class), + UploadImageTableAction::make('upload-image'), ]; } diff --git a/app/Filament/Resources/Wiki/Song.php b/app/Filament/Resources/Wiki/Song.php index c50e249c3..cadc8d651 100644 --- a/app/Filament/Resources/Wiki/Song.php +++ b/app/Filament/Resources/Wiki/Song.php @@ -4,7 +4,6 @@ namespace App\Filament\Resources\Wiki; -use App\Enums\Models\Wiki\ResourceSite; use App\Filament\Actions\Models\Wiki\Song\AttachSongResourceAction; use App\Filament\Components\Columns\TextColumn; use App\Filament\Components\Infolist\TextEntry; @@ -26,7 +25,6 @@ use Filament\Infolists\Components\Section; use Filament\Infolists\Infolist; use Filament\Resources\RelationManagers\RelationGroup; -use Filament\Support\Enums\MaxWidth; use Filament\Tables\Actions\ActionGroup; use Filament\Tables\Table; @@ -279,26 +277,11 @@ public static function getFilters(): array */ public static function getActions(): array { - $resourceSites = [ - ResourceSite::ANIDB, - ResourceSite::SPOTIFY, - ResourceSite::YOUTUBE_MUSIC, - ResourceSite::YOUTUBE, - ResourceSite::APPLE_MUSIC, - ResourceSite::AMAZON_MUSIC, - ]; - return array_merge( parent::getActions(), [ ActionGroup::make([ - AttachSongResourceAction::make('attach-song-resource') - ->label(__('filament.actions.models.wiki.attach_resource.name')) - ->icon('heroicon-o-queue-list') - ->sites($resourceSites) - ->requiresConfirmation() - ->modalWidth(MaxWidth::FourExtraLarge) - ->authorize('create', ExternalResource::class), + AttachSongResourceAction::make('attach-song-resource'), ]) ], ); diff --git a/app/Filament/Resources/Wiki/Song/Pages/EditSong.php b/app/Filament/Resources/Wiki/Song/Pages/EditSong.php index ec813cf62..9fc5b5d16 100644 --- a/app/Filament/Resources/Wiki/Song/Pages/EditSong.php +++ b/app/Filament/Resources/Wiki/Song/Pages/EditSong.php @@ -4,13 +4,10 @@ namespace App\Filament\Resources\Wiki\Song\Pages; -use App\Enums\Models\Wiki\ResourceSite; use App\Filament\HeaderActions\Models\Wiki\Song\AttachSongResourceHeaderAction; use App\Filament\Resources\Base\BaseEditResource; use App\Filament\Resources\Wiki\Song; -use App\Models\Wiki\ExternalResource; use Filament\Actions\ActionGroup; -use Filament\Support\Enums\MaxWidth; /** * Class EditSong. @@ -28,26 +25,11 @@ class EditSong extends BaseEditResource */ protected function getHeaderActions(): array { - $resourceSites = [ - ResourceSite::ANIDB, - ResourceSite::SPOTIFY, - ResourceSite::YOUTUBE_MUSIC, - ResourceSite::YOUTUBE, - ResourceSite::APPLE_MUSIC, - ResourceSite::AMAZON_MUSIC, - ]; - return array_merge( parent::getHeaderActions(), [ ActionGroup::make([ - AttachSongResourceHeaderAction::make('attach-song-resource') - ->label(__('filament.actions.models.wiki.attach_resource.name')) - ->icon('heroicon-o-queue-list') - ->sites($resourceSites) - ->requiresConfirmation() - ->modalWidth(MaxWidth::FourExtraLarge) - ->authorize('create', ExternalResource::class), + AttachSongResourceHeaderAction::make('attach-song-resource'), ]) ], ); diff --git a/app/Filament/Resources/Wiki/Studio.php b/app/Filament/Resources/Wiki/Studio.php index 02a124648..f60de3fa8 100644 --- a/app/Filament/Resources/Wiki/Studio.php +++ b/app/Filament/Resources/Wiki/Studio.php @@ -4,8 +4,6 @@ namespace App\Filament\Resources\Wiki; -use App\Enums\Models\Wiki\ImageFacet; -use App\Enums\Models\Wiki\ResourceSite; use App\Filament\Actions\Models\Wiki\Studio\AttachStudioImageAction; use App\Filament\Actions\Models\Wiki\Studio\AttachStudioResourceAction; use App\Filament\Actions\Models\Wiki\Studio\BackfillStudioAction; @@ -28,7 +26,6 @@ use Filament\Infolists\Components\Section; use Filament\Infolists\Infolist; use Filament\Resources\RelationManagers\RelationGroup; -use Filament\Support\Enums\MaxWidth; use Filament\Tables\Actions\ActionGroup; use Filament\Tables\Table; use Illuminate\Support\Str; @@ -274,43 +271,15 @@ public static function getFilters(): array */ public static function getActions(): array { - $facets = [ - ImageFacet::COVER_SMALL, - ImageFacet::COVER_LARGE, - ]; - - $resourceSites = [ - ResourceSite::ANIDB, - ResourceSite::ANILIST, - ResourceSite::ANIME_PLANET, - ResourceSite::ANN, - ResourceSite::MAL, - ]; - return array_merge( parent::getActions(), [ ActionGroup::make([ - BackfillStudioAction::make('backfill-studio') - ->label(__('filament.actions.studio.backfill.name')) - ->requiresConfirmation() - ->modalWidth(MaxWidth::FourExtraLarge) - ->authorize('update', StudioModel::class), + BackfillStudioAction::make('backfill-studio'), - AttachStudioImageAction::make('attach-studio-image') - ->label(__('filament.actions.models.wiki.attach_image.name')) - ->icon('heroicon-o-photo') - ->facets($facets) - ->requiresConfirmation() - ->authorize('create', Image::class), + AttachStudioImageAction::make('attach-studio-image'), - AttachStudioResourceAction::make('attach-studio-resource') - ->label(__('filament.actions.models.wiki.attach_resource.name')) - ->icon('heroicon-o-queue-list') - ->sites($resourceSites) - ->requiresConfirmation() - ->modalWidth(MaxWidth::FourExtraLarge) - ->authorize('create', ExternalResource::class), + AttachStudioResourceAction::make('attach-studio-resource'), ]) ], ); diff --git a/app/Filament/Resources/Wiki/Studio/Pages/EditStudio.php b/app/Filament/Resources/Wiki/Studio/Pages/EditStudio.php index 35628e693..13b7f174d 100644 --- a/app/Filament/Resources/Wiki/Studio/Pages/EditStudio.php +++ b/app/Filament/Resources/Wiki/Studio/Pages/EditStudio.php @@ -4,19 +4,12 @@ namespace App\Filament\Resources\Wiki\Studio\Pages; -use App\Enums\Models\Wiki\ImageFacet; -use App\Enums\Models\Wiki\ResourceSite; use App\Filament\HeaderActions\Models\Wiki\Studio\AttachStudioImageHeaderAction; use App\Filament\HeaderActions\Models\Wiki\Studio\AttachStudioResourceHeaderAction; use App\Filament\HeaderActions\Models\Wiki\Studio\BackfillStudioHeaderAction; use App\Filament\Resources\Wiki\Studio; use App\Filament\Resources\Base\BaseEditResource; -use App\Models\Wiki\ExternalResource; -use App\Models\Wiki\Image; -use App\Models\Wiki\Studio as StudioModel; use Filament\Actions\ActionGroup; -use Filament\Support\Enums\MaxWidth; - /** * Class EditStudio. */ @@ -33,43 +26,15 @@ class EditStudio extends BaseEditResource */ protected function getHeaderActions(): array { - $facets = [ - ImageFacet::COVER_SMALL, - ImageFacet::COVER_LARGE, - ]; - - $resourceSites = [ - ResourceSite::ANIDB, - ResourceSite::ANILIST, - ResourceSite::ANIME_PLANET, - ResourceSite::ANN, - ResourceSite::MAL, - ]; - return array_merge( parent::getHeaderActions(), [ ActionGroup::make([ - BackfillStudioHeaderAction::make('backfill-studio') - ->label(__('filament.actions.studio.backfill.name')) - ->requiresConfirmation() - ->modalWidth(MaxWidth::FourExtraLarge) - ->authorize('update', StudioModel::class), + BackfillStudioHeaderAction::make('backfill-studio'), - AttachStudioImageHeaderAction::make('attach-studio-image') - ->label(__('filament.actions.models.wiki.attach_image.name')) - ->icon('heroicon-o-photo') - ->facets($facets) - ->requiresConfirmation() - ->authorize('create', Image::class), + AttachStudioImageHeaderAction::make('attach-studio-image'), - AttachStudioResourceHeaderAction::make('attach-studio-resource') - ->label(__('filament.actions.models.wiki.attach_resource.name')) - ->icon('heroicon-o-queue-list') - ->sites($resourceSites) - ->requiresConfirmation() - ->modalWidth(MaxWidth::FourExtraLarge) - ->authorize('create', ExternalResource::class), + AttachStudioResourceHeaderAction::make('attach-studio-resource'), ]) ], ); diff --git a/app/Filament/Resources/Wiki/Video.php b/app/Filament/Resources/Wiki/Video.php index 13212a0cb..0ec5a2e26 100644 --- a/app/Filament/Resources/Wiki/Video.php +++ b/app/Filament/Resources/Wiki/Video.php @@ -9,7 +9,8 @@ use App\Filament\Actions\Models\Wiki\Video\BackfillAudioAction; use App\Filament\Actions\Storage\Wiki\Video\DeleteVideoAction; use App\Filament\Actions\Storage\Wiki\Video\MoveVideoAction; -use App\Filament\BulkActions\Discord\DiscordVideoNotificationBulkAction; +use App\Filament\BulkActions\Models\Wiki\Video\VideoDiscordNotificationBulkAction; +use App\Filament\BulkActions\Storage\Wiki\Video\DeleteVideoBulkAction; use App\Filament\Components\Columns\TextColumn; use App\Filament\Components\Fields\Select; use App\Filament\Components\Filters\NumberFilter; @@ -24,7 +25,6 @@ use App\Filament\Resources\Wiki\Video\RelationManagers\TrackVideoRelationManager; use App\Filament\TableActions\Repositories\Storage\Wiki\Video\ReconcileVideoTableAction; use App\Filament\TableActions\Storage\Wiki\Video\UploadVideoTableAction; -use App\Models\Discord\DiscordThread; use App\Models\Wiki\Audio as AudioModel; use App\Models\Wiki\Video as VideoModel; use Filament\Forms\Components\Checkbox; @@ -33,7 +33,6 @@ use Filament\Infolists\Components\Section; use Filament\Infolists\Infolist; use Filament\Resources\RelationManagers\RelationGroup; -use Filament\Support\Enums\MaxWidth; use Filament\Tables\Actions\ActionGroup; use Filament\Tables\Columns\IconColumn; use Filament\Tables\Filters\Filter; @@ -369,23 +368,11 @@ public static function getActions(): array parent::getActions(), [ ActionGroup::make([ - BackfillAudioAction::make('backfill-audio') - ->label(__('filament.actions.video.backfill.name')) - ->requiresConfirmation() - ->modalWidth(MaxWidth::TwoExtraLarge) - ->authorize('create', VideoModel::class), - - MoveVideoAction::make('move-video') - ->label(__('filament.actions.video.move.name')) - ->requiresConfirmation() - ->modalWidth(MaxWidth::FourExtraLarge) - ->authorize('create', VideoModel::class), - - DeleteVideoAction::make('delete-video') - ->label(__('filament.actions.video.delete.name')) - ->requiresConfirmation() - ->modalWidth(MaxWidth::FourExtraLarge) - ->authorize('delete', VideoModel::class), + BackfillAudioAction::make('backfill-audio'), + + MoveVideoAction::make('move-video'), + + DeleteVideoAction::make('delete-video'), ]), ], ); @@ -403,11 +390,9 @@ public static function getBulkActions(): array return array_merge( parent::getBulkActions(), [ - DiscordVideoNotificationBulkAction::make('discord-notification') - ->label(__('filament.bulk_actions.discord.notification.name')) - ->icon(__('filament.bulk_actions.discord.notification.icon')) - ->requiresConfirmation() - ->authorize('create', DiscordThread::class), + VideoDiscordNotificationBulkAction::make('discord-notification'), + + DeleteVideoBulkAction::make('delete-video'), ], ); } @@ -423,18 +408,9 @@ public static function getHeaderActions(): array { return [ ActionGroup::make([ - UploadVideoTableAction::make('upload-video') - ->label(__('filament.actions.video.upload.name')) - ->icon(__('filament.table_actions.base.upload.icon')) - ->requiresConfirmation() - ->modalWidth(MaxWidth::FourExtraLarge) - ->authorize('create', VideoModel::class), - - ReconcileVideoTableAction::make('reconcile-video') - ->label(__('filament.actions.repositories.name', ['label' => __('filament.resources.label.videos')])) - ->icon(__('filament.table_actions.base.reconcile.icon')) - ->requiresConfirmation() - ->authorize('create', VideoModel::class), + UploadVideoTableAction::make('upload-video'), + + ReconcileVideoTableAction::make('reconcile-video'), ]), ]; } diff --git a/app/Filament/Resources/Wiki/Video/Pages/EditVideo.php b/app/Filament/Resources/Wiki/Video/Pages/EditVideo.php index 113f89160..7ed13a637 100644 --- a/app/Filament/Resources/Wiki/Video/Pages/EditVideo.php +++ b/app/Filament/Resources/Wiki/Video/Pages/EditVideo.php @@ -9,9 +9,7 @@ use App\Filament\HeaderActions\Storage\Wiki\Video\MoveVideoHeaderAction; use App\Filament\Resources\Wiki\Video; use App\Filament\Resources\Base\BaseEditResource; -use App\Models\Wiki\Video as VideoModel; use Filament\Actions\ActionGroup; -use Filament\Support\Enums\MaxWidth; /** * Class EditVideo. @@ -33,23 +31,11 @@ protected function getHeaderActions(): array parent::getHeaderActions(), [ ActionGroup::make([ - BackfillAudioHeaderAction::make('backfill-audio') - ->label(__('filament.actions.video.backfill.name')) - ->requiresConfirmation() - ->modalWidth(MaxWidth::TwoExtraLarge) - ->authorize('create', VideoModel::class), + BackfillAudioHeaderAction::make('backfill-audio'), - MoveVideoHeaderAction::make('move-video') - ->label(__('filament.actions.video.move.name')) - ->requiresConfirmation() - ->modalWidth(MaxWidth::FourExtraLarge) - ->authorize('create', VideoModel::class), + MoveVideoHeaderAction::make('move-video'), - DeleteVideoHeaderAction::make('delete-video') - ->label(__('filament.actions.video.delete.name')) - ->requiresConfirmation() - ->modalWidth(MaxWidth::FourExtraLarge) - ->authorize('delete', VideoModel::class), + DeleteVideoHeaderAction::make('delete-video'), ]), ], ); diff --git a/app/Filament/Resources/Wiki/Video/Script.php b/app/Filament/Resources/Wiki/Video/Script.php index 79d9697da..136f6695f 100644 --- a/app/Filament/Resources/Wiki/Video/Script.php +++ b/app/Filament/Resources/Wiki/Video/Script.php @@ -6,6 +6,7 @@ use App\Filament\Actions\Storage\Wiki\Video\Script\DeleteScriptAction; use App\Filament\Actions\Storage\Wiki\Video\Script\MoveScriptAction; +use App\Filament\BulkActions\Storage\Wiki\Video\Script\DeleteScriptBulkAction; use App\Filament\Components\Columns\TextColumn; use App\Filament\Resources\BaseResource; use App\Filament\Resources\Wiki\Video\Script\Pages\CreateScript; @@ -19,7 +20,6 @@ use Filament\Forms\Form; use Filament\Infolists\Components\Section; use Filament\Infolists\Infolist; -use Filament\Support\Enums\MaxWidth; use Filament\Tables\Actions\ActionGroup; use Filament\Tables\Table; @@ -206,17 +206,9 @@ public static function getActions(): array parent::getActions(), [ ActionGroup::make([ - MoveScriptAction::make('move-script') - ->label(__('filament.actions.video_script.move.name')) - ->requiresConfirmation() - ->modalWidth(MaxWidth::FourExtraLarge) - ->authorize('create', ScriptModel::class), + MoveScriptAction::make('move-script'), - DeleteScriptAction::make('delete-script') - ->label(__('filament.actions.video_script.delete.name')) - ->requiresConfirmation() - ->modalWidth(MaxWidth::FourExtraLarge) - ->authorize('delete', ScriptModel::class), + DeleteScriptAction::make('delete-script'), ]), ], ); @@ -233,7 +225,9 @@ public static function getBulkActions(): array { return array_merge( parent::getBulkActions(), - [], + [ + DeleteScriptBulkAction::make('delete-script'), + ], ); } @@ -248,18 +242,9 @@ public static function getHeaderActions(): array { return [ ActionGroup::make([ - UploadScriptTableAction::make('upload-script') - ->label(__('filament.actions.video_script.upload.name')) - ->icon(__('filament.table_actions.base.upload.icon')) - ->modalWidth(MaxWidth::FourExtraLarge) - ->requiresConfirmation() - ->authorize('create', ScriptModel::class), + UploadScriptTableAction::make('upload-script'), - ReconcileScriptTableAction::make('reconcile-script') - ->label(__('filament.actions.repositories.name', ['label' => __('filament.resources.label.video_scripts')])) - ->icon(__('filament.table_actions.base.reconcile.icon')) - ->requiresConfirmation() - ->authorize('create', ScriptModel::class), + ReconcileScriptTableAction::make('reconcile-script'), ]), ]; } diff --git a/app/Filament/Resources/Wiki/Video/Script/Pages/EditScript.php b/app/Filament/Resources/Wiki/Video/Script/Pages/EditScript.php index b52457f70..75c7cc5e6 100644 --- a/app/Filament/Resources/Wiki/Video/Script/Pages/EditScript.php +++ b/app/Filament/Resources/Wiki/Video/Script/Pages/EditScript.php @@ -32,17 +32,9 @@ protected function getHeaderActions(): array parent::getHeaderActions(), [ ActionGroup::make([ - MoveScriptHeaderAction::make('move-script') - ->label(__('filament.actions.video_script.move.name')) - ->requiresConfirmation() - ->modalWidth(MaxWidth::FourExtraLarge) - ->authorize('create', ScriptModel::class), + MoveScriptHeaderAction::make('move-script'), - DeleteScriptHeaderAction::make('delete-script') - ->label(__('filament.actions.video_script.delete.name')) - ->requiresConfirmation() - ->modalWidth(MaxWidth::FourExtraLarge) - ->authorize('delete', ScriptModel::class), + DeleteScriptHeaderAction::make('delete-script'), ]), ], ); diff --git a/app/Filament/TableActions/BaseTableAction.php b/app/Filament/TableActions/BaseTableAction.php index 06c36fb9f..4a22c2a88 100644 --- a/app/Filament/TableActions/BaseTableAction.php +++ b/app/Filament/TableActions/BaseTableAction.php @@ -4,10 +4,16 @@ namespace App\Filament\TableActions; +use Filament\Support\Enums\MaxWidth; use Filament\Tables\Actions\Action; /** * Class BaseTableAction. + * + * Table actions are standalone actions. + * It is an action related to the table and not to an individual model. + * In filament, it is called the table's Header Actions. + * Don't confuse it with the header actions of an individual model. */ abstract class BaseTableAction extends Action { @@ -20,6 +26,10 @@ protected function setUp(): void { parent::setUp(); + $this->requiresConfirmation(); + + $this->modalWidth(MaxWidth::FourExtraLarge); + $this->action(fn (array $data) => $this->handle($data)); } diff --git a/app/Filament/TableActions/Models/Discord/DiscordEditMessageTableAction.php b/app/Filament/TableActions/Models/Discord/DiscordEditMessageTableAction.php index 63d301448..9bcc97a80 100644 --- a/app/Filament/TableActions/Models/Discord/DiscordEditMessageTableAction.php +++ b/app/Filament/TableActions/Models/Discord/DiscordEditMessageTableAction.php @@ -8,6 +8,7 @@ use App\Discord\DiscordEmbed; use App\Discord\DiscordMessage; use App\Filament\TableActions\BaseTableAction; +use App\Models\Discord\DiscordThread; use Filament\Forms\Components\Actions\Action; use Filament\Forms\Components\Checkbox; use Filament\Forms\Components\ColorPicker; @@ -23,6 +24,21 @@ */ class DiscordEditMessageTableAction extends BaseTableAction { + /** + * Initial setup for the action. + * + * @return void + */ + protected function setUp(): void + { + parent::setUp(); + + $this->label(__('filament.table_actions.discord_thread.message.edit.name')); + $this->icon(__('filament.table_actions.discord_thread.message.edit.icon')); + + $this->authorize('forcedeleteany', DiscordThread::class); + } + /** * Perform the action on the table. * diff --git a/app/Filament/TableActions/Models/Discord/DiscordSendMessageTableAction.php b/app/Filament/TableActions/Models/Discord/DiscordSendMessageTableAction.php index 53e487e24..8691f5887 100644 --- a/app/Filament/TableActions/Models/Discord/DiscordSendMessageTableAction.php +++ b/app/Filament/TableActions/Models/Discord/DiscordSendMessageTableAction.php @@ -8,6 +8,7 @@ use App\Discord\DiscordEmbed; use App\Discord\DiscordMessage; use App\Filament\TableActions\BaseTableAction; +use App\Models\Discord\DiscordThread; use Filament\Forms\Components\Checkbox; use Filament\Forms\Components\ColorPicker;; use Filament\Forms\Components\Repeater; @@ -20,6 +21,21 @@ */ class DiscordSendMessageTableAction extends BaseTableAction { + /** + * Initial setup for the action. + * + * @return void + */ + protected function setUp(): void + { + parent::setUp(); + + $this->label(__('filament.table_actions.discord_thread.message.send.name')); + $this->icon(__('filament.table_actions.discord_thread.message.send.icon')); + + $this->authorize('forcedeleteany', DiscordThread::class); + } + /** * Perform the action on the table. * diff --git a/app/Filament/TableActions/Models/Wiki/Image/UploadImageTableAction.php b/app/Filament/TableActions/Models/Wiki/Image/UploadImageTableAction.php index ec22eca0d..a72a7d056 100644 --- a/app/Filament/TableActions/Models/Wiki/Image/UploadImageTableAction.php +++ b/app/Filament/TableActions/Models/Wiki/Image/UploadImageTableAction.php @@ -20,6 +20,25 @@ class UploadImageTableAction extends BaseTableAction { protected array $facets = []; + /** + * Initial setup for the action. + * + * @return void + */ + protected function setUp(): void + { + parent::setUp(); + + $this->label(__('filament.actions.models.wiki.upload_image.name')); + + $this->facets([ + ImageFacet::GRILL, + ImageFacet::DOCUMENT, + ]); + + $this->authorize('create', Image::class); + } + /** * Perform the action on the table. * diff --git a/app/Filament/TableActions/Repositories/Storage/Admin/Dump/ReconcileDumpTableAction.php b/app/Filament/TableActions/Repositories/Storage/Admin/Dump/ReconcileDumpTableAction.php index 5ce8bfe5a..235960dd1 100644 --- a/app/Filament/TableActions/Repositories/Storage/Admin/Dump/ReconcileDumpTableAction.php +++ b/app/Filament/TableActions/Repositories/Storage/Admin/Dump/ReconcileDumpTableAction.php @@ -7,6 +7,7 @@ use App\Concerns\Repositories\Admin\ReconcilesDumpRepositories; use App\Constants\Config\DumpConstants; use App\Filament\TableActions\Repositories\Storage\ReconcileStorageTableAction; +use App\Models\Admin\Dump; use Filament\Forms\Form; use Illuminate\Support\Facades\Config; @@ -17,6 +18,20 @@ class ReconcileDumpTableAction extends ReconcileStorageTableAction { use ReconcilesDumpRepositories; + /** + * Initial setup for the action. + * + * @return void + */ + protected function setUp(): void + { + parent::setUp(); + + $this->label(__('filament.actions.repositories.name', ['label' => __('filament.resources.label.dumps')])); + + $this->authorize('create', Dump::class); + } + /** * Get the fields available on the action. * diff --git a/app/Filament/TableActions/Repositories/Storage/ReconcileStorageTableAction.php b/app/Filament/TableActions/Repositories/Storage/ReconcileStorageTableAction.php index 7f1a1fb97..502a6e2df 100644 --- a/app/Filament/TableActions/Repositories/Storage/ReconcileStorageTableAction.php +++ b/app/Filament/TableActions/Repositories/Storage/ReconcileStorageTableAction.php @@ -18,6 +18,18 @@ */ abstract class ReconcileStorageTableAction extends ReconcileTableAction implements InteractsWithDisk { + /** + * Initial setup for the action. + * + * @return void + */ + protected function setUp(): void + { + parent::setUp(); + + $this->icon(__('filament.table_actions.base.reconcile.icon')); + } + /** * Apply filters to repositories before reconciliation. * diff --git a/app/Filament/TableActions/Repositories/Storage/Wiki/Audio/ReconcileAudioTableAction.php b/app/Filament/TableActions/Repositories/Storage/Wiki/Audio/ReconcileAudioTableAction.php index 4bc03f1d8..2aa70af20 100644 --- a/app/Filament/TableActions/Repositories/Storage/Wiki/Audio/ReconcileAudioTableAction.php +++ b/app/Filament/TableActions/Repositories/Storage/Wiki/Audio/ReconcileAudioTableAction.php @@ -7,6 +7,7 @@ use App\Concerns\Repositories\Wiki\ReconcilesAudioRepositories; use App\Constants\Config\AudioConstants; use App\Filament\TableActions\Repositories\Storage\ReconcileStorageTableAction; +use App\Models\Wiki\Audio; use Illuminate\Support\Facades\Config; /** @@ -16,6 +17,20 @@ class ReconcileAudioTableAction extends ReconcileStorageTableAction { use ReconcilesAudioRepositories; + /** + * Initial setup for the action. + * + * @return void + */ + protected function setUp(): void + { + parent::setUp(); + + $this->label(__('filament.actions.repositories.name', ['label' => __('filament.resources.label.audios')])); + + $this->authorize('create', Audio::class); + } + /** * The name of the disk. * diff --git a/app/Filament/TableActions/Repositories/Storage/Wiki/Video/ReconcileVideoTableAction.php b/app/Filament/TableActions/Repositories/Storage/Wiki/Video/ReconcileVideoTableAction.php index e5f6896a2..3fade543f 100644 --- a/app/Filament/TableActions/Repositories/Storage/Wiki/Video/ReconcileVideoTableAction.php +++ b/app/Filament/TableActions/Repositories/Storage/Wiki/Video/ReconcileVideoTableAction.php @@ -7,6 +7,7 @@ use App\Concerns\Repositories\Wiki\ReconcilesVideoRepositories; use App\Constants\Config\VideoConstants; use App\Filament\TableActions\Repositories\Storage\ReconcileStorageTableAction; +use App\Models\Wiki\Video; use Illuminate\Support\Facades\Config; /** @@ -16,6 +17,20 @@ class ReconcileVideoTableAction extends ReconcileStorageTableAction { use ReconcilesVideoRepositories; + /** + * Initial setup for the action. + * + * @return void + */ + protected function setUp(): void + { + parent::setUp(); + + $this->label(__('filament.actions.repositories.name', ['label' => __('filament.resources.label.videos')])); + + $this->authorize('create', Video::class); + } + /** * The name of the disk. * diff --git a/app/Filament/TableActions/Repositories/Storage/Wiki/Video/Script/ReconcileScriptTableAction.php b/app/Filament/TableActions/Repositories/Storage/Wiki/Video/Script/ReconcileScriptTableAction.php index cbf0f66a1..71308ad29 100644 --- a/app/Filament/TableActions/Repositories/Storage/Wiki/Video/Script/ReconcileScriptTableAction.php +++ b/app/Filament/TableActions/Repositories/Storage/Wiki/Video/Script/ReconcileScriptTableAction.php @@ -7,6 +7,7 @@ use App\Concerns\Repositories\Wiki\Video\ReconcilesScriptRepositories; use App\Constants\Config\VideoConstants; use App\Filament\TableActions\Repositories\Storage\ReconcileStorageTableAction; +use App\Models\Wiki\Video\VideoScript; use Illuminate\Support\Facades\Config; /** @@ -16,6 +17,20 @@ class ReconcileScriptTableAction extends ReconcileStorageTableAction { use ReconcilesScriptRepositories; + /** + * Initial setup for the action. + * + * @return void + */ + protected function setUp(): void + { + parent::setUp(); + + $this->label(__('filament.actions.repositories.name', ['label' => __('filament.resources.label.video_scripts')])); + + $this->authorize('create', VideoScript::class); + } + /** * The name of the disk. * diff --git a/app/Filament/TableActions/Storage/Admin/DumpDocumentTableAction.php b/app/Filament/TableActions/Storage/Admin/DumpDocumentTableAction.php index 3666518ef..63411746a 100644 --- a/app/Filament/TableActions/Storage/Admin/DumpDocumentTableAction.php +++ b/app/Filament/TableActions/Storage/Admin/DumpDocumentTableAction.php @@ -12,6 +12,18 @@ */ class DumpDocumentTableAction extends DumpTableAction { + /** + * Initial setup for the action. + * + * @return void + */ + protected function setUp(): void + { + parent::setUp(); + + $this->label(__('filament.actions.dump.dump.name.document')); + } + /** * Get the underlying action. * diff --git a/app/Filament/TableActions/Storage/Admin/DumpTableAction.php b/app/Filament/TableActions/Storage/Admin/DumpTableAction.php index 71711953f..e21275e49 100644 --- a/app/Filament/TableActions/Storage/Admin/DumpTableAction.php +++ b/app/Filament/TableActions/Storage/Admin/DumpTableAction.php @@ -6,11 +6,12 @@ use App\Actions\Storage\Admin\Dump\DumpAction as DumpDatabase; use App\Filament\Components\Fields\Select; +use App\Filament\TableActions\BaseTableAction; +use App\Models\Admin\Dump; use Exception; use Filament\Forms\Components\Checkbox; use Filament\Forms\Components\TextInput; use Filament\Forms\Form; -use Filament\Tables\Actions\Action; use Illuminate\Database\MySqlConnection; use Illuminate\Database\PostgresConnection; use Illuminate\Support\Facades\DB; @@ -19,7 +20,7 @@ /** * Class DumpTableAction. */ -abstract class DumpTableAction extends Action +abstract class DumpTableAction extends BaseTableAction { /** * Initial setup for the action. @@ -30,7 +31,9 @@ protected function setUp(): void { parent::setUp(); - $this->action(fn (array $data) => $this->handle($data)); + $this->icon(__('filament.table_actions.dump.dump.icon')); + + $this->authorize('create', Dump::class); } /** diff --git a/app/Filament/TableActions/Storage/Admin/DumpWikiTableAction.php b/app/Filament/TableActions/Storage/Admin/DumpWikiTableAction.php index 4e3ffc5fc..5c7bc60b3 100644 --- a/app/Filament/TableActions/Storage/Admin/DumpWikiTableAction.php +++ b/app/Filament/TableActions/Storage/Admin/DumpWikiTableAction.php @@ -12,6 +12,18 @@ */ class DumpWikiTableAction extends DumpTableAction { + /** + * Initial setup for the action. + * + * @return void + */ + protected function setUp(): void + { + parent::setUp(); + + $this->label(__('filament.actions.dump.dump.name.wiki')); + } + /** * Get the underlying action. * diff --git a/app/Filament/TableActions/Storage/Admin/PruneDumpTableAction.php b/app/Filament/TableActions/Storage/Admin/PruneDumpTableAction.php index 1814730bc..8036715ae 100644 --- a/app/Filament/TableActions/Storage/Admin/PruneDumpTableAction.php +++ b/app/Filament/TableActions/Storage/Admin/PruneDumpTableAction.php @@ -6,7 +6,7 @@ use App\Actions\Storage\Admin\Dump\PruneDumpAction as PruneDump; use App\Filament\TableActions\Storage\Base\PruneTableAction; -use Illuminate\Database\Eloquent\Model; +use App\Models\Admin\Dump; use Illuminate\Support\Arr; /** @@ -14,6 +14,20 @@ */ class PruneDumpTableAction extends PruneTableAction { + /** + * Initial setup for the action. + * + * @return void + */ + protected function setUp(): void + { + parent::setUp(); + + $this->label(__('filament.actions.dump.prune.name')); + + $this->authorize('forcedeleteany', Dump::class); + } + /** * Get the underlying storage action. * diff --git a/app/Filament/TableActions/Storage/Base/PruneTableAction.php b/app/Filament/TableActions/Storage/Base/PruneTableAction.php index 2143b98d8..29f4bf9f0 100644 --- a/app/Filament/TableActions/Storage/Base/PruneTableAction.php +++ b/app/Filament/TableActions/Storage/Base/PruneTableAction.php @@ -8,13 +8,24 @@ use App\Filament\TableActions\Storage\StorageTableAction; use Filament\Forms\Components\TextInput; use Filament\Forms\Form; -use Illuminate\Database\Eloquent\Model; /** * Class PruneTableAction. */ abstract class PruneTableAction extends StorageTableAction { + /** + * Initial setup for the action. + * + * @return void + */ + protected function setUp(): void + { + parent::setUp(); + + $this->icon(__('filament.table_actions.base.prune.icon')); + } + /** * Get the fields available on the action. * diff --git a/app/Filament/TableActions/Storage/Base/UploadTableAction.php b/app/Filament/TableActions/Storage/Base/UploadTableAction.php index f086cdbf4..58cef547f 100644 --- a/app/Filament/TableActions/Storage/Base/UploadTableAction.php +++ b/app/Filament/TableActions/Storage/Base/UploadTableAction.php @@ -18,6 +18,18 @@ */ abstract class UploadTableAction extends StorageTableAction implements InteractsWithDisk { + /** + * Initial setup for the action. + * + * @return void + */ + protected function setUp(): void + { + parent::setUp(); + + $this->icon(__('filament.table_actions.base.upload.icon')); + } + /** * Get the fields available on the action. * diff --git a/app/Filament/TableActions/Storage/Wiki/Audio/UploadAudioTableAction.php b/app/Filament/TableActions/Storage/Wiki/Audio/UploadAudioTableAction.php index 34444c974..0a250e5fd 100644 --- a/app/Filament/TableActions/Storage/Wiki/Audio/UploadAudioTableAction.php +++ b/app/Filament/TableActions/Storage/Wiki/Audio/UploadAudioTableAction.php @@ -7,6 +7,7 @@ use App\Actions\Storage\Wiki\Audio\UploadAudioAction as UploadAudio; use App\Constants\Config\AudioConstants; use App\Filament\TableActions\Storage\Base\UploadTableAction; +use App\Models\Wiki\Audio; use App\Rules\Wiki\Submission\Audio\AudioChannelLayoutStreamRule; use App\Rules\Wiki\Submission\Audio\AudioChannelsStreamRule; use App\Rules\Wiki\Submission\Audio\AudioCodecStreamRule; @@ -31,6 +32,20 @@ */ class UploadAudioTableAction extends UploadTableAction { + /** + * Initial setup for the action. + * + * @return void + */ + protected function setUp(): void + { + parent::setUp(); + + $this->label(__('filament.actions.audio.upload.name')); + + $this->authorize('create', Audio::class); + } + /** * Get the underlying storage action. * diff --git a/app/Filament/TableActions/Storage/Wiki/Video/Script/UploadScriptTableAction.php b/app/Filament/TableActions/Storage/Wiki/Video/Script/UploadScriptTableAction.php index 4aefc047c..f05939f93 100644 --- a/app/Filament/TableActions/Storage/Wiki/Video/Script/UploadScriptTableAction.php +++ b/app/Filament/TableActions/Storage/Wiki/Video/Script/UploadScriptTableAction.php @@ -10,6 +10,7 @@ use App\Filament\Resources\Wiki\Video\Script\Pages\ListScripts; use App\Models\Wiki\Video; use App\Filament\TableActions\Storage\Base\UploadTableAction; +use App\Models\Wiki\Video\VideoScript; use Filament\Forms\Components\Hidden; use Filament\Forms\Form; use Illuminate\Http\UploadedFile; @@ -22,6 +23,20 @@ */ class UploadScriptTableAction extends UploadTableAction { + /** + * Initial setup for the action. + * + * @return void + */ + protected function setUp(): void + { + parent::setUp(); + + $this->label(__('filament.actions.video_script.upload.name')); + + $this->authorize('create', VideoScript::class); + } + /** * Get the fields available on the action. * diff --git a/app/Filament/TableActions/Storage/Wiki/Video/UploadVideoTableAction.php b/app/Filament/TableActions/Storage/Wiki/Video/UploadVideoTableAction.php index f95b1ff2d..30e638442 100644 --- a/app/Filament/TableActions/Storage/Wiki/Video/UploadVideoTableAction.php +++ b/app/Filament/TableActions/Storage/Wiki/Video/UploadVideoTableAction.php @@ -52,6 +52,20 @@ */ class UploadVideoTableAction extends UploadTableAction { + /** + * Initial setup for the action. + * + * @return void + */ + protected function setUp(): void + { + parent::setUp(); + + $this->label(__('filament.actions.video.upload.name')); + + $this->authorize('create', Video::class); + } + /** * Get the fields available on the action. * diff --git a/app/Rules/Wiki/Submission/Audio/AudioChannelLayoutStreamRule.php b/app/Rules/Wiki/Submission/Audio/AudioChannelLayoutStreamRule.php index 7ee2e9255..2022ff4ca 100644 --- a/app/Rules/Wiki/Submission/Audio/AudioChannelLayoutStreamRule.php +++ b/app/Rules/Wiki/Submission/Audio/AudioChannelLayoutStreamRule.php @@ -4,10 +4,12 @@ namespace App\Rules\Wiki\Submission\Audio; +use App\Constants\FeatureConstants; use App\Rules\Wiki\Submission\SubmissionRule; use Closure; use Illuminate\Support\Arr; use Illuminate\Translation\PotentiallyTranslatedString; +use Laravel\Pennant\Feature; /** * Class AudioChannelLayoutStreamRule. @@ -24,6 +26,8 @@ class AudioChannelLayoutStreamRule extends SubmissionRule */ public function validate(string $attribute, mixed $value, Closure $fail): void { + if (Feature::for(null)->active(FeatureConstants::IGNORE_ALL_FILE_VALIDATIONS)) return; + $audio = Arr::first( $this->streams(), fn (array $stream) => Arr::get($stream, 'codec_type') === 'audio' diff --git a/app/Rules/Wiki/Submission/Audio/AudioChannelsStreamRule.php b/app/Rules/Wiki/Submission/Audio/AudioChannelsStreamRule.php index c4d550f5b..ddcaf55df 100644 --- a/app/Rules/Wiki/Submission/Audio/AudioChannelsStreamRule.php +++ b/app/Rules/Wiki/Submission/Audio/AudioChannelsStreamRule.php @@ -4,10 +4,12 @@ namespace App\Rules\Wiki\Submission\Audio; +use App\Constants\FeatureConstants; use App\Rules\Wiki\Submission\SubmissionRule; use Closure; use Illuminate\Support\Arr; use Illuminate\Translation\PotentiallyTranslatedString; +use Laravel\Pennant\Feature; /** * Class AudioChannelsStreamRule. @@ -24,6 +26,8 @@ class AudioChannelsStreamRule extends SubmissionRule */ public function validate(string $attribute, mixed $value, Closure $fail): void { + if (Feature::for(null)->active(FeatureConstants::IGNORE_ALL_FILE_VALIDATIONS)) return; + $audio = Arr::first( $this->streams(), fn (array $stream) => Arr::get($stream, 'codec_type') === 'audio' diff --git a/app/Rules/Wiki/Submission/Audio/AudioCodecStreamRule.php b/app/Rules/Wiki/Submission/Audio/AudioCodecStreamRule.php index dfdfd0d1c..685770ce4 100644 --- a/app/Rules/Wiki/Submission/Audio/AudioCodecStreamRule.php +++ b/app/Rules/Wiki/Submission/Audio/AudioCodecStreamRule.php @@ -4,10 +4,12 @@ namespace App\Rules\Wiki\Submission\Audio; +use App\Constants\FeatureConstants; use App\Rules\Wiki\Submission\SubmissionRule; use Closure; use Illuminate\Support\Arr; use Illuminate\Translation\PotentiallyTranslatedString; +use Laravel\Pennant\Feature; /** * Class AudioCodecStreamRule. @@ -24,6 +26,8 @@ class AudioCodecStreamRule extends SubmissionRule */ public function validate(string $attribute, mixed $value, Closure $fail): void { + if (Feature::for(null)->active(FeatureConstants::IGNORE_ALL_FILE_VALIDATIONS)) return; + $audio = Arr::first( $this->streams(), fn (array $stream) => Arr::get($stream, 'codec_type') === 'audio' diff --git a/app/Rules/Wiki/Submission/Audio/AudioIndexStreamRule.php b/app/Rules/Wiki/Submission/Audio/AudioIndexStreamRule.php index 613ccde6a..20b83641a 100644 --- a/app/Rules/Wiki/Submission/Audio/AudioIndexStreamRule.php +++ b/app/Rules/Wiki/Submission/Audio/AudioIndexStreamRule.php @@ -4,10 +4,12 @@ namespace App\Rules\Wiki\Submission\Audio; +use App\Constants\FeatureConstants; use App\Rules\Wiki\Submission\SubmissionRule; use Closure; use Illuminate\Support\Arr; use Illuminate\Translation\PotentiallyTranslatedString; +use Laravel\Pennant\Feature; /** * Class AudioIndexStreamRule. @@ -33,6 +35,8 @@ public function __construct(protected readonly int $expected) */ public function validate(string $attribute, mixed $value, Closure $fail): void { + if (Feature::for(null)->active(FeatureConstants::IGNORE_ALL_FILE_VALIDATIONS)) return; + $stream = Arr::first( $this->streams(), fn (array $stream) => Arr::get($stream, 'codec_type') === 'audio' && Arr::get($stream, 'index') === $this->expected diff --git a/app/Rules/Wiki/Submission/Audio/AudioLoudnessIntegratedTargetStreamRule.php b/app/Rules/Wiki/Submission/Audio/AudioLoudnessIntegratedTargetStreamRule.php index a0f45e12c..2afc2e1b2 100644 --- a/app/Rules/Wiki/Submission/Audio/AudioLoudnessIntegratedTargetStreamRule.php +++ b/app/Rules/Wiki/Submission/Audio/AudioLoudnessIntegratedTargetStreamRule.php @@ -4,10 +4,12 @@ namespace App\Rules\Wiki\Submission\Audio; +use App\Constants\FeatureConstants; use App\Rules\Wiki\Submission\SubmissionRule; use Closure; use Illuminate\Support\Arr; use Illuminate\Translation\PotentiallyTranslatedString; +use Laravel\Pennant\Feature; /** * Class AudioLoudnessIntegratedTargetStreamRule. @@ -24,6 +26,8 @@ class AudioLoudnessIntegratedTargetStreamRule extends SubmissionRule */ public function validate(string $attribute, mixed $value, Closure $fail): void { + if (Feature::for(null)->active(FeatureConstants::IGNORE_ALL_FILE_VALIDATIONS)) return; + $loudness = $this->loudness(); $target = floatval(Arr::get($loudness, 'input_i')); diff --git a/app/Rules/Wiki/Submission/Audio/AudioLoudnessTruePeakStreamRule.php b/app/Rules/Wiki/Submission/Audio/AudioLoudnessTruePeakStreamRule.php index 0d250cf23..b75a6d065 100644 --- a/app/Rules/Wiki/Submission/Audio/AudioLoudnessTruePeakStreamRule.php +++ b/app/Rules/Wiki/Submission/Audio/AudioLoudnessTruePeakStreamRule.php @@ -4,10 +4,12 @@ namespace App\Rules\Wiki\Submission\Audio; +use App\Constants\FeatureConstants; use App\Rules\Wiki\Submission\SubmissionRule; use Closure; use Illuminate\Support\Arr; use Illuminate\Translation\PotentiallyTranslatedString; +use Laravel\Pennant\Feature; /** * Class AudioLoudnessTruePeakStreamRule. @@ -24,6 +26,8 @@ class AudioLoudnessTruePeakStreamRule extends SubmissionRule */ public function validate(string $attribute, mixed $value, Closure $fail): void { + if (Feature::for(null)->active(FeatureConstants::IGNORE_ALL_FILE_VALIDATIONS)) return; + $loudness = $this->loudness(); $peak = floatval(Arr::get($loudness, 'input_tp')); diff --git a/app/Rules/Wiki/Submission/Audio/AudioSampleRateStreamRule.php b/app/Rules/Wiki/Submission/Audio/AudioSampleRateStreamRule.php index 5e3cc601e..6bdf2e43f 100644 --- a/app/Rules/Wiki/Submission/Audio/AudioSampleRateStreamRule.php +++ b/app/Rules/Wiki/Submission/Audio/AudioSampleRateStreamRule.php @@ -4,10 +4,12 @@ namespace App\Rules\Wiki\Submission\Audio; +use App\Constants\FeatureConstants; use App\Rules\Wiki\Submission\SubmissionRule; use Closure; use Illuminate\Support\Arr; use Illuminate\Translation\PotentiallyTranslatedString; +use Laravel\Pennant\Feature; /** * Class AudioSampleRateStreamRule. @@ -24,6 +26,8 @@ class AudioSampleRateStreamRule extends SubmissionRule */ public function validate(string $attribute, mixed $value, Closure $fail): void { + if (Feature::for(null)->active(FeatureConstants::IGNORE_ALL_FILE_VALIDATIONS)) return; + $audio = Arr::first( $this->streams(), fn (array $stream) => Arr::get($stream, 'codec_type') === 'audio' diff --git a/app/Rules/Wiki/Submission/Format/AudioBitrateRestrictionFormatRule.php b/app/Rules/Wiki/Submission/Format/AudioBitrateRestrictionFormatRule.php index ee447bd16..d22c70b67 100644 --- a/app/Rules/Wiki/Submission/Format/AudioBitrateRestrictionFormatRule.php +++ b/app/Rules/Wiki/Submission/Format/AudioBitrateRestrictionFormatRule.php @@ -26,6 +26,8 @@ class AudioBitrateRestrictionFormatRule extends SubmissionRule */ public function validate(string $attribute, mixed $value, Closure $fail): void { + if (Feature::for(null)->active(FeatureConstants::IGNORE_ALL_FILE_VALIDATIONS)) return; + $format = $this->format(); $bitrate = intval(Arr::get($format, 'bit_rate')); diff --git a/app/Rules/Wiki/Submission/Format/EncoderNameFormatRule.php b/app/Rules/Wiki/Submission/Format/EncoderNameFormatRule.php index 532654130..ebc27f118 100644 --- a/app/Rules/Wiki/Submission/Format/EncoderNameFormatRule.php +++ b/app/Rules/Wiki/Submission/Format/EncoderNameFormatRule.php @@ -4,11 +4,13 @@ namespace App\Rules\Wiki\Submission\Format; +use App\Constants\FeatureConstants; use App\Rules\Wiki\Submission\SubmissionRule; use Closure; use Illuminate\Support\Arr; use Illuminate\Support\Str; use Illuminate\Translation\PotentiallyTranslatedString; +use Laravel\Pennant\Feature; /** * Class EncoderNameFormatRule. @@ -25,6 +27,8 @@ class EncoderNameFormatRule extends SubmissionRule */ public function validate(string $attribute, mixed $value, Closure $fail): void { + if (Feature::for(null)->active(FeatureConstants::IGNORE_ALL_FILE_VALIDATIONS)) return; + $tags = $this->tags(); $encoder = Arr::get($tags, 'encoder'); diff --git a/app/Rules/Wiki/Submission/Format/EncoderVersionFormatRule.php b/app/Rules/Wiki/Submission/Format/EncoderVersionFormatRule.php index 3ef8c1d13..193170858 100644 --- a/app/Rules/Wiki/Submission/Format/EncoderVersionFormatRule.php +++ b/app/Rules/Wiki/Submission/Format/EncoderVersionFormatRule.php @@ -26,6 +26,8 @@ class EncoderVersionFormatRule extends SubmissionRule */ public function validate(string $attribute, mixed $value, Closure $fail): void { + if (Feature::for(null)->active(FeatureConstants::IGNORE_ALL_FILE_VALIDATIONS)) return; + $tags = $this->tags(); $encoder = Arr::get($tags, 'encoder'); diff --git a/app/Rules/Wiki/Submission/Format/ExtraneousChaptersFormatRule.php b/app/Rules/Wiki/Submission/Format/ExtraneousChaptersFormatRule.php index 8d3defb63..7bb69e1a6 100644 --- a/app/Rules/Wiki/Submission/Format/ExtraneousChaptersFormatRule.php +++ b/app/Rules/Wiki/Submission/Format/ExtraneousChaptersFormatRule.php @@ -4,9 +4,11 @@ namespace App\Rules\Wiki\Submission\Format; +use App\Constants\FeatureConstants; use App\Rules\Wiki\Submission\SubmissionRule; use Closure; use Illuminate\Translation\PotentiallyTranslatedString; +use Laravel\Pennant\Feature; /** * Class ExtraneousChaptersFormatRule. @@ -23,6 +25,8 @@ class ExtraneousChaptersFormatRule extends SubmissionRule */ public function validate(string $attribute, mixed $value, Closure $fail): void { + if (Feature::for(null)->active(FeatureConstants::IGNORE_ALL_FILE_VALIDATIONS)) return; + if (! empty($this->chapters())) { $fail(__('validation.submission.format_extraneous_chapters')); } diff --git a/app/Rules/Wiki/Submission/Format/ExtraneousMetadataFormatRule.php b/app/Rules/Wiki/Submission/Format/ExtraneousMetadataFormatRule.php index 3a8838d3b..008244a0b 100644 --- a/app/Rules/Wiki/Submission/Format/ExtraneousMetadataFormatRule.php +++ b/app/Rules/Wiki/Submission/Format/ExtraneousMetadataFormatRule.php @@ -4,9 +4,11 @@ namespace App\Rules\Wiki\Submission\Format; +use App\Constants\FeatureConstants; use App\Rules\Wiki\Submission\SubmissionRule; use Closure; use Illuminate\Translation\PotentiallyTranslatedString; +use Laravel\Pennant\Feature; /** * Class ExtraneousMetadataFormatRule. @@ -23,6 +25,8 @@ class ExtraneousMetadataFormatRule extends SubmissionRule */ public function validate(string $attribute, mixed $value, Closure $fail): void { + if (Feature::for(null)->active(FeatureConstants::IGNORE_ALL_FILE_VALIDATIONS)) return; + $tags = $this->tags(); if (collect($tags)->keys()->diff(['encoder', 'duration'])->isNotEmpty()) { diff --git a/app/Rules/Wiki/Submission/Format/FormatNameFormatRule.php b/app/Rules/Wiki/Submission/Format/FormatNameFormatRule.php index bcb1b37b7..02557128e 100644 --- a/app/Rules/Wiki/Submission/Format/FormatNameFormatRule.php +++ b/app/Rules/Wiki/Submission/Format/FormatNameFormatRule.php @@ -4,10 +4,12 @@ namespace App\Rules\Wiki\Submission\Format; +use App\Constants\FeatureConstants; use App\Rules\Wiki\Submission\SubmissionRule; use Closure; use Illuminate\Support\Arr; use Illuminate\Translation\PotentiallyTranslatedString; +use Laravel\Pennant\Feature; /** * Class FormatNameFormatRule. @@ -33,6 +35,8 @@ public function __construct(protected readonly string $expected) */ public function validate(string $attribute, mixed $value, Closure $fail): void { + if (Feature::for(null)->active(FeatureConstants::IGNORE_ALL_FILE_VALIDATIONS)) return; + $format = $this->format(); $formatName = Arr::get($format, 'format_name'); diff --git a/app/Rules/Wiki/Submission/Format/TotalStreamsFormatRule.php b/app/Rules/Wiki/Submission/Format/TotalStreamsFormatRule.php index a6b3be1da..4b8cc54e2 100644 --- a/app/Rules/Wiki/Submission/Format/TotalStreamsFormatRule.php +++ b/app/Rules/Wiki/Submission/Format/TotalStreamsFormatRule.php @@ -4,9 +4,11 @@ namespace App\Rules\Wiki\Submission\Format; +use App\Constants\FeatureConstants; use App\Rules\Wiki\Submission\SubmissionRule; use Closure; use Illuminate\Translation\PotentiallyTranslatedString; +use Laravel\Pennant\Feature; /** * Class TotalStreamsFormatRule. @@ -32,6 +34,8 @@ public function __construct(protected readonly int $expected) */ public function validate(string $attribute, mixed $value, Closure $fail): void { + if (Feature::for(null)->active(FeatureConstants::IGNORE_ALL_FILE_VALIDATIONS)) return; + $streams = $this->streams(); if (count($streams) !== $this->expected) { diff --git a/app/Rules/Wiki/Submission/Format/VideoBitrateRestrictionFormatRule.php b/app/Rules/Wiki/Submission/Format/VideoBitrateRestrictionFormatRule.php index 80baef1ba..263bb9b46 100644 --- a/app/Rules/Wiki/Submission/Format/VideoBitrateRestrictionFormatRule.php +++ b/app/Rules/Wiki/Submission/Format/VideoBitrateRestrictionFormatRule.php @@ -26,6 +26,8 @@ class VideoBitrateRestrictionFormatRule extends SubmissionRule */ public function validate(string $attribute, mixed $value, Closure $fail): void { + if (Feature::for(null)->active(FeatureConstants::IGNORE_ALL_FILE_VALIDATIONS)) return; + $format = $this->format(); $video = Arr::first( diff --git a/app/Rules/Wiki/Submission/Video/VideoCodecStreamRule.php b/app/Rules/Wiki/Submission/Video/VideoCodecStreamRule.php index 8142b2892..308d30b29 100644 --- a/app/Rules/Wiki/Submission/Video/VideoCodecStreamRule.php +++ b/app/Rules/Wiki/Submission/Video/VideoCodecStreamRule.php @@ -26,6 +26,8 @@ class VideoCodecStreamRule extends SubmissionRule */ public function validate(string $attribute, mixed $value, Closure $fail): void { + if (Feature::for(null)->active(FeatureConstants::IGNORE_ALL_FILE_VALIDATIONS)) return; + $video = Arr::first( $this->streams(), fn (array $stream) => Arr::get($stream, 'codec_type') === 'video' diff --git a/app/Rules/Wiki/Submission/Video/VideoColorPrimariesStreamRule.php b/app/Rules/Wiki/Submission/Video/VideoColorPrimariesStreamRule.php index 13e036f46..c36c8dd5d 100644 --- a/app/Rules/Wiki/Submission/Video/VideoColorPrimariesStreamRule.php +++ b/app/Rules/Wiki/Submission/Video/VideoColorPrimariesStreamRule.php @@ -26,6 +26,8 @@ class VideoColorPrimariesStreamRule extends SubmissionRule */ public function validate(string $attribute, mixed $value, Closure $fail): void { + if (Feature::for(null)->active(FeatureConstants::IGNORE_ALL_FILE_VALIDATIONS)) return; + $video = Arr::first( $this->streams(), fn (array $stream) => Arr::get($stream, 'codec_type') === 'video' diff --git a/app/Rules/Wiki/Submission/Video/VideoColorSpaceStreamRule.php b/app/Rules/Wiki/Submission/Video/VideoColorSpaceStreamRule.php index cbc324a37..a5c178588 100644 --- a/app/Rules/Wiki/Submission/Video/VideoColorSpaceStreamRule.php +++ b/app/Rules/Wiki/Submission/Video/VideoColorSpaceStreamRule.php @@ -26,6 +26,8 @@ class VideoColorSpaceStreamRule extends SubmissionRule */ public function validate(string $attribute, mixed $value, Closure $fail): void { + if (Feature::for(null)->active(FeatureConstants::IGNORE_ALL_FILE_VALIDATIONS)) return; + $video = Arr::first( $this->streams(), fn (array $stream) => Arr::get($stream, 'codec_type') === 'video' diff --git a/app/Rules/Wiki/Submission/Video/VideoColorTransferStreamRule.php b/app/Rules/Wiki/Submission/Video/VideoColorTransferStreamRule.php index f6ee566db..232a245ae 100644 --- a/app/Rules/Wiki/Submission/Video/VideoColorTransferStreamRule.php +++ b/app/Rules/Wiki/Submission/Video/VideoColorTransferStreamRule.php @@ -26,6 +26,8 @@ class VideoColorTransferStreamRule extends SubmissionRule */ public function validate(string $attribute, mixed $value, Closure $fail): void { + if (Feature::for(null)->active(FeatureConstants::IGNORE_ALL_FILE_VALIDATIONS)) return; + $video = Arr::first( $this->streams(), fn (array $stream) => Arr::get($stream, 'codec_type') === 'video' diff --git a/app/Rules/Wiki/Submission/Video/VideoIndexStreamRule.php b/app/Rules/Wiki/Submission/Video/VideoIndexStreamRule.php index 99563a61e..de889433e 100644 --- a/app/Rules/Wiki/Submission/Video/VideoIndexStreamRule.php +++ b/app/Rules/Wiki/Submission/Video/VideoIndexStreamRule.php @@ -4,10 +4,12 @@ namespace App\Rules\Wiki\Submission\Video; +use App\Constants\FeatureConstants; use App\Rules\Wiki\Submission\SubmissionRule; use Closure; use Illuminate\Support\Arr; use Illuminate\Translation\PotentiallyTranslatedString; +use Laravel\Pennant\Feature; /** * Class VideoIndexStreamRule. @@ -24,6 +26,8 @@ class VideoIndexStreamRule extends SubmissionRule */ public function validate(string $attribute, mixed $value, Closure $fail): void { + if (Feature::for(null)->active(FeatureConstants::IGNORE_ALL_FILE_VALIDATIONS)) return; + $stream = Arr::first( $this->streams(), fn (array $stream) => Arr::get($stream, 'codec_type') === 'video' && Arr::get($stream, 'index') === 0 diff --git a/app/Rules/Wiki/Submission/Video/VideoPixelFormatStreamRule.php b/app/Rules/Wiki/Submission/Video/VideoPixelFormatStreamRule.php index 707288c78..365d00194 100644 --- a/app/Rules/Wiki/Submission/Video/VideoPixelFormatStreamRule.php +++ b/app/Rules/Wiki/Submission/Video/VideoPixelFormatStreamRule.php @@ -26,6 +26,8 @@ class VideoPixelFormatStreamRule extends SubmissionRule */ public function validate(string $attribute, mixed $value, Closure $fail): void { + if (Feature::for(null)->active(FeatureConstants::IGNORE_ALL_FILE_VALIDATIONS)) return; + $video = Arr::first( $this->streams(), fn (array $stream) => Arr::get($stream, 'codec_type') === 'video' diff --git a/database/seeders/Admin/Feature/FeatureSeeder.php b/database/seeders/Admin/Feature/FeatureSeeder.php index d61c97590..43faeccd3 100644 --- a/database/seeders/Admin/Feature/FeatureSeeder.php +++ b/database/seeders/Admin/Feature/FeatureSeeder.php @@ -34,6 +34,7 @@ public function run(): void Feature::deactivate(FeatureConstants::ALLOW_DISCORD_NOTIFICATIONS); Feature::deactivate(FeatureConstants::ALLOW_VIEW_RECORDING); Feature::activate(FeatureConstants::AUDIO_BITRATE_RESTRICTION); + Feature::deactivate(FeatureConstants::IGNORE_ALL_FILE_VALIDATIONS); Feature::deactivate(FeatureConstants::REQUIRED_ENCODER_VERSION); Feature::activate(FeatureConstants::VIDEO_BITRATE_RESTRICTION); Feature::deactivate(FeatureConstants::VIDEO_CODEC_STREAM); diff --git a/lang/en/filament.php b/lang/en/filament.php index d012f23cb..4f1f0fb4c 100644 --- a/lang/en/filament.php +++ b/lang/en/filament.php @@ -949,6 +949,9 @@ ], 'table_actions' => [ 'base' => [ + 'prune' => [ + 'icon' => 'heroicon-o-trash', + ], 'reconcile' => [ 'icon' => 'heroicon-o-arrow-path', ], @@ -1040,9 +1043,6 @@ 'dump' => [ 'icon' => 'heroicon-o-circle-stack', ], - 'prune' => [ - 'icon' => 'heroicon-o-trash', - ], ], ], 'tabs' => [