Merge "Improve sorting on SpecialWanted*-Pages"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Thu, 9 Mar 2017 00:25:46 +0000 (00:25 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Thu, 9 Mar 2017 00:25:46 +0000 (00:25 +0000)
includes/specialpage/QueryPage.php
includes/specialpage/WantedQueryPage.php

index 65e82e8..3b3ea26 100644 (file)
@@ -407,7 +407,7 @@ abstract class QueryPage extends SpecialPage {
                        $options = isset( $query['options'] ) ? (array)$query['options'] : [];
                        $join_conds = isset( $query['join_conds'] ) ? (array)$query['join_conds'] : [];
 
-                       if ( count( $order ) ) {
+                       if ( $order ) {
                                $options['ORDER BY'] = $order;
                        }
 
@@ -460,20 +460,28 @@ abstract class QueryPage extends SpecialPage {
                if ( $limit !== false ) {
                        $options['LIMIT'] = intval( $limit );
                }
+
                if ( $offset !== false ) {
                        $options['OFFSET'] = intval( $offset );
                }
-               if ( $this->sortDescending() ) {
-                       $options['ORDER BY'] = 'qc_value DESC';
-               } else {
-                       $options['ORDER BY'] = 'qc_value ASC';
+
+               $orderFields = $this->getOrderFields();
+               $order = [];
+               $DESC = $this->sortDescending() ? ' DESC' : '';
+               foreach ( $orderFields as $field ) {
+                       $order[] = "qc_${field}${DESC}";
+               }
+               if ( $order ) {
+                       $options['ORDER BY'] = $order;
                }
+
                return $dbr->select( 'querycache', [ 'qc_type',
                                'namespace' => 'qc_namespace',
                                'title' => 'qc_title',
                                'value' => 'qc_value' ],
                                [ 'qc_type' => $this->getName() ],
-                               __METHOD__, $options
+                               __METHOD__,
+                               $options
                );
        }
 
index 9d92cbd..7a18342 100644 (file)
@@ -119,4 +119,26 @@ abstract class WantedQueryPage extends QueryPage {
                $label = $this->msg( 'nlinks' )->numParams( $result->value )->escaped();
                return Linker::link( $wlh, $label );
        }
+
+       /**
+        * Order by title, overwrites QueryPage::getOrderFields
+        *
+        * @return array
+        */
+       function getOrderFields() {
+               return [ 'value DESC', 'namespace', 'title' ];
+       }
+
+       /**
+        * Do not order descending for all order fields.  We will use DESC only on one field, see
+        *  getOrderFields above. This overwrites sortDescending from QueryPage::getOrderFields().
+        *  Do NOT change this to true unless you remove the phrase DESC in getOrderFiels above.
+        *  If you do a database error will be thrown due to double adding DESC to query!
+        *
+        * @return bool
+        */
+       function sortDescending() {
+               return false;
+       }
+
 }