Files
librenms-librenms/app/Http/Middleware/LoadUserPreferences.php
Jellyfrog 2b3575a5e9 Laravel 10.x Shift (#14995)
* Apply code style

* Remove explicit call to register policies

* Shift core files

* Shift config files

* Default config files

In an effort to make upgrading the constantly changing config files
easier, Shift defaulted them and merged your true customizations -
where ENV variables may not be used.

* Bump Laravel dependencies

* Add type hints for Laravel 10

* Shift cleanup

* wip

* wip

* sync translation

* Sync back config

* Public Path Binding

* QueryException

* monolog

* db::raw

* monolog

* db::raw

* fix larastan collections

* fix phpstan bug looping forever

* larastan errors

* larastan: fix column type

* styleci

* initialize array

* fixes

* fixes

---------

Co-authored-by: Shift <shift@laravelshift.com>
2023-05-24 22:21:54 +02:00

66 lines
1.9 KiB
PHP

<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use LibreNMS\Config;
use Symfony\Component\HttpFoundation\Response;
class LoadUserPreferences
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
*/
public function handle(Request $request, Closure $next): Response
{
$preferences = ['locale', 'site_style', 'timezone'];
$this->loadPreferences($request, $preferences);
$this->setPreference($request, 'locale', function ($locale) {
app()->setLocale($locale);
});
$this->setPreference($request, 'site_style', function ($style) {
Config::set('applied_site_style', $style);
});
$this->setPreference($request, 'timezone', function ($timezone) use ($request) {
$request->session()->put('preferences.timezone_static', true);
});
return $next($request);
}
/**
* Fetch preferences from the database
* Load all preferences at once if we need to query the database
*
* @param \Illuminate\Http\Request $request
* @param array $preferences
*/
private function loadPreferences($request, $preferences)
{
if (! $request->session()->has('preferences') && ! is_null($request->user())) {
$loaded = $request->user()->preferences()->whereIn('pref', $preferences)->pluck('value', 'pref');
$request->session()->put('preferences', $loaded);
}
}
/**
* @param \Illuminate\Http\Request $request
* @param string $pref
* @param callable $callable
*/
private function setPreference($request, $pref, $callable)
{
$value = $request->session()->get("preferences.$pref");
if ($value !== null) {
$callable($value);
}
}
}