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

Ticket #4148 - Build-in API support: Improve DecodeData process.

AntonLV 2 лет назад
Родитель
Сommit
5232bdb63b

+ 31 - 3
inc/classes/BxDolCmts.php

@@ -1691,6 +1691,15 @@ class BxDolCmts extends BxDolFactory implements iBxDolReplaceable, iBxDolContent
         return BxDolContentInfo::formatFields($aComment);
     }
 
+    public function serviceGetInfoApi ($iContentId, $bExtendedUnits = false)
+    {
+        $aData = $this->serviceGetInfo($iContentId, false);
+        if($aData)
+            $aData = $this->getDataAPI($aData, ['extended' => $bExtendedUnits]);
+
+        return $aData;
+    }
+
     public function serviceGetSearchResultUnit ($iContentId, $sUnitTemplate = '')
     {
         $aComment = $this->_oQuery->getCommentsBy(array('type' => 'id', 'id' => $iContentId));
@@ -2273,9 +2282,7 @@ class BxDolCmts extends BxDolFactory implements iBxDolReplaceable, iBxDolContent
             $oMenuManage->setCmtsData($this, $iCmtId, $aBp);
 
             $aData = $this->getCommentSimple($iCmtId);
-            $aData = array_merge($aData, [
-                'author_data' => BxDolProfile::getData($aData['cmt_author_id']),
-                'cmt_url' => '/' . $this->getViewUrl($aData['cmt_id'], false),
+            $aData = array_merge($this->getDataAPI($aData), [
                 'menu_actions' => $oMenuActions->getCodeAPI(),
                 'menu_manage' => $oMenuManage->getCodeAPI(),
             ]);
@@ -2318,6 +2325,27 @@ class BxDolCmts extends BxDolFactory implements iBxDolReplaceable, iBxDolContent
             }
         }
     }
+
+    public function getDataAPI($aData, $aParams = [])
+    {
+        $aDataApi = array_merge($aData, [
+            'cmt_url' => '/' . $this->getViewUrl($aData['cmt_id'], false),
+            'author_data' => BxDolProfile::getData($aData['cmt_author_id']),
+        ]);
+
+        $sModule = $this->_aSystem['module'];
+        $aExtras = [
+            'module' => $sModule,
+            'data' => $aData,
+            'params' => $aParams,
+            'data_api' => &$aDataApi,
+        ];
+
+        bx_alert('system', 'decode_comment_data_api', 0, 0, $aExtras);
+        bx_alert($sModule, 'decode_comment_data_api', 0, 0, $aExtras);
+
+        return $aDataApi;
+    }
 }
 
 /** @} */

+ 5 - 0
inc/classes/BxDolContentInfo.php

@@ -292,6 +292,11 @@ class BxDolContentInfo extends BxDolFactory implements iBxDolFactoryObject
         return $this->_call('get_info', $iContentId, $bSearchableFieldsOnly);
     }
 
+    public function getContentInfoAPI ($iContentId, $bExtendedUnits = false)
+    {
+        return $this->_call('get_info_api', $iContentId, $bExtendedUnits);
+    }    
+
     public function getContentSearchResultUnit ($iContentId, $sUnitTemplate = '')
     {
         return $this->_call('get_search_result_unit', $iContentId, $sUnitTemplate);

+ 6 - 1
inc/classes/BxDolContentInfoCmts.php

@@ -55,7 +55,12 @@ class BxDolContentInfoCmts extends BxDolContentInfo
 
     public function getContentInfo ($iContentId, $bSearchableFieldsOnly = true)
     {
-        return $this->_oCmts->serviceGetInfo($iContentId);
+        return $this->_oCmts->serviceGetInfo($iContentId, $bSearchableFieldsOnly);
+    }
+    
+    public function getContentInfoAPI ($iContentId, $bExtendedUnits = false)
+    {
+        return $this->_oCmts->serviceGetInfoApi($iContentId, $bExtendedUnits);
     }
 
     public function getContentSearchResultUnit ($iContentId, $sUnitTemplate = '')

+ 21 - 6
inc/classes/BxDolSearch.php

@@ -140,8 +140,10 @@ class BxDolSearch extends BxDol
             $aItems = BxDolDb::getInstance()->getAll('(' . implode(') UNION (', $aQueries) . ') ORDER BY `added` DESC ' . current($sCode)['limit']);
 
             $sCode = [];
-            foreach($aItems as $aItem)
-                $sCode[] = bx_srv($aItem['module'], 'get_info_api', [$aItem['id'], $bExtendedUnits]);
+            foreach($aItems as $aItem) {
+                if(($oContentInfo = BxDolContentInfo::getObjectInstance($aItem['content_info'])) !== false)
+                    $sCode[] = $oContentInfo->getContentInfoAPI($aItem['id'], $bExtendedUnits);
+            }
         }
 
         return $sCode;
