Add (v1)
This commit is contained in:
@@ -4,6 +4,7 @@
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Post;
|
||||
use App\Models\PostCategory;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class PostController extends Controller
|
||||
@@ -27,10 +28,113 @@ public function edit(Request $request, $post_id)
|
||||
{
|
||||
$post = Post::find($post_id);
|
||||
|
||||
if (!is_null($post))
|
||||
{
|
||||
return view('admin.posts.upsert', compact('post'));
|
||||
if (! is_null($post)) {
|
||||
return view('admin.posts.upsert', compact('post'));
|
||||
}
|
||||
|
||||
return redirect()->back()->with('error', 'Post does not exist.');
|
||||
}
|
||||
|
||||
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'),
|
||||
'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 [];
|
||||
}
|
||||
return redirect()->back()->with('error','Post does not exist.');
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user