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> */ 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; } }