orderBy('created_at', 'desc')->paginate(); return view('admin.posts.manage', compact('posts')); } public function new(Request $request) { $post = null; return view('admin.posts.upsert', compact('post')); } public function edit(Request $request, $post_id) { $post = Post::find($post_id); if (! is_null($post)) { return view('admin.posts.upsert', compact('post')); } return redirect()->back()->with('error', 'Post does not exist.'); } public function delete(Request $request, $post_id) { $post = Post::find($post_id); if (! is_null($post)) { $post_categories = PostCategory::where('post_id', $post->id)->delete(); $post->delete(); return redirect()->back()->with('success', 'Post deleted.'); } return redirect()->back()->with('error', 'Post does not exist.'); } public function indexing(Request $request, $post_id) { $post = Post::find($post_id); if (! is_null($post)) { $post_url = route('home.country.post', ['country' => $post->post_category?->category?->country_locale_slug, 'post_slug' => $post->slug]); //LaravelGoogleIndexing::create()->update($post_url); IndexNow::submit($post_url); return redirect()->back()->with('success', 'Signalled, Bing, Yahoo and Yandex for Indexing.'); } return redirect()->back()->with('error', 'Something went wrong.'); } public function postUpsert(Request $request) { $post_data = [ 'id' => $request->input('id', null), 'publish_date' => $request->input('publish_date', null), 'title' => $request->input('title'), 'slug' => $request->input('slug'), 'excerpt' => $request->input('excerpt'), 'cliffhanger' => $request->input('cliffhanger'), 'author_id' => intval($request->input('author_id', 1)), 'featured' => filter_var($request->input('featured'), FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE), 'featured_image' => $request->input('featured_image'), 'editor' => 'editorjs', 'body' => json_decode($request->input('body')), 'post_format' => 'standard', 'comment_count' => 0, 'likes_count' => 0, 'status' => $request->input('status'), ]; $post_categories = $this->normalizeCategories($request->input('categories')); if (! empty($post_data['id'])) { // It's an update - find the existing post by its ID $existingPost = Post::find($post_data['id']); // Check if the post with the given ID exists if ($existingPost) { // Update the existing post with the new data $existingPost->update($post_data); // Handle PostCategory records for the existing post $existingPostCategoryIds = $existingPost?->post_categories->pluck('id')->toArray(); // Find the IDs of PostCategory records that should be removed $postCategoriesToRemove = array_diff($existingPostCategoryIds, $post_categories); // Remove the unwanted PostCategory records if (! empty($postCategoriesToRemove)) { PostCategory::whereIn('id', $postCategoriesToRemove)->delete(); } // Find the new PostCategory records that should be added $postCategoriesToAdd = array_diff($post_categories, $existingPostCategoryIds); // Create the new PostCategory records foreach ($postCategoriesToAdd as $categoryId) { PostCategory::create([ 'post_id' => $existingPost->id, 'category_id' => $categoryId, ]); } // Return a response indicating a successful update return response()->json(['message' => 'Post updated successfully', 'action' => 'redirect_back']); } else { // If the post with the given ID doesn't exist, you can handle the error as per your requirement return response()->json(['error' => 'Post not found'], 404); } } else { // It's a new post - create a new record using Post::create $newPost = Post::create($post_data); // Create the new PostCategory records for the new post foreach ($post_categories as $categoryId) { PostCategory::create([ 'post_id' => $newPost->id, 'category_id' => $categoryId, ]); } // Return a response indicating a successful creation return response()->json(['message' => 'Post created successfully', 'action' => 'redirect_back']); } } private function normalizeCategories($categories) { if (empty($categories) || is_null($categories)) { // If the input is empty or null, return an empty array return []; } elseif (is_numeric($categories)) { // If the input is a numeric value (integer or string), return an array with the integer value return [(int) $categories]; } else { // If the input is a string with separated commas or a JSON string that becomes an array of integers, return an array of integers if (is_string($categories)) { // Attempt to convert the string to an array of integers $categoryIds = json_decode($categories, true); // Check if the decoding was successful and the result is an array of integers if (is_array($categoryIds) && ! empty($categoryIds)) { $categoryIds = array_map('intval', $categoryIds); return $categoryIds; } } // If the input format doesn't match any of the above cases, return an empty array return []; } } }