Enhance Jira integration by adding fallback mechanisms and improving field handling in issue fetching #33

Merged
NiekRabelink merged 1 commits from dev into main 2026-09-10 11:15:04 +00:00
2 changed files with 49 additions and 9 deletions
Showing only changes of commit 47b0d38084 - Show all commits
+1
View File
@@ -58,6 +58,7 @@ try {
// Wis eventuele oude sessie cache
unset($_SESSION["jira_issues_user_{$user['id']}"]);
unset($_SESSION["jira_dashboard_user_{$user['id']}"]);
}
echo json_encode($res);
+48 -9
View File
@@ -149,26 +149,64 @@ function jira_fetch_issues(string $domain, string $email, string $apiToken, stri
$cleanDomain = jira_normalize_domain($domain);
$authHeader = jira_get_auth_header($email, $apiToken);
$params = [
'jql' => $jql,
'maxResults' => min($maxResults, 100),
'fields' => 'summary,status,priority,issuetype,parent,project,assignee,reporter,duedate,updated',
$fieldsList = [
'summary',
'status',
'priority',
'issuetype',
'parent',
'project',
'assignee',
'reporter',
'duedate',
'updated'
];
$url = $cleanDomain . '/rest/api/3/search?' . http_build_query($params);
// 1. Moderne Atlassian Jira Cloud endpoint (/rest/api/3/search/jql) conform CHANGE-2046 via POST
$url = $cleanDomain . '/rest/api/3/search/jql';
$payload = [
'jql' => $jql,
'maxResults' => min($maxResults, 100),
'fields' => $fieldsList,
];
$response = fociz_http_request($url, [
'method' => 'GET',
'method' => 'POST',
'headers' => [
'Authorization' => $authHeader,
'Accept' => 'application/json',
'Content-Type' => 'application/json',
],
'body' => $payload,
'timeout' => 12,
]);
// Fallback naar api v2
// 2. Fallback: GET /rest/api/3/search/jql met query parameters indien de instantie GET vereist
if ($response['status'] === 405 || $response['status'] === 400) {
$getParams = [
'jql' => $jql,
'maxResults' => min($maxResults, 100),
'fields' => implode(',', $fieldsList),
];
$urlGet = $cleanDomain . '/rest/api/3/search/jql?' . http_build_query($getParams);
$response = fociz_http_request($urlGet, [
'method' => 'GET',
'headers' => [
'Authorization' => $authHeader,
'Accept' => 'application/json',
],
'timeout' => 12,
]);
}
// 3. Fallback naar API v2 voor on-premise Jira Server / Data Center installaties (waar /rest/api/2/search actief is)
if ($response['status'] === 404) {
$urlV2 = $cleanDomain . '/rest/api/2/search?' . http_build_query($params);
$getParams = [
'jql' => $jql,
'maxResults' => min($maxResults, 100),
'fields' => implode(',', $fieldsList),
];
$urlV2 = $cleanDomain . '/rest/api/2/search?' . http_build_query($getParams);
$response = fociz_http_request($urlV2, [
'method' => 'GET',
'headers' => [
@@ -180,9 +218,10 @@ function jira_fetch_issues(string $domain, string $email, string $apiToken, stri
}
if ($response['status'] !== 200 || !isset($response['json']['issues'])) {
$errorMsg = $response['json']['errorMessages'][0] ?? ($response['json']['message'] ?? ($response['error'] ?? 'Kan Jira tickets niet ophalen'));
return [
'success' => false,
'error' => $response['json']['errorMessages'][0] ?? ($response['error'] ?? 'Kan Jira tickets niet ophalen'),
'error' => $errorMsg,
'issues' => [],
];
}