global $wgLoadBalancer;
list( $host, $lag ) = $wgLoadBalancer->getMaxLag();
if ( $lag > $maxLag ) {
- header( 'HTTP/1.1 503 Service Unavailable' );
- header( 'Retry-After: ' . max( intval( $maxLag ), 5 ) );
- header( 'X-Database-Lag: ' . intval( $lag ) );
- header( 'Content-Type: text/plain' );
- echo "Waiting for $host: $lag seconds lagged\n";
+ wfMaxlagError( $host, $lag, $maxLag );
return false;
} else {
return true;
$lang->findVariantLink( $title, $ret );
}
- if ( $oldid = $request->getInt( 'oldid' ) ) {
+ if ( ( $oldid = $request->getInt( 'oldid' ) )
+ && ( is_null( $ret ) || $ret->getNamespace() != NS_SPECIAL ) ) {
// Allow oldid to override a changed or missing title.
$rev = Revision::newFromId( $oldid );
if( $rev ) {
*/
function preliminaryChecks ( &$title, &$output, $request ) {
- # Debug statement for user levels
- // print_r($wgUser);
-
- $search = $request->getText( 'search' );
- if( !is_null( $search ) && $search !== '' ) {
+ if( $request->getCheck( 'search' ) ) {
// Compatibility with old search URLs which didn't use Special:Search
+ // Just check for presence here, so blank requests still
+ // show the search page when using ugly URLs (bug 8054).
+
// Do this above the read whitelist check for security...
$title = SpecialPage::getTitleFor( 'Search' );
}
- $this->setVal( 'Search', $search );
# If the user is not logged in, the Namespace:title of the article must be in
# the Read array in order for the user to see it. (We have to check here to
global $wgRequest;
wfProfileIn( 'MediaWiki::initializeSpecialCases' );
- $search = $this->getVal('Search');
$action = $this->getVal('Action');
- if( !$this->getVal('DisableInternalSearch') && !is_null( $search ) && $search !== '' ) {
- require_once( 'includes/SpecialSearch.php' );
- $title = SpecialPage::getTitleFor( 'Search' );
- wfSpecialSearch();
- } else if( !$title or $title->getDBkey() == '' ) {
+ if( !$title or $title->getDBkey() == '' ) {
$title = SpecialPage::getTitleFor( 'Badtitle' );
# Die now before we mess up $wgArticle and the skin stops working
throw new ErrorPageError( 'badtitle', 'badtitletext' );
* @param Title $title
* @return Article
*/
- function articleFromTitle( $title ) {
+ static function articleFromTitle( $title ) {
$article = null;
wfRunHooks('ArticleFromTitle', array( &$title, &$article ) );
if ( $article ) {
switch( $title->getNamespace() ) {
case NS_IMAGE:
+ $file = wfFindFile( $title );
+ if( $file && $file->getRedirected() ) {
+ return new Article( $title );
+ }
return new ImagePage( $title );
case NS_CATEGORY:
return new CategoryPage( $title );
$article = $this->articleFromTitle( $title );
// Namespace might change when using redirects
- if( $action == 'view' && !$request->getVal( 'oldid' ) &&
+ if( ( $action == 'view' || $action == 'render' ) && !$request->getVal( 'oldid' ) &&
$request->getVal( 'redirect' ) != 'no' ) {
$dbr = wfGetDB(DB_SLAVE);
$this->doJobs();
$loadBalancer->saveMasterPos();
# Now commit any transactions, so that unreported errors after output() don't roll back the whole thing
- $loadBalancer->commitAll();
+ $loadBalancer->commitMasterChanges();
$output->output();
wfProfileOut( 'MediaWiki::finalCleanup' );
}
*/
function doUpdates ( &$updates ) {
wfProfileIn( 'MediaWiki::doUpdates' );
+ /* No need to get master connections in case of empty updates array */
+ if (!$updates) {
+ wfProfileOut('MediaWiki::doUpdates');
+ return;
+ }
+
$dbw = wfGetDB( DB_MASTER );
foreach( $updates as $up ) {
$up->doUpdate();
*/
function restInPeace ( &$loadBalancer ) {
wfLogProfilingData();
- $loadBalancer->closeAll();
wfDebug( "Request ended normally\n" );
}
wfProfileIn( 'MediaWiki::performAction' );
+ if ( !wfRunHooks('MediaWikiPerformAction', array($output, $article, $title, $user, $request)) ) {
+ wfProfileOut( 'MediaWiki::performAction' );
+ return;
+ }
+
$action = $this->getVal('Action');
if( in_array( $action, $this->getVal('DisabledActions',array()) ) ) {
/* No such action; this will switch to the default case */