Commit 93cd5bd3 authored by Andrew Bekesh's avatar Andrew Bekesh

Add required minimum for extra view namespaces to work

parent d08fe1de
...@@ -14,4 +14,24 @@ return [ ...@@ -14,4 +14,24 @@ return [
'setting', 'setting',
'media', 'media',
], ],
/*
|--------------------------------------------------------------------------
| Load additional view namespaces for a module
|--------------------------------------------------------------------------
| You can specify place from which you would like to use module views.
| You can use any combination, but generally it's advisable to add only one,
| extra view namespace.
| Available places are: from within your current backend theme, from within
| your current frontend theme and from resources folder.
| By default every extra namespace will be set to false.
*/
'useViewNamespaces' => [
// Read module views from /Themes/<backend-theme-name>/views/modules/asgard/<module-name>
'backend-theme' => false,
// Read module views from /Themes/<frontend-theme-name>/views/modules/asgard/<module-name>
'frontend-theme' => false,
// Read module views from /resources/views/asgard/<module-name>
'resources' => false,
],
]; ];
...@@ -112,40 +112,47 @@ return [ ...@@ -112,40 +112,47 @@ return [
'clipboard.js' => ['theme' => 'vendor/clipboard/dist/clipboard.min.js'], 'clipboard.js' => ['theme' => 'vendor/clipboard/dist/clipboard.min.js'],
], ],
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| Define which default assets will always be included in your pages | Define which default assets will always be included in your pages
| through the asset pipeline | through the asset pipeline
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
*/ */
'admin-required-assets' => [ 'admin-required-assets' => [
'css' => [ 'css' => [
'bootstrap.css', 'bootstrap.css',
'font-awesome.css', 'font-awesome.css',
'alertify.core.css', 'alertify.core.css',
'alertify.default.css', 'alertify.default.css',
'dataTables.bootstrap.css', 'dataTables.bootstrap.css',
'icheck.blue.css', 'icheck.blue.css',
'AdminLTE.css', 'AdminLTE.css',
'AdminLTE.all.skins.css', 'AdminLTE.all.skins.css',
'animate.css', 'animate.css',
'pace.css', 'pace.css',
'selectize-default.css', 'selectize-default.css',
'asgard.css', 'asgard.css',
], ],
'js' => [ 'js' => [
'bootstrap.js', 'bootstrap.js',
'mousetrap.js', 'mousetrap.js',
'alertify.js', 'alertify.js',
'icheck.js', 'icheck.js',
'jquery.dataTables.js', 'jquery.dataTables.js',
'dataTables.bootstrap.js', 'dataTables.bootstrap.js',
'jquery.slug.js', 'jquery.slug.js',
'keypressAction.js', 'keypressAction.js',
'app.js', 'app.js',
'pace.js', 'pace.js',
'selectize.js', 'selectize.js',
'main.js', 'main.js',
], ],
], ],
/*
|--------------------------------------------------------------------------
| Enable module view overrides at theme locations
|--------------------------------------------------------------------------
*/
'enable-theme-overrides' => false,
]; ];
...@@ -23,11 +23,6 @@ class CoreServiceProvider extends ServiceProvider ...@@ -23,11 +23,6 @@ class CoreServiceProvider extends ServiceProvider
*/ */
protected $defer = false; protected $defer = false;
/**
* @var string
*/
protected $prefix = 'asgard';
/** /**
* The filters base class name. * The filters base class name.
* *
...@@ -45,15 +40,15 @@ class CoreServiceProvider extends ServiceProvider ...@@ -45,15 +40,15 @@ class CoreServiceProvider extends ServiceProvider
public function boot() public function boot()
{ {
$this->registerMiddleware($this->app['router']);
$this->registerModuleResourceNamespaces();
$this->publishConfig('core', 'available-locales'); $this->publishConfig('core', 'available-locales');
$this->publishConfig('core', 'config'); $this->publishConfig('core', 'config');
$this->publishConfig('core', 'core'); $this->publishConfig('core', 'core');
$this->publishConfig('core', 'settings'); $this->publishConfig('core', 'settings');
$this->publishConfig('core', 'permissions'); $this->publishConfig('core', 'permissions');
$this->registerMiddleware($this->app['router']);
$this->registerModuleResourceNamespaces();
$this->bladeDirectives(); $this->bladeDirectives();
} }
...@@ -119,6 +114,24 @@ class CoreServiceProvider extends ServiceProvider ...@@ -119,6 +114,24 @@ class CoreServiceProvider extends ServiceProvider
return new ThemeManager($app, $path); return new ThemeManager($app, $path);
}); });
$this->app->singleton('asgard.ModulesList', function () {
return [
'block',
'blog',
'core',
'dashboard',
'media',
'menu',
'notification',
'page',
'setting',
'tag',
'translation',
'user',
'workshop',
];
});
} }
/** /**
...@@ -126,8 +139,20 @@ class CoreServiceProvider extends ServiceProvider ...@@ -126,8 +139,20 @@ class CoreServiceProvider extends ServiceProvider
*/ */
private function registerModuleResourceNamespaces() private function registerModuleResourceNamespaces()
{ {
$themes = [];
// Saves about 20ms-30ms at loading
if ($this->app['config']->get('asgard.core.core.enable-theme-overrides') === true) {
$themeManager = app(ThemeManager::class);
$themes = [
'backend' => $themeManager->find(config('asgard.core.core.admin-theme'))->getPath(),
'frontend' => $themeManager->find(setting('core::template', null, 'Flatly'))->getPath(),
];
}
foreach ($this->app['modules']->getOrdered() as $module) { foreach ($this->app['modules']->getOrdered() as $module) {
$this->registerViewNamespace($module); $this->registerViewNamespace($module, $themes);
$this->registerLanguageNamespace($module); $this->registerLanguageNamespace($module);
} }
} }
...@@ -135,16 +160,36 @@ class CoreServiceProvider extends ServiceProvider ...@@ -135,16 +160,36 @@ class CoreServiceProvider extends ServiceProvider
/** /**
* Register the view namespaces for the modules * Register the view namespaces for the modules
* @param Module $module * @param Module $module
* @param array $themes
*/ */
protected function registerViewNamespace(Module $module) protected function registerViewNamespace(Module $module, array $themes)
{ {
if ($module->getLowerName() == 'user') { $hints = [];
return; $moduleName = $module->getLowerName();
if (is_core_module($moduleName)) {
$configFile = 'config';
$configKey = 'asgard.' . $moduleName . '.' . $configFile;
$this->mergeConfigFrom($module->getExtraPath('Config' . DIRECTORY_SEPARATOR . $configFile . '.php'), $configKey);
$moduleConfig = $this->app['config']->get($configKey . '.useViewNamespaces');
if (count($themes) > 0) {
if ($themes['backend'] !== null && array_get($moduleConfig, 'backend-theme') === true) {
$hints[] = $themes['backend'] . '/views/modules/asgard/' . $moduleName;
}
if ($themes['frontend'] !== null && array_get($moduleConfig, 'frontend-theme') === true) {
$hints[] = $themes['frontend'] . '/views/modules/asgard/' . $moduleName;
}
}
if (array_get($moduleConfig, 'resources') === true) {
$hints[] = base_path('resources/views/asgard/' . $moduleName);
}
} }
$this->app['view']->addNamespace(
$module->getLowerName(), $hints[] = $module->getPath() . '/Resources/views';
$module->getPath() . '/Resources/views'
); $this->app['view']->addNamespace($moduleName, $hints);
} }
/** /**
......
...@@ -26,3 +26,10 @@ if (! function_exists('is_module_enabled')) { ...@@ -26,3 +26,10 @@ if (! function_exists('is_module_enabled')) {
return array_key_exists($module, app('modules')->enabled()); return array_key_exists($module, app('modules')->enabled());
} }
} }
if (! function_exists('is_core_module')) {
function is_core_module($module)
{
return in_array(strtolower($module), app('asgard.ModulesList'));
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment