uploadFolder = "blog"; } public function index() { ResponseService::noAnyPermissionThenRedirect(['blog-list', 'blog-create', 'blog-delete', 'blog-update']); $languages = CachingService::getLanguages()->values(); return view('blog.index',compact('languages')); } public function create() { ResponseService::noPermissionThenRedirect('blog-create'); $categories = Category::all(); $languages = CachingService::getLanguages()->values(); return view('blog.create', compact('categories','languages')); } public function store(Request $request) { ResponseService::noPermissionThenSendJson('blog-create'); $request->validate([ 'title.1' => 'required', 'slug' => 'required', 'image' => 'required|mimes:jpg,jpeg,png|max:7168', ]); try { $data = [ 'title' => $request->input('title')[1], 'slug' => HelperService::generateUniqueSlug(new Blog(), $request->input('slug')), 'description' => $request->input('blog_description')[1] ?? '', 'tags' => implode(',', $request->input('tags')[1] ?? []), ]; if ($request->hasFile('image')) { $data['image'] = FileService::compressAndUpload($request->file('image'), $this->uploadFolder); } $blog = Blog::create($data); foreach ($request->input('languages', []) as $langId) { if ($langId != 1) { $translatedTitle = $request->input("title.$langId"); $translatedDesc = $request->input("blog_description.$langId"); $translatedTags = implode(',', $request->input("tags.$langId", [])); if ($translatedTitle || $translatedDesc || !empty($translatedTags)) { BlogTranslation::create([ 'blog_id' => $blog->id, 'language_id' => $langId, 'title' => $translatedTitle, 'description' => $translatedDesc, 'tags' => $translatedTags, ]); } } } $customBodyFields = [ 'image' => $blog->image, 'blog_id' => $blog->id, 'type' => 'blog' ]; redirect(route('blog.index'))->with([ 'success' => trans("Blog Added Successfully") ])->send(); // ResponseService::successRedirectResponse("Blog Added Successfully", route('blog.index'))->send(); if (ob_get_level() > 0) { ob_end_flush(); } flush(); if (function_exists('fastcgi_finish_request')) { fastcgi_finish_request(); (new SendFcmBatchJob( $blog->title, "New blog uploaded by admin. Check it out!", 'blog', $customBodyFields, true, [] ))->handle(); } else { register_shutdown_function(function () use ($blog, $customBodyFields) { try { (new SendFcmBatchJob( $blog->title, "New blog uploaded by admin. Check it out!", 'blog', $customBodyFields, true, [] ))->handle(); } catch (\Throwable $th) { Log::error('Background notification job failed: ' . $th->getMessage()); } }); } exit(); } catch (Throwable $th) { ResponseService::logErrorRedirect($th, "BlogController->store"); ResponseService::errorRedirectResponse(); } } public function show(Request $request) { ResponseService::noPermissionThenSendJson('blog-list'); $offset = $request->input('offset', 0); $limit = $request->input('limit', 10); $sort = $request->input('sort', 'id'); $order = $request->input('order', 'ASC'); $sql = Blog::with('category:id,name'); if (!empty($request->search)) { $sql = $sql->search($request->search); } $total = $sql->count(); $sql = $sql->sort($sort, $order)->skip($offset)->take($limit); $result = $sql->get(); $bulkData = array(); $bulkData['total'] = $total; $rows = array(); $no = 1; foreach ($result as $key => $row) { $operate = ''; if (Auth::user()->can('blog-update')) { $operate .= BootstrapTableService::editButton(route('blog.edit', $row->id)); } if (Auth::user()->can('blog-delete')) { $operate .= BootstrapTableService::deleteButton(route('blog.destroy', $row->id)); } $tempRow = $row->toArray(); $tempRow['no'] = $no++; $tempRow['created_at'] = Carbon::createFromFormat('Y-m-d H:i:s', $row->created_at)->format('d-m-y H:i:s'); $tempRow['updated_at'] = Carbon::createFromFormat('Y-m-d H:i:s', $row->updated_at)->format('d-m-y H:i:s'); $tempRow['operate'] = $operate; $tempRow['description'] = Str::limit(strip_tags($row->description), 200); $rows[] = $tempRow; } $bulkData['rows'] = $rows; return response()->json($bulkData); } public function edit($id) { ResponseService::noPermissionThenRedirect('blog-update'); $blog = Blog::with('translations')->findOrFail($id); $categories = Category::all(); $languages = CachingService::getLanguages()->values(); // Get translations as keyed array by language_id $translations = $blog->translations->keyBy('language_id'); return view('blog.edit', compact('blog', 'categories', 'languages', 'translations')); } public function update(Request $request, $id) { ResponseService::noPermissionThenSendJson('blog-update'); try { $request->validate([ 'title.1' => 'required', 'slug' => 'required', 'image' => 'nullable|mimes:jpg,jpeg,png|max:7168', ]); $blog = Blog::findOrFail($id); $data = [ 'title' => $request->input('title')[1], 'slug' => HelperService::generateUniqueSlug(new Blog(), $request->input('slug'), $blog->id), 'description' => $request->input('blog_description')[1] ?? '', 'tags' => implode(',', $request->input('tags')[1] ?? []), ]; if ($request->hasFile('image')) { $data['image'] = FileService::compressAndReplace($request->file('image'), $this->uploadFolder, $blog->getRawOriginal('image')); } $blog->update($data); foreach ($request->input('languages', []) as $langId) { if ($langId != 1) { $translatedTitle = $request->input("title.$langId"); $translatedDesc = $request->input("blog_description.$langId"); $translatedTags = $request->input("tags.$langId", []); if ($translatedTitle || $translatedDesc || !empty($translatedTags)) { BlogTranslation::updateOrCreate( ['blog_id' => $blog->id, 'language_id' => $langId], [ 'title' => $translatedTitle, 'description' => $translatedDesc, 'tags' => implode(',', $translatedTags), ] ); } } } ResponseService::successRedirectResponse("Blog Updated Successfully", route('blog.index')); } catch (Throwable $th) { ResponseService::logErrorRedirect($th); ResponseService::errorRedirectResponse('Something Went Wrong'); } } public function destroy($id) { ResponseService::noPermissionThenSendJson('blog-delete'); try { $blog = Blog::find($id); FileService::delete($blog->getRawOriginal('image')); $blog->delete(); ResponseService::successResponse('Blog delete successfully'); } catch (Throwable $th) { ResponseService::logErrorResponse($th); ResponseService::errorResponse('Something Went Wrong '); } } }