diff options
author | Tim Starling <tstarling@wikimedia.org> | 2020-06-25 12:33:46 +1000 |
---|---|---|
committer | James D. Forrester <jforrester@wikimedia.org> | 2020-06-25 11:31:45 +0100 |
commit | 63b0fa3590dccb716e7809b691b6f8ca54dfa0d1 (patch) | |
tree | bc88978eca1d68715f3011e2b8b4d0b58e6a1671 /opensearch_desc.php | |
parent | fddde4b5a69ae014923d89ced203c897744434bb (diff) | |
download | mediawikicore-63b0fa3590dccb716e7809b691b6f8ca54dfa0d1.tar.gz mediawikicore-63b0fa3590dccb716e7809b691b6f8ca54dfa0d1.zip |
In Web entry points, move file scope code into a main function
Avoid leaking local variables into the global scope by accident, by
moving the entry point code to a function.
In index.php, document the intentional $mediaWiki global so that
nobody removes it by accident.
Change-Id: Ie1a181ae3ebdda90cd2321f0c1b50e31fb0d586e
Diffstat (limited to 'opensearch_desc.php')
-rw-r--r-- | opensearch_desc.php | 162 |
1 files changed, 84 insertions, 78 deletions
diff --git a/opensearch_desc.php b/opensearch_desc.php index 3037ddc296ef..73bcd39ca565 100644 --- a/opensearch_desc.php +++ b/opensearch_desc.php @@ -34,89 +34,95 @@ define( 'MW_ENTRY_POINT', 'opensearch_desc' ); require_once __DIR__ . '/includes/WebStart.php'; -if ( $wgRequest->getVal( 'ctype' ) == 'application/xml' ) { - // Makes testing tweaks about a billion times easier - $ctype = 'application/xml'; -} else { - $ctype = 'application/opensearchdescription+xml'; -} +wfOpenSearchDescMain(); + +function wfOpenSearchDescMain() { + global $wgRequest, $wgFavicon, $wgOpenSearchTemplates; -$response = $wgRequest->response(); -$response->header( "Content-type: $ctype" ); - -// Set an Expires header so that CDN can cache it for a short time -// Short enough so that the sysadmin barely notices when $wgSitename is changed -$expiryTime = 600; # 10 minutes -$response->header( 'Expires: ' . gmdate( 'D, d M Y H:i:s', time() + $expiryTime ) . ' GMT' ); -$response->header( 'Cache-control: max-age=600' ); - -print '<?xml version="1.0"?>'; -print Xml::openElement( 'OpenSearchDescription', - [ - 'xmlns' => 'http://a9.com/-/spec/opensearch/1.1/', - 'xmlns:moz' => 'http://www.mozilla.org/2006/browser/search/' ] ); - -// The spec says the ShortName must be no longer than 16 characters, -// but 16 is *realllly* short. In practice, browsers don't appear to care -// when we give them a longer string, so we're no longer attempting to trim. -// -// Note: ShortName and the <link title=""> need to match; they are used as -// a key for identifying if the search engine has been added already, *and* -// as the display name presented to the end-user. -// -// Behavior seems about the same between Firefox and IE 7/8 here. -// 'Description' doesn't appear to be used by either. -$fullName = wfMessage( 'opensearch-desc' )->inContentLanguage()->text(); -print Xml::element( 'ShortName', null, $fullName ); -print Xml::element( 'Description', null, $fullName ); - -// By default we'll use the site favicon. -// Double-check if IE supports this properly? -print Xml::element( 'Image', - [ - 'height' => 16, - 'width' => 16, - 'type' => 'image/x-icon' ], - wfExpandUrl( $wgFavicon, PROTO_CURRENT ) ); - -$urls = []; - -// General search template. Given an input term, this should bring up -// search results or a specific found page. -// At least Firefox and IE 7 support this. -$searchPage = SpecialPage::getTitleFor( 'Search' ); -$urls[] = [ - 'type' => 'text/html', - 'method' => 'get', - 'template' => $searchPage->getCanonicalURL( 'search={searchTerms}' ) ]; - -foreach ( $wgOpenSearchTemplates as $type => $template ) { - if ( !$template ) { - $template = ApiOpenSearch::getOpenSearchTemplate( $type ); + if ( $wgRequest->getVal( 'ctype' ) == 'application/xml' ) { + // Makes testing tweaks about a billion times easier + $ctype = 'application/xml'; + } else { + $ctype = 'application/opensearchdescription+xml'; } - if ( $template ) { - $urls[] = [ - 'type' => $type, - 'method' => 'get', - 'template' => $template, - ]; + $response = $wgRequest->response(); + $response->header( "Content-type: $ctype" ); + + // Set an Expires header so that CDN can cache it for a short time + // Short enough so that the sysadmin barely notices when $wgSitename is changed + $expiryTime = 600; # 10 minutes + $response->header( 'Expires: ' . gmdate( 'D, d M Y H:i:s', time() + $expiryTime ) . ' GMT' ); + $response->header( 'Cache-control: max-age=600' ); + + print '<?xml version="1.0"?>'; + print Xml::openElement( 'OpenSearchDescription', + [ + 'xmlns' => 'http://a9.com/-/spec/opensearch/1.1/', + 'xmlns:moz' => 'http://www.mozilla.org/2006/browser/search/' ] ); + + // The spec says the ShortName must be no longer than 16 characters, + // but 16 is *realllly* short. In practice, browsers don't appear to care + // when we give them a longer string, so we're no longer attempting to trim. + // + // Note: ShortName and the <link title=""> need to match; they are used as + // a key for identifying if the search engine has been added already, *and* + // as the display name presented to the end-user. + // + // Behavior seems about the same between Firefox and IE 7/8 here. + // 'Description' doesn't appear to be used by either. + $fullName = wfMessage( 'opensearch-desc' )->inContentLanguage()->text(); + print Xml::element( 'ShortName', null, $fullName ); + print Xml::element( 'Description', null, $fullName ); + + // By default we'll use the site favicon. + // Double-check if IE supports this properly? + print Xml::element( 'Image', + [ + 'height' => 16, + 'width' => 16, + 'type' => 'image/x-icon' ], + wfExpandUrl( $wgFavicon, PROTO_CURRENT ) ); + + $urls = []; + + // General search template. Given an input term, this should bring up + // search results or a specific found page. + // At least Firefox and IE 7 support this. + $searchPage = SpecialPage::getTitleFor( 'Search' ); + $urls[] = [ + 'type' => 'text/html', + 'method' => 'get', + 'template' => $searchPage->getCanonicalURL( 'search={searchTerms}' ) ]; + + foreach ( $wgOpenSearchTemplates as $type => $template ) { + if ( !$template ) { + $template = ApiOpenSearch::getOpenSearchTemplate( $type ); + } + + if ( $template ) { + $urls[] = [ + 'type' => $type, + 'method' => 'get', + 'template' => $template, + ]; + } } -} -// Allow hooks to override the suggestion URL settings in a more -// general way than overriding the whole search engine... -Hooks::runner()->onOpenSearchUrls( $urls ); + // Allow hooks to override the suggestion URL settings in a more + // general way than overriding the whole search engine... + Hooks::runner()->onOpenSearchUrls( $urls ); -foreach ( $urls as $attribs ) { - print Xml::element( 'Url', $attribs ); -} + foreach ( $urls as $attribs ) { + print Xml::element( 'Url', $attribs ); + } -// And for good measure, add a link to the straight search form. -// This is a custom format extension for Firefox, which otherwise -// sends you to the domain root if you hit "enter" with an empty -// search box. -print Xml::element( 'moz:SearchForm', null, - $searchPage->getCanonicalURL() ); + // And for good measure, add a link to the straight search form. + // This is a custom format extension for Firefox, which otherwise + // sends you to the domain root if you hit "enter" with an empty + // search box. + print Xml::element( 'moz:SearchForm', null, + $searchPage->getCanonicalURL() ); -print '</OpenSearchDescription>'; + print '</OpenSearchDescription>'; +} |