/** * 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)); } }
public function up() { Schema::table('responsiv_campaign_messages', function ($table) { $table->string('stagger_type')->nullable(); $table->integer('stagger_count')->nullable(); }); MessageModel::where('is_staggered', true)->update(['stagger_type' => 'time']); }