+ @if($isEdit)
+
+
+
+ @endif
@if( section_must_be( [ 'romhacks', 'homebrew' ], $section ) && !$isEdit )
@@ -25,4 +33,49 @@
@endif
@endforeach
+
+ @if($isEdit)
+
+
+
+
+
+
+
+ Are you sure you want to delete this entry? This action cannot be undone.
+
+
+
+
+
+
+
+
+ @endif
diff --git a/resources/views/components/topbar.blade.php b/resources/views/components/topbar.blade.php
index 39afe8f..98559d9 100644
--- a/resources/views/components/topbar.blade.php
+++ b/resources/views/components/topbar.blade.php
@@ -4,14 +4,16 @@
-
-
- Search
-
+
- @if( !\Auth::guest() && \Auth::user()->is_admin === 1 )
+ @can('is-admin')
@php $topbarAdminSeparator = true; @endphp
@@ -19,15 +21,15 @@
- @endif
+ @endcan
@if( $topbarAdminSeparator )
@endif
- @if( !\Auth::guest() && \Auth::user()->is_moderator === 1 )
+ @can('is-mod')
@php $topbarModSeparator = true; @endphp
-
+
@@ -36,7 +38,7 @@
- @endif
+ @endcan
@if( $topbarModSeparator )
diff --git a/resources/views/entries/draft_item.blade.php b/resources/views/entries/draft_item.blade.php
new file mode 100644
index 0000000..914c58a
--- /dev/null
+++ b/resources/views/entries/draft_item.blade.php
@@ -0,0 +1,54 @@
+
+
+ @if($entry->main_image)
+
 }})
+ @else
+
+
+
+ @endif
+
+
+
+
+
+
+ {{ $entry->complete_title }}
+
+
+
+ {{ \App\Livewire\Database::ENTRY_TYPES[$entry->type] }}
+
+ @if( $entry->getRealPlatform() )
+ {{ $entry->getRealPlatform()->name }}
+ @endif
+ @if( $entry->version )
+ {{ $entry->version }}
+ @endif
+
+
+
+
+
+ Last edited {{ $draft->updated_at->diffForHumans() }}
+
+
+
+ Created {{ $draft->created_at->format('d M Y') }}
+
+
+
+
+
+
+
+
diff --git a/resources/views/entries/drafts.blade.php b/resources/views/entries/drafts.blade.php
new file mode 100644
index 0000000..91d7093
--- /dev/null
+++ b/resources/views/entries/drafts.blade.php
@@ -0,0 +1,25 @@
+@extends('layouts.app')
+
+@section('page-title', "My Drafts - " . config('app.name'))
+
+@section('content')
+
+ My Drafts
+
+ @if($drafts->isEmpty())
+
+ @else
+
+ {{ $drafts->total() }} draft{{ $drafts->total() > 1 ? 's' : '' }}
+
+
+ @foreach($drafts as $draft)
+ @include('entries.draft_item', ['entry' => $draft])
+ @endforeach
+
+ {{ $drafts->links() }}
+ @endif
+@endsection
diff --git a/resources/views/entries/show.blade.php b/resources/views/entries/show.blade.php
index d1c49f5..11599e9 100644
--- a/resources/views/entries/show.blade.php
+++ b/resources/views/entries/show.blade.php
@@ -83,28 +83,28 @@
@if( $entry->game )
-
+
@endif
@if( $entry->getRealPlatform() )
-
+
@endif
@if( $entry->game && $entry->game->genre )
-
+
@endif
@if( $entry->languages->isNotEmpty() )
-
+
@endif
@if( $entry->status_id )
-
+
+ @endif
+ @if( $entry->modifications->isNotEmpty() )
+
@endif
@if( $entry->version )
@endif
@if( $entry->release_date )
-
- @endif
- @if( $entry->modifications->isNotEmpty() )
-
+
@endif
@@ -206,7 +206,7 @@
@endforeach
@endif
- @if( $entry->staff_credits )
+ @if( $entry->parseStaffCredits() )
diff --git a/resources/views/layouts/modcp.blade.php b/resources/views/layouts/modcp.blade.php
new file mode 100644
index 0000000..6a64097
--- /dev/null
+++ b/resources/views/layouts/modcp.blade.php
@@ -0,0 +1,95 @@
+@extends('layouts.app')
+
+@section('content')
+
+
+
+
+ @yield('modcp-content')
+
+
+@endsection
diff --git a/resources/views/livewire/database.blade.php b/resources/views/livewire/database.blade.php
index 835db5a..2b977ce 100644
--- a/resources/views/livewire/database.blade.php
+++ b/resources/views/livewire/database.blade.php
@@ -37,6 +37,9 @@
{{-- Platforms --}}
+ {{-- Genres --}}
+
+
{{-- Statuses --}}
diff --git a/resources/views/modcp/authors.blade.php b/resources/views/modcp/authors.blade.php
new file mode 100644
index 0000000..17708ba
--- /dev/null
+++ b/resources/views/modcp/authors.blade.php
@@ -0,0 +1,89 @@
+@extends('layouts.modcp')
+
+@section('modcp-content')
+
+
+ Authors
+ {{ $items->total() }}
+
+
+
+
+
+
+
+ @forelse($items as $author)
+
+
+
+ {{ $author->name }}
+
+ {{ $author->website ?? '—' }}
+ @if(($xfUser = $author->user()) !== null )
+
+
+
+ @endif
+ · {{ $author->entries_count }} {{ Str::plural('entry', $author->entries_count) }}
+
+
+
+
+
+
+
+
+
+
+
+ @empty
+
+ @endforelse
+
+
+ {{ $items->links() }}
+
+@endsection
diff --git a/resources/views/modcp/deleted.blade.php b/resources/views/modcp/deleted.blade.php
new file mode 100644
index 0000000..2737c7b
--- /dev/null
+++ b/resources/views/modcp/deleted.blade.php
@@ -0,0 +1,61 @@
+@extends('layouts.modcp')
+
+@section('page-title', 'Deleted entries - ' . config('app.name') )
+
+@section('modcp-content')
+
+
+
+ Deleted entries
+ {{ $entries->total() }}
+
+
+ @if($entries->isEmpty())
+
+
+
No deleted entries.
+
+ @else
+
+ @foreach($entries as $entry)
+
+
+ @if($entry->main_image)
+
 }})
