Пример #1
0
 /**
  * Add order to query
  * @param JBDatabaseQuery $select
  * @param array           $order
  * @param string          $itemType
  */
 protected function _addOrder(JBDatabaseQuery $select, $order, $itemType)
 {
     $select->order('tItem.priority DESC');
     if (!empty($order) && is_array($order)) {
         $orders = $order;
         if (isset($order['field'])) {
             $orders = array($order);
         }
         foreach ($orders as $order) {
             $order = $this->app->data->create($order);
             $reverse = $order->get('reverse');
             $orderParam = $order->get('order');
             if (!empty($reverse)) {
                 if (is_array($reverse) && isset($reverse[0])) {
                     $dir = $reverse[0] == 1 ? 'DESC' : 'ASC';
                 } else {
                     $dir = $reverse == 1 ? 'DESC' : 'ASC';
                 }
             } else {
                 if (!empty($orderParam)) {
                     $orderParam = trim(strtoupper($orderParam));
                     $dir = $orderParam == 'DESC' ? 'DESC' : 'ASC';
                 } else {
                     $dir = 'ASC';
                 }
             }
             if (!in_array($order->get('mode'), array('s', 'n', 'd'), true)) {
                 $order->set('mode', 's');
             }
             $field = $order->get('field');
             if ($field == 'corename') {
                 $select->order('tItem.name ' . $dir);
             } else {
                 if ($field == 'corealias') {
                     $select->order('tItem.alias ' . $dir);
                 } else {
                     if ($field == 'corecreated') {
                         $select->order('tItem.created ' . $dir);
                     } else {
                         if ($field == 'corehits') {
                             $select->order('tItem.hits ' . $dir);
                         } else {
                             if ($field == 'coremodified') {
                                 $select->order('tItem.modified ' . $dir);
                             } else {
                                 if ($field == 'corepublish_down') {
                                     $select->order('tItem.publish_down ' . $dir);
                                 } else {
                                     if ($field == 'corepublish_up') {
                                         $select->order('tItem.publish_up ' . $dir);
                                     } else {
                                         if ($field == 'coreauthor') {
                                             $select->leftJoin('#__users AS tJoomlaUsers ON tItem.created_by = tJoomlaUsers.id')->order('tJoomlaUsers.name ' . $dir);
                                         } else {
                                             if ($field == 'random') {
                                                 $select->order('RAND()');
                                             } elseif (strpos($field, '__')) {
                                                 list($elementId, $id) = explode('__', $field);
                                                 $select->leftJoin(ZOO_TABLE_JBZOO_SKU . '  AS tSku ON tSku.item_id = tItem.id')->where('tSku.element_id = ?', $elementId)->where('tSku.param_id = ?', $id)->where('tSku.variant = \'-1\'')->order('tSku.value_' . $order->get('mode') . ' ' . $dir);
                                             } else {
                                                 $fieldName = $this->_jbtables->getFieldName($field, $order->get('mode'));
                                                 $columns = $this->_jbtables->getFields($this->_jbtables->getIndexTable($itemType));
                                                 if (in_array($fieldName, $columns, true)) {
                                                     $select->order('tIndex.' . $fieldName . ' ' . $dir)->where('tIndex.' . $fieldName . ' IS NOT NULL')->select($fieldName);
                                                 }
                                             }
                                         }
                                     }
                                 }
                             }
                         }
                     }
                 }
             }
         }
     }
 }