From 76a1e6212901c6223743df0ed6ea8e098e08e432 Mon Sep 17 00:00:00 2001 From: Benjamin Date: Sat, 27 Jun 2026 18:57:26 +0200 Subject: [PATCH] Added NSFW compatibility --- app/Auth/XenForoUser.php | 1 + app/Http/Requests/StoreEntryRequest.php | 2 ++ app/Models/Entry.php | 8 ++++- app/Models/Scopes/NsfwScope.php | 29 +++++++++++++++++++ app/Services/SubmissionsService.php | 4 ++- ...06_27_133557_add_nsfw_field_to_entries.php | 28 ++++++++++++++++++ .../components/submit-entry-status.blade.php | 2 +- resources/views/submissions/form.blade.php | 3 ++ 8 files changed, 74 insertions(+), 3 deletions(-) create mode 100644 app/Models/Scopes/NsfwScope.php create mode 100644 database/migrations/2026_06_27_133557_add_nsfw_field_to_entries.php diff --git a/app/Auth/XenForoUser.php b/app/Auth/XenForoUser.php index 8cf5fcb..7d035e5 100644 --- a/app/Auth/XenForoUser.php +++ b/app/Auth/XenForoUser.php @@ -60,6 +60,7 @@ use Illuminate\Contracts\Auth\Authenticatable; * Custom properties. * * @property-read int $rhpz_entry_count + * @property-read int $nsfw_content */ class XenForoUser extends XenForoData implements Authenticatable, Authorizable, FilamentUser, HasName { diff --git a/app/Http/Requests/StoreEntryRequest.php b/app/Http/Requests/StoreEntryRequest.php index 276f472..91a5de9 100644 --- a/app/Http/Requests/StoreEntryRequest.php +++ b/app/Http/Requests/StoreEntryRequest.php @@ -138,6 +138,7 @@ class StoreEntryRequest extends FormRequest $ss .= ',locked'; $rules['submit-state'] = 'required|in:' . $ss; } else { + $rules['nsfw-entry'] = 'nullable|boolean'; if( $this->user()->can('skip-queue', '\App\Models\Entry') ){ $rules['submit-state'] = 'required|string|in:draft,pending,published'; } else { @@ -160,6 +161,7 @@ class StoreEntryRequest extends FormRequest $rules['comments_thread_id'] = 'nullable|integer'; $rules['featured'] = 'nullable|boolean'; $rules['refresh_created_at'] = 'nullable|boolean'; + $rules['nsfw-entry'] = 'nullable|boolean'; } return $rules; diff --git a/app/Models/Entry.php b/app/Models/Entry.php index 5fcb025..65fa513 100644 --- a/app/Models/Entry.php +++ b/app/Models/Entry.php @@ -3,6 +3,7 @@ namespace App\Models; use App\Helpers\EntryHelpers; +use App\Models\Scopes\NsfwScope; use App\Traits\HasGallery; use App\Traits\HasXenforoUserId; use Illuminate\Database\Eloquent\Model; @@ -137,7 +138,8 @@ class Entry extends Model 'staff_comment', 'rejected_at', 'level_id', - 'created_at' + 'created_at', + 'nsfw' ]; /** @@ -151,11 +153,15 @@ class Entry extends Model ]; protected static function booted(): void { + + static::addGlobalScope(new NsfwScope); + static::saving( function( $entry ) { if( $entry->isDirty('version') ) { $entry->created_at = now(); } }); + } diff --git a/app/Models/Scopes/NsfwScope.php b/app/Models/Scopes/NsfwScope.php new file mode 100644 index 0000000..a84aa4a --- /dev/null +++ b/app/Models/Scopes/NsfwScope.php @@ -0,0 +1,29 @@ +nsfw_content === 1; + } + + /** + * Apply the scope to a given Eloquent query builder. + */ + public function apply(Builder $builder, Model $model): void + { + if( !$this->canNsfw() ) + $builder->where('nsfw', false ); + } +} diff --git a/app/Services/SubmissionsService.php b/app/Services/SubmissionsService.php index bef15f7..21c9267 100644 --- a/app/Services/SubmissionsService.php +++ b/app/Services/SubmissionsService.php @@ -174,7 +174,8 @@ class SubmissionsService { 'youtube_link' => $this->request->input('youtube_video'), 'user_id' => $user_id, 'complete_title' => $completeTitle, - 'level_id' => $this->request->input('level') + 'level_id' => $this->request->input('level'), + 'nsfw' => $this->request->input('nsfw-entry') ?? false, ]; $entry = Entry::create( $fields ); @@ -608,6 +609,7 @@ class SubmissionsService { $refresh_created_at = $this->request->input('refresh_created_at') ?? false; if( $refresh_created_at ) $fields['created_at'] = now(); + $fields['nsfw'] = $this->request->input('nsfw-entry') ?? false; } $this->entry->update( $fields ); diff --git a/database/migrations/2026_06_27_133557_add_nsfw_field_to_entries.php b/database/migrations/2026_06_27_133557_add_nsfw_field_to_entries.php new file mode 100644 index 0000000..83e79d3 --- /dev/null +++ b/database/migrations/2026_06_27_133557_add_nsfw_field_to_entries.php @@ -0,0 +1,28 @@ +boolean('nsfw')->default(false); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('entries', function (Blueprint $table) { + $table->dropColumn('nsfw'); + }); + } +}; diff --git a/resources/views/components/submit-entry-status.blade.php b/resources/views/components/submit-entry-status.blade.php index 581b50e..cb1e26f 100644 --- a/resources/views/components/submit-entry-status.blade.php +++ b/resources/views/components/submit-entry-status.blade.php @@ -26,7 +26,7 @@ @endif
- @if( section_must_be( [ 'romhacks', 'homebrew' ], $section ) && !$isEdit ) + @if( section_must_be( [ 'romhacks', 'homebrew' ], $section ) && !$isEdit && $VISITOR->nsfw_content === 1 ) @endif
diff --git a/resources/views/submissions/form.blade.php b/resources/views/submissions/form.blade.php index 4a8f939..3526f88 100644 --- a/resources/views/submissions/form.blade.php +++ b/resources/views/submissions/form.blade.php @@ -231,6 +231,9 @@
+ @if( section_must_be(['romhacks', 'homebrew'], $section ) ) + + @endif
@endcan