diff --git a/app/Http/Controllers/ClientPortal/ContactHashLoginController.php b/app/Http/Controllers/ClientPortal/ContactHashLoginController.php index c6316205a966..bffbf0ff6450 100644 --- a/app/Http/Controllers/ClientPortal/ContactHashLoginController.php +++ b/app/Http/Controllers/ClientPortal/ContactHashLoginController.php @@ -31,4 +31,9 @@ class ContactHashLoginController extends Controller { return redirect('/client/login'); } + + public function errorPage() + { + return render('generic.error', ['title' => session()->get('title'), 'notification' => session()->get('notification')]); + } } diff --git a/app/Http/Middleware/CheckClientExistence.php b/app/Http/Middleware/CheckClientExistence.php index 3b6802788a9a..f752b1edab2a 100644 --- a/app/Http/Middleware/CheckClientExistence.php +++ b/app/Http/Middleware/CheckClientExistence.php @@ -31,15 +31,15 @@ class CheckClientExistence $multiple_contacts = ClientContact::query() ->where('email', auth('contact')->user()->email) ->whereNotNull('email') + ->whereNull('deleted_at') ->distinct('company_id') + ->distinct('email') ->whereNotNull('company_id') ->whereHas('client', function ($query) { return $query->whereNull('deleted_at'); }) ->get(); -nlog($multiple_contacts); - if (count($multiple_contacts) == 0) { Auth::logout(); diff --git a/app/Http/Middleware/ClientPortalEnabled.php b/app/Http/Middleware/ClientPortalEnabled.php index b35af02143e3..bf656f478af5 100644 --- a/app/Http/Middleware/ClientPortalEnabled.php +++ b/app/Http/Middleware/ClientPortalEnabled.php @@ -26,7 +26,7 @@ class ClientPortalEnabled public function handle($request, Closure $next) { if (auth()->user()->client->getSetting('enable_client_portal') === false) { - return redirect()->to('client/dashboard'); + return redirect()->route('client.error')->with(['title' => ctrans('texts.client_portal'), 'notification' => 'This section of the app has been disabled by the administrator.']); } return $next($request); diff --git a/app/Listeners/Activity/ExpenseDeletedActivity.php b/app/Listeners/Activity/ExpenseDeletedActivity.php index da9dc00932fd..6abbf97e2526 100644 --- a/app/Listeners/Activity/ExpenseDeletedActivity.php +++ b/app/Listeners/Activity/ExpenseDeletedActivity.php @@ -43,7 +43,7 @@ class ExpenseDeletedActivity implements ShouldQueue $fields = new stdClass; - $user_id = $event->event_vars['user_id'] ?: $event->expense->user_id; + $user_id = array_key_exists('user_id', $event->event_vars['user_id']) ? $event->event_vars['user_id'] : $event->expense->user_id; $fields->expense_id = $event->expense->id; $fields->user_id = $user_id; diff --git a/app/Listeners/Activity/TaskDeletedActivity.php b/app/Listeners/Activity/TaskDeletedActivity.php index 61d9797484eb..65a273e2a7cb 100644 --- a/app/Listeners/Activity/TaskDeletedActivity.php +++ b/app/Listeners/Activity/TaskDeletedActivity.php @@ -43,7 +43,7 @@ class TaskDeletedActivity implements ShouldQueue $fields = new stdClass; - $user_id = $event->event_vars['user_id'] ?: $event->task->user_id; + $user_id = array_key_exists('user_id', $event->event_vars) ? $event->event_vars['user_id'] : $event->task->user_id; $fields->task_id = $event->task->id; $fields->user_id = $user_id; diff --git a/resources/views/portal/ninja2020/components/general/sidebar/header.blade.php b/resources/views/portal/ninja2020/components/general/sidebar/header.blade.php index a5e0a6f8e334..e6d820c4ac99 100644 --- a/resources/views/portal/ninja2020/components/general/sidebar/header.blade.php +++ b/resources/views/portal/ninja2020/components/general/sidebar/header.blade.php @@ -23,7 +23,7 @@
@foreach($multiple_contacts as $contact) - {{ $contact->company->present()->name }} + {{ $contact->company->present()->name() }} - {{ $contact->client->present()->name()}} @endforeach
diff --git a/resources/views/portal/ninja2020/generic/error.blade.php b/resources/views/portal/ninja2020/generic/error.blade.php new file mode 100644 index 000000000000..40059f037399 --- /dev/null +++ b/resources/views/portal/ninja2020/generic/error.blade.php @@ -0,0 +1,20 @@ +@extends('portal.ninja2020.layout.clean') +@section('meta_title', ctrans('texts.confirmation')) + +@section('body') + +
+
+
+ Invoice Ninja logo +

{{ $title }}

+

{{ $notification }}

+
+
+
+ +@stop + +@push('footer') + +@endpush diff --git a/routes/client.php b/routes/client.php index fb228c2e7688..f0602b260e30 100644 --- a/routes/client.php +++ b/routes/client.php @@ -24,6 +24,7 @@ Route::get('tmp_pdf/{hash}', 'ClientPortal\TempRouteController@index')->name('tm Route::get('client/key_login/{contact_key}', 'ClientPortal\ContactHashLoginController@login')->name('client.contact_login')->middleware(['contact_key_login']); Route::get('client/magic_link/{magic_link}', 'ClientPortal\ContactHashLoginController@magicLink')->name('client.contact_magic_link')->middleware(['contact_key_login']); Route::get('documents/{document_hash}', 'ClientPortal\DocumentController@publicDownload')->name('documents.public_download'); +Route::get('error', 'ClientPortal\ContactHashLoginController@errorPage')->name('client.error'); //todo implement domain DB Route::group(['middleware' => ['auth:contact', 'locale', 'check_client_existence'], 'prefix' => 'client', 'as' => 'client.'], function () { @@ -54,7 +55,7 @@ Route::group(['middleware' => ['auth:contact', 'locale', 'check_client_existence Route::get('payment_methods/{payment_method}/verification', 'ClientPortal\PaymentMethodController@verify')->name('payment_methods.verification'); Route::post('payment_methods/{payment_method}/verification', 'ClientPortal\PaymentMethodController@processVerification'); - Route::resource('payment_methods', 'ClientPortal\PaymentMethodController')->except(['edit', 'update']); // name = (payment_methods. index / create / show / update / destroy / edit + Route::resource('payment_methods', 'ClientPortal\PaymentMethodController')->except(['edit', 'update']); Route::match(['GET', 'POST'], 'quotes/approve', 'ClientPortal\QuoteController@bulk')->name('quotes.bulk'); Route::get('quotes', 'ClientPortal\QuoteController@index')->name('quotes.index')->middleware('portal_enabled'); @@ -74,10 +75,9 @@ Route::group(['middleware' => ['auth:contact', 'locale', 'check_client_existence Route::get('subscriptions/{recurring_invoice}/plan_switch/{target}', 'ClientPortal\SubscriptionPlanSwitchController@index')->name('subscription.plan_switch'); - Route::resource('subscriptions', 'ClientPortal\SubscriptionController')->only(['index']); + Route::resource('subscriptions', 'ClientPortal\SubscriptionController')->middleware('portal_enabled')->only(['index']); Route::post('upload', 'ClientPortal\UploadController')->name('upload.store'); - Route::get('logout', 'Auth\ContactLoginController@logout')->name('logout'); });