jenkins-bot has submitted this change and it was merged.

Change subject: Add category count to Special:TrackingCategories
......................................................................


Add category count to Special:TrackingCategories

Add the category count to the core special page
Special:TrackingCategories to see at one view, if such categories
contains pages which maybe needs attention.
Depends on a hook addition in core.

Depends On: If195fb55dee1350a6de095892ce89e6565287cd9
Change-Id: If3815586c2a280b4e8958c13010c9f7436b8723d
---
M CategoryTree.hooks.php
M CategoryTreeFunctions.php
M extension.json
3 files changed, 118 insertions(+), 49 deletions(-)

Approvals:
  Florianschmidtwelzow: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/CategoryTree.hooks.php b/CategoryTree.hooks.php
index d5c05ce..45d3693 100644
--- a/CategoryTree.hooks.php
+++ b/CategoryTree.hooks.php
@@ -247,4 +247,55 @@
                $vars['wgCategoryTreePageCategoryOptions'] = 
$ct->getOptionsAsJsStructure();
                return true;
        }
+
+       /**
+        * Hook handler for the SpecialTrackingCategories::preprocess hook
+        * @param SpecialPage $specialPage SpecialTrackingCategories object
+        * @param array $trackingCategories [ 'msg' => Title, 'cats' => Title[] 
]
+        */
+       public static function onSpecialTrackingCategoriesPreprocess(
+               $specialPage, $trackingCategories
+       ) {
+               $categoryDbKeys = [];
+               foreach ( $trackingCategories as $catMsg => $data ) {
+                       foreach ( $data['cats'] as $catTitle ) {
+                               $categoryDbKeys[] = $catTitle->getDbKey();
+                       }
+               }
+               $categories = [];
+               if ( $categoryDbKeys ) {
+                       $dbr = wfGetDB( DB_REPLICA );
+                       $res = $dbr->select(
+                               'category',
+                               [ 'cat_id', 'cat_title', 'cat_pages', 
'cat_subcats', 'cat_files' ],
+                               [ 'cat_title' => array_unique( $categoryDbKeys 
) ],
+                               __METHOD__
+                       );
+                       foreach ( $res as $row ) {
+                               $categories[$row->cat_title] = 
Category::newFromRow( $row );
+                       }
+               }
+               $specialPage->categoryTreeCategories = $categories;
+       }
+
+       /**
+        * Hook handler for the SpecialTrackingCategories::generateCatLink hook
+        * @param SpecialPage $specialPage SpecialTrackingCategories object
+        * @param Title $catTitle Title object of the linked category
+        * @param string &$html Result html
+        */
+       public static function onSpecialTrackingCategoriesGenerateCatLink(
+               $specialPage, $catTitle, &$html
+       ) {
+               if ( !isset( $specialPage->categoryTreeCategories ) ) {
+                       return;
+               }
+
+               $cat = null;
+               if ( isset( 
$specialPage->categoryTreeCategories[$catTitle->getDbKey()] ) ) {
+                       $cat = 
$specialPage->categoryTreeCategories[$catTitle->getDbKey()];
+               }
+
+               $html .= CategoryTree::createCountString( 
$specialPage->getContext(), $cat, 0 );
+       }
 }
diff --git a/CategoryTreeFunctions.php b/CategoryTreeFunctions.php
index 48c6410..a321e3e 100644
--- a/CategoryTreeFunctions.php
+++ b/CategoryTreeFunctions.php
@@ -583,22 +583,14 @@
 
                $attr = [ 'class' => 'CategoryTreeBullet' ];
 
