199 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			PHP
		
	
	
			
		
		
	
	
			199 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			PHP
		
	
	
| <?php
 | |
| 
 | |
| namespace App\Http\Controllers;
 | |
| 
 | |
| use App\Http\Requests\PostRequest;
 | |
| use App\Models\Kategori;
 | |
| use App\Models\Post;
 | |
| use App\Models\SubKategori;
 | |
| use Illuminate\Http\Request;
 | |
| use Illuminate\Support\Facades\Log;
 | |
| use Illuminate\Support\Facades\Storage;
 | |
| use Inertia\Inertia;
 | |
| use Illuminate\Support\Facades\DB;
 | |
| 
 | |
| class PostController extends Controller
 | |
| {
 | |
|     public function index()
 | |
|     {
 | |
|         $posts = Post::with(['kategori', 'subkategori'])->latest()->get();
 | |
| 
 | |
|         // Transform posts to include proper image URLs
 | |
|         $posts = $posts->map(function ($post) {
 | |
|             if ($post->ImagePost) {
 | |
|                 $post->ImagePost = Storage::url($post->ImagePost);
 | |
|             }
 | |
|             return $post;
 | |
|         });
 | |
| 
 | |
|         $kategori = Kategori::all();
 | |
|         $subkategori = SubKategori::all();
 | |
| 
 | |
|         return Inertia::render('admin/post/index_post', [
 | |
|             'posts' => $posts,
 | |
|             'kategori' => $kategori,
 | |
|             'subkategori' => $subkategori
 | |
|         ]);
 | |
|     }
 | |
| 
 | |
|     public function create()
 | |
|     {
 | |
|         $kategori = Kategori::all();
 | |
|         $subkategori = SubKategori::all();
 | |
| 
 | |
|         return Inertia::render('admin/post/add_post', [
 | |
|             'kategori' => Kategori::all(),
 | |
|             'subkategori' => SubKategori::all(),
 | |
|             'existingPosts' => Post::select('JudulPost', 'KategoriId')->get()
 | |
|         ]);
 | |
|     }
 | |
| 
 | |
|     public function store(PostRequest $request)
 | |
|     {
 | |
|         try {
 | |
|             $data = $request->validated();
 | |
| 
 | |
|             DB::beginTransaction();
 | |
| 
 | |
|             try {
 | |
|                 $data['IsPublish'] = $request->boolean('IsPublish');
 | |
| 
 | |
|                 if ($request->hasFile('ImagePost')) {
 | |
|                     $file = $request->file('ImagePost');
 | |
| 
 | |
|                     if (!$file->isValid()) {
 | |
|                         throw new \Exception('Invalid image file');
 | |
|                     }
 | |
| 
 | |
|                     Log::info('Uploading file to Minio', [
 | |
|                         'filename' => $file->getClientOriginalName(),
 | |
|                         'mimetype' => $file->getMimeType(),
 | |
|                         'size' => $file->getSize()
 | |
|                     ]);
 | |
| 
 | |
|                     $data['ImagePost'] = $file->store('images/posts', 's3');
 | |
| 
 | |
|                     Log::info('File uploaded to Minio', [
 | |
|                         'path' => $data['ImagePost'],
 | |
|                         'url' => Storage::url($data['ImagePost'])
 | |
|                     ]);
 | |
| 
 | |
|                     if ($data['ImagePost'] === false) {
 | |
|                         throw new \Exception('Failed to store image');
 | |
|                     }
 | |
|                 }
 | |
| 
 | |
|                 $post = Post::create($data);
 | |
|                 DB::commit();
 | |
| 
 | |
|                 return redirect()
 | |
|                     ->route('admin.post.index')
 | |
|                     ->with('success', 'Post berhasil ditambahkan');
 | |
| 
 | |
|             } catch (\Exception $e) {
 | |
|                 DB::rollBack();
 | |
| 
 | |
|                 if (isset($data['ImagePost']) && Storage::disk('s3')->exists($data['ImagePost'])) {
 | |
|                     Storage::disk('s3')->delete($data['ImagePost']);
 | |
|                 }
 | |
| 
 | |
|                 Log::error('Error creating post: ' . $e->getMessage());
 | |
| 
 | |
|                 return redirect()
 | |
|                     ->route('admin.post.index')
 | |
|                     ->with('error', 'Post gagal ditambahkan: ' . $e->getMessage());
 | |
|             }
 | |
| 
 | |
|         } catch (\Exception $e) {
 | |
|             Log::error('Validation error: ' . $e->getMessage());
 | |
| 
 | |
|             return redirect()
 | |
|                 ->route('admin.post.index')
 | |
|                 ->with('error', 'Validasi gagal: ' . $e->getMessage());
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public function edit(Post $post)
 | |
|     {
 | |
|         // Debug the image path
 | |
|         Log::info('Image path:', ['path' => $post->ImagePost]);
 | |
| 
 | |
|         return Inertia::render('admin/post/edit_post', [
 | |
|             'posting' => [
 | |
|                 ...$post->toArray(),
 | |
|                 'ImagePost' => $post->ImagePost ? Storage::url($post->ImagePost) : null,
 | |
|             ],
 | |
|             'kategori' => Kategori::all(),
 | |
|             'subkategori' => SubKategori::all(),
 | |
|             'existingPosts' => Post::where('PostId', '!=', $post->PostId)
 | |
|                 ->select('JudulPost', 'KategoriId')
 | |
|                 ->get()
 | |
|         ]);
 | |
|     }
 | |
| 
 | |
|     public function update(PostRequest $request, Post $post)
 | |
|     {
 | |
|         try {
 | |
|             DB::beginTransaction();
 | |
|             $data = $request->validated();
 | |
| 
 | |
|             // Update gambar hanya jika ada file baru yang diupload
 | |
|             if ($request->hasFile('ImagePost')) {
 | |
|                 // Hapus gambar lama jika ada
 | |
|                 if ($post->ImagePost && Storage::disk('s3')->exists($post->ImagePost)) {
 | |
|                     Log::info('Deleting old image from Minio', ['path' => $post->ImagePost]);
 | |
|                     Storage::disk('s3')->delete($post->ImagePost);
 | |
|                 }
 | |
| 
 | |
|                 $file = $request->file('ImagePost');
 | |
|                 Log::info('Uploading new image to Minio', [
 | |
|                     'filename' => $file->getClientOriginalName(),
 | |
|                     'mimetype' => $file->getMimeType(),
 | |
|                     'size' => $file->getSize()
 | |
|                 ]);
 | |
| 
 | |
|                 $data['ImagePost'] = $file->store('images/posts', 's3');
 | |
| 
 | |
|                 Log::info('New image uploaded to Minio', [
 | |
|                     'path' => $data['ImagePost'],
 | |
|                     'url' => Storage::url($data['ImagePost'])
 | |
|                 ]);
 | |
|             } else {
 | |
|                 // Jika tidak ada file baru, jangan update field ImagePost
 | |
|                 unset($data['ImagePost']);
 | |
|             }
 | |
| 
 | |
|             // Pastikan nilai is_publish dikonversi ke boolean
 | |
|             $data['IsPublish'] = filter_var($request->input('IsPublish'), FILTER_VALIDATE_BOOLEAN);
 | |
| 
 | |
|             $post->update($data);
 | |
|             DB::commit();
 | |
| 
 | |
|             return redirect()->route('admin.post.index')->with('success', 'Post berhasil diperbarui.');
 | |
|         } catch (\Exception $e) {
 | |
|             DB::rollBack();
 | |
|             Log::error('Error updating Post: ' . $e->getMessage());
 | |
|             Log::info('Form data received:', [
 | |
|                 'IsPublish' => $request->input('IsPublish'),
 | |
|                 'IsPublishType' => gettype($request->input('IsPublish')),
 | |
|                 'hasFile' => $request->hasFile('ImagePost')
 | |
|             ]);
 | |
|             return back()->with('error', 'Terjadi kesalahan saat memperbarui post.');
 | |
|         }
 | |
|     }
 | |
| 
 | |
| 
 | |
|     public function destroy(Post $post)
 | |
|     {
 | |
|         try {
 | |
|             Storage::disk('s3')->delete($post->ImagePost);
 | |
|             $post->delete();
 | |
| 
 | |
|             return redirect()->route('admin.post.index')->with('success', 'Post berhasil dihapus.');
 | |
|         } catch (\Exception $e) {
 | |
|             Log::error('Error deleting Post: ' . $e->getMessage());
 | |
|             return back()->with('error', 'Something went wrong.');
 | |
|         }
 | |
|     }
 | |
| }
 |