authorizeResource(Settings::class); } /** * Show the form for editing the specified resource. */ public function edit(Settings $settings): View { /** @var view-string $view */ $view = 'back::pages.settings.edit'; return view($view, [ 'settingsModel' => $settings, ]); } /** * Update the specified resource in storage. */ public function update(UpdateSettingsRequest $request, Settings $settings): 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): ?\App\Lib\Discount => $this->parseWebCoupon($coupon)) ->filter()->all()); $settings->fill($data); if ($settings->saveOrFail()) { return to_route('bo.settings.edit', $settings) ->with('success', trans( 'crud.messages.has_been_updated', ['model' => Str::singular(__('models.classes.settings'))] )); } return back() ->with('error', trans( 'crud.messages.cannot_be_updated', ['model' => Str::singular(__('models.classes.settings'))] )); }); } /** * Try to parse webCoupon * * @param array $coupon */ private function parseWebCoupon(array $coupon): ?Discount { /** @var UploadedFile|string */ $picture = Arr::get($coupon, 'picture'); if ($picture instanceof UploadedFile) { $picture = FileStorageHelper::storeFile( new Settings(), $picture, true, 'web-coupon.' . $picture->extension() ); } try { return Discount::make( $picture, Arr::get($coupon, 'valid_on'), Arr::get($coupon, 'face_value'), Arr::get($coupon, 'percentage'), Arr::get($coupon, 'web_coupon_identifiant'), ); } catch (RuntimeException | TypeError) { return null; } } }