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
|
// Wis eventuele oude sessie cache
|
||||||
unset($_SESSION["jira_issues_user_{$user['id']}"]);
|
unset($_SESSION["jira_issues_user_{$user['id']}"]);
|
||||||
|
unset($_SESSION["jira_dashboard_user_{$user['id']}"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
echo json_encode($res);
|
echo json_encode($res);
|
||||||
|
|||||||
@@ -149,26 +149,64 @@ function jira_fetch_issues(string $domain, string $email, string $apiToken, stri
|
|||||||
$cleanDomain = jira_normalize_domain($domain);
|
$cleanDomain = jira_normalize_domain($domain);
|
||||||
$authHeader = jira_get_auth_header($email, $apiToken);
|
$authHeader = jira_get_auth_header($email, $apiToken);
|
||||||
|
|
||||||
$params = [
|
$fieldsList = [
|
||||||
'jql' => $jql,
|
'summary',
|
||||||
'maxResults' => min($maxResults, 100),
|
'status',
|
||||||
'fields' => 'summary,status,priority,issuetype,parent,project,assignee,reporter,duedate,updated',
|
'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, [
|
$response = fociz_http_request($url, [
|
||||||
'method' => 'GET',
|
'method' => 'POST',
|
||||||
'headers' => [
|
'headers' => [
|
||||||
'Authorization' => $authHeader,
|
'Authorization' => $authHeader,
|
||||||
'Accept' => 'application/json',
|
'Accept' => 'application/json',
|
||||||
|
'Content-Type' => 'application/json',
|
||||||
],
|
],
|
||||||
|
'body' => $payload,
|
||||||
'timeout' => 12,
|
'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) {
|
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, [
|
$response = fociz_http_request($urlV2, [
|
||||||
'method' => 'GET',
|
'method' => 'GET',
|
||||||
'headers' => [
|
'headers' => [
|
||||||
@@ -180,9 +218,10 @@ function jira_fetch_issues(string $domain, string $email, string $apiToken, stri
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ($response['status'] !== 200 || !isset($response['json']['issues'])) {
|
if ($response['status'] !== 200 || !isset($response['json']['issues'])) {
|
||||||
|
$errorMsg = $response['json']['errorMessages'][0] ?? ($response['json']['message'] ?? ($response['error'] ?? 'Kan Jira tickets niet ophalen'));
|
||||||
return [
|
return [
|
||||||
'success' => false,
|
'success' => false,
|
||||||
'error' => $response['json']['errorMessages'][0] ?? ($response['error'] ?? 'Kan Jira tickets niet ophalen'),
|
'error' => $errorMsg,
|
||||||
'issues' => [],
|
'issues' => [],
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user