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


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

namespace App\Http\Controllers\Customer;

use 
App\Http\Controllers\Controller;
use 
App\Models\Contact;
use 
App\Models\Exception;
use 
App\Models\Label;
use 
App\Models\MessageLog;
use 
Illuminate\Http\Request;
use 
Illuminate\Support\Facades\DB;

class 
ChatController extends Controller
{
    public function 
index()
    {
        
$customer auth('customer')->user();
        if(
$customer->type=='staff'){
            
$customer=$customer->staff;
        }

        
$no_of_data 20;
        
$from_numbers $customer->message_logs()->select('from AS to'DB::raw('MAX(updated_at) as created_at'))->where('type''inbox')->orderByDesc('created_at')->groupBy('from')->limit($no_of_data)->get();

        
$data['to_numbers'] = $from_numbers->sortByDesc('created_at')->pluck('to')->unique();
        
$createdAt=[];
        foreach (
$from_numbers as $number){
            
$createdAt[$number->to]=$number->created_at;
        }
        
$data['devices'] = $customer->devices()->where('status''active')->where('device_type''device')->get();
        
$data['chat_responses'] = $customer->chat_responses()->where('status''active')->get();
        
$data['labels']=$customer->labels()->where('status','active')->get();
        
$data['createdAt']=$createdAt;
        return 
view('customer.chat.index'$data);
    }
    public function 
get_numbers(Request $request)
    {

        
$page_no $request->page;
        if(!
$page_noabort(404);

        
$no_of_data 20;
        
$offset = ($page_no $no_of_data) - $no_of_data;

        
$customer auth('customer')->user();
        if(
$customer->type=='staff'){
            
$customer=$customer->staff;
        }

        
$devices$customer->devices()->where('status''active')->where('device_type''device')->pluck('device_unique_id');

        
$search $request->search;
        
$all_inbox_messages $customer->message_logs()->select('from AS to','body'DB::raw('MAX(updated_at) as created_at'),DB::raw('MAX(id) as id'))->where('type''inbox')->whereIn('device_unique_id'$devices)->groupBy('from');
        
$all_sent_messages $customer->message_logs()->select('to','body'DB::raw('MAX(updated_at) as created_at'),DB::raw('MAX(id) as id'))->where('type''sent')->whereIn('device_unique_id'$devices)->groupBy('to');

        if (
$request->type=='old'){
            
$all_inbox_messages $all_inbox_messages->orderBy('created_at','asc');
            
$all_sent_messages $all_sent_messages->orderBy('created_at','asc');
        }else{
            
$all_inbox_messages $all_inbox_messages->orderByDesc('created_at');
            
$all_sent_messages $all_sent_messages->orderByDesc('created_at');
        }
        if (
$search){
            
$contacts Contact::where('number''like''%' $search '%')->orWhere('first_name''like''%' $search '%')->orWhere('last_name''like''%' $search '%')->pluck('number');
            
$all_inbox_messages $all_inbox_messages->whereIn('from'$contacts)->where('type','inbox');
            
$all_sent_messages $all_sent_messages->whereIn('to'$contacts)->where('type','sent');
        }

        if(
$request->date){
            
$dates explode('-',$request->date);
                
$fromDate = isset($dates) && isset($dates["0"]) ? str_replace(' '''$dates["0"]) : now();
                
$toDate = isset($dates) && isset($dates["1"]) ? str_replace(' '''$dates["1"]) : now();
                
$fromDate = new \DateTime($fromDate);
                
$toDate = new \DateTime($toDate);
            if(
$fromDate != $toDate) {
                
$all_inbox_messages $all_inbox_messages->whereBetween('updated_at', [$fromDate$toDate]);
                
$all_sent_messages $all_sent_messages->whereBetween('updated_at', [$fromDate$toDate]);
            }
        }
        if(
$request->label_id){

            
$label Label::where('id'$request->label_id)->first();
            if (!
$label){
                return 
response()->json(['status'=>'failed','message'=>'Invalid Label']);
            }
            
$contacts $customer->contacts()->where('label_id'$label->id)->pluck('number')->unique();
            
$all_inbox_messages $all_inbox_messages->whereIn('from'$contacts);
            
$all_sent_messages $all_sent_messages->whereIn('to'$contacts);
        }

        
$all_sent_messages $all_sent_messages->limit($no_of_data)->offset($offset)->get();
        
$all_inbox_messages $all_inbox_messages->limit($no_of_data)->offset($offset)->get();
        
$from_numbers=collect([]);

        
$allNumbers=[];
        foreach (
$all_sent_messages as $item){
            if(!isset(
$allNumbers[$item->to])) {
                
$from_numbers->push(['to'=>$item->to,'created_at'=>$item->created_at]);
                
$allNumbers[$item->to] = [
                    
'to' => $item->to,
                    
'body' => $item->body,
                    
'id' => $item->id,
                    
'created_at' => $item->created_at,
                ];
            }
        }
        foreach (
$all_inbox_messages as $item){
            if(!isset(
$allNumbers[$item->to])) {
                
$from_numbers->push(['to'=>$item->to,'created_at'=>$item->created_at]);
                
$allNumbers[$item->to] = [
                    
'to' => $item->to,
                    
'body' => $item->body,
                    
'id' => $item->id,
                    
'created_at' => $item->created_at,
                ];
            }
        }

        
$from_numbers=$from_numbers->sortByDesc('created_at')->pluck('to')->toArray();
        
$createdAt=[];
        foreach (
$allNumbers as $number){
                
$createdAt[$number['to']] = $number['created_at'];
        }
        
$allChats $customer->message_logs()->whereIn('to'$from_numbers)
            ->
orWhereIn('from',$from_numbers)
            ->
orderByDesc('created_at')
            ->
get(['body''to''from''created_at''updated_at']);

        
$find_chat=[];

        foreach (
$allChats as $key=>$chat){
            
$find_chat[$chat->from]=$chat->body;
        }
        foreach (
$allChats as $key=>$chat){
            
$find_chat[$chat->to]=$chat->body;
        }

        
$numbersArray=[];
        foreach (
$from_numbers as $number){
            
$numbersArray[]= '+'.str_replace('+','',$number);
        }
        
$findContacts $customer->contacts()->whereIn('number'$from_numbers)->orWhereIn('number'$numbersArray)->orderBy('created_at')->get();
        
$findContact=[];
        foreach (
$findContacts as $contact) {
            
$findContact[$contact->number] = [
                
'label' => isset($contact->label) ? ucfirst(mb_strimwidth($contact->label->title07'..')) : '',
                
'color' => isset($contact->label) ? $contact->label->color '',
                
'full_name' => isset($contact->full_name)?$contact->full_name:''
            
];
        }

        
$data=[];
        foreach(
$from_numbers as $key=>$from_number){
            
$data[$key]['full_name']= isset($findContact[$from_number]) && isset($findContact[$from_number]['full_name'])?$findContact[$from_number]['full_name']:'';
            
$data[$key]['number']=$from_number;
            
$data[$key]['created_at']=isset($createdAt) && isset($createdAt[$from_number])?formatDate($createdAt[$from_number]):'';
            
$data[$key]['label']= isset($findContact[$from_number]) && isset($findContact[$from_number]['label'])?$findContact[$from_number]['label']:'';
            
$data[$key]['color']=  isset($findContact[$from_number]) && isset($findContact[$from_number]['color'])?$findContact[$from_number]['color']:'';
            
$data[$key]['body']=isset($find_chat[$from_number])?$find_chat[$from_number]:'';
        }

        
$labels=$customer->labels()->where('status','active')->get();

        if(
$from_numbers && count($from_numbers) > 0){
            return 
response()->json(['status'=>'success','data'=>['numbers'=>$data,'labels'=>$labels,'page'=>$page_no+1]]);
        }else{
            return 
response()->json(['status'=>'success','data'=>['numbers'=>[],'page'=>'end']]);
        }
    }

    public function 
label_update(Request $request)
    {
        
$request->validate([
            
'number' => 'required',
            
'label' => 'required'
        
]);

        
$contact Contact::where('number'$request->number)->orWhere('number'str_replace('+'''$request->number))->first();
        
$customer auth('customer')->user();
        if(
$customer->type=='staff'){
            
$customer=$customer->staff;
        }
        if(!
$contact){
            return 
response()->json(['status' => 'failed']);
        }
        
$label $customer->labels()->where('id'$request->label)->where('status','active')->first();
        if(!
$label){
            return 
response()->json(['status' => 'failed','message'=>'This is not a valid label']);
        }
        
$contact->label_id $label->id;
        
$contact->update();

        return 
response()->json(['status' => 'success''message' => 'Label successfully updated']);
    }


    public function 
get_data(Request $request)
    {
        
$customer auth('customer')->user();
        if(
$customer->type=='staff'){
            
$customer=$customer->staff;
        }

        
$no_of_data 20;
        
$chats $customer->message_logs()->where('to'$request->number)->orWhere('from',$request->number)->orderByDesc('updated_at')->limit($no_of_data)->get(['body''to''from','type''created_at''updated_at'])->toArray();

        
$contact_id $customer->contacts()->where('number'$request->number)->first();

        if(
$contact_id){
            
$address = isset($contact_id->address)?$contact_id->address:'';
            
$zillowUrl='https://www.zillow.com/homes/recently_sold/'.str_replace(' ','-'$contact_id->address);
            
$exception Exception::where('number'$contact_id->number)->orWhere('number'str_replace('+'''$contact_id->number))->first();
            
$label $customer->labels()->where('id'$contact_id->label_id)->where('status','active')->first();
            return 
response()->json(['status' => 'success''data' => ['zillow_url'=>$zillowUrl,'address'=>$address,'number'=>$exception,'id' => $contact_id->id,'color'=>isset($label)?$label->color:'' ,'label' => isset($label)?$label->id:'','name'=>$contact_id->full_name,'messages' => $chats,'page'=>count($chats)<$no_of_data?'end':2]]);
        }
        return 
response()->json(['status' => 'success''data' => ['id' => null'label' => null'messages' => $chats,'page'=>count($chats)<$no_of_data?'end':2]]);
    }

    public function 
get_chats(Request $request){
        
$chats_no $request->chats;
        if(!
$chats_noabort(404);
        
$customer auth('customer')->user();
        if(
$customer->type=='staff'){
            
$customer=$customer->staff;
        }

        
$no_of_data 20;
        
$offset = ($chats_no $no_of_data) - $no_of_data;

        
$chats $customer->message_logs()->where('to'$request->number)->orWhere('from',$request->number)->orderByDesc('updated_at')->offset($offset)->limit($no_of_data)->get(['body''to''from','type''created_at''updated_at'])->toArray();

        if(
$chats){
                return 
response()->json(['status' => 'success''data' => ['messages' => $chats,'page'=>count($chats)<$no_of_data?'end':$chats_no+1]]);
        }else{
            return 
response()->json(['status' => 'success''data' => ['messages' => [],'page'=>'end']]);
        }
    }

    public function 
exception(Request $request){
        
$customer auth('customer')->user();
        if(
$customer->type=='staff'){
            
$customer=$customer->staff;
        }

        
$label $customer->labels()->where('title''new')->first();
        if (!
$label) {
            
$label = new Label();
            
$label->title 'new';
            
$label->status 'active';
            
$label->customer_id $customer->id;
            
$label->color 'red';
            
$label->save();
        }

        if (
$request->check_add_contact){
            
$contact = new Contact();
            
$contact->customer_id $customer->id;
            
$contact->number $request->number;
            
$contact->label_id $label->id;
            
$contact->save();
        }
        if (
$request->type=='add') {
            
$exception = new Exception();
            
$exception->number $request->number;
            
$exception->customer_id $customer->id;
            
$exception->save();
            return 
response()->json(['status' => 'success','type'=>$request->type]);
        }elseif (
$request->type=='delete'){
            
$exception Exception::where('number',$request->number)->orWhere('number'str_replace('+'''$request->number))->where('customer_id'auth('customer')->user()->id)->first();
            if(
$exception){
                
$exception->delete();
            }
            return 
response()->json(['status' => 'success','type'=>$request->type]);
        }

    }

    public function 
addNewContact(Request $request){
        
$customer auth('customer')->user();
        if(
$customer->type=='staff'){
            
$customer=$customer->staff;
        }

        
$label $customer->labels()->where('id'$request->label)->where('status','active')->first();
        if(!
$label){
            return 
response()->json(['status' => 'failed','message'=>'This is not a valid label']);
        }
        
$preContact Contact::where('number'$request->number)->orWhere('number'str_replace('+'''$request->number))->first();
        if (
$preContact) {
            
$preContact->label_id $label->id;
            
$preContact->save();
            return 
response()->json(['status' => 'success''message' => 'Contact Successfully added']);
        }
            
$contact = new Contact();
            
$contact->customer_id $customer->id;
            
$contact->number $request->number;
            
$contact->label_id $label->id;
            
$contact->save();
        return 
response()->json(['status'=>'success','message'=>'Contact Successfully added']);
    }

    public function 
sendContactInfo(Request $request){
        if (!
$request->number || !$request->url){
            return 
response()->json(['status'=>'failed''message'=>'Invalid Request']);
        }
        
$requestNumber'+'.str_replace('+','',trim($request->number));

        
$contact Contact::select('first_name''last_name''number''email''label_id''city''state''zip_code''note''address''company')
            ->
where('number'$requestNumber)->first();
        if (!
$contact) {
            return 
response()->json(['status' => 'failed''message' => 'Invalid number']);
        }
        
$message_logs MessageLog::select('to','from','body','type','status''created_at''updated_at')->where('to'$contact->number)->orWhere('from'$contact->number)->orderByDesc('updated_at')->get();

        
$contactData=[
            
'first_name'=>$contact->first_name,
            
'last_name'=>$contact->last_name,
            
'number'=>$contact->number,
            
'email'=>$contact->email,
            
'city'=>$contact->city,
            
'state'=>$contact->state,
            
'zip_code'=>$contact->zip_code,
            
'address'=>$contact->address,
            
'note'=>$contact->note,
            
'company'=>$contact->company,
            
'label'=>null
        
];
        if (isset(
$contact->label)){
            
$contactData['label']=[
                
'title'=>$contact->label->title,
                
'color'=>$contact->label->color,
            ];
        }
        
$messageData=[];
        foreach(
$message_logs as $key=>$message_log){
            
$messageData[$key]['from']=$message_log->from;
            
$messageData[$key]['to']=$message_log->to;
            
$messageData[$key]['body']=$message_log->body;
            
$messageData[$key]['type']=$message_log->type;
            
$messageData[$key]['status']=$message_log->status;
            
$messageData[$key]['created_at']=$message_log->created_at->toDateTimeString();
            
$messageData[$key]['updated_at']=$message_log->updated_at->toDateTimeString();
        }

        
$data=[
            
'contact'  =>$contactData,
            
'messages'  =>$messageData,
        ];

        
$client=new \GuzzleHttp\Client(['verify' => false ]);
        if (
$request->url_method=='post'){
            
$client->post($request->url,[
                
'form_params'=>$data
            
]);
        }else {
            
$client->get($request->url, [
                
'query' => $data
            
]);
        }
        return 
response()->json(['status'=>'success']);
    }
    
// public function wadevice (){
    //     $customer = auth('customer')->user();
    //     if($customer->type=='staff'){
    //         $customer=$customer->staff;
    //     }

    //     $no_of_data = 20;
    //     $from_numbers = $customer->message_logs()->select('from AS to', DB::raw('MAX(updated_at) as created_at'))->where('type', 'inbox')->orderByDesc('created_at')->groupBy('from')->limit($no_of_data)->get();

    //     $data['to_numbers'] = $from_numbers->sortByDesc('created_at')->pluck('to')->unique();
    //     $createdAt=[];
    //     foreach ($from_numbers as $number){
    //         $createdAt[$number->to]=$number->created_at;
    //     }
    //     $data['devices'] = $customer->devices()->where('status', 'active')->where('device_type', 'whatsapp')->get();
    //     $data['chat_responses'] = $customer->chat_responses()->where('status', 'active')->get();
    //     $data['labels']=$customer->labels()->where('status','active')->get();
    //     $data['createdAt']=$createdAt;
    //     return view('customer.wa_chat.index',$data);
    // }
}

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