MediaWiki  master
SpecialSpecialpages.php
Go to the documentation of this file.
1 <?php
25 
32 
33  function __construct() {
34  parent::__construct( 'Specialpages' );
35  }
36 
37  function execute( $par ) {
38  $out = $this->getOutput();
39  $this->setHeaders();
40  $this->outputHeader();
41  $out->allowClickjacking();
42  $out->addModuleStyles( 'mediawiki.special' );
43 
44  $groups = $this->getPageGroups();
45 
46  if ( $groups === false ) {
47  return;
48  }
49 
50  $this->addHelpLink( 'Help:Special pages' );
51  $this->outputPageList( $groups );
52  }
53 
54  private function getPageGroups() {
55  $pages = MediaWikiServices::getInstance()->getSpecialPageFactory()->
56  getUsablePages( $this->getUser() );
57 
58  if ( $pages === [] ) {
59  # Yeah, that was pointless. Thanks for coming.
60  return false;
61  }
62 
64  $groups = [];
66  foreach ( $pages as $page ) {
67  if ( $page->isListed() ) {
68  $group = $page->getFinalGroupName();
69  if ( !isset( $groups[$group] ) ) {
70  $groups[$group] = [];
71  }
72  $groups[$group][$page->getDescription()] = [
73  $page->getPageTitle(),
74  $page->isRestricted(),
75  $page->isCached()
76  ];
77  }
78  }
79 
81  foreach ( $groups as $group => $sortedPages ) {
82  ksort( $groups[$group] );
83  }
84 
86  if ( array_key_exists( 'other', $groups ) ) {
87  $other = $groups['other'];
88  unset( $groups['other'] );
89  $groups['other'] = $other;
90  }
91 
92  return $groups;
93  }
94 
95  private function outputPageList( $groups ) {
96  $out = $this->getOutput();
97 
98  $includesRestrictedPages = false;
99  $includesCachedPages = false;
100 
101  foreach ( $groups as $group => $sortedPages ) {
102  if ( strpos( $group, '/' ) !== false ) {
103  list( $group, $subGroup ) = explode( '/', $group, 2 );
104  $out->wrapWikiMsg(
105  "<h3 class=\"mw-specialpagessubgroup\">$1</h3>\n",
106  "specialpages-group-$group-$subGroup"
107  );
108  } else {
109  $out->wrapWikiMsg(
110  "<h2 class=\"mw-specialpagesgroup\" id=\"mw-specialpagesgroup-$group\">$1</h2>\n",
111  "specialpages-group-$group"
112  );
113  }
114  $out->addHTML(
115  Html::openElement( 'div', [ 'class' => 'mw-specialpages-list' ] )
116  . '<ul>'
117  );
118  foreach ( $sortedPages as $desc => $specialpage ) {
119  list( $title, $restricted, $cached ) = $specialpage;
120 
121  $pageClasses = [];
122  if ( $cached ) {
123  $includesCachedPages = true;
124  $pageClasses[] = 'mw-specialpagecached';
125  }
126  if ( $restricted ) {
127  $includesRestrictedPages = true;
128  $pageClasses[] = 'mw-specialpagerestricted';
129  }
130 
131  $link = $this->getLinkRenderer()->makeKnownLink( $title, $desc );
132  $out->addHTML( Html::rawElement(
133  'li',
134  [ 'class' => implode( ' ', $pageClasses ) ],
135  $link
136  ) . "\n" );
137  }
138  $out->addHTML(
139  Html::closeElement( 'ul' ) .
140  Html::closeElement( 'div' )
141  );
142  }
143 
144  // add legend
145  $notes = [];
146  if ( $includesRestrictedPages ) {
147  $restricedMsg = $this->msg( 'specialpages-note-restricted' );
148  if ( !$restricedMsg->isDisabled() ) {
149  $notes[] = $restricedMsg->plain();
150  }
151  }
152  if ( $includesCachedPages ) {
153  $cachedMsg = $this->msg( 'specialpages-note-cached' );
154  if ( !$cachedMsg->isDisabled() ) {
155  $notes[] = $cachedMsg->plain();
156  }
157  }
158  if ( $notes !== [] ) {
159  $out->wrapWikiMsg(
160  "<h2 class=\"mw-specialpages-note-top\">$1</h2>", 'specialpages-note-top'
161  );
162  $out->wrapWikiTextAsInterface(
163  'mw-specialpages-notes',
164  implode( "\n", $notes )
165  );
166  }
167  }
168 }
Shortcut to construct a special page which is unlisted by default.
static openElement( $element, $attribs=[])
Identical to rawElement(), but has no third parameter and omits the end tag (and the self-closing &#39;/&#39;...
Definition: Html.php:251
static rawElement( $element, $attribs=[], $contents='')
Returns an HTML element in a string.
Definition: Html.php:209
addHelpLink( $to, $overrideBaseUrl=false)
Adds help link with an icon via page indicators.
getOutput()
Get the OutputPage being used for this instance.
msg( $key,... $params)
Wrapper around wfMessage that sets the current context.
A special page that lists special pages.
static closeElement( $element)
Returns "</$element>".
Definition: Html.php:315
setHeaders()
Sets headers - this should be called from the execute() method of all derived classes! ...
getUser()
Shortcut to get the User executing this instance.
outputHeader( $summaryMessageKey='')
Outputs a summary message on top of special pages Per default the message key is the canonical name o...