Merge pull request #4934 from beganovich/v5-1702-client-registration-fallback

(v5) Fallback to default company for registration
This commit is contained in:
Benjamin Beganović 2021-02-17 12:21:41 +01:00 committed by GitHub
commit 6bafc35936
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 39 additions and 25 deletions

View File

@ -18,11 +18,13 @@ class ContactRegisterController extends Controller
$this->middleware(['guest', 'contact.register']); $this->middleware(['guest', 'contact.register']);
} }
public function showRegisterForm(string $company_key) public function showRegisterForm(string $company_key = '')
{ {
$company = Company::where('company_key', $company_key)->firstOrFail(); $key = request()->has('key') ? request('key') : $company_key;
return render('auth.register', compact(['company'])); $company = Company::where('company_key', $key)->firstOrFail();
return render('auth.register', ['company' => $company]);
} }
public function register(RegisterRequest $request) public function register(RegisterRequest $request)

View File

@ -2,7 +2,9 @@
namespace App\Http\Middleware; namespace App\Http\Middleware;
use App\Models\Account;
use App\Models\Company; use App\Models\Company;
use App\Utils\Ninja;
use Closure; use Closure;
use Illuminate\Http\Request; use Illuminate\Http\Request;
@ -17,29 +19,39 @@ class ContactRegister
*/ */
public function handle($request, Closure $next) public function handle($request, Closure $next)
{ {
/* // Resolving based on subdomain. Used in version 5 hosted platform.
* Notes:
*
* 1. If request supports subdomain (for hosted) check domain and continue request.
* 2. If request doesn't support subdomain and doesn' have company_key, abort
* 3. firstOrFail() will abort with 404 if company with company_key wasn't found.
* 4. Abort if setting isn't enabled.
*/
if ($request->subdomain) { if ($request->subdomain) {
$company = Company::where('subdomain', $request->subdomain)->firstOrFail(); $company = Company::where('subdomain', $request->subdomain)->firstOrFail();
abort_unless($company->getSetting('enable_client_registration'), 404); abort_unless($company->getSetting('enable_client_registration'), 404);
$request->merge(['key' => $company->company_key]);
return $next($request); return $next($request);
} }
abort_unless($request->company_key, 404); // For self-hosted platforms with multiple companies, resolving is done using company key
// if it doesn't resolve using a domain.
if ($request->route()->parameter('company_key') && Ninja::isSelfHost()) {
$company = Company::where('company_key', $request->company_key)->firstOrFail(); $company = Company::where('company_key', $request->company_key)->firstOrFail();
abort_unless($company->client_can_register, 404); abort_unless($company->client_can_register, 404);
return $next($request); return $next($request);
} }
// As a fallback for self-hosted, it will use default company in the system
// if key isn't provided in the url.
if (!$request->route()->parameter('company_key') && Ninja::isSelfHost()) {
$company = Account::first()->default_company;
abort_unless($company->client_can_register, 404);
$request->merge(['key' => $company->company_key]);
return $next($request);
}
return abort(404);
}
} }

2
public/css/app.css vendored

File diff suppressed because one or more lines are too long

View File

@ -1,6 +1,6 @@
{ {
"/js/app.js": "/js/app.js?id=1ee684e58f9f6eb754d5", "/js/app.js": "/js/app.js?id=1ee684e58f9f6eb754d5",
"/css/app.css": "/css/app.css?id=c6df2680d8efda824069", "/css/app.css": "/css/app.css?id=7e5d2c66e34a0d6fd333",
"/js/clients/invoices/action-selectors.js": "/js/clients/invoices/action-selectors.js?id=a09bb529b8e1826f13b4", "/js/clients/invoices/action-selectors.js": "/js/clients/invoices/action-selectors.js?id=a09bb529b8e1826f13b4",
"/js/clients/invoices/payment.js": "/js/clients/invoices/payment.js?id=8ce8955ba775ea5f47d1", "/js/clients/invoices/payment.js": "/js/clients/invoices/payment.js?id=8ce8955ba775ea5f47d1",
"/js/clients/payment_methods/authorize-authorize-card.js": "/js/clients/payment_methods/authorize-authorize-card.js?id=206d7de4ac97612980ff", "/js/clients/payment_methods/authorize-authorize-card.js": "/js/clients/payment_methods/authorize-authorize-card.js?id=206d7de4ac97612980ff",

View File

@ -20,7 +20,7 @@
<div class="col-span-6 sm:col-span-3"> <div class="col-span-6 sm:col-span-3">
<label for="website" class="input-label">{{ ctrans('texts.website') }}</label> <label for="website" class="input-label">{{ ctrans('texts.website') }}</label>
<input id="website" class="input w-full" name="last_name" /> <input id="website" class="input w-full" name="website" />
@error('website') @error('website')
<div class="validation validation-fail"> <div class="validation validation-fail">
{{ $message }} {{ $message }}

View File

@ -3,7 +3,7 @@
@section('body') @section('body')
<div class="grid lg:grid-cols-12 py-8"> <div class="grid lg:grid-cols-12 py-8">
<div class="col-span-4 col-start-5"> <div class="lg:col-span-4 lg:col-start-5 px-6">
<div class="flex justify-center"> <div class="flex justify-center">
<img class="h-32 w-auto" src="{{ $company->present()->logo() }}" alt="{{ ctrans('texts.logo') }}"> <img class="h-32 w-auto" src="{{ $company->present()->logo() }}" alt="{{ ctrans('texts.logo') }}">
</div> </div>
@ -36,7 +36,7 @@
</span> </span>
</span> </span>
<button class="button button-primary bg-blue-600">{{ ctrans('texts.save') }}</button> <button class="button button-primary bg-blue-600">{{ ctrans('texts.register') }}</button>
</div> </div>
</form> </form>
</div> </div>