X-Git-Url: http://git.cyclocoop.org/?a=blobdiff_plain;f=api.php;h=e55ec75a33523e8fde0a1c19b5a07d6f1408b63a;hb=229e1f4fdbda91f10f5ce78f0d35db973c714b1d;hp=bc9022979e207dc36c966fd1f6ef9e95ebe6ba31;hpb=3ce9ff26f231ceab243a7166d9670ca394323e85;p=lhc%2Fweb%2Fwiklou.git diff --git a/api.php b/api.php index bc9022979e..e55ec75a33 100644 --- a/api.php +++ b/api.php @@ -36,16 +36,11 @@ define( 'MW_API', true ); // Bail if PHP is too low if ( !function_exists( 'version_compare' ) || version_compare( phpversion(), '5.3.2' ) < 0 ) { // We need to use dirname( __FILE__ ) here cause __DIR__ is PHP5.3+ - require( dirname( __FILE__ ) . '/includes/PHPVersionError.php' ); + require dirname( __FILE__ ) . '/includes/PHPVersionError.php'; wfPHPVersionError( 'api.php' ); } -// Initialise common code. -if ( isset( $_SERVER['MW_COMPILED'] ) ) { - require ( 'core/includes/WebStart.php' ); -} else { - require ( __DIR__ . '/includes/WebStart.php' ); -} +require __DIR__ . '/includes/WebStart.php'; wfProfileIn( 'api.php' ); $starttime = microtime( true ); @@ -58,8 +53,8 @@ if ( !$wgRequest->checkUrlExtension() ) { // Verify that the API has not been disabled if ( !$wgEnableAPI ) { header( $_SERVER['SERVER_PROTOCOL'] . ' 500 MediaWiki configuration Error', true, 500 ); - echo( 'MediaWiki API is not enabled for this site. Add the following line to your LocalSettings.php' - . '
$wgEnableAPI=true;
' ); + echo 'MediaWiki API is not enabled for this site. Add the following line to your LocalSettings.php' + . '
$wgEnableAPI=true;
'; die( 1 ); } @@ -73,8 +68,26 @@ $wgTitle = Title::makeTitle( NS_MAIN, 'API' ); */ $processor = new ApiMain( RequestContext::getMain(), $wgEnableWriteAPI ); +// Last chance hook before executing the API +try { + wfRunHooks( 'ApiBeforeMain', array( &$processor ) ); + if ( !$processor instanceof ApiMain ) { + throw new MWException( 'ApiBeforMain hook set $processor to a non-ApiMain class' ); + } +} catch ( Exception $e ) { + // Crap. Try to report the exception in API format to be friendly to clients. + ApiMain::handleApiBeforeMainException( $e ); + $processor = false; +} + // Process data & print results -$processor->execute(); +if ( $processor ) { + $processor->execute(); +} + +if ( function_exists( 'fastcgi_finish_request' ) ) { + fastcgi_finish_request(); +} // Execute any deferred updates DeferredUpdates::doUpdates(); @@ -82,6 +95,7 @@ DeferredUpdates::doUpdates(); // Log what the user did, for book-keeping purposes. $endtime = microtime( true ); wfProfileOut( 'api.php' ); + wfLogProfilingData(); // Log the request @@ -93,11 +107,15 @@ if ( $wgAPIRequestLog ) { $_SERVER['HTTP_USER_AGENT'] ); $items[] = $wgRequest->wasPosted() ? 'POST' : 'GET'; - $module = $processor->getModule(); - if ( $module->mustBePosted() ) { - $items[] = "action=" . $wgRequest->getVal( 'action' ); + if ( $processor ) { + $module = $processor->getModule(); + if ( $module->mustBePosted() ) { + $items[] = "action=" . $wgRequest->getVal( 'action' ); + } else { + $items[] = wfArrayToCgi( $wgRequest->getValues() ); + } } else { - $items[] = wfArrayToCgi( $wgRequest->getValues() ); + $items[] = "failed in ApiBeforeMain"; } wfErrorLog( implode( ',', $items ) . "\n", $wgAPIRequestLog ); wfDebug( "Logged API request to $wgAPIRequestLog\n" );