SubscriptionController.php 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. <?php
  2. namespace Webkul\Shop\Http\Controllers;
  3. use Illuminate\Support\Facades\Event;
  4. use Webkul\Core\Repositories\SubscribersListRepository;
  5. class SubscriptionController extends Controller
  6. {
  7. /**
  8. * Create a new controller instance.
  9. *
  10. * @return void
  11. */
  12. public function __construct(protected SubscribersListRepository $subscriptionRepository) {}
  13. /**
  14. * Subscribes email to the email subscription list
  15. *
  16. * @return \Illuminate\Http\Response
  17. */
  18. public function store()
  19. {
  20. $this->validate(request(), [
  21. 'email' => 'email|required',
  22. ]);
  23. $email = request()->input('email');
  24. $subscription = $this->subscriptionRepository->findOneByField('email', $email);
  25. Event::dispatch('customer.subscription.before');
  26. if ($subscription) {
  27. session()->flash('error', trans('shop::app.subscription.already'));
  28. return redirect()->back();
  29. }
  30. $customer = auth()->user();
  31. $subscription = $this->subscriptionRepository->create([
  32. 'email' => $email,
  33. 'channel_id' => core()->getCurrentChannel()->id,
  34. 'is_subscribed' => 1,
  35. 'token' => uniqid(),
  36. 'customer_id' => $customer?->id,
  37. ]);
  38. if ($customer) {
  39. $customer->subscribed_to_news_letter = 1;
  40. $customer->save();
  41. }
  42. Event::dispatch('customer.subscription.after', $subscription);
  43. session()->flash('success', trans('shop::app.subscription.subscribe-success'));
  44. return redirect()->back();
  45. }
  46. /**
  47. * To unsubscribe from a the subscription list
  48. *
  49. * @param string $token
  50. * @return \Illuminate\Http\Response
  51. */
  52. public function destroy($token)
  53. {
  54. $this->subscriptionRepository->deleteWhere(['token' => $token]);
  55. session()->flash('success', trans('shop::app.subscription.unsubscribe-success'));
  56. return redirect()->route('shop.home.index');
  57. }
  58. }