ModuleInstaller.php 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. <?php
  2. namespace ModulesGarden\Servers\KerioEmail\Core\App\Installer;
  3. use ModulesGarden\Servers\KerioEmail\Core\App\Packages\PackageManager;
  4. use ModulesGarden\Servers\KerioEmail\Core\DependencyInjection;
  5. use ModulesGarden\Servers\KerioEmail\Core\ModuleConstants;
  6. class ModuleInstaller
  7. {
  8. protected $databaseInstaller = null;
  9. public function __construct()
  10. {
  11. $this->databaseInstaller = DependencyInjection::get(DatabaseInstaller::class);
  12. }
  13. public function makeInstall()
  14. {
  15. $this->installModule();
  16. $this->installPackages();
  17. }
  18. public function installModule()
  19. {
  20. array_map(function ($value){
  21. $this->databaseInstaller->performQueryFromFile($value);
  22. }, $this->getModuleQueriesPaths());
  23. }
  24. public function getModuleQueriesPaths()
  25. {
  26. return [
  27. ModuleConstants::getFullPath('core', 'Database', 'schema.sql'),
  28. ModuleConstants::getFullPath('app', 'Database', 'schema.sql'),
  29. ModuleConstants::getFullPath('core', 'Database', 'data.sql'),
  30. ModuleConstants::getFullPath('app', 'Database', 'data.sql')
  31. ];
  32. }
  33. public function installPackages()
  34. {
  35. $packageManager = DependencyInjection::get(PackageManager::class);
  36. array_map(function ($package){
  37. $packageName = $package->getName();
  38. $packageSchemaPath = ModuleConstants::getFullPath('packages', $packageName, 'Database', 'schema.sql');
  39. if (file_exists($packageSchemaPath) && is_readable($packageSchemaPath))
  40. {
  41. $this->databaseInstaller->performQueryFromFile($packageSchemaPath);
  42. }
  43. $packageDataPath = ModuleConstants::getFullPath('packages', $packageName, 'Database', 'schema.sql');
  44. if (file_exists($packageDataPath) && is_readable($packageDataPath))
  45. {
  46. $this->databaseInstaller->performQueryFromFile($packageDataPath);
  47. }
  48. }, $packageManager->getPackagesConfiguration());
  49. }
  50. public function isInstallCorrect()
  51. {
  52. return $this->databaseInstaller->isInstallCorrect();
  53. }
  54. public function getFailedQueries()
  55. {
  56. return $this->databaseInstaller->getFailedQueries();
  57. }
  58. public function getQueriesResults()
  59. {
  60. return $this->databaseInstaller->getQueriesResults();
  61. }
  62. }