authorizeResource(Settings::class); } /** * Show the form for editing the specified resource. * * @param \App\Models\Settings $settings * @return \Illuminate\Contracts\View\View */ public function edit(Settings $settings): \Illuminate\Contracts\View\View { return view('back::pages.settings.edit', [ 'settingsModel' => $settings ]); } /** * Update the specified resource in storage. * * @param \App\Http\Requests\Bo\Settings\UpdateSettingsRequest $request * @param \App\Models\Settings $settings * @return \Illuminate\Http\RedirectResponse */ public function update(UpdateSettingsRequest $request, Settings $settings): \Illuminate\Http\RedirectResponse { return DB::transaction(function () use ($request, $settings) { $data = $request->validated(); // * Assign parsed Web coupon objects Arr::set($data, 'web_coupons', collect(Arr::get($data, 'web_coupons'))->filter() ->map(fn (array $coupon) => $this->parseWebCoupon($coupon)) ->filter()->all()); $settings->fill($data); if ($settings->saveOrFail()) { return redirect() ->route('bo.settings.edit', $settings) ->with('success', trans( 'crud.messages.has_been_updated', ['model' => Str::singular(__('models.classes.settings'))] )); } return redirect() ->back() ->with('error', trans( 'crud.messages.cannot_be_updated', ['model' => Str::singular(__('models.classes.settings'))] )); }); } /** * Try to parse webCoupon * * @param array $coupon * @return \App\Lib\Discount|null */ private function parseWebCoupon(array $coupon): Discount | null { /** @var \Illuminate\Http\UploadedFile|string */ $picture = Arr::get($coupon, 'picture'); if (is_object($picture) and ($picture instanceof \Illuminate\Http\UploadedFile)) { $picture = FileStorageHelper::storeFile( new Settings(), $picture, true, 'web-coupon.' . $picture->extension() ); } try { return Discount::make( Arr::get($coupon, 'web_coupon_identifiant'), Arr::get($coupon, 'percentage'), Arr::get($coupon, 'face_value'), Arr::get($coupon, 'valid_on'), $picture, ); } catch (\RuntimeException | \TypeError) { return null; } } }