3 * Handle ajax requests and send them to the proper handler.
6 if( !(defined( 'MEDIAWIKI' ) && $wgUseAjax ) ) {
10 require_once( 'AjaxFunctions.php' );
13 * Object-Oriented Ajax functions.
16 class AjaxDispatcher
{
17 /** The way the request was made, either a 'get' or a 'post' */
20 /** Name of the requested handler */
23 /** Arguments passed */
26 /** Load up our object with user supplied data */
27 function __construct() {
28 wfProfileIn( __METHOD__
);
32 if (! empty($_GET["rs"])) {
36 if (!empty($_POST["rs"])) {
40 switch( $this->mode
) {
43 $this->func_name
= isset( $_GET["rs"] ) ?
$_GET["rs"] : '';
44 if (! empty($_GET["rsargs"])) {
45 $this->args
= $_GET["rsargs"];
47 $this->args
= array();
52 $this->func_name
= isset( $_POST["rs"] ) ?
$_POST["rs"] : '';
53 if (! empty($_POST["rsargs"])) {
54 $this->args
= $_POST["rsargs"];
56 $this->args
= array();
62 # Or we could throw an exception:
63 #throw new MWException( __METHOD__ . ' called without any data (mode empty).' );
67 wfProfileOut( __METHOD__
);
70 /** Pass the request to our internal function.
71 * BEWARE! Data are passed as they have been supplied by the user,
72 * they should be carefully handled in the function processing the
75 function performAction() {
76 global $wgAjaxExportList, $wgOut;
78 if ( empty( $this->mode
) ) {
81 wfProfileIn( __METHOD__
);
83 if (! in_array( $this->func_name
, $wgAjaxExportList ) ) {
84 wfHttpError( 400, 'Bad Request',
85 "unknown function " . (string) $this->func_name
);
88 $result = call_user_func_array($this->func_name
, $this->args
);
90 if ( $result === false ||
$result === NULL ) {
91 wfHttpError( 500, 'Internal Error',
92 "{$this->func_name} returned no data" );
95 if ( is_string( $result ) ) {
96 $result= new AjaxResponse( $result );
99 $result->sendHeaders();
100 $result->printText();
103 } catch (Exception
$e) {
104 if (!headers_sent()) {
105 wfHttpError( 500, 'Internal Error',
108 print $e->getMessage();
113 wfProfileOut( __METHOD__
);