Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
0.00% covered (danger)
0.00%
0 / 1
50.00% covered (danger)
50.00%
2 / 4
CRAP
76.47% covered (warning)
76.47%
26 / 34
SettingController
0.00% covered (danger)
0.00%
0 / 1
50.00% covered (danger)
50.00%
2 / 4
16.55
76.47% covered (warning)
76.47%
26 / 34
 index
0.00% covered (danger)
0.00%
0 / 1
3.01
91.67% covered (success)
91.67%
11 / 12
 store
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
2 / 2
 modules
0.00% covered (danger)
0.00%
0 / 1
6
0.00% covered (danger)
0.00%
0 / 7
 saveData
100.00% covered (success)
100.00%
1 / 1
8
100.00% covered (success)
100.00%
13 / 13
<?php
namespace App\Http\Controllers\Admin;
use App\Module;
use App\Setting;
use Illuminate\Http\Request;
use Illuminate\View\View;
use Illuminate\Routing\Redirector;
use App\Http\Controllers\Controller;
use App\Http\Requests\ModuleRequest;
use Illuminate\Support\Facades\Auth;
use App\Http\Requests\SettingRequest;
use Illuminate\Http\RedirectResponse;
class SettingController extends Controller
{
    /** Redirect to this path after each operation success*/
    private $redirectSuccessPath = '/admin/settings';
    /** View folder */
    private $viewDirectory = 'admin.settings.';
    /**
     * Display a listing of the resource.
     * @return View
     */
    public function index() :View
    {
        $title= __('settings.head');
        $head = metaFields('settings', 'add_new', getCurrentLocale()) ?? __('settings.new');
        $settingsAction= route('settings.store');
        $modulesAction= route('settings.modules');
        $settings = Setting::cursor();
        $modules = Module::where('deleted_at', null)->cursor();
        if(count($settings) > 0){
            $head = metaFields('settings', 'edit', getCurrentLocale()) ?? __('settings.edit');
            foreach ($settings as $setting) {
                $settings->{$setting['key']} = $setting['value'];
            }
        } else {
            $settings = null;
        }
        return view($this->viewDirectory.'form',compact('title', 'head', 'settingsAction','modulesAction', 'settings', 'modules'));
    }
    /**
     * Store a newly created resource in storage.
     *
     * @param SettingRequest $settingRequest
     * @return RedirectResponse|Redirector
     */
    public function store(SettingRequest $settingRequest) :RedirectResponse
    {
        $this->saveData($settingRequest);
        return redirect($this->redirectSuccessPath)->with('message', __('dashboard.saveDone'));
    }
    /**
     * Store modules metas in modules table.
     *
     * @param ModuleRequest $moduleRequest
     * @return RedirectResponse|Redirector
     */
    public function modules(ModuleRequest $moduleRequest) :RedirectResponse
    {
        $fields = $moduleRequest->fields;
        $moduleName = $moduleRequest->module_name;
        $data = array_merge_recursive($moduleName, $fields);
        foreach ($data as $path => $field) {
            Module::where('path', $path)->update([
                'meta' => $field
            ]);
        }
        return redirect($this->redirectSuccessPath)->with('message', __('dashboard.saveDone'));
    }
    /**
     * Handle Save form data
     *
     * @param SettingRequest $request
     * @return void
     */
    private function saveData(SettingRequest $request):void
    {
        $data = $request->all();
        $userRole = Auth::user()->role;
        !$request->has('website_disable') && $userRole == 'super_admin' ? $data['website_disable'] = 0 : 1;
        !$request->has('dashboard_disable') && $userRole == 'super_admin' ? $data['dashboard_disable'] = 0 : 1;
        if ($request->has('update')){
            foreach ($data as $key => $value) {
                Setting::where('key', $key)->update([
                    'value' => $value
                ]);
            }
        } else {
            foreach ($data as $key => $value) {
                Setting::create([
                    'key' => $key,
                    'value' => $value,
                ]);
            }
        }
    }
}