diff --git a/app/Helpers/Mail/GmailTransport.php b/app/Helpers/Mail/GmailTransport.php index 020147807c9a..1be44af73641 100644 --- a/app/Helpers/Mail/GmailTransport.php +++ b/app/Helpers/Mail/GmailTransport.php @@ -34,7 +34,7 @@ class GmailTransport extends AbstractTransport $message = MessageConverter::toEmail($message->getOriginalMessage()); /** @phpstan-ignore-next-line **/ - $token = $message->getHeaders()->get('gmailtoken')->getValue(); + $token = $message->getHeaders()->get('gmailtoken')->getValue(); // @phpstan-ignore-line $message->getHeaders()->remove('gmailtoken'); $client = new Client(); @@ -53,9 +53,8 @@ class GmailTransport extends AbstractTransport if ($bccs) { $bcc_list = 'Bcc: '; + foreach ($bccs->getAddresses() as $address) { - /** @phpstan-ignore-next-line **/ - foreach ($bccs->getAddresses() as $address) { $bcc_list .= $address->getAddress() .','; } diff --git a/app/Http/Middleware/CheckClientExistence.php b/app/Http/Middleware/CheckClientExistence.php index 8b8977a0048e..34a3666e4fdb 100644 --- a/app/Http/Middleware/CheckClientExistence.php +++ b/app/Http/Middleware/CheckClientExistence.php @@ -32,8 +32,10 @@ class CheckClientExistence return $next($request); } + auth()->guard('contact')->user()->loadMissing(['company']); // @phpstan-ignore method.notFound + $multiple_contacts = ClientContact::query() - ->with('client.gateway_tokens', 'company') + // ->with('client.gateway_tokens', 'company') ->where('email', auth()->guard('contact')->user()->email) ->whereNotNull('email') ->where('email', '<>', '') @@ -56,6 +58,11 @@ class CheckClientExistence if (count($multiple_contacts) == 1 && ! Auth::guard('contact')->check()) { Auth::guard('contact')->loginUsingId($multiple_contacts[0]->id, true); + + auth()->guard('contact')->user()->loadMissing(['client' => function ($query) { + $query->without('gateway_tokens', 'documents', 'contacts.company', 'contacts'); // Exclude 'grandchildren' relation of 'client' + }]); + } session()->put('multiple_contacts', $multiple_contacts); diff --git a/app/Http/Middleware/ClientPortalEnabled.php b/app/Http/Middleware/ClientPortalEnabled.php index f4562eca670b..93027d6b9691 100644 --- a/app/Http/Middleware/ClientPortalEnabled.php +++ b/app/Http/Middleware/ClientPortalEnabled.php @@ -25,10 +25,12 @@ class ClientPortalEnabled */ public function handle($request, Closure $next) { - /** @var \App\Models\ClientContact $client_contact */ - $client_contact = auth()->user(); - if ($client_contact->client->getSetting('enable_client_portal') === false) { + auth()->guard('contact')->user()->loadMissing(['client' => function ($query) { + $query->without('gateway_tokens', 'documents', 'contacts.company', 'contacts'); // Exclude 'grandchildren' relation of 'client' + }]); + + if (auth()->guard('contact')->user()->client->getSetting('enable_client_portal') === false) { return redirect()->route('client.error')->with(['title' => ctrans('texts.client_portal'), 'notification' => 'This section of the app has been disabled by the administrator.']); } diff --git a/app/Http/Middleware/Locale.php b/app/Http/Middleware/Locale.php index 0fbd44ab7f6f..f95be219c7fc 100644 --- a/app/Http/Middleware/Locale.php +++ b/app/Http/Middleware/Locale.php @@ -69,15 +69,23 @@ class Locale */ public function handle($request, Closure $next) { + + /*LOCALE SET */ if ($request->has('lang') && in_array($request->input('lang', 'en'), $this->locales)) { $locale = $request->input('lang'); App::setLocale($locale); } elseif (auth()->guard('contact')->user()) { - App::setLocale(auth()->guard('contact')->user()->client()->setEagerLoads([])->first()->locale()); + + auth()->guard('contact')->user()->loadMissing(['client' => function ($query) { // @phpstan-ignore method.undefined + $query->without('gateway_tokens', 'documents', 'contacts.company', 'contacts'); // Exclude 'grandchildren' relation of 'client' + }]); + + App::setLocale(auth()->guard('contact')->user()->client->locale()); } elseif (auth()->user()) { try { - App::setLocale(auth()->user()->company()->getLocale()); + App::setLocale(auth()->user()->company()->getLocale()); // @phpstan-ignore method.undefined + } catch (\Exception $e) { } } else { diff --git a/app/Http/Requests/ClientPortal/Credits/ShowCreditRequest.php b/app/Http/Requests/ClientPortal/Credits/ShowCreditRequest.php index dee356bad22c..19abb31bd009 100644 --- a/app/Http/Requests/ClientPortal/Credits/ShowCreditRequest.php +++ b/app/Http/Requests/ClientPortal/Credits/ShowCreditRequest.php @@ -14,6 +14,8 @@ class ShowCreditRequest extends FormRequest */ public function authorize() { + auth()->guard('contact')->user()->loadMissing(['company']); + return ! $this->credit->is_deleted && auth()->guard('contact')->user()->company->enabled_modules & PortalComposer::MODULE_CREDITS && auth()->guard('contact')->user()->client_id === $this->credit->client_id; diff --git a/app/Http/Requests/ClientPortal/Invoices/ProcessInvoicesInBulkRequest.php b/app/Http/Requests/ClientPortal/Invoices/ProcessInvoicesInBulkRequest.php index 0171c66d19d9..59469b2f891f 100644 --- a/app/Http/Requests/ClientPortal/Invoices/ProcessInvoicesInBulkRequest.php +++ b/app/Http/Requests/ClientPortal/Invoices/ProcessInvoicesInBulkRequest.php @@ -19,6 +19,9 @@ class ProcessInvoicesInBulkRequest extends FormRequest { public function authorize() { + + auth()->guard('contact')->user()->loadMissing(['company']); + return auth()->guard('contact')->user()->company->enabled_modules & PortalComposer::MODULE_INVOICES; } diff --git a/app/Http/Requests/ClientPortal/Invoices/ShowInvoiceRequest.php b/app/Http/Requests/ClientPortal/Invoices/ShowInvoiceRequest.php index dc31612cb86a..27c55d602a4a 100644 --- a/app/Http/Requests/ClientPortal/Invoices/ShowInvoiceRequest.php +++ b/app/Http/Requests/ClientPortal/Invoices/ShowInvoiceRequest.php @@ -23,6 +23,9 @@ class ShowInvoiceRequest extends Request */ public function authorize(): bool { + + auth()->guard('contact')->user()->loadMissing(['company']); + return (int) auth()->guard('contact')->user()->client_id === (int) $this->invoice->client_id && auth()->guard('contact')->user()->company->enabled_modules & PortalComposer::MODULE_INVOICES; } diff --git a/app/Http/Requests/ClientPortal/Invoices/ShowInvoicesRequest.php b/app/Http/Requests/ClientPortal/Invoices/ShowInvoicesRequest.php index b74e4c7dda1f..872da16d6699 100644 --- a/app/Http/Requests/ClientPortal/Invoices/ShowInvoicesRequest.php +++ b/app/Http/Requests/ClientPortal/Invoices/ShowInvoicesRequest.php @@ -19,6 +19,9 @@ class ShowInvoicesRequest extends FormRequest { public function authorize() { + + auth()->guard('contact')->user()->loadMissing(['company']); + return auth()->guard('contact')->user()->company->enabled_modules & PortalComposer::MODULE_INVOICES; } diff --git a/app/Http/Requests/ClientPortal/PaymentMethod/CreatePaymentMethodRequest.php b/app/Http/Requests/ClientPortal/PaymentMethod/CreatePaymentMethodRequest.php index 76ffa929dfd7..272e8e1bf2e2 100644 --- a/app/Http/Requests/ClientPortal/PaymentMethod/CreatePaymentMethodRequest.php +++ b/app/Http/Requests/ClientPortal/PaymentMethod/CreatePaymentMethodRequest.php @@ -18,6 +18,11 @@ class CreatePaymentMethodRequest extends FormRequest */ public function authorize(): bool { + + auth()->guard('contact')->user()->loadMissing(['client' => function ($query) { + $query->without('gateway_tokens', 'documents', 'contacts.company', 'contacts'); // Exclude 'grandchildren' relation of 'client' + }]); + /** @var Client $client */ $client = auth()->guard('contact')->user()->client; diff --git a/app/Http/Requests/ClientPortal/PrePayments/StorePrePaymentRequest.php b/app/Http/Requests/ClientPortal/PrePayments/StorePrePaymentRequest.php index 4f304bb1b811..5a5c8d7be439 100644 --- a/app/Http/Requests/ClientPortal/PrePayments/StorePrePaymentRequest.php +++ b/app/Http/Requests/ClientPortal/PrePayments/StorePrePaymentRequest.php @@ -15,6 +15,13 @@ class StorePrePaymentRequest extends FormRequest */ public function authorize() { + + auth()->guard('contact')->user()->loadMissing(['company']); + + auth()->guard('contact')->user()->loadMissing(['client' => function ($query) { + $query->without('gateway_tokens', 'documents', 'contacts.company', 'contacts'); // Exclude 'grandchildren' relation of 'client' + }]); + return auth()->guard('contact')->user()->company->enabled_modules & PortalComposer::MODULE_INVOICES; } diff --git a/app/Http/Requests/ClientPortal/Quotes/ProcessQuotesInBulkRequest.php b/app/Http/Requests/ClientPortal/Quotes/ProcessQuotesInBulkRequest.php index b168babfccf9..502eb5d3c3a8 100644 --- a/app/Http/Requests/ClientPortal/Quotes/ProcessQuotesInBulkRequest.php +++ b/app/Http/Requests/ClientPortal/Quotes/ProcessQuotesInBulkRequest.php @@ -21,6 +21,9 @@ class ProcessQuotesInBulkRequest extends FormRequest { public function authorize() { + + auth()->guard('contact')->user()->loadMissing(['company']); + return auth()->guard('contact')->user()->company->enabled_modules & PortalComposer::MODULE_QUOTES; } diff --git a/app/Http/Requests/ClientPortal/Quotes/ShowQuoteRequest.php b/app/Http/Requests/ClientPortal/Quotes/ShowQuoteRequest.php index 70a01b8e0b92..7643ec213e68 100644 --- a/app/Http/Requests/ClientPortal/Quotes/ShowQuoteRequest.php +++ b/app/Http/Requests/ClientPortal/Quotes/ShowQuoteRequest.php @@ -19,6 +19,9 @@ class ShowQuoteRequest extends FormRequest { public function authorize() { + + auth()->guard('contact')->user()->loadMissing(['company']); + return auth()->guard('contact')->user()->client->id === (int) $this->quote->client_id && auth()->guard('contact')->user()->company->enabled_modules & PortalComposer::MODULE_QUOTES; } diff --git a/app/Http/Requests/ClientPortal/Quotes/ShowQuotesRequest.php b/app/Http/Requests/ClientPortal/Quotes/ShowQuotesRequest.php index 4a244cd05596..87f4ccd70d9b 100644 --- a/app/Http/Requests/ClientPortal/Quotes/ShowQuotesRequest.php +++ b/app/Http/Requests/ClientPortal/Quotes/ShowQuotesRequest.php @@ -19,6 +19,9 @@ class ShowQuotesRequest extends FormRequest { public function authorize() { + + auth()->guard('contact')->user()->loadMissing(['company']); + return auth()->guard('contact')->user()->company->enabled_modules & PortalComposer::MODULE_QUOTES; } diff --git a/app/Http/Requests/ClientPortal/RecurringInvoices/RequestCancellationRequest.php b/app/Http/Requests/ClientPortal/RecurringInvoices/RequestCancellationRequest.php index 25acacd46d1d..418c91493950 100644 --- a/app/Http/Requests/ClientPortal/RecurringInvoices/RequestCancellationRequest.php +++ b/app/Http/Requests/ClientPortal/RecurringInvoices/RequestCancellationRequest.php @@ -9,6 +9,9 @@ class RequestCancellationRequest extends FormRequest { public function authorize() { + + auth()->guard('contact')->user()->loadMissing(['company']); + return auth()->guard('contact')->user()->company->enabled_modules & PortalComposer::MODULE_RECURRING_INVOICES; } diff --git a/app/Http/Requests/ClientPortal/RecurringInvoices/ShowRecurringInvoiceRequest.php b/app/Http/Requests/ClientPortal/RecurringInvoices/ShowRecurringInvoiceRequest.php index 6a2649661660..a060215d8baa 100644 --- a/app/Http/Requests/ClientPortal/RecurringInvoices/ShowRecurringInvoiceRequest.php +++ b/app/Http/Requests/ClientPortal/RecurringInvoices/ShowRecurringInvoiceRequest.php @@ -18,6 +18,8 @@ class ShowRecurringInvoiceRequest extends Request { public function authorize(): bool { + auth()->guard('contact')->user()->loadMissing(['company']); + return auth()->guard('contact')->user()->client->id == $this->recurring_invoice->client_id && auth()->guard('contact')->user()->company->enabled_modules & PortalComposer::MODULE_RECURRING_INVOICES; } diff --git a/app/Http/Requests/ClientPortal/RecurringInvoices/ShowRecurringInvoicesRequest.php b/app/Http/Requests/ClientPortal/RecurringInvoices/ShowRecurringInvoicesRequest.php index ab2378ecc5d3..5cde35b30c2c 100644 --- a/app/Http/Requests/ClientPortal/RecurringInvoices/ShowRecurringInvoicesRequest.php +++ b/app/Http/Requests/ClientPortal/RecurringInvoices/ShowRecurringInvoicesRequest.php @@ -19,6 +19,8 @@ class ShowRecurringInvoicesRequest extends FormRequest { public function authorize() { + auth()->guard('contact')->user()->loadMissing(['company']); + return auth()->guard('contact')->user()->company->enabled_modules & PortalComposer::MODULE_RECURRING_INVOICES; } diff --git a/app/Http/Requests/ClientPortal/Tasks/ShowTasksRequest.php b/app/Http/Requests/ClientPortal/Tasks/ShowTasksRequest.php index edd6097caa11..143ef60e21aa 100644 --- a/app/Http/Requests/ClientPortal/Tasks/ShowTasksRequest.php +++ b/app/Http/Requests/ClientPortal/Tasks/ShowTasksRequest.php @@ -23,6 +23,11 @@ class ShowTasksRequest extends FormRequest */ public function authorize() { + + auth()->guard('contact')->user()->loadMissing(['client' => function ($query) { + $query->without('gateway_tokens', 'documents', 'contacts.company', 'contacts'); // Exclude 'grandchildren' relation of 'client' + }]); + return (bool) auth()->guard('contact')->user()->client->getSetting('enable_client_portal_tasks'); } diff --git a/app/Http/Requests/ClientPortal/Uploads/StoreUploadRequest.php b/app/Http/Requests/ClientPortal/Uploads/StoreUploadRequest.php index 10680342201b..50369aa5c99f 100644 --- a/app/Http/Requests/ClientPortal/Uploads/StoreUploadRequest.php +++ b/app/Http/Requests/ClientPortal/Uploads/StoreUploadRequest.php @@ -22,6 +22,12 @@ class StoreUploadRequest extends FormRequest */ public function authorize() { + + /** @phpstan-ignore-next-line **/ + auth()->guard('contact')->user()->loadMissing(['client' => function ($query) { + $query->without('gateway_tokens', 'documents', 'contacts.company', 'contacts'); // Exclude 'grandchildren' relation of 'client' + }]); + return (bool) auth()->guard('contact')->user()->client->getSetting('client_portal_enable_uploads'); } diff --git a/app/Http/ViewComposers/PortalComposer.php b/app/Http/ViewComposers/PortalComposer.php index b7c5fba8602b..15c8016a5f89 100644 --- a/app/Http/ViewComposers/PortalComposer.php +++ b/app/Http/ViewComposers/PortalComposer.php @@ -79,6 +79,10 @@ class PortalComposer return []; } + auth()->guard('contact')->user()->loadMissing(['client' => function ($query) { + $query->without('gateway_tokens', 'documents'); // Exclude 'grandchildren' relation of 'client' + }]); + $this->settings = auth()->guard('contact')->user()->client->getMergedSettings(); $data['sidebar'] = $this->sidebarMenu(); diff --git a/app/Livewire/RecurringInvoicesTable.php b/app/Livewire/RecurringInvoicesTable.php index 935cd582be91..06ba0f841d9b 100644 --- a/app/Livewire/RecurringInvoicesTable.php +++ b/app/Livewire/RecurringInvoicesTable.php @@ -41,6 +41,7 @@ class RecurringInvoicesTable extends Component $query = RecurringInvoice::query(); $query = $query + // ->with('client') ->where('client_id', auth()->guard('contact')->user()->client_id) ->where('company_id', $this->company->id) ->whereIn('status_id', [RecurringInvoice::STATUS_ACTIVE]) diff --git a/phpstan.neon b/phpstan.neon index 58283d970ab0..5f666b05fb72 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -29,3 +29,4 @@ parameters: - '#makeHidden#' - '#Socialite#' - '#Access to protected property#' + - '#Call to undefined method .*#' \ No newline at end of file