Procházet zdrojové kódy

Ticket #4549 - Add subtypes for Module type in sys_modules table. Point 3.

AntonLV před 2 roky
rodič
revize
0d7dec5bba
1 změnil soubory, kde provedl 32 přidání a 95 odebrání
  1. 32 95
      template/scripts/BxBaseServices.php

+ 32 - 95
template/scripts/BxBaseServices.php

@@ -451,24 +451,10 @@ class BxBaseServices extends BxDol implements iBxDolProfileService
      */
     public function serviceIsModuleContent($mixedModule)
     {
-        /*
-         * TODO: Update after UNA 14.0.0-A3 was released.
-         *  Check for 'subtypes' should be removed. Use only DB call, because it's more accurate.
-         */
-        if(is_string($mixedModule)) {
-            $oModuleQuery = BxDolModuleQuery::getInstance();
-            if($oModuleQuery->isFieldExists('sys_modules', 'subtypes'))
-                return $oModuleQuery->isModuleContent($mixedModule);
-
-            $mixedModule = BxDolModule::getInstance($mixedModule);
-        }
+        if($mixedModule instanceof BxDolModule)
+            $mixedModule = $mixedModule->getName();
 
-        return
-            $mixedModule instanceof BxDolModule &&
-            $mixedModule instanceof iBxDolContentInfoService &&
-            !($mixedModule instanceof iBxDolProfileService) &&
-            BxDolRequest::serviceExists($mixedModule->_aModule, 'is_allowed_post_in_context') &&
-            bx_srv($mixedModule->getName(), 'is_allowed_post_in_context');
+        return BxDolModuleQuery::getInstance()->isModuleContent($mixedModule);
     }
 
     /**
@@ -479,19 +465,10 @@ class BxBaseServices extends BxDol implements iBxDolProfileService
      */
     public function serviceIsModuleContext($mixedModule)
     {
-        /*
-         * TODO: Update after UNA 14.0.0-A3 was released.
-         *  Check for 'subtypes' should be removed. Use only DB call, because it's more accurate.
-         */
-        if(is_string($mixedModule)) {
-            $oModuleQuery = BxDolModuleQuery::getInstance();
-            if($oModuleQuery->isFieldExists('sys_modules', 'subtypes'))
-                return $oModuleQuery->isModuleContext($mixedModule);
-
-            $mixedModule = BxDolModule::getInstance($mixedModule);
-        }
+        if($mixedModule instanceof BxDolModule)
+            $mixedModule = $mixedModule->getName();
 
-        return $mixedModule instanceof BxDolModule && $mixedModule instanceof iBxDolProfileService;
+        return BxDolModuleQuery::getInstance()->isModuleContext($mixedModule);
     }
 
     /**
@@ -502,19 +479,10 @@ class BxBaseServices extends BxDol implements iBxDolProfileService
      */
     public function serviceIsModuleProfile($mixedModule)
     {
-        /*
-         * TODO: Update after UNA 14.0.0-A3 was released.
-         *  Check for 'subtypes' should be removed. Use only DB call, because it's more accurate.
-         */
-        if(is_string($mixedModule)) {
-            $oModuleQuery = BxDolModuleQuery::getInstance();
-            if($oModuleQuery->isFieldExists('sys_modules', 'subtypes'))
-                return $oModuleQuery->isModuleProfile($mixedModule);
+        if($mixedModule instanceof BxDolModule)
+            $mixedModule = $mixedModule->getName();
 
-            $mixedModule = BxDolModule::getInstance($mixedModule);
-        }
-
-        return $mixedModule instanceof BxDolModule && $mixedModule instanceof iBxDolProfileService && $mixedModule->serviceActAsProfile();
+        return BxDolModuleQuery::getInstance()->isModuleProfile($mixedModule);
     }
 
     /**
@@ -525,68 +493,37 @@ class BxBaseServices extends BxDol implements iBxDolProfileService
      */
     public function serviceGetModulesByType($sType, $aParams = [])
     {
-        $aResults = [];
-
-        //TODO: Remove old variant (from ELSE) after UNA 14.0.0-A3 was released.
         $oModuleQuery = BxDolModuleQuery::getInstance();
-        if($oModuleQuery->isFieldExists('sys_modules', 'subtypes')) {
-            if(!$oModuleQuery->checkModulesSubtypes()) {
-                $oInstallerUtils = new BxDolInstallerUtils();
-                $aModules = $oModuleQuery->getModulesBy(['type' => 'modules']);
-                foreach($aModules as $aModule)
-                    if(($iModuleSubtypes = $oInstallerUtils->getSubtypes($aModule['name'])) != 0)
-                        $oModuleQuery->updateModule(['subtypes' => $iModuleSubtypes], ['id' => $aModule['id']]);
-            }
-
-            $iSubtypes = 0;
-            switch($sType) {
-                case 'content';
-                    $iSubtypes = BX_DOL_MODULE_SUBTYPE_TEXT;
-                    break;
-
-                case 'context';
-                    $iSubtypes = BX_DOL_MODULE_SUBTYPE_CONTEXT;
-                    break;
-
-                case 'profile';
-                    $iSubtypes = BX_DOL_MODULE_SUBTYPE_PROFILE;
-                    break;
-            }
 
-            $aResults = $oModuleQuery->getModulesBy(array_merge([
-                'type' => 'modules_subtypes', 
-                'value' => $iSubtypes, 
-                'active' => 1
-            ], array_intersect_key($aParams, array_flip(['id_as_key', 'name_as_key']))));
+        if(!$oModuleQuery->checkModulesSubtypes()) {
+            $oInstallerUtils = new BxDolInstallerUtils();
+            $aModules = $oModuleQuery->getModulesBy(['type' => 'modules']);
+            foreach($aModules as $aModule)
+                if(($iModuleSubtypes = $oInstallerUtils->getSubtypes($aModule['name'])) != 0)
+                    $oModuleQuery->updateModule(['subtypes' => $iModuleSubtypes], ['id' => $aModule['id']]);
         }
-        else {
-            $bIdAsKey = isset($aParams['id_as_key']) && $aParams['id_as_key'] === true;
-            $bNameAsKey = !$bIdAsKey && isset($aParams['name_as_key']) && $aParams['name_as_key'] === true;
-
-            $aModules = $oModuleQuery->getModulesBy(['type' => 'modules', 'active' => 1]);
-            foreach($aModules as $aModule) {
-                $oModule = BxDolModule::getInstance($aModule['name']);
-                if(!$oModule)
-                    continue;
 
-                if($sType == 'content' && !$this->serviceIsModuleContent($oModule))
-                    continue;
-
-                if($sType == 'context' && !$this->serviceIsModuleContext($oModule))
-                    continue;
+        $iSubtypes = 0;
+        switch($sType) {
+            case 'content';
+                $iSubtypes = BX_DOL_MODULE_SUBTYPE_TEXT;
+                break;
 
-                if($sType == 'profile' && !$this->serviceIsModuleProfile($oModule))
-                    continue;
+            case 'context';
+                $iSubtypes = BX_DOL_MODULE_SUBTYPE_CONTEXT;
+                break;
 
-                if($bIdAsKey)
-                    $aResults[$aModule['id']] = $aModule;
-                else if($bNameAsKey)
-                    $aResults[$aModule['name']] = $aModule;
-                else
-                    $aResults[] = $aModule;
-            }
+            case 'profile';
+                $iSubtypes = BX_DOL_MODULE_SUBTYPE_PROFILE;
+                break;
         }
 
+        $aResults = $oModuleQuery->getModulesBy(array_merge([
+            'type' => 'modules_subtypes', 
+            'value' => $iSubtypes, 
+            'active' => 1
+        ], array_intersect_key($aParams, array_flip(['id_as_key', 'name_as_key']))));
+
         return $aResults;
     }