diff --git a/.gitignore b/.gitignore index 6ef5c6d096f1f589bdd1959215d22d14de08cf2a..824d16b9f613cc48e11a8cdb23200d5f96ed2b13 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,10 @@ .directory +filelist +phpstan-baseline.neon +phpstan.neon +.idea/.gitignore +.idea/fusiondirectory-integrator.iml +.idea/modules.xml +.idea/php.xml +.idea/vcs.xml diff --git a/src/FusionDirectory/Rest/WebServiceCall.php b/src/FusionDirectory/Rest/WebServiceCall.php index dcd6d512147bf821224cf84e2cd1ba636562e261..0ef7029695166ce3910332d0813b70eab1e7432e 100644 --- a/src/FusionDirectory/Rest/WebServiceCall.php +++ b/src/FusionDirectory/Rest/WebServiceCall.php @@ -10,6 +10,8 @@ class WebServiceCall */ private $ch; + private $httpStatusCode; // Store the HTTP status code + /** * @param string $URL * @param string $method @@ -70,7 +72,12 @@ class WebServiceCall break; case 'post': curl_setopt($this->ch, CURLOPT_POST, TRUE); - curl_setopt($this->ch, CURLOPT_POSTFIELDS, json_encode($this->data)); + + // Allows a POST to be performed without DATA + if (!empty($this->data)) { + curl_setopt($this->ch, CURLOPT_POSTFIELDS, json_encode($this->data)); + } + curl_setopt($this->ch, CURLOPT_USERAGENT, $customUserAgent); break; } @@ -198,5 +205,44 @@ class WebServiceCall curl_close($this->ch); return $response; } + + /** + * @return array + * @throws \Exception + */ + public function execute (): array + { + $response = curl_exec($this->ch); + + // Capture the HTTP status code + $this->httpStatusCode = curl_getinfo($this->ch, CURLINFO_HTTP_CODE); + + $this->handleCurlError($this->ch); + + // Handle 204 No Content response + if ($this->httpStatusCode === 204) { + curl_close($this->ch); + return []; // Return an empty array for 204 responses + } + + $decoded = json_decode($response, TRUE); + curl_close($this->ch); + + if (!is_array($decoded)) { + throw new \Exception('Invalid JSON response: ' . $response); + } + + return $decoded; + } + + /** + * Retrieve the HTTP status code of the last request + * @return int + */ + public function getHttpStatusCode (): int + { + return $this->httpStatusCode; + } + }