+ @else
+
+ @endif
+
+
+ {{ $entry->complete_title ?? $entry->title }}
+
+ {{ $entry->type }}
+ @php $daysLeft = max(0, 7 - (int) now()->diffInDays($entry->deleted_at)) @endphp
+
+ Deleted {{ $entry->deleted_at->diffForHumans() }}
+ @if($daysLeft > 0) · purged in {{ $daysLeft }}d @endif
+
+
+
+
+
+
+
+
+ @endforeach
+
+ {{ $entries->links() }}
+ @endif
+
+@endsection
diff --git a/resources/views/modcp/entries.blade.php b/resources/views/modcp/entries.blade.php
new file mode 100644
index 0000000..4089d75
--- /dev/null
+++ b/resources/views/modcp/entries.blade.php
@@ -0,0 +1,52 @@
+@extends('layouts.modcp')
+
+@section('page-title', $pageTitle . ' - ' . config('app.name') )
+
+@section('modcp-content')
+
+ {{ $pageTitle }}
+ {{ $entries->count() }}
+
+
+ @if($entries->isEmpty())
+
+
+
No {{ $state }} entries.
+
+ @else
+
+ @foreach($entries as $entry)
+
+
+ @if($entry->main_image)
+
 }})
+ @else
+
+ @endif
+
+
+ {{ $entry->complete_title }}
+
+ {{ \App\Livewire\Database::ENTRY_TYPES[$entry->type] }}
+ @if($entry->getRealPlatform())
+ {{ $entry->getRealPlatform()->name }}
+ @endif
+ Added {{ $entry->created_at->format('d M Y') }} by
+
+
+
+
+ @endforeach
+
+ {{ $entries->links() }}
+ @endif
+@endsection
diff --git a/resources/views/modcp/games.blade.php b/resources/views/modcp/games.blade.php
new file mode 100644
index 0000000..16c6347
--- /dev/null
+++ b/resources/views/modcp/games.blade.php
@@ -0,0 +1,103 @@
+@extends('layouts.modcp')
+
+@section('modcp-content')
+
+
+ Games
+ {{ $items->total() }}
+
+
+
+
+
+
+
+ @forelse($items as $game)
+
+
+
+ {{ $game->name }}
+
+ {{ $game->platform->name ?? '—' }}
+ {{ $game->genre->name ?? '—' }}
+ · {{ $game->entries_count }} {{ Str::plural('entry', $game->entries_count) }}
+
+
+
+
+
+
+
+
+
+
+
+ @empty
+
+ @endforelse
+
+
+ {{ $items->links() }}
+
+@endsection
diff --git a/resources/views/modcp/index.blade.php b/resources/views/modcp/index.blade.php
new file mode 100644
index 0000000..1e881cb
--- /dev/null
+++ b/resources/views/modcp/index.blade.php
@@ -0,0 +1,91 @@
+@extends('layouts.modcp')
+
+@section('page-title', "Dashboard - " . config('app.name') )
+
+@section('modcp-content')
+
+ Dashboard
+
+
+
+ @if($recentDeleted->isNotEmpty())
+ Recently deleted
+
+ @foreach($recentDeleted as $entry)
+
+
+ {{ $entry->complete_title ?? $entry->title }}
+
+ {{ $entry->type }}
+ Deleted {{ $entry->deleted_at->diffForHumans() }}
+
+
+
+
+
+
+
+ @endforeach
+
+ See all deleted entries →
+
+
+ @endif
+
+@endsection
diff --git a/resources/views/modcp/resources.blade.php b/resources/views/modcp/resources.blade.php
new file mode 100644
index 0000000..37aae3d
--- /dev/null
+++ b/resources/views/modcp/resources.blade.php
@@ -0,0 +1,76 @@
+@extends('layouts.modcp')
+
+@section('page-title', $title . ' - ' . config('app.name'))
+
+@section('modcp-content')
+
+
+ {{ $title }}
+ {{ $items->total() }}
+
+
+
+
+
+
+
+
+
+ @forelse($items as $item)
+
+
+ {{ $item->name }}
+
+ slug: {{ $item->slug }}
+ @isset($item->entries_count)
+ · {{ $item->entries_count }} {{ Str::plural('entry', $item->entries_count) }}
+ @endisset
+
+
+
+
+
+
+
+
+
+
+ @empty
+
+
No {{ strtolower($title) }} yet.
+
+ @endforelse
+
+
+ {{ $items->links() }}
+
+@endsection
diff --git a/resources/views/submissions/form.blade.php b/resources/views/submissions/form.blade.php
index f57ee45..6293f7c 100644
--- a/resources/views/submissions/form.blade.php
+++ b/resources/views/submissions/form.blade.php
@@ -137,7 +137,7 @@
@endif
-
+
@error('gallery')
@@ -181,6 +181,18 @@
+
+
+ @if($isEdit)
+
+ @endif
+
+
+
@if($isEdit)
diff --git a/resources/views/tools/patcher.blade.php b/resources/views/tools/patcher.blade.php
new file mode 100644
index 0000000..2bf120a
--- /dev/null
+++ b/resources/views/tools/patcher.blade.php
@@ -0,0 +1,92 @@
+@extends('layouts.app')
+
+@section('page-title', "ROM Patcher - " . config('app.name'))
+
+@push('scripts')
+
+@endpush
+
+@section('content')
+
+ ROM Patcher
+
+
+
+
+
+
+
+
+
Checksums:
+
+ - CRC32:
+ - MD5:
+ - SHA-1:
+
+
+
+
+
+
+
+
+
+
+
+@endsection
diff --git a/routes/web.php b/routes/web.php
index 62fae69..9f12a07 100644
--- a/routes/web.php
+++ b/routes/web.php
@@ -1,6 +1,7 @@
name
Route::name('entries.')->controller(EntryController::class)->group(function () {
Route::get('/database', 'index' )->name('index');
+ Route::get('/{section}', 'section_redirect' )->name('section_redirect')
+ ->where(['section' => 'translations|romhacks|homebrew|utilities|documents|lua-scripts|tutorials']);
+
Route::get('/{section}/{entry:slug}', 'show' )->name('show')->where(
[
'section' => 'translations|romhacks|homebrew|utilities|documents|lua-scripts|tutorials',
@@ -19,6 +23,8 @@ Route::name('entries.')->controller(EntryController::class)->group(function () {
]
);
+ Route::get('/my-drafts', 'drafts' )->middleware('xf.auth')->name('drafts');
+
});
// SubmissionController.
@@ -34,6 +40,8 @@ Route::name('submit.')->prefix('/edit')->controller(\App\Http\Controllers\Submis
->where([ 'section' => 'translations|romhacks|homebrew|utilities|documents|lua-scripts|tutorials', 'entry' => '[0-9\-]+' ]);
Route::post('/{section}/{entry:id}', 'update' )->name('update')
->where([ 'section' => 'translations|romhacks|homebrew|utilities|documents|lua-scripts|tutorials', 'entry' => '[0-9\-]+' ]);
+ Route::delete('/{section}/{entry:id}', 'destroy' )->name('destroy')
+ ->where([ 'section' => 'translations|romhacks|homebrew|utilities|documents|lua-scripts|tutorials', 'entry' => '[0-9\-]+' ]);
});
// QueueController
@@ -56,6 +64,30 @@ Route::name('queue.')->prefix('/queue')->controller(\App\Http\Controllers\QueueC
->name('reject');
});
+// ToolsController
+Route::name('tools.')->controller(\App\Http\Controllers\ToolsController::class)->group(function () {
+ Route::get('/patch', 'patcher' )->name('patcher');
+});
+
+// ModeratorCPController
+Route::name('modcp.')->prefix('/modcp')->controller(\App\Http\Controllers\ModCPController::class)->middleware(['xf.auth','can:is-mod'])->group(function () {
+
+ Route::get('/', 'index' )->name('index');
+ Route::get('/locked-entries', 'locked' )->name('locked');
+ Route::get('/draft-entries', 'draft' )->name('draft')->middleware('can:is-admin');
+ Route::get('/hidden-entries', 'hidden' )->name('hidden')->middleware('can:is-admin');
+ Route::get('/deleted-entries', 'deleted' )->name('deleted')->middleware('can:is-admin');
+
+ Route::patch('/restore/{entry}', 'restore' )->name('restore')->where(['entry' => '[0-9\-]+'])->withTrashed()->middleware('can:is-admin');
+ Route::delete('/purge/{entry}', 'destroy' )->name('destroy')->where(['entry' => '[0-9\-]+'])->withTrashed()->middleware('can:is-admin');
+
+ Route::resource('games', \App\Http\Controllers\ModCP\GameController::class)->only(['index', 'store','update','destroy']);
+ Route::resource('languages', LanguageController::class)->only(['index', 'store','update','destroy']);
+ Route::resource('authors', \App\Http\Controllers\ModCP\AuthorController::class)->only(['index', 'store','update','destroy']);
+ Route::resource('platforms', \App\Http\Controllers\ModCP\PlatformController::class )->middleware('can:is-admin')->only(['index', 'store','update','destroy']);
+ Route::resource('genres', \App\Http\Controllers\ModCP\GenreController::class )->middleware('can:is-admin')->only(['index', 'store','update','destroy']);
+});
+
// RedirectController
Route::name('redirect.')->controller(\App\Http\Controllers\RedirectController::class)->group(function () {
Route::get('/entry/report_redirect', 'entryReportRedirect' )->name('entry_report');
diff --git a/vite.config.js b/vite.config.js
index 5981261..7b5ed4b 100644
--- a/vite.config.js
+++ b/vite.config.js
@@ -22,8 +22,8 @@ export default defineConfig({
ignored: ['**/storage/framework/views/**'],
},
https: {
- cert: '/mnt/01D9BE39AF0FC580/romhackplaza/rhpz.local+1.pem',
- key: '/mnt/01D9BE39AF0FC580/romhackplaza/rhpz.local+1-key.pem',
+ cert: '/mnt/ssd-data/sites/romhackplaza/rhpz.local+1.pem',
+ key: '/mnt/ssd-data/sites/romhackplaza/rhpz.local+1-key.pem',
},
},
});