A lot of things
This commit is contained in:
9
resources/views/news/create.blade.php
Normal file
9
resources/views/news/create.blade.php
Normal file
@@ -0,0 +1,9 @@
|
||||
@extends('layouts.app')
|
||||
|
||||
@section('page-title', "Submit News - " . config('app.name') )
|
||||
|
||||
@section('content')
|
||||
{{ \Diglactic\Breadcrumbs\Breadcrumbs::render() }}
|
||||
<div class="page-title">Submit a news</div>
|
||||
@include('news.form')
|
||||
@endsection
|
||||
51
resources/views/news/draft_item.blade.php
Normal file
51
resources/views/news/draft_item.blade.php
Normal file
@@ -0,0 +1,51 @@
|
||||
<div class="drafts-item">
|
||||
<div class="drafts-cover">
|
||||
@if($news->gallery()->first())
|
||||
<img src="{{ Storage::url($news->gallery()->first()->image) }}">
|
||||
@else
|
||||
<div class="drafts-cover-placeholder">
|
||||
<i data-lucide="image" size="24"></i>
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
|
||||
<div class="drafts-info">
|
||||
<div class="drafts-top">
|
||||
<div>
|
||||
<h3 class="drafts-title">
|
||||
{{ $news->title }}
|
||||
</h3>
|
||||
<div class="drafts-meta">
|
||||
<span class="badge news">
|
||||
News
|
||||
</span>
|
||||
@if( $news->category_id )
|
||||
<span class="badge">{{ $news->category->name }}</span>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
<div class="drafts-dates">
|
||||
<span>
|
||||
<i data-lucide="pencil" size="12"></i>
|
||||
Last edited {{ $draft->updated_at->diffForHumans() }}
|
||||
</span>
|
||||
<span>
|
||||
<i data-lucide="calendar" size="12"></i>
|
||||
Created {{ $draft->created_at->format('d M Y') }}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="drafts-actions">
|
||||
<a href="{{ route('news.edit', ['news' => $news]) }}" class="btn primary">
|
||||
<i data-lucide="pen" size="13"></i>
|
||||
Continue editing
|
||||
</a>
|
||||
<a href="{{ route('news.show', ['news' => $news] ) }}" class="btn" target="_blank">
|
||||
<i data-lucide="eye" size="13"></i>
|
||||
Preview
|
||||
</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
9
resources/views/news/edit.blade.php
Normal file
9
resources/views/news/edit.blade.php
Normal file
@@ -0,0 +1,9 @@
|
||||
@extends('layouts.app')
|
||||
|
||||
@section('page-title', "Edit $news->title - " . config('app.name') )
|
||||
|
||||
@section('content')
|
||||
{{ \Diglactic\Breadcrumbs\Breadcrumbs::render() }}
|
||||
<div class="page-title">Submit a news</div>
|
||||
@include('news.form')
|
||||
@endsection
|
||||
104
resources/views/news/form.blade.php
Normal file
104
resources/views/news/form.blade.php
Normal file
@@ -0,0 +1,104 @@
|
||||
@push('styles')
|
||||
<meta name="csrf-token" content="{{ csrf_token() }}">
|
||||
<meta name="submission-has-errors" content="{{ $errors->any() ? '1' : '0' }}">
|
||||
@endpush
|
||||
|
||||
@push('scripts')
|
||||
@vite('resources/js/news-submissions.js')
|
||||
@endpush
|
||||
|
||||
{{-- Server side errors summary --}}
|
||||
@if($errors->any())
|
||||
@foreach( $errors->all() as $error )
|
||||
<x-form-error-text message="{{ $error }}" />
|
||||
@endforeach
|
||||
@endif
|
||||
|
||||
<div class="block">
|
||||
<form action="{{ $isEdit ? route('news.update', [$news->id ]) : route('news.store') }}" method="POST" x-data="NewsSubmission()" x-init="init()" @submit.prevent="submitForm($event)">
|
||||
|
||||
<x-form-group-title label="About the news" icon="puzzle" />
|
||||
<div class="form-group grid-c2">
|
||||
<div>
|
||||
<x-form-field-title name="Title" required="true" />
|
||||
<input class="form-input" type="text" name="title" value="{{ old('title', $news->title ?? '' ) }}" required>
|
||||
@error('title')
|
||||
<x-form-error-text message="{{ $message }}" />
|
||||
@enderror
|
||||
</div>
|
||||
<div>
|
||||
<x-form-field-title name="Categories" required="true" />
|
||||
<x-category-selector section="news" :selected="$oldCategory" :required="true" :news="true" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group" x-ref="descriptionField">
|
||||
<x-form-field-title name="Content" required="true" />
|
||||
<x-markdown-textarea name="description" value="{{ old('description', $news->description ?? '') }}" />
|
||||
<div class="form-error-text" x-show="errorKey === 'noDescription'" x-text="errorMessage"></div>
|
||||
@error('description')
|
||||
<x-form-error-text message="{{ $message }}" />
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<x-form-group-title label="Attachments" icon="paperclip" />
|
||||
<x-gallery-field :old-paths="old('gallery', $news->gallery->pluck('image')->toArray() ?? [] )"/>
|
||||
@error('gallery')
|
||||
<x-form-error-text message="{{ $message }}" />
|
||||
@enderror
|
||||
@error('gallery.*')
|
||||
<x-form-error-text message="{{ $message }}" />
|
||||
@enderror
|
||||
|
||||
<x-form-group-title label="Related Links" icon="link" />
|
||||
<livewire:entry-selector :old-entry-id="old('entry_id', $news->entry_id )" />
|
||||
<div class="form-group grid-c2">
|
||||
<div>
|
||||
<x-form-field-title name="Release Site" required="" />
|
||||
<input class="form-input" type="url" name="release_site" value="{{ old( 'release_site', $news->relevant_link ?? '' ) }}">
|
||||
</div>
|
||||
<div>
|
||||
<x-form-field-title name="Youtube Video" required="" />
|
||||
<input class="form-input" type="url" name="youtube_video" value="{{ old( 'youtube_video', $news->youtube_link ?? '' ) }}">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@if($isEdit)
|
||||
<x-form-group-title label="News Management" icon="wrench" />
|
||||
@can('moderate',$news)
|
||||
<div class="form-group grid-c2">
|
||||
<div>
|
||||
<x-form-field-title name="Staff comment" />
|
||||
<textarea class="form-textarea" name="staff_comment" rows="3">{{ old('staff_comment', $entry->staff_comment ?? '' ) }}</textarea>
|
||||
</div>
|
||||
<div>
|
||||
<x-form-field-title name="Owner" required="true" />
|
||||
<livewire:xf-user-selector :initial-user-id="old('owner_user_id', $news->user_id)" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group grid-c2">
|
||||
<div>
|
||||
<x-form-field-title name="XenForo Comments Thread ID" />
|
||||
<input type="text" name="comments_thread_id" class="form-input" value="{{ old('comments_thread_id', $news->comments_thread_id) }}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<x-form-field-title name="Metadata" required="true" />
|
||||
<div class="form-type-of-checkboxes form-group level" id="entry-metadata">
|
||||
</div>
|
||||
</div>
|
||||
@endcan
|
||||
@cannot('moderate', $news)
|
||||
|
||||
@endcannot
|
||||
@endif
|
||||
|
||||
@csrf
|
||||
|
||||
<div class="submit">
|
||||
<x-submit-entry-status section="news" :is-edit="$isEdit" :current-state="$news->state ?? null" :entry="$news" :news="true" />
|
||||
<button id="submit-button" type="submit" class="btn primary" style="padding:1%;">Submit</button>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
</div>
|
||||
11
resources/views/news/index.blade.php
Normal file
11
resources/views/news/index.blade.php
Normal file
@@ -0,0 +1,11 @@
|
||||
@extends('layouts.app')
|
||||
|
||||
@section('page-title', "News - " . config('app.name') )
|
||||
|
||||
@section('content')
|
||||
{{ \Diglactic\Breadcrumbs\Breadcrumbs::render() }}
|
||||
<div class="page-title">
|
||||
News
|
||||
</div>
|
||||
@livewire('news-database')
|
||||
@endsection
|
||||
225
resources/views/news/show.blade.php
Normal file
225
resources/views/news/show.blade.php
Normal file
@@ -0,0 +1,225 @@
|
||||
@extends('layouts.app')
|
||||
|
||||
@section('page-title', $news->title . " - " . config('app.name') )
|
||||
|
||||
@section('content')
|
||||
{{ Diglactic\Breadcrumbs\Breadcrumbs::render() }}
|
||||
<article id="news-container">
|
||||
<div class="news-header"
|
||||
style="background-image: linear-gradient(rgba(0,0,0,0.4), var(--bg2)), url('{{ $news->gallery()->first() ? Storage::url($news->gallery()->first()->image ) : '' }}')">
|
||||
<div class="news-header-content">
|
||||
<h1 class="news-title">
|
||||
{{ $news->title }}
|
||||
@if( $news->state === 'pending' )
|
||||
<div style="display:inline;color:var(--rhpz-orange);">
|
||||
-
|
||||
<i data-lucide="clock" size="24"></i>
|
||||
Pending approval
|
||||
</div>
|
||||
@elseif( $news->state === 'rejected' )
|
||||
<div style="display:inline;color:var(--error);">
|
||||
-
|
||||
<i data-lucide="x-circle" size="24"></i>
|
||||
Rejected
|
||||
</div>
|
||||
@elseif( $news->state === 'locked' )
|
||||
<div style="display:inline;color:var(--error);">
|
||||
-
|
||||
<i data-lucide="lock" size="24"></i>
|
||||
Locked
|
||||
</div>
|
||||
@elseif( $news->state === 'draft' )
|
||||
<div style="display:inline;color:var(--rhpz-orange);">
|
||||
-
|
||||
<i data-lucide="scissors" size="24"></i>
|
||||
Draft
|
||||
</div>
|
||||
@elseif( $news->state === 'hidden' )
|
||||
<div style="display:inline;color:var(--rhpz-orange);">
|
||||
-
|
||||
<i data-lucide="hide" size="24"></i>
|
||||
Hidden
|
||||
</div>
|
||||
@endif
|
||||
</h1>
|
||||
<div class="news-meta">
|
||||
@if($news->category_id)
|
||||
<a href="#" class="meta-item">
|
||||
<i data-lucide="book" size="16"></i>
|
||||
{{ $news->category->name }}
|
||||
</a>
|
||||
@endif
|
||||
@if($news->user_id)
|
||||
<span class="meta-item">
|
||||
<i data-lucide="user" size="16"></i>
|
||||
Posted by <x-xf-username-link :user-id="$news->user_id"/>
|
||||
</span>
|
||||
@endif
|
||||
<span class="meta-item">
|
||||
<i data-lucide="calendar" size="16"></i>
|
||||
{{ $news->created_at->format('M d, Y') }}
|
||||
</span>
|
||||
@if($news->updated_at && $news->updated_at->gt($news->created_at))
|
||||
<span class="meta-item">
|
||||
<i data-lucide="file-edit" size="16"></i>
|
||||
Updated {{ $news->updated_at->diffForHumans() }}
|
||||
</span>
|
||||
@endif
|
||||
</div>
|
||||
<div class="news-actions">
|
||||
|
||||
@if($news->state === 'pending')
|
||||
@can('approve', $news)
|
||||
<div x-data="{ rejectOpen: false }">
|
||||
<form action="{{ route('queue.news.approve', $news) }}" method="POST" style="display:inline">
|
||||
@csrf @method('PATCH')
|
||||
<button type="submit" class="btn success" onclick="return confirm('Approve this news?')">
|
||||
<i data-lucide="check-circle" size="14"></i> Approve
|
||||
</button>
|
||||
</form>
|
||||
<button type="button" class="btn danger" @click="rejectOpen = true">
|
||||
<i data-lucide="x-circle" size="14"></i> Reject
|
||||
</button>
|
||||
|
||||
<div class="modal-overlay" x-cloak x-show="rejectOpen" x-transition.opacity
|
||||
@click.self="rejectOpen = false" @keydown.escape.window="rejectOpen = false">
|
||||
<div class="modal-window" x-show="rejectOpen" x-transition>
|
||||
<div class="modal-header">
|
||||
<span class="modal-title">Reject news</span>
|
||||
<button type="button" class="modal-close" @click="rejectOpen = false">
|
||||
<i data-lucide="x" size="20"></i>
|
||||
</button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<form action="{{ route('queue.news.reject', $news) }}" method="POST">
|
||||
@csrf @method('PATCH')
|
||||
<div class="form-group">
|
||||
<x-form-field-title name="Rejection reason" required="true" />
|
||||
<textarea class="form-input" name="reason" rows="4" required></textarea>
|
||||
</div>
|
||||
<div class="queue-mod-actions">
|
||||
<button type="button" class="btn" @click="rejectOpen = false">Cancel</button>
|
||||
<button type="submit" class="btn danger">
|
||||
<i data-lucide="x-circle" size="14"></i> Confirm rejection
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endcan
|
||||
@endif
|
||||
|
||||
@can('update', $news)
|
||||
<a href="{{ route('news.edit', $news) }}" class="btn">
|
||||
<i data-lucide="edit" size="14"></i> Edit
|
||||
</a>
|
||||
@endcan
|
||||
|
||||
@auth
|
||||
<a href="{{ xfRoute("romhackplaza_news/{$news->id}/report") }}" class="btn">
|
||||
<i data-lucide="flag" size="14"></i> Report
|
||||
</a>
|
||||
@endauth
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="news-layout">
|
||||
<div class="news-main-content entry-content">
|
||||
@if( $news->description )
|
||||
<div class="news-body-text">
|
||||
{{ $news->description }}
|
||||
</div>
|
||||
@endif
|
||||
@if( $news->gallery->isNotEmpty() )
|
||||
<div x-data="{ open: false, currentImage: ''}" x-cloak>
|
||||
<x-entry-section-title label="Gallery" icon="images"/>
|
||||
<div class="entry-gallery">
|
||||
@foreach( $news->gallery as $galleryItem )
|
||||
<div class="entry-gallery-item"
|
||||
@click="currentImage = '{{ Storage::url($galleryItem->image) }}'; open = true; "><img
|
||||
src="{{ Storage::url($galleryItem->image) }}"></div>
|
||||
@endforeach
|
||||
</div>
|
||||
<div class="gallery-modal" x-show="open" x-transition.opacity.duration.300ms @click="open = false"
|
||||
@keydown.escape.window="open = false">
|
||||
<span class="gallery-modal-close" @click="open = false;"><i data-lucide="x"></i></span>
|
||||
<div class="gallery-modal-content" @click.stop>
|
||||
<img :src="currentImage">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
<aside class="news-sidebar">
|
||||
|
||||
@if($news->entry->exists())
|
||||
<div class="sidebar-block">
|
||||
<h3 class="sidebar-title">
|
||||
<i data-lucide="content" size="18"></i>
|
||||
Related entry
|
||||
</h3>
|
||||
<div class="related-card">
|
||||
@if( $news->entry->main_image )
|
||||
<div class="related-card-cover">
|
||||
<img src="{{ Storage::url($news->entry->main_image) }}">
|
||||
</div>
|
||||
@endif
|
||||
<div class="related-card-info">
|
||||
<h4>{{ $news->entry->title }}</h4>
|
||||
<a href="{{ route('entries.show', ['section' => $news->entry->type, 'entry' => $news->entry ]) }}" class="btn-sidebar" class="btn-orange">
|
||||
Go to the entry
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
@if($news->relevant_link)
|
||||
<div class="sidebar-block">
|
||||
<h3 class="sidebar-title">
|
||||
<i data-lucide="link" size="18"></i>
|
||||
Relevant link
|
||||
</h3>
|
||||
<a href="{{ $news->relevant_link }}" target="_blank" rel="noopener">
|
||||
{{ $news->relevant_link }}
|
||||
</a>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
@if( $news->youtube_link )
|
||||
<div x-data="{open: false, src: ''}" x-cloak class="sidebar-block youtube-section">
|
||||
|
||||
<h3 class="sidebar-title">
|
||||
<i data-lucide="play" size="18"></i>
|
||||
Youtube video
|
||||
</h3>
|
||||
|
||||
<div class="video-thumbnail-wrapper"
|
||||
@click="src = 'https://www.youtube.com/embed/{{ $news->getYoutubeVideoId() }}?autoplay=1'; open = true">
|
||||
<img src="https://img.youtube.com/vi/{{ $news->getYoutubeVideoId() }}/maxresdefault.jpg">
|
||||
<div class="play-trigger">
|
||||
<i data-lucide="play"></i>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="gallery-modal" x-show="open" x-transition.opacity.duration.300ms
|
||||
@click="open = false; src = ''" @keydown.escape.window="open = false; src = ''">
|
||||
<span class="gallery-modal-close" @click="open = false; src = '';"><i
|
||||
data-lucide="x"></i></span>
|
||||
<div class="gallery-modal-video" @click.stop>
|
||||
<iframe :src="src"
|
||||
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
|
||||
allowfullscreen></iframe>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
</aside>
|
||||
</div>
|
||||
</article>
|
||||
@include('entries.comments')
|
||||
@endsection
|
||||
Reference in New Issue
Block a user