588 lines
16 KiB
PHP
588 lines
16 KiB
PHP
<?php
|
|
function fxDashboardAccess($page)
|
|
{
|
|
global $objDatabase;
|
|
|
|
$ip = $_SERVER['REMOTE_ADDR'];
|
|
$now = date('Y-m-d H:i:s');
|
|
|
|
$sql = "
|
|
SELECT log_allowed
|
|
FROM dashboard_log
|
|
WHERE log_ip = '$ip'
|
|
AND log_page = '$page'
|
|
LIMIT 1
|
|
";
|
|
|
|
$rows = $objDatabase->fxGetResults($sql);
|
|
|
|
if (empty($rows)) {
|
|
|
|
$sql = "
|
|
INSERT INTO dashboard_log
|
|
(log_ip, log_page, log_first_access, log_last_access, log_allowed)
|
|
VALUES
|
|
('$ip','$page','$now','$now',0)
|
|
";
|
|
|
|
$objDatabase->fxQuery($sql);
|
|
|
|
return false;
|
|
}
|
|
|
|
$sql = "
|
|
UPDATE dashboard_log
|
|
SET log_last_access = '$now'
|
|
WHERE log_ip = '$ip'
|
|
AND log_page = '$page'
|
|
";
|
|
|
|
$objDatabase->fxQuery($sql);
|
|
|
|
// ✅ prendre la 1re ligne peu importe l'index (0, 1, 27...)
|
|
$first = reset($rows);
|
|
|
|
return (isset($first['log_allowed']) && intval($first['log_allowed']) === 1);
|
|
}
|
|
function getPrixEpreuvesProchainsJours($nbJours = 4)
|
|
{
|
|
global $objDatabase;
|
|
|
|
$nbJours = intval($nbJours);
|
|
|
|
$sql = "
|
|
SELECT
|
|
pe.eve_id,
|
|
pa.ep_date_limite,
|
|
pe.eve_nom_fr,
|
|
e.epr_type_fr,
|
|
pa.ep_montant,
|
|
e.epr_id,
|
|
|
|
(
|
|
SELECT pa2.ep_montant
|
|
FROM inscriptions_epreuves_prix pa2
|
|
WHERE pa2.epr_id = pa.epr_id
|
|
AND pa2.ep_date_limite < pa.ep_date_limite
|
|
ORDER BY pa2.ep_date_limite DESC
|
|
LIMIT 1
|
|
) AS ep_montant_avant
|
|
|
|
FROM inscriptions_epreuves_prix pa
|
|
JOIN inscriptions_panier_evenements pe
|
|
ON pa.eve_id = pe.eve_id
|
|
JOIN inscriptions_panier_epreuves e
|
|
ON e.epr_id = pa.epr_id
|
|
WHERE pa.ep_date_limite BETWEEN CURRENT_DATE
|
|
AND DATE_ADD(CURRENT_DATE, INTERVAL $nbJours DAY)
|
|
GROUP BY pe.eve_id
|
|
ORDER BY pa.ep_date_limite, pa.eve_id, pa.epr_id
|
|
";
|
|
|
|
$rows = $objDatabase->fxGetResults($sql);
|
|
|
|
return $rows;
|
|
}
|
|
|
|
function getTopEventsMultiDays($nbJours = 2)
|
|
{
|
|
global $objDatabase;
|
|
|
|
$nbJours = intval($nbJours);
|
|
|
|
$dateFin = new DateTime();
|
|
$dateDebut = (new DateTime())->modify("-$nbJours days");
|
|
|
|
$result = [];
|
|
|
|
$periode = new DatePeriod(
|
|
$dateDebut,
|
|
new DateInterval('P1D'),
|
|
(clone $dateFin)->modify('+1 day')
|
|
);
|
|
|
|
$previousDayData = [];
|
|
|
|
foreach ($periode as $date) {
|
|
|
|
$jour = $date->format('Y-m-d');
|
|
|
|
$sql = "
|
|
SELECT
|
|
pa.eve_id,
|
|
pe.eve_nom_fr,
|
|
SUM(pa.ach_total) as total,
|
|
COUNT(*) as nbtransact
|
|
FROM inscriptions_panier_acheteurs pa
|
|
LEFT JOIN inscriptions_panier_evenements pe
|
|
ON pa.eve_id = pe.eve_id
|
|
WHERE pa.ach_total > 0
|
|
AND pa.sta_id = 3
|
|
AND DATE(pa.ach_maj) = '$jour'
|
|
GROUP BY pa.eve_id
|
|
ORDER BY total DESC
|
|
LIMIT 10
|
|
";
|
|
|
|
$rows = $objDatabase->fxGetResults($sql);
|
|
|
|
$dayData = [];
|
|
|
|
foreach ($rows as $row) {
|
|
|
|
$eveId = $row['eve_id'];
|
|
$total = floatval($row['total']);
|
|
|
|
$variation = null;
|
|
|
|
if (isset($previousDayData[$eveId]) && $previousDayData[$eveId] > 0) {
|
|
$variation = round((($total - $previousDayData[$eveId]) / $previousDayData[$eveId]) * 100); }
|
|
|
|
$dayData[$eveId] = $total;
|
|
|
|
$result[$jour][] = [
|
|
'eve_id' => $eveId,
|
|
'eve_nom_fr' => $row['eve_nom_fr'],
|
|
'total' => $total,
|
|
'transactions' => intval($row['nbtransact']),
|
|
'variation' => $variation
|
|
];
|
|
}
|
|
|
|
$previousDayData = $dayData;
|
|
}
|
|
$result = array_reverse($result, true);
|
|
return $result;
|
|
}
|
|
function fxGetDashboard()
|
|
{ // trouver labonnement
|
|
global $objDatabase;
|
|
$arrdb = null;
|
|
|
|
$sqldb = "
|
|
SELECT *
|
|
FROM dashboard
|
|
|
|
WHERE db_actif = 1
|
|
order by trie
|
|
";
|
|
|
|
$arrdb = $objDatabase->fxGetResults($sqldb);
|
|
|
|
return $arrdb;
|
|
}
|
|
|
|
function fxbackup($param)
|
|
{
|
|
|
|
try {
|
|
$pdo = new PDO('mysql:host=localhost;dbname=progiweb_prod;charset=utf8', 'progiweb_bd', '8dYhZ9Hcz{ZC');
|
|
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
|
} catch (Exception $e) {
|
|
echo('Erreur de connexion : ' . $e->getMessage());
|
|
}
|
|
|
|
// Exemple : tu peux remplacer ceci par $_GET['param'] si tu veux
|
|
$mot_cle = $param;
|
|
|
|
// Requête avec LIKE sécurisé
|
|
$sql = "
|
|
SELECT * FROM backup_logs
|
|
WHERE actif = 1 AND `mots` LIKE :mot
|
|
";
|
|
|
|
// Affiche la requête (à des fins de debug, optionnel)
|
|
|
|
|
|
$stmt = $pdo->prepare($sql);
|
|
|
|
// Exécuter la requête avec le mot-clé entouré de %
|
|
$stmt->execute(['mot' => '%' . $mot_cle . '%']);
|
|
|
|
// Récupération
|
|
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
|
|
|
if (!empty($results)) {
|
|
foreach ($results as $row) {
|
|
$style = ($row['status'] === 'fail') ? 'color:red;' : '';
|
|
echo "<p style=\"$style\">" .
|
|
htmlspecialchars($row['database_name']) . "<br> " .
|
|
htmlspecialchars($row['backup_date']) . " " .
|
|
htmlspecialchars($row['status']) .
|
|
"</p>";
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
|
|
function fxGetTicket($status)
|
|
{
|
|
// --- Configuration Jira ---
|
|
$jiraDomain = 'https://progiwebinc.atlassian.net';
|
|
$admin_email = 'stephan@progiweb.ca';
|
|
|
|
// ms1inscription v4
|
|
$api_token = 'ATATT3xFfGF0Er4BgSMTqYjcLEWCZAIQKy9Ja21yEQe5rQXVJD775Wrzi6aBJrZnm0SFgsoxAVyRMJk3LyzXiki2Ilzy09vAtmmkh37Z3rwBjVhT2HilCO8sruV0PeYlDNXlWAEtPxqyg0D3vBimSRieTGV3Fi-G9pj9_djyL6Pg3gFYuGEEapI=D0D802D6';
|
|
|
|
// --- Construire dynamiquement la JQL ---
|
|
$status = trim($status);
|
|
if ($status !== '') {
|
|
$status = addslashes($status);
|
|
$jql = sprintf('project = "SM" AND status = "%s"', $status);
|
|
} else {
|
|
$jql = 'project = "SM"';
|
|
}
|
|
|
|
// --- Endpoint Jira ---
|
|
$url = $jiraDomain . '/rest/api/3/search/jql';
|
|
|
|
// --- Requête JSON ---
|
|
$payload = [
|
|
'jql' => $jql,
|
|
'maxResults' => 100,
|
|
'fields' => ['id'] // champ minimal requis
|
|
];
|
|
|
|
// --- cURL ---
|
|
$ch = curl_init($url);
|
|
curl_setopt_array($ch, [
|
|
CURLOPT_RETURNTRANSFER => true,
|
|
CURLOPT_HTTPHEADER => [
|
|
'Authorization: Basic ' . base64_encode("$admin_email:$api_token"),
|
|
'Content-Type: application/json',
|
|
'Accept: application/json'
|
|
],
|
|
CURLOPT_POST => true,
|
|
CURLOPT_POSTFIELDS => json_encode($payload),
|
|
CURLOPT_TIMEOUT => 15
|
|
]);
|
|
|
|
$response = curl_exec($ch);
|
|
$curl_error = curl_error($ch);
|
|
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
|
curl_close($ch);
|
|
|
|
// --- Sortie simple, comme avant ---
|
|
if ($curl_error) {
|
|
echo "0\n";
|
|
return;
|
|
}
|
|
|
|
if ($http_code === 200) {
|
|
$data = json_decode($response, true);
|
|
if (isset($data['issues'])) {
|
|
echo count($data['issues']) . "\n";
|
|
return;
|
|
}
|
|
}
|
|
|
|
// Si erreur ou rien trouvé
|
|
echo "0\n";
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function fxGetTicketold($param){
|
|
|
|
|
|
// Configuration Jira
|
|
$jiraDomain = 'https://progiwebinc.atlassian.net'; // Domaine Jira
|
|
$admin_email = 'stephan@progiweb.ca'; // Email de l'administrateur
|
|
$api_token = 'ATATT3xFfGF0DuhOhRUxFlj2hFpLuzYGapJIrhMETB35NnLFi1TyxDszp3tTa8MaadTpT72GfDk9FOpDm07m6HbdXoQ9plDeRvB6OwRnD19VrIqA8M3HmDGgf_MWR7Pwk5731ahbgb4UBdRgj-ICBqt9A0SjJPnnoTfu4ECVh51HjM0RsekOmeM=908B030C'; // Jeton d'API sécurisé
|
|
|
|
// Construire la requête JQL pour les tickets ouverts
|
|
$jqlQuery = $param.' AND project = "SM"'; // Modifiez le projet si nécessaire
|
|
|
|
// Initialisation de cURL
|
|
$ch = curl_init();
|
|
|
|
// Construire l'URL de l'API de recherche
|
|
$url = $jiraDomain . '/rest/api/3/search?jql=' . urlencode($jqlQuery) . '&maxResults=0';
|
|
|
|
// Configurer les options cURL
|
|
curl_setopt_array($ch, [
|
|
CURLOPT_URL => $url,
|
|
CURLOPT_RETURNTRANSFER => true,
|
|
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);
|
|
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
|
curl_close($ch);
|
|
|
|
// Vérifier la réponse
|
|
if ($http_code === 200) {
|
|
$data = json_decode($response, true);
|
|
$openTicketsCount = $data['total']; // Le nombre total de tickets ouverts
|
|
echo "$openTicketsCount\n";
|
|
} else {
|
|
echo "Erreur : Code HTTP $http_code\n";
|
|
echo "Réponse : $response\n";
|
|
}
|
|
|
|
|
|
}
|
|
function fxGetSlack()
|
|
{
|
|
|
|
// Token d'accès Slack (OAuth)
|
|
$slackToken = 'xoxe.xoxp-1-Mi0yLTUyMDkwNTY3Nzc3Ni01MjEwMzgwMDc0MjUtODA1NDI4OTYxODE1MC04MDU0Mjk5OTc4NDcwLWFiM2ExM2U5NzRlNmZkZGE3MmFkMWUyODg3ZTc3ODEzZjExMDVhZTE2ZGMwZjE2MWUxNzEzZmQ2MjY1YzA4NDM'; // Remplacez par votre token OAuth
|
|
|
|
// ID du canal Slack à récupérer (par exemple, 'C01234567')
|
|
$channelId = 'CFWKAFZFS';
|
|
|
|
// URL de l'API Slack
|
|
$url = "https://slack.com/api/conversations.history?channel=$channelId";
|
|
|
|
// Initialisation cURL
|
|
$ch = curl_init($url);
|
|
|
|
// Configuration cURL
|
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
|
curl_setopt($ch, CURLOPT_HTTPHEADER, [
|
|
"Authorization: Bearer $slackToken",
|
|
"Content-Type: application/json"
|
|
]);
|
|
|
|
// Exécuter la requête
|
|
$response = curl_exec($ch);
|
|
curl_close($ch);
|
|
|
|
// Décoder la réponse JSON
|
|
$data = json_decode($response, true);
|
|
|
|
// Vérifier si la requête a réussi
|
|
if (isset($data['ok']) && $data['ok'] === true) {
|
|
echo "<h2>Messages du Canal</h2>";
|
|
foreach ($data['messages'] as $message) {
|
|
echo "<p><strong>Message:</strong> " . htmlspecialchars($message['text']) . "</p>";
|
|
}
|
|
} else {
|
|
echo "<p>Erreur : " . htmlspecialchars($data['error'] ?? 'Inconnue') . "</p>";
|
|
}
|
|
|
|
|
|
}
|
|
|
|
function fxGetUptime(){
|
|
|
|
// Votre clé API UptimeRobot
|
|
$apiKey = 'u428511-bc7dc8e62a02e78603ec46b2';
|
|
|
|
// L'URL de l'API UptimeRobot
|
|
$url = 'https://api.uptimerobot.com/v2/getMonitors';
|
|
|
|
// Initialisation de cURL
|
|
$curl = curl_init();
|
|
|
|
// Configuration de la requête cURL
|
|
curl_setopt_array($curl, [
|
|
CURLOPT_URL => $url,
|
|
CURLOPT_RETURNTRANSFER => true,
|
|
CURLOPT_POST => true,
|
|
CURLOPT_POSTFIELDS => http_build_query([
|
|
'api_key' => $apiKey,
|
|
'format' => 'json'
|
|
]),
|
|
CURLOPT_HTTPHEADER => [
|
|
'Content-Type: application/x-www-form-urlencoded'
|
|
]
|
|
]);
|
|
|
|
// Exécution de la requête et récupération de la réponse
|
|
$response = curl_exec($curl);
|
|
|
|
// Gestion des erreurs
|
|
if (curl_errno($curl)) {
|
|
echo 'Erreur cURL : ' . curl_error($curl);
|
|
exit;
|
|
}
|
|
|
|
// Fermeture de cURL
|
|
curl_close($curl);
|
|
|
|
// Décodage de la réponse JSON
|
|
$data = json_decode($response, true);
|
|
|
|
// Vérification et affichage des résultats
|
|
if (isset($data['stat']) && $data['stat'] === 'ok') {
|
|
// echo "Liste des serveurs surveillés :\n";
|
|
foreach ($data['monitors'] as $monitor) {
|
|
if (substr($monitor['friendly_name'] , 0, 2)=="zz"){}else{
|
|
echo "<span style='font-size: small;'>" . $monitor['friendly_name'] . "</span>";
|
|
|
|
if($monitor['status'] == 2){
|
|
echo "<span style='color: darkgreen; font-size: 1em;'>En ligne</span><br>";
|
|
}else{
|
|
echo "<span style='color: red; font-size: 1em;'>Hors ligne</span><br>";
|
|
}
|
|
|
|
// echo " Uptime : " . $monitor['alltimeuptimeratio'] . "%\n";
|
|
// echo "---------------------------\n";
|
|
} }
|
|
} else {
|
|
echo "Erreur : " . ($data['error']['message'] ?? 'Inconnue') . "\n";
|
|
}
|
|
|
|
|
|
}
|
|
function fxGetAgenda(){
|
|
// Clé API Google
|
|
$apiKey = "AIzaSyDTNqa5abH5-OBG_AsrBfkNulV4E13bCv4";
|
|
|
|
// ID du calendrier (remplacez par un ID valide)
|
|
$calendarId = "c_3efceaf4b459c62dac1a19f8f6f2f95c656d03158d9b2c135cef641cc7c48e67@group.calendar.google.com";
|
|
|
|
// URL de l'API Google Calendar
|
|
$apiUrl = "https://www.googleapis.com/calendar/v3/calendars/{$calendarId}/events?key={$apiKey}";
|
|
// Déterminer la période : aujourd'hui à 30 jours
|
|
$timeMin = date('Y-m-d\T00:00:00\Z'); // Aujourd'hui à minuit UTC
|
|
$timeMax = date('Y-m-d\T23:59:59\Z', strtotime('+30 days')); // Dans 30 jours à 23h59 UTC
|
|
|
|
// Paramètres pour la requête
|
|
$params = [
|
|
'maxResults' => 10,
|
|
'orderBy' => 'startTime',
|
|
'singleEvents' => 'true',
|
|
'timeMin' => $timeMin,
|
|
'timeMax' => $timeMax,
|
|
];
|
|
$apiUrl .= '&' . http_build_query($params);
|
|
|
|
// Initialiser cURL
|
|
$ch = curl_init();
|
|
curl_setopt($ch, CURLOPT_URL, $apiUrl);
|
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
|
|
|
// Exécuter la requête
|
|
$response = curl_exec($ch);
|
|
curl_close($ch);
|
|
|
|
// Décoder la réponse JSON
|
|
$data = json_decode($response, true);
|
|
|
|
if (!empty($data['items'])) {
|
|
|
|
foreach ($data['items'] as $event) {
|
|
$summary = $event['summary'] ?? '(Sans titre)';
|
|
$start = $event['start']['dateTime'] ?? $event['start']['date'] ?? '(Pas de date)';
|
|
echo "<p><strong>{$summary}</strong><br>";
|
|
echo "Début : {$start}</p>";
|
|
}
|
|
} else {
|
|
echo "Aucun événement trouvé.";
|
|
}
|
|
|
|
}
|
|
|
|
|
|
function getAccessToken($credentialsPath)
|
|
{
|
|
// Lire les informations d'identification JSON
|
|
$credentials = json_decode(file_get_contents($credentialsPath), true);
|
|
|
|
// Préparer les données pour la requête
|
|
$postData = [
|
|
'grant_type' => 'urn:ietf:params:oauth:grant-type:jwt-bearer',
|
|
'assertion' => createJwt($credentials)
|
|
];
|
|
|
|
// Faire une requête cURL pour obtenir le jeton
|
|
$ch = curl_init();
|
|
curl_setopt($ch, CURLOPT_URL, 'https://oauth2.googleapis.com/token');
|
|
curl_setopt($ch, CURLOPT_POST, true);
|
|
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postData));
|
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
|
curl_setopt($ch, CURLOPT_HTTPHEADER, [
|
|
'Content-Type: application/x-www-form-urlencoded',
|
|
]);
|
|
|
|
$response = curl_exec($ch);
|
|
curl_close($ch);
|
|
|
|
$response = json_decode($response, true);
|
|
|
|
if (isset($response['access_token'])) {
|
|
return $response['access_token'];
|
|
} else {
|
|
die('Erreur lors de la récupération du jeton d\'accès.');
|
|
}
|
|
}
|
|
|
|
function createJwt($credentials)
|
|
{
|
|
$header = [
|
|
'alg' => 'RS256',
|
|
'typ' => 'JWT',
|
|
];
|
|
|
|
$claims = [
|
|
'iss' => $credentials['client_email'],
|
|
'scope' => 'https://www.googleapis.com/auth/analytics.readonly',
|
|
'aud' => 'https://oauth2.googleapis.com/token',
|
|
'exp' => time() + 3600,
|
|
'iat' => time(),
|
|
];
|
|
|
|
$base64UrlHeader = str_replace(['+', '/', '='], ['-', '_', ''], base64_encode(json_encode($header)));
|
|
$base64UrlPayload = str_replace(['+', '/', '='], ['-', '_', ''], base64_encode(json_encode($claims)));
|
|
|
|
$signature = '';
|
|
openssl_sign($base64UrlHeader . "." . $base64UrlPayload, $signature, $credentials['private_key'], 'SHA256');
|
|
|
|
$base64UrlSignature = str_replace(['+', '/', '='], ['-', '_', ''], base64_encode($signature));
|
|
|
|
return $base64UrlHeader . "." . $base64UrlPayload . "." . $base64UrlSignature;
|
|
}
|
|
|
|
function getAnalyticsData($accessToken, $propertyId) {
|
|
$url = "https://analyticsdata.googleapis.com/v1beta/properties/$propertyId:runReport";
|
|
|
|
$postData = json_encode([
|
|
'dateRanges' => [
|
|
['startDate' => '7daysAgo', 'endDate' => 'today'],
|
|
],
|
|
'dimensions' => [
|
|
['name' => 'date'],
|
|
],
|
|
'metrics' => [
|
|
['name' => 'activeUsers'],
|
|
],
|
|
]);
|
|
|
|
$ch = curl_init();
|
|
curl_setopt($ch, CURLOPT_URL, $url);
|
|
curl_setopt($ch, CURLOPT_POST, true);
|
|
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
|
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
|
curl_setopt($ch, CURLOPT_HTTPHEADER, [
|
|
'Authorization: Bearer ' . $accessToken,
|
|
'Content-Type: application/json',
|
|
]);
|
|
|
|
$response = curl_exec($ch);
|
|
curl_close($ch);
|
|
|
|
return json_decode($response, true);
|
|
}
|
|
function analy7jours($propertyId)
|
|
{
|
|
$credentialsPath = '../superadm/analytique-446019-0f3ca3c0452f.json';
|
|
|
|
|
|
$accessToken = getAccessToken($credentialsPath);
|
|
$data = getAnalyticsData($accessToken, $propertyId);
|
|
return $data;
|
|
}
|