X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2FAjaxDispatcher.php;h=7b85ed205409ef03f68b29203814798a0b10d3ca;hb=affb1c93210986383fc5faaeb6db6010e627121a;hp=d19035e5473d6b04e8345ccac04fcc46a234b5f8;hpb=69ea9bcf9bcdb433e2497c161f831514a9153723;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/AjaxDispatcher.php b/includes/AjaxDispatcher.php index d19035e547..7b85ed2054 100644 --- a/includes/AjaxDispatcher.php +++ b/includes/AjaxDispatcher.php @@ -1,20 +1,30 @@ mode = ""; @@ -27,65 +37,87 @@ 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: + 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 ); - echo "unknown function {$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; } } -?> +