FEATURE: add service provider for generating module.json

This commit is contained in:
Michal Kváček
2016-03-14 10:11:15 +01:00
parent f9562d55aa
commit b707d27c3f
3 changed files with 64 additions and 3 deletions
+59
View File
@@ -0,0 +1,59 @@
<?php
namespace App\Providers;
use App\Models\Module;
use Illuminate\Support\ServiceProvider;
class ModuleManager extends ServiceProvider
{
/**
* Bootstrap the application services.
*
* @return void
*/
public function boot()
{
// this service provider needs published config - config is merged right after this service provider
$modules = Module::get();
// iterate over all modules and enable or disable them
foreach ($modules as $module) {
$this->createModulesJson($module);
}
}
/**
* Register the application services.
*
* @return void
*/
public function register()
{
}
/**
* Read config file and merge it with module config in database.
*
* This method REQUIRES published config of given module (otherwise config(modulename) is not available)!
*
* @param Module $module
*
* @throws \ErrorException when module.json is not writable
*/
private function createModulesJson(Module $module)
{
$data = config($module->alias);
$data['active'] = $module->enabled;
// path to module.json
$path = config('modules.paths.modules') . DIRECTORY_SEPARATOR . $data['name'] . DIRECTORY_SEPARATOR . 'module.json';
if (!is_writable($path)) {
throw new \ErrorException('Cannot write to ' . $path . '. Module ' . $data['name'] . ' cannot be enabled.');
}
// create file
file_put_contents($path, json_encode($data));
}
}