From e1ceb050e19c7574bca146a8da7047ee4ff456b5 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Sun, 10 Jul 2016 05:02:35 -0400
Subject: [PATCH] Merge branch 'stable-3.1'

---
 interface/lib/classes/json_handler.inc.php |   23 +++++++++++++----------
 1 files changed, 13 insertions(+), 10 deletions(-)

diff --git a/interface/lib/classes/json_handler.inc.php b/interface/lib/classes/json_handler.inc.php
index d6d58c3..de8dd5b 100644
--- a/interface/lib/classes/json_handler.inc.php
+++ b/interface/lib/classes/json_handler.inc.php
@@ -88,15 +88,11 @@
 		$keys = array_keys($_GET);
 		$method = reset($keys);
 		$params = array();
-
-		if(is_array($_POST)) {
-			foreach($_POST as $key => $val) {
-				$tmp = json_decode($val, true);
-				if(!$tmp) $params[] = $val;
-				else $params[] = (array)$tmp;
-			}
-		}
-
+		
+		$raw = file_get_contents("php://input");
+		$json = json_decode($raw, true);
+		if(!is_array($json)) $this->_return_json('invalid_data', 'The JSON data sent to the api is invalid');
+		
 		if(array_key_exists($method, $this->methods) == false) {
 			$this->_return_json('invalid_method', 'Method ' . $method . ' does not exist');
 		}
@@ -109,7 +105,14 @@
 		if(method_exists($this->classes[$class_name], $method) == false) {
 			$this->_return_json('invalid_method', 'Method ' . $method . ' does not exist in the class it was expected (' . $class_name . ')');
 		}
-
+		
+		$methObj = new ReflectionMethod($this->classes[$class_name], $method);
+		foreach($methObj->getParameters() as $param) {
+			$pname = $param->name;
+			if(isset($json[$pname])) $params[] = $json[$pname];
+			else $params[] = null;
+		}
+		
 		try {
 			$this->_return_json('ok', '', call_user_func_array(array($this->classes[$class_name], $method), $params));
 		} catch(SoapFault $e) {

--
Gitblit v1.9.1