From 0ac7fb74d6416596da273c3abbf42abdf48848ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20=C5=A0tancl?= Date: Sat, 7 Sep 2019 16:40:45 +0200 Subject: [PATCH] wip --- assets/config.php | 2 +- src/TenancyServiceProvider.php | 6 ++++-- src/Tenant.php | 2 +- src/TenantManagerv2.php | 32 ++++++++++++++------------------ 4 files changed, 20 insertions(+), 22 deletions(-) diff --git a/assets/config.php b/assets/config.php index 100bb05f..77843aa5 100644 --- a/assets/config.php +++ b/assets/config.php @@ -55,7 +55,7 @@ return [ 'mysql' => 'Stancl\Tenancy\TenantDatabaseManagers\MySQLDatabaseManager', 'pgsql' => 'Stancl\Tenancy\TenantDatabaseManagers\PostgreSQLDatabaseManager', ], - 'tenancy_bootstrappers' => [ + 'bootstrappers' => [ 'database' => 'Stancl\Tenancy\TenancyBootstrappers\DatabaseTenancyBootstrapper', 'cache' => 'Stancl\Tenancy\TenancyBootstrappers\CacheTenancyBootstrapper', 'filesystem' => 'Stancl\Tenancy\TenancyBootstrappers\FilesystemTenancyBootstrapper', diff --git a/src/TenancyServiceProvider.php b/src/TenancyServiceProvider.php index b03c0a7d..9787b606 100644 --- a/src/TenancyServiceProvider.php +++ b/src/TenancyServiceProvider.php @@ -125,15 +125,17 @@ class TenancyServiceProvider extends ServiceProvider $this->mergeConfigFrom(__DIR__ . '/../assets/config.php', 'tenancy'); $this->app->bind(StorageDriver::class, $this->app['config']['tenancy.storage_driver']); - $this->app->bind(ServerConfigManager::class, $this->app['config']['tenancy.server.manager']); $this->app->singleton(DatabaseManager::class); $this->app->singleton(TenantManager::class, function ($app) { return new TenantManager( - $app, $app[StorageDriver::class], $app[DatabaseManager::class], $app[$app['config']['tenancy.unique_id_generator']] + $app, $app[StorageDriver::class], $app[DatabaseManager::class], $app[$app['config']['tenancy.unique_id_generator']] // todo ); }); // todo foreach bootstrappers, singleton + foreach ($this->app['config']['tenancy.bootstrappers'] as $bootstrapper) { + $this->app->singleton($bootstrapper); // todo key? + } $this->app->singleton(Migrate::class, function ($app) { return new Migrate($app['migrator'], $app[DatabaseManager::class]); diff --git a/src/Tenant.php b/src/Tenant.php index 6fe6dd09..61545ca4 100644 --- a/src/Tenant.php +++ b/src/Tenant.php @@ -50,7 +50,7 @@ class Tenant implements ArrayAccess, CurrentTenant public static function new(): self { return app(static::class)->withData([ - 'id' => static::generateId(), + 'id' => static::generateId(), // todo ]); } diff --git a/src/TenantManagerv2.php b/src/TenantManagerv2.php index 32bf27b3..ad735054 100644 --- a/src/TenantManagerv2.php +++ b/src/TenantManagerv2.php @@ -7,7 +7,6 @@ namespace Stancl\Tenancy; use Illuminate\Foundation\Application; // todo rethink integration events -// todo events /** * @internal Class is subject to breaking changes in minor and patch versions. @@ -27,6 +26,10 @@ class TenantManagerv2 /** @var Contracts\StorageDriver */ private $storage; + // todo event "listeners" instead of "callbacks" + /** @var callable[][] */ + public $callbacks = []; + public function __construct(Application $app, Contracts\StorageDriver $storage) { $this->app = $app; @@ -63,6 +66,8 @@ class TenantManagerv2 $this->app[$bootstrapper]->start($tenant); } + $this->event('bootstrapped'); + return $this; } @@ -74,6 +79,8 @@ class TenantManagerv2 $this->app[$bootstrapper]->end(); } + $this->event('ended'); + return $this; } @@ -92,28 +99,17 @@ class TenantManagerv2 */ public function tenancyBootstrappers($except = []): array { - return array_key_diff(config('tenancy.tenancy_bootstrappers'), $except); + return array_key_diff(config('tenancy.bootstrappers'), $except); } - // todo event "listeners" instead of "callbacks" - /** - * TODO + * Add event callback. * * @param string $name * @param callable $callback - * @return self|string[] + * @return self */ - public function event(string $name, callable $callback = null) - { - if ($callback) { - return $this->addEventCallback($name, $callback); - } - - return $this->executeEventCallbacks($name); - } - - public function addEventCallback(string $name, callable $callback): self + public function eventCallback(string $name, callable $callback): self { isset($this->eventCallbacks[$name]) || $this->eventCallbacks[$name] = []; $this->eventCallbacks[$name][] = $callback; @@ -122,12 +118,12 @@ class TenantManagerv2 } /** - * TODO + * Execute event callbacks. * * @param string $name * @return string[] */ - public function executeEventCallbacks(string $name): array + protected function event(string $name): array { return array_reduce($this->eventCalbacks[$name] ?? [], function ($prevented, $callback) { $prevented = array_merge($prevented, $callback($this) ?? []);