diff options
Diffstat (limited to 'includes/CategoryViewer.php')
-rw-r--r-- | includes/CategoryViewer.php | 85 |
1 files changed, 47 insertions, 38 deletions
diff --git a/includes/CategoryViewer.php b/includes/CategoryViewer.php index 3bb2bc9b..970adb53 100644 --- a/includes/CategoryViewer.php +++ b/includes/CategoryViewer.php @@ -71,11 +71,12 @@ class CategoryViewer extends ContextSource { * @since 1.19 $context is a second, required parameter * @param $title Title * @param $context IContextSource - * @param $from String - * @param $until String + * @param array $from An array with keys page, subcat, + * and file for offset of results of each section (since 1.17) + * @param array $until An array with 3 keys for until of each section (since 1.17) * @param $query Array */ - function __construct( $title, IContextSource $context, $from = '', $until = '', $query = array() ) { + function __construct( $title, IContextSource $context, $from = array(), $until = array(), $query = array() ) { global $wgCategoryPagingLimit; $this->title = $title; $this->setContext( $context ); @@ -173,7 +174,7 @@ class CategoryViewer extends ContextSource { /** * Add a subcategory to the internal lists, using a title object - * @deprecated since 1.17 kept for compatibility, please use addSubcategoryObject instead + * @deprecated since 1.17 kept for compatibility, use addSubcategoryObject instead */ function addSubcategory( Title $title, $sortkey, $pageLength ) { wfDeprecated( __METHOD__, '1.17' ); @@ -181,14 +182,14 @@ class CategoryViewer extends ContextSource { } /** - * Get the character to be used for sorting subcategories. - * If there's a link from Category:A to Category:B, the sortkey of the resulting - * entry in the categorylinks table is Category:A, not A, which it SHOULD be. - * Workaround: If sortkey == "Category:".$title, than use $title for sorting, - * else use sortkey... - * - * @param Title $title - * @param string $sortkey The human-readable sortkey (before transforming to icu or whatever). + * Get the character to be used for sorting subcategories. + * If there's a link from Category:A to Category:B, the sortkey of the resulting + * entry in the categorylinks table is Category:A, not A, which it SHOULD be. + * Workaround: If sortkey == "Category:".$title, than use $title for sorting, + * else use sortkey... + * + * @param Title $title + * @param string $sortkey The human-readable sortkey (before transforming to icu or whatever). * @return string */ function getSubcategorySortChar( $title, $sortkey ) { @@ -248,7 +249,7 @@ class CategoryViewer extends ContextSource { $link = Linker::link( $title ); if ( $isRedirect ) { // This seems kind of pointless given 'mw-redirect' class, - // but keeping for back-compatiability with user css. + // but keeping for back-compatibility with user css. $link = '<span class="redirect-in-category">' . $link . '</span>'; } $this->articles[] = $link; @@ -259,15 +260,15 @@ class CategoryViewer extends ContextSource { function finaliseCategoryState() { if ( $this->flip['subcat'] ) { - $this->children = array_reverse( $this->children ); + $this->children = array_reverse( $this->children ); $this->children_start_char = array_reverse( $this->children_start_char ); } if ( $this->flip['page'] ) { - $this->articles = array_reverse( $this->articles ); + $this->articles = array_reverse( $this->articles ); $this->articles_start_char = array_reverse( $this->articles_start_char ); } if ( !$this->showGallery && $this->flip['file'] ) { - $this->imgsNoGallery = array_reverse( $this->imgsNoGallery ); + $this->imgsNoGallery = array_reverse( $this->imgsNoGallery ); $this->imgsNoGallery_start_char = array_reverse( $this->imgsNoGallery_start_char ); } } @@ -287,10 +288,10 @@ class CategoryViewer extends ContextSource { # the collation in the database differs from the one # set in $wgCategoryCollation, pagination might go totally haywire. $extraConds = array( 'cl_type' => $type ); - if ( $this->from[$type] !== null ) { + if ( isset( $this->from[$type] ) && $this->from[$type] !== null ) { $extraConds[] = 'cl_sortkey >= ' . $dbr->addQuotes( $this->collation->getSortKey( $this->from[$type] ) ); - } elseif ( $this->until[$type] !== null ) { + } elseif ( isset( $this->until[$type] ) && $this->until[$type] !== null ) { $extraConds[] = 'cl_sortkey < ' . $dbr->addQuotes( $this->collation->getSortKey( $this->until[$type] ) ); $this->flip[$type] = true; @@ -302,7 +303,7 @@ class CategoryViewer extends ContextSource { 'page_is_redirect', 'cl_sortkey', 'cat_id', 'cat_title', 'cat_subcats', 'cat_pages', 'cat_files', 'cl_sortkey_prefix', 'cl_collation' ), - array_merge( array( 'cl_to' => $this->title->getDBkey() ), $extraConds ), + array_merge( array( 'cl_to' => $this->title->getDBkey() ), $extraConds ), __METHOD__, array( 'USE INDEX' => array( 'categorylinks' => 'cl_sortkey' ), @@ -310,8 +311,11 @@ class CategoryViewer extends ContextSource { 'ORDER BY' => $this->flip[$type] ? 'cl_sortkey DESC' : 'cl_sortkey', ), array( - 'categorylinks' => array( 'INNER JOIN', 'cl_from = page_id' ), - 'category' => array( 'LEFT JOIN', 'cat_title = page_title AND page_namespace = ' . NS_CATEGORY ) + 'categorylinks' => array( 'INNER JOIN', 'cl_from = page_id' ), + 'category' => array( 'LEFT JOIN', array( + 'cat_title = page_title', + 'page_namespace' => NS_CATEGORY + )) ) ); @@ -388,7 +392,7 @@ class CategoryViewer extends ContextSource { $r = ''; # @todo FIXME: Here and in the other two sections: we don't need to bother - # with this rigamarole if the entire category contents fit on one page + # with this rigmarole if the entire category contents fit on one page # and have already been retrieved. We can just use $rescnt in that # case and save a query and some logic. $dbcnt = $this->cat->getPageCount() - $this->cat->getSubcatCount() @@ -437,13 +441,13 @@ class CategoryViewer extends ContextSource { * Get the paging links for a section (subcats/pages/files), to go at the top and bottom * of the output. * - * @param $type String: 'page', 'subcat', or 'file' + * @param string $type 'page', 'subcat', or 'file' * @return String: HTML output, possibly empty if there are no other pages */ private function getSectionPagingLinks( $type ) { - if ( $this->until[$type] !== null ) { + if ( isset( $this->until[$type] ) && $this->until[$type] !== null ) { return $this->pagingLinks( $this->nextPage[$type], $this->until[$type], $type ); - } elseif ( $this->nextPage[$type] !== null || $this->from[$type] !== null ) { + } elseif ( $this->nextPage[$type] !== null || ( isset( $this->from[$type] ) && $this->from[$type] !== null ) ) { return $this->pagingLinks( $this->from[$type], $this->nextPage[$type], $type ); } else { return ''; @@ -469,7 +473,7 @@ class CategoryViewer extends ContextSource { */ function formatList( $articles, $articles_start_char, $cutoff = 6 ) { $list = ''; - if ( count ( $articles ) > $cutoff ) { + if ( count( $articles ) > $cutoff ) { $list = self::columnList( $articles, $articles_start_char ); } elseif ( count( $articles ) > 0 ) { // for short lists of articles in categories. @@ -478,7 +482,7 @@ class CategoryViewer extends ContextSource { $pageLang = $this->title->getPageLanguage(); $attribs = array( 'lang' => $pageLang->getCode(), 'dir' => $pageLang->getDir(), - 'class' => 'mw-content-'.$pageLang->getDir() ); + 'class' => 'mw-content-' . $pageLang->getDir() ); $list = Html::rawElement( 'div', $attribs, $list ); return $list; @@ -569,9 +573,9 @@ class CategoryViewer extends ContextSource { /** * Create paging links, as a helper method to getSectionPagingLinks(). * - * @param $first String The 'until' parameter for the generated URL - * @param $last String The 'from' parameter for the genererated URL - * @param $type String A prefix for parameters, 'page' or 'subcat' or + * @param string $first The 'until' parameter for the generated URL + * @param string $last The 'from' parameter for the generated URL + * @param string $type A prefix for parameters, 'page' or 'subcat' or * 'file' * @return String HTML */ @@ -604,7 +608,7 @@ class CategoryViewer extends ContextSource { ); } - return $this->msg('categoryviewer-pagedlinks')->rawParams($prevLink, $nextLink)->escaped(); + return $this->msg( 'categoryviewer-pagedlinks' )->rawParams( $prevLink, $nextLink )->escaped(); } /** @@ -612,7 +616,8 @@ class CategoryViewer extends ContextSource { * corresponds to the correct segment of the category. * * @param Title $title: The title (usually $this->title) - * @param String $section: Which section + * @param string $section: Which section + * @throws MWException * @return Title */ private function addFragmentToTitle( $title, $section ) { @@ -634,6 +639,7 @@ class CategoryViewer extends ContextSource { return Title::makeTitle( $title->getNamespace(), $title->getDBkey(), $fragment ); } + /** * What to do if the category table conflicts with the number of results * returned? This function says what. Each type is considered independently @@ -644,9 +650,9 @@ class CategoryViewer extends ContextSource { * 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' + * @param int $rescnt The number of items returned by our database query. + * @param int $dbcnt The number of items according to the category table. + * @param string $type 'subcat', 'article', or 'file' * @return String: A message giving the number of items, to output to HTML. */ private function getCountMessage( $rescnt, $dbcnt, $type ) { @@ -671,12 +677,15 @@ class CategoryViewer extends ContextSource { } $fromOrUntil = false; - if ( $this->from[$pagingType] !== null || $this->until[$pagingType] !== null ) { + if ( ( isset( $this->from[$pagingType] ) && $this->from[$pagingType] !== null ) || + ( isset( $this->until[$pagingType] ) && $this->until[$pagingType] !== null ) + ) { $fromOrUntil = true; } - if ( $dbcnt == $rescnt || ( ( $rescnt == $this->limit || $fromOrUntil ) - && $dbcnt > $rescnt ) ) { + if ( $dbcnt == $rescnt || + ( ( $rescnt == $this->limit || $fromOrUntil ) && $dbcnt > $rescnt ) + ) { # Case 1: seems sane. $totalcnt = $dbcnt; } elseif ( $rescnt < $this->limit && !$fromOrUntil ) { |