diff --git a/app/Http/Controllers/Auth/Login.php b/app/Http/Controllers/Auth/Login.php index 5e659e155..1cb718299 100644 --- a/app/Http/Controllers/Auth/Login.php +++ b/app/Http/Controllers/Auth/Login.php @@ -112,7 +112,7 @@ class Login extends Controller 'error' => false, 'message' => null, 'data' => null, - 'redirect' => redirect()->intended()->getTargetUrl(), + 'redirect' => redirect()->intended($user->landing_page)->getTargetUrl(), ]; return response()->json($response); diff --git a/app/Http/Controllers/Auth/Users.php b/app/Http/Controllers/Auth/Users.php index 1c809f49a..0c16e6941 100644 --- a/app/Http/Controllers/Auth/Users.php +++ b/app/Http/Controllers/Auth/Users.php @@ -35,13 +35,33 @@ class Users extends Controller */ public function create() { + $routes = [ + 'dashboard' => trans_choice('general.dashboards', 1), + 'items.index' => trans_choice('general.items', 2), + 'invoices.index' => trans_choice('general.invoices', 2), + 'revenues.index' => trans_choice('general.revenues', 2), + 'customers.index' => trans_choice('general.customers', 2), + 'bills.index' => trans_choice('general.bills', 2), + 'payments.index' => trans_choice('general.payments', 2), + 'vendors.index' => trans_choice('general.vendors', 2), + 'accounts.index' => trans_choice('general.accounts', 2), + 'transfers.index' => trans_choice('general.transfers', 2), + 'transactions.index' => trans_choice('general.transactions', 2), + 'reconciliations.index' => trans_choice('general.reconciliations', 2), + 'reports.index' => trans_choice('general.reports', 2), + 'settings.index' => trans_choice('general.settings', 2), + 'categories.index' => trans_choice('general.categories', 2), + 'currencies.index' => trans_choice('general.currencies', 2), + 'taxes.index' => trans_choice('general.taxes', 2), + ]; + $roles = Role::all()->reject(function ($r) { return $r->hasPermission('read-client-portal'); }); $companies = user()->companies()->get()->sortBy('name'); - return view('auth.users.create', compact('roles', 'companies')); + return view('auth.users.create', compact('roles', 'companies', 'routes')); } /** @@ -81,6 +101,26 @@ class Users extends Controller */ public function edit(User $user) { + $routes = [ + 'dashboard' => trans_choice('general.dashboards', 1), + 'items.index' => trans_choice('general.items', 2), + 'invoices.index' => trans_choice('general.invoices', 2), + 'revenues.index' => trans_choice('general.revenues', 2), + 'customers.index' => trans_choice('general.customers', 2), + 'bills.index' => trans_choice('general.bills', 2), + 'payments.index' => trans_choice('general.payments', 2), + 'vendors.index' => trans_choice('general.vendors', 2), + 'accounts.index' => trans_choice('general.accounts', 2), + 'transfers.index' => trans_choice('general.transfers', 2), + 'transactions.index' => trans_choice('general.transactions', 2), + 'reconciliations.index' => trans_choice('general.reconciliations', 2), + 'reports.index' => trans_choice('general.reports', 2), + 'settings.index' => trans_choice('general.settings', 2), + 'categories.index' => trans_choice('general.categories', 2), + 'currencies.index' => trans_choice('general.currencies', 2), + 'taxes.index' => trans_choice('general.taxes', 2), + ]; + if ($user->can('read-client-portal')) { // Show only roles with customer permission $roles = Role::all()->reject(function ($r) { @@ -95,7 +135,7 @@ class Users extends Controller $companies = user()->companies()->get()->sortBy('name'); - return view('auth.users.edit', compact('user', 'companies', 'roles')); + return view('auth.users.edit', compact('user', 'companies', 'roles', 'routes')); } /** diff --git a/app/Http/Controllers/Common/Companies.php b/app/Http/Controllers/Common/Companies.php index 21e0e3c41..96ca00d8b 100644 --- a/app/Http/Controllers/Common/Companies.php +++ b/app/Http/Controllers/Common/Companies.php @@ -225,6 +225,6 @@ class Companies extends Controller } } - return redirect('/'); + return redirect()->route('dashboard'); } } diff --git a/app/Http/Controllers/Common/Dashboards.php b/app/Http/Controllers/Common/Dashboards.php index 56c38ea3c..933a9fe26 100644 --- a/app/Http/Controllers/Common/Dashboards.php +++ b/app/Http/Controllers/Common/Dashboards.php @@ -25,8 +25,8 @@ class Dashboards extends Controller { // Add CRUD permission check $this->middleware('permission:create-common-dashboards')->only(['create', 'store', 'duplicate', 'import']); - $this->middleware('permission:read-common-dashboards')->only(['index', 'edit', 'export']); - $this->middleware('permission:update-common-dashboards')->only(['update', 'enable', 'disable', 'share']); + $this->middleware('permission:read-common-dashboards')->only(['show']); + $this->middleware('permission:update-common-dashboards')->only(['index', 'edit', 'export', 'update', 'enable', 'disable', 'share']); $this->middleware('permission:delete-common-dashboards')->only('destroy'); } @@ -100,13 +100,13 @@ class Dashboards extends Controller $response = $this->ajaxDispatch(new CreateDashboard($request)); if ($response['success']) { - $response['redirect'] = route('dashboard'); + $response['redirect'] = route('dashboards.index'); $message = trans('messages.success.added', ['type' => trans_choice('general.dashboards', 1)]); flash($message)->success(); } else { - $response['redirect'] = route('dashboard'); + $response['redirect'] = route('dashboards.create'); $message = $response['message']; @@ -209,7 +209,7 @@ class Dashboards extends Controller { $response = $this->ajaxDispatch(new DeleteDashboard($dashboard)); - $response['redirect'] = route('dashboard'); + $response['redirect'] = route('dashboards.index'); if ($response['success']) { $message = trans('messages.success.deleted', ['type' => $dashboard->name]); diff --git a/app/Http/Middleware/RedirectIfAuthenticated.php b/app/Http/Middleware/RedirectIfAuthenticated.php index 3afdd35c7..0cbd3659a 100644 --- a/app/Http/Middleware/RedirectIfAuthenticated.php +++ b/app/Http/Middleware/RedirectIfAuthenticated.php @@ -17,11 +17,13 @@ class RedirectIfAuthenticated public function handle($request, Closure $next, $guard = null) { if (auth()->guard($guard)->check()) { - if (user()->contact) { + $user = user(); + + if ($user->contact) { return redirect()->route('portal.dashboard'); } - return redirect()->route('dashboard'); + return redirect()->route($user->landing_page); } return $next($request); diff --git a/app/Listeners/Menu/AddAdminItems.php b/app/Listeners/Menu/AddAdminItems.php index c8be23cd5..52436c76e 100644 --- a/app/Listeners/Menu/AddAdminItems.php +++ b/app/Listeners/Menu/AddAdminItems.php @@ -19,28 +19,30 @@ class AddAdminItems $user = user(); $attr = ['icon' => '']; - // Dashboard - $dashboards = user()->dashboards()->enabled()->get(); + // Dashboards + if ($user->can('read-common-dashboards')) { + $dashboards = $user->dashboards()->enabled()->get(); - if ($dashboards->count() > 1) { - $menu->dropdown(trim(trans_choice('general.dashboards', 2)), function ($sub) use ($user, $attr, $dashboards) { - foreach ($dashboards as $key => $dashboard) { - $path = (session('dashboard_id') == $dashboard->id) ? '/' : '/?dashboard_id=' . $dashboard->id; + if ($dashboards->count() > 1) { + $menu->dropdown(trim(trans_choice('general.dashboards', 2)), function ($sub) use ($user, $attr, $dashboards) { + foreach ($dashboards as $key => $dashboard) { + $path = (session('dashboard_id') == $dashboard->id) ? '/' : '/?dashboard_id=' . $dashboard->id; - $sub->url($path, $dashboard->name, $key, $attr); - } - }, 1, [ - 'url' => '/', - 'title' => trans_choice('general.dashboards', 2), - 'icon' => 'fa fa-tachometer-alt', - ]); - } else { - $menu->add([ - 'url' => '/', - 'title' => trans_choice('general.dashboards', 1), - 'icon' => 'fa fa-tachometer-alt', - 'order' => 1, - ]); + $sub->url($path, $dashboard->name, $key, $attr); + } + }, 1, [ + 'url' => '/', + 'title' => trans_choice('general.dashboards', 2), + 'icon' => 'fa fa-tachometer-alt', + ]); + } else { + $menu->add([ + 'url' => '/', + 'title' => trans_choice('general.dashboards', 1), + 'icon' => 'fa fa-tachometer-alt', + 'order' => 1, + ]); + } } // Items diff --git a/app/Models/Auth/User.php b/app/Models/Auth/User.php index cce08165c..265a677b4 100644 --- a/app/Models/Auth/User.php +++ b/app/Models/Auth/User.php @@ -24,7 +24,7 @@ class User extends Authenticatable * * @var array */ - protected $fillable = ['name', 'email', 'password', 'locale', 'enabled']; + protected $fillable = ['name', 'email', 'password', 'locale', 'enabled', 'landing_page']; /** * The attributes that should be hidden for arrays. diff --git a/database/migrations/2020_01_08_000000_core_v200.php b/database/migrations/2020_01_08_000000_core_v200.php index 0d3117b53..0735f5a66 100644 --- a/database/migrations/2020_01_08_000000_core_v200.php +++ b/database/migrations/2020_01_08_000000_core_v200.php @@ -235,6 +235,11 @@ class CoreV200 extends Migration $table->dropUnique(['company_id', 'sku', 'deleted_at']); } }); + + // Landing page column + Schema::table('users', function (Blueprint $table) { + $table->string('landing_page', 70)->nullable()->default('dashboard'); + }); } /** diff --git a/resources/lang/en-GB/auth.php b/resources/lang/en-GB/auth.php index 807957268..5f63db0a1 100644 --- a/resources/lang/en-GB/auth.php +++ b/resources/lang/en-GB/auth.php @@ -13,6 +13,7 @@ return [ 'current_email' => 'Current Email', 'reset' => 'Reset', 'never' => 'never', + 'landing_page' => 'Landing Page', 'password' => [ 'current' => 'Password', diff --git a/resources/views/auth/users/create.blade.php b/resources/views/auth/users/create.blade.php index e2667c1c9..5a1b69b4d 100644 --- a/resources/views/auth/users/create.blade.php +++ b/resources/views/auth/users/create.blade.php @@ -27,6 +27,8 @@ {{ Form::selectGroup('locale', trans_choice('general.languages', 1), 'flag', language()->allowed(), setting('default.locale')) }} + {{ Form::selectGroup('landing_page', trans('auth.landing_page'), 'sign-in-alt', $routes, 'dashboard') }} + @if (setting('default.use_gravatar', '0') == '1') @stack('picture_input_start')
{{ trans('errors.message.403') }}
- {{ trans('general.go_to', ['name' => trans_choice('general.dashboards', 1)]) }} + @php $landing_page = user() ? route(user()->landing_page) : route('login'); @endphp + + {{ trans('general.go_to', ['name' => trans_choice('general.dashboards', 1)]) }}{{ trans('errors.message.404') }}
- {{ trans('general.go_to', ['name' => trans_choice('general.dashboards', 1)]) }} + @php $landing_page = user() ? route(user()->landing_page) : route('login'); @endphp + + {{ trans('general.go_to', ['name' => trans_choice('general.dashboards', 1)]) }}{{ trans('errors.message.500') }}
- {{ trans('general.go_to', ['name' => trans_choice('general.dashboards', 1)]) }} + @php $landing_page = user() ? route(user()->landing_page) : route('login'); @endphp + + {{ trans('general.go_to', ['name' => trans_choice('general.dashboards', 1)]) }}