Merge pull request #1154 from denisdulici/master

User landing page
This commit is contained in:
Denis Duliçi 2020-01-21 12:01:49 +03:00 committed by GitHub
commit 74b0d420a9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
16 changed files with 99 additions and 38 deletions

View File

@ -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);

View File

@ -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'));
}
/**

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
$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]);

View File

@ -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);

View File

@ -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

View File

@ -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.

View File

@ -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');
});
}
/**

View File

@ -13,6 +13,7 @@ return [
'current_email' => 'Current Email',
'reset' => 'Reset',
'never' => 'never',
'landing_page' => 'Landing Page',
'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('landing_page', trans('auth.landing_page'), 'sign-in-alt', $routes, 'dashboard') }}
@if (setting('default.use_gravatar', '0') == '1')
@stack('picture_input_start')
<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('landing_page', trans('auth.landing_page'), 'sign-in-alt', $routes, $user->landing_page) }}
@if (setting('default.use_gravatar', '0') == '1')
@stack('picture_input_start')
<div class="form-group col-md-6">

View File

@ -19,7 +19,7 @@
'@click' => 'onCreateWidget()',
]) !!}
@endpermission
@permission('read-common-dashboards')
@permission('update-common-dashboards')
<div class="dropdown-divider"></div>
@permission('create-common-dashboards')
<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">
<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>
@endsection

View File

@ -10,7 +10,9 @@
<div class="card-body">
<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>
@endsection

View File

@ -10,8 +10,9 @@
<div class="card-body">
<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>
@endsection

View File

@ -6,10 +6,12 @@
<li class="nav-item dropdown">
<a class="nav-link" href="#" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<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 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>
@endpermission
</a>
@permission('read-common-companies')
<div class="dropdown-menu dropdown-menu-right menu-dropdown menu-dropdown-width">