1
0
Fork 0
mirror of https://github.com/archtechx/tenancy.git synced 2025-12-12 10:54:04 +00:00
tenancy/src/Commands/Tinker.php
Márk Magyar 79f740d057
[4.x] General code cleanup (#1278)
* Declare sensitive parameters as sensitive

... just so that they don't show up in logs

* Remove unnecessary null-coalescing

* Simplify return

* Merge isset() calls

* Inline return

* Use nullsafe operator

* Simplify if-else branches

* Use direct empty string comparison instead of strlen()

* Add missing type

* Change interface as events expect a TenantWithDatabase not just a Tenant

* Narrow typehint

* Remove redundant type casts

* Fix style with php-cs-fixer

* Fix typos

* Revert unwanted if-else simplification

* fix phpstan errors

* narrow type

---------

Co-authored-by: Samuel Štancl <samuel@archte.ch>
2024-12-31 00:35:46 +01:00

81 lines
2.6 KiB
PHP

<?php
declare(strict_types=1);
namespace Stancl\Tenancy\Commands;
use function Laravel\Prompts\search;
use function Laravel\Prompts\select;
use Laravel\Tinker\Console\TinkerCommand as BaseTinker;
use Stancl\Tenancy\Resolvers\DomainTenantResolver;
use Symfony\Component\Console\Input\InputArgument;
class Tinker extends BaseTinker
{
public $name = 'tenant:tinker';
protected function getArguments()
{
return array_merge([
['tenant', InputArgument::OPTIONAL, 'The tenant to run Tinker for. Pass the tenant key or leave null to default to the first tenant.'],
], parent::getArguments());
}
public function handle()
{
/** @var string|int|null $tenantKey */
$tenantKey = $this->argument('tenant');
/** @var (\Stancl\Tenancy\Contracts\Tenant&\Illuminate\Database\Eloquent\Model)|null $firstTenant */
$firstTenant = tenancy()->model()::first();
/** @var string|int|null $firstTenantKey */
$firstTenantKey = $firstTenant?->getTenantKey();
$tenant = null;
if (! $tenantKey) {
$select = select('Which tenant do you want to run Tinker as?', [
'first' => "First tenant ($firstTenantKey)",
'searchById' => 'Search by id',
'searchByDomain' => 'Search by domain',
]);
if ($select === 'first') {
$tenant = $firstTenant;
} elseif ($select === 'searchById') {
/** @var string $tenantKey */
$tenantKey = search(
'Enter the tenant key:',
fn (string $search) => $search !== ''
? tenancy()->model()::where(tenancy()->model()->getTenantKeyName(), 'like', "$search%")->pluck(tenancy()->model()->getTenantKeyName())->all()
: []
);
$tenant = tenancy()->find($tenantKey);
} elseif ($select === 'searchByDomain') {
/** @var string $domain */
$domain = search(
'Enter the tenant domain:',
fn (string $search) => $search !== ''
? config('tenancy.models.domain')::where('domain', 'like', "$search%")->pluck('domain')->all()
: []
);
$tenant = DomainTenantResolver::findTenantByDomain($domain);
}
} else {
$tenant = tenancy()->find($tenantKey);
}
if (! $tenant) {
$this->components->error('No tenant found.');
return 1;
}
tenancy()->initialize($tenant);
return parent::handle();
}
}