|
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 : |
<?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\Auth;
use Illuminate\Support\Facades\Cache;
use App\Models\Permission;
use Illuminate\Support\Facades\Artisan;
use Illuminate\Support\Facades\Session;
use Symfony\Component\Process\Process;
use Symfony\Component\Process\Exception\ProcessFailedException;
use ZipArchive;
class ModuleController extends Controller
{
public function index(){
if(Auth::user()->isAbleTo('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()->isAbleTo('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
sideMenuCacheForget('all');
\App::setLocale('en');
if($module->isEnabled())
{
$check_child_module = $this->Check_Child_Module($module);
if($check_child_module == true)
{
$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)
{
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();
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!'));
}
}
private function installDependencies($moduleName)
{
// Define the dependencies for each module
$dependencies = [
'Paypal' => ['srmklive/paypal' => '^3.0'],
// Add more modules and their dependencies as needed
];
if (array_key_exists($moduleName, $dependencies)) {
$requiredPackages = $dependencies[$moduleName];
foreach ($requiredPackages as $package => $version) {
// Use Composer to install the required packages
try {
putenv('COMPOSER_HOME=' . base_path('vendor/bin/composer'));
$process = new Process(['composer', 'require', $package . ':' . $version]);
$process->setEnv(['COMPOSER_HOME' => base_path('vendor/bin/composer')]); // Set the environment variable
$process->run();
if (!$process->isSuccessful()) {
throw new ProcessFailedException($process);
}
} catch (\Throwable $th) {
}
}
}
}
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()->isAbleTo('module remove'))
{
$module = Module::find($module);
if($module)
{
$module->disable();
$module->delete();
Permission::where('module',$module)->delete();
Artisan::call('module:migrate-refresh '.$module);
AddOn::where('module',$module)->delete();
// Sidebar Performance Changes
sideMenuCacheForget('all');
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);
$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();
event(new CancelSubscription(creatorId(),getActiveWorkSpace(),$name));
userActiveModule::where('user_id', Auth::user()->id)->where('module', $name)->delete();
// Settings Cache forget
comapnySettingCacheForget();
sideMenuCacheForget();
return redirect()->back()->with('success', __('Successfully cancel subscription.'));
}
else
{
return redirect()->back()->with('error', __('Something went wrong please try again .'));
}
}
}