X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2FAjaxDispatcher.php;h=c3d4ea955866bbc2d4c117a8882caefe181680e8;hb=903732fd15bfbabf758abec8b15fd3d29df44241;hp=89062f8770dce0d588202f0610bd8ba668c0ae5e;hpb=b74d98523289aaf639a554adafc27f038f3a6a9b;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/AjaxDispatcher.php b/includes/AjaxDispatcher.php index 89062f8770..c3d4ea9558 100644 --- a/includes/AjaxDispatcher.php +++ b/includes/AjaxDispatcher.php @@ -1,20 +1,34 @@ mode = ""; @@ -27,65 +41,86 @@ class AjaxDispatcher { $this->mode = "post"; } - if ($this->mode == "get") { - $this->func_name = $_GET["rs"]; + switch( $this->mode ) { + + case 'get': + $this->func_name = isset( $_GET["rs"] ) ? $_GET["rs"] : ''; if (! empty($_GET["rsargs"])) { $this->args = $_GET["rsargs"]; } else { $this->args = array(); } - } else { - $this->func_name = $_POST["rs"]; + break; + + case 'post': + $this->func_name = isset( $_POST["rs"] ) ? $_POST["rs"] : ''; if (! empty($_POST["rsargs"])) { $this->args = $_POST["rsargs"]; } else { $this->args = array(); } + break; + + default: + wfProfileOut( __METHOD__ ); + return; + # Or we could throw an exception: + #throw new MWException( __METHOD__ . ' called without any data (mode empty).' ); + } + wfProfileOut( __METHOD__ ); } + /** Pass the request to our internal function. + * BEWARE! Data are passed as they have been supplied by the user, + * they should be carefully handled in the function processing the + * request. + */ function performAction() { global $wgAjaxExportList, $wgOut; - + if ( empty( $this->mode ) ) { return; } wfProfileIn( __METHOD__ ); if (! in_array( $this->func_name, $wgAjaxExportList ) ) { - header( 'Status: 400 Bad Request', true, 400 ); - print "unknown function " . htmlspecialchars( (string) $this->func_name ); + wfHttpError( 400, 'Bad Request', + "unknown function " . (string) $this->func_name ); } else { + if ( strpos( $this->func_name, '::' ) !== false ) { + $func = explode( '::', $this->func_name, 2 ); + } else { + $func = $this->func_name; + } try { - $result = call_user_func_array($this->func_name, $this->args); - + $result = call_user_func_array($func, $this->args); + if ( $result === false || $result === NULL ) { - header( 'Status: 500 Internal Error', true, 500 ); - echo "{$this->func_name} returned no data"; + wfHttpError( 500, 'Internal Error', + "{$this->func_name} returned no data" ); } else { if ( is_string( $result ) ) { $result= new AjaxResponse( $result ); } - + $result->sendHeaders(); $result->printText(); } } catch (Exception $e) { if (!headers_sent()) { - header( 'Status: 500 Internal Error', true, 500 ); - print $e->getMessage(); + wfHttpError( 500, 'Internal Error', + $e->getMessage() ); } else { print $e->getMessage(); } } } - + wfProfileOut( __METHOD__ ); $wgOut = null; } } - -?>