SiteBackground::all(), ]); } /** * Create new site backgrounds */ public function create(Request $request): \Illuminate\Http\RedirectResponse { $request->validate([ 'images' => 'required', 'date_start' => 'required', 'date_end' => 'required', ]); foreach($request->file('images') as $file) { // Initiating a database transaction in case something goes wrong. DB::beginTransaction(); try { $bg = SiteBackground::create(array_merge( $request->only(['date_start', 'date_end']), [ 'default' => (bool) $request->input('default', false) ] )); $resolutions = [1440, 1080, 720, 640]; foreach($resolutions as $resolution) { // /images/background/1-2560p.webp $targetPath = "/images/background/{$bg->id}-{$resolution}p.webp"; Image::read($file->getRealPath()) ->scaleDown(height: $resolution) ->encode(new WebpEncoder()) ->save(public_path($targetPath)); } } catch (\Exception $e) { DB::rollBack(); Log::error($e->getMessage()); return redirect()->back(); } // Committing the database transaction. DB::commit(); } cache()->forget('background'); return redirect()->back(); } public function update(Request $request): \Illuminate\Http\RedirectResponse { $request->validate([ 'id' => 'required|exists:site_backgrounds,id', 'date_start' => 'required', 'date_end' => 'required', ]); SiteBackground::where('id', $request->input('id'))->update(array_merge( $request->only(['date_start', 'date_end']), [ 'default' => (bool) $request->input('default', false) ] )); cache()->forget('background'); return redirect()->back(); } /** * Delete backround */ public function delete(Request $request): \Illuminate\Http\RedirectResponse { $id = $request->input('id'); // Initiating a database transaction in case something goes wrong. DB::beginTransaction(); $bg = SiteBackground::where('id', $id)->firstOrFail(); $bg->forceDelete(); $resolutions = [1440, 1080, 720, 640]; try { foreach($resolutions as $resolution) { $targetPath = "/images/background/{$id}-{$resolution}p.webp"; File::delete(public_path($targetPath)); } } catch (\Exception $e) { DB::rollBack(); Log::error($e->getMessage()); return redirect()->back(); } // Committing the database transaction. DB::commit(); cache()->forget('background'); return redirect()->back(); } }