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

Ticket #5273 - Get rid of duplicates in code.

AntonLV 11 месяцев назад
Родитель
Сommit
c1b2182c00

+ 6 - 33
inc/classes/BxDolCmtsQuery.php

@@ -611,41 +611,14 @@ class BxDolCmtsQuery extends BxDolDb
                 elseif (!empty($aParams['per_page']))
                     $sLimitClause = $this->prepareAsString("?", $aParams['per_page']);
 
-                $sWhereConditions = "1";
-                foreach($aParams['search_params'] as $sSearchParam => $aSearchParam) {
-                    $sSearchValue = "";
-                    switch ($aSearchParam['operator']) {
-                        case 'like':
-                            $sSearchValue = " LIKE " . $this->escape("%" . $aSearchParam['value'] . "%");
-                            break;
-
-                        case 'in':
-                            $sSearchValue = " IN (" . $this->implode_escape($aSearchParam['value']) . ")";
-                            break;
-
-                        case 'and':
-                            $iResult = 0;
-                            if (is_array($aSearchParam['value']))
-                                foreach ($aSearchParam['value'] as $iValue)
-                                    $iResult |= pow (2, $iValue - 1);
-                            else 
-                                $iResult = (int)$aSearchParam['value'];
-
-                            $sSearchValue = " & " . $iResult . "";
-                            break;
-
-                        default:
-                             $sSearchValue = " " . $aSearchParam['operator'] . " :" . $sSearchParam;
-                             $aMethod['params'][1][$sSearchParam] = $aSearchParam['value'];                             
-                    }
-
-                    $sWhereConditions .= " AND `{$this->_sTable}`.`" . $sSearchParam . "`" . $sSearchValue;
-                }
+                BxDolSearchExtended::processParams($aParams['search_params'], [
+                    'table' => $this->_sTable,
+                    'bindings' => &$aMethod['params'][1],
+                    'where_clause' => &$sWhereClause
+                ]);
 
                 if(($oCf = $this->_oMain->getObjectContentFilter()) !== false)
-                    $sWhereConditions .= $oCf->getSQLParts($this->_sTable, 'cmt_cf');
-
-                $sWhereClause .= " AND (" . $sWhereConditions . ")"; 
+                    $sWhereClause .= $oCf->getSQLParts($this->_sTable, 'cmt_cf');
 
                 $sOrderClause .=  "`{$this->_sTable}`.`cmt_time` ASC";
                 break;

+ 39 - 0
inc/classes/BxDolSearchExtended.php

@@ -180,6 +180,45 @@ class BxDolSearchExtended extends BxDolFactory implements iBxDolFactoryObject
         return json_decode(base64_decode(urldecode($sConditions)), true);
     }
 
+    static public function processParams($aParams, $aQueryParts)
+    {
+        $oDb = BxDolDb::getInstance();
+
+        $sWhereConditions = "1";
+        foreach($aParams as $sSearchParam => $aSearchParam) {
+            $sSearchValue = "";
+            switch ($aSearchParam['operator']) {
+                case 'like':
+                    $sSearchValue = " LIKE " . $oDb->escape("%" . $aSearchParam['value'] . "%");
+                    break;
+
+                case 'in':
+                    $sSearchValue = " IN (" . $oDb->implode_escape($aSearchParam['value']) . ")";
+                    break;
+
+                case 'and':
+                    $iResult = 0;
+                    if (is_array($aSearchParam['value']))
+                        foreach ($aSearchParam['value'] as $iValue)
+                            $iResult |= pow (2, $iValue - 1);
+                    else 
+                        $iResult = (int)$aSearchParam['value'];
+
+                    $sSearchValue = " & " . $iResult . "";
+                    break;
+
+                default:
+                    $sSearchValue = " " . $aSearchParam['operator'] . " :" . $sSearchParam;
+
+                    $aQueryParts['bindings'][$sSearchParam] = $aSearchParam['value'];
+            }
+
+            $sWhereConditions .= " AND `" . $aQueryParts['table'] . "`.`" . $sSearchParam . "`" . $sSearchValue;
+        }
+
+        $aQueryParts['where_clause'] .= " AND (" . $sWhereConditions . ")";
+    }
+
     public function isEnabled()
     {
         return isset($this->_aObject['active']) && (int)$this->_aObject['active'] != 0;

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

@@ -123,38 +123,11 @@ class BxAlbumsDb extends BxBaseModTextDb
                 elseif (!empty($aParams['per_page']))
                     $sLimitClause = $this->prepareAsString("?", $aParams['per_page']);
 
-                $sWhereConditions = "1";
-                foreach($aParams['search_params'] as $sSearchParam => $aSearchParam) {
-                    $sSearchValue = "";
-                    switch ($aSearchParam['operator']) {
-                        case 'like':
-                            $sSearchValue = " LIKE " . $this->escape("%" . $aSearchParam['value'] . "%");
-                            break;
-
-                        case 'in':
-                            $sSearchValue = " IN (" . $this->implode_escape($aSearchParam['value']) . ")";
-                            break;
-
-                        case 'and':
-                            $iResult = 0;
-                            if (is_array($aSearchParam['value']))
-                                foreach ($aSearchParam['value'] as $iValue)
-                                    $iResult |= pow (2, $iValue - 1);
-                            else 
-                                $iResult = (int)$aSearchParam['value'];
-
-                            $sSearchValue = " & " . $iResult . "";
-                            break;
-
-                        default:
-                             $sSearchValue = " " . $aSearchParam['operator'] . " :" . $sSearchParam;
-                             $aMethod['params'][1][$sSearchParam] = $aSearchParam['value'];                             
-                    }
-
-                    $sWhereConditions .= " AND `{$CNF['TABLE_FILES2ENTRIES']}`.`" . $sSearchParam . "`" . $sSearchValue;
-                }
-
-                $sWhereClause .= " AND (" . $sWhereConditions . ")"; 
+                BxDolSearchExtended::processParams($aParams['search_params'], [
+                    'table' => $CNF['TABLE_FILES2ENTRIES'],
+                    'bindings' => &$aMethod['params'][1],
+                    'where_clause' => &$sWhereClause
+                ]);
 
                 $sOrderClause .=  "`{$CNF['TABLE_FILES2ENTRIES']}`.`id` ASC";
                 break;

+ 3 - 56
modules/boonex/stories/classes/BxStoriesDb.php

@@ -121,11 +121,11 @@ class BxStoriesDb extends BxBaseModTextDb
         return $this->getAll("SELECT " . $sSelectClause . " FROM `" . $CNF['TABLE_ENTRIES_MEDIA'] . "` AS `f2e` " . $sJoinClause . " WHERE `f2e`.`content_id` = :id " . $sOrderClause . " " . $sLimitQuery, $aBindings);
     }
 
