KGRKJGETMRETU895U-589TY5MIGM5JGB5SDFESFREWTGR54TY
Server : Apache/2.4.41 (Ubuntu)
System : Linux vmi1525618.contaboserver.net 5.4.0-105-generic #119-Ubuntu SMP Mon Mar 7 18:49:24 UTC 2022 x86_64
User : www-data ( 33)
PHP Version : 8.2.12
Disable Function : NONE
Directory :  /var/www/account.appointkrypt.com/app/Http/Controllers/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /var/www/account.appointkrypt.com/app/Http/Controllers/PlanController.php
<?php

namespace App\Http\Controllers;

use App\Models\AddOn;
use App\Models\Order;
use App\Models\Plan;
use App\Models\PlanField;
use App\Models\Setting;
use App\Models\User;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Crypt;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Session;
use Illuminate\Support\Facades\Validator;
use Nwidart\Modules\Facades\Module;
use PDO;

class PlanController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index(Request $request)
    {

        if(Auth::user()->isAbleTo('plan manage'))
        {
            $plan = Plan::where('custom_plan',1)->first();

            if(Auth::user()->type == 'super admin')
            {
                $modules = Module::getByStatus(1);
                return view('plans.index',compact('modules','plan'));
            }
            else
            {
                $subscription = Session::get('Subscription');
                $admin_settings = getAdminAllSetting();
                if((isset($admin_settings['plan_package']) ? $admin_settings['plan_package'] : 'off') == 'on'  && $request['type'] != 'subscription' && $subscription != 'custom_subscription')
                {
                    return redirect()->route('active.plans');
                }
                // Pre selected module, user,and time period on pricing page
                $session = Session::get('user-module-selection');
                $modules = Module::getByStatus(1);
                $purchaseds = [];
                $active_module = ActivatedModule();
                if(count($active_module) > 0)
                {
                    foreach ($active_module as $key => $value)
                    {
                        if(array_key_exists($value,$modules) == true)
                        {
                            $module = Module::find($value);
                            $path = $module->getPath() . '/module.json';
                            $json = json_decode(file_get_contents($path), true);
                            if (!isset($json['display']) || $json['display'] == true)
                            {
                                array_push($purchaseds,$modules[$value]);
                            }
                            unset($modules[$value]);
                        }
                    }
                }

                if(((isset($admin_settings['custome_package']) ? $admin_settings['custome_package'] : 'off') == 'on' && $request['type'] == 'subscription') || ((isset($admin_settings['custome_package']) ? $admin_settings['custome_package'] : 'off') == 'on' && empty($request->all())))
                {
                    return view('plans.marketplace',compact('plan','modules','purchaseds','session'));
                }
                else
                {
                    return redirect()->back()->with('error', __('Something went wrong please try again.'));
                }
            }
        }
        else
        {
            return redirect()->back()->with('error', __('Permission denied.'));
        }
    }

    public function PlanList()
    {
        if(Auth::user()->isAbleTo('plan manage'))
        {
            if(admin_setting('plan_package') != 'on')
            {
                return redirect()->route('plans.index');
            }
            $plan = Plan::where('custom_plan',0)->get();
            $modules = Module::getByStatus(1);
            return view('plans.planslist',compact('plan','modules'));
        }
        else
        {
            return redirect()->back()->with('error', __('Something went wrong please try again.'));
        }
    }
    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        if(Auth::user()->isAbleTo('plan create'))
        {
            if(Auth::user()->type == 'super admin')
            {
                // $modules = Module::all();
                $plan_type = Plan::$plan_type;
                $modules = Module::getByStatus(1);
                return view('plans.create',compact('modules','plan_type'));
            }
        }
        else
        {
            return response()->json(['error' => __('Permission denied.')], 401);
        }
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        if(Auth::user()->isAbleTo('plan create'))
        {
            $validator = \Validator::make(
                $request->all(), [
                    'package_price_monthly' => 'required|min:0',
                    'package_price_yearly' => 'required|min:0',
                    'price_per_user_monthly' => 'required|min:0',
                    'price_per_user_yearly' => 'required|min:0',
                    'price_per_business_monthly' => 'required|min:0',
                    'price_per_business_yearly' => 'required|min:0',
                ]
            );

            if($validator->fails())
            {
                $messages = $validator->getMessageBag();

                return redirect()->back()->with('error', $messages->first());
            }

            $plan = Plan::where('custom_plan',1)->first();
            $plan->package_price_monthly = !empty($request->package_price_monthly) ? $request->package_price_monthly : 0;
            $plan->package_price_yearly = !empty($request->package_price_yearly) ? $request->package_price_yearly : 0;
            $plan->price_per_user_monthly = !empty($request->price_per_user_monthly) ? $request->price_per_user_monthly : 0;
            $plan->price_per_user_yearly = !empty($request->price_per_user_yearly) ? $request->price_per_user_yearly : 0;
            $plan->price_per_business_monthly = !empty($request->price_per_business_monthly) ? $request->price_per_business_monthly : 0;
            $plan->price_per_business_yearly = !empty($request->price_per_business_yearly) ? $request->price_per_business_yearly : 0;
            $plan->save();

            return redirect()->route('plans.index')->with('success', 'Details Saved Successfully.');

        }
        else
        {
            return redirect()->back()->with('error', __('Permission denied.'));
        }

    }

    /**
     * Display the specified resource.
     *
     * @param  \App\Models\Plan  $plan
     * @return \Illuminate\Http\Response
     */
    public function show(Plan $plan)
    {
        return redirect()->route('plans.index');
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  \App\Models\Plan  $plan
     * @return \Illuminate\Http\Response
     */
    public function edit(Plan $plan)
    {
        if(Auth::user()->isAbleTo('plan edit'))
        {
            $plan_type = Plan::$plan_type;
            $modules = Module::getByStatus(1);
            return view('plans.edit',compact('plan','modules','plan_type'));
        }
        else
        {
            return response()->json(['error' => __('Permission denied.')], 401);
        }
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \App\Models\Plan  $plan
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, Plan $plan)
    {
        if(Auth::user()->isAbleTo('plan edit'))
        {
            $validator = \Validator::make(
                $request->all(), [
                    'name' => 'required',
                    'number_of_user' => 'required|not_in:0',
                    'number_of_business' => 'required|not_in:0',
                    'modules' => 'required',
                ]
            );

            if($validator->fails())
            {
                $messages = $validator->getMessageBag();

                return redirect()->back()->with('error', $messages->first());
            }

            $plan = Plan::find($plan->id);
            $plan->name = !empty($request->name) ? $request->name : '';
            $plan->is_free_plan = !empty($request->is_free_plan) ? $request->is_free_plan : 0;
            $plan->number_of_user = !empty($request->number_of_user) ? $request->number_of_user : 0;
            $plan->number_of_business = !empty($request->number_of_business) ? $request->number_of_business : 0;
            if (!empty($request->is_free_plan)){

                $plan->package_price_monthly =  0;
                $plan->package_price_yearly =  0;
            }else{
                $plan->package_price_monthly = !empty($request->package_price_monthly) ? $request->package_price_monthly : 0;
                $plan->package_price_yearly = !empty($request->package_price_yearly) ? $request->package_price_yearly : 0;
            }
            $plan->trial = !empty($request->trial) ? $request->trial : 0;
            if($request->trial == 1){

                $plan->trial_days = !empty($request->trial_days) ? $request->trial_days : 0;
            }
            $plan->modules = !empty($request->modules) ? implode(',',$request->modules) : '';
            $plan->save();
            return redirect()->back()->with('success', 'Plan Update Successfully.');

        } else {
            return redirect()->back()->with('error', __('Permission denied.'));
        }
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  \App\Models\Plan  $plan
     * @return \Illuminate\Http\Response
     */
    public function destroy(Plan $plan)
    {
        $purchase_count = User::where('type', 'company')->where('active_plan', '=', $plan->id)->count();

        if ($purchase_count > 0) {
            return redirect()->back()->with('error', 'The company has subscribed to this plan, so it cannot be deleted.');
        } else {
            $plan->delete();

            return redirect()->back()->with('success', 'Plan Deleted Successfully.');
        }
    }

    public function PlanStore(Request $request)
    {
        if(Auth::user()->isAbleTo('plan create'))
        {
            $validator = \Validator::make(
                $request->all(), [
                    'name' => 'required',
                    'number_of_user' => 'required|not_in:0',
                    'number_of_business' => 'required|not_in:0',
                    'modules' => 'required',
                ]
            );

            if($validator->fails())
            {
                $messages = $validator->getMessageBag();

                return redirect()->back()->with('error', $messages->first());
            }
            $plan = new Plan();
            $plan->name = !empty($request->name) ? $request->name : '';
            $plan->is_free_plan = !empty($request->is_free_plan) ? $request->is_free_plan : 0;
            $plan->number_of_user = !empty($request->number_of_user) ? $request->number_of_user : 0;
            $plan->number_of_business = !empty($request->number_of_business) ? $request->number_of_business : 0;
            $plan->package_price_monthly = !empty($request->package_price_monthly) ? $request->package_price_monthly : 0;
            $plan->package_price_yearly = !empty($request->package_price_yearly) ? $request->package_price_yearly : 0;
            $plan->trial = !empty($request->trial) ? $request->trial : 0;
            if($request->trial == 1)
            {
                $plan->trial_days = !empty($request->trial_days) ? $request->trial_days : 0;
            }
            $plan->modules = !empty($request->modules) ? implode(',',$request->modules) : '';
            $plan->save();

            return redirect()->back()->with('success', 'Plan Saved Successfully.');

        }
        else
        {
            return redirect()->back()->with('error', __('Permission denied.'));
        }
    }

    public function orders()
    {
        if(Auth::user()->isAbleTo('plan orders'))
        {
            $user                       = \Auth::user();
            $orders = Order::select(
                    [
                        'orders.*',
                        'users.name as user_name',
                    ]
                )->join('users', 'orders.user_id', '=', 'users.id')->where(function($query) use ($user)
                {
                    if($user->type != 'super admin')
                    {
                        $query->where('orders.user_id', $user->id);
                    }
                })->orderBy('orders.created_at', 'DESC')->get();

            return view('plan_order.index', compact('orders'));
        }
        else
        {
            return redirect()->back()->with('error', __('Permission denied.'));
        }
    }

    public function AddOneDetail($module = null)
    {
        if(Auth::user()->isAbleTo('module edit') && !empty($module))
        {
            $addon = AddOn::where('module',$module)->first();
            if(!empty($addon))
            {
                return view('plans.module_detail',compact('addon'));
            }
            else
            {
                return response()->json(['error' => __('Something went wrong, Data not found.')], 401);
            }
        }
        else
        {
            return response()->json(['error' => __('Permission denied.')], 401);
        }
    }
    public function AddOneDetailSave(Request $request,$id = null)
    {
        if(Auth::user()->isAbleTo('module edit') && !empty($id))
        {
            $addon = AddOn::find($id);

            $validator = \Validator::make(
                $request->all(), [
                    'name' => 'required|unique:add_ons,name,'.$addon->id,
                    'monthly_price' => 'required|min:0',
                    'yearly_price' => 'required|min:0',
                    'module_logo' => 'mimes:jpg,jpeg,png',
                ]
            );

            if($validator->fails())
            {
                $messages = $validator->getMessageBag();

                return redirect()->back()->with('error', $messages->first());
            }

            $addon->name = $request->name;
            $addon->monthly_price = $request->monthly_price;
            $addon->yearly_price = $request->yearly_price;
            $addon->save();

            if (!empty($request->module_logo))
            {
                $module = Module::find($addon->module);
                if(!empty($module))
                {
                    $module->getPath();
                    $fileNameToStore = 'favicon.png';
                    $dir             = $module->getPath();
                    $request->module_logo->move($dir, $fileNameToStore);
                }

            }
            return redirect()->back()->with('success', 'Module Setting Save Successfully.');
        }
        else
        {
            return redirect()->back()->with('error', __('Permission denied.'));
        }
    }

    public function PackageData(Request $request)
    {
        if($request->has('plan_package')  && $request->plan_package != null && ($request->plan_package == "on" || admin_setting('custome_package') == "on"))
        {
             // Check if the record exists, and update or insert accordingly
            Setting::updateOrInsert([
            'key' => 'plan_package',
            'business' => getActiveBusiness(),
            'created_by' => \Auth::user()->id],['value' => $request->plan_package]);
             // Settings Cache forget
            AdminSettingCacheForget();
            return response()->json(['plan_package' => admin_setting('plan_package')]);

        }elseif($request->has('custome_package')  && $request->custome_package != null && ($request->custome_package == "on" || admin_setting('plan_package') == "on"))
        {
            Setting::updateOrInsert([
                'key' => 'custome_package',
                'business' => getActiveBusiness(),
                'created_by' => \Auth::user()->id],['value' => $request->custome_package]);
                 // Settings Cache forget
                AdminSettingCacheForget();
            return response()->json(['custome_package' => admin_setting('custome_package')]);
        }

        elseif($request->plan_package == null || $request->custome_package == null){

            return response()->json('error');
        }
    }

    public function ActivePlans(Request $request)
    {
        if(Auth::user()->isAbleTo('plan manage') && Auth::user()->type != 'super admin' )
        {
            $plan = Plan::where('custom_plan',0)->where('is_enabled',1)->get();
            $modules = Module::getByStatus(1);

            return view('plans.activeplans',compact('plan','modules'));
        }
        else
        {
            return redirect()->back()->with('error', __('Permission denied.'));
        }
    }

    public function PlanBuy(Request $request,$id)
    {
        if(Auth::user()->isAbleTo('plan manage') && Auth::user()->type != 'super admin')
        {
            try {
                $id       = Crypt::decrypt($id);
            } catch (\Throwable $th) {
                return redirect()->back()->with('error', __('Plan Not Found.'));
            }
            $plan = Plan::find($id);
            $user = User::where('id', Auth::user()->id)->first();
            if(Auth::user()->active_plan != $plan->id)
            {
                $session = Session::get('user-module-selection');
                $modules = Module::getByStatus(1);
                $active_module = ActivatedModule();
                return view('plans.planpayment',compact('plan','modules'));
            }else{
                return redirect()->route('active.plans')->with('error', __('Plan is already assign.'));
            }
        }
        else
        {
            return redirect()->back()->with('error', __('Permission denied.'));
        }
    }

    public function PlanTrial($id)
    {
        if(Auth::user()->isAbleTo('plan manage') && Auth::user()->type != 'super admin')
        {
            try {
                $id       = Crypt::decrypt($id);
            } catch (\Throwable $th) {
                return redirect()->back()->with('error', __('Plan Not Found.'));
            }
            $plan = Plan::find($id);
            $user = User::where('id', Auth::user()->id)->first();
            if(!empty($plan->trial) == 1){

                $user->assignPlan($plan->id,'Trial',$plan->modules,0,$user->id);
                $user->is_trial_done = 1;
                $user->save();
            }
            return redirect()->back()->with('success', 'Your trial has been started.');
        }
        else
        {
            return redirect()->back()->with('error', __('Permission denied.'));
        }

    }

    public function planRefund($user_id)
    {
        $user = User::find($user_id);
        
        $plan = Plan::where('is_free_plan',1)->first();
        if($plan)
        {
            $user->assignPlan($plan->id,'Month',$plan->modules,0,$user->id);
        }
        
        $admin_setting = getAdminAllSetting();
        
        $currency = isset($admin_setting['defult_currancy']) ? $admin_setting['defult_currancy'] : 'USD';

        $orderID = strtoupper(str_replace('.', '', uniqid('', true)));

        Order::create(
            [
                'order_id' => $orderID,
                'name' => null,
                'email' => null,
                'card_number' => null,
                'card_exp_month' => null,
                'card_exp_year' => null,
                'plan_name' => !empty($plan->name) ? $plan->name : 'Basic Package',
                'plan_id' => $plan->id,
                'price' => 0,
                'price_currency' => $currency,
                'txn_id' => '',
                'payment_type' => __('Zero Price'),
                'payment_status' => 'succeeded',
                'receipt' => null,
                'user_id' => $user->id,
            ]
        );

        return redirect()->back()->with('success', __('Order Refunded Successfully.'));
    }

    
    public function planEnable(Request $request)
    {
        $plan = Plan::findOrFail($request->plan_id);

        $user_with_plan = User::where('active_plan', $plan->id)->count();
        

        if ($user_with_plan > 0) {
            $msg = 'The company has subscribed to this plan, so it cannot be disable.';
            return response()->json(['error' => false, 'message' => $msg]);
        } else {
            $enable = $request->enable;
            $plan->is_enabled = $enable;
            $plan->save();
            if ($enable == "0") {
                $msg = 'Plan Successfully disable.';
            } else {
                $msg = 'Plan Successfully enable.';
            }
            return response()->json(['success' => true, 'message' => $msg]);
        }
    }
}

Anon7 - 2021