MediaWiki  1.23.13
SpecialWhatlinkshere.php
Go to the documentation of this file.
1 <?php
31  protected $opts;
32 
33  protected $selfTitle;
34 
36  protected $target;
37 
38  protected $limits = array( 20, 50, 100, 250, 500 );
39 
40  public function __construct() {
41  parent::__construct( 'Whatlinkshere' );
42  }
43 
44  function execute( $par ) {
45  global $wgQueryPageDefaultLimit;
46  $out = $this->getOutput();
47 
48  $this->setHeaders();
49  $this->outputHeader();
50 
51  $opts = new FormOptions();
52 
53  $opts->add( 'target', '' );
54  $opts->add( 'namespace', '', FormOptions::INTNULL );
55  $opts->add( 'limit', $wgQueryPageDefaultLimit );
56  $opts->add( 'from', 0 );
57  $opts->add( 'back', 0 );
58  $opts->add( 'hideredirs', false );
59  $opts->add( 'hidetrans', false );
60  $opts->add( 'hidelinks', false );
61  $opts->add( 'hideimages', false );
62 
64  $opts->validateIntBounds( 'limit', 0, 5000 );
65 
66  // Give precedence to subpage syntax
67  if ( isset( $par ) ) {
68  $opts->setValue( 'target', $par );
69  }
70 
71  // Bind to member variable
72  $this->opts = $opts;
73 
74  $this->target = Title::newFromURL( $opts->getValue( 'target' ) );
75  if ( !$this->target ) {
76  $out->addHTML( $this->whatlinkshereForm() );
77 
78  return;
79  }
80 
81  $this->getSkin()->setRelevantTitle( $this->target );
82 
83  $this->selfTitle = $this->getPageTitle( $this->target->getPrefixedDBkey() );
84 
85  $out->setPageTitle( $this->msg( 'whatlinkshere-title', $this->target->getPrefixedText() ) );
86  $out->addBacklinkSubtitle( $this->target );
87  $this->showIndirectLinks(
88  0,
89  $this->target,
90  $opts->getValue( 'limit' ),
91  $opts->getValue( 'from' ),
92  $opts->getValue( 'back' )
93  );
94  }
95 
103  function showIndirectLinks( $level, $target, $limit, $from = 0, $back = 0 ) {
104  global $wgMaxRedirectLinksRetrieved;
105  $out = $this->getOutput();
106  $dbr = wfGetDB( DB_SLAVE );
107  $options = array();
108 
109  $hidelinks = $this->opts->getValue( 'hidelinks' );
110  $hideredirs = $this->opts->getValue( 'hideredirs' );
111  $hidetrans = $this->opts->getValue( 'hidetrans' );
112  $hideimages = $target->getNamespace() != NS_FILE || $this->opts->getValue( 'hideimages' );
113 
114  $fetchlinks = ( !$hidelinks || !$hideredirs );
115 
116  // Make the query
117  $plConds = array(
118  'page_id=pl_from',
119  'pl_namespace' => $target->getNamespace(),
120  'pl_title' => $target->getDBkey(),
121  );
122  if ( $hideredirs ) {
123  $plConds['rd_from'] = null;
124  } elseif ( $hidelinks ) {
125  $plConds[] = 'rd_from is NOT NULL';
126  }
127 
128  $tlConds = array(
129  'page_id=tl_from',
130  'tl_namespace' => $target->getNamespace(),
131  'tl_title' => $target->getDBkey(),
132  );
133 
134  $ilConds = array(
135  'page_id=il_from',
136  'il_to' => $target->getDBkey(),
137  );
138 
139  $namespace = $this->opts->getValue( 'namespace' );
140  if ( is_int( $namespace ) ) {
141  $plConds['page_namespace'] = $namespace;
142  $tlConds['page_namespace'] = $namespace;
143  $ilConds['page_namespace'] = $namespace;
144  }
145 
146  if ( $from ) {
147  $tlConds[] = "tl_from >= $from";
148  $plConds[] = "pl_from >= $from";
149  $ilConds[] = "il_from >= $from";
150  }
151 
152  // Read an extra row as an at-end check
153  $queryLimit = $limit + 1;
154 
155  $options['LIMIT'] = $queryLimit;
156  $fields = array( 'page_id', 'page_namespace', 'page_title', 'rd_from' );
157 
158  $joinConds = array( 'redirect' => array( 'LEFT JOIN', array(
159  'rd_from = page_id',
160  'rd_namespace' => $target->getNamespace(),
161  'rd_title' => $target->getDBkey(),
162  'rd_interwiki = ' . $dbr->addQuotes( '' ) . ' OR rd_interwiki IS NULL'
163  ) ) );
164 
165  if ( $fetchlinks ) {
166  $options['ORDER BY'] = 'pl_from';
167  $plRes = $dbr->select( array( 'pagelinks', 'page', 'redirect' ), $fields,
168  $plConds, __METHOD__, $options,
169  $joinConds
170  );
171  }
172 
173  if ( !$hidetrans ) {
174  $options['ORDER BY'] = 'tl_from';
175  $tlRes = $dbr->select( array( 'templatelinks', 'page', 'redirect' ), $fields,
176  $tlConds, __METHOD__, $options,
177  $joinConds
178  );
179  }
180 
181  if ( !$hideimages ) {
182  $options['ORDER BY'] = 'il_from';
183  $ilRes = $dbr->select( array( 'imagelinks', 'page', 'redirect' ), $fields,
184  $ilConds, __METHOD__, $options,
185  $joinConds
186  );
187  }
188 
189  if ( ( !$fetchlinks || !$plRes->numRows() )
190  && ( $hidetrans || !$tlRes->numRows() )
191  && ( $hideimages || !$ilRes->numRows() )
192  ) {
193  if ( 0 == $level ) {
194  if ( !$this->including() ) {
195  $out->addHTML( $this->whatlinkshereForm() );
196 
197  // Show filters only if there are links
198  if ( $hidelinks || $hidetrans || $hideredirs || $hideimages ) {
199  $out->addHTML( $this->getFilterPanel() );
200  }
201  $errMsg = is_int( $namespace ) ? 'nolinkshere-ns' : 'nolinkshere';
202  $out->addWikiMsg( $errMsg, $this->target->getPrefixedText() );
203  }
204  }
205 
206  return;
207  }
208 
209  // Read the rows into an array and remove duplicates
210  // templatelinks comes second so that the templatelinks row overwrites the
211  // pagelinks row, so we get (inclusion) rather than nothing
212  if ( $fetchlinks ) {
213  foreach ( $plRes as $row ) {
214  $row->is_template = 0;
215  $row->is_image = 0;
216  $rows[$row->page_id] = $row;
217  }
218  }
219  if ( !$hidetrans ) {
220  foreach ( $tlRes as $row ) {
221  $row->is_template = 1;
222  $row->is_image = 0;
223  $rows[$row->page_id] = $row;
224  }
225  }
226  if ( !$hideimages ) {
227  foreach ( $ilRes as $row ) {
228  $row->is_template = 0;
229  $row->is_image = 1;
230  $rows[$row->page_id] = $row;
231  }
232  }
233 
234  // Sort by key and then change the keys to 0-based indices
235  ksort( $rows );
236  $rows = array_values( $rows );
237 
238  $numRows = count( $rows );
239 
240  // Work out the start and end IDs, for prev/next links
241  if ( $numRows > $limit ) {
242  // More rows available after these ones
243  // Get the ID from the last row in the result set
244  $nextId = $rows[$limit]->page_id;
245  // Remove undisplayed rows
246  $rows = array_slice( $rows, 0, $limit );
247  } else {
248  // No more rows after
249  $nextId = false;
250  }
251  $prevId = $from;
252 
253  if ( $level == 0 ) {
254  if ( !$this->including() ) {
255  $out->addHTML( $this->whatlinkshereForm() );
256  $out->addHTML( $this->getFilterPanel() );
257  $out->addWikiMsg( 'linkshere', $this->target->getPrefixedText() );
258 
259  $prevnext = $this->getPrevNext( $prevId, $nextId );
260  $out->addHTML( $prevnext );
261  }
262  }
263  $out->addHTML( $this->listStart( $level ) );
264  foreach ( $rows as $row ) {
265  $nt = Title::makeTitle( $row->page_namespace, $row->page_title );
266 
267  if ( $row->rd_from && $level < 2 ) {
268  $out->addHTML( $this->listItem( $row, $nt, true ) );
269  $this->showIndirectLinks( $level + 1, $nt, $wgMaxRedirectLinksRetrieved );
270  $out->addHTML( Xml::closeElement( 'li' ) );
271  } else {
272  $out->addHTML( $this->listItem( $row, $nt ) );
273  }
274  }
275 
276  $out->addHTML( $this->listEnd() );
277 
278  if ( $level == 0 ) {
279  if ( !$this->including() ) {
280  $out->addHTML( $prevnext );
281  }
282  }
283  }
284 
285  protected function listStart( $level ) {
286  return Xml::openElement( 'ul', ( $level ? array() : array( 'id' => 'mw-whatlinkshere-list' ) ) );
287  }
288 
289  protected function listItem( $row, $nt, $notClose = false ) {
290  $dirmark = $this->getLanguage()->getDirMark();
291 
292  # local message cache
293  static $msgcache = null;
294  if ( $msgcache === null ) {
295  static $msgs = array( 'isredirect', 'istemplate', 'semicolon-separator',
296  'whatlinkshere-links', 'isimage' );
297  $msgcache = array();
298  foreach ( $msgs as $msg ) {
299  $msgcache[$msg] = $this->msg( $msg )->escaped();
300  }
301  }
302 
303  if ( $row->rd_from ) {
304  $query = array( 'redirect' => 'no' );
305  } else {
306  $query = array();
307  }
308 
310  $nt,
311  null,
312  array(),
313  $query
314  );
315 
316  // Display properties (redirect or template)
317  $propsText = '';
318  $props = array();
319  if ( $row->rd_from ) {
320  $props[] = $msgcache['isredirect'];
321  }
322  if ( $row->is_template ) {
323  $props[] = $msgcache['istemplate'];
324  }
325  if ( $row->is_image ) {
326  $props[] = $msgcache['isimage'];
327  }
328 
329  if ( count( $props ) ) {
330  $propsText = $this->msg( 'parentheses' )
331  ->rawParams( implode( $msgcache['semicolon-separator'], $props ) )->escaped();
332  }
333 
334  # Space for utilities links, with a what-links-here link provided
335  $wlhLink = $this->wlhLink( $nt, $msgcache['whatlinkshere-links'] );
336  $wlh = Xml::wrapClass(
337  $this->msg( 'parentheses' )->rawParams( $wlhLink )->escaped(),
338  'mw-whatlinkshere-tools'
339  );
340 
341  return $notClose ?
342  Xml::openElement( 'li' ) . "$link $propsText $dirmark $wlh\n" :
343  Xml::tags( 'li', null, "$link $propsText $dirmark $wlh" ) . "\n";
344  }
345 
346  protected function listEnd() {
347  return Xml::closeElement( 'ul' );
348  }
349 
350  protected function wlhLink( Title $target, $text ) {
351  static $title = null;
352  if ( $title === null ) {
353  $title = $this->getPageTitle();
354  }
355 
356  return Linker::linkKnown(
357  $title,
358  $text,
359  array(),
360  array( 'target' => $target->getPrefixedText() )
361  );
362  }
363 
364  function makeSelfLink( $text, $query ) {
365  return Linker::linkKnown(
366  $this->selfTitle,
367  $text,
368  array(),
369  $query
370  );
371  }
372 
373  function getPrevNext( $prevId, $nextId ) {
374  $currentLimit = $this->opts->getValue( 'limit' );
375  $prev = $this->msg( 'whatlinkshere-prev' )->numParams( $currentLimit )->escaped();
376  $next = $this->msg( 'whatlinkshere-next' )->numParams( $currentLimit )->escaped();
377 
378  $changed = $this->opts->getChangedValues();
379  unset( $changed['target'] ); // Already in the request title
380 
381  if ( 0 != $prevId ) {
382  $overrides = array( 'from' => $this->opts->getValue( 'back' ) );
383  $prev = $this->makeSelfLink( $prev, array_merge( $changed, $overrides ) );
384  }
385  if ( 0 != $nextId ) {
386  $overrides = array( 'from' => $nextId, 'back' => $prevId );
387  $next = $this->makeSelfLink( $next, array_merge( $changed, $overrides ) );
388  }
389 
390  $limitLinks = array();
391  $lang = $this->getLanguage();
392  foreach ( $this->limits as $limit ) {
393  $prettyLimit = htmlspecialchars( $lang->formatNum( $limit ) );
394  $overrides = array( 'limit' => $limit );
395  $limitLinks[] = $this->makeSelfLink( $prettyLimit, array_merge( $changed, $overrides ) );
396  }
397 
398  $nums = $lang->pipeList( $limitLinks );
399 
400  return $this->msg( 'viewprevnext' )->rawParams( $prev, $next, $nums )->escaped();
401  }
402 
403  function whatlinkshereForm() {
404  global $wgScript;
405 
406  // We get nicer value from the title object
407  $this->opts->consumeValue( 'target' );
408  // Reset these for new requests
409  $this->opts->consumeValues( array( 'back', 'from' ) );
410 
411  $target = $this->target ? $this->target->getPrefixedText() : '';
412  $namespace = $this->opts->consumeValue( 'namespace' );
413 
414  # Build up the form
415  $f = Xml::openElement( 'form', array( 'action' => $wgScript ) );
416 
417  # Values that should not be forgotten
418  $f .= Html::hidden( 'title', $this->getPageTitle()->getPrefixedText() );
419  foreach ( $this->opts->getUnconsumedValues() as $name => $value ) {
420  $f .= Html::hidden( $name, $value );
421  }
422 
423  $f .= Xml::fieldset( $this->msg( 'whatlinkshere' )->text() );
424 
425  # Target input
426  $f .= Xml::inputLabel( $this->msg( 'whatlinkshere-page' )->text(), 'target',
427  'mw-whatlinkshere-target', 40, $target );
428 
429  $f .= ' ';
430 
431  # Namespace selector
433  array(
434  'selected' => $namespace,
435  'all' => '',
436  'label' => $this->msg( 'namespace' )->text()
437  ), array(
438  'name' => 'namespace',
439  'id' => 'namespace',
440  'class' => 'namespaceselector',
441  )
442  );
443 
444  $f .= ' ';
445 
446  # Submit
447  $f .= Xml::submitButton( $this->msg( 'allpagessubmit' )->text() );
448 
449  # Close
450  $f .= Xml::closeElement( 'fieldset' ) . Xml::closeElement( 'form' ) . "\n";
451 
452  return $f;
453  }
454 
460  function getFilterPanel() {
461  $show = $this->msg( 'show' )->escaped();
462  $hide = $this->msg( 'hide' )->escaped();
463 
464  $changed = $this->opts->getChangedValues();
465  unset( $changed['target'] ); // Already in the request title
466 
467  $links = array();
468  $types = array( 'hidetrans', 'hidelinks', 'hideredirs' );
469  if ( $this->target->getNamespace() == NS_FILE ) {
470  $types[] = 'hideimages';
471  }
472 
473  // Combined message keys: 'whatlinkshere-hideredirs', 'whatlinkshere-hidetrans',
474  // 'whatlinkshere-hidelinks', 'whatlinkshere-hideimages'
475  // To be sure they will be found by grep
476  foreach ( $types as $type ) {
477  $chosen = $this->opts->getValue( $type );
478  $msg = $chosen ? $show : $hide;
479  $overrides = array( $type => !$chosen );
480  $links[] = $this->msg( "whatlinkshere-{$type}" )->rawParams(
481  $this->makeSelfLink( $msg, array_merge( $changed, $overrides ) ) )->escaped();
482  }
483 
484  return Xml::fieldset(
485  $this->msg( 'whatlinkshere-filters' )->text(),
486  $this->getLanguage()->pipeList( $links )
487  );
488  }
489 
490  protected function getGroupName() {
491  return 'pagetools';
492  }
493 }
SpecialPage\getPageTitle
getPageTitle( $subpage=false)
Get a self-referential title object.
Definition: SpecialPage.php:488
Title\makeTitle
static & makeTitle( $ns, $title, $fragment='', $interwiki='')
Create a new Title from a namespace index and a DB key.
Definition: Title.php:398
SpecialWhatLinksHere\__construct
__construct()
Definition: SpecialWhatlinkshere.php:38
SpecialWhatLinksHere\$limits
$limits
Definition: SpecialWhatlinkshere.php:36
php
skin txt MediaWiki includes four core it has been set as the default in MediaWiki since the replacing Monobook it had been been the default skin since before being replaced by Vector largely rewritten in while keeping its appearance Several legacy skins were removed in the as the burden of supporting them became too heavy to bear Those in etc for skin dependent CSS etc for skin dependent JavaScript These can also be customised on a per user by etc This feature has led to a wide variety of user styles becoming that gallery is a good place to ending in php
Definition: skin.txt:62
Xml\tags
static tags( $element, $attribs=null, $contents)
Same as Xml::element(), but does not escape contents.
Definition: Xml.php:131
SpecialWhatLinksHere\listEnd
listEnd()
Definition: SpecialWhatlinkshere.php:344
SpecialPage\getOutput
getOutput()
Get the OutputPage being used for this instance.
Definition: SpecialPage.php:535
FormOptions\getValue
getValue( $name)
Get the value for the given option name.
Definition: FormOptions.php:175
wfGetDB
& wfGetDB( $db, $groups=array(), $wiki=false)
Get a Database object.
Definition: GlobalFunctions.php:3706
text
design txt This is a brief overview of the new design More thorough and up to date information is available on the documentation wiki at etc Handles the details of getting and saving to the user table of the and dealing with sessions and cookies OutputPage Encapsulates the entire HTML page that will be sent in response to any server request It is used by calling its functions to add text
Definition: design.txt:12
$f
$f
Definition: UtfNormalTest2.php:38
FormOptions\INTNULL
const INTNULL
Integer type or null, maps to WebRequest::getIntOrNull() This is useful for the namespace selector.
Definition: FormOptions.php:54
$from
$from
Definition: importImages.php:90
Title\getPrefixedText
getPrefixedText()
Get the prefixed title with spaces.
Definition: Title.php:1369
NS_FILE
const NS_FILE
Definition: Defines.php:85
SpecialWhatLinksHere\listItem
listItem( $row, $nt, $notClose=false)
Definition: SpecialWhatlinkshere.php:287
$limit
if( $sleep) $limit
Definition: importImages.php:99
SpecialWhatLinksHere\whatlinkshereForm
whatlinkshereForm()
Definition: SpecialWhatlinkshere.php:401
SpecialPage\getSkin
getSkin()
Shortcut to get the skin being used for this instance.
Definition: SpecialPage.php:555
IncludableSpecialPage
Shortcut to construct an includable special page.
Definition: IncludableSpecialPage.php:29
FormOptions\validateIntBounds
validateIntBounds( $name, $min, $max)
Definition: FormOptions.php:245
Html\hidden
static hidden( $name, $value, $attribs=array())
Convenience function to produce an input element with type=hidden.
Definition: Html.php:665
SpecialPage\getLanguage
getLanguage()
Shortcut to get user's language.
Definition: SpecialPage.php:578
$link
set to $title object and return false for a match for latest after cache objects are set use the ContentHandler facility to handle CSS and JavaScript for highlighting & $link
Definition: hooks.txt:2154
FormOptions\fetchValuesFromRequest
fetchValuesFromRequest(WebRequest $r, $optionKeys=null)
Fetch values for all options (or selected options) from the given WebRequest, making them available f...
Definition: FormOptions.php:336
Xml\openElement
static openElement( $element, $attribs=null)
This opens an XML element.
Definition: Xml.php:109
Linker\linkKnown
static linkKnown( $target, $html=null, $customAttribs=array(), $query=array(), $options=array( 'known', 'noclasses'))
Identical to link(), except $options defaults to 'known'.
Definition: Linker.php:264
$dbr
$dbr
Definition: testCompression.php:48
FormOptions\add
add( $name, $default, $type=self::AUTO)
Add an option to be handled by this FormOptions instance.
Definition: FormOptions.php:78
Title\getDBkey
getDBkey()
Get the main part with underscores.
Definition: Title.php:857
$out
$out
Definition: UtfNormalGenerate.php:167
Title\getNamespace
getNamespace()
Get the namespace index, i.e.
Definition: Title.php:880
SpecialWhatLinksHere\getPrevNext
getPrevNext( $prevId, $nextId)
Definition: SpecialWhatlinkshere.php:371
SpecialWhatLinksHere\showIndirectLinks
showIndirectLinks( $level, $target, $limit, $from=0, $back=0)
Definition: SpecialWhatlinkshere.php:101
SpecialWhatLinksHere
Implements Special:Whatlinkshere.
Definition: SpecialWhatlinkshere.php:29
array
the array() calling protocol came about after MediaWiki 1.4rc1.
List of Api Query prop modules.
SpecialPage\setHeaders
setHeaders()
Sets headers - this should be called from the execute() method of all derived classes!
Definition: SpecialPage.php:352
Xml\inputLabel
static inputLabel( $label, $name, $id, $size=false, $value=false, $attribs=array())
Convenience function to build an HTML text input field with a label.
Definition: Xml.php:398
global
when a variable name is used in a it is silently declared as a new masking the global
Definition: design.txt:93
FormOptions\setValue
setValue( $name, $value, $force=false)
Use to set the value of an option.
Definition: FormOptions.php:158
$options
null means default in associative array with keys and values unescaped Should be merged with default with a value of false meaning to suppress the attribute in associative array with keys and values unescaped & $options
Definition: hooks.txt:1530
$title
presenting them properly to the user as errors is done by the caller $title
Definition: hooks.txt:1324
$name
Allows to change the fields on the form that will be generated $name
Definition: hooks.txt:336
$value
$value
Definition: styleTest.css.php:45
SpecialPage\msg
msg()
Wrapper around wfMessage that sets the current context.
Definition: SpecialPage.php:609
SpecialWhatLinksHere\execute
execute( $par)
Default execute method Checks user permissions, calls the function given in mFunction.
Definition: SpecialWhatlinkshere.php:42
SpecialPage\getRequest
getRequest()
Get the WebRequest being used for this instance.
Definition: SpecialPage.php:525
Title\newFromURL
static newFromURL( $url)
THIS IS NOT THE FUNCTION YOU WANT.
Definition: Title.php:241
SpecialWhatLinksHere\makeSelfLink
makeSelfLink( $text, $query)
Definition: SpecialWhatlinkshere.php:362
SpecialWhatLinksHere\$selfTitle
$selfTitle
Definition: SpecialWhatlinkshere.php:32
SpecialWhatLinksHere\$target
Title $target
Definition: SpecialWhatlinkshere.php:34
DB_SLAVE
const DB_SLAVE
Definition: Defines.php:55
Title
Represents a title within MediaWiki.
Definition: Title.php:35
SpecialWhatLinksHere\listStart
listStart( $level)
Definition: SpecialWhatlinkshere.php:283
Xml\closeElement
static closeElement( $element)
Shortcut to close an XML element.
Definition: Xml.php:118
as
This document is intended to provide useful advice for parties seeking to redistribute MediaWiki to end users It s targeted particularly at maintainers for Linux since it s been observed that distribution packages of MediaWiki often break We ve consistently had to recommend that users seeking support use official tarballs instead of their distribution s and this often solves whatever problem the user is having It would be nice if this could such as
Definition: distributors.txt:9
Html\namespaceSelector
static namespaceSelector(array $params=array(), array $selectAttribs=array())
Build a drop-down box for selecting a namespace.
Definition: Html.php:710
SpecialWhatLinksHere\getFilterPanel
getFilterPanel()
Create filter panel.
Definition: SpecialWhatlinkshere.php:458
Xml\submitButton
static submitButton( $value, $attribs=array())
Convenience function to build an HTML submit button.
Definition: Xml.php:463
FormOptions
Helper class to keep track of options when mixing links and form elements.
Definition: FormOptions.php:35
$query
return true to allow those checks to and false if checking is done use this to change the tables headers temp or archived zone change it to an object instance and return false override the list derivative used the name of the old file when set the default code will be skipped add a value to it if you want to add a cookie that have to vary cache options can modify $query
Definition: hooks.txt:1105
SpecialWhatLinksHere\wlhLink
wlhLink(Title $target, $text)
Definition: SpecialWhatlinkshere.php:348
Xml\wrapClass
static wrapClass( $text, $class, $tag='span', $attribs=array())
Shortcut to make a specific element with a class attribute.
Definition: Xml.php:282
SpecialWhatLinksHere\getGroupName
getGroupName()
Under which header this special page is listed in Special:SpecialPages See messages 'specialpages-gro...
Definition: SpecialWhatlinkshere.php:488
SpecialPage\outputHeader
outputHeader( $summaryMessageKey='')
Outputs a summary message on top of special pages Per default the message key is the canonical name o...
Definition: SpecialPage.php:443
SpecialPage\including
including( $x=null)
Whether the special page is being evaluated via transclusion.
Definition: SpecialPage.php:207
Xml\fieldset
static fieldset( $legend=false, $content=false, $attribs=array())
Shortcut for creating fieldsets.
Definition: Xml.php:563
SpecialWhatLinksHere\$opts
FormOptions $opts
Definition: SpecialWhatlinkshere.php:30
$changed
$changed
Definition: UtfNormalGenerate.php:130
$type
$type
Definition: testCompression.php:46