From 445c1ed2d023a7474be8f1493c2ad7f420bd33ef Mon Sep 17 00:00:00 2001 From: "Connor S. Parks" Date: Thu, 18 Aug 2016 13:12:40 +0100 Subject: [PATCH] starts the modular process --- .../Providers/ModuleServiceProvider.php | 101 ++++++++++++++++++ config/app.php | 3 +- .../Providers/ModuleServiceProviderTest.php | 25 +++++ 3 files changed, 128 insertions(+), 1 deletion(-) create mode 100644 app/Foundation/Providers/ModuleServiceProvider.php create mode 100644 tests/Foundation/Providers/ModuleServiceProviderTest.php diff --git a/app/Foundation/Providers/ModuleServiceProvider.php b/app/Foundation/Providers/ModuleServiceProvider.php new file mode 100644 index 00000000..0a831894 --- /dev/null +++ b/app/Foundation/Providers/ModuleServiceProvider.php @@ -0,0 +1,101 @@ + [ + ['group' => 'messages', 'partial' => 'partials.modules.messages'], + ['group' => 'status', 'partial' => 'partials.modules.status'], + ['group' => 'components', 'partial' => 'partials.modules.components'], + ['group' => 'metrics', 'partial' => 'partials.modules.metrics'], + ['group' => 'scheduled', 'partial' => 'partials.modules.scheduled'], + ['group' => 'timeline', 'partial' => 'partials.modules.timeline'], + ], + ]; + + /** + * The group definitions. + * + * @var array + */ + protected $groups = [ + 'index' => [ + 'messages' => 10000, + 'status' => 20000, + 'components' => 30000, + 'metrics' => 40000, + 'scheduled' => 50000, + 'timeline' => 60000, + ], + ]; + + /** + * Boot the service provider. + * + * @param \Illuminate\View\Compilers\BladeCompiler $blade + */ + public function boot(BladeCompiler $blade) + { + $blade->directive('modules', function ($group = null) { + $code = [ + 'foreach (array_numeric_sort($modules) as $group => $parts) {', + 'foreach (array_numeric_sort($parts) as $part) {', + 'if (empty($part[\'partial\'])) {', + 'continue;', + '}', + + '$params = array_except(get_defined_vars(), [\'__data\', \'__path\']);', + '$params = array_merge(array_get($part, \'parameters\', []), $params);', + 'echo $__env->make($part[\'partial\'], $params)->render();', + '}', + '}', + ]; + + if ($group) { + $code[0] = 'if (!empty($modules['.$group.'])) {'.PHP_EOL; + $code[0] .= '$parts = $modules['.$group.'];'; + } + + return ''; + }); + } + + /** + * Register the service provider. + * + * @return void + */ + public function register() + { + foreach ($this->modules as $key => $modules) { + $this->app->singleton("view.modules: {$key}", function () use ($modules) { + return $modules; + }); + } + + foreach ($this->groups as $key => $groups) { + $this->app->singleton("view.groups: {$key}", function () use ($groups) { + return $groups; + }); + } + } +} diff --git a/config/app.php b/config/app.php index abf14dfa..a1f3fb81 100644 --- a/config/app.php +++ b/config/app.php @@ -184,8 +184,9 @@ return [ 'CachetHQ\Cachet\Foundation\Providers\ComposerServiceProvider', 'CachetHQ\Cachet\Foundation\Providers\ConsoleServiceProvider', 'CachetHQ\Cachet\Foundation\Providers\ConfigServiceProvider', - 'CachetHQ\Cachet\Foundation\Providers\IntegrationServiceProvider', 'CachetHQ\Cachet\Foundation\Providers\EventServiceProvider', + 'CachetHQ\Cachet\Foundation\Providers\IntegrationServiceProvider', + 'CachetHQ\Cachet\Foundation\Providers\ModuleServiceProvider', 'CachetHQ\Cachet\Foundation\Providers\RepositoryServiceProvider', 'CachetHQ\Cachet\Foundation\Providers\RouteServiceProvider', diff --git a/tests/Foundation/Providers/ModuleServiceProviderTest.php b/tests/Foundation/Providers/ModuleServiceProviderTest.php new file mode 100644 index 00000000..b8ff49e6 --- /dev/null +++ b/tests/Foundation/Providers/ModuleServiceProviderTest.php @@ -0,0 +1,25 @@ + + */ +class ModuleServiceProviderTest extends AbstractTestCase +{ + use ServiceProviderTrait; +}