예제 #1
0
 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.']);
 }
예제 #2
0
 public function scopeIsArchived($query)
 {
     return $query->where('status_id', '!=', MessageStatus::getArchivedStatus()->id);
 }
예제 #3
0
 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;
 }
예제 #4
0
 /**
  * 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));
     }
 }