From 507d77246cda5500d5ba61fa427bc74da6a497b5 Mon Sep 17 00:00:00 2001 From: Sam DEPARDIEU Date: Tue, 7 Jul 2026 22:55:15 +0200 Subject: [PATCH] =?UTF-8?q?feat:=20page=20publique=20de=20t=C3=A9l=C3=A9ch?= =?UTF-8?q?argement=20des=20applications=20mobiles?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Page /telecharger avec deux cartes (Android / iOS). Pour chaque plateforme, utilise en priorité un lien de store (MOBILE_*_URL) sinon le binaire déposé dans public/downloads/ (.apk / .ipa), et affiche "Bientôt disponible" à défaut. - config/mobile.php + .env.example (URLs/versions) - DownloadController + vue telecharger + lien dans le header (public) - public/downloads/ (README) ; binaires ignorés par git - tests: accès public, lien store prioritaire, indisponibilité Co-Authored-By: Claude Opus 4.8 --- .env.example | 8 +++ .gitignore | 2 + app/Http/Controllers/DownloadController.php | 43 ++++++++++++ config/mobile.php | 29 ++++++++ public/downloads/README.md | 25 +++++++ resources/views/layout/header.blade.php | 3 + resources/views/telecharger.blade.php | 78 +++++++++++++++++++++ routes/web.php | 4 ++ tests/Feature/TelechargementTest.php | 37 ++++++++++ 9 files changed, 229 insertions(+) create mode 100644 app/Http/Controllers/DownloadController.php create mode 100644 config/mobile.php create mode 100644 public/downloads/README.md create mode 100644 resources/views/telecharger.blade.php create mode 100644 tests/Feature/TelechargementTest.php diff --git a/.env.example b/.env.example index 2d93b2e..862b6b2 100644 --- a/.env.example +++ b/.env.example @@ -76,4 +76,12 @@ GITEA_URL=https://gitea.sam-coffre.duckdns.org GITEA_TOKEN= GITEA_REPO=Groupe1/Ressources-relationnel +# --- Applications mobiles (page /telecharger) --- +# Laisser vide pour servir les fichiers de public/downloads/ (.apk / .ipa), +# ou renseigner un lien de store / TestFlight (prioritaire sur le fichier local). +MOBILE_ANDROID_URL= +MOBILE_IOS_URL= +MOBILE_ANDROID_VERSION=1.0.0 +MOBILE_IOS_VERSION=1.0.0 + VITE_APP_NAME="${APP_NAME}" diff --git a/.gitignore b/.gitignore index 282c56b..6fca7e8 100644 --- a/.gitignore +++ b/.gitignore @@ -18,6 +18,8 @@ /public/build /public/hot /public/storage +/public/downloads/*.apk +/public/downloads/*.ipa /storage/*.key /storage/pail /vendor diff --git a/app/Http/Controllers/DownloadController.php b/app/Http/Controllers/DownloadController.php new file mode 100644 index 0000000..3d7d6a9 --- /dev/null +++ b/app/Http/Controllers/DownloadController.php @@ -0,0 +1,43 @@ + $this->resoudre('android'), + 'ios' => $this->resoudre('ios'), + ]); + } + + /** + * Détermine, pour une plateforme, le lien de téléchargement et sa disponibilité. + * + * @return array{version: string, url: string|null, disponible: bool} + */ + private function resoudre(string $plateforme): array + { + $config = config("mobile.{$plateforme}"); + if (! is_array($config)) { + $config = []; + } + + $version = is_string($config['version'] ?? null) ? $config['version'] : '1.0.0'; + $url = (is_string($config['url'] ?? null) && $config['url'] !== '') ? $config['url'] : null; + $file = is_string($config['file'] ?? null) ? $config['file'] : null; + + // À défaut d'URL explicite, on propose le fichier précompilé s'il existe. + if ($url === null && $file !== null && file_exists(public_path($file))) { + $url = asset($file); + } + + return [ + 'version' => $version, + 'url' => $url, + 'disponible' => $url !== null, + ]; + } +} diff --git a/config/mobile.php b/config/mobile.php new file mode 100644 index 0000000..de8946a --- /dev/null +++ b/config/mobile.php @@ -0,0 +1,29 @@ + [ + 'version' => env('MOBILE_ANDROID_VERSION', '1.0.0'), + 'url' => env('MOBILE_ANDROID_URL'), + 'file' => 'downloads/ressources-relationnelles.apk', + ], + + 'ios' => [ + 'version' => env('MOBILE_IOS_VERSION', '1.0.0'), + 'url' => env('MOBILE_IOS_URL'), + 'file' => 'downloads/ressources-relationnelles.ipa', + ], + +]; diff --git a/public/downloads/README.md b/public/downloads/README.md new file mode 100644 index 0000000..6f79b7d --- /dev/null +++ b/public/downloads/README.md @@ -0,0 +1,25 @@ +# Applications mobiles précompilées + +Déposez ici les binaires servis par la page **/telecharger** : + +- `ressources-relationnelles.apk` — application Android +- `ressources-relationnelles.ipa` — application Apple (iOS) + +La page détecte automatiquement la présence de ces fichiers. + +## Alternative : liens de store + +Plutôt que des fichiers locaux, vous pouvez renseigner des liens (Play Store, +App Store, TestFlight…) dans le fichier `.env` du serveur : + +``` +MOBILE_ANDROID_URL=https://play.google.com/store/apps/details?id=... +MOBILE_IOS_URL=https://apps.apple.com/app/id... +MOBILE_ANDROID_VERSION=1.0.0 +MOBILE_IOS_VERSION=1.0.0 +``` + +Si une URL est renseignée, elle est prioritaire sur le fichier local. +Si ni URL ni fichier ne sont disponibles, le bouton affiche « Bientôt disponible ». + +> Les binaires (`*.apk`, `*.ipa`) ne sont pas versionnés dans git (voir `.gitignore`). diff --git a/resources/views/layout/header.blade.php b/resources/views/layout/header.blade.php index e23edf5..f798e2c 100644 --- a/resources/views/layout/header.blade.php +++ b/resources/views/layout/header.blade.php @@ -23,6 +23,9 @@