-    function getMediaBy($aParams = array())
+    public function getMediaBy($aParams = [])
     {
         $CNF = &$this->_oConfig->CNF;
 
-    	$aMethod = array('name' => 'getAll', 'params' => array(0 => 'query', 1 => array()));
+    	$aMethod = ['name' => 'getAll', 'params' => [0 => 'query', 1 => []]];
         $sSelectClause = $sJoinClause = $sWhereClause = $sOrderClause = $sLimitClause = "";
 
         $sSelectClause = "`{$CNF['TABLE_ENTRIES_MEDIA']}`.*";
@@ -138,59 +138,6 @@ class BxStoriesDb extends BxBaseModTextDb
                 $sWhereClause .= " AND `{$CNF['TABLE_ENTRIES_MEDIA']}`.`id` = :id";
                 break;
 
-            case 'search_ids':
-                $aMethod['name'] = 'getColumn';
-                
-                $sSelectClause = "`{$CNF['TABLE_ENTRIES_MEDIA']}`.`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 = "";
-                    switch ($aSearchParam['operator']) {
-                        case 'like':
-                            $sSearchValue = " LIKE " . $this->escape("%" . $aSearchParam['value'] . "%");
-                            break;
-
-                        case 'in':
-                            $sSearchValue = " IN (" . $this->implode_escape($aSearchParam['value']) . ")";
-                            break;
-
-                        case 'and':
-                            $iResult = 0;
-                            if (is_array($aSearchParam['value']))
-                                foreach ($aSearchParam['value'] as $iValue)
-                                    $iResult |= pow (2, $iValue - 1);
-                            else 
-                                $iResult = (int)$aSearchParam['value'];
-
-                            $sSearchValue = " & " . $iResult . "";
-                            break;
-
-                        default:
-                             $sSearchValue = " " . $aSearchParam['operator'] . " :" . $sSearchParam;
-                             $aMethod['params'][1][$sSearchParam] = $aSearchParam['value'];                             
-                    }
-
-                    $sWhereConditions .= " AND `{$CNF['TABLE_ENTRIES_MEDIA']}`.`" . $sSearchParam . "`" . $sSearchValue;
-                }
-
-                $sWhereClause .= " AND (" . $sWhereConditions . ")"; 
-
-                $sOrderClause .=  "`{$CNF['TABLE_ENTRIES_MEDIA']}`.`id` ASC";
-                break;
-
-            case 'all_ids':
-                $aMethod['name'] = 'getColumn';
-
-                $sSelectClause = "`{$CNF['TABLE_ENTRIES_MEDIA']}`.`id`";
-                $sOrderClause .=  "`{$CNF['TABLE_ENTRIES_MEDIA']}`.`id` ASC";
-                break;
-
             case 'all':
                 $sOrderClause .=  "`{$CNF['TABLE_ENTRIES_MEDIA']}`.`id` ASC";
                 break;
@@ -203,7 +150,7 @@ class BxStoriesDb extends BxBaseModTextDb
             $sLimitClause = 'LIMIT ' . $sLimitClause;
 
         $aMethod['params'][0] = "SELECT " . $sSelectClause . " FROM `{$CNF['TABLE_ENTRIES_MEDIA']}` " . $sJoinClause . " WHERE 1 " . $sWhereClause . " " . $sOrderClause . " " . $sLimitClause;
-		return call_user_func_array(array($this, $aMethod['name']), $aMethod['params']);
+        return call_user_func_array([$this, $aMethod['name']], $aMethod['params']);
     }
     
     public function updateMedia($aParamsSet, $aParamsWhere)