@@ -379,6 +381,16 @@ class BxDolSearchResult implements iBxDolReplaceable
         $this->id = $sId;
     }
 
+    public function getModuleName()
+    {
+        return isset($this->aCurrent['module_name']) ? $this->aCurrent['module_name'] : '';
+    }
+
+    public function getContentInfoName()
+    {
+        return isset($this->aCurrent['name']) ? $this->aCurrent['name'] : '';
+    }
+
     public function setAjaxPaginate($b = true)
     {
         $this->bForceAjaxPaginate = $b;
@@ -721,7 +733,10 @@ class BxDolSearchResult implements iBxDolReplaceable
     
     function getSearchQuery($aParams = [])
     {
-        $this->aPseud = ['id' => 'id', 'added' => 'added'];
+        $this->aPseud = [
+            'id' => !empty($this->aCurrent['ident']) ? $this->aCurrent['ident'] : 'id', 
+            'added' => !empty($this->aCurrent['added']) ? $this->aCurrent['added'] : 'added'
+        ];
 
         $this->setConditionParams();
         return $this->getSearchDataByParams($aParams);
@@ -775,9 +790,9 @@ class BxDolSearchResult implements iBxDolReplaceable
         if($bForUnion) {
             $sTable = isset($this->aCurrent['tableSearch']) ? $this->aCurrent['tableSearch'] : $this->aCurrent['table'];
 
-            $aSql['ownFields'] .= $this->setFieldUnit('id', $sTable);
-            $aSql['ownFields'] .= $this->setFieldUnit('added', $sTable);
-            $aSql['ownFields'] .= "'" . $this->aCurrent['module_name']  . "' AS `module`";
+            $aSql['ownFields'] .= $this->setFieldUnit(!empty($this->aCurrent['ident']) ? $this->aCurrent['ident'] : 'id', $sTable);
+            $aSql['ownFields'] .= $this->setFieldUnit(!empty($this->aCurrent['added']) ? $this->aCurrent['added'] : 'added', $sTable);
+            $aSql['ownFields'] .= "'" . $this->getContentInfoName()  . "' AS `content_info`";
         }
         else
             foreach ($this->aCurrent['ownFields'] as $sValue)

+ 7 - 15
modules/base/general/classes/BxBaseModGeneralCmtsSearchResult.php

@@ -19,13 +19,13 @@ class BxBaseModGeneralCmtsSearchResult extends BxBaseModGeneralSearchResult
     {
         parent::__construct($sMode, $aParams);
 
-        $this->oModule = $this->getMain();
+        $this->oModule = BxDolModule::getInstance($this->sModule);
         $this->sModuleObjectComments = $this->oModule->_oConfig->CNF['OBJECT_COMMENTS'];
         $this->aCommentsAddons = array();        
 
         $this->aCurrent = array(
-            'name' => $this->oModule->_oConfig->getName() . '_cmts',
-            'module_name' => $this->oModule->_oConfig->getName(),
+            'name' => $this->sModule . '_cmts',
+            'module_name' => $this->sModule,
             'object_metatags' => 'sys_cmts',
             'title' => '',
             'table' => $this->oModule->_oConfig->getDbPrefix() . 'cmts',
@@ -36,7 +36,8 @@ class BxBaseModGeneralCmtsSearchResult extends BxBaseModGeneralSearchResult
             ),
             'paginate' => array('start' => 0),
             'sorting' => 'last',
-            'ident' => 'cmt_id'
+            'ident' => 'cmt_id',
+            'added' => 'cmt_time',
         );
 
         $this->_joinTableUniqueIds();
@@ -44,11 +45,6 @@ class BxBaseModGeneralCmtsSearchResult extends BxBaseModGeneralSearchResult
         $this->sBrowseUrl = BX_DOL_SEARCH_KEYWORD_PAGE;
     }
 
-    function getMain()
-    {
-        return BxDolModule::getInstance($this->sModule);
-    }
-
     function displaySearchUnit($aData)
     {
         $oCmts = BxDolCmts::getObjectInstance($this->sModuleObjectComments, $aData['object_id']);
@@ -94,12 +90,8 @@ class BxBaseModGeneralCmtsSearchResult extends BxBaseModGeneralSearchResult
     {
         $oContentInfo = $this->getContentInfoObject();
 
-        foreach($a as $i => $r) {
-            if(isset($r['author']))
-                $a[$i]['author_data'] = BxDolProfile::getData($r['author']);
-
-            $a[$i]['url'] = bx_api_get_relative_url($oContentInfo->getContentLink($r['id']));
-        }
+        foreach($a as $i => $r)
+            $a[$i] = $oContentInfo->getContentInfoAPI($r['id']);
 
         return $a;
     }

+ 19 - 1
modules/base/general/classes/BxBaseModGeneralModule.php

@@ -502,7 +502,7 @@ class BxBaseModGeneralModule extends BxDolModule
     {
         $aData = $this->serviceGetInfo($iContentId, false);
         if($aData)
-            $aData = $this->decodeDataAPI($aData, ['extended' => $bExtendedUnits]);
+            $aData = $this->getDataAPI($aData, ['extended' => $bExtendedUnits]);
 
         return $aData;
     }
@@ -3341,6 +3341,24 @@ class BxBaseModGeneralModule extends BxDolModule
         return bx_absolute_url(BxDolPermalinks::getInstance()->permalink('page.php?i=' . $CNF['URI_FAVORITES_LIST'] . '&profile_id=' . $iProfileId . '&list_id=' . $iListId));
     }
 
+    public function getDataAPI($aData, $aParams = [])
+    {
+        $aDataApi = $this->decodeDataAPI($aData, $aParams);
+
+        $sModule = $this->getName();
+        $aExtras = [
+            'module' => $sModule,
+            'data' => $aData,
+            'params' => $aParams,
+            'data_api' => &$aDataApi,
+        ];
+
+        bx_alert('system', 'decode_data_api', 0, 0, $aExtras);
+        bx_alert($sModule, 'decode_data_api', 0, 0, $aExtras);
+
+        return $aDataApi;
+    }
+
     public function decodeDataAPI($aData, $aParams = [])
     {
         return $aData;

+ 6 - 3
modules/base/general/classes/BxBaseModGeneralSearchResult.php

@@ -29,12 +29,15 @@ class BxBaseModGeneralSearchResult extends BxTemplSearchResult
 
     function getMain()
     {
-        return BxDolModule::getInstance($this->aCurrent['module_name']);
+        if(!$this->oModule)
+            $this->oModule = BxDolModule::getInstance($this->getModuleName());
+
+        return $this->oModule;
     }
 
     function getContentInfoObject()
     {
-        return BxDolContentInfo::getObjectInstance($this->aCurrent['name']);
+        return BxDolContentInfo::getObjectInstance($this->getContentInfoName());
     }
 
     function getRssUnitLink (&$a)
@@ -220,7 +223,7 @@ class BxBaseModGeneralSearchResult extends BxTemplSearchResult
         $bExtendedUnits = getParam('sys_api_extended_units') == 'on';
 
         foreach($a as $i => $r)
-            $a[$i] = $this->oModule->decodeDataAPI($r, ['extended' => $bExtendedUnits]);
+            $a[$i] = $this->oModule->getDataAPI($r, ['extended' => $bExtendedUnits]);
 
         return $a;
     }

+ 1 - 1
modules/base/profile/classes/BxBaseModProfileTemplate.php

@@ -96,7 +96,7 @@ class BxBaseModProfileTemplate extends BxBaseModGeneralTemplate
 
     public function unitAPI($aData, $aParams = [])
     {
-        return $this->getModule()->decodeDataAPI($aData, $aParams);
+        return $this->getModule()->getDataAPI($aData, $aParams);
     }
 
     function unitVars ($aData, $isCheckPrivateContent = true, $mixedTemplate = false, $aParams = [])