+ /**
+ * What to do if the category table conflicts with the number of results
+ * returned? This function says what. It works the same whether the
+ * things being counted are articles, subcategories, or files.
+ *
+ * Note for grepping: uses the messages category-article-count,
+ * category-article-count-limited, category-subcat-count,
+ * category-subcat-count-limited, category-file-count,
+ * category-file-count-limited.
+ *
+ * @param $rescnt Int: The number of items returned by our database query.
+ * @param $dbcnt Int: The number of items according to the category table.
+ * @param $type String: 'subcat', 'article', or 'file'
+ * @return String: A message giving the number of items, to output to HTML.
+ */
+ private function getCountMessage( $rescnt, $dbcnt, $type ) {
+ global $wgLang;
+ # There are three cases:
+ # 1) The category table figure seems sane. It might be wrong, but
+ # we can't do anything about it if we don't recalculate it on ev-
+ # ery category view.
+ # 2) The category table figure isn't sane, like it's smaller than the
+ # number of actual results, *but* the number of results is less
+ # than $this->limit and there's no offset. In this case we still
+ # know the right figure.
+ # 3) We have no idea.
+ $totalrescnt = count( $this->articles ) + count( $this->children ) +
+ ( $this->showGallery ? $this->gallery->count() : 0 );
+
+ if ( $dbcnt == $rescnt || ( ( $totalrescnt == $this->limit || $this->from
+ || $this->until ) && $dbcnt > $rescnt ) )
+ {
+ # Case 1: seems sane.
+ $totalcnt = $dbcnt;
+ } elseif ( $totalrescnt < $this->limit && !$this->from && !$this->until ) {
+ # Case 2: not sane, but salvageable. Use the number of results.
+ # Since there are fewer than 200, we can also take this opportunity
+ # to refresh the incorrect category table entry -- which should be
+ # quick due to the small number of entries.
+ $totalcnt = $rescnt;
+ $this->cat->refreshCounts();
+ } else {
+ # Case 3: hopeless. Don't give a total count at all.
+ return wfMsgExt( "category-$type-count-limited", 'parse',
+ $wgLang->formatNum( $rescnt ) );
+ }
+ return wfMsgExt(
+ "category-$type-count",
+ 'parse',
+ $wgLang->formatNum( $rescnt ),
+ $wgLang->formatNum( $totalcnt )
+ );
+ }
+}