ldc-boutique-cnc/app/Http/Controllers/Bo/SettingsController.php

113 lines
4 KiB
PHP
Raw Permalink Normal View History

<?php
namespace App\Http\Controllers\Bo;
use App\Http\Controllers\Controller;
use App\Models\Setting;
use Illuminate\Http\Request;
2022-03-19 11:26:12 +01:00
use Illuminate\Support\Facades\Artisan;
2021-05-06 17:18:25 +02:00
use Illuminate\Support\Facades\Config;
class SettingsController extends Controller
{
2022-09-03 16:56:16 +02:00
/**
* Manage settings page
*
* @param Request $request
* @return \Illuminate\Http\Response
*
*/
2022-08-25 12:26:43 +02:00
public function manage(Request $request)
{
$settings = Setting::all();
$settingsToPrint = [];
foreach ($settings as $setting) {
$settingsToPrint[$setting->key] = $setting->value;
}
if ($_SERVER["REQUEST_METHOD"] === "POST") {
$input = $request->all();
2022-09-03 16:56:16 +02:00
// Comparer les settingsToPrint (en base) avec les inputs (pour trouver un nouveau).
2022-08-25 12:26:43 +02:00
foreach ($input as $key => $value) {
if (
!isset($settingsToPrint[$key])
&& $key != "_method"
2022-08-25 12:26:43 +02:00
&& $key != "_token"
) {
2022-09-03 16:56:16 +02:00
// New setting.
2022-08-25 12:26:43 +02:00
$setting = new Setting();
$setting->key = $key;
$setting->value = $value ?? 0;
$setting->save();
2022-08-25 12:26:43 +02:00
}
}
2022-09-03 16:56:16 +02:00
$looplimit = count($settings);
for ($i = 0; $i < $looplimit; $i++) {
2022-08-25 12:26:43 +02:00
if (is_array($request->input($settings[$i]->key))) {
$settings[$i]->value = implode(',', $request->input($settings[$i]->key));
} else {
2022-09-03 16:56:16 +02:00
$settings[$i]->value = $request->input($settings[$i]->key) === null ? 0
: $request->input($settings[$i]->key);
}
$settings[$i]->save();
}
2022-03-19 11:26:12 +01:00
2022-09-03 16:56:16 +02:00
// Store redirector to keep flash message from being wipe pby artisan call below.
2022-03-19 11:26:12 +01:00
$redirector = redirect()->route('bo.settings')->with('success', 'Modifications enregistrés !');
2022-09-03 16:56:16 +02:00
// All settings saved : cache routes.
2022-03-24 19:38:51 +01:00
Artisan::call('route:clear');
2022-09-03 16:56:16 +02:00
// Programmer un php artisan optimize ? (une fois par jour la nuit par exemple).
2022-03-19 11:26:12 +01:00
return $redirector;
2022-08-25 12:26:43 +02:00
}//end if
return view('bo.settings', compact('settingsToPrint'));
}
2021-05-06 17:18:25 +02:00
/**
2022-09-03 16:56:16 +02:00
* Manage Theme settings page
2021-05-06 17:18:25 +02:00
* Management des settings dont la clé est préfixée theme_
2022-09-03 16:56:16 +02:00
*
* @param Request $request
* @return \Illuminate\Http\Response
*
2021-05-06 17:18:25 +02:00
*/
2022-08-25 12:26:43 +02:00
public function manageTheme(Request $request)
{
$settings = Setting::where('key', 'LIKE', 'theme_%')->get();
2021-05-06 17:18:25 +02:00
$settingsToPrint = [];
foreach ($settings as $setting) {
$settingsToPrint[$setting->key] = $setting->value;
}
$config_settings = Config::get(('theme.bo_theme_settings'));
2022-09-03 16:56:16 +02:00
// Check if, for each of the theme defined settings we have a database setting.
2021-05-06 17:18:25 +02:00
foreach ($config_settings as $onekey => $params) {
if (!isset($settingsToPrint['theme_' . $onekey])) {
2022-08-25 12:26:43 +02:00
$dbsetting = new Setting();
$dbsetting->key = 'theme_' . $onekey;
2021-05-06 17:18:25 +02:00
$dbsetting->value = $params['default_value'];
$dbsetting->save();
2022-09-03 16:56:16 +02:00
// Injection dans settings to print.
2021-05-06 17:18:25 +02:00
$settingsToPrint[$dbsetting->key] = $dbsetting->value;
}
}
if ($_SERVER["REQUEST_METHOD"] === "POST") {
2022-09-03 16:56:16 +02:00
$looplimit = count($settings);
for ($i = 0; $i < $looplimit; $i++) {
// Attention pour les booléens/checkbox on enregistre 'on'.
$settings[$i]->value = $request->input($settings[$i]->key) === null ? 0
: $request->input($settings[$i]->key);
2021-05-06 17:18:25 +02:00
$settings[$i]->save();
}
return redirect()->route('bo.themesettings')->with('success', 'Modifications enregistrés !');
}
return view('bo.settings.theme', compact('settingsToPrint', 'config_settings'));
}
}