MOON
Server: Apache
System: Linux e2e-78-16.ssdcloudindia.net 3.10.0-1160.45.1.el7.x86_64 #1 SMP Wed Oct 13 17:20:51 UTC 2021 x86_64
User: imensosw (1005)
PHP: 7.4.33
Disabled: exec,passthru,shell_exec,system
Upload Files
File: /home/imensosw/www/mpl.imenso.co/app/Listeners/SendArtistPostsNewsPushNotification.php
<?php

namespace App\Listeners;

use App\Events\ArtistPostsNews;
use App\Models\PushNotification;

class SendArtistPostsNewsPushNotification
{
    /**
     * Create the event listener.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Handle the event.
     *
     * @param  ArtistPostsNews  $event
     * @return void
     */
    public function handle(ArtistPostsNews $event)
    {
        if (! $event->news_post->user->isArtist()) {
            return;
        }

        $title = 'New Artist News';
        $body = $event->news_post->user->getName().' has posted some news: "'.$event->news_post->post_title.'"';

        $tokens = [];

        foreach ($event->news_post->user->allFollowingFans() as $fan) {
            $tokens = [];

            $badge_count = $fan->newNotifications()->count();

            $corresponding_web_notification_id = 0;

            if ($fan->notifications->count() > 0) {
                $corresponding_web_notification_id = $fan->getLatestNotification()->id;
            }

            if ($fan->devices()->whereNotNull('fcm_token')->count() > 0) {
                foreach ($fan->devices()->whereNotNull('fcm_token')->get() as $device) {
                    if ($device->fcm_token != '') {
                        $tokens[] = $device->fcm_token;
                    }
                }

                if (is_array($tokens) && count($tokens) > 0) {
                    PushNotification::create()
                        ->withTitle($title)
                        ->withBody($body)
                        ->withBadgeCount($badge_count)
                        ->toTokens($tokens)
                        ->withData([
                            'page'                              => 'news-detail',
                            'id'                                => $event->news_post->id,
                            'corresponding_web_notification_id' => $corresponding_web_notification_id,
                        ])
                        ->send();
                }
            }
        }
    }
}