Refonte jauge : affichage des soutiens réguliers vers objectif 500
- Remplace le montant collecté par le nombre de soutiens réguliers actifs (plans Donorbox status=active + 98 soutiens historiques) avec objectif 500 - Proxy PHP : appel à /api/v1/plans pour compter les plans actifs toutes campagnes confondues, avec pagination et détail plans_detail dans la réponse - Jauge initialisée à 19.6% (98/500) en fallback si l'API est indisponible - Versions FR et EN mises à jour Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
f0591a20ab
commit
97766e6bb7
5 changed files with 301 additions and 113 deletions
12
api/cache/donorbox_data.json
vendored
12
api/cache/donorbox_data.json
vendored
|
|
@ -1,8 +1,14 @@
|
|||
{
|
||||
"total_raised": "35675.25",
|
||||
"total_raised": "35825.53",
|
||||
"goal_amt": "50000.0",
|
||||
"currency": "eur",
|
||||
"donations_count": 521,
|
||||
"donations_count": 533,
|
||||
"recurring_donors_count": 56,
|
||||
"campaign_name": "Soutenez Index avant le 31 d\u00e9cembre 2025 !",
|
||||
"updated_at": "2026-02-27T12:51:20+01:00"
|
||||
"updated_at": "2026-03-06T07:41:46+00:00",
|
||||
"DEBUG_plans_breakdown": {
|
||||
"cancelled|monthly": 36,
|
||||
"active|monthly": 56,
|
||||
"failed|monthly": 19
|
||||
}
|
||||
}
|
||||
|
|
@ -128,14 +128,56 @@ if ($campaign === null) {
|
|||
}
|
||||
}
|
||||
|
||||
// Compter tous les donateurs réguliers actifs (toutes campagnes confondues)
|
||||
$recurring_count = 0;
|
||||
$plans_page = 1;
|
||||
do {
|
||||
$plans_url = 'https://donorbox.org/api/v1/plans?per_page=100&page=' . $plans_page;
|
||||
|
||||
$ch_plans = curl_init();
|
||||
curl_setopt_array($ch_plans, [
|
||||
CURLOPT_URL => $plans_url,
|
||||
CURLOPT_RETURNTRANSFER => true,
|
||||
CURLOPT_USERPWD => DONORBOX_EMAIL . ':' . DONORBOX_API_KEY,
|
||||
CURLOPT_HTTPAUTH => CURLAUTH_BASIC,
|
||||
CURLOPT_HTTPHEADER => ['Content-Type: application/json', 'User-Agent: Index-NGO-Website'],
|
||||
CURLOPT_TIMEOUT => 10,
|
||||
CURLOPT_SSL_VERIFYPEER => true
|
||||
]);
|
||||
|
||||
$plans_response = curl_exec($ch_plans);
|
||||
$plans_http_code = curl_getinfo($ch_plans, CURLINFO_HTTP_CODE);
|
||||
curl_close($ch_plans);
|
||||
|
||||
if ($plans_response === false || $plans_http_code !== 200) {
|
||||
break;
|
||||
}
|
||||
|
||||
$plans = json_decode($plans_response, true);
|
||||
if (!is_array($plans)) break;
|
||||
|
||||
foreach ($plans as $plan) {
|
||||
if (isset($plan['status']) && $plan['status'] === 'active') {
|
||||
$recurring_count++;
|
||||
}
|
||||
$status = $plan['status'] ?? 'unknown';
|
||||
$type = $plan['type'] ?? 'unknown';
|
||||
$plans_detail[$status . '|' . $type] = ($plans_detail[$status . '|' . $type] ?? 0) + 1;
|
||||
}
|
||||
|
||||
$plans_page++;
|
||||
} while (count($plans) === 100);
|
||||
|
||||
// Extraire uniquement les données nécessaires
|
||||
$filteredData = [
|
||||
'total_raised' => $campaign['total_raised'] ?? 0,
|
||||
'goal_amt' => $campaign['goal_amt'] ?? 50000,
|
||||
'currency' => $campaign['currency'] ?? 'EUR',
|
||||
'donations_count' => $campaign['donations_count'] ?? 0,
|
||||
'recurring_donors_count' => $recurring_count,
|
||||
'campaign_name' => $campaign['name'] ?? 'Unknown',
|
||||
'updated_at' => date('c')
|
||||
'updated_at' => date('c'),
|
||||
'plans_detail' => $plans_detail ?? []
|
||||
];
|
||||
|
||||
$jsonResponse = json_encode($filteredData, JSON_PRETTY_PRINT);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue