89 lines
2.5 KiB
PHP
89 lines
2.5 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Helpers\EntryHelpers;
|
|
use App\Models\Entry;
|
|
use App\Models\News;
|
|
use Artesaos\SEOTools\Facades\SEOTools;
|
|
use Illuminate\Support\Facades\Gate;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\Storage;
|
|
use Illuminate\Support\Str;
|
|
use Illuminate\View\View;
|
|
|
|
class EntryController extends Controller
|
|
{
|
|
|
|
private const SECTION_TYPES = ['translations', 'romhacks', 'homebrew', 'utilities', 'documents', 'lua-scripts'];
|
|
|
|
public function index(): View
|
|
{
|
|
SEOTools::setTitle('Database');
|
|
return view('entries.index');
|
|
}
|
|
|
|
public function section_redirect(string $section)
|
|
{
|
|
return redirect( databaseRoute( ['types' => [ $section ] ] ) );
|
|
}
|
|
|
|
public function show(string $section, Entry $entry): View
|
|
{
|
|
|
|
if (!in_array($section, self::SECTION_TYPES))
|
|
abort(404);
|
|
|
|
if ($entry->type !== $section)
|
|
abort(404);
|
|
|
|
if( !\Auth::guest() )
|
|
Gate::authorize('viewAny', $entry);
|
|
|
|
// Permissions.
|
|
$entryPolicy = match ($entry->state) {
|
|
'pending' => 'viewPending',
|
|
'draft' => 'viewDraft',
|
|
'rejected' => 'viewRejected',
|
|
'hidden' => 'viewHidden',
|
|
'locked' => 'viewLocked',
|
|
'published' => null,
|
|
'default' => null
|
|
};
|
|
|
|
if ($entryPolicy)
|
|
Gate::authorize($entryPolicy, $entry);
|
|
|
|
$comments = EntryHelpers::getLatestComments($entry);
|
|
$reviews = $entry->reviews()->orderBy('created_at', 'desc')->limit(10)->get();
|
|
|
|
SEOTools::setTitle($entry->complete_title ?? $entry->title);
|
|
SEOTools::setDescription( Str::limit( $entry->description, 150) );
|
|
SEOTools::opengraph()->addProperty('type', 'article');
|
|
if( $entry->main_image ){
|
|
SEOTools::opengraph()->addImage( url( Storage::url( $entry->main_image ) ) );
|
|
}
|
|
|
|
return view('entries.show', compact('entry', 'section', 'comments', 'reviews'));
|
|
|
|
}
|
|
|
|
public function drafts(): View
|
|
{
|
|
$drafts = Entry::where('user_id', \Auth::user()->user_id )
|
|
->where('state', 'draft')
|
|
->with('game.platform', 'status')
|
|
->orderBy('updated_at', 'desc')
|
|
->paginate(20);
|
|
|
|
$newsDrafts = News::where('user_id', \Auth::user()->user_id )
|
|
->where('state', 'draft')
|
|
->orderBy('updated_at', 'desc')
|
|
->paginate(20);
|
|
|
|
SEOTools::setTitle('My Drafts');
|
|
return view('entries.drafts', compact('drafts', 'newsDrafts'));
|
|
}
|
|
|
|
}
|