229 lines
9.7 KiB
PHP
229 lines
9.7 KiB
PHP
<?php
|
|
|
|
namespace Modules\Superadmin\Http\Controllers;
|
|
|
|
use App\System;
|
|
use App\Utils\BusinessUtil;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Http\Response;
|
|
use Illuminate\Routing\Controller;
|
|
|
|
class SuperadminSettingsController extends Controller
|
|
{
|
|
/**
|
|
* All Utils instance.
|
|
*/
|
|
protected $businessUtil;
|
|
|
|
protected $mailDrivers;
|
|
|
|
protected $backupDisk;
|
|
|
|
public function __construct(BusinessUtil $businessUtil)
|
|
{
|
|
$this->businessUtil = $businessUtil;
|
|
|
|
$this->mailDrivers = [
|
|
'smtp' => 'SMTP',
|
|
'sendmail' => 'Sendmail',
|
|
'mailgun' => 'Mailgun',
|
|
'mandrill' => 'Mandrill',
|
|
'ses' => 'SES',
|
|
'sparkpost' => 'Sparkpost',
|
|
];
|
|
|
|
$this->backupDisk = ['local' => 'Local', 'dropbox' => 'Dropbox'];
|
|
}
|
|
|
|
/**
|
|
* Show the form for editing the specified resource.
|
|
*
|
|
* @return Response
|
|
*/
|
|
public function edit()
|
|
{
|
|
if (! auth()->user()->can('superadmin')) {
|
|
abort(403, 'Unauthorized action.');
|
|
}
|
|
|
|
$settings = System::pluck('value', 'key');
|
|
$currencies = $this->businessUtil->allCurrencies();
|
|
|
|
$superadmin_version = System::getProperty('superadmin_version');
|
|
$is_demo = env('APP_ENV') == 'demo' ? true : false;
|
|
|
|
$default_values = [
|
|
'APP_NAME' => env('APP_NAME'),
|
|
'APP_TITLE' => env('APP_TITLE'),
|
|
'APP_LOCALE' => env('APP_LOCALE'),
|
|
'MAIL_MAILER' => $is_demo ? null : env('MAIL_MAILER'),
|
|
'MAIL_HOST' => $is_demo ? null : env('MAIL_HOST'),
|
|
'MAIL_PORT' => $is_demo ? null : env('MAIL_PORT'),
|
|
'MAIL_USERNAME' => $is_demo ? null : env('MAIL_USERNAME'),
|
|
'MAIL_PASSWORD' => $is_demo ? null : env('MAIL_PASSWORD'),
|
|
'MAIL_ENCRYPTION' => $is_demo ? null : env('MAIL_ENCRYPTION'),
|
|
'MAIL_FROM_ADDRESS' => $is_demo ? null : env('MAIL_FROM_ADDRESS'),
|
|
'MAIL_FROM_NAME' => $is_demo ? null : env('MAIL_FROM_NAME'),
|
|
'STRIPE_PUB_KEY' => $is_demo ? null : env('STRIPE_PUB_KEY'),
|
|
'STRIPE_SECRET_KEY' => $is_demo ? null : env('STRIPE_SECRET_KEY'),
|
|
'PAYPAL_MODE' => env('PAYPAL_MODE'),
|
|
'PAYPAL_SANDBOX_API_USERNAME' => $is_demo ? null : env('PAYPAL_SANDBOX_API_USERNAME'),
|
|
'PAYPAL_SANDBOX_API_PASSWORD' => $is_demo ? null : env('PAYPAL_SANDBOX_API_PASSWORD'),
|
|
'PAYPAL_SANDBOX_API_SECRET' => $is_demo ? null : env('PAYPAL_SANDBOX_API_SECRET'),
|
|
'PAYPAL_LIVE_API_USERNAME' => $is_demo ? null : env('PAYPAL_LIVE_API_USERNAME'),
|
|
'PAYPAL_LIVE_API_PASSWORD' => $is_demo ? null : env('PAYPAL_LIVE_API_PASSWORD'),
|
|
'PAYPAL_LIVE_API_SECRET' => $is_demo ? null : env('PAYPAL_LIVE_API_SECRET'),
|
|
'BACKUP_DISK' => env('BACKUP_DISK'),
|
|
'DROPBOX_ACCESS_TOKEN' => $is_demo ? null : env('DROPBOX_ACCESS_TOKEN'),
|
|
'RAZORPAY_KEY_ID' => $is_demo ? null : env('RAZORPAY_KEY_ID'),
|
|
'RAZORPAY_KEY_SECRET' => $is_demo ? null : env('RAZORPAY_KEY_SECRET'),
|
|
|
|
'PESAPAL_CONSUMER_KEY' => $is_demo ? null : env('PESAPAL_CONSUMER_KEY'),
|
|
'PESAPAL_CONSUMER_SECRET' => $is_demo ? null : env('PESAPAL_CONSUMER_SECRET'),
|
|
'PESAPAL_LIVE' => $is_demo ? null : env('PESAPAL_LIVE'),
|
|
'PUSHER_APP_ID' => $is_demo ? null : env('PUSHER_APP_ID'),
|
|
'PUSHER_APP_KEY' => $is_demo ? null : env('PUSHER_APP_KEY'),
|
|
'PUSHER_APP_SECRET' => $is_demo ? null : env('PUSHER_APP_SECRET'),
|
|
'PUSHER_APP_CLUSTER' => $is_demo ? null : env('PUSHER_APP_CLUSTER'),
|
|
'GOOGLE_MAP_API_KEY' => $is_demo ? null : env('GOOGLE_MAP_API_KEY'),
|
|
'ALLOW_REGISTRATION' => $is_demo ? null : env('ALLOW_REGISTRATION'),
|
|
'PAYSTACK_PUBLIC_KEY' => $is_demo ? null : env('PAYSTACK_PUBLIC_KEY'),
|
|
'PAYSTACK_SECRET_KEY' => $is_demo ? null : env('PAYSTACK_SECRET_KEY'),
|
|
'FLUTTERWAVE_PUBLIC_KEY' => $is_demo ? null : env('FLUTTERWAVE_PUBLIC_KEY'),
|
|
'FLUTTERWAVE_SECRET_KEY' => $is_demo ? null : env('FLUTTERWAVE_SECRET_KEY'),
|
|
'FLUTTERWAVE_ENCRYPTION_KEY' => $is_demo ? null : env('FLUTTERWAVE_ENCRYPTION_KEY'),
|
|
];
|
|
$mail_drivers = $this->mailDrivers;
|
|
|
|
$config_languages = config('constants.langs');
|
|
$languages = [];
|
|
foreach ($config_languages as $key => $value) {
|
|
$languages[$key] = $value['full_name'];
|
|
}
|
|
$backup_disk = $this->backupDisk;
|
|
|
|
$cron_job_command = $this->businessUtil->getCronJobCommand();
|
|
|
|
return view('superadmin::superadmin_settings.edit')
|
|
->with(compact(
|
|
'currencies',
|
|
'settings',
|
|
'superadmin_version',
|
|
'mail_drivers',
|
|
'languages',
|
|
'default_values',
|
|
'backup_disk',
|
|
'cron_job_command'
|
|
));
|
|
}
|
|
|
|
/**
|
|
* Update the specified resource in storage.
|
|
*
|
|
* @param Request $request
|
|
* @return Response
|
|
*/
|
|
public function update(Request $request)
|
|
{
|
|
if (! auth()->user()->can('superadmin')) {
|
|
abort(403, 'Unauthorized action.');
|
|
}
|
|
|
|
try {
|
|
|
|
//Disable .ENV settings in demo
|
|
if (config('app.env') == 'demo') {
|
|
$output = ['success' => 0,
|
|
'msg' => 'Feature disabled in demo!!',
|
|
];
|
|
|
|
return back()->with('status', $output);
|
|
}
|
|
|
|
$system_settings = $request->only(['app_currency_id', 'invoice_business_name', 'email', 'invoice_business_landmark', 'invoice_business_zip', 'invoice_business_state', 'invoice_business_city', 'invoice_business_country', 'package_expiry_alert_days', 'superadmin_register_tc', 'welcome_email_subject', 'welcome_email_body', 'additional_js', 'additional_css', 'offline_payment_details']);
|
|
|
|
//Checkboxes
|
|
$checkboxes = ['enable_business_based_username', 'superadmin_enable_register_tc', 'allow_email_settings_to_businesses', 'enable_new_business_registration_notification', 'enable_new_subscription_notification', 'enable_welcome_email', 'enable_offline_payment'];
|
|
$input = $request->input();
|
|
foreach ($checkboxes as $checkbox) {
|
|
$system_settings[$checkbox] = ! empty($input[$checkbox]) ? 1 : 0;
|
|
}
|
|
|
|
foreach ($system_settings as $key => $setting) {
|
|
System::updateOrCreate(
|
|
['key' => $key],
|
|
['value' => $setting]
|
|
);
|
|
}
|
|
|
|
$env_settings = $request->only(['APP_NAME', 'APP_TITLE',
|
|
'APP_LOCALE', 'MAIL_MAILER', 'MAIL_HOST', 'MAIL_PORT',
|
|
'MAIL_USERNAME', 'MAIL_PASSWORD', 'MAIL_ENCRYPTION',
|
|
'MAIL_FROM_ADDRESS', 'MAIL_FROM_NAME', 'STRIPE_PUB_KEY',
|
|
'STRIPE_SECRET_KEY', 'PAYPAL_MODE',
|
|
'PAYPAL_SANDBOX_API_USERNAME',
|
|
'PAYPAL_SANDBOX_API_PASSWORD',
|
|
'PAYPAL_SANDBOX_API_SECRET', 'PAYPAL_LIVE_API_USERNAME',
|
|
'PAYPAL_LIVE_API_PASSWORD', 'PAYPAL_LIVE_API_SECRET',
|
|
'BACKUP_DISK', 'DROPBOX_ACCESS_TOKEN',
|
|
'RAZORPAY_KEY_ID', 'RAZORPAY_KEY_SECRET',
|
|
'PESAPAL_CONSUMER_KEY', 'PESAPAL_CONSUMER_SECRET', 'PESAPAL_LIVE',
|
|
'PUSHER_APP_ID', 'PUSHER_APP_KEY', 'PUSHER_APP_SECRET',
|
|
'PUSHER_APP_CLUSTER', 'GOOGLE_MAP_API_KEY', 'PAYSTACK_SECRET_KEY',
|
|
'PAYSTACK_PUBLIC_KEY', 'FLUTTERWAVE_PUBLIC_KEY',
|
|
'FLUTTERWAVE_SECRET_KEY', 'FLUTTERWAVE_ENCRYPTION_KEY', 'MAPBOX_ACCESS_TOKEN',
|
|
]);
|
|
|
|
$env_settings['ALLOW_REGISTRATION'] = ! empty($request->input('ALLOW_REGISTRATION')) ? 'true' : 'false';
|
|
$env_settings['BROADCAST_DRIVER'] = 'pusher';
|
|
|
|
$found_envs = [];
|
|
$env_path = base_path('.env');
|
|
$env_lines = file($env_path);
|
|
foreach ($env_settings as $index => $value) {
|
|
foreach ($env_lines as $key => $line) {
|
|
//Check if present then replace it.
|
|
if (strpos($line, $index) !== false) {
|
|
$env_lines[$key] = $index.'="'.$value.'"'.PHP_EOL;
|
|
|
|
$found_envs[] = $index;
|
|
}
|
|
}
|
|
}
|
|
|
|
//Add the missing env settings
|
|
$missing_envs = array_diff(array_keys($env_settings), $found_envs);
|
|
if (! empty($missing_envs)) {
|
|
$missing_envs = array_values($missing_envs);
|
|
foreach ($missing_envs as $k => $key) {
|
|
if ($k == 0) {
|
|
$env_lines[] = PHP_EOL.$key.'="'.$env_settings[$key].'"'.PHP_EOL;
|
|
} else {
|
|
$env_lines[] = $key.'="'.$env_settings[$key].'"'.PHP_EOL;
|
|
}
|
|
}
|
|
}
|
|
|
|
$env_content = implode('', $env_lines);
|
|
|
|
if (is_writable($env_path) && file_put_contents($env_path, $env_content)) {
|
|
$output = ['success' => 1,
|
|
'msg' => __('lang_v1.success'),
|
|
];
|
|
} else {
|
|
$output = ['success' => 0, 'msg' => 'Some setting could not be saved, make sure .env file has 644 permission & owned by www-data user'];
|
|
}
|
|
} catch (\Exception $e) {
|
|
\Log::emergency('File:'.$e->getFile().'Line:'.$e->getLine().'Message:'.$e->getMessage());
|
|
|
|
$output = ['success' => 0,
|
|
'msg' => __('messages.something_went_wrong'),
|
|
];
|
|
}
|
|
|
|
return redirect()
|
|
->action([\Modules\Superadmin\Http\Controllers\SuperadminSettingsController::class, 'edit'])
|
|
->with('status', $output);
|
|
}
|
|
}
|