user landing page

This commit is contained in:
denisdulici 2020-01-21 11:59:52 +03:00
parent 61a6ea6687
commit 9f00e1a0d6
16 changed files with 99 additions and 38 deletions

View File

@ -112,7 +112,7 @@ class Login extends Controller
'error' => false, 'error' => false,
'message' => null, 'message' => null,
'data' => null, 'data' => null,
'redirect' => redirect()->intended()->getTargetUrl(), 'redirect' => redirect()->intended($user->landing_page)->getTargetUrl(),
]; ];
return response()->json($response); return response()->json($response);

View File

@ -35,13 +35,33 @@ class Users extends Controller
*/ */
public function create() 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) { $roles = Role::all()->reject(function ($r) {
return $r->hasPermission('read-client-portal'); return $r->hasPermission('read-client-portal');
}); });
$companies = user()->companies()->get()->sortBy('name'); $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) 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')) { if ($user->can('read-client-portal')) {
// Show only roles with customer permission // Show only roles with customer permission
$roles = Role::all()->reject(function ($r) { $roles = Role::all()->reject(function ($r) {
@ -95,7 +135,7 @@ class Users extends Controller
$companies = user()->companies()->get()->sortBy('name'); $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'));
} }
/** /**

View File

@ -225,6 +225,6 @@ class Companies extends Controller
} }
} }
return redirect('/'); return redirect()->route('dashboard');
} }
} }

View File

@ -25,8 +25,8 @@ class Dashboards extends Controller
{ {
// Add CRUD permission check // Add CRUD permission check
$this->middleware('permission:create-common-dashboards')->only(['create', 'store', 'duplicate', 'import']); $this->middleware('permission:create-common-dashboards')->only(['create', 'store', 'duplicate', 'import']);
$this->middleware('permission:read-common-dashboards')->only(['index', 'edit', 'export']); $this->middleware('permission:read-common-dashboards')->only(['show']);
$this->middleware('permission:update-common-dashboards')->only(['update', 'enable', 'disable', 'share']); $this->middleware('permission:update-common-dashboards')->only(['index', 'edit', 'export', 'update', 'enable', 'disable', 'share']);
$this->middleware('permission:delete-common-dashboards')->only('destroy'); $this->middleware('permission:delete-common-dashboards')->only('destroy');
} }
@ -100,13 +100,13 @@ class Dashboards extends Controller
$response = $this->ajaxDispatch(new CreateDashboard($request)); $response = $this->ajaxDispatch(new CreateDashboard($request));
if ($response['success']) { if ($response['success']) {
$response['redirect'] = route('dashboard'); $response['redirect'] = route('dashboards.index');
$message = trans('messages.success.added', ['type' => trans_choice('general.dashboards', 1)]); $message = trans('messages.success.added', ['type' => trans_choice('general.dashboards', 1)]);
flash($message)->success(); flash($message)->success();
} else { } else {
$response['redirect'] = route('dashboard'); $response['redirect'] = route('dashboards.create');
$message = $response['message']; $message = $response['message'];
@ -209,7 +209,7 @@ class Dashboards extends Controller
{ {
$response = $this->ajaxDispatch(new DeleteDashboard($dashboard)); $response = $this->ajaxDispatch(new DeleteDashboard($dashboard));
$response['redirect'] = route('dashboard'); $response['redirect'] = route('dashboards.index');
if ($response['success']) { if ($response['success']) {
$message = trans('messages.success.deleted', ['type' => $dashboard->name]); $message = trans('messages.success.deleted', ['type' => $dashboard->name]);

View File

@ -17,11 +17,13 @@ class RedirectIfAuthenticated
public function handle($request, Closure $next, $guard = null) public function handle($request, Closure $next, $guard = null)
{ {
if (auth()->guard($guard)->check()) { if (auth()->guard($guard)->check()) {
if (user()->contact) { $user = user();
if ($user->contact) {
return redirect()->route('portal.dashboard'); return redirect()->route('portal.dashboard');
} }
return redirect()->route('dashboard'); return redirect()->route($user->landing_page);
} }
return $next($request); return $next($request);

View File

@ -19,28 +19,30 @@ class AddAdminItems
$user = user(); $user = user();
$attr = ['icon' => '']; $attr = ['icon' => ''];
// Dashboard // Dashboards
$dashboards = user()->dashboards()->enabled()->get(); if ($user->can('read-common-dashboards')) {
$dashboards = $user->dashboards()->enabled()->get();
if ($dashboards->count() > 1) { if ($dashboards->count() > 1) {
$menu->dropdown(trim(trans_choice('general.dashboards', 2)), function ($sub) use ($user, $attr, $dashboards) { $menu->dropdown(trim(trans_choice('general.dashboards', 2)), function ($sub) use ($user, $attr, $dashboards) {
foreach ($dashboards as $key => $dashboard) { foreach ($dashboards as $key => $dashboard) {
$path = (session('dashboard_id') == $dashboard->id) ? '/' : '/?dashboard_id=' . $dashboard->id; $path = (session('dashboard_id') == $dashboard->id) ? '/' : '/?dashboard_id=' . $dashboard->id;
$sub->url($path, $dashboard->name, $key, $attr); $sub->url($path, $dashboard->name, $key, $attr);
} }
}, 1, [ }, 1, [
'url' => '/', 'url' => '/',
'title' => trans_choice('general.dashboards', 2), 'title' => trans_choice('general.dashboards', 2),
'icon' => 'fa fa-tachometer-alt', 'icon' => 'fa fa-tachometer-alt',
]); ]);
} else { } else {
$menu->add([ $menu->add([
'url' => '/', 'url' => '/',
'title' => trans_choice('general.dashboards', 1), 'title' => trans_choice('general.dashboards', 1),
'icon' => 'fa fa-tachometer-alt', 'icon' => 'fa fa-tachometer-alt',
'order' => 1, 'order' => 1,
]); ]);
}
} }
// Items // Items

View File

@ -24,7 +24,7 @@ class User extends Authenticatable
* *
* @var array * @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. * The attributes that should be hidden for arrays.

View File

@ -235,6 +235,11 @@ class CoreV200 extends Migration
$table->dropUnique(['company_id', 'sku', 'deleted_at']); $table->dropUnique(['company_id', 'sku', 'deleted_at']);
} }
}); });
// Landing page column
Schema::table('users', function (Blueprint $table) {
$table->string('landing_page', 70)->nullable()->default('dashboard');
});
} }
/** /**

View File

@ -13,6 +13,7 @@ return [
'current_email' => 'Current Email', 'current_email' => 'Current Email',
'reset' => 'Reset', 'reset' => 'Reset',
'never' => 'never', 'never' => 'never',
'landing_page' => 'Landing Page',
'password' => [ 'password' => [
'current' => 'Password', 'current' => 'Password',

View File

@ -27,6 +27,8 @@
{{ Form::selectGroup('locale', trans_choice('general.languages', 1), 'flag', language()->allowed(), setting('default.locale')) }} {{ 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') @if (setting('default.use_gravatar', '0') == '1')
@stack('picture_input_start') @stack('picture_input_start')
<div class="form-group col-md-6"> <div class="form-group col-md-6">

View File

@ -28,6 +28,8 @@
{{ Form::selectGroup('locale', trans_choice('general.languages', 1), 'flag', language()->allowed(), $user->locale) }} {{ Form::selectGroup('locale', trans_choice('general.languages', 1), 'flag', language()->allowed(), $user->locale) }}
{{ Form::selectGroup('landing_page', trans('auth.landing_page'), 'sign-in-alt', $routes, $user->landing_page) }}
@if (setting('default.use_gravatar', '0') == '1') @if (setting('default.use_gravatar', '0') == '1')
@stack('picture_input_start') @stack('picture_input_start')
<div class="form-group col-md-6"> <div class="form-group col-md-6">

View File

@ -19,7 +19,7 @@
'@click' => 'onCreateWidget()', '@click' => 'onCreateWidget()',
]) !!} ]) !!}
@endpermission @endpermission
@permission('read-common-dashboards') @permission('update-common-dashboards')
<div class="dropdown-divider"></div> <div class="dropdown-divider"></div>
@permission('create-common-dashboards') @permission('create-common-dashboards')
<a class="dropdown-item" href="{{ route('dashboards.create') }}">{{ trans('general.title.create', ['type' => trans_choice('general.dashboards', 1)]) }}</a> <a class="dropdown-item" href="{{ route('dashboards.create') }}">{{ trans('general.title.create', ['type' => trans_choice('general.dashboards', 1)]) }}</a>

View File

@ -10,7 +10,9 @@
<div class="card-body"> <div class="card-body">
<p>{{ trans('errors.message.403') }}</p> <p>{{ trans('errors.message.403') }}</p>
<a href="{{ url('/') }}" class="btn btn-success header-button-top"><span class="fa fa-tachometer-alt"></span> &nbsp;{{ trans('general.go_to', ['name' => trans_choice('general.dashboards', 1)]) }}</a> @php $landing_page = user() ? route(user()->landing_page) : route('login'); @endphp
<a href="{{ $landing_page }}" class="btn btn-success header-button-top"><span class="fa fa-tachometer-alt"></span> &nbsp;{{ trans('general.go_to', ['name' => trans_choice('general.dashboards', 1)]) }}</a>
</div> </div>
</div> </div>
@endsection @endsection

View File

@ -10,7 +10,9 @@
<div class="card-body"> <div class="card-body">
<p>{{ trans('errors.message.404') }}</p> <p>{{ trans('errors.message.404') }}</p>
<a href="{{ url('/') }}" class="btn btn-success header-button-top"><span class="fa fa-tachometer-alt"></span> &nbsp;{{ trans('general.go_to', ['name' => trans_choice('general.dashboards', 1)]) }}</a> @php $landing_page = user() ? route(user()->landing_page) : route('login'); @endphp
<a href="{{ $landing_page }}" class="btn btn-success header-button-top"><span class="fa fa-tachometer-alt"></span> &nbsp;{{ trans('general.go_to', ['name' => trans_choice('general.dashboards', 1)]) }}</a>
</div> </div>
</div> </div>
@endsection @endsection

View File

@ -10,8 +10,9 @@
<div class="card-body"> <div class="card-body">
<p>{{ trans('errors.message.500') }}</p> <p>{{ trans('errors.message.500') }}</p>
<a href="{{ url('/') }}" class="btn btn-success header-button-top"><span class="fa fa-tachometer-alt"></span> &nbsp;{{ trans('general.go_to', ['name' => trans_choice('general.dashboards', 1)]) }}</a> @php $landing_page = user() ? route(user()->landing_page) : route('login'); @endphp
<a href="{{ $landing_page }}" class="btn btn-success header-button-top"><span class="fa fa-tachometer-alt"></span> &nbsp;{{ trans('general.go_to', ['name' => trans_choice('general.dashboards', 1)]) }}</a>
</div> </div>
</div> </div>
@endsection @endsection

View File

@ -6,10 +6,12 @@
<li class="nav-item dropdown"> <li class="nav-item dropdown">
<a class="nav-link" href="#" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> <a class="nav-link" href="#" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<span class="avatar avatar-xs background-unset"> <span class="avatar avatar-xs background-unset">
<img class="border-radius-none border-0 mr-3" alt="Image placeholder" src="{{ setting('company.logo') ? Storage::url(setting('company.logo')) : asset('public/img/akaunting-logo-white.png') }}"> <img class="border-radius-none border-0 mr-3" alt="Akaunting" src="{{ asset('public/img/akaunting-logo-white.png') }}">
</span> </span>
<span class="nav-link-text long-texts pl-2 mwpx-100">{{ Str::limit(setting('company.name'), 22) }}</span> <span class="nav-link-text long-texts pl-2 mwpx-100">{{ Str::limit(setting('company.name'), 22) }}</span>
@permission('read-common-companies')
<i class="fas fa-sort-down pl-2"></i> <i class="fas fa-sort-down pl-2"></i>
@endpermission
</a> </a>
@permission('read-common-companies') @permission('read-common-companies')
<div class="dropdown-menu dropdown-menu-right menu-dropdown menu-dropdown-width"> <div class="dropdown-menu dropdown-menu-right menu-dropdown menu-dropdown-width">