Просмотр исходного кода

Merge branch 'master' of https://github.com/unacms/una

AntonLV 1 год назад
Родитель
Сommit
a67da5e79a

+ 45 - 11
inc/classes/BxDolModule.php

@@ -42,9 +42,8 @@
 class BxDolModule extends BxDol
 {
     public $_aModule;
-    public $_oDb;
-    public $_oTemplate;
-    public $_oConfig;
+    private $_aInstancesStorage = [];
+    private $_aInstancesToStore = ['_oDb' => '_initDb', '_oTemplate' => '_initTemplate', '_oConfig' => '_initConfig'];
 
     /**
      * constructor
@@ -52,25 +51,60 @@ class BxDolModule extends BxDol
     public function __construct($aModule)
     {
         parent::__construct();
-
         $this->_aModule = $aModule;
+    }
 
-        $sClassPrefix = $aModule['class_prefix'];
-        $sClassPath = BX_DIRECTORY_PATH_MODULES . $aModule['path'] . 'classes/';
+    public function __get($sName) {
+        if (isset($this->_aInstancesToStore[$sName])) {
+            $sMethod = $this->_aInstancesToStore[$sName];
+            return $this->_aInstancesStorage[$sName] ??= $this->$sMethod();
+        }
+        throw new \Exception("Unknown property: $sName");
+    }
 
-        $sClassName = $sClassPrefix . 'Config';
-        require_once($sClassPath . $sClassName . '.php');
-        $this->_oConfig = new $sClassName($aModule);
+    public function __set($sName, $o) {
+        if (isset($this->_aInstancesToStore[$sName])) {
+            $this->_aInstancesStorage[$sName] = $o;
+        }
+        throw new \Exception("Unknown property: $sName");
+    }
+
+    private function _initDb():BxDolModuleDb {
+        $sClassPrefix = $this->_aModule['class_prefix'];
+        $sClassPath = BX_DIRECTORY_PATH_MODULES . $this->_aModule['path'] . 'classes/';
 
         $sClassName = $sClassPrefix . 'Db';
         require_once($sClassPath . $sClassName . '.php');
-        $this->_oDb = new $sClassName($this->_oConfig);
+
+        /** @var BxDolDb $oDb */
+        $oDb = new $sClassName($this->_oConfig);
+        return $oDb;
+    }
+    
+    private function _initConfig():BxDolModuleConfig {
+        $sClassPrefix = $this->_aModule['class_prefix'];
+        $sClassPath = BX_DIRECTORY_PATH_MODULES . $this->_aModule['path'] . 'classes/';
+
+        $sClassName = $sClassPrefix . 'Config';
+        require_once($sClassPath . $sClassName . '.php');
+
+        /** @var BxDolModuleConfig $oConfig */
+        $oConfig = new $sClassName($this->_aModule);
+        return $oConfig;
+    }
+
+    private function _initTemplate():BxDolModuleProxy {
+        $sClassPrefix = $this->_aModule['class_prefix'];
+        $sClassPath = BX_DIRECTORY_PATH_MODULES . $this->_aModule['path'] . 'classes/';
 
         $sClassName = $sClassPrefix . 'Template';
         require_once($sClassPath . $sClassName . '.php');
+
+        /** @var BxDolTemplate $oTemplate */
         $oTemplate = new $sClassName($this->_oConfig, $this->_oDb); 
         $oTemplate->init();
-        $this->_oTemplate = new BxDolModuleProxy('module_template', $oTemplate);
+
+        return new BxDolModuleProxy('module_template', $oTemplate);
     }
 
     /**

+ 13 - 5
modules/base/general/classes/BxBaseModGeneralAlertsResponse.php

@@ -12,12 +12,20 @@
 class BxBaseModGeneralAlertsResponse extends BxDolAlertsResponse
 {
     protected $MODULE;
-    protected $_oModule;
+    private $_oModuleHidden = null;
 
-    public function __construct()
-    {
-        parent::__construct();
-        $this->_oModule = BxDolModule::getInstance($this->MODULE);
+    public function __get($sName) {
+        if ($sName === '_oModule') {
+            return $this->_oModuleHidden ??= BxDolModule::getInstance($this->MODULE);
+        }
+        throw new \Exception("Unknown property: $sName");
+    }
+
+    public function __set($sName, $o) {
+        if ($sName === '_oModule') {
+            $this->_oModuleHidden = $o;
+        }
+        throw new \Exception("Unknown property: $sName");
     }
 
     public function response($oAlert)