baseUrl = rtrim($baseUrl, '/'); $this->httpClient = $httpClient; } /** * Restituisce le istanze del modulo, opzionalmente filtrate per stato. * I flag di ElixFormsRequestStatus possono essere combinati con l'operatore |. * * @return array> */ public function lookupByStatus( string $moduleTag, string $authToken, string $username, ?int $status = null ): array { $queryParts = []; if ($status !== null) { foreach (ElixFormsRequestStatus::toApiValues($status) as $statusValue) { $queryParts[] = 'requestStatus=' . rawurlencode($statusValue); } } $queryParts[] = 'moduleTag=' . rawurlencode($moduleTag); $url = "{$this->baseUrl}/api/request/lookup/by-status?" . implode('&', $queryParts); $payload = $this->getJson($url, $authToken, $username, 'LookupByStatus'); $requests = $payload['value']['requests'] ?? []; if (!\is_array($requests)) { throw new ElixFormsException('Risposta LookupByStatus non valida: requests deve essere un array.'); } return array_values($requests); } /** * @param int|string $requestId * @return array */ public function getExportTags( $requestId, string $moduleTag, string $authToken, string $username, string $exportGroup = 'API' ): array { $exportGroup = trim($exportGroup); if ($exportGroup === '') { throw new \InvalidArgumentException('exportGroup deve essere una stringa non vuota.'); } $url = \sprintf( '%s/services/api/request/%s/view/_DEFAULT/exportTags/get/v1?moduleTag=%s&exportGroup=%s', $this->baseUrl, rawurlencode((string) $requestId), rawurlencode($moduleTag), rawurlencode($exportGroup) ); $payload = $this->getJson($url, $authToken, $username, 'GetExportTags'); $exportTags = $payload['value']['exportTags'] ?? []; if (!\is_array($exportTags)) { throw new ElixFormsException('Risposta GetExportTags non valida: exportTags deve essere un array.'); } return array_values($exportTags); } private function getJson( string $url, string $authToken, string $username, string $operation ): array { $response = $this->httpClient->get($url, [ 'Authorization' => 'Bearer ' . $authToken, 'Accept' => 'application/json', 'x-requested-with' => 'XMLHttpRequest', 'x-api-username' => $username, ]); $status = $response['status'] ?? 500; if ($status !== 200) { throw new ElixFormsException(\sprintf( 'Errore durante %s. HTTP Status: %d', $operation, $status )); } $payload = $response['json'] ?? null; $jsonError = JSON_ERROR_NONE; if (!\is_array($payload) && isset($response['body']) && \is_string($response['body'])) { $payload = json_decode($response['body'], true); $jsonError = json_last_error(); } if (!\is_array($payload) || $jsonError !== JSON_ERROR_NONE) { throw new ElixFormsException(\sprintf( 'Risposta non valida da %s: atteso JSON.', $operation )); } $globalStatus = $payload['value']['globalStatus'] ?? null; if ($globalStatus === 'ERROR') { $description = $payload['value']['description'] ?? 'errore non specificato'; throw new ElixFormsException(\sprintf( '%s ha restituito un errore: %s', $operation, $description )); } return $payload; } }