Merge "Fix off-by-one error in the "previous 200" link in category listings with...
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Thu, 24 Jul 2014 02:12:29 +0000 (02:12 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Thu, 24 Jul 2014 02:12:29 +0000 (02:12 +0000)
1  2 
includes/CategoryViewer.php

@@@ -54,6 -54,9 +54,9 @@@ class CategoryViewer extends ContextSou
        /** @var array */
        protected $nextPage;
  
+       /** @var array */
+       protected $prevPage;
        /** @var array */
        protected $flip;
  
                        'subcat' => null,
                        'file' => null,
                );
+               $this->prevPage = array(
+                       'page' => null,
+                       'subcat' => null,
+                       'file' => null,
+               );
                $this->flip = array( 'page' => false, 'subcat' => false, 'file' => false );
  
                foreach ( array( 'page', 'subcat', 'file' ) as $type ) {
                                        $this->nextPage[$type] = $humanSortkey;
                                        break;
                                }
+                               if ( $count == $this->limit ) {
+                                       $this->prevPage[$type] = $humanSortkey;
+                               }
  
                                if ( $title->getNamespace() == NS_CATEGORY ) {
                                        $cat = Category::newFromRow( $row, $title );
         */
        private function getSectionPagingLinks( $type ) {
                if ( isset( $this->until[$type] ) && $this->until[$type] !== null ) {
-                       return $this->pagingLinks( $this->nextPage[$type], $this->until[$type], $type );
+                       // The new value for the until parameter should be pointing to the first
+                       // result displayed on the page which is the second last result retrieved
+                       // from the database.The next link should have a from parameter pointing
+                       // to the until parameter of the current page.
+                       if ( $this->nextPage[$type] !== null ) {
+                               return $this->pagingLinks( $this->prevPage[$type], $this->until[$type], $type );
+                       } else {
+                               // If the nextPage variable is null, it means that we have reached the first page
+                               // and therefore the previous link should be disabled.
+                               return $this->pagingLinks( null, $this->until[$type], $type );
+                       }
                } elseif ( $this->nextPage[$type] !== null
                        || ( isset( $this->from[$type] ) && $this->from[$type] !== null )
                ) {
                        // quick due to the small number of entries.
                        $totalcnt = $rescnt;
                        $category = $this->cat;
 -                      wfGetDB( DB_MASTER )->onTransactionIdle( function() use ( $category ) {
 +                      wfGetDB( DB_MASTER )->onTransactionIdle( function () use ( $category ) {
                                $category->refreshCounts();
                        } );
                } else {