BasePackageConfiguration.php 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. <?php
  2. namespace ModulesGarden\Servers\ProxmoxCloudVps\Core\App\Packages;
  3. abstract class BasePackageConfiguration
  4. {
  5. protected $configuration = null;
  6. protected $appConfigFound = false;
  7. protected $appConfigInstance = null;
  8. static $protectedConfigOptions = [
  9. PackageConfigurationConst::VERSION,
  10. PackageConfigurationConst::PACKAGE_NAME
  11. ];
  12. public function __get($key)
  13. {
  14. $this->loadConfiguration();
  15. if(isset($this->configuration[$key]))
  16. {
  17. return $this->configuration[$key];
  18. }
  19. return null;
  20. }
  21. public function getConfig()
  22. {
  23. $this->loadConfiguration();
  24. return $this->configuration;
  25. }
  26. public function getName()
  27. {
  28. $this->loadConfiguration();
  29. return $this->configuration[PackageConfigurationConst::PACKAGE_NAME];
  30. }
  31. public function loadConfiguration($forceReload = false)
  32. {
  33. if (!($this->configuration === null || $forceReload))
  34. {
  35. return;
  36. }
  37. $config = $this::CONFIGURATION;
  38. $packageName = $config[PackageConfigurationConst::PACKAGE_NAME];
  39. $appPackageConfig = $this->getAppPackageConfig($packageName);
  40. $merged = array_merge($config, $appPackageConfig);
  41. foreach (self::$protectedConfigOptions as $protectedOption)
  42. {
  43. $merged[$protectedOption] = $config[$protectedOption];
  44. }
  45. $this->configuration = $merged;
  46. }
  47. public function getAppPackageConfig($packageName = null)
  48. {
  49. $appConfigClassName = '\ModulesGarden\Servers\ProxmoxCloudVps\App\Config\Packages\\' . $packageName;
  50. if (!class_exists($appConfigClassName) || !is_subclass_of($appConfigClassName, AppPackageConfiguration::class)
  51. || !defined($appConfigClassName . '::APP_CONFIGURATION'))
  52. {
  53. return [];
  54. }
  55. $this->appConfigFound = true;
  56. $this->appConfigInstance = new $appConfigClassName();
  57. return $appConfigClassName::APP_CONFIGURATION;
  58. }
  59. /**
  60. * @return null
  61. */
  62. public function getAppConfigInstance()
  63. {
  64. return $this->appConfigInstance;
  65. }
  66. }