File "SettingsController.php"

Full Path: /home/isoftco/public_html/hrm/app/Http/Controllers/Admin/SettingsController.php
File size: 7.96 KB
MIME-type: text/x-php
Charset: utf-8

<?php

namespace App\Http\Controllers\Admin;

use App\Classes\Files;
use App\Classes\Reply;
use App\Http\Controllers\AdminBaseController;
use App\Http\Requests\Admin\Setting\GdprUpdateRequest;
use App\Http\Requests\Admin\Setting\UpdateRequest;
use App\Http\Requests\Admin\SmtpSetting\UpdateSmtpSetting;
use App\Mail\TestEmailSent;
use App\Models\Admin;
use App\Models\Country;
use App\Models\Employee;
use App\Models\Setting;
use App\Models\Company;
use App\Traits\Settings;
use Illuminate\Support\Facades\DB;

use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\Notification;
use Illuminate\Support\Facades\Redirect;
use Illuminate\Support\Facades\Request;
use Illuminate\Support\Facades\Response;
use Illuminate\Support\Facades\Session;
use Illuminate\Support\Facades\View;
use Intervention\Image\Facades\Image;
use Intervention\Image\File;


class SettingsController extends AdminBaseController
{

    use Settings;
    public function __construct()
    {
        parent::__construct();
        $this->settingOpen = 'active';
        $this->pageTitle = 'Settings';
    }

    public function edit()
    {
        $this->settingActive = 'active';
        $this->generalSettingActive = 'active';
        $this->setting = Setting::all()->first();
        $this->countries = Country::groupBy('currency_code')
            ->get();

        return View::make('admin.settings.edit', $this->data);
    }


    public function getStripe()
    {
        $this->stripeSettingActive = 'active';
        $this->setting = Setting::all()->first();

        return View::make('admin.settings.stripe', $this->data);
    }

    public function getGdpr()
    {
        $this->stripeSettingActive = 'active';
        $this->setting = Setting::all()->first();

        return View::make('admin.settings.gdpr', $this->data);
    }

    public function getSmtp()
    {
        $this->smtpSettingActive = 'active';
        $this->setting = Setting::first();

        return View::make('admin.settings.smtp', $this->data);
    }

    public function change_language()
    {

        if (admin()->type == 'admin') {
            $setting = Company::findOrFail($this->company_id);
        } else {
            $setting = Setting::findOrFail($this->setting->id);
        }

        $data = request()->all();


        $setting->update($data);

        $output['success'] = 'success';

        return Response::json($output, 200);
    }

    public function update(UpdateRequest $request, $id)
    {
        $setting = Setting::first();
        $data = $request->all();

        if ($request->type == 'stripeSetting') {
            $data['stripe_status'] = $request->has('stripe_status') && request()->get('stripe_status') == 'on' ? 1 : 0;
            $data['paypal_status'] = $request->has('paypal_status') && request()->get('paypal_status') == 'on' ? 1 : 0;
        }

        if ($request->type != 'stripeSetting' && $request->type != 'smtpSetting') {
            $data['system_update'] = $request->has('system_update') && request()->get('system_update') == 'on' ? 1 : 0;
        }

        unset($data['type']);

        if ($request->has('currency')) {
            $currencyArray = explode(':', $request->currency);
            unset($data['currency']);

            $data['currency_symbol'] = $currencyArray[0];
            $data['currency'] = $currencyArray[1];
        }

        $setting->update($data);

        if ($request->hasFile('logo')) {
            $file = new Files();
            $filename = $file->upload($request->file('logo'), 'setting/logo', null, 200, false);
            $setting->logo = $filename;
            $setting->save();
//            return Reply::redirect(route('admin.settings.edit', 'settings'));
        }

        if ($request->hasFile('favicon')) {
            $file = new Files();
            $filename = $file->upload($request->file('favicon'), 'setting/favicon', null, null, false);
            $setting->favicon = $filename;
            $setting->save();
//            return Reply::redirect(route('admin.settings.edit', 'settings'));
        }

        return Reply::redirect(route('admin.settings.edit', 'setting'), 'messages.updateSuccess');
    }

    public function updateGDPR(GdprUpdateRequest $request)
    {
        $setting = Setting::first();
        $data = $request->all();

        if ($data['gdpr'] == $setting->gdpr) {
            if ($data['gdpr']) {
                return Reply::error('GDPR status is already enabled');
            }

            return Reply::error('GDPR status is already disabled');
        }


        DB::beginTransaction();

        try {

            $setting->update($data);
            $columns = new Employee();
            $employees = Employee::withoutGlobalScope('company')->get();

            $columnsAdmins = new Admin();
            $admins = Admin::withoutGlobalScope('company')->get();

            // Encypted All the data

            foreach ($employees as $employee) {
                $employee->preventAttrSet = true;

                foreach ($columns->getEncrypted() as $item) {
                    if ($data['gdpr'] == 1) {
                        if (!is_null($employee->{$item})) {
                            $employee->{$item} = encrypt($employee->{$item});
                        }
                    } else {
                        if (!is_null($employee->{$item})) {
                            $employee->{$item} = decrypt($employee->{$item});
                        }
                    }
                }

                $employee->save();
            }

            foreach ($admins as $admin) {
                $admin->preventAttrSet = true;

                foreach ($columnsAdmins->getEncrypted() as $item) {

                    if ($data['gdpr'] == 1) {
                        if (!is_null($admin->{$item})) {
                            $admin->{$item} = encrypt($admin->{$item});
                        }
                    } else {
                        if (!is_null($admin->{$item})) {
                            $admin->{$item} = decrypt($admin->{$item});
                        }
                    }
                }

                $admin->save();
            }

            DB::commit();
            // all good
        } catch (\Exception $e) {
            DB::rollback();
            return Reply::error('rollback' . $e->getMessage());
        }
        return Reply::success('messages.updateSuccess');
    }


    public function updateMailConfig(UpdateSmtpSetting $request)
    {
        $smtp = Setting::first();

        $data = $request->all();

        if ($request->mail_encryption == "null") {
            $data['mail_encryption'] = null;
        }

        unset($data['type']);
        $smtp->update($data);
        $response = $smtp->verifySmtp();
        session(['smtp_setting' => $smtp]);

        if ($smtp->mail_driver == 'mail') {
            return Reply::success(__('messages.updateSuccess'));
        }


        if ($response['success']) {
            return Reply::success($response['message']);
        }
        // GMAIL SMTP ERROR
        $message = __('messages.smtpError') . '<br><br> ';

        if ($smtp->mail_host == 'smtp.gmail.com') {
            $secureUrl = 'https://myaccount.google.com/lesssecureapps';
            $message .= __('messages.smtpSecureEnabled');
            $message .= '<a  class="font-13" target="_blank" href="' . $secureUrl . '">' . $secureUrl . '</a>';
            $message .= '<hr>' . $response['message'];
            return Reply::error($message);
        }
        return Reply::error($message . '<hr>' . $response['message']);
    }

    public function sendTestEmail(\Illuminate\Http\Request $request)
    {
        $request->validate([
            'test_email' => 'required|email',
        ]);

        $smtp = Setting::first();
        $response = $smtp->verifySmtp();

        if ($response['success']) {
            $this->setMailConfigs();
            Mail::to($request->test_email)->send(new TestEmailSent());
            return Reply::success('Test mail sent successfully');
        }
        return Reply::error($response['message']);
    }
}