-               # Get counts, with conversion to integer so === works
-               # Note: $allCount is the total number of cat members,
-               # not the count of how many members are normal pages.
-               $allCount = $cat ? intval( $cat->getPageCount() ) : 0;
-               $subcatCount = $cat ? intval( $cat->getSubcatCount() ) : 0;
-               $fileCount = $cat ? intval( $cat->getFileCount() ) : 0;
-
                if ( $ns == NS_CATEGORY ) {
-
                        if ( $cat ) {
                                if ( $mode == CategoryTreeMode::CATEGORIES ) {
-                                       $count = $subcatCount;
+                                       $count = intval( $cat->getSubcatCount() 
);
                                } elseif ( $mode == CategoryTreeMode::PAGES ) {
-                                       $count = $allCount - $fileCount;
+                                       $count = intval( $cat->getPageCount() ) 
- intval( $cat->getFileCount() );
                                } else {
-                                       $count = $allCount;
+                                       $count = intval( $cat->getPageCount() );
                                }
                        }
                        if ( $count === 0 ) {
@@ -634,44 +626,7 @@
                        . $label . Xml::closeElement( 'a' );
 
                if ( $count !== false && $this->getOption( 'showcount' ) ) {
-                       $pages = $allCount - $subcatCount - $fileCount;
-
-                       global $wgContLang, $wgLang;
-                       $attr = [
-                               'title' => wfMessage( 
'categorytree-member-counts' )
-                                       ->numParams( $subcatCount, $pages , 
$fileCount, $allCount, $count )->text(),
-                               'dir' => $wgLang->getDir() # numbers and commas 
get messed up in a mixed dir env
-                       ];
-
-                       $s .= $wgContLang->getDirMark() . ' ';
-
-                       # Create a list of category members with only non-zero 
member counts
-                       $memberNums = [];
-                       if ( $subcatCount ) {
-                               $memberNums[] = wfMessage( 
'categorytree-num-categories' )
-                                       ->numParams( $subcatCount )->text();
-                       }
-                       if ( $pages ) {
-                               $memberNums[] = wfMessage( 
'categorytree-num-pages' )->numParams( $pages )->text();
-                       }
-                       if ( $fileCount ) {
-                               $memberNums[] = wfMessage( 
'categorytree-num-files' )
-                                       ->numParams( $fileCount )->text();
-                       }
-                       $memberNumsShort = $memberNums
-                               ? $wgLang->commaList( $memberNums )
-                               : wfMessage( 'categorytree-num-empty' )->text();
-
-                       # Only $5 is actually used in the default message.
-                       # Other arguments can be used in a customized message.
-                       $s .= Xml::tags(
-                               'span',
-                               $attr,
-                               wfMessage( 'categorytree-member-num' )
-                                       // Do not use numParams on params 1-4, 
as they are only used for customisation.
-                                       ->params( $subcatCount, $pages, 
$fileCount, $allCount, $memberNumsShort )
-                                       ->escaped()
-                       );
+                       $s .= CategoryTree::createCountString( 
RequestContext::getMain(), $cat, $count );
                }
 
                $s .= Xml::closeElement( 'div' );
@@ -712,6 +667,63 @@
        }
 
        /**
+        * Create a string which format the page, subcat and file counts of a 
category
+        * @param IContextSource $context
+        * @param Category|null $cat
+        * @param int $countMode
+        * @return string
+        */
+       public static function createCountString( IContextSource $context, 
$cat, $countMode ) {
+               global $wgContLang;
+
+               # Get counts, with conversion to integer so === works
+               # Note: $allCount is the total number of cat members,
+               # not the count of how many members are normal pages.
+               $allCount = $cat ? intval( $cat->getPageCount() ) : 0;
+               $subcatCount = $cat ? intval( $cat->getSubcatCount() ) : 0;
+               $fileCount = $cat ? intval( $cat->getFileCount() ) : 0;
+               $pages = $allCount - $subcatCount - $fileCount;
+
+               $attr = [
+                       'title' => $context->msg( 'categorytree-member-counts' )
+                               ->numParams( $subcatCount, $pages , $fileCount, 
$allCount, $countMode )->text(),
+                       'dir' => $context->getLanguage()->getDir() # numbers 
and commas get messed up in a mixed dir env
+               ];
+
+               $s = $wgContLang->getDirMark() . ' ';
+
+               # Create a list of category members with only non-zero member 
counts
+               $memberNums = [];
+               if ( $subcatCount ) {
+                       $memberNums[] = $context->msg( 
'categorytree-num-categories' )
+                               ->numParams( $subcatCount )->text();
+               }
+               if ( $pages ) {
+                       $memberNums[] = $context->msg( 'categorytree-num-pages' 
)->numParams( $pages )->text();
+               }
+               if ( $fileCount ) {
+                       $memberNums[] = $context->msg( 'categorytree-num-files' 
)
+                               ->numParams( $fileCount )->text();
+               }
+               $memberNumsShort = $memberNums
+                       ? $context->getLanguage()->commaList( $memberNums )
+                       : $context->msg( 'categorytree-num-empty' )->text();
+
+               # Only $5 is actually used in the default message.
+               # Other arguments can be used in a customized message.
+               $s .= Xml::tags(
+                       'span',
+                       $attr,
+                       $context->msg( 'categorytree-member-num' )
+                               // Do not use numParams on params 1-4, as they 
are only used for customisation.
+                               ->params( $subcatCount, $pages, $fileCount, 
$allCount, $memberNumsShort )
+                               ->escaped()
+               );
+
+               return $s;
+       }
+
+       /**
         * Creates a Title object from a user provided (and thus unsafe) string
         * @param $title string
         * @return null|Title
diff --git a/extension.json b/extension.json
index c8139bf..d713793 100644
--- a/extension.json
+++ b/extension.json
@@ -66,6 +66,12 @@
        "Hooks": {
                "ArticleFromTitle": [
                        "CategoryTreeHooks::articleFromTitle"
+               ],
+               "SpecialTrackingCategories::preprocess": [
+                       
"CategoryTreeHooks::onSpecialTrackingCategoriesPreprocess"
+               ],
+               "SpecialTrackingCategories::generateCatLink": [
+                       
"CategoryTreeHooks::onSpecialTrackingCategoriesGenerateCatLink"
                ]
        },
        "config": {

-- 
To view, visit https://gerrit.wikimedia.org/r/321225
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: If3815586c2a280b4e8958c13010c9f7436b8723d
Gerrit-PatchSet: 2
Gerrit-Project: mediawiki/extensions/CategoryTree
Gerrit-Branch: master
Gerrit-Owner: Umherirrender <umherirrender_de...@web.de>
Gerrit-Reviewer: Florianschmidtwelzow <florian.schmidt.stargatewis...@gmail.com>
Gerrit-Reviewer: Umherirrender <umherirrender_de...@web.de>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to