178 lines
6.5 KiB
PHP
178 lines
6.5 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Admin;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Models\Post;
|
|
use App\Models\PostCategory;
|
|
use Illuminate\Http\Request;
|
|
use LaravelFreelancerNL\LaravelIndexNow\Facades\IndexNow;
|
|
use LaravelGoogleIndexing;
|
|
|
|
class PostController extends Controller
|
|
{
|
|
public function index(Request $request)
|
|
{
|
|
$posts = Post::with('post_categories.category.country_locale')->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 [];
|
|
}
|
|
}
|
|
}
|