pwa.class.php 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. <?php
  2. /**
  3. * Classe pwa
  4. *
  5. * Cette classe gère les fonctionnalités liées aux Progressive Web Apps (PWA), telles que le service worker et le manifeste.
  6. */
  7. class pwa
  8. {
  9. /**
  10. * @var string Nom du fichier du service worker.
  11. */
  12. private static $serviceWorker = "serviceWorker.js";
  13. /**
  14. * Récupère le fichier manifeste approprié en fonction du domaine.
  15. *
  16. * @return string Nom du fichier manifeste.
  17. */
  18. private static function getManifeste()
  19. {
  20. if (!empty($_SERVER['HTTP_HOST'])) {
  21. switch ($_SERVER['HTTP_HOST']) {
  22. case DOMAIN_CONTROL:
  23. return "manifest-control.json";
  24. break;
  25. case DOMAIN_EVENTS:
  26. return "manifest-events.json";
  27. break;
  28. case DOMAIN_CMS:
  29. return "manifest-cms.json";
  30. break;
  31. }
  32. } else {
  33. return "manifest-cms.json";
  34. }
  35. }
  36. /**
  37. * Affiche le script pour enregistrer ou désenregistrer le service worker.
  38. */
  39. public static function printServiceWorker()
  40. {
  41. // Récupérer le nonce CSP si disponible
  42. $nonce = '';
  43. if (class_exists('securityHeaders') && method_exists('securityHeaders', 'getNonce')) {
  44. $nonce = ' nonce="' . securityHeaders::getNonce() . '"';
  45. }
  46. echo '<script' . $nonce . '>';
  47. if (PWA == 1) {
  48. echo ' if("serviceWorker" in navigator){
  49. navigator.serviceWorker.register("/' . self::$serviceWorker . '");
  50. }';
  51. } else {
  52. echo ' navigator.serviceWorker.getRegistrations().then(function(registrations) {
  53. for(let registration of registrations) {
  54. registration.unregister();
  55. }
  56. });';
  57. }
  58. echo '</script>';
  59. }
  60. /**
  61. * Affiche le lien vers le fichier manifeste dans le HTML.
  62. */
  63. public static function printManifeste()
  64. {
  65. if (PWA == 1) {
  66. echo '<link rel="manifest" href="' . self::getManifeste() . '">';
  67. }
  68. }
  69. }