Explorar o código

#1036 Service blocks with predefined search term(as param) for extended search

Alex Trofimov %!s(int64=8) %!d(string=hai) anos
pai
achega
ee7a2b2e79

+ 1 - 1
inc/classes/BxDol.php

@@ -242,6 +242,6 @@ interface iBxDolContentInfoService
     public function serviceGetAll ($aParams = array());
 
     public function serviceGetSearchableFieldsExtended();
-    public function serviceGetSearchResultExtended($aParams);
+    public function serviceGetSearchResultExtended($aParams, $iStart = 0, $iPerPage = 0);
 }
 /** @} */

+ 2 - 2
inc/classes/BxDolCmts.php

@@ -1163,12 +1163,12 @@ class BxDolCmts extends BxDolFactory implements iBxDolReplaceable, iBxDolContent
     public function unregisterTranscoders()
     {}
 
-    public function serviceGetSearchResultExtended($aParams)
+    public function serviceGetSearchResultExtended($aParams, $iStart = 0, $iPerPage = 0)
     {
         if(empty($aParams) || !is_array($aParams))
             return array();
 
-        return $this->_oQuery->getCommentsBy(array('type' => 'search_ids', 'search_params' => $aParams));
+        return $this->_oQuery->getCommentsBy(array('type' => 'search_ids', 'search_params' => $aParams, 'start' => $iStart, 'per_page' => $iPerPage));
     }
 
     /**

+ 5 - 0
inc/classes/BxDolCmtsQuery.php

@@ -226,6 +226,11 @@ class BxDolCmtsQuery extends BxDolDb
 
                 $sSelectClause = "`{$this->_sTable}`.`cmt_id`";
 
+                if (!empty($aParams['start']) && !empty($aParams['per_page']))
+                    $sLimitClause = $this->prepareAsString("?, ?", $aParams['start'], $aParams['per_page']);
+                elseif (!empty($aParams['per_page']))
+                    $sLimitClause = $this->prepareAsString("?", $aParams['per_page']);
+
                 $sWhereConditions = "1";
                 foreach($aParams['search_params'] as $sSearchParam => $aSearchParam) {
                     $sSearchValue = "";

+ 2 - 2
inc/classes/BxDolContentInfo.php

@@ -286,9 +286,9 @@ class BxDolContentInfo extends BxDolFactory implements iBxDolFactoryObject
         return $this->_call('get_searchable_fields_extended');
     }
 
-    public function getSearchResultExtended ($aParams)
+    public function getSearchResultExtended ($aParams, $iStart = 0, $iPerPage = 0)
     {
-        return $this->_call('get_search_result_extended', $aParams);
+        return $this->_call('get_search_result_extended', $aParams, $iStart, $iPerPage);
     }
 
     protected function _call($sMethod)

+ 2 - 2
inc/classes/BxDolContentInfoCmts.php

@@ -74,9 +74,9 @@ class BxDolContentInfoCmts extends BxDolContentInfo
         return $this->_oCmts->serviceGetSearchableFieldsExtended();
     }
 
-    public function getSearchResultExtended ($aParams)
+    public function getSearchResultExtended ($aParams, $iStart = 0, $iPerPage = 0)
     {
-        return $this->_oCmts->serviceGetSearchResultExtended($aParams);
+        return $this->_oCmts->serviceGetSearchResultExtended($aParams, $iStart, $iPerPage);
     }
 }
 

+ 5 - 0
modules/base/general/classes/BxBaseModGeneralDb.php

@@ -62,6 +62,11 @@ class BxBaseModGeneralDb extends BxDolModuleDb
 
                 $sSelectClause = "`" . $CNF['TABLE_ENTRIES'] . "`.`" . $CNF['FIELD_ID'] . "`";
 
+                if (!empty($aParams['start']) && !empty($aParams['per_page']))
+                    $sLimitClause = $this->prepareAsString("?, ?", $aParams['start'], $aParams['per_page']);
+                elseif (!empty($aParams['per_page']))
+                    $sLimitClause = $this->prepareAsString("?", $aParams['per_page']);
+        
                 $sWhereConditions = "1";
                 foreach($aParams['search_params'] as $sSearchParam => $aSearchParam) {
                     $sSearchValue = "";

+ 2 - 2
modules/base/general/classes/BxBaseModGeneralModule.php

@@ -163,12 +163,12 @@ class BxBaseModGeneralModule extends BxDolModule
         return $aResult;
     }
 
-    public function serviceGetSearchResultExtended($aParams)
+    public function serviceGetSearchResultExtended($aParams, $iStart = 0, $iPerPage = 0)
     {
         if(empty($aParams) || !is_array($aParams))
             return array();
 
-        return $this->_oDb->getEntriesBy(array('type' => 'search_ids', 'search_params' => $aParams));
+        return $this->_oDb->getEntriesBy(array('type' => 'search_ids', 'search_params' => $aParams, 'start' => $iStart, 'per_page' => $iPerPage));
     }
 
     public function serviceModuleIcon ()

+ 2 - 2
modules/boonex/albums/classes/BxAlbumsContentInfoMedia.php

@@ -131,12 +131,12 @@ class BxAlbumsContentInfoMedia extends BxDolContentInfo
         );
     }
 
-    public function getSearchResultExtended ($aParams)
+    public function getSearchResultExtended ($aParams, $iStart = 0, $iPerPage = 0)
     {
         if(empty($aParams) || !is_array($aParams))
             return array();
 
-        return $this->_oModule->_oDb->getMediaBy(array('type' => 'search_ids', 'search_params' => $aParams));
+        return $this->_oModule->_oDb->getMediaBy(array('type' => 'search_ids', 'search_params' => $aParams, 'start' => $iStart, 'per_page' => $iPerPage));
     }
 }
 

+ 5 - 0
modules/boonex/albums/classes/BxAlbumsDb.php

@@ -95,6 +95,11 @@ class BxAlbumsDb extends BxBaseModTextDb
                 
                 $sSelectClause = "`{$CNF['TABLE_FILES2ENTRIES']}`.`id`";
 
+                if (!empty($aParams['start']) && !empty($aParams['per_page']))
+                    $sLimitClause = $this->prepareAsString("?, ?", $aParams['start'], $aParams['per_page']);
+                elseif (!empty($aParams['per_page']))
+                    $sLimitClause = $this->prepareAsString("?", $aParams['per_page']);
+
                 $sWhereConditions = "1";
                 foreach($aParams['search_params'] as $sSearchParam => $aSearchParam) {
                     $sSearchValue = "";

+ 28 - 3
template/scripts/BxBaseSearchExtended.php

@@ -44,12 +44,32 @@ class BxBaseSearchExtended extends BxDolSearchExtended
         return $oForm->getCode();
     }
 
-    public function getResults()
+    /**
+     * Get search results from search form or from custom condition
+     *
+     * @param $aCondition custom condition to pass instead of form submission, 
+     *        conditions are key&value pair, where 'key' is form input name and 
+     *        'value' is the term to search for
+     * @param $sUnitTemplate custom unit templates to use
+     * @param $iStart position of first record to display 
+     * @param $iPerPage number of items per page
+     * @return HTML string with search results
+     */ 
+    public function getResults($aCondition = array(), $sUnitTemplate = '', $iStart = 0, $iPerPage = 0)
     {
         if(!$this->isEnabled())
             return '';
 
         $oForm = $this->prepareForm();
+        if ($aCondition) {
+            $mixedSubmitName = $oForm->aParams['db']['submit_name'];
+            if (is_array($mixedSubmitName))
+                $mixedSubmitName = array_pop($mixedSubmitName);
+            $aCondition[$mixedSubmitName] = 1;
+            $oForm->aFormAttrs['method'] = BX_DOL_FORM_METHOD_SPECIFIC;
+            $oForm->aParams['csrf']['disable'] = true;
+        }
+        $oForm->initChecker(array(), $aCondition);
         if(!$oForm->isSubmittedAndValid()) 
             return '';
 
@@ -73,17 +93,22 @@ class BxBaseSearchExtended extends BxDolSearchExtended
         if(empty($aParams) || !is_array($aParams))
             return '';
 
+        if (!$iPerPage) {
+            bx_import('BxDolSearch');
+            $iPerPage = BX_DOL_SEARCH_RESULTS_PER_PAGE_DEFAULT;
+        }
+
         $aResults = false;
         bx_alert('search', 'get_data', 0, false, array('object' => $this->_aObject, 'search_params' => $aParams, 'search_results' => &$aResults));
     	if($aResults === false)
-    	    $aResults = $oContentInfo->getSearchResultExtended($aParams);
+    	    $aResults = $oContentInfo->getSearchResultExtended($aParams, $iStart, $iPerPage);
 
     	if(empty($aResults) || !is_array($aResults))
     	    return '';
 
     	$sResults = '';
     	foreach($aResults as $iId)
-    	    $sResults .= $oContentInfo->getContentSearchResultUnit($iId);   	
+    	    $sResults .= $oContentInfo->getContentSearchResultUnit($iId, $sUnitTemplate);   	
 
         return $sResults;
     }

+ 2 - 1
template/scripts/BxBaseSearchExtendedServices.php

@@ -42,7 +42,8 @@ class BxBaseSearchExtendedServices extends BxDol
 
         $bShowEmpty = isset($aParams['show_empty']) && (bool)$aParams['show_empty'];
 
-        $sResults = $oSearch->getResults();
+        $a = isset($aParams['cond']) && $aParams['cond'] ? $aParams['cond'] : array();
+        $sResults = $oSearch->getResults($a, !empty($aParams['template']) ? $aParams['template'] : '', !empty($aParams['start']) ? $aParams['start'] : 0, !empty($aParams['per_page']) ? $aParams['per_page'] : 0);
 
         return !empty($sResults) ? $sResults : ($bShowEmpty ? MsgBox(_t('_Empty')) : ''); 
     }