'required|string|max:255', 'guest_email' => 'required|string|email|max:255', ]; } // Merge guest rules, if any, with normal validation rules. Validator::make($request->all(), array_merge($guest_rules ?? [], [ 'commentable_type' => 'required|string', 'commentable_id' => 'required|string|min:1', 'message' => 'required|string' ]))->validate(); $model = $request->commentable_type::findOrFail($request->commentable_id); $commentClass = Config::get('comments.model'); $comment = new $commentClass; if (!Auth::check()) { $comment->guest_name = $request->guest_name; $comment->guest_email = $request->guest_email; } else { $comment->commenter()->associate(Auth::user()); } $comment->commentable()->associate($model); $comment->comment = $request->message; $comment->approved = !Config::get('comments.approval_required'); $comment->save(); return $comment; } /** * Handles updating the message of the comment. * @return mixed the configured comment-model */ public function update(Request $request, Comment $comment) { Gate::authorize('edit-comment', $comment); Validator::make($request->all(), [ 'message' => 'required|string' ])->validate(); $comment->update([ 'comment' => $request->message ]); return $comment; } /** * Handles deleting a comment. * @return mixed the configured comment-model */ public function destroy(Comment $comment): void { Gate::authorize('delete-comment', $comment); if (Config::get('comments.soft_deletes') == true) { $comment->delete(); } else { $comment->forceDelete(); } } /** * Handles creating a reply "comment" to a comment. * @return mixed the configured comment-model */ public function reply(Request $request, Comment $comment) { Gate::authorize('reply-to-comment', $comment); Validator::make($request->all(), [ 'message' => 'required|string' ])->validate(); $commentClass = Config::get('comments.model'); $reply = new $commentClass; $reply->commenter()->associate(Auth::user()); $reply->commentable()->associate($comment->commentable); $reply->parent()->associate($comment); $reply->comment = $request->message; $reply->approved = !Config::get('comments.approval_required'); $reply->save(); // Notify if ($comment->commentable_type == 'App\Models\Episode') { $episode = Episode::where('id', $comment->commentable_id)->firstOrFail(); $url = '/hentai/' . $episode->slug . '#comment-' . $reply->id; $user = Auth::user(); $username = $user->global_name ?? $user->username; $parentCommentUser = User::where('id', $comment->commenter_id)->firstOrFail(); $parentCommentUser->notify( new CommentNotification( "{$username} replied to your comment.", Str::limit($reply->comment, 50), $url ) ); } return $reply; } }