findOne($newsletter_id); $interval_type = $newsletter->intervalType; $hour = (int) $newsletter->timeOfDay / 3600; $week_day = $newsletter->weekDay; $month_day = $newsletter->monthDay; $nth_week_day = ($newsletter->nthWeekDay === 'L') ? $newsletter->nthWeekDay : '#' . $newsletter->nthWeekDay; switch($interval_type) { case 'immediately': $cron = '* * * * *'; break; case 'immediate': //daily $cron = sprintf('0 %s * * *', $hour); break; case 'weekly': $cron = sprintf('0 %s * * %s', $hour, $week_day); break; case 'monthly': $cron = sprintf('0 %s %s * *', $hour, $month_day); break; case 'nthWeekDay': $cron = sprintf('0 %s ? * %s%s', $hour, $week_day, $nth_week_day); break; } $option_field = NewsletterOptionField::where('name', 'schedule') ->findOne(); $relation = NewsletterOption::create(); $relation->newsletter_id = $newsletter->id; $relation->option_field_id = $option_field->id; $relation->value = $cron; $relation->save(); } static function welcomeForSegmentSubscription( array $subscriber, array $segments ) { $newsletters = self::getWelcomeNewsletters(); if(!count($newsletters)) return; foreach($newsletters as $newsletter) { if($newsletter['event'] === 'segment' && in_array($newsletter['segment'], $segments) ) { self::createSendingQueueEntry($newsletter, $subscriber); } } } static function welcomeForNewWordpressUserRegistration( array $subscriber, array $wp_user ) { $newsletters = self::getWelcomeNewsletters(); if(!count($newsletters)) return; foreach($newsletters as $newsletter) { if($newsletter['event'] === 'user' && in_array($newsletter['role'], $wp_user['roles']) ) { self::createSendingQueueEntry($newsletter, $subscriber); } } } private static function getWelcomeNewsletters() { return Newsletter::where('type', 'welcome') ->filter('filterWithOptions') ->findArray(); } private static function createSendingQueueEntry($newsletter, $subscriber) { $queue = SendingQueue::create(); $queue->newsletter_id = $newsletter['id']; $queue->subscribers = serialize( array( 'to_process' => array($subscriber['id']) ) ); $queue->count_total = $queue->count_to_process = 1; $after_time_type = $newsletter['afterTimeType']; $after_time_number = $newsletter['afterTimeNumber']; $scheduled_at = null; switch($after_time_type) { case 'hours': $scheduled_at = Carbon::now() ->addHours($after_time_number); break; case 'days': $scheduled_at = Carbon::now() ->addDays($after_time_number); break; case 'weeks': $scheduled_at = Carbon::now() ->addWeeks($after_time_number); break; } if($scheduled_at) { $queue->status = 'scheduled'; $queue->scheduled_at = $scheduled_at; } $queue->save(); } }