MediaWiki  1.34.0
SpecialGoToInterwiki.php
Go to the documentation of this file.
1 <?php
37  public function __construct( $name = 'GoToInterwiki' ) {
38  parent::__construct( $name );
39  }
40 
41  public function execute( $par ) {
42  // Allow forcing an interstitial for local interwikis. This is used
43  // when a redirect page is reached via a special page which resolves
44  // to a user-dependent value (as defined by
45  // RedirectSpecialPage::personallyIdentifiableTarget). See the hack
46  // for avoiding T109724 in MediaWiki::performRequest (which also
47  // explains why we can't use a query parameter instead).
48  //
49  // HHVM dies when substr_compare is used on an empty string so ensure it's not.
50  $force = ( substr_compare( $par ?: 'x', 'force/', 0, 6 ) === 0 );
51  if ( $force ) {
52  $par = substr( $par, 6 );
53  }
54 
55  $this->setHeaders();
56  $target = Title::newFromText( $par );
57  // Disallow special pages as a precaution against
58  // possible redirect loops.
59  if ( !$target || $target->isSpecialPage() ) {
60  $this->getOutput()->setStatusCode( 404 );
61  $this->getOutput()->addWikiMsg( 'gotointerwiki-invalid' );
62  return;
63  }
64 
65  $url = $target->getFullURL();
66  if ( !$target->isExternal() || ( $target->isLocal() && !$force ) ) {
67  // Either a normal page, or a local interwiki.
68  // Just redirect.
69  $this->getOutput()->redirect( $url, '301' );
70  } else {
71  $this->getOutput()->addWikiMsg(
72  'gotointerwiki-external',
73  $url,
74  $target->getFullText()
75  );
76  }
77  }
78 
82  public function requiresWrite() {
83  return false;
84  }
85 
89  protected function getGroupName() {
90  return 'redirects';
91  }
92 }
SpecialGoToInterwiki\getGroupName
getGroupName()
Definition: SpecialGoToInterwiki.php:89
Title\newFromText
static newFromText( $text, $defaultNamespace=NS_MAIN)
Create a new Title from text, such as what one would find in a link.
Definition: Title.php:316
SpecialGoToInterwiki\__construct
__construct( $name='GoToInterwiki')
Definition: SpecialGoToInterwiki.php:37
SpecialGoToInterwiki\requiresWrite
requiresWrite()
Definition: SpecialGoToInterwiki.php:82
SpecialPage\getOutput
getOutput()
Get the OutputPage being used for this instance.
Definition: SpecialPage.php:719
UnlistedSpecialPage
Shortcut to construct a special page which is unlisted by default.
Definition: UnlistedSpecialPage.php:29
SpecialPage\setHeaders
setHeaders()
Sets headers - this should be called from the execute() method of all derived classes!
Definition: SpecialPage.php:537
SpecialGoToInterwiki\execute
execute( $par)
Default execute method Checks user permissions.
Definition: SpecialGoToInterwiki.php:41
SpecialGoToInterwiki
Landing page for non-local interwiki links.
Definition: SpecialGoToInterwiki.php:36