From 46bb073001699f5cf7d42e9ade4a24cfb2c19a29 Mon Sep 17 00:00:00 2001 From: Kode Date: Sun, 14 Oct 2018 16:17:55 +0100 Subject: [PATCH] Working on multi user --- app/Http/Controllers/Auth/LoginController.php | 5 ++ app/Http/Controllers/Controller.php | 18 +++++ app/Http/Controllers/SettingsController.php | 11 ++- app/Providers/AppServiceProvider.php | 2 +- app/Setting.php | 74 +++++++++++++++--- app/User.php | 2 +- config/app.php | 2 +- database/app.sqlite-journal | Bin 0 -> 12824 bytes resources/views/items/create.blade.php | 2 +- resources/views/items/edit.blade.php | 2 +- resources/views/items/list.blade.php | 2 +- resources/views/items/trash.blade.php | 2 +- resources/views/{ => layouts}/app.blade.php | 4 +- resources/views/layouts/users.blade.php | 65 +++++++++++++++ resources/views/settings/edit.blade.php | 2 +- resources/views/settings/list.blade.php | 2 +- resources/views/tags/create.blade.php | 2 +- resources/views/tags/edit.blade.php | 2 +- resources/views/tags/list.blade.php | 2 +- resources/views/tags/trash.blade.php | 2 +- resources/views/users/create.blade.php | 2 +- resources/views/users/edit.blade.php | 2 +- resources/views/users/index.blade.php | 2 +- resources/views/users/trash.blade.php | 2 +- resources/views/userselect.blade.php | 7 ++ resources/views/welcome.blade.php | 2 +- routes/web.php | 2 + 27 files changed, 184 insertions(+), 38 deletions(-) create mode 100644 database/app.sqlite-journal rename resources/views/{ => layouts}/app.blade.php (98%) create mode 100644 resources/views/layouts/users.blade.php create mode 100644 resources/views/userselect.blade.php diff --git a/app/Http/Controllers/Auth/LoginController.php b/app/Http/Controllers/Auth/LoginController.php index b2ea669a..c0e26738 100644 --- a/app/Http/Controllers/Auth/LoginController.php +++ b/app/Http/Controllers/Auth/LoginController.php @@ -36,4 +36,9 @@ class LoginController extends Controller { $this->middleware('guest')->except('logout'); } + public function index() + { + $data =[]; + return view('userselect', $data); + } } diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php index 03e02a23..d9d3ee69 100644 --- a/app/Http/Controllers/Controller.php +++ b/app/Http/Controllers/Controller.php @@ -6,8 +6,26 @@ use Illuminate\Foundation\Bus\DispatchesJobs; use Illuminate\Routing\Controller as BaseController; use Illuminate\Foundation\Validation\ValidatesRequests; use Illuminate\Foundation\Auth\Access\AuthorizesRequests; +use Illuminate\Support\Facades\Auth; +use App\User; class Controller extends BaseController { use AuthorizesRequests, DispatchesJobs, ValidatesRequests; + + protected $user; + + public function __construct() + { + $this->user = $this->user(); + } + + public function user() + { + if (Auth::check()) { // if logged in, set this user + return Auth::user(); + } else { // not logged in, get first user + return User::first(); + } + } } diff --git a/app/Http/Controllers/SettingsController.php b/app/Http/Controllers/SettingsController.php index 843e2de0..17217b28 100644 --- a/app/Http/Controllers/SettingsController.php +++ b/app/Http/Controllers/SettingsController.php @@ -31,6 +31,7 @@ class SettingsController extends Controller public function edit($id) { $setting = Setting::find($id); + //die("s: ".$setting->label); if((bool)$setting->system === true) return abort(404); @@ -55,6 +56,7 @@ class SettingsController extends Controller public function update(Request $request, $id) { $setting = Setting::find($id); + $user = $this->user(); if (!is_null($setting)) { $data = Setting::getInput(); @@ -64,17 +66,14 @@ class SettingsController extends Controller if($request->hasFile('value')) { $path = $request->file('value')->store('backgrounds'); - $setting->value = $path; + $setting_value = $path; } - - } else { - $setting->value = $data->value; + $setting_value = $data->value; } - $setting->save(); - + $user->settings()->updateExistingPivot($setting->id, ['value' => $setting_value]); $route = route('settings.index', [], false); return redirect($route) ->with([ diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index bb66cd39..6aacefbf 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -37,7 +37,7 @@ class AppServiceProvider extends ServiceProvider } // check version to see if an upgrade is needed - $db_version = Setting::fetch('version'); + $db_version = Setting::_fetch('version'); $app_version = config('app.version'); if(version_compare($app_version, $db_version) == 1) { // app is higher than db, so need to run migrations etc Artisan::call('migrate', array('--path' => 'database/migrations', '--force' => true, '--seed' => true)); diff --git a/app/Setting.php b/app/Setting.php index b981d0d2..0b8f76af 100644 --- a/app/Setting.php +++ b/app/Setting.php @@ -5,6 +5,8 @@ namespace App; use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Facades\Input; use Form; +use Illuminate\Support\Facades\Auth; +use App\User; class Setting extends Model { @@ -46,6 +48,12 @@ class Setting extends Model public function getListValueAttribute() { + if((bool)$this->system === true) { + $value = self::_fetch($this->key); + } else { + $value = self::fetch($this->key); + } + $this->value = $value; switch($this->type) { case 'image': if(!empty($this->value)) { @@ -80,6 +88,8 @@ class Setting extends Model public function getEditValueAttribute() { + $user = $this->user(); + $this->value = $this->users()->where('id', $user->id)->first()->pivot->value; switch($this->type) { case 'image': $value = ''; @@ -125,6 +135,7 @@ class Setting extends Model return $this->belongsTo('App\SettingGroup', 'group_id'); } + /** * @param string $key * @@ -132,14 +143,39 @@ class Setting extends Model */ public static function fetch($key) { - if (Setting::cached($key)) { - return Setting::$cache[$key]; + $user = self::user(); + return self::_fetch($key, $user); + } + /** + * @param string $key + * + * @return mixed + */ + public static function _fetch($key, $user=null) + { + $cachekey = ($user === null) ? $key : $key.'-'.$user->id; + if (Setting::cached($cachekey)) { + return Setting::$cache[$cachekey]; } else { $find = self::where('key', '=', $key)->first(); if (!is_null($find)) { - $value = $find->value; - Setting::add($key, $value); + if((bool)$find->system === true) { // if system variable use global value + $value = $find->value; + } else { // not system variable so use user specific value + // check if user specified value has been set + $usersetting = $user->settings->where('id', $find->id)->first(); + //die(print_r($usersetting)); + //->pivot->value; + if(isset($usersetting) && !empty($usersetting)) { + $value = $usersetting->pivot->value; + } else { // if not get default from base setting + $user->settings()->save($find, ['value' => $find->value]); + $value = $find->value; + } + + } + Setting::add($cachekey, $value); return $value; } else { @@ -175,21 +211,23 @@ class Setting extends Model $output = ''; $homepage_search = self::fetch('homepage_search'); $search_provider = self::where('key', '=', 'search_provider')->first(); - - //die(var_dump($search_provider->value)); + $user_search_provider = self::fetch('search_provider'); + //die(print_r($search_provider)); + + //die(var_dump($user_search_provider)); // return early if search isn't applicable if((bool)$homepage_search !== true) return $output; - if($search_provider->value === 'none') return $output; - if(empty($search_provider->value)) return $output; - if(is_null($search_provider->value)) return $output; + if($user_search_provider === 'none') return $output; + if(empty($user_search_provider)) return $output; + if(is_null($user_search_provider)) return $output; if((bool)$homepage_search && (bool)$search_provider) { $options = (array)json_decode($search_provider->options); - $name = $options[$search_provider->value]; - if((bool)$search_provider->value) { - switch($search_provider->value) { + $name = $options[$user_search_provider]; + if((bool)$user_search_provider) { + switch($user_search_provider) { case 'google': $url = 'https://www.google.com/search'; $var = 'q'; @@ -224,7 +262,17 @@ class Setting extends Model */ public function users() { - return $this->belongsToMany('App\User'); + return $this->belongsToMany('App\User')->withPivot('value'); + } + + public static function user() + { + if (Auth::check()) { // if logged in, set this user + return Auth::user(); + } else { // not logged in, get first user + return User::first(); + } } + } diff --git a/app/User.php b/app/User.php index fb9f8fdd..e991e964 100644 --- a/app/User.php +++ b/app/User.php @@ -40,7 +40,7 @@ class User extends Authenticatable */ public function settings() { - return $this->belongsToMany('App\Setting'); + return $this->belongsToMany('App\Setting')->withPivot('value'); } } diff --git a/config/app.php b/config/app.php index 083d9d5b..fe5ea5c2 100644 --- a/config/app.php +++ b/config/app.php @@ -14,7 +14,7 @@ return [ */ 'name' => env('APP_NAME', 'Heimdall'), - 'version' => '1.4.14', + 'version' => '1.5.0', /* |-------------------------------------------------------------------------- diff --git a/database/app.sqlite-journal b/database/app.sqlite-journal new file mode 100644 index 0000000000000000000000000000000000000000..b214781370f680e7500961da574da2f73e610696 GIT binary patch literal 12824 zcmeI$u}T9$5P;#?8-v*x-JnP+L91X9$$1G#Dt!oR5joB)E+@B}-q*6QviAvm2lEK- zK_m!1KnVXZ?9T31^L0BSn|MxMSMhWrlEiJWd7#>5fqpM`XWX~MBoIIV0R#|0009IL zKmY**5I|rz1O_^?A@||7U9O($YCZQkIE?)n_bxFB1Q0*~0R#|0009ILKmY**5ZFe6 zJJXZXkw{mv?B3_ipCA79B)u7@lX04zr_=dtHlJqyT&?E-+Rgzw?oHgveYsEf5laFA z1Q0*~0R#|0009ILKmY**wnd=Z(V<<&&%d{OIy7a-D{uR%XU69tl#9aeA18YGdwM9E Xdimn@$moTs%A$D;WxepWodf&;lYKZs literal 0 HcmV?d00001 diff --git a/resources/views/items/create.blade.php b/resources/views/items/create.blade.php index 88886f2f..4b0ff6cd 100644 --- a/resources/views/items/create.blade.php +++ b/resources/views/items/create.blade.php @@ -1,4 +1,4 @@ -@extends('app') +@extends('layouts.app') @section('content') diff --git a/resources/views/items/edit.blade.php b/resources/views/items/edit.blade.php index ce7f54e1..3bcaa313 100644 --- a/resources/views/items/edit.blade.php +++ b/resources/views/items/edit.blade.php @@ -1,4 +1,4 @@ -@extends('app') +@extends('layouts.app') @section('content') diff --git a/resources/views/items/list.blade.php b/resources/views/items/list.blade.php index 2b046b53..d3792d93 100644 --- a/resources/views/items/list.blade.php +++ b/resources/views/items/list.blade.php @@ -1,4 +1,4 @@ -@extends('app') +@extends('layouts.app') @section('content')
diff --git a/resources/views/items/trash.blade.php b/resources/views/items/trash.blade.php index d3833586..caed294d 100644 --- a/resources/views/items/trash.blade.php +++ b/resources/views/items/trash.blade.php @@ -1,4 +1,4 @@ -@extends('app') +@extends('layouts.app') @section('content')
diff --git a/resources/views/app.blade.php b/resources/views/layouts/app.blade.php similarity index 98% rename from resources/views/app.blade.php rename to resources/views/layouts/app.blade.php index e627a2c8..90499785 100644 --- a/resources/views/app.blade.php +++ b/resources/views/layouts/app.blade.php @@ -71,9 +71,11 @@ @endif - + Switch User @yield('content')
+ + @if(Route::is('dash') || Route::is('tags.show')) @endif diff --git a/resources/views/layouts/users.blade.php b/resources/views/layouts/users.blade.php new file mode 100644 index 00000000..5ef75868 --- /dev/null +++ b/resources/views/layouts/users.blade.php @@ -0,0 +1,65 @@ + + + + + + + + {{ config('app.name') }} + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ @if ($message = Session::get('success')) +
+
+

{{ $message }}

+
+
+ @endif + @if (count($errors) > 0) +
+
+
    + @foreach ($errors->all() as $error) +
  • {{ $error }}
  • + @endforeach +
+
+
+ @endif + @yield('content') +
+ +
+
+ + + + + @yield('scripts') + + + diff --git a/resources/views/settings/edit.blade.php b/resources/views/settings/edit.blade.php index 66289441..9170bd93 100644 --- a/resources/views/settings/edit.blade.php +++ b/resources/views/settings/edit.blade.php @@ -1,4 +1,4 @@ -@extends('app') +@extends('layouts.app') @section('content') diff --git a/resources/views/settings/list.blade.php b/resources/views/settings/list.blade.php index 665b36c3..81ce2432 100644 --- a/resources/views/settings/list.blade.php +++ b/resources/views/settings/list.blade.php @@ -1,4 +1,4 @@ -@extends('app') +@extends('layouts.app') @section('content') diff --git a/resources/views/tags/create.blade.php b/resources/views/tags/create.blade.php index 1c9757dd..2e8a966b 100644 --- a/resources/views/tags/create.blade.php +++ b/resources/views/tags/create.blade.php @@ -1,4 +1,4 @@ -@extends('app') +@extends('layouts.app') @section('content') diff --git a/resources/views/tags/edit.blade.php b/resources/views/tags/edit.blade.php index 18ec1454..78a0e9db 100644 --- a/resources/views/tags/edit.blade.php +++ b/resources/views/tags/edit.blade.php @@ -1,4 +1,4 @@ -@extends('app') +@extends('layouts.app') @section('content') diff --git a/resources/views/tags/list.blade.php b/resources/views/tags/list.blade.php index 0e079bde..d3701a46 100644 --- a/resources/views/tags/list.blade.php +++ b/resources/views/tags/list.blade.php @@ -1,4 +1,4 @@ -@extends('app') +@extends('layouts.app') @section('content')
diff --git a/resources/views/tags/trash.blade.php b/resources/views/tags/trash.blade.php index df9fb0f7..85c834c0 100644 --- a/resources/views/tags/trash.blade.php +++ b/resources/views/tags/trash.blade.php @@ -1,4 +1,4 @@ -@extends('app') +@extends('layouts.app') @section('content')
diff --git a/resources/views/users/create.blade.php b/resources/views/users/create.blade.php index 6ac7532a..e2adb8eb 100644 --- a/resources/views/users/create.blade.php +++ b/resources/views/users/create.blade.php @@ -1,4 +1,4 @@ -@extends('app') +@extends('layouts.app') @section('content') diff --git a/resources/views/users/edit.blade.php b/resources/views/users/edit.blade.php index 21609238..2b721b66 100644 --- a/resources/views/users/edit.blade.php +++ b/resources/views/users/edit.blade.php @@ -1,4 +1,4 @@ -@extends('app') +@extends('layouts.app') @section('content') diff --git a/resources/views/users/index.blade.php b/resources/views/users/index.blade.php index 34f0963f..a1ea12ee 100644 --- a/resources/views/users/index.blade.php +++ b/resources/views/users/index.blade.php @@ -1,4 +1,4 @@ -@extends('app') +@extends('layouts.app') @section('content')
diff --git a/resources/views/users/trash.blade.php b/resources/views/users/trash.blade.php index d3833586..caed294d 100644 --- a/resources/views/users/trash.blade.php +++ b/resources/views/users/trash.blade.php @@ -1,4 +1,4 @@ -@extends('app') +@extends('layouts.app') @section('content')
diff --git a/resources/views/userselect.blade.php b/resources/views/userselect.blade.php new file mode 100644 index 00000000..98b98fc3 --- /dev/null +++ b/resources/views/userselect.blade.php @@ -0,0 +1,7 @@ +@extends('layouts.users') + +@section('content') + +here + +@endsection \ No newline at end of file diff --git a/resources/views/welcome.blade.php b/resources/views/welcome.blade.php index 45108c4e..e1527f7e 100644 --- a/resources/views/welcome.blade.php +++ b/resources/views/welcome.blade.php @@ -1,4 +1,4 @@ -@extends('app') +@extends('layouts.app') @section('content') @include('partials.search') diff --git a/routes/web.php b/routes/web.php index 94989be7..ee82f37d 100644 --- a/routes/web.php +++ b/routes/web.php @@ -11,6 +11,8 @@ | */ +Route::get('/userselect', 'Auth\LoginController@index')->name('user.select'); + Route::get('/', 'ItemController@dash')->name('dash'); Route::resources([