Merge "SkinFactory: Improve documentation and comments"
[lhc/web/wiklou.git] / includes / CategoryViewer.php
index 49818e6..22eb3d1 100644 (file)
@@ -54,6 +54,9 @@ class CategoryViewer extends ContextSource {
        /** @var array */
        protected $nextPage;
 
+       /** @var array */
+       protected $prevPage;
+
        /** @var array */
        protected $flip;
 
@@ -288,6 +291,12 @@ class CategoryViewer extends ContextSource {
                        '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 ) {
@@ -344,6 +353,9 @@ class CategoryViewer extends ContextSource {
                                        $this->nextPage[$type] = $humanSortkey;
                                        break;
                                }
+                               if ( $count == $this->limit ) {
+                                       $this->prevPage[$type] = $humanSortkey;
+                               }
 
                                if ( $title->getNamespace() == NS_CATEGORY ) {
                                        $cat = Category::newFromRow( $row, $title );
@@ -458,7 +470,17 @@ class CategoryViewer extends ContextSource {
         */
        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 )
                ) {
@@ -707,7 +729,10 @@ class CategoryViewer extends ContextSource {
                        // to refresh the incorrect category table entry -- which should be
                        // quick due to the small number of entries.
                        $totalcnt = $rescnt;
-                       $this->cat->refreshCounts();
+                       $category = $this->cat;
+                       wfGetDB( DB_MASTER )->onTransactionIdle( function () use ( $category ) {
+                               $category->refreshCounts();
+                       } );
                } else {
                        // Case 3: hopeless.  Don't give a total count at all.
                        // Messages: category-subcat-count-limited, category-article-count-limited,