madbob/GASdottoNG

View on GitHub
code/app/Http/Controllers/GasController.php

Summary

Maintainability
A
0 mins
Test Coverage
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Str;

use Auth;
use DB;
use Log;

use App\Role;
use App\Gas;
use App\User;
use App\Currency;

class GasController extends Controller
{
    public function __construct()
    {
        $this->middleware('auth', ['except' => ['getLogo']]);

        $this->commonInit([
            'reference_class' => 'App\\Gas'
        ]);
    }

    public function index()
    {
        $user = Auth::user();
        return redirect()->route('gas.edit', $user->gas->id);
    }

    public function show()
    {
        $user = Auth::user();
        return redirect()->route('gas.edit', $user->gas->id);
    }

    public function getLogo($id)
    {
        $gas = Gas::findOrFail($id);
        return downloadFile($gas, 'logo');
    }

    public function edit($id)
    {
        $user = Auth::user();
        $gas = Gas::findOrFail($id);
        if ($user->can('gas.config', $gas) == false) {
            abort(503);
        }

        return view('pages.gas', ['gas' => $gas]);
    }

    private function configGeneral($gas, $request)
    {
        handleFileUpload($request->all(), $gas, 'logo');

        $gas->name = $request->input('name');
        $gas->email = $request->input('email');
        $gas->message = $request->input('message');

        $currency = defaultCurrency();
        $currency->symbol = $request->input('currency', '€');
        $currency->save();

        $gas->setManyConfigs($request, [
            'restricted',
            'multigas',
            'language'
        ]);
    }

    private function configBanking($gas, $request)
    {
        $gas->setManyConfigs($request, [
            'year_closing',
            'annual_fee_amount',
            'deposit_amount',
            'auto_fee',
            'rid',
            'satispay',
            'integralces',
            'extra_invoicing'
        ]);
    }

    private function configUsers($gas, $request)
    {
        $gas->setManyConfigs($request, ['public_registrations']);
    }

    private function configProducts($gas, $request)
    {
        $gas->setManyConfigs($request, [
            'manual_products_sorting',
            'products_grid_display_columns',
        ]);
    }

    private function configOrders($gas, $request)
    {
        $gas->setManyConfigs($request, [
            'restrict_booking_to_credit',
            'unmanaged_shipping',
            'booking_contacts',
            'orders_display_columns',
            'orders_shipping_user_columns',
            'orders_shipping_product_columns',
        ]);
    }

    private function configMails($gas, $request)
    {
        $gas->setManyConfigs($request, [
            'notify_all_new_orders',
            'send_order_reminder',
            'auto_user_order_summary',
            'auto_referent_order_summary',
        ]);

        foreach(array_keys(systemParameters('MailTypes')) as $identifier) {
            if ($request->has("custom_mails_${identifier}_subject")) {
                $gas->setConfig("mail_${identifier}", (object) [
                    'subject' => $request->input('custom_mails_' . $identifier . '_subject', ''),
                    'body' => $request->input('custom_mails_' . $identifier . '_body', ''),
                ]);
            }
        }
    }

    private function configImport($gas, $request)
    {
        $gas->setManyConfigs($request, [
            'es_integration',
            'csv_separator',
        ]);
    }

    private function configRoles($gas, $request)
    {
        $gas->setManyConfigs($request, [
            'roles',
        ]);
    }

    public function update(Request $request, $id)
    {
        DB::beginTransaction();

        $user = Auth::user();
        $gas = Gas::findOrFail($id);

        if ($user->can('gas.config', $gas) == false) {
            return $this->errorResponse(_i('Non autorizzato'));
        }

        $group = $request->input('group');
        $method = sprintf('config%s', ucwords($group));

        if (method_exists($this, $method)) {
            $this->$method($gas, $request);
        }

        $gas->save();
        return $this->successResponse();
    }

    public function databaseDump(Request $request)
    {
        $user = $request->user();
        if ($user->can('gas.config', $user->gas) == false) {
            abort(503);
        }

        $filepath = sprintf('%s/dump_%s', sys_get_temp_dir(), Str::random(20));

        switch(env('DB_CONNECTION')) {
            case 'mysql':
                \Spatie\DbDumper\Databases\MySql::create()->setDbName(env('DB_DATABASE'))->setUserName(env('DB_USERNAME'))->setPassword(env('DB_PASSWORD'))->dumpToFile($filepath);
                break;

            case 'pgsql':
                \Spatie\DbDumper\Databases\PostgreSql::create()->setDbName(env('DB_DATABASE'))->setUserName(env('DB_USERNAME'))->setPassword(env('DB_PASSWORD'))->dumpToFile($filepath);
                break;

            default:
                Log::error('Formato database non supportato');
                exit();
        }

        return response()->download($filepath, 'database_gasdotto_' . date('Y_m_d') . '.sql')->deleteFileAfterSend();
    }
}