@@ -309,14 +309,23 @@ public function widgetEventDonation(Request $request, Response $response, array
309309 throw new Exception ("Aucun widget trouvé pour le Event ID fourni. " );
310310 }
311311
312- $ data = $ this ->fetchEventDonationData ($ eventGuid );
312+ try {
313+ $ data = $ this ->fetchEventDonationData ($ eventGuid );
314+ $ currentAmount = $ data ['cacheData ' ]['amount ' ];
315+ $ event = $ data ['event ' ];
316+ } catch (Exception $ e ) {
317+ error_log ('[WidgetEventDonation] Erreur API init pour event ' . $ eventGuid . ' : ' . $ e ->getMessage ());
318+ $ event = $ this ->eventRepository ->selectByGuid ($ eventGuid );
319+ $ cacheData = $ this ->widgetRepository ->selectEventDonationWidgetCacheData ($ event );
320+ $ currentAmount = $ cacheData ['amount ' ] ?? 0 ;
321+ }
313322
314323 return $ this ->view ->render ($ response , 'widget/donation.html.twig ' , [
315324 'donationGoalWidget ' => $ donationGoalWidget ,
316- 'currentAmount ' => $ data [ ' cacheData ' ][ ' amount ' ] ,
317- 'goal ' => $ data [ ' event ' ] ->goal ,
325+ 'currentAmount ' => $ currentAmount ,
326+ 'goal ' => $ event ->goal ,
318327 'event ' => 1 ,
319- 'isTestMode ' => (bool ) $ data [ ' event ' ] ->is_test_mode ,
328+ 'isTestMode ' => (bool ) $ event ->is_test_mode ,
320329 ]);
321330 }
322331
@@ -362,21 +371,27 @@ public function widgetAlert(Request $request, Response $response, array $args):
362371 ?? ['continuation_token ' => '' ];
363372
364373 if (!$ this ->widgetRepository ->isCacheFresh ($ cacheData , $ this ->cacheTtl )) {
365- $ result = $ this ->apiWrapper ->getAllOrders (
366- $ charityStream ->organization_slug ,
367- $ charityStream ->form_slug ,
368- 0 ,
369- $ cacheData ['continuation_token ' ],
370- );
371-
372- if ($ cacheData ['continuation_token ' ] !== $ result ['continuation_token ' ]) {
373- $ this ->widgetRepository ->updateAlertWidgetCacheData ($ charityStream ->guid , [
374- 'continuation_token ' => $ result ['continuation_token ' ],
375- ]);
376- } else {
377- $ this ->widgetRepository ->updateAlertWidgetCacheData ($ charityStream ->guid , [
378- 'continuation_token ' => $ cacheData ['continuation_token ' ],
379- ]);
374+ try {
375+ $ result = $ this ->apiWrapper ->getAllOrders (
376+ $ charityStream ->organization_slug ,
377+ $ charityStream ->form_slug ,
378+ 0 ,
379+ $ cacheData ['continuation_token ' ],
380+ );
381+
382+ if ($ cacheData ['continuation_token ' ] !== $ result ['continuation_token ' ]) {
383+ $ this ->widgetRepository ->updateAlertWidgetCacheData ($ charityStream ->guid , [
384+ 'continuation_token ' => $ result ['continuation_token ' ],
385+ ]);
386+ } else {
387+ $ this ->widgetRepository ->updateAlertWidgetCacheData ($ charityStream ->guid , [
388+ 'continuation_token ' => $ cacheData ['continuation_token ' ],
389+ ]);
390+ }
391+ } catch (Exception $ e ) {
392+ // Token invalide ou erreur API : on rend le widget avec le cache existant
393+ // Le polling (fetch) réessaiera automatiquement
394+ error_log ('[WidgetAlert] Erreur API init pour stream ' . $ charityStream ->guid . ' : ' . $ e ->getMessage ());
380395 }
381396 }
382397 }
@@ -443,7 +458,12 @@ public function widgetAlertFetch(Request $request, Response $response, array $ar
443458
444459 return $ this ->jsonResponse ($ response , $ result );
445460 } catch (Exception $ e ) {
446- return $ this ->jsonError ($ response , 'Impossible de récupérer les commandes. ' , 500 );
461+ $ status = $ e ->getCode () === 401 ? 401 : 500 ;
462+ $ message = $ status === 401
463+ ? 'Token invalide ou expiré pour ce stream. Reconnectez l \'association. '
464+ : 'Impossible de récupérer les commandes. ' ;
465+ error_log ('[WidgetAlertFetch] Erreur pour stream ' . $ charityStreamId . ' : ' . $ e ->getMessage ());
466+ return $ this ->jsonError ($ response , $ message , $ status );
447467 }
448468 }
449469
@@ -458,14 +478,24 @@ public function widgetDonation(Request $request, Response $response, array $args
458478 throw new Exception ("Aucun widget trouvé pour le Charity Stream ID fourni. " );
459479 }
460480
461- $ data = $ this ->fetchStreamDonationData ($ streamGuid );
481+ try {
482+ $ data = $ this ->fetchStreamDonationData ($ streamGuid );
483+ $ currentAmount = $ data ['result ' ]['amount ' ];
484+ $ stream = $ data ['stream ' ];
485+ } catch (Exception $ e ) {
486+ // Token invalide ou erreur API : on rend le widget avec le cache existant
487+ error_log ('[WidgetDonation] Erreur API init pour stream ' . $ streamGuid . ' : ' . $ e ->getMessage ());
488+ $ stream = $ this ->streamRepository ->selectByGuid ($ streamGuid );
489+ $ cacheData = $ this ->widgetRepository ->selectStreamDonationWidgetCacheData ($ stream );
490+ $ currentAmount = $ cacheData ['amount ' ] ?? 0 ;
491+ }
462492
463493 return $ this ->view ->render ($ response , 'widget/donation.html.twig ' , [
464494 'donationGoalWidget ' => $ donationGoalWidget ,
465- 'currentAmount ' => $ data [ ' result ' ][ ' amount ' ] ,
466- 'goal ' => $ data [ ' stream ' ] ->goal ,
495+ 'currentAmount ' => $ currentAmount ,
496+ 'goal ' => $ stream ->goal ,
467497 'stream ' => 1 ,
468- 'isTestMode ' => (bool ) $ data [ ' stream ' ] ->is_test_mode ,
498+ 'isTestMode ' => (bool ) $ stream ->is_test_mode ,
469499 ]);
470500 }
471501
@@ -485,7 +515,12 @@ public function widgetDonationFetch(Request $request, Response $response, array
485515 $ data = $ this ->fetchStreamDonationData ($ charityStreamId );
486516 return $ this ->jsonResponse ($ response , $ data ['result ' ]);
487517 } catch (Exception $ e ) {
488- return $ this ->jsonError ($ response , 'Impossible de récupérer les commandes. ' , 500 );
518+ $ status = $ e ->getCode () === 401 ? 401 : 500 ;
519+ $ message = $ status === 401
520+ ? 'Token invalide ou expiré pour ce stream. Reconnectez l \'association. '
521+ : 'Impossible de récupérer les commandes. ' ;
522+ error_log ('[WidgetDonationFetch] Erreur pour stream ' . $ charityStreamId . ' : ' . $ e ->getMessage ());
523+ return $ this ->jsonError ($ response , $ message , $ status );
489524 }
490525 }
491526
@@ -500,17 +535,29 @@ public function widgetStreamCard(Request $request, Response $response, array $ar
500535 throw new Exception ("Aucun widget card trouvé pour le Charity Stream ID fourni. " );
501536 }
502537
503- $ data = $ this ->fetchStreamCardData ($ streamGuid );
538+ try {
539+ $ data = $ this ->fetchStreamCardData ($ streamGuid );
540+ $ currentAmount = $ data ['amount ' ];
541+ $ donors = $ data ['donors ' ];
542+ $ stream = $ data ['stream ' ];
543+ } catch (Exception $ e ) {
544+ // Token invalide ou erreur API : on rend le widget avec le cache existant
545+ error_log ('[WidgetCard] Erreur API init pour stream ' . $ streamGuid . ' : ' . $ e ->getMessage ());
546+ $ stream = $ this ->streamRepository ->selectByGuid ($ streamGuid );
547+ $ cacheData = $ this ->widgetRepository ->selectStreamCardWidgetCacheData ($ stream );
548+ $ currentAmount = $ cacheData ['amount ' ] ?? 0 ;
549+ $ donors = $ cacheData ['donors ' ] ?? 0 ;
550+ }
504551
505552 return $ this ->view ->render ($ response , 'widget/card.html.twig ' , [
506553 'cardWidget ' => $ cardWidget ,
507554 'cardWidgetPictureUrl ' => $ cardWidget ->image ? $ this ->fileManager ->getPictureUrl ($ cardWidget ->image ) : null ,
508- 'currentAmount ' => $ data [ ' amount ' ] ,
509- 'donorCount ' => $ data [ ' donors ' ] ,
510- 'percentage ' => $ this ->calculatePercentage ($ data [ ' amount ' ] , $ data [ ' stream ' ] ->goal ),
511- 'goal ' => $ data [ ' stream ' ] ->goal ?: 1 ,
555+ 'currentAmount ' => $ currentAmount ,
556+ 'donorCount ' => $ donors ,
557+ 'percentage ' => $ this ->calculatePercentage ($ currentAmount , $ stream ->goal ),
558+ 'goal ' => $ stream ->goal ?: 1 ,
512559 'stream ' => 1 ,
513- 'isTestMode ' => (bool ) $ data [ ' stream ' ] ->is_test_mode ,
560+ 'isTestMode ' => (bool ) $ stream ->is_test_mode ,
514561 ]);
515562 }
516563
@@ -525,7 +572,12 @@ public function widgetStreamCardFetch(Request $request, Response $response, arra
525572 $ data = $ this ->fetchStreamCardData ($ charityStreamId );
526573 return $ this ->jsonResponse ($ response , ['amount ' => $ data ['amount ' ], 'donors ' => $ data ['donors ' ]]);
527574 } catch (Exception $ e ) {
528- return $ this ->jsonError ($ response , 'Impossible de récupérer les données. ' , 500 );
575+ $ status = $ e ->getCode () === 401 ? 401 : 500 ;
576+ $ message = $ status === 401
577+ ? 'Token invalide ou expiré pour ce stream. Reconnectez l \'association. '
578+ : 'Impossible de récupérer les données. ' ;
579+ error_log ('[WidgetCardFetch] Erreur pour stream ' . $ charityStreamId . ' : ' . $ e ->getMessage ());
580+ return $ this ->jsonError ($ response , $ message , $ status );
529581 }
530582 }
531583
@@ -540,17 +592,28 @@ public function widgetEventCard(Request $request, Response $response, array $arg
540592 throw new Exception ("Aucun widget card trouvé pour le Event ID fourni. " );
541593 }
542594
543- $ data = $ this ->fetchEventCardData ($ eventGuid );
595+ try {
596+ $ data = $ this ->fetchEventCardData ($ eventGuid );
597+ $ currentAmount = $ data ['amount ' ];
598+ $ donors = $ data ['donors ' ];
599+ $ event = $ data ['event ' ];
600+ } catch (Exception $ e ) {
601+ error_log ('[WidgetEventCard] Erreur API init pour event ' . $ eventGuid . ' : ' . $ e ->getMessage ());
602+ $ event = $ this ->eventRepository ->selectByGuid ($ eventGuid );
603+ $ cacheData = $ this ->widgetRepository ->selectEventCardWidgetCacheData ($ event );
604+ $ currentAmount = $ cacheData ['amount ' ] ?? 0 ;
605+ $ donors = $ cacheData ['donors ' ] ?? 0 ;
606+ }
544607
545608 return $ this ->view ->render ($ response , 'widget/card.html.twig ' , [
546609 'cardWidget ' => $ cardWidget ,
547610 'cardWidgetPictureUrl ' => $ cardWidget ->image ? $ this ->fileManager ->getPictureUrl ($ cardWidget ->image ) : null ,
548- 'currentAmount ' => $ data [ ' amount ' ] ,
549- 'donorCount ' => $ data [ ' donors ' ] ,
550- 'percentage ' => $ this ->calculatePercentage ($ data [ ' amount ' ] , $ data [ ' event ' ] ->goal ),
551- 'goal ' => $ data [ ' event ' ] ->goal ?: 1 ,
611+ 'currentAmount ' => $ currentAmount ,
612+ 'donorCount ' => $ donors ,
613+ 'percentage ' => $ this ->calculatePercentage ($ currentAmount , $ event ->goal ),
614+ 'goal ' => $ event ->goal ?: 1 ,
552615 'event ' => 1 ,
553- 'isTestMode ' => (bool ) $ data [ ' event ' ] ->is_test_mode ,
616+ 'isTestMode ' => (bool ) $ event ->is_test_mode ,
554617 ]);
555618 }
556619
0 commit comments