MediaWiki REL1_31
SpecialWantedcategories.php
Go to the documentation of this file.
1<?php
33
34 function __construct( $name = 'Wantedcategories' ) {
35 parent::__construct( $name );
36 }
37
38 function getQueryInfo() {
39 return [
40 'tables' => [ 'categorylinks', 'page' ],
41 'fields' => [
42 'namespace' => NS_CATEGORY,
43 'title' => 'cl_to',
44 'value' => 'COUNT(*)'
45 ],
46 'conds' => [ 'page_title IS NULL' ],
47 'options' => [ 'GROUP BY' => 'cl_to' ],
48 'join_conds' => [ 'page' => [ 'LEFT JOIN',
49 [ 'page_title = cl_to',
50 'page_namespace' => NS_CATEGORY ] ] ]
51 ];
52 }
53
54 function preprocessResults( $db, $res ) {
55 parent::preprocessResults( $db, $res );
56
57 $this->currentCategoryCounts = [];
58
59 if ( !$res->numRows() || !$this->isCached() ) {
60 return;
61 }
62
63 // Fetch (hopefully) up-to-date numbers of pages in each category.
64 // This should be fast enough as we limit the list to a reasonable length.
65
66 $allCategories = [];
67 foreach ( $res as $row ) {
68 $allCategories[] = $row->title;
69 }
70
71 $categoryRes = $db->select(
72 'category',
73 [ 'cat_title', 'cat_pages' ],
74 [ 'cat_title' => $allCategories ],
75 __METHOD__
76 );
77 foreach ( $categoryRes as $row ) {
78 $this->currentCategoryCounts[$row->cat_title] = intval( $row->cat_pages );
79 }
80
81 // Back to start for display
82 $res->seek( 0 );
83 }
84
90 function formatResult( $skin, $result ) {
91 global $wgContLang;
92
93 $nt = Title::makeTitle( $result->namespace, $result->title );
94 $text = $wgContLang->convert( $nt->getText() );
95
96 if ( !$this->isCached() ) {
97 // We can assume the freshest data
98 $plink = $this->getLinkRenderer()->makeBrokenLink(
99 $nt,
100 $text
101 );
102 $nlinks = $this->msg( 'nmembers' )->numParams( $result->value )->escaped();
103 } else {
104 $plink = $this->getLinkRenderer()->makeLink( $nt, $text );
105
106 $currentValue = isset( $this->currentCategoryCounts[$result->title] )
107 ? $this->currentCategoryCounts[$result->title]
108 : 0;
109 $cachedValue = intval( $result->value ); // T76910
110
111 // If the category has been created or emptied since the list was refreshed, strike it
112 if ( $nt->isKnown() || $currentValue === 0 ) {
113 $plink = "<del>$plink</del>";
114 }
115
116 // Show the current number of category entries if it changed
117 if ( $currentValue !== $cachedValue ) {
118 $nlinks = $this->msg( 'nmemberschanged' )
119 ->numParams( $cachedValue, $currentValue )->escaped();
120 } else {
121 $nlinks = $this->msg( 'nmembers' )->numParams( $cachedValue )->escaped();
122 }
123 }
124
125 return $this->getLanguage()->specialList( $plink, $nlinks );
126 }
127
128 protected function getGroupName() {
129 return 'maintenance';
130 }
131}
isCached()
Whether or not the output of the page in question is retrieved from the database cache.
msg( $key)
Wrapper around wfMessage that sets the current context.
getLanguage()
Shortcut to get user's language.
A querypage to list the most wanted categories - implements Special:Wantedcategories.
preprocessResults( $db, $res)
Cache page existence for performance.
getQueryInfo()
Subclasses return an SQL query here, formatted as an array with the following keys: tables => Table(s...
getGroupName()
Under which header this special page is listed in Special:SpecialPages See messages 'specialpages-gro...
__construct( $name='Wantedcategories')
Class definition for a wanted query page like WantedPages, WantedTemplates, etc.
$res
Definition database.txt:21
this class mediates it Skin Encapsulates a look and feel for the wiki All of the functions that render HTML and make choices about how to render it are here and are called from various other places when and is meant to be subclassed with other skins that may override some of its functions The User object contains a reference to a and so rather than having a global skin object we just rely on the global User and get the skin with $wgUser and also has some character encoding functions and other locale stuff The current user interface language is instantiated as and the local content language as $wgContLang
Definition design.txt:57
const NS_CATEGORY
Definition Defines.php:88