Viewing file: CampaignController.php (33.3 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
namespace App\Http\Controllers\Customer;
use App\Http\Controllers\Controller; use App\Jobs\CampaignCreateChunk; use App\Jobs\CampaignCreateJob; use App\Models\Campaign; use App\Models\CampaignTemplate; use App\Models\Contact; use App\Models\EmailQueue; use App\Models\EmailTemplate; use App\Models\Message; use App\Models\Unsubscribe; use Illuminate\Http\Request; use Illuminate\Support\Carbon; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Log; use Illuminate\Support\Str;
class CampaignController extends Controller { public function index() { return view('customer.campaign.index'); }
public function getAll() { $campaings = auth('customer')->user()->campaings()->withCount(['email_queue','total_processed'])->orderByDesc('id'); return datatables()->of($campaings) ->addColumn('title', function ($q) { $title = "<a href='" . route('customer.campaign.edit', [$q]) . "'>$q->title</a>"; if ($q->status == 'running') { $title .= '(' . $q->total_processed_count . '/' . $q->email_queue_count . ')'; } return $title; }) ->addColumn('start_date', function ($q) { if ($q->start_date) { return $q->start_date->format('Y-m-d'); } }) ->addColumn('end_date', function ($q) { if ($q->end_date) { return $q->end_date->format('Y-m-d'); } }) ->addColumn('status', function ($q) { if ($q->import_fail_message) { return ' <button type="button" class="btn light btn-sm btn-danger">Import Failed</button> <br>' . $q->import_fail_message; }
if ($q->status == 'running') { if($q->total_processed_count>=$q->email_queue_count){ return ' <button type="button" class="btn light btn-sm btn-primary">Completed</button>'; } return ' <button type="button" class="btn light btn-sm btn-success dropdown-toggle" data-toggle="dropdown" aria-expanded="false"> Running </button> <div class="dropdown-menu" x-placement="bottom-start" style="position: absolute; will-change: transform; top: 0px; left: 0px; transform: translate3d(0px, 38px, 0px);"> <button data-message="Are you sure, you want to change this campaign status?" data-action=' . route('customer.campaign.status', ['id' => $q->id, 'status' => 'paused']) . ' data-input={"_method":"post"} data-toggle="modal" data-target="#modal-confirm" class="dropdown-item"> Pause </button> </div>'; } elseif ($q->status == 'failed') { return ' <button type="button" class="btn light btn-sm btn-danger">Failed</button> <br>' . $q->import_fail_message; } elseif ($q->status == 'importing') { return "<span> <i class=\"fas fa-spinner fa-pulse\"></i> importing</span>"; } elseif ($q->status == 'creating') { return "<span class='btn light btn-xs btn-info'>Creating</span>"; } else { return '<button type="button" class="btn light btn-sm btn-warning dropdown-toggle" data-toggle="dropdown" aria-expanded="false"> Pause </button> <div class="dropdown-menu" x-placement="bottom-start" style="position: absolute; will-change: transform; top: 0px; left: 0px; transform: translate3d(0px, 38px, 0px);"> <button data-message="Are you sure, you want to change this campaign status?" data-action=' . route('customer.campaign.status', ['id' => $q->id, 'status' => 'running']) . ' data-input={"_method":"post"} data-toggle="modal" data-target="#modal-confirm" class="dropdown-item"> Running </button> </div>'; } })->addColumn('action', function ($q) {
$html = '<button class="btn btn-sm btn-danger" data-message="Are you sure, you want to delete this campaign? <br> <br> <small>N.B: This will delete all messages including sent and queue related to this campaign.</small>" data-action=' . route('customer.campaign.destroy', [$q]) . ' data-input={"_method":"delete"} data-toggle="modal" data-target="#modal-confirm">Delete</button> ' . "<a class='btn btn-sm btn-info' href='" . route('customer.campaign.edit', [$q->id]) . "'>Edit</a>"; $statistics = "<a class='btn btn-sm btn-info' target='_blank' href='" . route('customer.campaign.statistic', [$q->id]) . "'>Statistics</a> ";
if ($q->status == 'running') { $html = $statistics . $html; } return $html; })->rawColumns(['title', 'action', 'status'])->toJson(); }
public function show() { }
public function edit($id) { $customer = auth('customer')->user(); $data['campaign'] = $campaign = $customer->campaings()->where('id', $id)->firstOrFail(); $data['groups'] = $customer->groups()->get(); $data['senders'] = $customer->senders()->get(); $data['currentPlan'] = $customer->plan()->first(); $data['contacts'] = $customer->contacts()->get(); $data['useEmail'] = $customer->message_logs()->count(); $tempate = $customer->campaign_template()->where('id', $campaign->template_id)->first(); if (isset($tempate->value) && $tempate->value) { $data['template'] = $tempate; $data['campaign_template'] = json_decode($tempate->value); } return view('customer.campaign.edit', $data); }
public function create() {
$customer = auth('customer')->user();
$data['templates'] = EmailTemplate::where('user_id', $customer->id)->where('status', 'active')->get(); $data['groups'] = $customer->groups()->withCount('contacts')->get(); $data['from_groups'] = $customer->from_groups;
return view('customer.campaign.create', $data); }
public function update(Campaign $campaign, Request $request) { if ($request->update_type == 'title') { if (!$request->title) { return redirect()->back()->with('fail', 'Invalid Title'); } else { $campaign->update(['title' => $request->title]); return redirect()->back()->with('success', trans('Campaign title update successfully')); } } elseif ($request->update_type == 'from') { if (!$request->from_email || !$request->from_email_name) { return redirect()->back()->with('fail', 'Invalid from data'); } else { $campaign->update(['from_email' => $request->from_email, 'from_email_name' => $request->from_email_name, 'reply_to_email' => $request->reply_to_email ?: $request->from_email, 'customize_to_email' => $request->customize_to_email]); return redirect()->back()->with('success', trans('Campaign from update successfully')); } } elseif ($request->update_type == 'to') {
if (!$request->group_id) { return redirect()->back()->with('fail', 'Campaign group is required'); } $customer = auth('customer')->user(); $contactIds = $customer->contact_groups()->whereIn('group_id', $request->group_id)->pluck('contact_id'); $to_emails = Contact::whereIn('id', $contactIds)->pluck('email'); $group_id = json_encode($request->group_id); $campaign->update(['to_email' => json_encode($to_emails), 'group_id' => $group_id]); return redirect()->back()->with('success', trans('Campaign to email update successfully'));
} elseif ($request->update_type == 'subject') { if (!$request->subject_line) { return redirect()->back()->with('fail', 'Campaign subject is required'); } else { $campaign->update(['subject_line' => $request->subject_line, 'preview_text' => $request->preview_text]); return redirect()->back()->with('success', trans('Campaign subject update successfully')); } } elseif ($request->update_type == 'date_time') { if (!$request->starting_date || !$request->ending_date || !$request->starting_time || !$request->ending_time) { return redirect()->back()->with('fail', 'Invalid Date Time'); } else { $campaign->update(['start_date' => $request->starting_date, 'end_date' => $request->ending_date, 'start_time' => $request->starting_time, 'end_time' => $request->ending_time]); return redirect()->back()->with('success', trans('Campaign date time update successfully')); }
} }
public function getTemplate(Request $request) { $customer = auth('customer')->user(); $template = EmailTemplate::where('id', $request->template_id)->where('user_id', $customer->id)->first();
return response()->json(['status' => 'success', 'data' => $template->body]); }
public function store(Request $request) { if (config("app.demo")) { return redirect()->back()->withErrors(['message' => trans('admin.app_demo_message')]); } $request->validate([ 'title' => 'required', ]); $customer = auth('customer')->user(); $campaign = new Campaign(); $campaign->title = $request->title; $campaign->customer_id = $customer->id; $campaign->save(); return redirect()->route('customer.campaign.edit', [$campaign->id])->with('success', trans('Campaign created successfully')); }
public function campaign_template_send(Request $request) {
$request->validate([ 'campaign_id' => 'required', ]); $customer = auth('customer')->user(); $campaign = $customer->campaings()->where('id', $request->campaign_id)->firstOrFail(); if (!$campaign->title || !$campaign->from_email || !$campaign->to_email || !$campaign->start_date || !$campaign->end_date || !$campaign->start_time || !$campaign->end_time || !$campaign->template_id || !$campaign->from_email_name || !$campaign->subject_line || $campaign->status == 'running') { Log::info("campaign required fields are missing"); abort(404); } $domain = $customer->domains()->where('name', getDomainFromEmail($campaign->from_email))->first(); $to = json_decode($campaign->to_email); $current_plan = auth('customer')->user()->plan; if (!$current_plan) return back()->with('fail', 'Customer doesn\'t have any plan right now');
//subtracting one email TODO:: will need to count text and sub that $pre_available_emails = $current_plan->available_emails; $new_available_email = $pre_available_emails - count($to);
if ($new_available_email < 0) return redirect()->back()->with('fail', 'Doesn\'t have enough email');
$fromEmail = $campaign->from_email; $unSubscribeEmails = Unsubscribe::pluck('email')->toArray();
$totalToEmailCount = count($to); $allToEmails = []; for ($i = 0; $i < count($to); $i++) { if (!in_array(trim($to[$i]), $unSubscribeEmails)) { $allToEmails[] = trim($to[$i]); } } setActivity(auth('customer')->user()->id, 'add', 'campaign', $campaign->id, 'Campaign has been created successfully');
$startDate = (new Carbon($campaign->start_date))->subDay(); $endDate = new Carbon($campaign->end_date); $startTime = new Carbon($campaign->start_time); $endTime = new Carbon($campaign->end_time); $difference_date = $startDate->diffInDays($endDate);
$newMessage = new Message(); $newMessage->customer_id = $customer->id; $newMessage->emails = json_encode(['from' => $fromEmail, 'to' => $allToEmails]); $newMessage->campaign_id = $campaign->id; $newMessage->reply_to = $campaign->reply_to_email; $newMessage->from_name = $campaign->from_email_name; $newMessage->subject = $campaign->subject_line; $newMessage->template_id = $campaign->template_id; $newMessage->type = 'sent'; $newMessage->read = 'no'; $newMessage->domain_id = $domain->id??null; $newMessage->save();
CampaignCreateJob::dispatch($fromEmail, $allToEmails, $campaign, $newMessage, $totalToEmailCount, $difference_date, $startDate, $startTime, auth('customer',)->user());
$current_plan->available_emails = $new_available_email; $current_plan->save(); return redirect()->route('customer.campaign.index')->with('success', trans('Campaign scheduled successfully')); }
public function destroy(Campaign $campaign) { if (config("app.demo")) { return redirect()->back()->withErrors(['message' => trans('admin.app_demo_message')]); } if ($campaign->email_queue) { $campaign->email_queue()->delete(); } if ($campaign->messages) { $campaign->messages()->delete(); }
setActivity(auth('customer')->user()->id, 'delete', 'campaign', $campaign->id, 'Campaign has been deleted successfully');
$campaign->delete();
return redirect()->route('customer.campaign.index')->with('success', 'Congratulations ! Campaign successfully deleted'); }
public function status(Request $request) { $request->validate([ 'status' => 'required|in:running,paused', ]);
$customer = auth('customer')->user(); $campaign = Campaign::where('customer_id', $customer->id)->where('id', $request->id)->firstOrFail(); $campaign->status = $request->status; $campaign->save();
EmailQueue::where('campaign_id', $campaign->id)->where('status', $request->status == 'paused' ? 'running' : 'paused')->update(['status' => $request->status]);
return redirect()->route('customer.campaign.index')->with('success', 'Congratulations ! Campaign status updated');
}
public function statistic($id) { $customer = auth('customer')->user(); $campaign = Campaign::where('customer_id', $customer->id)->where('id', $id)->firstOrFail(); $totalMessage = $customer->message_logs()->where('campaign_id', $campaign->id)->count();
$data['total_opened'] = $total_opened = $customer->message_logs()->where('campaign_id', $campaign->id)->select(DB::raw('COUNT(*) as count'), DB::raw('max(updated_at) as updated_at'))->where('is_open', 'yes')->groupBy('is_open')->get(); $data['total_clicked'] = $total_clicked = $customer->message_logs()->where('campaign_id', $campaign->id)->where('is_clicked', 'yes')->count(); $data['total_delivered'] = $total_delivered = $customer->message_logs()->where('campaign_id', $campaign->id)->where('status', 'succeed')->count(); $data['total_bounced'] = $total_bounced = $customer->message_logs()->where('campaign_id', $campaign->id)->where('is_bounced', 'yes')->count(); $data['total_unsubscribed'] = Unsubscribe::where('campaign_id', $campaign->id)->count();
$clicked_report = $customer->message_logs()->where('campaign_id', $campaign->id)->select(DB::raw("HOUR(updated_at) as hourNo,COUNT(*) as count")) ->where('is_clicked', 'yes') ->whereDate('updated_at', now()) ->orderBy("updated_at") ->groupBy(DB::raw("hour(updated_at)")) ->get() ->mapToGroups(function ($item, $key) { return ["" . $item->hourNo => $item]; }); $generatedClickedArray = []; for ($i = 0; $i < 24; $i++) { $generatedClickedArray[] = [$i, isset($clicked_report[$i]) ? $clicked_report[$i][0]->count : 0]; }
$open_report = $customer->message_logs()->where('campaign_id', $campaign->id)->select(DB::raw("HOUR(updated_at) as hourNo,COUNT(*) as count")) ->where('is_open', 'yes') ->whereDate('updated_at', now()) ->orderBy("updated_at") ->groupBy(DB::raw("hour(updated_at)")) ->get() ->mapToGroups(function ($item, $key) { return ["" . $item->hourNo => $item]; }); $generatedOpenArray = []; for ($i = 0; $i < 24; $i++) { $generatedOpenArray[] = [$i, isset($open_report[$i]) ? $open_report[$i][0]->count : 0]; } $data['clicked_report'] = $generatedClickedArray; $data['open_report'] = $generatedOpenArray;
if (isset($total_opened[0]->count)) { $data['open_ratio'] = round((($total_opened[0]->count * 100) / $totalMessage), 2); $data['clicked_ratio'] = round((($total_clicked * 100) / $totalMessage), 2); }
return view('customer.campaign.statistic', $data); }
public function campaign_template_show(Request $request) { if (!$request->template) { abort(404); } $customer = auth()->user(); $data ['template'] = $request->template; $template = $customer->campaign_template()->where('template', $request->template)->first(); $data['campaign']=$campaign = $customer->campaings()->where('id', $request->campaign_id)->firstOrFail(); if (isset($template->id)) { $campaign->update(['template_id' => $template->id]); }
if (isset($template->value)) { $data ['campaign_template'] = json_decode($template->value); }
return view('customer.campaign.template', $data); }
public function campaign_template_show_store(Request $request) { $request['unsubscribe_link']=urldecode($request->unsubscribe_link);
$customer = auth('customer')->user(); $template = $customer->campaign_template()->where('template', $request->template_no)->first();
if (isset($template->value)) { $templateDta = json_decode($template->value); }
if ($request->template_no == 'one') { if ($request->hasFile('logo_image')) { $file = $request->file('logo_image'); $imageName = time() . '_1' . '.' . $file->getClientOriginalExtension(); $file->move(public_path('/uploads'), $imageName); $request['logo_img'] = $imageName; } else { $request['logo_img'] = isset($templateDta->logo_img) && $templateDta->logo_img ? $templateDta->logo_img : ''; } if ($request->hasFile('product_image_upload')) { $file = $request->file('product_image_upload'); $imageOneName = time() . '_2' . '.' . $file->getClientOriginalExtension(); $file->move(public_path('/uploads'), $imageOneName); $request['product_img_upload'] = $imageOneName; } else { $request['product_img_upload'] = isset($templateDta->product_img_upload) && $templateDta->product_img_upload ? $templateDta->product_img_upload : ''; } if ($template) { $template->template = 'one'; $template->value = json_encode($request->only('logo_img', 'logo_url', 'heading', 'product_image_url', 'campaign_title', 'campaign_description', 'company_name', 'email_description', 'unsubscribe_link', 'product_img_upload', 'campaign_call_to_action')); $template->customer_id = auth()->user()->id; $template->save(); } else { $template = new CampaignTemplate(); $template->template = 'one'; $template->value = json_encode($request->only('logo_img', 'logo_url', 'heading', 'product_image_url', 'campaign_title', 'campaign_description', 'company_name', 'email_description', 'unsubscribe_link', 'product_img_upload', 'campaign_call_to_action')); $template->customer_id = auth()->user()->id; $template->save(); }
} elseif ($request->template_no == 'two' || $request->template_no == 'three') { if ($request->hasFile('logo_image')) { $file = $request->file('logo_image'); $imageName = time() . '_1' . '.' . $file->getClientOriginalExtension(); $file->move(public_path('/uploads'), $imageName); $request['logo_img'] = $imageName; } else { $request['logo_img'] = isset($templateDta->logo_img) && $templateDta->logo_img ? $templateDta->logo_img : ''; } if ($request->hasFile('product_image_upload')) { $file = $request->file('product_image_upload'); $imageOneName = time() . '_2' . '.' . $file->getClientOriginalExtension(); $file->move(public_path('/uploads'), $imageOneName); $request['product_img_upload'] = $imageOneName; } else { $request['product_img_upload'] = isset($templateDta->product_img_upload) && $templateDta->product_img_upload ? $templateDta->product_img_upload : ''; }
if ($request->hasFile('first_product_image_upload')) { $file = $request->file('first_product_image_upload'); $imagetwoName = time() . '_3' . '.' . $file->getClientOriginalExtension(); $file->move(public_path('/uploads'), $imagetwoName); $request['first_product_img_upload'] = $imagetwoName; } else { $request['first_product_img_upload'] = isset($templateDta->first_product_img_upload) && $templateDta->first_product_img_upload ? $templateDta->first_product_img_upload : ''; }
if ($request->hasFile('sec_product_img_upload')) { $file = $request->file('sec_product_img_upload'); $imagethreeName = time() . '_4' . '.' . $file->getClientOriginalExtension(); $file->move(public_path('/uploads'), $imagethreeName); $request['sec_product_img_upload'] = $imagethreeName; } else { $request['sec_product_img_upload'] = isset($templateDta->sec_product_img_upload) && $templateDta->sec_product_img_upload ? $templateDta->sec_product_img_upload : ''; }
if ($template) { $template->template = $request->template_no; $template->value = json_encode($request->only('logo_img', 'logo_url', 'heading', 'product_image_url', 'campaign_title', 'campaign_description', 'company_name', 'email_description', 'unsubscribe_link', 'product_img_upload', 'campaign_call_to_action', 'first_product_img_upload', 'sec_product_img_upload', 'sec_product_image_url', 'first_product_image_url')); $template->customer_id = auth()->user()->id; $template->save(); } else { $template = new CampaignTemplate(); $template->template = $request->template_no; $template->value = json_encode($request->only('logo_img', 'logo_url', 'heading', 'product_image_url', 'campaign_title', 'campaign_description', 'company_name', 'email_description', 'unsubscribe_link', 'product_img_upload', 'campaign_call_to_action', 'first_product_img_upload', 'sec_product_img_upload', 'sec_product_image_url', 'first_product_image_url')); $template->customer_id = auth()->user()->id; $template->save(); }
} elseif ($request->template_no == 'four') { if ($request->hasFile('logo_image')) { $file = $request->file('logo_image'); $imageName = time() . '_1' . '.' . $file->getClientOriginalExtension(); $file->move(public_path('/uploads'), $imageName); $request['logo_img'] = $imageName; } else { $request['logo_img'] = isset($templateDta->logo_img) && $templateDta->logo_img ? $templateDta->logo_img : ''; } if ($request->hasFile('product_image_upload')) { $file = $request->file('product_image_upload'); $imageOneName = time() . '_2' . '.' . $file->getClientOriginalExtension(); $file->move(public_path('/uploads'), $imageOneName); $request['product_img_upload'] = $imageOneName; } else { $request['product_img_upload'] = isset($templateDta->product_img_upload) && $templateDta->product_img_upload ? $templateDta->product_img_upload : ''; } if ($template) { $template->template = 'four'; $template->value = json_encode($request->only('logo_img', 'logo_url', 'product_image_url', 'campaign_title', 'campaign_description', 'company_name', 'email_description', 'unsubscribe_link', 'product_img_upload', 'campaign_call_to_action')); $template->customer_id = auth()->user()->id; $template->save(); } else { $template = new CampaignTemplate(); $template->template = 'four'; $template->value = json_encode($request->only('logo_img', 'logo_url', 'product_image_url', 'campaign_title', 'campaign_description', 'company_name', 'email_description', 'unsubscribe_link', 'product_img_upload', 'campaign_call_to_action')); $template->customer_id = auth()->user()->id; $template->save(); }
} elseif ($request->template_no == 'five') { if ($request->hasFile('logo_image')) { $file = $request->file('logo_image'); $imageName = time() . '_1' . '.' . $file->getClientOriginalExtension(); $file->move(public_path('/uploads'), $imageName); $request['logo_img'] = $imageName; } else { $request['logo_img'] = isset($templateDta->logo_img) && $templateDta->logo_img ? $templateDta->logo_img : ''; } if ($template) { $template->template = $request->template_no; $template->value = json_encode($request->only('logo_img', 'campaign_title', 'campaign_description', 'company_name', 'email_description', 'unsubscribe_link', 'product_img_upload', 'campaign_call_to_action')); $template->customer_id = auth()->user()->id; $template->save(); } else { $template = new CampaignTemplate(); $template->template = $request->template_no; $template->value = json_encode($request->only('logo_img', 'logo_url', 'campaign_title', 'campaign_description', 'company_name', 'email_description', 'unsubscribe_link', 'product_img_upload', 'campaign_call_to_action')); $template->customer_id = auth()->user()->id; $template->save(); }
} elseif ($request->template_no == 'six') { if ($request->hasFile('logo_image')) { $file = $request->file('logo_image'); $imageName = time() . '_1' . '.' . $file->getClientOriginalExtension(); $file->move(public_path('/uploads'), $imageName); $request['logo_img'] = $imageName; } else { $request['logo_img'] = isset($templateDta->logo_img) && $templateDta->logo_img ? $templateDta->logo_img : ''; } if ($template) { $template->template = $request->template_no; $template->value = json_encode($request->only('logo_img', 'campaign_title', 'campaign_description', 'company_name', 'email_description', 'unsubscribe_link', 'product_img_upload', 'campaign_call_to_action')); $template->customer_id = auth()->user()->id; $template->save(); } else { $template = new CampaignTemplate(); $template->template = $request->template_no; $template->value = json_encode($request->only('logo_img', 'logo_url', 'campaign_title', 'campaign_description', 'company_name', 'email_description', 'unsubscribe_link', 'product_img_upload', 'campaign_call_to_action')); $template->customer_id = auth()->user()->id; $template->save(); } }
return redirect()->back()->with('success', 'Campaign template updated successfully'); }
public function campaign_template_get_to_email(Request $request) { $request->validate([ 'group_id' => 'required|array' ]); $customer = auth('customer')->user(); $contactIds = $customer->contact_groups()->whereIn('group_id', $request->group_id)->pluck('contact_id'); $to_email_count = Contact::whereIn('id', $contactIds)->count();
return response()->json(['status' => 'success', 'data' => ['to_count' => $to_email_count]]); }
public function campaigns_preview_email_store(Request $request) { if (!$request->email) { return response()->json(['status' => 'failed', 'message' => 'Invalid Email']); } $customer = auth('customer')->user(); $email = $customer->contacts()->where('email', $request->email)->first(); if ($email) { return response()->json(['status' => 'failed', 'message' => 'Invalid Email']); } $contact = new Contact(); $contact->customer_id = $customer->id; $contact->email = $request->email; $contact->save(); return response()->json(['status' => 'success', 'message' => 'Email successfully added']);
}
public function campaigns_preview_test(Request $request) {
$request->validate([ 'contact_from_email' => 'required|email', 'seleted_conteact_emails' => 'required|array', 'contact_template_id' => 'required|exists:campaign_templates,id', 'contact_start_date' => 'required', 'contact_end_date' => 'required', 'contact_start_time' => 'required', 'contact_end_time' => 'required', 'contact_from_email_name' => 'required', 'contact_subject_line' => 'required', ]); $customer = auth('customer')->user(); $current_plan = auth('customer')->user()->plan; if (!$current_plan) { return back()->with('fail', 'Customer doesn\'t have any plan right now'); } $fromEmail = $request->contact_from_email; $domain = $customer->domains()->where('name', getDomainFromEmail($fromEmail))->first();
$to = $request->seleted_conteact_emails; $pre_available_emails = $current_plan->available_emails; $new_available_email = $pre_available_emails - count($to);
if ($new_available_email < 0) { return redirect()->back()->with('fail', 'Doesn\'t have enough email'); }
$emailTemplate=CampaignTemplate::where('id',$request->contact_template_id)->first();
setActivity(auth('customer')->user()->id, 'add', 'campaign', $request->contact_campaign_id, 'Campaign has been created successfully');
$newMessage = new Message(); $newMessage->customer_id = $customer->id; $newMessage->emails = json_encode(['from' => $fromEmail, 'to' => $to]); $newMessage->campaign_id = $request->contact_campaign_id; $newMessage->from_name = $request->contact_from_email_name; $newMessage->reply_to = $request->contact_reply_to_email; $newMessage->subject = $request->contact_subject_line; $newMessage->template_id = $emailTemplate->id; $newMessage->type = 'sent'; $newMessage->read = 'no'; $newMessage->domain_id = $domain->id??null; $newMessage->save();
setActivity(auth('customer')->user()->id, 'add', 'compose', $newMessage->id, 'Sent New Message');
$current_plan->available_emails = $new_available_email; $current_plan->save();
$contacts=Contact::whereIn('email',$to)->get(); $email_queue=[]; foreach ($contacts as $contact){ $email_queue[] = [ 'random_ref_key' => Str::random(), 'domain_id' => $domain->id??null, 'message_id' => $newMessage->id, 'from' => $fromEmail, 'to' => $contact->email, 'schedule_datetime' => now(), 'body' => null, 'created_at' => now(), 'updated_at' => now(), 'from_name'=>$request->contact_from_email_name, 'reply_to'=>$request->contact_reply_to_email, 'subject'=>$request->contact_subject_line, 'type'=>'sent', 'template'=>json_encode(CampaignCreateChunk::generateTemplate($contact,$emailTemplate)), ]; }
$customer->email_queues()->createMany($email_queue); $customer->message_logs()->createMany($email_queue);
return redirect()->route('customer.campaign.index')->with('success', trans('Campaign test email created successfully'));
}
}
|