Viewing file: CampaignController.php (40.98 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
namespace App\Http\Controllers\Customer;
use App\Export\DuplicateInvalidExport; use App\Http\Controllers\Controller; use App\Imports\CampaignContactsImport; use App\Imports\DuplicateChecks; use App\Jobs\CampaignCreateJob; use App\Models\AssignStaffContact; use App\Models\Campaign; use App\Models\CampaignStaff; use App\Models\Coverage; use App\Models\Customer; use App\Models\Exception; use App\Models\FromGroup; use App\Models\Group; use App\Models\Message; use App\Models\Number; use App\Models\SenderId; use App\Models\Settings; use App\Models\ShortLink; use App\Models\ShortLinkOverView; use App\Models\SmsQueue; use App\Models\SmsTemplate; use Illuminate\Http\Request; use Illuminate\Support\Carbon; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Storage; use Illuminate\Support\Str; use Maatwebsite\Excel\Concerns\ToCollection; use Maatwebsite\Excel\Concerns\WithCustomCsvSettings; use Maatwebsite\Excel\Facades\Excel;
class CampaignController extends Controller { public function index() { return view('customer.campaign.index'); }
public function smsTemplate() { $customer = auth('customer')->user(); $data['sms_templates'] = SmsTemplate::where('customer_id', $customer->id)->get(); return view('customer.template.sms_template', $data); }
public function report(Request $request) { $customer = auth('customer')->user(); if ($request->campaign_id) $campaign = $customer->campaings()->where('id', $request->campaign_id)->firstOrFail(); $messageLogs = $customer->message_logs()->select(['from', 'to', 'body', 'response_code', 'updated_at']);
if ($request->campaign_id) { $messageLogs = $messageLogs->where('campaign_id', $campaign->id); } if ($request->response_code) { $messageLogs = $messageLogs->where('response_code', $request->response_code); } if ($request->campaign_id) { $data['reports'] = $messageLogs->simplePaginate(20); } else { $data['reports'] = ''; } $data['campaigns'] = $customer->campaings; $data['requestData'] = $request->only('campaign_id', 'response_code'); return view('customer.campaign.report', $data); }
public function getAll() { $campaings = auth('customer')->user()->campaings()->where('is_dynamic', 'no')->where('is_dlt', 'no')->withCount(['sms_queue', 'total_processed'])->orderByDesc('id'); return datatables()->of($campaings) ->addColumn('title', function ($q) { $title = $q->title; if ($q->sms_queue_count) { $title .= '(' . $q->total_processed_count . '/' . $q->sms_queue_count . ')'; } return $title; }) ->addColumn('start_date', function ($q) { return $q->start_date->format('Y-m-d'); }) ->addColumn('end_date', function ($q) { 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->sms_queue_count) { return ' <button type="button" style="cursor:default" class="btn btn-sm btn-success">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 data-id='" . $q->id . "' class='importing'> <i class=\"fas fa-spinner fa-pulse\"></i> importing</span>"; } else if ($q->status == 'completed') { return ' <button type="button" class="btn light btn-sm btn-primary">Completed</button>'; } 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) { $report = '<a href="' . route('customer.campaign.overview', [$q->id]) . '" class="btn light btn-sm btn-success mr-2" title="Statistic"><i class="fa fa-eye"></i></a>'; return $report . '<a href="' . route('customer.campaign.statistic', [$q->id]) . '" target="_blank" class="btn light btn-sm btn-info mr-2" title="Statistic"><i class="fa fa-file"></i></a>' . '<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" title="Delete"><i class="fa fa-trash"></i></button>'; })->rawColumns(['title', 'action', 'status'])->toJson(); }
public function overview($id) { $campaign = Campaign::where('id', $id)->firstOrFail(); $short_link_ids = ShortLink::where('customer_id', auth('customer')->user()->id)->where('campaign_id', $campaign->id)->pluck('id'); $short_links = ShortLink::where('customer_id', auth('customer')->user()->id)->where('campaign_id', $campaign->id)->get();
$data['total_contact'] = SmsQueue::where('campaign_id', $campaign->id)->count(); $data['overviews'] = ShortLinkOverView::whereIn('short_link_id', $short_link_ids)->orderByDesc('created_at')->with('contact')->get(); $data['short_links'] = $short_links; $data['campaign_id'] = $id;
return view('customer.campaign.overview', $data); }
public function getUrlResult(Request $request) { if (!$request->id || !$request->campaign_id) { return response()->json(['status' => 'failed']); }
$short_link = ShortLink::where('customer_id', auth('customer')->user()->id)->where('campaign_id', $request->campaign_id)->where('id', $request->id)->first(); if (!$short_link) { return response()->json(['status' => 'failed']); } $clicked = ShortLinkOverView::where('short_link_id', $short_link->id)->count();
return response()->json(['status' => 'success', 'clicked' => $clicked]); }
public function allSenders(Request $request) { $customer = auth('customer')->user();
$fromGroups = $customer->from_groups()->where('type', $request->type)->get(); $numbers = $customer->numbers()->where('expire_date','>', now()); if ($request->from_selected_type == 'sms') { $numbers->where('sms_capability', 'yes'); } else if ($request->from_selected_type == 'mms') { $numbers->where('mms_capability', 'yes'); } else if ($request->from_selected_type == 'whatsapp') { $numbers->where('whatsapp_capability', 'yes'); } else if ($request->from_selected_type == 'voicecall') { $numbers->where('voice_capability', 'yes'); }
$numbers = $numbers->get(); $usersFormGroups = []; $usersFormNumbers = []; if ($request->from_selected_type != 'mms') { foreach ($fromGroups as $group) { $usersFormGroups[] = ['value' => $group->name, 'id' => $group->id, 'type' => 'group']; } } if ($request->type != 'sender_id') { foreach ($numbers as $key => $number) { $usersFormNumbers[] = ['number' => $number->number, 'type' => 'from']; } }
if ($request->type == 'sender_id') { $senderIds = $customer->sender_ids->where('is_dlt','no')->where('expire_date','>', now()); foreach ($senderIds as $senderId) { $usersFormNumbers[] = ['number' => $senderId->sender_id, 'id' => $senderId->id, 'type' => 'from']; } }
return response()->json(['number' => $usersFormNumbers, 'groups' => $usersFormGroups, 'status' => 'success']); }
public function create() { $customer = auth('customer')->user(); $current_plan = $customer->plan; if (!$current_plan) return back()->withErrors(['failed' => trans('customer.messages.empty_plan')]);
$data['templates'] = SmsTemplate::where('customer_id', $customer->id)->where('status', 'active')->get(); $data['groups'] = $customer->groups()->withCount('contacts')->get(); $data['from_groups'] = $customer->from_groups;
$usersFormGroups = []; $usersFormNumbers = []; $from_groups = $customer->from_groups()->where('type', 'number')->get(); foreach ($from_groups as $group) { $usersFormGroups[] = ['number' => $group->name, 'id' => $group->id, 'type' => 'group']; } $all_numbers = $customer->numbers()->where('sms_capability', 'yes')->get(); foreach ($all_numbers as $key => $number) { $usersFormNumbers[] = ['number' => $number->number, 'type' => 'from']; }
$usersFormSenderIdGroups = []; $usersFormSenders = []; $from_groups = $customer->from_groups()->where('type', 'sender_id')->get(); foreach ($from_groups as $group) { $usersFormSenderIdGroups[] = ['number' => $group->name, 'id' => $group->id, 'type' => 'group']; } $all_senders = $customer->numbers()->where('sms_capability', 'yes')->get(); foreach ($all_senders as $key => $number) { $usersFormSenders[] = ['number' => $number->sender_id, 'id' => $number->id, 'type' => 'from']; }
$data['users_from_groups'] = $usersFormGroups; $data['users_from_number'] = $usersFormNumbers;
$data['senderid_from_groups'] = $usersFormSenderIdGroups; $data['from_sender_ids'] = $usersFormSenders; $data['plain_sms'] = $current_plan->plain_sms ? intval($current_plan->plain_sms, '0') : 1; $data['staffs'] = Customer::where('admin_id', auth('customer')->user()->id)->where('type', 'staff')->get(); return view('customer.campaign.create', $data); }
public function getTemplate(Request $request) {
$customer = auth('customer')->user(); $template = SmsTemplate::where('id', $request->template_id)->where('customer_id', $customer->id)->first();
return response()->json(['status' => 'success', 'data' => $template->body]); }
public function get_from_numbers(Request $request) { $customer = auth('customer')->user(); if ($request->type == 'sms') { $type = 'number'; } else if ($request->type == 'mms') { $type = 'mms'; } else if ($request->type == 'whatsapp') { $type = 'whatsapp'; } else if ($request->type == 'voicecall') { $type = 'voicecall'; }
if (!$type) { return response()->json(['status' => 'failed', 'message' => 'Invalid type']); } $groups = $customer->from_groups()->where('type', $type)->get(); $numbers = $customer->numbers();
if ($request->type == 'sms') { $numbers = $numbers->where('sms_capability', 'yes'); } if ($request->type == 'mms') { $numbers = $numbers->where('mms_capability', 'yes'); } if ($request->type == 'whatsapp') { $numbers = $numbers->where('whatsapp_capability', 'yes'); } if ($request->type == 'voicecall') { $numbers = $numbers->where('voice_capability', 'yes'); }
$numbers = $numbers->get();
$usersFormGroups = []; $usersFormNumbers = []; foreach ($groups as $group) { $usersFormGroups[] = ['value' => $group->name, 'id' => $group->id, 'type' => 'group']; } foreach ($numbers as $key => $number) { $usersFormNumbers[] = ['value' => $number->number, 'number' => $number->number, 'type' => 'from']; } return response()->json(['numbers' => $usersFormNumbers, 'groups' => $usersFormGroups, 'status' => 'success']); }
public function store(Request $request) { DB::beginTransaction(); try {
if (env("APP_DEMO")) { return redirect()->back()->withErrors(['msg' => trans('admin.app_demo_message')]); }
if (!$request->start_date) { $start_date = now()->format('Y-m-d'); $request['start_date'] = $start_date; }
if (!$request->end_date) { $end_date = now()->format('Y-m-d'); $request['end_date'] = $end_date; }
if (!$request->start_time) { $start_time = now()->format('H:i'); $request['start_time'] = $start_time; }
if (!$request->end_time) { $end_time = (now()->addSeconds(10))->format('H:i'); $request['end_time'] = $end_time; } if ($request->start_time > $request->end_time) { return back()->withErrors(['failed' => trans('The start time must be earlier than the end time.')]); } if ($request->start_date > $request->end_date) { return back()->withErrors(['failed' => trans('The start date must be earlier than the end date.')]); } if (!isset($request->regenerate)) { $request->validate([ 'title' => 'required', 'start_date' => 'required', 'template_body' => 'required', 'end_date' => 'required', 'start_time' => 'required', 'end_time' => 'required', ]); } if ($request->customer_id) { $customer = Customer::findOrFail($request->customer_id); } else { $customer = auth('customer')->user(); }
$current_plan = $customer->plan; if (!$current_plan) return back()->withErrors(['failed' => trans('customer.messages.empty_plan')]);
if ($current_plan->unlimited_sms_send == 'no') { $sendlimit_expire = $current_plan->created_at->addMonths(1); $total_sms_queue = auth('customer')->user()->sms_queues()->whereBetween('created_at', [$current_plan->created_at, $sendlimit_expire])->count();
if ($sendlimit_expire < now()) { return redirect()->route('customer.billing.index')->withErrors(['failed' => trans('customer.messages.sms_limit_expired')]); } if ($current_plan->sms_sending_limit <= $total_sms_queue) { return redirect()->route('customer.billing.index')->withErrors(['failed' => trans('admin.messages.sms_limit_ended')]); } }
$coverages = Coverage::whereIn('id', json_decode($current_plan->coverage_ids))->get();
$coverage_rate = []; if ($coverages) { foreach ($coverages as $coverage) { if ($request->from_selected_type == 'sms') { $coverage_rate[$coverage->country_code] = $coverage->plain_sms; } else if ($request->from_selected_type == 'mms') { $coverage_rate[$coverage->country_code] = $coverage->send_mms; } else if ($request->from_selected_type == 'whatsapp') { $coverage_rate[$coverage->country_code] = $coverage->send_voice_sms; } else if ($request->from_selected_type == 'voicecall') { $coverage_rate[$coverage->country_code] = $coverage->send_whatsapp_sms; } } }
if (!$request->regenerate) { $to = []; }
$totalTo = []; $totalSmsAmount = 0;
if ($request->recipient_type == 'group') { $totalGroups = Group::whereIn('id', $request->groups)->get(); $totalTo = []; $totalSmsAmount = 0; $findStaffContactNumber = [];
foreach ($totalGroups as $gContacts) { foreach ($gContacts->contacts as $contact) { if (isset($coverage_rate[str_replace('+', '', $contact->contact->contact_dial_code)])) { $totalTo[] = $contact->contact->contact_dial_code . $contact->contact->number; $totalSmsAmount = $totalSmsAmount + $coverage_rate[str_replace('+', '', $contact->contact->contact_dial_code)]; $findStaffContactNumber[$contact->contact->number] = $contact->contact->id; } } }
} else if ($request->recipient_type == 'paste_number') { $request_paste_number = preg_replace('/\s+/', ',', str_replace(array("\r\n", "\r", "\n"), ' ', trim($request->paste_numbers))); $recipient_numbers = explode(',', $request_paste_number); $recipient_numbers = array_unique($recipient_numbers); $insertContact = []; foreach ($recipient_numbers as $recipient_number) { $number_code = getCountryDialCode($recipient_number); $number_without_code = getPhoneNumberWithoutDialCode($recipient_number); if (isset($coverage_rate[str_replace('+', '', $number_code)])) { $totalTo[] = $number_without_code; $totalSmsAmount = $totalSmsAmount + $coverage_rate[str_replace('+', '', $number_code)];
$insertContact[] = [ 'customer_id' => auth('customer')->user()->id, 'contact_dial_code' => $number_code, 'number' => $number_without_code ]; } }
if (!$insertContact || count($insertContact) <= 0) { return redirect()->back()->withErrors(['failed' => trans('customer.messages.coverage_not_match')]); }
if ($insertContact) { $customer->contacts()->createMany($insertContact); } }
if ($request->recipient_type != 'import_xls') { $totalTo = array_unique($totalTo);
if (count($totalTo) <= 0) { return redirect()->back()->withErrors(['failed' => trans('customer.messages.select_one_group')]); } $onException = Exception::where('customer_id', auth('customer')->id())->whereIn('number', $totalTo)->pluck('number')->toArray(); $to = array_values(array_diff($totalTo, $onException));
} else if (!isset($request->regenerate)) {
}
if (isset($request->regenerate)) { $onException = Exception::where('customer_id', auth('customer')->id())->whereIn('number', $totalTo)->pluck('number')->toArray(); $to = array_values(array_diff($totalTo, $onException)); if (count($to) <= 0) { return redirect()->back()->withErrors(['failed' => trans('customer.messages.unavailable_to_numbers')]); } } //subtracting one sms TODO:: will need to count text and sub that $wallet = auth('customer')->user()->wallet()->first();
// Count Template Body Characters $totalCount = 1; // $requestCharacters=implode('',$request->template_body); $requestCharacters = $request->template_body; $characters = mb_strlen($requestCharacters, "UTF-8"); if (strlen($requestCharacters) != strlen(utf8_decode($requestCharacters))) { if ($characters && $characters > 70) { $grandTotal = ceil($characters / 70); if ($grandTotal > 1) $totalCount = $grandTotal; } } else { if ($characters && $characters > 160) { $grandTotal = ceil($characters / 160); if ($grandTotal > 1) $totalCount = $grandTotal; } }
$totalToNumbers = ($totalSmsAmount * $totalCount);
if ($current_plan) { if ($wallet->credit < $totalToNumbers) { return redirect()->back()->withErrors(['failed'=> trans('customer.messages.not_enough_sms')])->withInput(); } }
$allGroupIds = []; $allFromNumber = [];
if (!isset($request->regenerate)) { if ($request->type == 'number') { foreach ($request->from_number as $item) { $number = (array)json_decode($item); if (isset($number['type'])) { if ($number['type'] == 'from') { $allFromNumber[] = $number['number']; } elseif ($number['type'] == 'group') { $allGroupIds[] = $number['id']; } } }
$fromGroups = FromGroup::where('status', 'active')->whereIn('id', $allGroupIds)->get(); foreach ($fromGroups as $from_group) { foreach ($from_group->from_group_numbers as $from_number) { $allFromNumber[] = $from_number->number; } } $allNumbers = Number::whereIn('number', $allFromNumber)->get();
$find_gateway_id = []; foreach ($allNumbers as $from_gateway) { $find_gateway_id[$from_gateway->number] = $from_gateway->dynamic_gateway_id; }
} else if ($request->type == 'sender_id') { $allFromSenderIds = []; foreach ($request->from_number as $item) { $number = (array)json_decode($item); if (isset($number['type'])) { if ($number['type'] == 'from') { $allFromSenderIds[] = $number['id']; } elseif ($number['type'] == 'group') { $allGroupIds[] = $number['id']; } } }
$senderIds = SenderId::whereIn('id', $allFromSenderIds)->get(); foreach ($senderIds as $senderid) { $allFromNumber[] = $senderid->sender_id; } $allNumbers = $allFromNumber;
$find_gateway_id = []; foreach ($senderIds as $from_gateway) { $find_gateway_id[$from_gateway->sender_id] = $from_gateway->dynamic_gateway_id; } } else { $allFromNumber = [$request->whatsapp_from_number]; } } else { $allFromNumber = $request->pre_generated_from; $find_gateway_id = $request->find_gateway_id; }
$voice_obj = []; if ($request->language && $request->voice_type) { $voice_obj = [ 'language' => $request->language, 'voice_type' => $request->voice_type ]; }
$allFromNumber = array_values(array_unique($allFromNumber)); $from = $allFromNumber;
if (!isset($request->campaign_id)) { $s_date=Carbon::parse($request->start_date); $e_date=Carbon::parse($request->end_date);
$campaign = new Campaign(); $campaign->title = $request->title; $campaign->customer_id = $customer->id; $campaign->from_number = json_encode($allFromNumber); $campaign->to_number = json_encode($to); $campaign->start_date = $s_date->format('Y/m/d'); $campaign->end_date = $e_date->format('Y/m/d'); $campaign->start_time = $request->start_time; $campaign->end_time = $request->end_time; $campaign->template_id = $request->template_id; $campaign->message_body = json_encode($request->template_body); $campaign->message_send_rate = 999999; $campaign->from_group_id = json_encode($allGroupIds); $campaign->status = 'importing'; $campaign->save();
//TODO::Replace Message Link $pattern = '#\bhttps?://[^,\s()<>]+(?:\([\w\d]+\)|([^,[:punct:]\s]|/))#'; $string = preg_replace('/\s+/', ' ', trim($request->template_body)); preg_match_all($pattern, $string, $matches);
if (isset($matches[0]) && count($matches[0]) > 0) { foreach ($matches[0] as $index => $originalLink) { $code = $this->generateShortCode($originalLink); $shortLink = new ShortLink(); $shortLink->customer_id = auth('customer')->user()->id; $shortLink->url = $originalLink; $shortLink->short_code = $code; $shortLink->campaign_id = $campaign->id; $shortLink->save(); $request['template_body'] = str_replace($originalLink, route('shorten.url', [$code, 'c' => 'contact__id']), $request->template_body); } }
if ($request->staff_ids) { $campaign_staffs = []; foreach ($request->staff_ids as $staff_id) { $campaign_staffs[] = [ 'campaign_id' => $campaign->id, 'customer_id' => $customer->id, 'staff_id' => $staff_id, 'created_at' => now(), 'updated_at' => now() ]; } CampaignStaff::insert($campaign_staffs);
$genStaffContacts = []; for ($i = 0; $i < count($to); $i += count($request->staff_ids)) { for ($j = 0; $j < count($request->staff_ids); $j++) { if (isset($to[$i + $j])) { $genStaffContacts[$request->staff_ids[$j]][] = trim($to[$i + $j]); } } } if ($genStaffContacts) { foreach ($genStaffContacts as $key => $genStaff) { foreach ($genStaff as $contact) { if (isset($findStaffContactNumber[getPhoneNumberWithoutDialCode($contact)])) { $new_staff_contact = new AssignStaffContact(); $new_staff_contact->customer_id = auth('customer')->user()->id; $new_staff_contact->staff_id = $key; $new_staff_contact->contact_id = $findStaffContactNumber[getPhoneNumberWithoutDialCode($contact)]; $new_staff_contact->campaign_id = $campaign->id; $new_staff_contact->save(); } } } } }
} else { $campaign = Campaign::findOrFail($request->campaign_id); $campaign->to_number = json_encode($to); $campaign->status = 'running'; $campaign->save();
$request['start_date'] = $campaign->start_date; $request['end_date'] = $campaign->end_date; $request['start_time'] = $campaign->start_time; $request['end_time'] = $campaign->end_time; }
$totalSmsCredit = $totalToNumbers; if ($request->recipient_type != 'import_xls' && !isset($request->regenerate)) { if ($current_plan) { $wallet->credit = $wallet->credit - $totalSmsCredit; $wallet->save(); } } else if (isset($request->regenerate)) { if ($current_plan) { $wallet->credit = $wallet->credit - $totalSmsCredit; $wallet->save(); } }
$totalToNumbersCount = 0; $totalFromNumbersCount = count($allFromNumber); $generatedToNumbers = []; $lastKey = end($from); for ($i = 0; $i < count($to); $i += count($from)) { for ($j = 0; $j < count($from); $j++) { if (isset($to[$i + $j])) { $generatedToNumbers[$from[$j]][] = trim($to[$i + $j]); $totalToNumbersCount++; } } }
$messageFiles = []; if ($request->message_files) { foreach ($request->message_files as $key => $file) { $messageFiles[] = $fileName = time() . $key . '.' . $file->extension(); $file->move(public_path('uploads/'), $fileName); } }
if ($request->recipient_type && $request->recipient_type == 'import_xls') { $importContact = new Group(); $importContact->customer_id = $customer->id; $importContact->name = $request->title; $importContact->save();
if ($request->hasFile('import_xls')) { $data = $request->file('import_xls'); $fileName = $importContact->id . '.' . $data->getClientOriginalExtension(); $data->move(public_path() . '/uploads', $fileName); $file_url = public_path() . '/uploads/' . $fileName; try {
/*Start*/ $startDate = (new Carbon($request->start_date))->subDay(); $endDate = new Carbon($request->end_date); $startTime = new Carbon($request->start_time); $endTime = new Carbon($request->end_time); $difference_time = $startTime->diffInSeconds($endTime); $difference_date = $startDate->diffInDays($endDate); $total_minute = $difference_time * $difference_date; $send_speed = floor($total_minute / 2); // $send_speed = floor($total_minute / $totalToNumbersCount); /*End*/
Excel::import(new CampaignContactsImport($customer, $campaign->id, $importContact->id, $from, $find_gateway_id, $request->template_body, $request->start_date, $request->end_date, $request->start_time, $request->end_time), $file_url); } catch (\Exception $ex) { DB::rollBack(); if (isset($ex->validator)) { return redirect()->back()->withErrors($ex->validator->errors()); } else { return redirect()->back()->withErrors(['msg' => $ex->getMessage()]); } }
} } else { foreach ($generatedToNumbers as $key => $toNumbers) { $dynamic_gateway_id = isset($find_gateway_id[$key]) ? $find_gateway_id[$key] : ''; if ($dynamic_gateway_id) { /*Start*/ $startDate = (new Carbon($request->start_date))->subDay(); $endDate = new Carbon($request->end_date); $startTime = new Carbon($request->start_time); $endTime = new Carbon($request->end_time); $difference_time = $startTime->diffInSeconds($endTime); $difference_date = $startDate->diffInDays($endDate); $total_minute = $difference_time * $difference_date; $send_speed = floor($total_minute / $totalToNumbersCount); /*End*/
//create new message $newMessage = new Message(); $newMessage->customer_id = $customer->id; $newMessage->body = json_encode($request->template_body); $newMessage->numbers = json_encode(['from' => $key, 'to' => $toNumbers]); $newMessage->campaign_id = $campaign->id; $newMessage->message_files = json_encode($messageFiles); $newMessage->sender_type = $request->from_selected_type; $newMessage->type = 'sent'; $newMessage->read = 'no'; $newMessage->voice_obj = json_encode($voice_obj); $newMessage->save();
$others=[ 'dynamic_gateway_id'=>$dynamic_gateway_id ]; CampaignCreateJob::dispatch($key, $toNumbers, $campaign, $newMessage, $totalToNumbersCount, $totalFromNumbersCount, $difference_date, $startDate, $startTime, $send_speed, $customer, $lastKey, $others); } } }
DB::commit(); return redirect()->route('customer.campaign.index')->with('success', trans('customer.messages.campaign_created')); } catch (\Exception $ex) { DB::rollBack(); return redirect()->back()->withErrors(['failed' => $ex->getMessage()]); }
}
function generateShortCode($url) { $rand_length = ['5', '6', '7', '8', '10', '11', '12', '13', '14', '15', '17', '19', '20', '22', '25']; $rand_length_key = array_rand($rand_length); $rand_length = $rand_length[$rand_length_key];
$hash = md5($url); // Extract a portion of the hash as the short code $shortCode = substr($hash, 0, $rand_length); return $shortCode; }
public function destroy(Campaign $campaign) { if ($campaign->sms_queue) { $campaign->sms_queue()->delete(); } if ($campaign->messages) { $campaign->messages()->delete(); } $campaign->delete();
return redirect()->route('customer.campaign.index')->with('success', trans('customer.messages.campaign_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();
SmsQueue::where('campaign_id', $campaign->id)->where('schedule_completed', 'no')->where('status', $request->status == 'paused' ? 'running' : 'paused')->update(['status' => $request->status]);
return redirect()->route('customer.campaign.index')->with('success', trans('customer.messages.campiagn_status_changed'));
}
public function statistic($id) { $customer = auth('customer')->user(); $campaign = $customer->campaings()->where('id', $id)->firstOrFail(); $data['messageRunningLogs'] = $customer->sms_queues()->where('campaign_id', $campaign->id)->orderBy('schedule_datetime')->where('schedule_completed', 'no')->where('status', 'running')->paginate(20, ['*'], 'running'); $data['messagePausedLogs'] = $customer->sms_queues()->where('campaign_id', $campaign->id)->orderBy('schedule_datetime')->where('status', 'paused')->paginate(20, ['*'], 'paused'); $data['messageFailedLogs'] = $customer->sms_queues()->where('campaign_id', $campaign->id)->orderBy('schedule_datetime')->where('schedule_completed', 'yes')->where('status', 'failed')->paginate(20, ['*'], 'failed'); $data['messageDeliveredLogs'] = $customer->sms_queues()->where('campaign_id', $campaign->id)->orderBy('schedule_datetime')->where('status', '!=', 'failed')->where('schedule_completed', 'yes')->whereColumn('created_at', '<', 'updated_at')->whereNull('response_code')->paginate(20, ['*'], 'delivered');
$data['totalSms'] = $customer->sms_queues()->where('campaign_id', $campaign->id)->count(); $data['totalDeliveredSms'] = $customer->sms_queues()->where('campaign_id', $campaign->id)->where('status', '!=', 'failed')->where('schedule_completed', 'yes')->whereColumn('created_at', '<', 'updated_at')->count(); $data['totalFailedSms'] = $customer->sms_queues()->where('campaign_id', $campaign->id)->where('schedule_completed', 'yes')->where('status', 'failed')->count();
return view('customer.campaign.statistic', $data); }
public function checkImportStatus(Request $request) { $request_ids = json_decode($request->ids); if (!$request_ids || count($request_ids) <= 0) { return response()->json(['status' => 'failed']); } $hasChanged = auth('customer')->user()->campaings()->whereIn('id', $request_ids)->where('status', 'running')->count();
return response()->json(['status' => 'success', 'data' => $hasChanged]); }
public function checkDuplicates(Request $request) { $result = []; if ($request->isMethod('post') && $request->hasFile('import_xls')) { $randomId = Str::random(16); $import = new DuplicateChecks(); $data = Excel::toCollection($import, $request->file('import_xls'))[0];
$data = $data->map(function ($item) { return array_slice($item->toArray(), 0, 11); });
$duplicates = $data->duplicates('number'); $invalidNumbers = $data->filter(function ($entry) { if(isset($entry['number'])) { $number = strlen($entry['number']); return $number < 10 || $number > 12; } }); $invalidNumbers=$invalidNumbers->pluck('number');
$duplicatesArray = $duplicates->merge($invalidNumbers);
$result['count'] = $duplicatesArray->count(); $result['file'] = $randomId;
Storage::put("duplicates/" . $randomId . ".dp", json_encode($duplicatesArray)); } else if ($request->id && strlen($request->id) == 16) { if (Storage::exists("duplicates/" . $request->id . ".dp")) { return new DuplicateInvalidExport($request->id); } else { return redirect()->back()->withErrors(['msg' => trans('customer.messages.file_not_exist_reupload')]); }
} return response()->json($result); } }
|