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/ModuleController.php
<?php

namespace App\Http\Controllers;

use App\Events\CancelSubscription;
use App\Models\AddOn;
use App\Models\Sidebar;
use App\Models\User;
use App\Models\userActiveModule;
use Nwidart\Modules\Facades\Module;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Artisan;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Session;
use Spatie\Permission\Contracts\Permission;
use Spatie\Permission\Models\Permission as ModelsPermission;
use ZipArchive;

class ModuleController extends Controller
{
    public function index(){
        if(Auth::user()->can('module manage'))
        {
            $modules = Module::all();
            $module_path = Module::getPath();
            return view('module.index',compact('modules','module_path'));
        }
        else
        {
            return redirect()->back()->with('error', __('Permission denied.'));
        }
    }
    public function add(){
        if(Auth::user()->can('module add'))
        {
            return view('module.add');
        }
        else
        {
            return redirect()->back()->with('error', __('Permission denied.'));
        }
    }
    public function enable(Request $request)
    {
        $module = Module::find($request->name);
        if(!empty($module))
        {
            // Sidebar Performance Changes
            Cache::flush();

            \App::setLocale('en');

            if($module->isEnabled())
            {
                $check_child_module = $this->Check_Child_Module($module);
                if($check_child_module == true)
                {
                    Sidebar::where('module',$request->name)->update(['is_visible'=>0]);
                    $module->disable();
                    return redirect()->back()->with('success', __('Module Disable Successfully!'));
                }
                else
                {
                    return redirect()->back()->with('error', __($check_child_module['msg']));
                }

            }
            else
            {
                $check_parent_module = $this->Check_Parent_Module($module);
                if($check_parent_module['status'] == true)
                {
                    Sidebar::where('module',$request->name)->update(['is_visible'=>1]);
                    Artisan::call('module:migrate '.$request->name);
                    Artisan::call('module:seed '.$request->name);

                    $addon = AddOn::where('module',$request->name)->first();
                    if(empty($addon))
                    {
                        $addon = new AddOn;
                        $addon->module = $request->name;
                        $addon->name = Module_Alias_Name($request->name);
                        $addon->monthly_price = 0;
                        $addon->yearly_price = 0;

                        $addon->save();
                    }
                    $module->enable();
                    // Artisan::call('module:migrate-rollback '.$module);
                    return redirect()->back()->with('success', __('Module Enable Successfully!'));
                }
                else
                {
                    return redirect()->back()->with('error', __($check_parent_module['msg']));
                }

            }
        }else{
            return redirect()->back()->with('error', __('oops something wren wrong!'));
        }
    }
    // public function enable(Request $request){
    //     $module = Module::find($request->name);
    //     if(!empty($module))
    //     {
    //         if($module->isEnabled()){
    //             $module->disable();
    //             Sidebar::where('module',$request->name)->update(['is_visible'=>0]);
    //             return redirect()->back()->with('success', __('Module Disable Successfully!'));
    //         }else{
    //             $module->enable();
    //             Artisan::call('module:migrate '.$request->name);
    //             Artisan::call('module:seed '.$request->name);
    //             Sidebar::where('module',$request->name)->update(['is_visible'=>1]);
    //             return redirect()->back()->with('success', __('Module Enable Successfully!'));
    //         }
    //     }else{

    //     }
    // }
    public function install(Request $request){
        $zip = new ZipArchive;
        try {
                $res = $zip->open($request->file);
          } catch (\Exception $e) {
                return error_res($e->getMessage());
          }
        if ($res === TRUE)
        {
            $zip->extractTo('Modules/');
            $zip->close();
            return success_res('Install successfully.');
        } else {
            return error_res('oops something wren wrong');
        }
        return error_res('oops something wren wrong');
    }

    public function remove($module)
    {
        if(Auth::user()->can('module remove'))
        {
            $module = Module::find($module);
            if($module)
            {
                $module->disable();
                $module->delete();
                Sidebar::where('module',$module)->delete();
                ModelsPermission::where('module',$module)->delete();
                Artisan::call('module:migrate-refresh '.$module);
                AddOn::where('module',$module)->delete();

                // Sidebar Performance Changes
                Cache::flush();
                return redirect()->back()->with('success', __('Module delete successfully!'));
            }
            else
            {
                return redirect()->back()->with('error', __('oops something wren wrong!'));
            }
        }
        else
        {
            return redirect()->back()->with('error', __('Permission denied.'));
        }
    }
    public function Check_Parent_Module($module)
    {
        $path =$module->getPath().'/module.json';
        $json = json_decode(file_get_contents($path), true);
        $data['status'] = true;
        $data['msg'] = '';

        if(isset($json['parent_module']) && !empty($json['parent_module']))
        {
            foreach ($json['parent_module'] as $key => $value) {
                $modules = implode(',',$json['parent_module']);
                $parent_module = module_is_active($value);
                if($parent_module == true)
                {
                    $module = Module::find($value);
                    if($module)
                    {
                         $this->Check_Parent_Module($module);
                    }
                }
                else
                {
                    $data['status'] = false;
                    $data['msg'] = 'please activate this module '.$modules;
                    return $data;
                }
            }
            return $data;
        }
        else
        {
            return $data;
        }
    }
    public function Check_Child_Module($module)
    {
        $path =$module->getPath().'/module.json';
        $json = json_decode(file_get_contents($path), true);
        $status = true;
        if(isset($json['child_module']) && !empty($json['child_module']))
        {
            foreach ($json['child_module'] as $key => $value)
            {
                $child_module = module_is_active($value);
                if($child_module == true)
                {
                    $module = Module::find($value);
                    Sidebar::where('module',$value)->update(['is_visible'=>0]);
                    $module->disable();
                    if($module)
                    {
                        $this->Check_Child_Module($module);
                    }
                }
            }
            return true;
        }
        else
        {
            return true;
        }
    }
    public function GuestModuleSelection(Request $request)
    {
        try
        {
            $post = $request->all();
            unset($post['_token']);
            Session::put('user-module-selection', $post);
            Session::put('Subscription', 'custom_subscription');

        }
        catch (\Throwable $th)
        {

        }
    }
    public function ModuleReset(Request $request)
    {
       $value = Session::get('user-module-selection');
       if(!empty($value))
       {
         Session::forget('user-module-selection');
       }
       return redirect()->route('plans.index');
    }
    public function CancelAddOn($name = null)
    {
        if(!empty($name))
        {
            $name         = \Illuminate\Support\Facades\Crypt::decrypt($name);
            $user_module = explode(',',Auth::user()->active_module);
            $user_module = array_values(array_diff($user_module, array($name)));
            $user = User::find(Auth::user()->id);
            $user->active_module = implode(',',$user_module);
            $user->save();

              // first parameter workspace
              event(new CancelSubscription(creatorId(),getActiveWorkSpace(),$name));

            // Sidebar Performance Changes

            userActiveModule::where('user_id', Auth::user()->id)->where('module', $name)->delete();

            Cache::flush();
            return redirect()->back()->with('success', __('Successfully cancel subscription.'));
        }
        else
        {
            return redirect()->back()->with('error', __('Something went wrong please try again .'));
        }
    }
}