Back | Home
الـ Path الحالي: /home/picotech/domains/instantly.picotech.app/public_html/public/uploads/../../app/./Jobs
الملفات الموجودة في هذا الـ Path:
.
..
AfterGenerate.php
CampaignCreateChunk.php
CampaignCreateJob.php
CampaignCreateSuccessJob.php
ChunkImport.php
ChunkImportFail.php
ListBuilderQueue.php
مشاهدة ملف: CampaignCreateChunk.php
<?php
namespace App\Jobs;
use App\Models\Campaign;
use App\Models\Contact;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldBeUnique;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Str;
class CampaignCreateChunk implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
private $daily_sent_limit;
private $send_speed;
private $campaign_running_date;
private $user;
private $offset;
private $take_count = 5000;
private $message;
private $to_email;
private $from_email;
private $email_queue;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct($message, $dailySentLimit, $campaignRunningDate, $sendSpeed, $user, $offset)
{
$this->message = $message;
$this->daily_sent_limit = $dailySentLimit;
$this->campaign_running_date = $campaignRunningDate;
$this->send_speed = $sendSpeed;
$this->user = $user;
$this->offset = $offset;
$numberArray = json_decode($message->emails);
$this->to_email = $numberArray->to ?? [];
$this->from_email = $numberArray->from ?? [];
$this->email_queue = [];
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
$toEmails = array_slice($this->to_email, $this->offset, ($this->daily_sent_limit));
if ($toEmails) {
$generatedToEmails = [];
$contacts = Contact::where('customer_id', $this->user->id)->whereIn('email', $toEmails)->orderBy('email')->get()->unique('email');
foreach ($contacts as $contact) {
// $templates = $this->message->campaign_tempate()->first();
$templates = $this->message->body;
// dd($templates);
$templateValue=self::generateTemplate($contact,$templates,$this->message->campaign_id);
if (!in_array($contact->email, $generatedToEmails)) {
$this->email_queue[] = [
'domain_id' => $this->message->domain_id,
'message_id' => $this->message->id,
'campaign_id' => $this->message->campaign_id,
'from' => $this->from_email,
'to' => $contact->email,
'schedule_datetime' => null,
'body' => null,
'template' =>json_encode($templateValue),
'reply_to'=>$this->message->reply_to,
'from_name'=>$this->message->from_name,
'subject'=>$this->message->subject,
'created_at' => now(),
'updated_at' => now(),
];
$generatedToEmails[] = $contact->email;
}
}
foreach (array_chunk($this->email_queue, $this->take_count) as $key => $daily_email_queues) {
$final_email_queue = [];
foreach ($daily_email_queues as $queue) {
$final_email_queue[] = [
'random_ref_key' => Str::random(),
'domain_id' => $queue['domain_id'],
'message_id' => $queue['message_id'],
'campaign_id' => $queue['campaign_id'],
'from' => $queue['from'],
'to' => $queue['to'],
'schedule_datetime' => $this->campaign_running_date->addMinutes(ceil($this->send_speed))->toDateTimeString(),
'body' => $queue['body'],
'template' => $queue['template'],
'reply_to' => $queue['reply_to'],
'from_name' => $queue['from_name'],
'subject' => $queue['subject'],
'created_at' => now(),
'updated_at' => now(),
'type'=> 'sent',
];
}
if ($final_email_queue) {
$this->user->email_queues()->createMany($final_email_queue);
$this->user->message_logs()->createMany($final_email_queue);
}
}
}
}
public function failed(\Exception $exception)
{
Campaign::where('id',$this->message->campaign_id)->update(['import_fail_message'=>substr($exception->getMessage(), 0, 191)]);
}
public static function generateTemplate($contact,$templates,$campaign_id){
$campaign_description=$templates;
if ($contact->first_name) {
$campaign_description = str_replace('{first_name}', $contact->first_name, $campaign_description);
} else {
$campaign_description = str_replace('{first_name}', ' ', $campaign_description);
}
if ($contact->last_name) {
$campaign_description = str_replace('{last_name}', $contact->last_name, $campaign_description);
} else {
$campaign_description = str_replace('{last_name}', ' ', $campaign_description);
}
if ($contact->address) {
$campaign_description = str_replace('{address}', $contact->address, $campaign_description);
} else {
$campaign_description = str_replace('{address}', ' ', $campaign_description);
}
if ($contact->city) {
$campaign_description = str_replace('{city}', $contact->city, $campaign_description);
} else {
$campaign_description = str_replace('{city}', ' ', $campaign_description);
}
if ($contact->state) {
$campaign_description = str_replace('{state}', $contact->state, $campaign_description);
} else {
$campaign_description = str_replace('{state}', ' ', $campaign_description);
}
if ($contact->zip_code) {
$campaign_description = str_replace('{zip_code}', $contact->zip_code, $campaign_description);
} else {
$campaign_description = str_replace('{zip_code}', ' ', $campaign_description);
}
if ($contact->email) {
$campaign_description = str_replace('{email}', $contact->email, $campaign_description);
$unsub_link=route('unsubscribe',['email'=>$contact->email,'campaign'=>$campaign_id]);
} else {
$campaign_description = str_replace('{email}', ' ', $campaign_description);
$unsub_link='';
}
$templateValue = [];
$templateValue['campaign_title'] = '';
$templateValue['campaign_description'] = $campaign_description;
$templateValue['unsubscribe_link'] = $unsub_link;
return $templateValue;
}
}