From 44181411bded4d9cb7ebb519b61082c9cad2d6bd Mon Sep 17 00:00:00 2001 From: jitendra Date: Mon, 10 Aug 2020 19:00:31 +0530 Subject: [PATCH] Multi theme system now supported in admin --- config/modules.php | 188 ------------------ config/themes.php | 10 + packages/Webkul/Theme/src/ThemeViewFinder.php | 34 ++-- packages/Webkul/Theme/src/Themes.php | 18 +- 4 files changed, 44 insertions(+), 206 deletions(-) delete mode 100644 config/modules.php diff --git a/config/modules.php b/config/modules.php deleted file mode 100644 index 37bf9a64e..000000000 --- a/config/modules.php +++ /dev/null @@ -1,188 +0,0 @@ - 'Modules', - - /* - |-------------------------------------------------------------------------- - | Module Stubs - |-------------------------------------------------------------------------- - | - | Default module stubs. - | - */ - - 'stubs' => [ - 'enabled' => false, - 'path' => base_path() . '/vendor/nwidart/laravel-modules/src/Commands/stubs', - 'files' => [ - 'start' => 'start.php', - 'routes' => 'Http/routes.php', - 'views/index' => 'Resources/views/index.blade.php', - 'views/master' => 'Resources/views/layouts/master.blade.php', - 'scaffold/config' => 'Config/config.php', - 'composer' => 'composer.json', - 'assets/js/app' => 'Resources/assets/js/app.js', - 'assets/sass/app' => 'Resources/assets/sass/app.scss', - 'webpack' => 'webpack.mix.js', - 'package' => 'package.json', - ], - 'replacements' => [ - 'start' => ['LOWER_NAME', 'ROUTES_LOCATION'], - 'routes' => ['LOWER_NAME', 'STUDLY_NAME', 'MODULE_NAMESPACE'], - 'webpack' => ['LOWER_NAME'], - 'json' => ['LOWER_NAME', 'STUDLY_NAME', 'MODULE_NAMESPACE'], - 'views/index' => ['LOWER_NAME'], - 'views/master' => ['LOWER_NAME', 'STUDLY_NAME'], - 'scaffold/config' => ['STUDLY_NAME'], - 'composer' => [ - 'LOWER_NAME', - 'STUDLY_NAME', - 'VENDOR', - 'AUTHOR_NAME', - 'AUTHOR_EMAIL', - 'MODULE_NAMESPACE', - ], - ], - 'gitkeep' => true, - ], - 'paths' => [ - /* - |-------------------------------------------------------------------------- - | Modules path - |-------------------------------------------------------------------------- - | - | This path used for save the generated module. This path also will be added - | automatically to list of scanned folders. - | - */ - - 'modules' => base_path('Modules'), - /* - |-------------------------------------------------------------------------- - | Modules assets path - |-------------------------------------------------------------------------- - | - | Here you may update the modules assets path. - | - */ - - 'assets' => public_path('modules'), - /* - |-------------------------------------------------------------------------- - | The migrations path - |-------------------------------------------------------------------------- - | - | Where you run 'module:publish-migration' command, where do you publish the - | the migration files? - | - */ - - 'migration' => base_path('database/migrations'), - /* - |-------------------------------------------------------------------------- - | Generator path - |-------------------------------------------------------------------------- - | Customise the paths where the folders will be generated. - | Set the generate key to false to not generate that folder - */ - 'generator' => [ - 'config' => ['path' => 'Config', 'generate' => true], - 'command' => ['path' => 'Console', 'generate' => true], - 'migration' => ['path' => 'Database/Migrations', 'generate' => true], - 'seeder' => ['path' => 'Database/Seeders', 'generate' => true], - 'factory' => ['path' => 'Database/factories', 'generate' => true], - 'model' => ['path' => 'Entities', 'generate' => true], - 'controller' => ['path' => 'Http/Controllers', 'generate' => true], - 'filter' => ['path' => 'Http/Middleware', 'generate' => true], - 'request' => ['path' => 'Http/Requests', 'generate' => true], - 'provider' => ['path' => 'Providers', 'generate' => true], - 'assets' => ['path' => 'Resources/assets', 'generate' => true], - 'lang' => ['path' => 'Resources/lang', 'generate' => true], - 'views' => ['path' => 'Resources/views', 'generate' => true], - 'test' => ['path' => 'Tests', 'generate' => true], - 'repository' => ['path' => 'Repositories', 'generate' => false], - 'event' => ['path' => 'Events', 'generate' => false], - 'listener' => ['path' => 'Listeners', 'generate' => false], - 'policies' => ['path' => 'Policies', 'generate' => false], - 'rules' => ['path' => 'Rules', 'generate' => false], - 'jobs' => ['path' => 'Jobs', 'generate' => false], - 'emails' => ['path' => 'Emails', 'generate' => false], - 'notifications' => ['path' => 'Notifications', 'generate' => false], - 'resource' => ['path' => 'Transformers', 'generate' => false], - ], - ], - /* - |-------------------------------------------------------------------------- - | Scan Path - |-------------------------------------------------------------------------- - | - | Here you define which folder will be scanned. By default will scan vendor - | directory. This is useful if you host the package in packagist website. - | - */ - - 'scan' => [ - 'enabled' => false, - 'paths' => [ - base_path('vendor/*/*'), - ], - ], - /* - |-------------------------------------------------------------------------- - | Composer File Template - |-------------------------------------------------------------------------- - | - | Here is the config for composer.json file, generated by this package - | - */ - - 'composer' => [ - 'vendor' => 'nwidart', - 'author' => [ - 'name' => 'Nicolas Widart', - 'email' => 'n.widart@gmail.com', - ], - ], - /* - |-------------------------------------------------------------------------- - | Caching - |-------------------------------------------------------------------------- - | - | Here is the config for setting up caching feature. - | - */ - 'cache' => [ - 'enabled' => false, - 'key' => 'laravel-modules', - 'lifetime' => 60, - ], - /* - |-------------------------------------------------------------------------- - | Choose what laravel-modules will register as custom namespaces. - | Setting one to false will require you to register that part - | in your own Service Provider class. - |-------------------------------------------------------------------------- - */ - 'register' => [ - 'translations' => true, - /** - * load files on boot or register method - * - * Note: boot not compatible with asgardcms - * - * @example boot|register - */ - 'files' => 'register', - ], -]; diff --git a/config/themes.php b/config/themes.php index d6610d7e9..35ca67e60 100755 --- a/config/themes.php +++ b/config/themes.php @@ -23,5 +23,15 @@ return [ 'name' => 'Velocity', 'parent' => 'default' ], + ], + + 'admin-default' => 'default', + + 'admin-themes' => [ + 'default' => [ + 'views_path' => 'resources/admin-themes/default/views', + 'assets_path' => 'public/admin-themes/default/assets', + 'name' => 'Default' + ] ] ]; \ No newline at end of file diff --git a/packages/Webkul/Theme/src/ThemeViewFinder.php b/packages/Webkul/Theme/src/ThemeViewFinder.php index fada46559..c835e6e6e 100755 --- a/packages/Webkul/Theme/src/ThemeViewFinder.php +++ b/packages/Webkul/Theme/src/ThemeViewFinder.php @@ -4,6 +4,7 @@ namespace Webkul\Theme; use Webkul\Theme\Facades\Themes; use Illuminate\Support\Arr; +use Illuminate\Support\Str; use Illuminate\View\FileViewFinder; class ThemeViewFinder extends FileViewFinder @@ -19,7 +20,7 @@ class ThemeViewFinder extends FileViewFinder // Extract the $view and the $namespace parts list($namespace, $view) = $this->parseNamespaceSegments($name); - if ($namespace != 'admin') { + if (! Str::contains(request()->route()->uri, 'admin/')) { $paths = $this->addThemeNamespacePaths($namespace); try { @@ -34,7 +35,23 @@ class ThemeViewFinder extends FileViewFinder return $this->findInPaths($view, $paths); } } else { - return $this->findInPaths($view, $this->hints[$namespace]); + $themes = app('themes'); + + $themes->set(config('themes.admin-default')); + + $paths = $this->addThemeNamespacePaths($namespace); + + try { + return $this->findInPaths($view, $paths); + } catch(\Exception $e) { + if ($namespace != 'admin') { + if (strpos($view, 'admin.') !== false) { + $view = str_replace('admin.', 'admin.' . Themes::current()->code . '.', $view); + } + } + + return $this->findInPaths($view, $paths); + } } } @@ -84,19 +101,6 @@ class ThemeViewFinder extends FileViewFinder } } - /** - * Get the string contents of the view. - * - * @param callable|null $callback - * @return array|string - * - * @throws \Throwable - */ - public function render(callable $callback = null) - { - dd(111); - } - /** * Set the array of paths where the views are being searched. * diff --git a/packages/Webkul/Theme/src/Themes.php b/packages/Webkul/Theme/src/Themes.php index 3a1ee1806..70dd273a3 100755 --- a/packages/Webkul/Theme/src/Themes.php +++ b/packages/Webkul/Theme/src/Themes.php @@ -3,6 +3,7 @@ namespace Webkul\Theme; use Illuminate\Support\Facades\Config; +use Illuminate\Support\Str; use Webkul\Theme\Theme; class Themes @@ -42,9 +43,15 @@ class Themes */ public function __construct() { - $this->laravelViewsPath = Config::get('view.paths'); + $routeURI = request()->route()->uri; - $this->defaultThemeCode = Config::get('themes.default', null); + if (Str::contains(request()->route()->uri, 'admin/')) { + $this->defaultThemeCode = Config::get('themes.admin-default', null); + } else { + $this->defaultThemeCode = Config::get('themes.default', null); + } + + $this->laravelViewsPath = Config::get('view.paths'); $this->loadThemes(); } @@ -85,7 +92,11 @@ class Themes { $parentThemes = []; - $themes = config('themes.themes', []); + if (Str::contains(request()->route()->uri, 'admin/')) { + $themes = config('themes.admin-themes', []); + } else { + $themes = config('themes.themes', []); + } foreach ($themes as $code => $data) { $this->themes[] = new Theme( @@ -140,6 +151,7 @@ class Themes Config::set('view.paths', $paths); $themeViewFinder = app('view.finder'); + $themeViewFinder->setPaths($paths); return $theme;