Enhance Jira integration by adding fallback mechanisms and improving field handling in issue fetching #33
@@ -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);
|
||||
|
||||
@@ -149,15 +149,47 @@ 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' => 'POST',
|
||||
'headers' => [
|
||||
'Authorization' => $authHeader,
|
||||
'Accept' => 'application/json',
|
||||
'Content-Type' => 'application/json',
|
||||
],
|
||||
'body' => $payload,
|
||||
'timeout' => 12,
|
||||
]);
|
||||
|
||||
// 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,
|
||||
@@ -165,10 +197,16 @@ function jira_fetch_issues(string $domain, string $email, string $apiToken, stri
|
||||
],
|
||||
'timeout' => 12,
|
||||
]);
|
||||
}
|
||||
|
||||
// Fallback naar api v2
|
||||
// 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' => [],
|
||||
];
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user