<?php
namespace App\Http\Controllers;
use App\Models\BusinessSetting;
use Artisan;
use CoreComponentRepository;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
class BusinessSettingsController extends Controller
{
public function __construct()
{
// Staff Permission Check
$this->middleware(['permission:seller_commission_configuration'])->only('vendor_commission');
$this->middleware(['permission:seller_verification_form_configuration'])->only('seller_verification_form');
$this->middleware(['permission:general_settings'])->only('general_setting');
$this->middleware(['permission:features_activation'])->only('activation');
$this->middleware(['permission:smtp_settings'])->only('smtp_settings');
$this->middleware(['permission:payment_methods_configurations'])->only('payment_method');
$this->middleware(['permission:order_configuration'])->only('order_configuration');
$this->middleware(['permission:file_system_&_cache_configuration'])->only('file_system');
$this->middleware(['permission:social_media_logins'])->only('social_login');
$this->middleware(['permission:facebook_chat'])->only('facebook_chat');
$this->middleware(['permission:facebook_comment'])->only('facebook_comment');
$this->middleware(['permission:analytics_tools_configuration'])->only('google_analytics');
$this->middleware(['permission:google_recaptcha_configuration'])->only('google_recaptcha');
$this->middleware(['permission:google_map_setting'])->only('google_map');
$this->middleware(['permission:google_firebase_setting'])->only('google_firebase');
$this->middleware(['permission:shipping_configuration'])->only('shipping_configuration');
}
public function general_setting(Request $request)
{
CoreComponentRepository::instantiateShopRepository();
CoreComponentRepository::initializeCache();
return view('backend.setup_configurations.general_settings');
}
public function activation(Request $request)
{
CoreComponentRepository::instantiateShopRepository();
CoreComponentRepository::initializeCache();
return view('backend.setup_configurations.activation');
}
public function social_login(Request $request)
{
CoreComponentRepository::instantiateShopRepository();
CoreComponentRepository::initializeCache();
return view('backend.setup_configurations.social_login');
}
public function smtp_settings(Request $request)
{
CoreComponentRepository::instantiateShopRepository();
CoreComponentRepository::initializeCache();
return view('backend.setup_configurations.smtp_settings');
}
public function google_analytics(Request $request)
{
CoreComponentRepository::instantiateShopRepository();
CoreComponentRepository::initializeCache();
return view('backend.setup_configurations.google_configuration.google_analytics');
}
public function google_recaptcha(Request $request)
{
CoreComponentRepository::instantiateShopRepository();
CoreComponentRepository::initializeCache();
return view('backend.setup_configurations.google_configuration.google_recaptcha');
}
public function google_map(Request $request)
{
CoreComponentRepository::instantiateShopRepository();
CoreComponentRepository::initializeCache();
return view('backend.setup_configurations.google_configuration.google_map');
}
public function google_firebase(Request $request)
{
CoreComponentRepository::instantiateShopRepository();
CoreComponentRepository::initializeCache();
return view('backend.setup_configurations.google_configuration.google_firebase');
}
public function facebook_chat(Request $request)
{
CoreComponentRepository::instantiateShopRepository();
CoreComponentRepository::initializeCache();
return view('backend.setup_configurations.facebook_chat');
}
public function facebook_comment(Request $request)
{
CoreComponentRepository::instantiateShopRepository();
CoreComponentRepository::initializeCache();
return view('backend.setup_configurations.facebook_configuration.facebook_comment');
}
public function payment_method(Request $request)
{
CoreComponentRepository::instantiateShopRepository();
CoreComponentRepository::initializeCache();
return view('backend.setup_configurations.payment_method');
}
public function file_system(Request $request)
{
CoreComponentRepository::instantiateShopRepository();
CoreComponentRepository::initializeCache();
return view('backend.setup_configurations.file_system');
}
/**
* Update the API key's for payment methods.
* @param Request $request
* @return RedirectResponse
*/
public function payment_method_update(Request $request)
{
foreach ($request->types as $key => $type) {
$this->overWriteEnvFile($type, $request[$type]);
}
try {
if ($request->pago_azul_sandbox) {
$business_settings = BusinessSetting::where('type', 'pago_azul_sandbox')->firstOrFail();
$business_settings->update(['value' => !$business_settings->value]);
} else {
$business_settings = BusinessSetting::where('type', $request->input('payment_method') . '_sandbox')->firstOrFail();
if ($request->has($request->payment_method . '_sandbox')) {
$business_settings->update(['value' => !$business_settings->get('value')]);
}
}
} catch (ModelNotFoundException $e) {
$business_settings = BusinessSetting::where('type', $request->input('payment_method') . 'payment')->first();
}
if (!$business_settings) {
BusinessSetting::create([
'type' => $request->payment_method . '_payment',
'value' => 1
]);
}
Artisan::call('cache:clear');
flash(translate("Settings updated successfully"))->success();
return back();
}
/**
* overWrite the Env File values.
* @param String type
* @param String value
* @return Response
*/
public function overWriteEnvFile($type, $val)
{
if (env('DEMO_MODE') != 'Off') {
$path = base_path('.env');
if (file_exists($path)) {
$val = '"' . trim($val) . '"';
if (is_numeric(strpos(file_get_contents($path), $type)) && strpos(file_get_contents($path), $type) >= 0) {
file_put_contents($path, str_replace(
$type . '="' . env($type) . '"', $type . '=' . $val, file_get_contents($path)
));
} else {
file_put_contents($path, file_get_contents($path) . "\r\n" . $type . '=' . $val);
}
}
}
}
public function update(Request $request)
{
foreach ($request->types as $key => $type) {
if ($type == 'site_name') {
$this->overWriteEnvFile('APP_NAME', $request[$type]);
}
if ($type == 'timezone') {
$this->overWriteEnvFile('APP_TIMEZONE', $request[$type]);
} else {
$lang = null;
if (gettype($type) == 'array') {
$lang = array_key_first($type);
$type = $type[$lang];
$business_settings = BusinessSetting::where('type', $type)->where('lang', $lang)->first();
} else {
$business_settings = BusinessSetting::where('type', $type)->first();
}
if ($business_settings != null) {
if (gettype($request[$type]) == 'array') {
$business_settings->value = json_encode($request[$type]);
} else {
$business_settings->value = $request[$type];
}
$business_settings->lang = $lang;
$business_settings->save();
} else {
$business_settings = new BusinessSetting;
$business_settings->type = $type;
if (gettype($request[$type]) == 'array') {
$business_settings->value = json_encode($request[$type]);
} else {
$business_settings->value = $request[$type];
}
$business_settings->lang = $lang;
$business_settings->save();
}
}
}
Artisan::call('cache:clear');
flash(translate("Settings updated successfully"))->success();
return back();
}
/**
* Update the API key's for GOOGLE analytics.
* @param Request $request
* @return Response
*/
public function google_analytics_update(Request $request)
{
foreach ($request->types as $key => $type) {
$this->overWriteEnvFile($type, $request[$type]);
}
$business_settings = BusinessSetting::where('type', 'google_analytics')->first();
if ($request->has('google_analytics')) {
$business_settings->value = 1;
$business_settings->save();
} else {
$business_settings->value = 0;
$business_settings->save();
}
Artisan::call('cache:clear');
flash(translate("Settings updated successfully"))->success();
return back();
}
public function google_recaptcha_update(Request $request)
{
foreach ($request->types as $key => $type) {
$this->overWriteEnvFile($type, $request[$type]);
}
$business_settings = BusinessSetting::where('type', 'google_recaptcha')->first();
if ($request->has('google_recaptcha')) {
$business_settings->value = 1;
$business_settings->save();
} else {
$business_settings->value = 0;
$business_settings->save();
}
Artisan::call('cache:clear');
flash(translate("Settings updated successfully"))->success();
return back();
}
public function google_map_update(Request $request)
{
foreach ($request->types as $key => $type) {
$this->overWriteEnvFile($type, $request[$type]);
}
$business_settings = BusinessSetting::where('type', 'google_map')->first();
if ($request->has('google_map')) {
$business_settings->value = 1;
$business_settings->save();
} else {
$business_settings->value = 0;
$business_settings->save();
}
Artisan::call('cache:clear');
flash(translate("Settings updated successfully"))->success();
return back();
}
public function google_firebase_update(Request $request)
{
foreach ($request->types as $key => $type) {
$this->overWriteEnvFile($type, $request[$type]);
}
$business_settings = BusinessSetting::where('type', 'google_firebase')->first();
if ($request->has('google_firebase')) {
$business_settings->value = 1;
$business_settings->save();
} else {
$business_settings->value = 0;
$business_settings->save();
}
Artisan::call('cache:clear');
flash(translate("Settings updated successfully"))->success();
return back();
}
/**
* Update the API key's for GOOGLE analytics.
* @param Request $request
* @return Response
*/
public function facebook_chat_update(Request $request)
{
foreach ($request->types as $key => $type) {
$this->overWriteEnvFile($type, $request[$type]);
}
$business_settings = BusinessSetting::where('type', 'facebook_chat')->first();
if ($request->has('facebook_chat')) {
$business_settings->value = 1;
$business_settings->save();
} else {
$business_settings->value = 0;
$business_settings->save();
}
Artisan::call('cache:clear');
flash(translate("Settings updated successfully"))->success();
return back();
}
public function facebook_comment_update(Request $request)
{
foreach ($request->types as $key => $type) {
$this->overWriteEnvFile($type, $request[$type]);
}
$business_settings = BusinessSetting::where('type', 'facebook_comment')->first();
if (!$business_settings) {
$business_settings = new BusinessSetting;
$business_settings->type = 'facebook_comment';
}
$business_settings->value = 0;
if ($request->facebook_comment) {
$business_settings->value = 1;
}
$business_settings->save();
Artisan::call('cache:clear');
flash(translate("Settings updated successfully"))->success();
return back();
}
public function facebook_pixel_update(Request $request)
{
foreach ($request->types as $key => $type) {
$this->overWriteEnvFile($type, $request[$type]);
}
$business_settings = BusinessSetting::where('type', 'facebook_pixel')->first();
if ($request->has('facebook_pixel')) {
$business_settings->value = 1;
$business_settings->save();
} else {
$business_settings->value = 0;
$business_settings->save();
}
Artisan::call('cache:clear');
flash(translate("Settings updated successfully"))->success();
return back();
}
/**
* Update the API key's for other methods.
* @param Request $request
* @return Response
*/
public function env_key_update(Request $request)
{
foreach ($request->types as $key => $type) {
$this->overWriteEnvFile($type, $request[$type]);
}
flash(translate("Settings updated successfully"))->success();
return back();
}
public function seller_verification_form(Request $request)
{
return view('backend.sellers.seller_verification_form.index');
}
/**
* Update sell verification form.
* @param Request $request
* @return Response
*/
public function seller_verification_form_update(Request $request)
{
$form = array();
$select_types = ['select', 'multi_select', 'radio'];
$j = 0;
for ($i = 0; $i < count($request->type); $i++) {
$item['type'] = $request->type[$i];
$item['label'] = $request->label[$i];
if (in_array($request->type[$i], $select_types)) {
$item['options'] = json_encode($request['options_' . $request->option[$j]]);
$j++;
}
array_push($form, $item);
}
$business_settings = BusinessSetting::where('type', 'verification_form')->first();
$business_settings->value = json_encode($form);
if ($business_settings->save()) {
Artisan::call('cache:clear');
flash(translate("Verification form updated successfully"))->success();
return back();
}
}
public function updateActivationSettings(Request $request)
{
$env_changes = ['FORCE_HTTPS', 'FILESYSTEM_DRIVER'];
if (in_array($request->type, $env_changes)) {
return $this->updateActivationSettingsInEnv($request);
}
$business_settings = BusinessSetting::where('type', $request->type)->first();
if ($business_settings != null) {
if ($request->type == 'maintenance_mode' && $request->value == '1') {
if (env('DEMO_MODE') != 'On') {
Artisan::call('down');
}
} elseif ($request->type == 'maintenance_mode' && $request->value == '0') {
if (env('DEMO_MODE') != 'On') {
Artisan::call('up');
}
}
$business_settings->value = $request->value;
$business_settings->save();
} else {
$business_settings = new BusinessSetting;
$business_settings->type = $request->type;
$business_settings->value = $request->value;
$business_settings->save();
}
Artisan::call('cache:clear');
return '1';
}
public function updateActivationSettingsInEnv($request)
{
if ($request->type == 'FORCE_HTTPS' && $request->value == '1') {
$this->overWriteEnvFile($request->type, 'On');
if (strpos(env('APP_URL'), 'http:') !== FALSE) {
$this->overWriteEnvFile('APP_URL', str_replace("http:", "https:", env('APP_URL')));
}
} elseif ($request->type == 'FORCE_HTTPS' && $request->value == '0') {
$this->overWriteEnvFile($request->type, 'Off');
if (strpos(env('APP_URL'), 'https:') !== FALSE) {
$this->overWriteEnvFile('APP_URL', str_replace("https:", "http:", env('APP_URL')));
}
} elseif ($request->type == 'FILESYSTEM_DRIVER') {
$this->overWriteEnvFile($request->type, $request->value);
}
return '1';
}
public function vendor_commission(Request $request)
{
return view('backend.sellers.seller_commission.index');
}
public function vendor_commission_update(Request $request)
{
foreach ($request->types as $key => $type) {
$business_settings = BusinessSetting::where('type', $type)->first();
if ($business_settings != null) {
$business_settings->value = $request[$type];
$business_settings->save();
} else {
$business_settings = new BusinessSetting;
$business_settings->type = $type;
$business_settings->value = $request[$type];
$business_settings->save();
}
}
Artisan::call('cache:clear');
flash(translate('Seller Commission updated successfully'))->success();
return back();
}
public function shipping_configuration(Request $request)
{
return view('backend.setup_configurations.shipping_configuration.index');
}
public function shipping_configuration_update(Request $request)
{
$business_settings = BusinessSetting::where('type', $request->type)->first();
$business_settings->value = $request[$request->type];
$business_settings->save();
Artisan::call('cache:clear');
flash(translate('Shipping Method updated successfully'))->success();
return back();
}
public function order_configuration()
{
return view('backend.setup_configurations.order_configuration.index');
}
}
|