<?php use App\Models\LmsInstitute; use Illuminate\Http\Request; use Illuminate\Support\Carbon; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Log; use Brian2694\Toastr\Facades\Toastr; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Cache; use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\Session; use Illuminate\Support\Facades\Storage; use Illuminate\Database\Schema\Blueprint; use Modules\LmsSaas\Entities\SaasCheckout; use Modules\LmsSaas\Entities\SaasInstitutePlanManagement; use Modules\PaymentMethodSetting\Entities\PaymentMethodCredential; if (!function_exists('AddLmsId')) { function AddLmsId() { $tables = DB::select('SHOW TABLES'); $database_tables = []; foreach ($tables as $key => $table_name) { $table_name = json_encode(array_values(get_object_vars($table_name))); $table_name = str_replace(['["', '"]'], '', $table_name); Schema::table($table_name, function (Blueprint $table) use ($table_name) { if (!Schema::hasColumn($table_name, 'lms_id')) { $table->tinyInteger('lms_id')->default(1); } }); } } } if (!function_exists('SaasDomain')) { function SaasDomain() { $domain = 'main'; $saas_module = 'Modules/LmsSaas/Providers/LmsSaasServiceProvider.php'; $saas_module2 = 'Modules/LmsSaasMD/Providers/LmsSaasMDServiceProvider.php'; if (file_exists($saas_module) || file_exists($saas_module2)) { $module_status = json_decode(file_get_contents('modules_statuses.json'), true); if ((isset($module_status['LmsSaas']) && $module_status['LmsSaas']) || (isset($module_status['LmsSaasMD']) && $module_status['LmsSaasMD'])) { if (config('app.short_url') != request()->getHost()) { $short_url = preg_replace('#^https?://#', '', rtrim(env('APP_URL', 'http://localhost'), '/')); $domain = str_replace('.' . $short_url, '', request()->getHost()); } } } if (isModuleActive('SaasBranch')) { $lmsParent = LmsInstitute::on('mysql')->whereDomain($domain)->first(); if (!empty($lmsParent->parent_id)) { $lms = LmsInstitute::on('mysql')->find($lmsParent->parent_id); if ($lms) { $domain = $lms->domain; } } } return $domain; } } if (!function_exists('SaasFullDomain')) { function SaasFullDomain() { return saasDomain() . '.' . config('app.short_url'); } } if (!function_exists('UserDomainCheck')) { function UserDomainCheck() { if (Auth::check()) { $user_domain = LmsInstitute::find(Auth::user()->lms_id); if ($user_domain->domain != SaasDomain()) { return false; } else { return true; } } } } if (!function_exists('SaasInstitute')) { function SaasInstitute() { try { DB::connection()->getPdo(); $hasConnection = true; } catch (\Throwable $th) { $hasConnection = false; } if ($hasConnection && Schema::hasTable('lms_institutes')) { try { $saasInstitute = Cache::rememberForever('saasInstitute' . SaasDomain(), function () { $lms = LmsInstitute::where('domain', SaasDomain())->first(); if (!empty($lms->parent_id)) { $parentLms = LmsInstitute::find($lms->parent_id); if ($parentLms) { return $parentLms; } } return $lms; }); return $saasInstitute; } catch (\Throwable $th) { return LmsInstitute::first(); } } else { $institute = collect(); $institute->name = 'InfixLMS'; $institute->description = 'InfixLMS'; $institute->domain = 'main'; $institute->user_id = 1; $institute->status = 1; $institute->id = 1; return $institute; } } } // if (!function_exists('PaymentMethodCredential')) { // function PaymentMethodCredential() // { // try { // return app('getPaymentSetting'); // } catch (\Throwable $th) { // return "false"; // } // } // } if (!function_exists('getPaymentEnv')) { function getPaymentEnv($value) { try { $domain = SaasDomain(); $path = base_path('storage/app/payment.json'); if (file_exists($path)) { $data = json_decode(file_get_contents($path), true); $settings = new \stdClass; if (!empty($data)) { foreach (array_keys($data) as $property) { $settings->{$property} = $data[$property]; } } return $settings->$domain[$value] ?? ''; } else { return ''; } } catch (\Throwable $th) { return "false"; } } } if (!function_exists('getMainPaymentEnv')) { function getMainPaymentEnv($value) { try { $domain = 'main'; $path = base_path('storage/app/payment.json'); if (file_exists($path)) { $data = json_decode(file_get_contents($path), true); $settings = new \stdClass; if (!empty($data)) { foreach (array_keys($data) as $property) { $settings->{$property} = $data[$property]; } } return $settings->$domain[$value] ?? ''; } else { return ''; } } catch (\Throwable $th) { return "false"; } } } if (!function_exists('GeneratePaymentSetting')) { function GeneratePaymentSetting($domain) { $path = Storage::path('payment.json'); $settings = PaymentMethodCredential::first()->makeHidden(['id', 'created_at', 'updated_at'])->toArray(); $new_setting = new \stdClass; foreach ($settings as $key => $value) { $new_setting->{$key} = $value; } if (!Storage::has('payment.json')) { $strJsonFileContents = null; } else { $strJsonFileContents = file_get_contents($path); } $file_data = json_decode($strJsonFileContents, true); $setting_array[$domain] = $new_setting; if (!empty($file_data)) { $merged_array = array_merge($file_data, $setting_array); } else { $merged_array = $setting_array; } $merged_array = json_encode($merged_array, JSON_PRETTY_PRINT); file_put_contents($path, $merged_array); } } if (!function_exists('SaasEnvSetting')) { function SaasEnvSetting($domain, $key, $value) { $path = Storage::path('saas_env.json'); if (!Storage::has('saas_env.json')) { $strJsonFileContents = null; } else { $strJsonFileContents = file_get_contents($path); } $file_data = json_decode($strJsonFileContents, true); // dd($file_data[$domain]); if ($file_data) { if (in_array($domain, array_keys($file_data))) { $existing_data = $file_data[$domain]; $existing_data[$key] = $value; $new_setting = new \stdClass; foreach ($existing_data as $key => $data) { $new_setting->{$key} = $data; } $setting_array[$domain] = $new_setting; $merged_array = array_merge($file_data, $setting_array); $merged_array = json_encode($merged_array, JSON_PRETTY_PRINT); file_put_contents($path, $merged_array); } else { $existing_data = []; $existing_data[$key] = $value; $new_setting = new \stdClass; foreach ($existing_data as $key => $data) { $new_setting->{$key} = $data; } $setting_array[$domain] = $new_setting; $merged_array = array_merge($file_data, $setting_array); $merged_array = json_encode($merged_array, JSON_PRETTY_PRINT); file_put_contents($path, $merged_array); } } else { $new_setting = new \stdClass; $new_setting->{$key} = $value; $setting_array[$domain] = $new_setting; if (!empty($file_data)) { $merged_array = array_merge($file_data, $setting_array); $merged_array = json_encode($merged_array, JSON_PRETTY_PRINT); } else { $merged_array = json_encode($setting_array, JSON_PRETTY_PRINT); } file_put_contents($path, $merged_array); } } } if (!function_exists('saasEnv')) { function saasEnv($value, $default = null) { try { if (empty($value)) { $value = $default; } $domain = SaasDomain(); $path = base_path('storage/app/saas_env.json'); if (file_exists($path)) { $data = json_decode(file_get_contents($path), true); $settings = new \stdClass; if (!empty($data)) { foreach (array_keys($data) as $property) { $settings->{$property} = $data[$property]; } } } $env = $settings->$domain[$value] ?? ''; } catch (\Throwable $th) { $env = null; } if (empty($env)) { $env = $default; } return $env; } } if (!function_exists('hasActiveSaasPlan')) { function hasActiveSaasPlan() { try { if (SaasDomain() != 'main') { $institute_id = SaasInstitute()->id; $active_plan = SaasInstitutePlanManagement::on('mysql')->where('lms_id', $institute_id)->where('validity', 1)->first(); if ($active_plan) { if ($active_plan->unlimited == 1) { return true; } $today = Carbon::now(); $service_end_date = Carbon::createFromFormat('Y-m-d H:i:s', $active_plan->service_end_date); $result = $today->gt($service_end_date); if (!$result) { return true; } } return false; } else { return true; } } catch (\Exception $exception) { return false; } } } if (!function_exists('saasPlanCheck')) { function saasPlanCheck($value, $count = null) { try { if (SaasDomain() != 'main') { $institute_id = SaasInstitute()->id; $active_plan = SaasInstitutePlanManagement::on('mysql')->where('lms_id', $institute_id)->where('validity', 1)->first(); if ($active_plan) { switch ($value) { case('student'): if (!$active_plan->student_access) { return true; } break; case('instructor'): if (!$active_plan->instructor_access) { return true; } break; case('course'): if (!$active_plan->course_access) { return true; } break; case('meeting'): if (!$active_plan->meeting_access) { return true; } break; case('quiz'): if (!$active_plan->quiz_access) { return true; } break; case('blog_post'): if (!$active_plan->blog_access) { return true; } break; } $today = Carbon::now(); $service_end_date = Carbon::createFromFormat('Y-m-d H:i:s', $active_plan->service_end_date); $result = $today->gt($service_end_date); if ($active_plan->unlimited == 1) { $result = false; } if (!$result) { $checkout = SaasCheckout::on('mysql')->with('plan')->where('lms_id', $institute_id)->get(); if ($value == 'quiz') { $plan_limit_value = 'quiz_question_limit'; } else { $plan_limit_value = $value . '_limit'; } foreach ($checkout as $check) { if ($check->plan->$plan_limit_value == 0) { return false; } } if ($active_plan->{$value} > 0) { if ($value == 'quiz') { if ($count <= $active_plan->{$value}) { return false; } else { return true; } } elseif ($value == 'upload_limit') { if ($count <= $active_plan->{$value}) { return false; } else { return true; } } else { if ($active_plan->{$value} > 0) { return false; } else { return true; } } } else { return true; } } else { return true; } } else { return true; } } else { return false; } } catch (\Throwable $th) { return true; } } } if (!function_exists('saasPlanManagement')) { function saasPlanManagement($feature, $type, $size = null) { if (SaasDomain() != 'main') { $institute_id = SaasInstitute()->id; $active_plan = SaasInstitutePlanManagement::on('mysql')->where('lms_id', $institute_id)->where('validity', 1)->first(); if ($feature == 'upload_limit') { if ($type == 'create') { $active_plan->{$feature} = $active_plan->{$feature} -= $size; } if ($type == 'delete') { $active_plan->{$feature} = $active_plan->{$feature} += $size; } } if ($type == 'create') { $active_plan->{$feature} = $active_plan->{$feature} -= 1; } if ($type == 'delete') { $active_plan->{$feature} = $active_plan->{$feature} += 1; } if ($active_plan->{$feature} < 0) { $active_plan->{$feature} = 0; } $active_plan->save(); } } } if (!function_exists('saasDb')) { function saasDb($value) { try { $domain = SaasDomain(); $path = base_path('storage/app/saas_db.json'); if (file_exists($path)) { $data = json_decode(file_get_contents($path), true); $settings = new \stdClass; if (!empty($data)) { foreach (array_keys($data) as $property) { $settings->{$property} = $data[$property]; } } } return $settings->$domain[$value] ?? null; } catch (\Throwable $th) { return null; } } } if (!function_exists('SaasDbSetting')) { function SaasDbSetting($domain, $key, $value) { $path = Storage::path('saas_db.json'); if (!Storage::has('saas_db.json')) { $data = \App\Models\LmsInstitute::get(['db_database', 'db_username', 'db_password', 'domain']); $content = []; foreach ($data as $row) { $content[$row->domain] = [ "DB_DATABASE" => $row->domain == 'main' ? env('DB_DATABASE') : $row->db_database, "DB_USERNAME" => $row->domain == 'main' ? env('DB_USERNAME') : $row->db_username, "DB_PASSWORD" => $row->domain == 'main' ? env('DB_PASSWORD') : $row->db_password, ]; } file_put_contents($path, json_encode($content, JSON_PRETTY_PRINT)); $strJsonFileContents = null; } else { $strJsonFileContents = file_get_contents($path); } $file_data = json_decode($strJsonFileContents, true); // dd($file_data[$domain]); if ($file_data) { if (in_array($domain, array_keys($file_data))) { $existing_data = $file_data[$domain]; $existing_data[$key] = $value; $new_setting = new \stdClass; foreach ($existing_data as $key => $data) { $new_setting->{$key} = $data; } $setting_array[$domain] = $new_setting; $merged_array = array_merge($file_data, $setting_array); $merged_array = json_encode($merged_array, JSON_PRETTY_PRINT); file_put_contents($path, $merged_array); } else { $existing_data = []; $existing_data[$key] = $value; $new_setting = new \stdClass; foreach ($existing_data as $key => $data) { $new_setting->{$key} = $data; } $setting_array[$domain] = $new_setting; $merged_array = array_merge($file_data, $setting_array); $merged_array = json_encode($merged_array, JSON_PRETTY_PRINT); file_put_contents($path, $merged_array); } } else { $new_setting = new \stdClass; $new_setting->{$key} = $value; $setting_array[$domain] = $new_setting; if (!empty($file_data)) { $merged_array = array_merge($file_data, $setting_array); $merged_array = json_encode($merged_array, JSON_PRETTY_PRINT); } else { $merged_array = json_encode($setting_array, JSON_PRETTY_PRINT); } file_put_contents($path, $merged_array); } } } if (!function_exists('DbConnect')) { function DbConnect() { DB::setDefaultConnection('mysql_md'); DB::purge('mysql_md'); DB::reconnect('mysql_md'); } }