mirror of
https://github.com/archtechx/tenancy.git
synced 2025-12-18 14:04:03 +00:00
* Fix issue 521: Array input for `--tenants` Tenancy for Laravel docs refer to using multiple `--tenants=<...> ` options when running a command for multiple tenants explicitly: https://tenancyforlaravel.com/docs/v3/console-commands However, the command input is not defined correctly to receive arrays. https://laravel.com/docs/7.x/artisan#input-arrays This PR adds a failing test, fixes the issue and corrects a typo in the contributing readme. * Styleci Co-authored-by: Dylan Harbour <dylanh@ringier.co.za>
58 lines
1.8 KiB
PHP
58 lines
1.8 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Stancl\Tenancy\Commands;
|
|
|
|
use Illuminate\Console\Command;
|
|
|
|
class Run extends Command
|
|
{
|
|
/**
|
|
* The console command description.
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $description = 'Run a command for tenant(s)';
|
|
|
|
/**
|
|
* The name and signature of the console command.
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $signature = "tenants:run {commandname : The command's name.}
|
|
{--tenants=* : The tenant(s) to run the command for. Default: all}
|
|
{--argument=* : The arguments to pass to the command. Default: none}
|
|
{--option=* : The options to pass to the command. Default: none}";
|
|
|
|
/**
|
|
* Execute the console command.
|
|
*
|
|
* @return mixed
|
|
*/
|
|
public function handle()
|
|
{
|
|
tenancy()->runForMultiple($this->option('tenants'), function ($tenant) {
|
|
$this->line("Tenant: {$tenant['id']}");
|
|
tenancy()->initialize($tenant);
|
|
|
|
$callback = function ($prefix = '') {
|
|
return function ($arguments, $argument) use ($prefix) {
|
|
[$key, $value] = explode('=', $argument, 2);
|
|
$arguments[$prefix . $key] = $value;
|
|
|
|
return $arguments;
|
|
};
|
|
};
|
|
|
|
// Turns ['foo=bar', 'abc=xyz=zzz'] into ['foo' => 'bar', 'abc' => 'xyz=zzz']
|
|
$arguments = array_reduce($this->option('argument'), $callback(), []);
|
|
|
|
// Turns ['foo=bar', 'abc=xyz=zzz'] into ['--foo' => 'bar', '--abc' => 'xyz=zzz']
|
|
$options = array_reduce($this->option('option'), $callback('--'), []);
|
|
|
|
// Run command
|
|
$this->call($this->argument('commandname'), array_merge($arguments, $options));
|
|
});
|
|
}
|
|
}
|