Files
ms1inscription-v5/ajax_jira.php
2026-05-13 09:43:32 -04:00

425 lines
14 KiB
PHP

<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
// Lire le JSON si nécessaire
if ($_SERVER['CONTENT_TYPE'] === 'application/json' || str_contains($_SERVER['CONTENT_TYPE'], 'application/json')) {
$raw = file_get_contents("php://input");
$json = json_decode($raw, true);
if (is_array($json)) {
$_POST = $json;
} else {
http_response_code(400);
header('Content-Type: application/json; charset=utf-8');
echo json_encode(['success' => false, 'message' => 'Mauvais JSON']);
exit;
}
}
require_once "php/inc_fonctions.php";
global $vDomaine;
$strAction = $intEvenement = $intNewNoBib = $intEpreuveCommandee = $intEpreuve = $intPartipcipant = $intQuantite = $strLangue = '';
//$_POST['request_type'] ="check_email";
//$_POST['email'] ="stepan@progiweb.ca";
//$_POST['nom']="stephan test";
//$_POST['description']="description ";
//$_POST['typedemande']="test sl";
//$_POST['summary']="sujet";
$typedemande = (int)($_POST['typedemande'] ?? 4);
if (isset($_POST['request_type'] )) {
$strAction = $_POST['request_type'];
}
$tabRetour = array();
$tabRetour['success']=false;
switch($strAction) {
case 'check_email':
$result=jira_recherche_email($_POST['email']);
if($result['success']==false){
//cree le user
$result=jira_creer_user($_POST['email'],$_POST['nom']);
if($result['success']==true){
$tabRetour['success']=true;
$tabRetour['accountId']=$result['statut']['accountId'] ;
}else{
$tabRetour['success']=false;
$tabRetour['accountId']="";
};
}else{
//retourne le id
$tabRetour['success']=true;
$tabRetour['accountId']= $result['jira']['accountId'];
}
if($tabRetour['success']==true){
// creer le jira
$data['serviceDeskId'] = 2; // Remplacez par l'ID réel de votre Service Desk
$data['requestTypeId'] = (string)$typedemande; // Remplacez par l'ID réel du type de demande
$data['summary']=$_POST['summary'];
$data['description']=$_POST['description'];
$data['typedemande']=$_POST['typedemande'];
$data['raiseOnBehalfOf']= $_POST['email'] ;
$tabRetourtemp=jira_create_ticket($data);
$tabRetour['success']=true;
}else
{
$tabRetour['success']=false;
$tabRetour['accountId']= "";
}
break;
case 'check_emailold':
$result=jira_recherche_email($_POST['email']);
if($result['success']==false){
//cree le user
$result=jira_creer_user($_POST['email'],$_POST['nom']);
if($result['success']==true){
$tabRetour['success']='success';
$tabRetour['accountId']=$result['statut']['accountId'] ;
}else{
$tabRetour['success']=false;
$tabRetour['accountId']="";
};
}else{
//retourne le id
$tabRetour['success']=true;
$tabRetour['accountId']= $result['jira']['accountId'];
}
if($tabRetour['success']==true){
// creer le jira
$data['serviceDeskId'] = 2; // Remplacez par l'ID réel de votre Service Desk
$data['requestTypeId'] = (string)$typedemande; // Remplacez par l'ID réel du type de demande
$data['summary']=utf8_encode($_POST['summary']);
$data['description']=utf8_encode($_POST['description']);
$data['typedemande']=utf8_encode($_POST['typedemande']);
$data['raiseOnBehalfOf']= $_POST['email'] ;
$tabRetourtemp=jira_create_ticket($data);
$tabRetour['success']=true;
}else
{
$tabRetour['success']=false;
$tabRetour['accountId']= "";
}
break;
case 'no_equipe':
case 'no_bib':
break;
case 'teammates':
break;
}
header('Content-Type: application/json; charset=utf-8');
echo json_encode($tabRetour);
exit;
function jira_recherche_email($param)
{
// recherche user
$jiraDomain = 'https://progiwebinc.atlassian.net'; // Remplacez par le domaine de votre Jira
// API que vous voulez appeler
$admin_email = 'stephan@progiweb.ca'; // Remplacez par votre email
//$api_token = 'ATATT3xFfGF0DuhOhRUxFlj2hFpLuzYGapJIrhMETB35NnLFi1TyxDszp3tTa8MaadTpT72GfDk9FOpDm07m6HbdXoQ9plDeRvB6OwRnD19VrIqA8M3HmDGgf_MWR7Pwk5731ahbgb4UBdRgj-ICBqt9A0SjJPnnoTfu4ECVh51HjM0RsekOmeM=908B030C'; // Remplacez par votre jeton d'API
//ms1inscription v4
$api_token = 'ATATT3xFfGF0Z91qESp8j7uO783qK0E4BWsY8rhPWEmexSa4Rw3c21Spg6hYIkmVgy6Vwzb34RxqFl3sR00Kby_DuY1NdcUJyfPQYZ0_JbeEjAk9ybFgNY8-MBSABMCxzaDk4szTbWupfjxHT8sJxJMvSNxgHPds5FxXaGo2DnZICZu5dXuvWbk=F73E15AE';
$apiEndpoint = '/rest/api/3/user/search?query=email@example.com';
// URL de votre instance Jira
// Email à rechercher
$email = $param;
// Initialiser cURL
$ch = curl_init();
// Point de terminaison pour rechercher un utilisateur
$url = $jiraDomain . '/rest/api/3/user/search?query=' . urlencode($email);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Basic ' . base64_encode($admin_email . ':' . $api_token),
'Content-Type: application/json',
]);
// Exécuter la requête et obtenir la réponse
$response = curl_exec($ch);
curl_close($ch);
// Décoder la réponse JSON
$result = json_decode($response, true);
$sortie=array();
$sortie['success']=false;
// Filtrer pour une correspondance exacte sur l'email
$exact_match = null;
if (!empty($result)) {
foreach ($result as $user) {
if (isset($user['emailAddress']) && strtolower($user['emailAddress']) === strtolower($email)) {
$sortie['success']=true;
$sortie['jira']=$user;
$exact_match = $user;
break;
}
}
}
return $sortie ;
}
function jira_creer_user($email,$displayName)
{
$jiraDomain = 'https://progiwebinc.atlassian.net'; // Remplacez par le domaine de votre Jira
// API que vous voulez appeler
$userEmail = 'stephan@progiweb.ca'; // Remplacez par votre email
$apiToken = 'ATATT3xFfGF0Z91qESp8j7uO783qK0E4BWsY8rhPWEmexSa4Rw3c21Spg6hYIkmVgy6Vwzb34RxqFl3sR00Kby_DuY1NdcUJyfPQYZ0_JbeEjAk9ybFgNY8-MBSABMCxzaDk4szTbWupfjxHT8sJxJMvSNxgHPds5FxXaGo2DnZICZu5dXuvWbk=F73E15AE'; // Remplacez par votre jeton d'API
$apiEndpoint = '/rest/servicedeskapi/customer';
// Encodage de l'authentification en Base64
$authHeader = base64_encode("$userEmail:$apiToken");
// Corps de la requête
$postData = json_encode([
'email' => $email,
'displayName' => $displayName
]);
// Initialisation de cURL
$ch = curl_init("$jiraDomain$apiEndpoint");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Basic $authHeader",
"Content-Type: application/json",
"Accept: application/json"
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
// Exécuter la requête
$response = curl_exec($ch);
$result = json_decode($response, true);
$sortie=array();
$sortie['statut']=false;
// Gérer les erreurs
if (curl_errno($ch)) {
// echo 'Erreur cURL : ' . curl_error($ch);
$sortie['statut']=curl_error($ch);
} else {
// Vérifier le code HTTP pour voir si le client existe déjà
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($httpcode == 201) {
// echo "Le client a été créé avec succès.";
$sortie['success']=true;
$sortie['statut']= $result;
} elseif ($httpcode == 400) {
// Traiter le cas où l'email existe déjà
$responseData = json_decode($response, true);
$sortie['success']=true;
if (isset($responseData['errors']) && strpos($responseData['errors'][0]['message'], 'already exists') !== false) {
// echo "Le client avec cet email existe déjà.";
$sortie['success']=true;
$sortie['existe']=true;
$sortie['statut']= $result;
} else {
//echo "Une erreur s'est produite : " . $response;
$sortie['statut']= $result;
$sortie['success']=true;
$sortie['existe']=true;
}
} else {
$sortie['success']=false;
// echo "Erreur inattendue : " . $response;
$sortie['statut']= $result;
}
}
// Fermer la session cURL
curl_close($ch);
return($sortie);
}
function jira_create_ticket( $param)
{
// Domaine Jira
$jiraDomain = 'https://progiwebinc.atlassian.net'; // Remplacez par le domaine de votre Jira
// Informations d'authentification
$userEmail = 'stephan@progiweb.ca'; // Remplacez par votre email
$apiToken = 'ATATT3xFfGF0Z91qESp8j7uO783qK0E4BWsY8rhPWEmexSa4Rw3c21Spg6hYIkmVgy6Vwzb34RxqFl3sR00Kby_DuY1NdcUJyfPQYZ0_JbeEjAk9ybFgNY8-MBSABMCxzaDk4szTbWupfjxHT8sJxJMvSNxgHPds5FxXaGo2DnZICZu5dXuvWbk=F73E15AE'; // Remplacez par votre jeton d'API
// Les informations du ticket
$data = [
'serviceDeskId' => $param['serviceDeskId'],
'requestTypeId' => $param['requestTypeId'],
'requestFieldValues' => [
'summary' => $param['summary'],
'description' => $param['description'],
'customfield_11143' => $param['typedemande'],
],
'raiseOnBehalfOf' => $param['raiseOnBehalfOf'], // Remplacez par l'accountId du client (facultatif)
] ;
$jsonData = json_encode($data);
// if ($jsonData === false) {
// echo "Erreur dans l'encodage JSON : " . json_last_error_msg();
// } else {
// echo $jsonData; // Afficher les données encodées
// }
// Initialiser cURL
$ch = curl_init();
// Point de terminaison pour créer une demande
$url = $jiraDomain . '/rest/servicedeskapi/request';
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Basic ' . base64_encode($userEmail . ':' . $apiToken),
'Content-Type: application/json; charset=UTF-8',
]);
// Exécuter la requête et obtenir la réponse
$response = curl_exec($ch);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
$sortie['success']=false;
$sortie['statut']="";
// Vérifier si le contenu de la réponse est vide
if ($response === false || empty($response)) {
// Gérer les réponses vides ou erreurs
if ($httpcode == 204) {
$sortie['success']=true;
$sortie['statut'] = "Le ticket a été créé avec succès, mais la réponse est vide (204 No Content).";
} else {
$sortie['success']=false;
$sortie['statut'] = "Erreur : Le serveur a renvoyé une réponse vide. Code HTTP : " . $httpcode;
}
} else {
// Décoder la réponse JSON seulement si elle n'est pas vide
$decoded_response = json_decode($response, true);
if ($httpcode == 201) {
$sortie['success']=true;
$sortie['statut']= $decoded_response;
} else {
$sortie['success']=false;
$sortie['statut']= $response;
}
}
return( $sortie);
}
function jira_create_ticketold( $param)
{
// Domaine Jira
$jiraDomain = 'https://progiwebinc.atlassian.net'; // Remplacez par le domaine de votre Jira
// Informations d'authentification
$userEmail = 'stephan@progiweb.ca'; // Remplacez par votre email
$apiToken = 'ATATT3xFfGF0Z91qESp8j7uO783qK0E4BWsY8rhPWEmexSa4Rw3c21Spg6hYIkmVgy6Vwzb34RxqFl3sR00Kby_DuY1NdcUJyfPQYZ0_JbeEjAk9ybFgNY8-MBSABMCxzaDk4szTbWupfjxHT8sJxJMvSNxgHPds5FxXaGo2DnZICZu5dXuvWbk=F73E15AE'; // Remplacez par votre jeton d'API
// Les informations du ticket
$data = [
'serviceDeskId' => $param['serviceDeskId'],
'requestTypeId' => $param['requestTypeId'],
'requestFieldValues' => [
'summary' => $param['summary'],
'description' => $param['description'],
],
'raiseOnBehalfOf' => $param['raiseOnBehalfOf'], // Remplacez par l'accountId du client (facultatif)
] ;
$jsonData = json_encode($data);
// if ($jsonData === false) {
// echo "Erreur dans l'encodage JSON : " . json_last_error_msg();
// } else {
// echo $jsonData; // Afficher les données encodées
// }
// Initialiser cURL
$ch = curl_init();
// Point de terminaison pour créer une demande
$url = $jiraDomain . '/rest/servicedeskapi/request';
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Basic ' . base64_encode($userEmail . ':' . $apiToken),
'Content-Type: application/json; charset=UTF-8',
]);
// Exécuter la requête et obtenir la réponse
$response = curl_exec($ch);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
$sortie['success']=0;
$sortie['statut']="";
// Vérifier si le contenu de la réponse est vide
if ($response === false || empty($response)) {
// Gérer les réponses vides ou erreurs
if ($httpcode == 204) {
$sortie['success']=1;
$sortie['statut'] = "Le ticket a été créé avec succès, mais la réponse est vide (204 No Content).";
} else {
$sortie['success']=0;
$sortie['statut'] = "Erreur : Le serveur a renvoyé une réponse vide. Code HTTP : " . $httpcode;
}
} else {
// Décoder la réponse JSON seulement si elle n'est pas vide
$decoded_response = json_decode($response, true);
if ($httpcode == 201) {
$sortie['success']=1;
$sortie['statut']= $decoded_response;
} else {
$sortie['success']=0;
$sortie['statut']= $response;
}
}
return( $sortie);
}