BasePackageConfiguration.php 1.9 KB

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