Issues (2963)

app/Http/Middleware/LoadUserPreferences.php (1 issue)

1
<?php
2
3
namespace App\Http\Middleware;
4
5
use Closure;
6
use LibreNMS\Config;
7
8
class LoadUserPreferences
9
{
10
    /**
11
     * Handle an incoming request.
12
     *
13
     * @param  \Illuminate\Http\Request  $request
14
     * @param  \Closure  $next
15
     * @return mixed
16
     */
17
    public function handle($request, Closure $next)
18
    {
19
        $preferences = ['locale', 'site_style'];
20
        $this->loadPreferences($request, $preferences);
21
22
        $this->setPreference($request, 'locale', function ($locale) {
23
            app()->setLocale($locale);
0 ignored issues
show
The method setLocale() does not exist on Illuminate\Container\Container. Are you sure you never get this type here, but always one of the subclasses? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

23
            app()->/** @scrutinizer ignore-call */ setLocale($locale);
Loading history...
24
        });
25
26
        $this->setPreference($request, 'site_style', function ($style) {
27
            Config::set('applied_site_style', $style);
28
        });
29
30
        return $next($request);
31
    }
32
33
    /**
34
     * Fetch preferences from the database
35
     * Load all preferences at once if we need to query the database
36
     *
37
     * @param  \Illuminate\Http\Request  $request
38
     * @param  array  $preferences
39
     */
40
    private function loadPreferences($request, $preferences)
41
    {
42
        if (! $request->session()->has('preferences') && ! is_null($request->user())) {
43
            $loaded = $request->user()->preferences()->whereIn('pref', $preferences)->pluck('value', 'pref');
44
            $request->session()->put('preferences', $loaded);
45
        }
46
    }
47
48
    /**
49
     * @param  \Illuminate\Http\Request  $request
50
     * @param  string  $pref
51
     * @param  callable  $callable
52
     */
53
    private function setPreference($request, $pref, $callable)
54
    {
55
        $value = $request->session()->get("preferences.$pref");
56
        if ($value !== null) {
57
            $callable($value);
58
        }
59
    }
60
}
61