MOON
Server: Apache
System: Linux 101-53-147-124.cprapid.com 4.18.0-553.121.1.el8_10.x86_64 #1 SMP Thu Apr 30 09:06:34 EDT 2026 x86_64
User: clientsoftwares (1005)
PHP: 8.2.30
Disabled: show_source, system, shell_exec, passthru, exec, popen, proc_open
Upload Files
File: /home/clientsoftwares/www/erp.clientsoftwares.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\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;
use Rawilk\Settings\Support\Context;

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

        if(Auth::user()->can('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');
                if(admin_setting('plan_package') == '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((admin_setting('custome_package') == 'on' && $request['type'] == 'subscription') || (admin_setting('custome_package') == '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()->can('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()->can('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()->can('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_workspace_monthly' => 'required|min:0',
                    'price_per_workspace_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_workspace_monthly = !empty($request->price_per_workspace_monthly) ? $request->price_per_workspace_monthly : 0;
            $plan->price_per_workspace_yearly = !empty($request->price_per_workspace_yearly) ? $request->price_per_workspace_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()->can('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()->can('plan edit'))
        {
            $validator = \Validator::make(
                $request->all(), [
                    'name' => 'required',
                    'number_of_user' => 'required|not_in:0',
                    'number_of_workspace' => '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_workspace = !empty($request->number_of_workspace) ? $request->number_of_workspace : 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)
    {
        //
    }

    public function PlanStore(Request $request)
    {
        if(Auth::user()->can('plan create'))
        {
            $validator = \Validator::make(
                $request->all(), [
                    'name' => 'required',
                    'number_of_user' => 'required|not_in:0',
                    'number_of_workspace' => '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_workspace = !empty($request->number_of_workspace) ? $request->number_of_workspace : 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 payment($plan_id)
    {
        if(Auth::user()->can('plan purchase'))
        {
            $plan_id = decrypt($plan_id);
            $plan = Plan::find($plan_id);
            return view('plans.payment',compact('plan'));
        }
        else
        {
            return redirect()->back()->with('error', __('Permission denied.'));
        }
    }

    public function orders()
    {
        if(Auth::user()->can('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()->can('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()->can('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)
    {
        $userContext = new Context(['user_id' => \Auth::user()->id,'workspace_id'=>getActiveWorkSpace()]);
        if($request->has('plan_package')  && $request->plan_package != null && ($request->plan_package == "on" || admin_setting('custome_package') == "on"))
        {
            \Settings::context($userContext)->set('plan_package', $request->plan_package);
            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"))
        {
            \Settings::context($userContext)->set('custome_package', $request->custome_package);
            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()->can('plan manage') && Auth::user()->type != 'super admin' )
        {
            $plan = Plan::where('custom_plan',0)->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()->can('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();
                // if($plan->is_free_plan == 1)
                // {
                //     $assignPlan = $user->assignPlan($plan->id,'Month',$plan->modules,0,$user->id);
                //     if($assignPlan['is_success']){

                //         return redirect()->back()->with('success', __('Plan activated Successfully!'));
                //     }
                // }
                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()->can('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.'));
        }

    }
}