HEX
Server: LiteSpeed
System: Linux s1049.use1.mysecurecloudhost.com 4.18.0-477.27.2.lve.el8.x86_64 #1 SMP Wed Oct 11 12:32:56 UTC 2023 x86_64
User: xedaptot (3356)
PHP: 8.3.31
Disabled: NONE
Upload Files
File: /home/xedaptot/be.naniguide.com/app/ActivityLog/ActivityRegistry.php
<?php

namespace App\ActivityLog;

use App\ActivityLog\Activities;

class ActivityRegistry
{
    private static array $map = [
        // Campaign
        'campaign.created' => Activities\CampaignCreated::class,
        'campaign.updated' => Activities\CampaignUpdated::class,
        'campaign.deleted' => Activities\CampaignDeleted::class,
        'campaign.started' => Activities\CampaignStarted::class,
        'campaign.paused' => Activities\CampaignPaused::class,
        'campaign.restarted' => Activities\CampaignRestarted::class,
        'campaign.sent' => Activities\CampaignSent::class,

        // Subscriber
        'subscriber.created' => Activities\SubscriberCreated::class,
        'subscriber.updated' => Activities\SubscriberUpdated::class,
        'subscriber.deleted' => Activities\SubscriberDeleted::class,
        'subscriber.subscribed' => Activities\SubscriberSubscribed::class,
        'subscriber.unsubscribed' => Activities\SubscriberUnsubscribed::class,

        // List
        'list.created' => Activities\ListCreated::class,
        'list.updated' => Activities\ListUpdated::class,
        'list.deleted' => Activities\ListDeleted::class,
        'list.copied' => Activities\ListCopied::class,
        'list.moved' => Activities\ListMoved::class,
        'list.import_started' => Activities\ListImportStarted::class,
        'list.import_success' => Activities\ListImportSuccess::class,
        'list.import_max_error' => Activities\ListImportMaxError::class,
        'list.export_started' => Activities\ListExportStarted::class,
        'list.export_success' => Activities\ListExportSuccess::class,

        // Segment
        'segment.created' => Activities\SegmentCreated::class,
        'segment.updated' => Activities\SegmentUpdated::class,
        'segment.deleted' => Activities\SegmentDeleted::class,

        // Page
        'page.updated' => Activities\PageUpdated::class,

        // Automation
        'automation.created' => Activities\AutomationCreated::class,
        'automation.updated' => Activities\AutomationUpdated::class,
        'automation.deleted' => Activities\AutomationDeleted::class,
        'automation.started' => Activities\AutomationStarted::class,
        'automation.triggered' => Activities\AutomationTriggered::class,

        // Sending Server
        'sending_server.created' => Activities\SendingServerCreated::class,
        'sending_server.updated' => Activities\SendingServerUpdated::class,
        'sending_server.deleted' => Activities\SendingServerDeleted::class,

        // Sending Domain
        'sending_domain.created' => Activities\SendingDomainCreated::class,
        'sending_domain.updated' => Activities\SendingDomainUpdated::class,
        'sending_domain.deleted' => Activities\SendingDomainDeleted::class,

        // Email Verification Server
        'email_verification_server.created' => Activities\EmailVerificationServerCreated::class,
        'email_verification_server.updated' => Activities\EmailVerificationServerUpdated::class,
        'email_verification_server.deleted' => Activities\EmailVerificationServerDeleted::class,

        // Subscription events (every subscription.* type dispatches to SubscriptionEvent,
        // which switches on $log->type to pick the render. Writers emit these directly via
        // ActivityLog::create() rather than through BaseActivity::record to keep the
        // SubscriptionManagementService::log() signature unchanged.)
        'subscription.select_plan'            => Activities\SubscriptionEvent::class,
        'subscription.pay_success'            => Activities\SubscriptionEvent::class,
        'subscription.pay_failed'             => Activities\SubscriptionEvent::class,
        'subscription.admin_approve'          => Activities\SubscriptionEvent::class,
        'subscription.admin_reject'           => Activities\SubscriptionEvent::class,
        'subscription.renew_order'            => Activities\SubscriptionEvent::class,
        'subscription.change_plan'            => Activities\SubscriptionEvent::class,
        'subscription.cancel_order'           => Activities\SubscriptionEvent::class,
        'subscription.cancelled'              => Activities\SubscriptionEvent::class,
        'subscription.disable_recurring'      => Activities\SubscriptionEvent::class,
        'subscription.enable_recurring'       => Activities\SubscriptionEvent::class,
        'subscription.ended'                  => Activities\SubscriptionEvent::class,
        'subscription.terminated'             => Activities\SubscriptionEvent::class,
        'subscription.remote_sync'            => Activities\SubscriptionEvent::class,
        'subscription.remote_change_plan'     => Activities\SubscriptionEvent::class,
        'subscription.remote_cancel'          => Activities\SubscriptionEvent::class,
        'subscription.remote_activate'        => Activities\SubscriptionEvent::class,
        'subscription.remote_payment_failed'  => Activities\SubscriptionEvent::class,
        'subscription.credit_modified'        => Activities\SubscriptionEvent::class,
    ];

    /**
     * Resolve a type string to its activity class.
     */
    public static function resolve(string $type): ?string
    {
        return self::$map[$type] ?? null;
    }

    /**
     * Get all registered type strings.
     */
    public static function allTypes(): array
    {
        return array_keys(self::$map);
    }

    /**
     * Get unique subject types for filter dropdown.
     */
    public static function allSubjectTypes(): array
    {
        return array_values(array_unique(array_map(
            fn ($class) => $class::subjectType(),
            self::$map
        )));
    }
}