EscolaLMS/MailerLite

View on GitHub
src/Providers/EventServiceProvider.php

Summary

Maintainability
A
1 hr
Test Coverage
<?php

namespace EscolaLms\MailerLite\Providers;

use EscolaLms\Auth\Events\AccountBlocked;
use EscolaLms\Auth\Events\AccountConfirmed;
use EscolaLms\Cart\Events\AbandonedCartEvent;
use EscolaLms\Cart\Events\OrderCreated;
use EscolaLms\Cart\Events\ProductBought;
use EscolaLms\MailerLite\Enum\GroupNamesEnum;
use EscolaLms\MailerLite\Enum\PackageStatusEnum;
use EscolaLms\MailerLite\Services\Contracts\MailerLiteServiceContract;
use Illuminate\Support\Facades\Config;
use Illuminate\Support\Facades\Event;
use Illuminate\Support\ServiceProvider;

class EventServiceProvider extends ServiceProvider
{
    public function boot()
    {
        if (Config::get(SettingsServiceProvider::CONFIG_KEY . '.package_status', PackageStatusEnum::ENABLED) !== PackageStatusEnum::ENABLED) {
            return;
        }

        Event::listen(AccountConfirmed::class, function ($event) {
            /**
             * >>> event(new EscolaLms\Auth\Events\AccountConfirmed(App\Models\User::find(18)));
             */
            $newsletterKey = Config::get(SettingsServiceProvider::CONFIG_KEY . '.newsletter_field_key');
            $user = $event->user;
            if ($user->{$newsletterKey}) {
                app(MailerLiteServiceContract::class)->addSubscriberToGroup(
                    Config::get(SettingsServiceProvider::CONFIG_KEY . '.group_registered_group', GroupNamesEnum::REGISTERED_USERS),
                    $event->user
                );
            }
        });

        Event::listen(ProductBought::class, function ($event) {
            /**
             * >>> event(new EscolaLms\Cart\Events\ProductBought(EscolaLms\Cart\Models\Product::find(1), EscolaLms\Vouchers\Models\Order::find(1), EscolaLms\Core\Models\User::find(18)));
             */
            app(MailerLiteServiceContract::class)->addSubscriberToGroup(
                Config::get(SettingsServiceProvider::CONFIG_KEY . '.group_order_paid', GroupNamesEnum::ORDER_PAID),
                $event->getUser()
            );
        });

        Event::listen(AccountBlocked::class, function ($event) {
            /**
             * >>> event(new EscolaLms\Auth\Events\AccountBlocked(App\Models\User::find(18)));
             */
            app(MailerLiteServiceContract::class)->deleteSubscriber($event->getUser());
        });

        Event::listen(AbandonedCartEvent::class, function ($event) {
            /**
             * >>> event(new EscolaLms\Cart\Events\AbandonedCartEvent(EscolaLms\Cart\Models\Cart::find(1)));
             */
            app(MailerLiteServiceContract::class)->addSubscriberToGroup(
                Config::get(SettingsServiceProvider::CONFIG_KEY . '.group_left_cart', GroupNamesEnum::LEFT_CART),
                $event->getUser()
            );
        });

        Event::listen(OrderCreated::class, function ($event) {
            /**
             * >>> event(new EscolaLms\Cart\Events\OrderCreated(EscolaLms\Cart\Models\Order::find(1)));
             */
            app(MailerLiteServiceContract::class)->removeSubscriberFromGroup(
                Config::get(SettingsServiceProvider::CONFIG_KEY . '.group_left_cart', GroupNamesEnum::LEFT_CART),
                $event->getUser()
            );
        });
    }
}