diff --git a/libraries/DBQbe.class.php b/libraries/DBQbe.class.php
index 1c8c27d2ec..a0cccacbd8 100644
--- a/libraries/DBQbe.class.php
+++ b/libraries/DBQbe.class.php
@@ -142,6 +142,13 @@ class PMA_DbQbe
* @var array
*/
private $_curSort;
+ /**
+ * Current criteria sort order
+ *
+ * @access private
+ * @var array
+ */
+ private $_curSortOrder;
/**
* Current criteria Show options
*
@@ -405,6 +412,40 @@ class PMA_DbQbe
return $html_output;
}
+ /**
+ * Provides select options list containing sort order
+ *
+ * @param integer $columnNumber Column Number (0,1,2) or more
+ * @param integer $sortOrder Sort order
+ *
+ * @return string HTML for select options
+ */
+ private function _getSortOrderSelectCell($columnNumber, $sortOrder)
+ {
+ $totalColumnCount = $this->_criteria_column_count;
+ if (! empty($this->_criteriaColumnInsert)) {
+ $totalColumnCount += count($this->_criteriaColumnInsert);
+ }
+ if (! empty($this->_criteriaColumnDelete)) {
+ $totalColumnCount -= count($this->_criteriaColumnDelete);
+ }
+
+ $html_output = '
';
+ $html_output .= '';
+ $html_output .= ' | ';
+ return $html_output;
+ }
+
/**
* Provides search form's row containing column select options
*
@@ -451,6 +492,11 @@ class PMA_DbQbe
return $html_output;
}
+ /**
+ * Provides search form's row containing column aliases
+ *
+ * @return string HTML for search table's row
+ */
private function _getColumnAliasRow()
{
$html_output = '';
@@ -537,26 +583,23 @@ class PMA_DbQbe
) {
$_REQUEST['criteriaSort'][$colInd] = '';
} //end if
- // Set asc_selected
- if (isset($_REQUEST['criteriaSort'][$colInd])
- && $_REQUEST['criteriaSort'][$colInd] == 'ASC'
- ) {
+
+ $asc_selected = ''; $desc_selected = '';
+ if (isset($_REQUEST['criteriaSort'][$colInd])) {
$this->_curSort[$new_column_count]
= $_REQUEST['criteriaSort'][$colInd];
- $asc_selected = ' selected="selected"';
+ // Set asc_selected
+ if ($_REQUEST['criteriaSort'][$colInd] == 'ASC') {
+ $asc_selected = ' selected="selected"';
+ } // end if
+ // Set desc selected
+ if ($_REQUEST['criteriaSort'][$colInd] == 'DESC') {
+ $desc_selected = ' selected="selected"';
+ } // end if
} else {
- $asc_selected = '';
- } // end if
- // Set desc selected
- if (isset($_REQUEST['criteriaSort'][$colInd])
- && $_REQUEST['criteriaSort'][$colInd] == 'DESC'
- ) {
- $this->_curSort[$new_column_count]
- = $_REQUEST['criteriaSort'][$colInd];
- $desc_selected = ' selected="selected"';
- } else {
- $desc_selected = '';
- } // end if
+ $this->_curSort[$new_column_count] = '';
+ }
+
$html_output .= $this->_getSortSelectCell(
$new_column_count, $asc_selected, $desc_selected
);
@@ -566,6 +609,55 @@ class PMA_DbQbe
return $html_output;
}
+ /**
+ * Provides search form's row containing sort order
+ *
+ * @return string HTML for search table's row
+ */
+ private function _getSortOrder()
+ {
+ $html_output = '
';
+ $html_output .= '| ' . __('Sort order:') . ' | ';
+ $new_column_count = 0;
+
+ for (
+ $colInd = 0;
+ $colInd < $this->_criteria_column_count;
+ $colInd++
+ ) {
+ if (! empty($this->_criteriaColumnInsert)
+ && isset($this->_criteriaColumnInsert[$colInd])
+ && $this->_criteriaColumnInsert[$colInd] == 'on'
+ ) {
+ $html_output .= $this->_getSortOrderSelectCell(
+ $new_column_count, null
+ );
+ $new_column_count++;
+ } // end if
+
+ if (! empty($this->_criteriaColumnDelete)
+ && isset($this->_criteriaColumnDelete[$colInd])
+ && $this->_criteriaColumnDelete[$colInd] == 'on'
+ ) {
+ continue;
+ }
+
+ $sortOrder = null;
+ if (! empty($_REQUEST['criteriaSortOrder'][$colInd])) {
+ $sortOrder
+ = $this->_curSortOrder[$new_column_count]
+ = $_REQUEST['criteriaSortOrder'][$colInd];
+ }
+
+ $html_output .= $this->_getSortOrderSelectCell(
+ $new_column_count, $sortOrder
+ );
+ $new_column_count++;
+ } // end for
+ $html_output .= '
';
+ return $html_output;
+ }
+
/**
* Provides search form's row containing SHOW checkboxes
*
@@ -1157,6 +1249,15 @@ class PMA_DbQbe
$orderby_clause = '';
$orderby_clauses = array();
+ // Create copy of instance variables
+ $field = $this->_curField;
+ $sort = $this->_curSort;
+ $sortOrder = $this->_curSortOrder;
+ if (count($field) == count($sort) && count($field) == count($sortOrder)) {
+ // Sort all three arrays based on sort order
+ array_multisort($sortOrder, $sort, $field);
+ }
+
for (
$column_index = 0;
$column_index < $this->_criteria_column_count;
@@ -1165,19 +1266,19 @@ class PMA_DbQbe
// if all columns are chosen with * selector,
// then sorting isn't available
// Fix for Bug #570698
- if (empty($this->_curField[$column_index])
- && empty($this->_curSort[$column_index])
+ if (empty($field[$column_index])
+ && empty($sort[$column_index])
) {
continue;
}
- if (/*overload*/mb_substr($this->_curField[$column_index], -2) == '.*') {
+ if (/*overload*/mb_substr($field[$column_index], -2) == '.*') {
continue;
}
- if (! empty($this->_curSort[$column_index])) {
- $orderby_clauses[] = $this->_curField[$column_index] . ' '
- . $this->_curSort[$column_index];
+ if (! empty($sort[$column_index])) {
+ $orderby_clauses[] = $field[$column_index] . ' '
+ . $sort[$column_index];
}
} // end for
if ($orderby_clauses) {
@@ -1609,6 +1710,7 @@ class PMA_DbQbe
$html_output .= $this->_getColumnAliasRow();
$html_output .= $this->_getShowRow();
$html_output .= $this->_getSortRow();
+ $html_output .= $this->_getSortOrder();
$html_output .= $this->_getCriteriaInputboxRow();
$html_output .= $this->_getInsDelAndOrCriteriaRows();
$html_output .= $this->_getModifyColumnsRow();