public function run() { MessageStatus::create(['name' => 'Draft', 'code' => 'draft']); MessageStatus::create(['name' => 'Sent', 'code' => 'sent']); MessageStatus::create(['name' => 'Pending', 'code' => 'pending']); MessageStatus::create(['name' => 'Active', 'code' => 'active']); MessageStatus::create(['name' => 'Cancelled', 'code' => 'cancelled']); MessageStatus::create(['name' => 'Archived', 'code' => 'archived']); SubscriberList::create(['name' => 'Followers', 'code' => 'followers', 'description' => 'People who are interested in hearing about news.']); }
public function scopeIsArchived($query) { return $query->where('status_id', '!=', MessageStatus::getArchivedStatus()->id); }
public function repeatCampaign($campaign) { $duplicate = $campaign->duplicateCampaign(); $duplicate->is_delayed = true; $now = $campaign->freshTimestamp(); switch ($campaign->repeat_frequency) { case 'daily': $now = $now->addDay(); break; case 'weekly': $now = $now->addWeek(); break; case 'monthly': $now = $now->addMonth(); break; case 'yearly': $now = $now->addYear(); break; default: $now = $now->addYears(5); break; } $duplicate->launch_at = $now; $duplicate->status = MessageStatus::getPendingStatus(); $duplicate->count_repeat++; $duplicate->save(); return $duplicate; }
/** * This will send messages subscribers of active campaigns. */ public function processActiveMessages() { $hourAgo = new Carbon(); $hourAgo = $hourAgo->subMinutes(15); $activeId = MessageStatus::getActiveStatus()->id; $campaign = Message::where('status_id', $activeId)->get()->filter(function ($message) use($hourAgo) { return !$message->processed_at || $message->processed_at <= $hourAgo; })->shift(); if ($campaign) { $subscribers = $campaign->subscribers()->whereNull('sent_at'); if (($staggerCount = $campaign->getStaggerCount()) !== -1) { $subscribers->limit($staggerCount); } $subscribers = $subscribers->get(); $countSent = 0; foreach ($subscribers as $subscriber) { if (!$subscriber->confirmed_at || $subscriber->unsubscribed_at) { $campaign->subscribers()->remove($subscriber); continue; } $this->campaignManager->sendToSubscriber($campaign, $subscriber); $subscriber->pivot->sent_at = $subscriber->freshTimestamp(); $subscriber->pivot->save(); $campaign->count_sent++; $countSent++; } if ($campaign->count_sent >= $campaign->count_subscriber) { $campaign->status = MessageStatus::getSentStatus(); } $campaign->rebuildStats(); $campaign->processed_at = $campaign->freshTimestamp(); $campaign->save(); $this->logActivity(sprintf('Sent campaign "%s" to %s subscriber(s).', $campaign->name, $countSent)); } }