From d1d300eedd2d90f03e7f8efe3d9e4f35b1f8c629 Mon Sep 17 00:00:00 2001 From: Dennis Eichhorn Date: Wed, 26 Feb 2020 19:28:06 +0100 Subject: [PATCH] allow module app install --- Module/InstallerAbstract.php | 1 + Module/ModuleManager.php | 37 +++++++++++++++++++++++++++++++++++- 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/Module/InstallerAbstract.php b/Module/InstallerAbstract.php index 46e489435..3549e7d3c 100644 --- a/Module/InstallerAbstract.php +++ b/Module/InstallerAbstract.php @@ -24,6 +24,7 @@ use phpOMS\System\File\Local\File; use phpOMS\System\File\PathException; use phpOMS\System\File\PermissionException; use phpOMS\Utils\Parser\Php\ArrayParser; +use phpOMS\Application\ApplicationManager; /** * Installer abstract class. diff --git a/Module/ModuleManager.php b/Module/ModuleManager.php index 0b0458083..c7de42038 100644 --- a/Module/ModuleManager.php +++ b/Module/ModuleManager.php @@ -16,6 +16,7 @@ namespace phpOMS\Module; use phpOMS\Application\ApplicationAbstract; use phpOMS\Application\ApplicationInfo; +use phpOMS\Application\ApplicationManager; use phpOMS\Autoloader; use phpOMS\DataStorage\Database\Query\Builder; use phpOMS\Message\Http\HttpRequest; @@ -64,6 +65,14 @@ final class ModuleManager */ private ApplicationAbstract $app; + /** + * Application manager. + * + * @var ApplicationManager + * @since 1.0.0 + */ + private ApplicationManager $appManager; + /** * Installed modules. * @@ -494,6 +503,8 @@ final class ModuleManager return false; } + $this->appManager = new ApplicationManager($this); + try { $info = $this->loadInfo($module); @@ -509,9 +520,10 @@ final class ModuleManager } } - /* Install receiving */ + /* Install receiving and applications */ foreach ($this->installed as $key => $value) { $this->installProviding($key, $module); + $this->installApplications($key); } return true; @@ -640,6 +652,29 @@ final class ModuleManager } } + /** + * Install applications. + * + * Installing additional functionality for another module + * + * @param string $from From module + * + * @return void + * + * @since 1.0.0 + */ + public function installApplications(string $from) : void + { + $dirs = \scandir($this->modulePath . '/' . $from . '/Application'); + foreach ($dirs as $dir) { + if ($dir === '.' || $dir === '..') { + continue; + } + + $this->appManager->install($dir, __DIR__ . '/../../Web/' . \basename($dir)); + } + } + /** * Get module instance. *