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();
}
}
}
}
}