79 lines
2.5 KiB
PHP
79 lines
2.5 KiB
PHP
|
|
<?php
|
||
|
|
|
||
|
|
namespace App\Http\Requests;
|
||
|
|
|
||
|
|
use App\Models\News;
|
||
|
|
use App\Rules\PublicFileExists;
|
||
|
|
use App\Rules\XfUserExists;
|
||
|
|
use Illuminate\Contracts\Validation\ValidationRule;
|
||
|
|
use Illuminate\Foundation\Http\FormRequest;
|
||
|
|
|
||
|
|
class StoreNewsRequest extends FormRequest
|
||
|
|
{
|
||
|
|
/**
|
||
|
|
* Determine if the user is authorized to make this request.
|
||
|
|
*/
|
||
|
|
public function authorize(): bool
|
||
|
|
{
|
||
|
|
$news = $this->route('news');
|
||
|
|
if( $news )
|
||
|
|
return $this->user()->can('update', $news);
|
||
|
|
|
||
|
|
return $this->user()->can('create', News::class);
|
||
|
|
}
|
||
|
|
|
||
|
|
public function prepareForValidation(): void
|
||
|
|
{
|
||
|
|
$this->merge([
|
||
|
|
'gallery' => $this->input('gallery') !== '' ? $this->input('gallery') : null,
|
||
|
|
]);
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Get the validation rules that apply to the request.
|
||
|
|
*
|
||
|
|
* @return array<string, ValidationRule|array<mixed>|string>
|
||
|
|
*/
|
||
|
|
public function rules(): array
|
||
|
|
{
|
||
|
|
$isEdit = (bool) $this->route('news');
|
||
|
|
|
||
|
|
$rules = [];
|
||
|
|
|
||
|
|
$rules['title'] = 'required|string|max:255';
|
||
|
|
$rules['category'] = 'required|integer|exists:categories,id';
|
||
|
|
|
||
|
|
$rules['description'] = 'required|string';
|
||
|
|
$rules['gallery'] = 'array|required|min:1';
|
||
|
|
$rules['gallery.*'] = [ 'string', new PublicFileExists ];
|
||
|
|
|
||
|
|
$rules['entry_id'] = 'nullable|integer|exists:entries,id';
|
||
|
|
$rules['release_site'] = 'nullable|url|max:500';
|
||
|
|
$rules['youtube_video'] = 'nullable|url|max:500';
|
||
|
|
|
||
|
|
if( $isEdit ){
|
||
|
|
$ss = 'draft,pending,published';
|
||
|
|
if( \Auth::user()->can('moderate', $this->route('news')) && \Auth::user()->can('view-hidden', $this->route('news')) )
|
||
|
|
$ss .= ',hidden';
|
||
|
|
if(\Auth::user()->can('moderate', $this->route('news')) && \Auth::user()->can('view-locked', $this->route('news')) )
|
||
|
|
$ss .= ',locked';
|
||
|
|
$rules['submit-state'] = 'required|in:' . $ss;
|
||
|
|
} else {
|
||
|
|
if( $this->user()->can('skip-queue', '\App\Models\News') ){
|
||
|
|
$rules['submit-state'] = 'required|string|in:draft,pending,published';
|
||
|
|
} else {
|
||
|
|
$rules['submit-state'] = 'required|string|in:draft,pending';
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
if( $isEdit && $this->user()->can('moderate', $this->route('news') ) ){
|
||
|
|
$rules['staff_comment'] = 'nullable|string';
|
||
|
|
$rules['owner_user_id'] = [ 'required', 'integer', new XfUserExists ];
|
||
|
|
$rules['comments_thread_id'] = 'nullable|integer';
|
||
|
|
}
|
||
|
|
|
||
|
|
return $rules;
|
||
|
|
|
||
|
|
}
|
||
|
|
}
|