Compare commits

..

261 Commits

Author SHA1 Message Date
Antoine PEREDERII e72636c4d7 Update 'Sources/config/config.php'
continuous-integration/drone/push Build is passing Details
1 year ago
Antoine PEREDERII 97623ba062 Merge branch 'master' of codefirst.iut.uca.fr:HeartDev/Web
continuous-integration/drone/push Build is passing Details
1 year ago
Antoine PEREDERII 32afdd093c 📝 Add MCD on the readme file
1 year ago
David D'ALMEIDA 81b7a60267 Mise à jour de 'Sources/public/index.php'
continuous-integration/drone/push Build is passing Details
1 year ago
David D'ALMEIDA 134f3ae997 Mise à jour de 'Sources/config/config.php'
continuous-integration/drone/push Build is passing Details
1 year ago
David D'ALMEIDA f80492db66 Mise à jour de 'Sources/config/config.php'
continuous-integration/drone/push Build is passing Details
1 year ago
David D'ALMEIDA 3bc50ae677 Mise à jour de 'Sources/config/config.php'
continuous-integration/drone/push Build is passing Details
1 year ago
David D'ALMEIDA 9c03d12906 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is passing Details
1 year ago
David D'ALMEIDA bfd039d9bb Mise à jour de 'Sources/config/Dockerfile'
continuous-integration/drone/push Build is passing Details
1 year ago
David D'ALMEIDA 701563d0ee Mise à jour de 'Sources/config/httpd.conf'
continuous-integration/drone/push Build is passing Details
1 year ago
David D'ALMEIDA b4fe541a4f Ajouter 'Sources/config/httpd.conf'
continuous-integration/drone/push Build is passing Details
1 year ago
David D'ALMEIDA 505d4cd71d Mise à jour de 'Sources/src/app/controller/Controller.php'
continuous-integration/drone/push Build is passing Details
1 year ago
David D'ALMEIDA 8d000f997b Mise à jour de 'Sources/config/Dockerfile'
continuous-integration/drone/push Build is passing Details
1 year ago
David D'ALMEIDA 88d778f245 Mise à jour de 'Sources/config/Dockerfile'
continuous-integration/drone/push Build is passing Details
1 year ago
David D'ALMEIDA 32b05eeb11 Mise à jour de 'Sources/config/Dockerfile'
continuous-integration/drone/push Build is passing Details
1 year ago
David D'ALMEIDA 8d5f1ddefe Mise à jour de 'Sources/config/Dockerfile'
continuous-integration/drone/push Build is failing Details
1 year ago
David D'ALMEIDA ac7b90f0fb Mise à jour de 'Sources/config/Dockerfile'
continuous-integration/drone/push Build is failing Details
1 year ago
David D'ALMEIDA 7cdd12df73 Ajouter 'Sources/config/virtual-host.conf'
continuous-integration/drone/push Build is failing Details
1 year ago
David D'ALMEIDA bcd043ceb1 Mise à jour de 'Sources/config/Dockerfile'
continuous-integration/drone/push Build is failing Details
1 year ago
David D'ALMEIDA 1b66f277b5 Mise à jour de 'Sources/config/Dockerfile'
continuous-integration/drone/push Build is failing Details
1 year ago
David D'ALMEIDA 1fb406c58a Mise à jour de 'Sources/config/Dockerfile'
continuous-integration/drone/push Build is failing Details
1 year ago
David D'ALMEIDA f78276dbec Mise à jour de 'Sources/config/Dockerfile'
continuous-integration/drone/push Build is passing Details
1 year ago
David D'ALMEIDA b52ba793d3 Mise à jour de 'Sources/config/nginx.conf'
continuous-integration/drone/push Build is failing Details
1 year ago
David D'ALMEIDA bb6e76f54f Mise à jour de 'Sources/config/Dockerfile'
continuous-integration/drone/push Build is failing Details
1 year ago
David D'ALMEIDA 4ce92111d1 Mise à jour de 'Sources/config/Dockerfile'
continuous-integration/drone/push Build is passing Details
1 year ago
David D'ALMEIDA c7f0ab60d6 Mise à jour de 'Sources/config/Dockerfile'
continuous-integration/drone/push Build is passing Details
1 year ago
David D'ALMEIDA ddc7d843ed Mise à jour de 'Sources/config/Dockerfile'
continuous-integration/drone/push Build is passing Details
1 year ago
David D'ALMEIDA b20436b938 Mise à jour de 'Sources/config/Dockerfile'
continuous-integration/drone/push Build is passing Details
1 year ago
David D'ALMEIDA 3fb3822ac7 Mise à jour de 'Sources/config/Dockerfile'
continuous-integration/drone/push Build is passing Details
1 year ago
David D'ALMEIDA 23e04e3d71 Mise à jour de 'Sources/config/Dockerfile'
continuous-integration/drone/push Build is passing Details
1 year ago
David D'ALMEIDA cb04fc199b Mise à jour de 'Sources/config/nginx.conf'
continuous-integration/drone/push Build is passing Details
1 year ago
David D'ALMEIDA 0d090a7183 Mise à jour de 'Sources/config/nginx.conf'
continuous-integration/drone/push Build is passing Details
1 year ago
David D'ALMEIDA e4a74cb353 Mise à jour de 'Sources/config/nginx.conf'
continuous-integration/drone/push Build is passing Details
1 year ago
David D'ALMEIDA 8b14c2c95b Mise à jour de 'Sources/config/nginx.conf'
continuous-integration/drone/push Build is passing Details
1 year ago
David D'ALMEIDA 0653af150b Mise à jour de 'Sources/config/nginx.conf'
continuous-integration/drone/push Build is passing Details
1 year ago
David D'ALMEIDA c334f89aba Mise à jour de 'Sources/config/nginx.conf'
continuous-integration/drone/push Build is passing Details
1 year ago
David D'ALMEIDA 2acea545ae Mise à jour de 'Sources/config/nginx.conf'
continuous-integration/drone/push Build is passing Details
1 year ago
David D'ALMEIDA f1b97a1c0d Mise à jour de 'Sources/config/nginx.conf'
continuous-integration/drone/push Build is passing Details
1 year ago
David D'ALMEIDA 884307f6b0 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is passing Details
1 year ago
David D'ALMEIDA b0b34843b3 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build encountered an error Details
1 year ago
David D'ALMEIDA f750992a07 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build encountered an error Details
1 year ago
David D'ALMEIDA 99405eb8b7 Mise à jour de 'Sources/config/Dockerfile'
continuous-integration/drone/push Build is passing Details
1 year ago
David D'ALMEIDA 4f314cf7e3 Mise à jour de 'Sources/config/Dockerfile'
continuous-integration/drone/push Build is failing Details
1 year ago
David D'ALMEIDA 93f68abf43 Mise à jour de 'Sources/config/Dockerfile'
continuous-integration/drone/push Build is failing Details
1 year ago
David D'ALMEIDA f6212b6d5e Mise à jour de 'Sources/config/Dockerfile'
continuous-integration/drone/push Build is failing Details
1 year ago
David D'ALMEIDA f0bb8fed65 Mise à jour de 'Sources/config/Dockerfile'
continuous-integration/drone/push Build is failing Details
1 year ago
David D'ALMEIDA 8b1ca8d371 Mise à jour de 'Sources/config/Dockerfile'
continuous-integration/drone/push Build is failing Details
1 year ago
David D'ALMEIDA 837941721d Mise à jour de 'Sources/config/Dockerfile'
continuous-integration/drone/push Build is failing Details
1 year ago
David D'ALMEIDA 664f270062 Mise à jour de 'Sources/config/Dockerfile'
continuous-integration/drone/push Build is running Details
1 year ago
David D'ALMEIDA 9d53db8000 Mise à jour de 'Sources/config/Dockerfile'
continuous-integration/drone/push Build is failing Details
1 year ago
David D'ALMEIDA b6fdae005b Mise à jour de 'Sources/config/Dockerfile'
continuous-integration/drone/push Build is passing Details
1 year ago
David D'ALMEIDA 39cc037569 Mise à jour de 'Sources/config/Dockerfile'
continuous-integration/drone/push Build is passing Details
1 year ago
David D'ALMEIDA c5632a47fb Mise à jour de 'Sources/config/Dockerfile'
continuous-integration/drone/push Build is passing Details
1 year ago
David D'ALMEIDA 373cc847ab Mise à jour de 'Sources/config/Dockerfile'
continuous-integration/drone/push Build is passing Details
1 year ago
David D'ALMEIDA 99f9e2ec22 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is passing Details
1 year ago
David D'ALMEIDA 43bd7295f9 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is passing Details
1 year ago
David D'ALMEIDA 2d5bc5303f Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is passing Details
1 year ago
David D'ALMEIDA 255a81c29c Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is passing Details
1 year ago
David D'ALMEIDA 92e196c7e3 Mise à jour de 'Sources/config/.htaccess'
continuous-integration/drone/push Build is passing Details
1 year ago
David D'ALMEIDA d0db1ad041 Mise à jour de 'Sources/config/Dockerfile'
continuous-integration/drone/push Build is passing Details
1 year ago
David D'ALMEIDA 176e70d020 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is passing Details
1 year ago
David D'ALMEIDA 64a5a2c7c6 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is passing Details
1 year ago
David D'ALMEIDA 65b63b0f2f Mise à jour de 'Sources/config/Dockerfile'
continuous-integration/drone/push Build is passing Details
1 year ago
David D'ALMEIDA eeb2b8e3ab Mise à jour de 'Sources/config/Dockerfile'
continuous-integration/drone/push Build is passing Details
1 year ago
David D'ALMEIDA b5c62a9791 Mise à jour de 'Sources/config/Dockerfile'
continuous-integration/drone/push Build is passing Details
1 year ago
David D'ALMEIDA e827554413 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is passing Details
1 year ago
David D'ALMEIDA e4688dbe28 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is passing Details
1 year ago
David D'ALMEIDA d241bd15a1 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is failing Details
1 year ago
David D'ALMEIDA 7042c6a2b6 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is failing Details
1 year ago
David D'ALMEIDA 71d1f58cc4 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is failing Details
1 year ago
David D'ALMEIDA db8ed755db Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is failing Details
1 year ago
David D'ALMEIDA b58ebcf3e8 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is passing Details
1 year ago
David D'ALMEIDA e2ed1aa3e6 Mise à jour de '.drone.yml'
1 year ago
David D'ALMEIDA f7016ba5b5 Mise à jour de '.drone.yml'
1 year ago
David D'ALMEIDA b1a486622e Mise à jour de '.drone.yml'
1 year ago
David D'ALMEIDA 5caaf280b6 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is failing Details
1 year ago
David D'ALMEIDA 397cc32336 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is failing Details
1 year ago
David D'ALMEIDA 4b8e69eec6 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is failing Details
1 year ago
David D'ALMEIDA 06a5b72d1a Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is failing Details
1 year ago
David D'ALMEIDA 3a579bb606 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is failing Details
1 year ago
David D'ALMEIDA d2296ff7d0 Mise à jour de 'README.md'
continuous-integration/drone/push Build is failing Details
1 year ago
Antoine PEREDERII 8cf1786672 update some diagrams for futur evaluation
continuous-integration/drone/push Build is failing Details
1 year ago
Antoine PEREDERII 705edbf4e5 Merge branch 'master' of codefirst.iut.uca.fr:HeartDev/Web
continuous-integration/drone/push Build is failing Details
1 year ago
Antoine PEREDERII af00c88542 add MLD and update somes diagrams
1 year ago
Antoine PEREDERII d6484b9f16 Update 'README.md'
continuous-integration/drone/push Build is failing Details
1 year ago
Antoine PEREDERII c4adf90c8d Update 'Documents/Diagramme/DiagrammeDeClasses/README_accesDonnees.md'
continuous-integration/drone/push Build is failing Details
1 year ago
Antoine PEREDERII 4609a3e3d1 Merge remote-tracking branch 'origin/merged'
continuous-integration/drone/push Build is failing Details
1 year ago
Antoine PEREDERII cba3a4e1ae update diagrams with introduction
continuous-integration/drone/push Build is failing Details
1 year ago
Antoine PEREDERII 718a97ff32 update all diagrams without description
continuous-integration/drone/push Build is failing Details
1 year ago
Antoine PEREDERII 687824e429 add general diagram
continuous-integration/drone/push Build is failing Details
1 year ago
Antoine PEREDERII ce09893056 update branch
continuous-integration/drone/push Build is failing Details
1 year ago
Antoine PEREDERII 18a384b869 update diagrams
continuous-integration/drone/push Build is failing Details
1 year ago
Antoine PEREDERII 330282f147 upadate diagrams
continuous-integration/drone/push Build is failing Details
1 year ago
Antoine PEREDERII 9b1ca87c73 upadate diagrams
continuous-integration/drone/push Build is failing Details
1 year ago
Antoine PEREDERII 18fcf85be9 update diagrams
continuous-integration/drone/push Build is failing Details
1 year ago
Antoine PEREDERII d57f95ca62 Merge remote-tracking branch 'origin/merged'
continuous-integration/drone/push Build is failing Details
1 year ago
Antoine PEREDERII 461d08126d last merged with issu022
continuous-integration/drone/push Build is failing Details
1 year ago
Antoine PEREDERII fcc4b3a250 merge issue030 with merged
continuous-integration/drone/push Build is failing Details
1 year ago
Antoine PEREDERII 52ac902d0f problemes de git
continuous-integration/drone/push Build is failing Details
1 year ago
David D'ALMEIDA 48e6c4877d erreur imcopréhenssible
continuous-integration/drone/push Build is failing Details
1 year ago
Antoine PEREDERII a374a77ca0 Merge branch 'merged' of codefirst.iut.uca.fr:HeartDev/Web into merged
continuous-integration/drone/push Build is failing Details
1 year ago
Antoine PEREDERII 0f59ed962c updates controllers
1 year ago
Antoine PINAGOT 225b4d58e8 try athelte controller
continuous-integration/drone/push Build is failing Details
1 year ago
Antoine PEREDERII a5b3648320 Merge branch 'merged' of codefirst.iut.uca.fr:HeartDev/Web into merged
continuous-integration/drone/push Build is failing Details
1 year ago
Antoine PEREDERII 484a87554d merge issue_030 on merged
1 year ago
Antoine PINAGOT 9a8e711522 Mise à jour de 'Documents/Diagramme/DiagrammeDeClasses/README_accesDonnees.md'
continuous-integration/drone/push Build is failing Details
1 year ago
Antoine PEREDERII cdbc9bf5a3 Update 'README.md'
continuous-integration/drone/push Build is failing Details
1 year ago
Antoine PEREDERII 29e611487e update readme
continuous-integration/drone/push Build is failing Details
1 year ago
Antoine PINAGOT 29f226ebbb Mise à jour de 'README.md'
continuous-integration/drone/push Build is failing Details
1 year ago
Antoine PEREDERII aec3fe9b85 Merge branch 'merged' of codefirst.iut.uca.fr:HeartDev/Web into merged
continuous-integration/drone/push Build is failing Details
1 year ago
Antoine PEREDERII e79a6b275a update uses cases
1 year ago
Antoine PINAGOT 470092f36f link de toutes les pages entre elles
continuous-integration/drone/push Build is failing Details
1 year ago
Antoine PEREDERII cfdf27e7e7 Update 'Documents/Diagramme/README_DIAGRAMMES.md'
continuous-integration/drone/push Build is failing Details
1 year ago
Antoine PEREDERII 2afefb54ba update my diagrams
continuous-integration/drone/push Build is failing Details
1 year ago
Antoine PEREDERII 673f9183fe update path diagrams
continuous-integration/drone/push Build is failing Details
1 year ago
Antoine PEREDERII c0b2d76ceb update path diagrams
continuous-integration/drone/push Build is failing Details
1 year ago
Antoine PEREDERII caa907c93c update path diagrams
continuous-integration/drone/push Build is failing Details
1 year ago
Antoine PEREDERII 48d615fea1 update path diagrams
continuous-integration/drone/push Build is failing Details
1 year ago
Antoine PEREDERII 16228a51fe update diagramme
continuous-integration/drone/push Build is failing Details
1 year ago
Antoine PEREDERII 872f848a11 Update 'Documents/Diagramme/DiagrammeDeClasses/README_accesDonnees.md'
continuous-integration/drone/push Build is failing Details
1 year ago
Antoine PEREDERII 04e9078aa7 Update 'Documents/Diagramme/DiagrammeDeClasses/README_accesDonnees.md'
continuous-integration/drone/push Build is failing Details
1 year ago
Antoine PEREDERII 9333fb3499 update diagramme
continuous-integration/drone/push Build is failing Details
1 year ago
Antoine PEREDERII 8d1953c4c4 upaded merged branch
continuous-integration/drone/push Build is failing Details
1 year ago
Antoine PINAGOT 0c0704e51e Ajout pages authentification
continuous-integration/drone/push Build is failing Details
1 year ago
Antoine PINAGOT 109b6860ee Page erreur 404 finie avec la meme template que les autres erreurs
continuous-integration/drone/push Build is failing Details
1 year ago
David D'ALMEIDA eb625309ce resolve
continuous-integration/drone/push Build is failing Details
1 year ago
Paul LEVRAULT 74a79a055c Ajouter 'Documents/Diagramme/DiagrammeDeClasses/README_issue016.md'
continuous-integration/drone/push Build is failing Details
1 year ago
Antoine PINAGOT 4970a10c5f Formulaire de données
continuous-integration/drone/push Build is failing Details
1 year ago
Paul LEVRAULT 13b7b07534 Ajouter 'Documents/Diagramme/DiagrammeDeClasses/README_issue021.md'
continuous-integration/drone/push Build is failing Details
1 year ago
David D'ALMEIDA 94a5e9ead4 ok
continuous-integration/drone/push Build is failing Details
1 year ago
Paul LEVRAULT 20f0aabbd3 Ajouter 'Documents/Diagramme/DiagrammeDeClasses/README_issue022.md'
continuous-integration/drone/push Build is failing Details
1 year ago
Paul LEVRAULT a663a7212e Mise à jour de 'Documents/Diagramme/README_DIAGRAMMES.md'
continuous-integration/drone/push Build is failing Details
1 year ago
David D'ALMEIDA fae5e35610 most
continuous-integration/drone/push Build is failing Details
1 year ago
Paul LEVRAULT 731d23ba4a Mise à jour de 'README.md'
continuous-integration/drone/push Build is passing Details
1 year ago
Paul LEVRAULT b257ff4526 Mise à jour de 'Documents/Diagramme/README_DIAGRAMMES.md'
continuous-integration/drone/push Build is passing Details
1 year ago
Paul LEVRAULT 6714855b5a Mise à jour de 'Documents/Diagramme/README_DIAGRAMMES.md'
continuous-integration/drone/push Build is passing Details
1 year ago
Paul LEVRAULT 0ee1df5c44 Mise à jour de 'Documents/Diagramme/README_DIAGRAMMES.md'
continuous-integration/drone/push Build is passing Details
1 year ago
Paul LEVRAULT 2817e79a69 Mise à jour de 'Documents/Diagramme/README_DIAGRAMMES.md'
continuous-integration/drone/push Build is passing Details
1 year ago
Paul LEVRAULT 564799a781 Mise à jour de 'Documents/Diagramme/README_DIAGRAMMES.md'
continuous-integration/drone/push Build is passing Details
1 year ago
Paul LEVRAULT 4a04a27acf Mise à jour de 'Documents/Diagramme/README_DIAGRAMMES.md'
continuous-integration/drone/push Build is passing Details
1 year ago
David D'ALMEIDA f7c8793301 here
continuous-integration/drone/push Build is failing Details
1 year ago
Antoine PEREDERII ce6f9ef7ae Update 'README.md'
continuous-integration/drone/push Build is passing Details
1 year ago
Antoine PEREDERII f21d6e9e17 update README.md
continuous-integration/drone/push Build is passing Details
1 year ago
Antoine PEREDERII b4b89a7a66 rename to good format
continuous-integration/drone/push Build is passing Details
1 year ago
Antoine PEREDERII 43b106ec19 Update 'README.md'
continuous-integration/drone/push Build is failing Details
1 year ago
Antoine PEREDERII a8641f617e Update 'Documents/Diagramme/DiagrammeDeClasses/README_issue028.md'
continuous-integration/drone/push Build is passing Details
1 year ago
Antoine PEREDERII c6c1f50834 Update 'Documents/Diagramme/DiagrammeDeClasses/README_issue028.md'
continuous-integration/drone/push Build is passing Details
1 year ago
Antoine PEREDERII 47db3d10ad Update 'Documents/Diagramme/README_DIAGRAMMES.md'
continuous-integration/drone/push Build is passing Details
1 year ago
Antoine PEREDERII 54fb6a74a7 📝 🚚 update Documentation folder and add somes README.md
continuous-integration/drone/push Build is passing Details
1 year ago
Antoine PEREDERII 1fdce42f49 Add .fit feature
continuous-integration/drone/push Build is passing Details
1 year ago
Antoine PINAGOT 4ea6f09766 Cookie ajouté pour le thème du site
continuous-integration/drone/push Build is passing Details
1 year ago
Antoine PEREDERII 15e854a508 🚀 🧪 add fit file feature
continuous-integration/drone/push Build is passing Details
1 year ago
Antoine PEREDERII 5286bdabfb 📝 add LICENSE.md and update README.md
1 year ago
Antoine PEREDERII f6eafff4cd pull master
1 year ago
David D'ALMEIDA f18ff6cbcf Mise à jour de 'Sources/config/.htaccess'
continuous-integration/drone/push Build is passing Details
1 year ago
David D'ALMEIDA ac98c21bf8 Framework done
continuous-integration/drone/push Build is passing Details
1 year ago
Antoine PEREDERII d86b2550b0 update class diagramme
continuous-integration/drone/push Build is passing Details
1 year ago
David D'ALMEIDA 79311b1041 Merge pull request 'Issue_025_FrontEnd_Twig' (#26) from Issue_025_FrontEnd_Twig into master
continuous-integration/drone/push Build is passing Details
1 year ago
David D'ALMEIDA edd4f98bcf rename file and check
continuous-integration/drone/push Build is passing Details
1 year ago
Antoine PEREDERII 208b134bc7 add Athlete Manager ans her dependences
continuous-integration/drone/push Build is passing Details
1 year ago
Antoine PEREDERII 7d8d8fa945 update class diagramme
1 year ago
Antoine PEREDERII a8035d5be0 update training add in coach
continuous-integration/drone/push Build is passing Details
1 year ago
Antoine PINAGOT eac2de6a65 Vu terminé
continuous-integration/drone/push Build is passing Details
1 year ago
Antoine PINAGOT 68c106a205 Import page + profile + settings
continuous-integration/drone/push Build is passing Details
1 year ago
Antoine PEREDERII d61d120f08 🚧 🧪 add Listing TrainingList
continuous-integration/drone/push Build is passing Details
1 year ago
Antoine PINAGOT 1fa4da1662 Ajout bouton addFriend
continuous-integration/drone/push Build is passing Details
1 year ago
Antoine PINAGOT e6a8540294 Synthaxe des pages
continuous-integration/drone/push Build is passing Details
1 year ago
Antoine PINAGOT 8e18c3aa1e Ajout image profile + nom user template principale
continuous-integration/drone/push Build is passing Details
1 year ago
Antoine PINAGOT 82508b9025 Page Analyse, Home, Mail, Ami terminé
continuous-integration/drone/push Build is passing Details
1 year ago
Antoine PINAGOT d1d1e35406 update struct /src/app/views
continuous-integration/drone/push Build is passing Details
1 year ago
Antoine PEREDERII a696e4eb5a 💩 🚧 add TrainingRepository and and Training Menu in Console.php
continuous-integration/drone/push Build is passing Details
1 year ago
Antoine PINAGOT c074d4e825 Finalisation page error (401,404,500) + Finalisation Analyses, Messagerie et Liste d'ami
continuous-integration/drone/push Build is passing Details
1 year ago
Antoine PINAGOT f8246541ae Ajout du Twig sur les pages principales + Finalisation de home & analyses
continuous-integration/drone/push Build is passing Details
1 year ago
Antoine PEREDERII 5c925326a9 🚧 add Coach management Team
continuous-integration/drone/push Build is passing Details
1 year ago
Paul LEVRAULT 3e0d8f9def Correction non fonctionelle
continuous-integration/drone/push Build is passing Details
1 year ago
Antoine PEREDERII 4498de7839 update branch
continuous-integration/drone/push Build is passing Details
1 year ago
Paul LEVRAULT ace879472c Re-correction
continuous-integration/drone/push Build is passing Details
1 year ago
Paul LEVRAULT 1739f38ce4 Correction
1 year ago
Paul LEVRAULT 95593ae528 Ajout des fonctions
continuous-integration/drone/push Build is passing Details
1 year ago
Antoine PEREDERII f0cf8d96a4 add some classes files
continuous-integration/drone/push Build is passing Details
1 year ago
Antoine PINAGOT 03e37247f2 Ajout page analyse
continuous-integration/drone/push Build is passing Details
1 year ago
Antoine PEREDERII 6f9d60fa27 🙈 remove .phpunit.cache files
continuous-integration/drone/push Build is passing Details
1 year ago
Antoine PEREDERII 00c772492b 🚧 💩 add coach management
1 year ago
Antoine PEREDERII 9aa054b2b5 update Classes diagram
1 year ago
Antoine PEREDERII 91422418ed initialized Coach US
continuous-integration/drone/push Build is passing Details
1 year ago
Antoine PEREDERII eec7dfb069 🔧 📌 Downgrade User.php to php7
continuous-integration/drone/push Build is passing Details
1 year ago
Antoine PEREDERII d5a73fa41f 💥 update Classes Diagramme
continuous-integration/drone/push Build is passing Details
1 year ago
Antoine PEREDERII 31a3b5c070 💥 update Classes Diagramme
continuous-integration/drone/push Build is passing Details
1 year ago
Antoine PINAGOT 58a2602848 Supprimer 'Sources/src/app/views/assets/img/logo.png'
continuous-integration/drone/push Build is passing Details
1 year ago
Antoine PINAGOT f5d2ed2119 Ajout pages HTML site web + assets en public avec logo
continuous-integration/drone/push Build is passing Details
1 year ago
Antoine PINAGOT a9af4d0d0d Merge branch 'master' into WORK-API
1 year ago
Antoine PINAGOT a4239dab1f Supprimer 'Website.zip'
1 year ago
Antoine PEREDERII 9db411bbc3 update src project for our US
continuous-integration/drone/push Build is passing Details
1 year ago
Antoine PEREDERII 82a1feaa0d update src project for our US
1 year ago
Paul LEVRAULT cd927ed11c Ajout dans la console des fonctions de la user story
continuous-integration/drone/push Build is passing Details
1 year ago
David D'ALMEIDA 512e91bd4c change gitignore
continuous-integration/drone/push Build is passing Details
1 year ago
Antoine PEREDERII 198d40a7fe update classes diagram
continuous-integration/drone/push Build is passing Details
1 year ago
David D'ALMEIDA 867cdb072b get started
continuous-integration/drone/push Build is passing Details
1 year ago
David D'ALMEIDA 5b75023a4d fix gitignore
continuous-integration/drone/push Build is passing Details
1 year ago
David D'ALMEIDA ecb3edaf70 Conception Diagrams
continuous-integration/drone/push Build is passing Details
1 year ago
Antoine PINAGOT d70914a4e4 PERT SCREEN
1 year ago
Antoine PINAGOT 57828deace Ajout boulot en PHP
1 year ago
Antoine PINAGOT b848226c52 Ajout Website.zip au GIT
1 year ago
Antoine PEREDERII 01fcd70127 Merge branch 'WORK-APE' of codefirst.iut.uca.fr:HeartDev/Web into issue_16_statistics_coach
continuous-integration/drone/push Build is passing Details
1 year ago
Antoine PEREDERII d0cef575ff Merge branch 'issue_020_Auth_Stub' of codefirst.iut.uca.fr:HeartDev/Web into issue_16_statistics_coach
continuous-integration/drone/push Build is passing Details
1 year ago
Antoine PEREDERII 497a91b915 🙈 update .gitignore for macOSX
continuous-integration/drone/push Build is passing Details
1 year ago
antoine.perederii e0645c5142 update class diagram
continuous-integration/drone/push Build is passing Details
1 year ago
Antoine PEREDERII 2c7819f9f5 🙈 update gitignore for macOSX
continuous-integration/drone/push Build is passing Details
1 year ago
Antoine PEREDERII e9a34565c5 update Classes Diagram
continuous-integration/drone/push Build is passing Details
1 year ago
David D'ALMEIDA acf73320ec Mise à jour de 'Documents/Diagramme/MLD.plantuml'
continuous-integration/drone/push Build is passing Details
1 year ago
David D'ALMEIDA 4d7b79ae59 Mise à jour de 'Documents/Diagramme/MLD.plantuml'
continuous-integration/drone/push Build is passing Details
1 year ago
David D'ALMEIDA 23c912b0c0 work:intermediate
continuous-integration/drone/push Build is passing Details
1 year ago
antoine.perederii f6a54918a8 🚧 introducing SAE reseau script vdn
continuous-integration/drone/push Build is passing Details
1 year ago
Antoine PEREDERII d4cb530029 introduce conception and Main
continuous-integration/drone/push Build is passing Details
1 year ago
Antoine PEREDERII 8b3d28553d update .gitignore for macOS
continuous-integration/drone/push Build is failing Details
1 year ago
Antoine PEREDERII dd22aacf08 update ClassesDiagramme
1 year ago
antoine.perederii 6c80f37d3b add new Classes Diagrammes
continuous-integration/drone/push Build is failing Details
1 year ago
Antoine PEREDERII eea1a6b502 update Console.php
continuous-integration/drone/push Build is failing Details
1 year ago
David D'ALMEIDA c4da236731 Ajouter 'Documents/Diagramme/MLD.plantuml'
continuous-integration/drone/push Build is passing Details
1 year ago
David D'ALMEIDA 1152418595 Mise à jour de 'README.md'
continuous-integration/drone/push Build is passing Details
1 year ago
David D'ALMEIDA 585ef229f6 Mise à jour de 'Sources/src/console/Console.php'
continuous-integration/drone/push Build is passing Details
2 years ago
David D'ALMEIDA d434567899 oui
continuous-integration/drone/push Build is passing Details
2 years ago
David D'ALMEIDA 7a551b1e65 uggly push
continuous-integration/drone/push Build is passing Details
2 years ago
David D'ALMEIDA b9239f490b Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is passing Details
2 years ago
David D'ALMEIDA f217787afe Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is passing Details
2 years ago
David D'ALMEIDA 7709209b96 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is passing Details
2 years ago
David D'ALMEIDA 62ddaa6359 Merge pull request 'end base navigation' (#19) from issue_004_Navigation_Stub into master
continuous-integration/drone/push Build is passing Details
2 years ago
David D'ALMEIDA bdc379770c end base navigation
continuous-integration/drone/push Build is passing Details
2 years ago
Antoine PEREDERII d37e13400b Merge pull request 'issue_003_Sonar' (#18) from issue_003_Sonar into master
continuous-integration/drone/push Build is passing Details
2 years ago
Antoine PEREDERII 4237518809 Merge pull request 'issue_005_Init' (#17) from Issue_005_Init into master
2 years ago
David D'ALMEIDA de9de19a44 Mise à jour de 'Sources/config/Dockerfile'
continuous-integration/drone/push Build is passing Details
2 years ago
David D'ALMEIDA 257f1ffc55 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is passing Details
2 years ago
David D'ALMEIDA e0ab191262 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is passing Details
2 years ago
David D'ALMEIDA 1558afe64d Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is failing Details
2 years ago
David D'ALMEIDA 517a62fdb9 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is failing Details
2 years ago
David D'ALMEIDA 815ed76fa1 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is failing Details
2 years ago
David D'ALMEIDA 62a68a13ff Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is failing Details
2 years ago
David D'ALMEIDA 1bbb782bd2 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is failing Details
2 years ago
David D'ALMEIDA c5d9358447 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is failing Details
2 years ago
David D'ALMEIDA 4614f2ac4f Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is failing Details
2 years ago
David D'ALMEIDA b3f992d38f Mise à jour de '.drone.yml'
continuous-integration/drone/push Build encountered an error Details
2 years ago
David D'ALMEIDA 53909b99bd Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is failing Details
2 years ago
David D'ALMEIDA ab424ae66b Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is failing Details
2 years ago
David D'ALMEIDA 18b3287b44 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is failing Details
2 years ago
David D'ALMEIDA dac970ea66 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is failing Details
2 years ago
David D'ALMEIDA 0ae8c470b5 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is failing Details
2 years ago
David D'ALMEIDA 65b2d3a7ee Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is failing Details
2 years ago
David D'ALMEIDA 12e443e956 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is failing Details
2 years ago
David D'ALMEIDA 503cfe5016 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is failing Details
2 years ago
David D'ALMEIDA e4e74b5186 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is failing Details
2 years ago
David D'ALMEIDA a53fa55f9f Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is failing Details
2 years ago
David D'ALMEIDA ec4902e43e Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is failing Details
2 years ago
David D'ALMEIDA 1bf606920f Mise à jour de 'Sources/config/Dockerfile'
continuous-integration/drone/push Build is failing Details
2 years ago
David D'ALMEIDA 534d22d889 add test dir
continuous-integration/drone/push Build is failing Details
2 years ago
David D'ALMEIDA 8629d4f54c Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is failing Details
2 years ago
David D'ALMEIDA a9ee0e70d6 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is failing Details
2 years ago
David D'ALMEIDA db58fdeb95 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is failing Details
2 years ago
David D'ALMEIDA 5c3ba92bb1 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is failing Details
2 years ago
David D'ALMEIDA d300db62ff Mise à jour de '.drone.yml'
continuous-integration/drone/push Build encountered an error Details
2 years ago
David D'ALMEIDA 4aa262e231 begin CI - not testing & missing CREDENTIAL
continuous-integration/drone/push Build encountered an error Details
2 years ago
David D'ALMEIDA 28d4ebb160 begin CI - not testing & missing CREDENTIAL
2 years ago

@ -0,0 +1,90 @@
kind: pipeline
type: docker
name: HeartWave
trigger:
event:
- push
steps:
# Test ✔️
- name: test
image: composer:2.6
commands:
- cd Sources
- rm -r vendor
- rm composer.lock
# Installe les dépendances PHP si nécessaire
- php composer.phar install --no-interaction
- ./vendor/bin/phpunit tests
# Sonar static code analisis deployment
# TODO : use an image that already have unzip
- name: code-analysis
image: php:8.1-cli
environment:
SONAR_TOKEN:
from_secret: SONAR_TOKEN
commands:
- apt-get update && apt-get install -y curl unzip
- export SONAR_SCANNER_VERSION=4.7.0.2747
- export SONAR_SCANNER_HOME=$HOME/.sonar/sonar-scanner-$SONAR_SCANNER_VERSION-linux
- curl --create-dirs -sSLo $HOME/.sonar/sonar-scanner.zip https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-$SONAR_SCANNER_VERSION-linux.zip
- unzip -o $HOME/.sonar/sonar-scanner.zip -d $HOME/.sonar/
- export PATH=$SONAR_SCANNER_HOME/bin:$PATH
- export SONAR_SCANNER_OPTS="-server"
- cd Sources
- sonar-scanner -D sonar.projectKey=HeartTrack -D sonar.host.url=https://codefirst.iut.uca.fr/sonar
depends_on: [ test ]
# build image and push on the registry ✔️
- name: rewrite-urls
image: 'busybox:latest'
commands:
- cd Sources
- ls
- >-
find . -type f -exec sed -i -r
"s@(href|src)=\"/@\1=\"$${PLUGIN_CONTAINER_PATH}@g" {} +
settings:
container_path: https://codefirst.iut.uca.fr/containers/HeartDev-web/
- name: docker-build-and-push
image: plugins/docker
settings:
commands: ls
dockerfile: Sources/config/Dockerfile
context: Sources
registry: hub.codefirst.iut.uca.fr
repo: hub.codefirst.iut.uca.fr/david.d_almeida/web
mirror: https://proxy.iut.uca.fr:8443
username:
from_secret: SECRET_REGISTRY_USERNAME
password:
from_secret: SECRET_REGISTRY_PASSWORD
depends_on:
- rewrite-urls
- name: deploy-container
image: >-
hub.codefirst.iut.uca.fr/thomas.bellembois/codefirst-dockerproxy-clientdrone:latest
environment:
IMAGENAME: 'hub.codefirst.iut.uca.fr/david.d_almeida/web:latest'
CONTAINERNAME: web
COMMAND: create
OVERWRITE: true
ADMINS: david.d_almeida
depends_on:
- docker-build-and-push
- name: notify
image: ruby:2.1
when:
status: [ success ]
ref:
include:
- refs/tags/*-demo
commands:
- sh ./notifymail.sh
depends_on: [ docker-build-and-push ]

9
.gitignore vendored

@ -1,12 +1,17 @@
.idea
*.ben
*.txt
node_modules
dist
.vscode
*.swp
*.swo
.env
loginDatabase.php
# Cache file on macOS
.DS_Store
.phpunit.cache
# Cache files for Sublime Text
*.tmlanguage.cache
*.tmPreferences.cache

@ -0,0 +1,113 @@
@startuml
skinparam classAttributeIconSize 0
package MLD{
entity "Athlète" as athlete {
{static} idAthlete
nom
prénom
email
sexe
taille
poids
motDePasse
dateNaissance
}
entity "Amitié" as friendship{
{static}# idAthlete1
{static}# idAthlete2
début
}
entity "Notification" as notif {
{static} idNotif
message
date
statut
urgence
#athleteId
}
entity "Coach" as coach {
{static} idCoach
// attributs spécifiques au coach
#athleteId
}
entity "Statistique" as stats {
{static} idStatistique
poids
fcMoyenne
fcMax
caloriesBrûléesMoy
date
#athleteId
}
entity "Entraînement" as training {
{static} idEntrainement
date
description
// Exercices
latitude
longitude
feedback
#coachId
}
entity "Participe" as takepart {
{static} #athleteId
{static} #entrainementId
}
entity "SourceDonnée" as source {
{static} idSource
type
modèle
précision
#athleteId
}
entity "Activité" as activity {
{static} idActivité
type
date
heureDeDébut
heureDeFin
effortRessent
variabilité
variance
ecartType
moyenne
maximum
minimum
temperatureMoyenne
#athleteId
#sourceId
}
entity "FréquenceCardiaque" as fc {
{static} idFc
altitude
temps : time
température
bpm
longitude
latitude
#activitéId
}
}
activity --> athlete
activity --> source
activity <-- fc
coach --> athlete
athlete <-- source
stats --> athlete
takepart --> athlete
takepart --> training
friendship --> athlete
notif --> athlete
coach <-- training
athlete <-- friendship
@enduml

@ -0,0 +1,276 @@
[retour au README.md](../../../README.md)
[Retour aux Documents](../../README_DOCUMENTS.md)
[Retour au diagramme de classes](../README_DIAGRAMMES.md)
# BDD
## Modèle Logique de Données (MLD)
Le MLD représente la structure de données de l'application, décrivant les entités et les relations entre elles. Voici un aperçu des principales entités du MLD :
### Athlète (Athlete)
L'entité principale représentant un athlète avec ces informations propre à lui telles que l'identifiant, le nom, le prénom, l'email, etc. Les athlètes peuvent être coach avec le boolean idCoach et être liés par des amitiés, ou par un coaching via la table `Amitie`.
### Amitié (Friendship)
Une entité qui modélise les relations d'amitié entre les athlètes et de coaching entre les athlètes et les coachs. Elle stocke les identifiants des deux utilisateurs impliqués.
### Notification (Notification)
L'entité qui stocke les notifications destinées aux athlètes, avec des détails tels que le message, la date, le statut, et le degré d'urgence.
### Envoi de Notification (SendNotification)
Une entité de liaison entre les athlètes et les notifications, indiquant quel athlète ou coach a envoyé quelle notification. Cela peut-être utile lors d'une notification d'ajout d'amie par exemple.
### Statistique (Statistic)
Les statistiques relatives à un athlètes, y compris le poids, la fréquence cardiaque moyenne, la fréquence cardiaque maximale, etc.
### Entraînement (Training)
Détails sur les sessions d'entraînement planifiés par un coach pour ses athlètes, comprenant la date, la description, la localisation, etc. Les athlètes peuvent participer à des entraînements et donner leur feedback sur l'entrainement donné.
### Participation (Participate)
Une entité de liaison entre les athlètes et les entraînements, indiquant quels athlètes participent à quels entraînements.
### Don (GiveParticipation)
Une entité de liaison entre les coachs et les entraînements, indiquant quels coachs ont attribué quels entraînements.
### Source de Données (DataSource)
L'entité représentant la source des données des enregistrements sportif, telle que le type, le modèle, la précision, etc., utilisée par les athlètes pour enregistrer une ou des activités.
### Activité (Activity)
Les détails des activités des athlètes, y compris le type, la date, les heures de début et de fin, l'effort ressenti, etc.
### Fréquence Cardiaque (HeartRate)
Les données de fréquence cardiaque enregistrées pendant les activités, avec des informations telles que l'altitude, la température, etc.
Ce MLD forme la base de données sous-jacente pour l'application, offrant une structure organisée pour stocker et récupérer les informations relatives aux athlètes et à leurs activités.
```plantuml
@startuml
skinparam classAttributeIconSize 0
package MLD{
entity "Athlete" as athlete {
{static} idAthlete
username
nom
prenom
email
sexe
taille
poids
motDePasse
dateNaissance
isCoach
}
entity "Amitie" as friendship{
{static}# idAthlete1
{static}# idAthlete2
début
}
entity "Notification" as notif {
{static} idNotif
message
date
statut
urgence
#athleteId
}
entity "Envoi" as sendNotif{
{static}# idAthlete
{static}# idNotif
}
entity "Statistique" as stats {
{static} idStatistique
poids
fcMoyenne
fcMax
caloriesBruleesMoy
date
#athleteId
}
entity "Entrainement" as training {
{static} idEntrainement
date
description
latitude
longitude
feedback
#athleteId
}
entity "Participe" as takepart {
{static} #athleteId
{static} #entrainementId
}
entity "Donne" as givepart {
{static} #coachId
{static} #entrainementId
}
entity "SourceDonnee" as source {
{static} idSource
type
modele
precision
#athleteId
}
entity "Activite" as activity {
{static} idActivité
type
date
heureDeDebut
heureDeFin
effortRessent
variabilite
variance
ecartType
moyenne
maximum
minimum
temperatureMoyenne
#athleteId
#sourceId
}
entity "FréquenceCardiaque" as fc {
{static} idFc
altitude
temps : time
température
bpm
longitude
latitude
#activitéId
}
}
activity --> athlete
activity --> source
activity <-- fc
athlete <-- source
stats --> athlete
takepart --> athlete
takepart --> training
givepart --> athlete
givepart --> training
sendNotif --> athlete
sendNotif --> notif
friendship --> athlete
notif --> athlete
athlete <-- friendship
@enduml
```
```plantuml
@startuml
skinparam classAttributeIconSize 0
package MCD{
entity "Athlete" as athlete {
{static} idAthlete
username
nom
prenom
email
sexe
taille
poids
motDePasse
dateNaissance
isCoach
}
entity "Notification" as notif {
{static} idNotif
message
date
statut
urgence
#athleteId
}
entity "Statistique" as stats {
{static} idStatistique
poids
fcMoyenne
fcMax
caloriesBruleesMoy
date
#athleteId
}
entity "Entrainement" as training {
{static} idEntrainement
date
description
latitude
longitude
feedback
#athleteId
}
entity "SourceDonnee" as source {
{static} idSource
type
modele
precision
#athleteId
}
entity "Activite" as activity {
{static} idActivité
type
date
heureDeDebut
heureDeFin
effortRessent
variabilite
variance
ecartType
moyenne
maximum
minimum
temperatureMoyenne
#athleteId
#sourceId
}
entity "FréquenceCardiaque" as fc {
{static} idFc
altitude
temps : time
température
bpm
longitude
latitude
#activitéId
}
}
activity "0..n" --- "1..1" athlete : réalise
activity "1..n" --- "1..1" source : possede
activity "1..1" --- "1..n" fc : enregistre
athlete "1..n" --- "0..1" source : possede
stats "0..n" --- "1..1" athlete : possede
training "0..n" --- "1..n" athlete : participe
training "0..n" --- "1..1" athlete : donne
athlete "0..n" --- "1..n" athlete : est ami
notif "0..n" --- "1..n" athlete : recoit
notif "0..n" --- "1..1" athlete : envoie
@enduml
```

@ -0,0 +1,56 @@
[retour au README.md](../../../README.md)
[Retour aux Documents](../../README_DOCUMENTS.md)
[Retour au diagramme de classes](../README_DIAGRAMMES.md)
# Introduction au Cas d'utilisation : Suivi d'une Équipe Sportive
Bienvenue dans le monde dynamique du suivi d'équipe sportive, où notre application offre une plateforme complète pour les entraîneurs soucieux d'optimiser les performances de leurs athlètes. Ce diagramme de cas d'utilisation vous plonge dans les fonctionnalités clés qui facilitent la gestion d'une équipe sportive avec efficacité.
**Acteurs Principaux :**
- **Coach :** Le protagoniste central, utilisant l'application pour gérer et superviser son équipe.
**Fonctionnalités Clés :**
- **Ajouter un Athlète :** Permet au coach d'ajouter de nouveaux membres à son équipe, avec des étapes incluant la validation par l'athlète et l'authentification.
- **Supprimer un Athlète :** Offre la possibilité de retirer des athlètes de l'équipe, avec une authentification préalable pour garantir la légitimité de l'action.
- **Afficher ses Athlètes :** Permet au coach de visualiser la liste complète de ses athlètes, nécessitant une authentification pour accéder à ces informations sensibles.
- **Afficher les Activités de Tous les Athlètes :** Donne au coach un aperçu global des activités de toute l'équipe, nécessitant une authentification pour garantir la confidentialité des données.
**Flux d'Interaction :**
- Le processus d'ajout d'un athlète inclut des étapes telles que la validation par l'athlète et l'authentification, garantissant une intégration fluide.
- Les actions de suppression, affichage des athlètes et affichage des activités nécessitent une authentification préalable pour assurer la sécurité des données.
- Des extensions telles que la visualisation des activités d'un athlète et l'analyse des performances offrent des fonctionnalités avancées pour un suivi détaillé.
Explorez ce diagramme pour comprendre l'étendue des fonctionnalités que notre application offre aux entraîneurs, les aidant à gérer leurs équipes de manière efficace et à maximiser le potentiel de chaque athlète.
```plantuml
left to right direction
:Coach: as a
a --> (Ajouter un athlète)
a --> (Supprimer un athlète)
a --> (Afficher ses athlètes )
a --> (Afficher les activités de tous les athlètes)
(Ajouter un athlète).>(Validation par l'athlète) : <<include>>
(Ajouter un athlète)..>(S'authentifier) : <<include>>
(Supprimer un athlète)..>(S'authentifier) : <<include>>
(Afficher ses athlètes )..>(S'authentifier) : <<include>>
(Afficher les activités de tous les athlètes)..>(S'authentifier) : <<include>>
(S'authentifier)..>(S'inscrire) : <<extends>>
(S'inscrire).>(Inscription Coach) : <<include>>
(S'authentifier)..>(Se connecter) : <<include>>
(Afficher ses athlètes )..>(Voir les activités d'un athlète) : <<extends>>
(Afficher ses athlètes )..>(Voir les stats d'un athlète) : <<extends>>
(Afficher les activités de tous les athlètes)..>(Sélectionner une activité) : <<include>>
(Sélectionner une activité)..>(Voir l'analyse) : <<extends>>
(Sélectionner une activité)..>(Exporter l'analyse) : <<extends>>
(Voir les activités d'un athlète)..>(Voir l'analyse) : <<extends>>
(Voir les activités d'un athlète)..>(Exporter l'analyse) : <<extends>>
```

@ -0,0 +1,58 @@
[retour au README.md](../../../README.md)
[Retour aux Documents](../../README_DOCUMENTS.md)
[Retour au diagramme de classes](../README_DIAGRAMMES.md)
# Introduction au Cas d'utilisation : Gestion d'Activités pour un Athlète
Bienvenue dans l'univers dédié à la gestion d'activités sportives personnalisées pour les athlètes ! Ce diagramme de cas d'utilisation explore les différentes fonctionnalités offertes aux utilisateurs, mettant en avant la flexibilité et la richesse d'interactions pour une expérience utilisateur optimale.
**Acteurs Principaux :**
- **Athlète :** Le protagoniste central, utilisant l'application pour importer, gérer et analyser ses activités sportives.
**Fonctionnalités Clés :**
- **Importer des Données :** Permet à l'athlète d'importer des données d'activités depuis différentes sources, avec la possibilité de spécifier la source pour une intégration transparente.
- **Exporter Mes Données :** Offre la possibilité d'exporter l'ensemble des activités, avec des extensions pour exporter une activité spécifique, le tout soumis à une authentification préalable.
- **Ajouter une Activité :** Permet à l'athlète d'ajouter de nouvelles activités, avec des étapes inclusives telles que la saisie du titre, du type d'activité, de la source, du matériel utilisé et de la visibilité, chacune accessible via l'authentification.
- **Voir une Activité :** Permet à l'athlète de visualiser en détail une activité particulière, avec la possibilité d'exporter une analyse et de gérer la visibilité, soumis à une authentification.
- **Supprimer une Activité :** Offre la possibilité de retirer une activité, requérant une authentification pour garantir la sécurité des données.
**Flux d'Interaction :**
- Les actions telles que l'importation, l'exportation, l'ajout et la visualisation d'activités impliquent une authentification préalable pour garantir la confidentialité des données personnelles.
- Des inclusions précises, telles que la saisie du titre, du type d'activité, de la source, du matériel utilisé et de la visibilité, sont incorporées dans le processus d'ajout d'une activité, offrant une expérience utilisateur détaillée et conviviale.
Explorez ce diagramme pour comprendre la manière dont notre application place la gestion d'activités entre les mains des athlètes, les encourageant à suivre, analyser et optimiser leurs performances sportives de manière personnalisée et efficace.
```plantuml
left to right direction
:Athlete: as a
a --> (Importer des données)
(Importer des données) .> (Saisir la source) : <<include>>
a --> (Exporter mes données)
(Exporter mes données) .>(Exporter toutes les activités): <<extends>>
(Exporter mes données) ..>(Exporter une activité): <<include>>
a --> (Ajouter une activité)
(Ajouter une activité) ..>(Saisir un titre et une description): <<include>>
(Ajouter une activité) ..>(Saisir le type d'activité): <<include>>
(Ajouter une activité) .>(Saisir la source): <<include>>
(Saisir la source) ..>(Saisir le matériel utilisé): <<include>>
(Ajouter une activité) ..>(Saisir la visibilité): <<include>>
a --> (Voir une activité)
(Voir une activité) ..>(Exporter l'analyse): <<extends>>
(Voir une activité) ..>(Saisir la visibilité): <<extends>>
a --> (Supprimer une activité)
(Supprimer une activité) ..>(S'authentifier): <<include>>
(Importer des données) ...>(S'authentifier): <<include>>
(Exporter mes données) ...>(S'authentifier): <<include>>
(Ajouter une activité) ...>(S'authentifier): <<include>>
(Voir une activité) ...>(S'authentifier): <<include>>
```

@ -0,0 +1,56 @@
[retour au README.md](../../../README.md)
[Retour aux Documents](../../README_DOCUMENTS.md)
[Retour au diagramme de classes](../README_DIAGRAMMES.md)
# Introduction au Cas d'utilisation : Gestion des Relations Sociales pour un Athlète
Bienvenue dans la sphère sociale de notre application dédiée aux athlètes ! Ce diagramme de cas d'utilisation explore les fonctionnalités sociales clés offertes aux utilisateurs, mettant en lumière la connectivité et l'interaction sociale au sein de notre communauté sportive.
**Acteurs Principaux :**
- **Athlète :** Le protagoniste central, utilisant l'application pour gérer ses relations sociales et explorer les profils de ses pairs.
**Fonctionnalités Clés :**
- **Ajouter un Ami :** Permet à l'athlète d'ajouter de nouveaux amis, nécessitant la saisie du nom de l'ami et soumis à une authentification préalable.
- **Supprimer un Ami :** Offre la possibilité de retirer un ami, exigeant une authentification pour garantir la sécurité des données.
- **Voir Mes Amis :** Permet à l'athlète de visualiser la liste de ses amis, avec la possibilité d'accéder à des fonctionnalités supplémentaires comme la visualisation des profils.
- **Modifier Mes Informations :** Offre à l'athlète la possibilité de mettre à jour ses informations personnelles et de connexion, avec des extensions pour des détails plus spécifiques.
**Flux d'Interaction :**
- Le processus d'ajout d'un ami inclut la saisie du nom de l'ami, tandis que la suppression d'un ami et la visualisation de la liste des amis sont soumises à une authentification préalable pour protéger la confidentialité.
- Les modifications d'informations englobent deux extensions : la mise à jour des informations personnelles et la mise à jour des informations de connexion, offrant une personnalisation approfondie du profil athlétique.
- La visualisation du profil d'un ami s'étend à des fonctionnalités telles que la consultation des activités et des statistiques de l'ami, ajoutant une dimension sociale à l'expérience de suivi sportif.
Explorez ce diagramme pour découvrir comment notre application encourage l'interaction sociale entre les athlètes, favorisant une communauté engagée et collaborative au sein de laquelle les utilisateurs peuvent partager, interagir et se soutenir mutuellement dans leur parcours sportif.
```plantuml
left to right direction
:Athlete: as a
a --> (Ajouter un ami)
a --> (Supprimer un ami)
a --> (Voir mes amis)
a --> (Modifier mes informations)
(Ajouter un ami)->(Saisir le nom de l'ami)
(Supprimer un ami)..>(S'authentifier) : <<include>>
(Ajouter un ami)..>(S'authentifier) : <<include>>
(Voir mes amis)..>(S'authentifier) : <<include>>
(Voir mes amis)..>(Lister les amis) : <<include>>
(Modifier mes informations)..>(Informations personnelles) : <<extends>>
(Modifier mes informations)..>(Informations de connexion) : <<extends>>
(Modifier mes informations)..>(S'authentifier) : <<include>>
(Lister les amis)..>(Voir son profil) : <<include>>
(Voir son profil)..>(Voir ses activités) : <<extends>>
(Voir son profil)..>(Voir ses statistiques) : <<extends>>
(S'authentifier)..>(S'inscrire) : <<extends>>
(S'authentifier)..>(Se connecter) : <<include>>
(S'inscrire)..>(Inscription Athlète) : <<include>>
```

@ -1,107 +0,0 @@
<mxfile host="app.diagrams.net" modified="2023-09-25T06:43:46.406Z" agent="Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Firefox/102.0" etag="e-4pS3rH9xNpreRilvi5" version="21.8.2" type="device">
<diagram name="Page-1" id="2OfyMqm8PIhWsBFCJvOv">
<mxGraphModel dx="2049" dy="1071" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="Ym5UIEUMnJ661rIFWdHi-1" value="Sportif&lt;br&gt;" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;outlineConnect=0;" parent="1" vertex="1">
<mxGeometry x="100" y="240" width="30" height="60" as="geometry" />
</mxCell>
<mxCell id="Ym5UIEUMnJ661rIFWdHi-6" value="" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="230" y="170" width="340" height="890" as="geometry" />
</mxCell>
<mxCell id="Ym5UIEUMnJ661rIFWdHi-7" value="Application FitWeb" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="340" y="170" width="120" height="30" as="geometry" />
</mxCell>
<mxCell id="Ym5UIEUMnJ661rIFWdHi-8" value="" style="endArrow=none;html=1;rounded=0;exitX=-0.006;exitY=0.037;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="Ym5UIEUMnJ661rIFWdHi-6" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="230" y="201" as="sourcePoint" />
<mxPoint x="570" y="200" as="targetPoint" />
<Array as="points" />
</mxGeometry>
</mxCell>
<mxCell id="Ym5UIEUMnJ661rIFWdHi-9" value="" style="ellipse;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="320" y="220" width="160" height="100" as="geometry" />
</mxCell>
<mxCell id="Ym5UIEUMnJ661rIFWdHi-10" value="Analyser la fréquence cardique" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="332" y="255" width="136" height="30" as="geometry" />
</mxCell>
<mxCell id="Ym5UIEUMnJ661rIFWdHi-22" value="" style="ellipse;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="320" y="355" width="160" height="100" as="geometry" />
</mxCell>
<mxCell id="Ym5UIEUMnJ661rIFWdHi-23" value="Statistique condition physique&amp;nbsp;&amp;nbsp;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="340" y="375" width="120" height="60" as="geometry" />
</mxCell>
<mxCell id="Ym5UIEUMnJ661rIFWdHi-26" value="Améliorer les entrainements" style="ellipse;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="320" y="485" width="158" height="100" as="geometry" />
</mxCell>
<mxCell id="gRiRGuH9TPFdmmPZYA_R-7" value="" style="endArrow=classic;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" target="Ym5UIEUMnJ661rIFWdHi-9" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="130" y="270" as="sourcePoint" />
<mxPoint x="310" y="270" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="gRiRGuH9TPFdmmPZYA_R-9" value="" style="endArrow=classic;html=1;rounded=0;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="130" y="280" as="sourcePoint" />
<mxPoint x="320" y="390" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="gRiRGuH9TPFdmmPZYA_R-10" value="" style="endArrow=classic;html=1;rounded=0;entryX=0;entryY=0;entryDx=0;entryDy=0;" parent="1" target="Ym5UIEUMnJ661rIFWdHi-26" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="130" y="290" as="sourcePoint" />
<mxPoint x="320" y="485" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="gRiRGuH9TPFdmmPZYA_R-11" value="Développeur" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;outlineConnect=0;" parent="1" vertex="1">
<mxGeometry x="712" y="930" width="30" height="60" as="geometry" />
</mxCell>
<mxCell id="gRiRGuH9TPFdmmPZYA_R-13" value="" style="endArrow=classic;html=1;rounded=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" parent="1" edge="1" source="gRiRGuH9TPFdmmPZYA_R-11">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="132" y="857.5" as="sourcePoint" />
<mxPoint x="480" y="960" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="gRiRGuH9TPFdmmPZYA_R-15" value="&lt;font style=&quot;font-size: 16px;&quot;&gt;Diagramme de cas d&#39;utilisation de l&#39;application Fit Web&lt;/font&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="199" y="60" width="400" height="30" as="geometry" />
</mxCell>
<mxCell id="aGqo4vDs0eBD3chBgCWU-1" value="Coach Sportif" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;outlineConnect=0;" vertex="1" parent="1">
<mxGeometry x="712" y="630" width="30" height="60" as="geometry" />
</mxCell>
<mxCell id="aGqo4vDs0eBD3chBgCWU-5" value="Consulter les statistiques de son équipe" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="318" y="610" width="158" height="100" as="geometry" />
</mxCell>
<mxCell id="aGqo4vDs0eBD3chBgCWU-6" value="Développer et maintenir l&#39;application" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="320" y="910" width="158" height="100" as="geometry" />
</mxCell>
<mxCell id="aGqo4vDs0eBD3chBgCWU-7" value="" style="endArrow=classic;html=1;rounded=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="710" y="660" as="sourcePoint" />
<mxPoint x="480" y="660" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="aGqo4vDs0eBD3chBgCWU-8" value="&amp;nbsp;Reporter un bug" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="318" y="740" width="158" height="100" as="geometry" />
</mxCell>
<mxCell id="aGqo4vDs0eBD3chBgCWU-9" value="" style="endArrow=classic;html=1;rounded=0;entryX=1;entryY=0.41;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" target="aGqo4vDs0eBD3chBgCWU-8">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="710" y="670" as="sourcePoint" />
<mxPoint x="792" y="730" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="aGqo4vDs0eBD3chBgCWU-12" value="" style="endArrow=classic;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" target="aGqo4vDs0eBD3chBgCWU-8">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="140" y="330" as="sourcePoint" />
<mxPoint x="160" y="385" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="aGqo4vDs0eBD3chBgCWU-13" value="" style="endArrow=none;dashed=1;html=1;dashPattern=1 3;strokeWidth=2;rounded=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="aGqo4vDs0eBD3chBgCWU-8" target="aGqo4vDs0eBD3chBgCWU-6">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="268" y="930" as="sourcePoint" />
<mxPoint x="318" y="880" as="targetPoint" />
</mxGeometry>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

File diff suppressed because it is too large Load Diff

@ -0,0 +1,203 @@
[retour au README.md](../../../README.md)
[Retour aux Documents](../../README_DOCUMENTS.md)
[Retour au diagramme de classes](../README_DIAGRAMMES.md)
# Introduction au Diagramme de Classes : Plateforme de Gestion d'Activités Sportives
Bienvenue dans l'écosystème dynamique de notre plateforme de gestion d'activités sportives ! Ce diagramme de classes offre une vision complète des entités et des relations qui façonnent l'expérience des utilisateurs au sein de notre système.
**Entités Principales :**
- **Utilisateur (User) :** Représente les individus inscrits sur notre plateforme, avec des détails personnels tels que le nom, le prénom, l'email, etc. Chaque utilisateur a un rôle spécifique (Athlete, Coach) qui détermine ses interactions au sein de l'application.
- **Rôle (Role) :** Classe abstraite qui définit les rôles spécifiques des utilisateurs (Athlete, Coach). Contient des méthodes pour gérer les amis, les entraînements, et les demandes.
- **Athlète (Athlete) :** Spécialisation de la classe Role, représentant les utilisateurs actifs qui enregistrent des activités sportives, des statistiques, et interagissent avec d'autres athlètes.
- **Activité (Activite) :** Contient des détails sur une activité sportive tels que le type, la date, la durée, la fréquence cardiaque, etc.
- **Notification (Notification) :** Messages pour informer les utilisateurs des actions importantes.
- **Entraînement (Entrainement) :** Sessions planifiées d'activités physiques avec des détails comme la date, la localisation, la description, et les retours.
- **Statistique (Statistique) :** Informations détaillées sur les performances sportives d'un athlète, comprenant la distance totale, le poids, le temps total, la fréquence cardiaque, etc.
- **Source de Données (SourceDonnees) :** Représente les sources utilisées pour collecter des données, telles que les montres connectées.
**Relations Clés :**
- Les Utilisateurs ont un rôle spécifique (Athlete, Coach) qui détermine leurs fonctionnalités.
- Un Athlète peut enregistrer plusieurs Activités, possède des Statistiques, et une Sources de Données qui est la plus utilisé.
- Les Entraînements sont liés aux Utilisateurs, permettant une planification efficace.
- Les Notifications informent les Utilisateurs des événements importants tels qu'une demande d'amis ou une notification d'avertissement de ban.
Explorez ce diagramme pour comprendre comment notre plateforme offre une expérience complète, de la gestion des utilisateurs à l'enregistrement des activités sportives et au suivi des performances.
```plantuml
@startuml
class User {
- id: int
- username: String
- nom: string
- prenom: string
- email: string
- motDePasse: string
- sexe: string
- taille: float
- poids: float
- dateNaissance: \DateTime
+ getId(): int
+ getUsername(): string
+ setUsername(string $username): void
+ setId(int $id): void
+ getNom(): string
+ setNom(string $nom): void
+ getPrenom(): string
+ setPrenom(string $prenom): void
+ getEmail(): string
+ setEmail(string $email): void
+ getMotDePasse(): string
+ setMotDePasse(string $motDePasse): void
+ getSexe(): string
+ setSexe(string $sexe): void
+ getTaille(): float
+ setTaille(float $taille): void
+ getPoids(): float
+ setPoids(float $poids): void
+ getDateNaissance(): \DateTime
+ setDateNaissance(\DateTime $dateNaissance): void
+ getRole(): Role
+ setRole(Role $role): void
+ addNotification($notification): void
+ deleteNotification($index): void
+ isValidPassword(string $password): bool
+ __toString(): string
}
abstract class Role {
- id: int
- usersRequests: array
+ getUsersList(): array
+ getUsersRequests(): array
+ addUsersRequests(RelationshipRequest $request): void
+ removeRequest(RelationshipRequest $req): bool
+ CheckAdd(User $user): bool
+ addUser(User $user): bool
+ removeUser(User $user): bool
+ addTraining(Training $training): bool
+ getTrainingsList(): array
}
abstract class Coach extends Role {
}
class CoachAthlete extends Coach {
+ CheckAdd(User $user): bool
}
class Athlete extends Role {
+ getActivities(): array
+ addActivity(Activity $myActivity): bool
+ CheckAdd(User $user): bool
}
class Activite {
- idActivity: int
- type: String
- date: \DateTime
- heureDebut: \DateTime
- heureFin: \DateTime
- effortRessenti: int
- variability: float
- variance: float
- standardDeviation: float
- average: int
- maximum: int
- minimum: int
- avrTemperature: float
- hasAutoPause: bool
+ getIdActivity(): int
+ getType(): String
+ getDate(): \DateTime
+ getHeureDebut(): \DateTime
+ getHeureFin(): \DateTime
+ getEffortRessenti(): int
+ getVariability(): float
+ getVariance(): float
+ getStandardDeviation(): float
+ getAverage(): float
+ getMaximum(): int
+ getMinimum(): int
+ getAvrTemperature(): float
+ setType(String $type): void
+ setEffortRessenti(int $effortRessenti): void
+ __toString(): String
}
class Notification {
- type: string
- message: string
- toUserId: int
+ getType(): string
+ setType(string $type): void
+ getMessage(): string
+ setMessage(string $message): void
+ getToUserId(): int
+ setToUserId(int $toUserId): void
+ __construct(int $toUserId,string $type, string $message)
+ __toString(): string
}
class Entrainement {
- idTraining: int
- date: \DateTime
- latitude: float
- longitude: float
- description: String
- feedback: String
+ getId(): int
+ getDate(): \DateTime
+ getLocation(): String
+ getDescription(): String
+ getFeedback(): String
+ __toString(): String
}
class Statistique {
- idStat: int
- distanceTotale: float
- poids: float
- tempsTotal: time
- FCmoyenne: int
- FCmin: int
- FCmax: int
- cloriesBrulees: int
+ getIdStat(): int
+ getDistanceTotale(): float
+ getPoids(): float
+ getTempsTotal(): time
+ getFCmoyenne(): int
+ getFCmin(): int
+ getFCmax(): int
+ getCloriesBrulees(): int
+ __toString(): String
}
class SourceDonnees {
- idSource: int
- nom: String
- type: String
- precision: enum
- dateDerniereUtilisation: \DateTime
+ getIdSource(): int
+ getNom(): String
+ getType(): String
+ getPrecision(): enum
+ getDateDerniereUtilisation(): \DateTime
+ __toString(): String
}
User -> Role : role
Role -> User : usersList
Athlete -> Statistique : statsList
Athlete -> Activite : activityList
Athlete -> SourceDonnees : sdList
User -> Notification : notificationList
User -> Entrainement : trainingsList
Activite -> SourceDonnees : maSource
@enduml
```

@ -0,0 +1,91 @@
[retour au README.md](../../../README.md)
[Retour aux Documents](../../README_DOCUMENTS.md)
[Retour au diagramme de classes](../README_DIAGRAMMES.md)
# Introduction au Diagramme de la Couche d'Accès aux Données
Bienvenue dans le cœur de notre système, où les données prennent vie à travers des ensembles de données (repositories) structurés et performants. Ce diagramme met en lumière la conception de la couche d'accès aux données de notre application, offrant un aperçu clair de la gestion des entités clées telles que les utilisateurs, les notifications, les demandes de relations et les entraînements.
**Principes Fondamentaux :**
- **IGenericRepository :** Une abstraction générique établissant les contrats essentiels pour l'accès aux données. Définissant des opérations standardisées telles que la récupération, la mise à jour, l'ajout et la suppression d'entités.
- **Interfaces Spécialisées :** Des interfaces telles que `IUserRepository`, `INotificationRepository`, `IRelationshipRequestRepository` et `ITrainingRepository` étendent les fonctionnalités génériques pour répondre aux besoins spécifiques de chaque entité.
**Repositories Concrets :**
- **UserRepository :** Gère les données relatives aux utilisateurs, permettant des opérations de récupération, de mise à jour et de suppression avec une efficacité optimale.
- **NotificationRepository :** Responsable de la gestion des notifications, assurant un accès structuré et une manipulation sécurisée de ces informations cruciales.
- **RelationshipRequestRepository :** Facilite la gestion des demandes de relations entre utilisateurs (amitiés), garantissant une interaction claire et ordonnée au sein de l'application.
- **TrainingRepository :** Permet l'accès et la manipulation des données liées aux entraînements, facilitant le suivi des performances athlétiques.
Explorez ce diagramme pour découvrir la robustesse de notre architecture de gestion des données, mettant en œuvre des pratiques de développement SOLID pour assurer une expérience utilisateur fiable et évolutive.
```plantuml
@startuml couche_acces_aux_donnees
interface IGenericRepository {
+ getItemById(int id) : object
+ getNbItems() : int
+ getItems(int index, int count, string orderingPropertyName, bool descending) : array
+ getItemsByName(string substring, int index, int count, string orderingPropertyName, bool descending) : array
+ getItemByName(string substring, int index, int count, string orderingPropertyName, bool descending) : object
+ updateItem(oldItem, newItem) : void
+ addItem(item) : void
+ deleteItem(item) : bool
}
interface IUserRepository extends IGenericRepository {
}
interface INotificationRepository extends IGenericRepository {
}
interface IRelationshipRequestRepository extends IGenericRepository {
}
interface ITrainingRepository extends IGenericRepository {
}
class NotificationRepository implements INotificationRepository {
- notifications : array
+ getItemById(int id) : object
+ getNbItems() : int
+ getItems(int index, int count, string orderingPropertyName, bool descending) : array
+ getItemsByName(string substring, int index, int count, string orderingPropertyName, bool descending) : array
+ getItemByName(string substring, int index, int count, string orderingPropertyName, bool descending) : object
+ updateItem(oldItem, newItem) : void
+ addItem(item) : void
+ deleteItem(item) : bool
}
class RelationshipRequestRepository implements IRelationshipRequestRepository {
- requests : array
+ getItemById(int id) : object
+ getNbItems() : int
+ getItems(int index, int count, string orderingPropertyName, bool descending) : array
+ getItemsByName(string substring, int index, int count, string orderingPropertyName, bool descending) : array
+ getItemByName(string substring, int index, int count, string orderingPropertyName, bool descending) : object
+ updateItem(oldItem, newItem) : void
+ addItem(item) : void
+ deleteItem(item) : bool
}
class TrainingRepository implements ITrainingRepository {
- trainings : array
+ getItemById(int id) : object
+ getNbItems() : int
+ getItems(int index, int count, string orderingPropertyName, bool descending) : array
+ getItemsByDate(date, int index, int count, string orderingPropertyName, bool descending) : array
+ updateItem(oldItem, newItem) : void
+ addItem(item) : void
+ deleteItem(item) : bool
}
class UserRepository implements IUserRepository {
- users : array
+ getItemById(int id) : object
+ getNbItems() : int
+ getItems(int index, int count, string orderingPropertyName, bool descending) : array
+ getItemsByName(string substring, int index, int count, string orderingPropertyName, bool descending) : array
+ getItemByName(string substring, int index, int count, string orderingPropertyName, bool descending) : object
+ updateItem(oldItem, newItem) : void
+ addItem(item) : void
+ deleteItem(item) : bool
}
@enduml
```

@ -0,0 +1,139 @@
[retour au README.md](../../../README.md)
[Retour aux Documents](../../README_DOCUMENTS.md)
[Retour au diagramme de classes](../README_DIAGRAMMES.md)
# Introduction au Diagramme de Classes : Statistiques pour Coach
Bienvenue dans l'univers captivant de notre système de gestion d'activités sportives avec une mise au point spéciale sur les statistiques destinées aux athlètes. Ce diagramme de classes offre une vue approfondie de la manière dont les utilisateurs, en particulier les athlètes, interagissent avec leurs statistiques.
**Entités Principales :**
- **Utilisateur (User) :** Représente les individus inscrits sur notre plateforme, avec des détails personnels et un rôle spécifique dans l'écosystème sportif.
- **Athlète (Athlete) :** Un type spécialisé d'utilisateur qui possède des statistiques liées à ses activités sportives.
- **Coach (Coach) :** Un rôle qui s'étend à partir de la classe abstraite Role, dédié à la gestion des athlètes et de la vision de leurs statistiques.
- **Statistique (Statistique) :** Contient des informations détaillées sur les performances sportives d'un athlète, telles que la distance totale, le poids, le temps total, la fréquence cardiaque moyenne, minimale et maximale, ainsi que les calories brûlées.
**Relations Clés :**
- Les Utilisateurs ont un rôle spécifique (Athlete, Coach) qui influence leurs interactions au sein de la plateforme.
- Un Coach peut gérer une liste d'athlètes et avoir accès à leurs statistiques.
- Un Athlète peut enregistrer plusieurs activités afin d'avoir des statistiques liées à celle-ci.
**Objectif Principal :**
- Permettre aux coachs d'accéder et de surveiller les statistiques détaillées de leurs athlètes, offrant ainsi un aperçu complet de leurs performances sportives.
Explorez ce diagramme pour découvrir comment notre application crée une synergie entre les utilisateurs, les rôles, et les statistiques, contribuant ainsi à une expérience enrichissante dans le suivi des activités sportives.
```plantuml
@startuml
class Athlete {
+ getAthlete(): Athlete
+ getStatistic(): ?array
+ getUsersList(): array
+ getUserList(user: User): User
+ CheckAdd(user: User): bool
+ addUser(user: User): bool
+ removeUser(user: User): bool
}
abstract class Coach {
+ abstract getUsersList(): ?array
+ abstract getUserList(user: User): User
}
class CoachAthlete {
+ getUsersList(): ?array
+ getUserList(user: User): User
}
abstract class Role {
- int id
- array usersList
- TrainingRepository trainingRepository
+ abstract __construct(trainingRepository: ?TrainingRepository)
+ abstract getUsersList(): ?array
+ abstract getUserList(user: User): User
+ abstract getTraining(): ?TrainingRepository
+ abstract getTrainingsList(): ?array
+ abstract getTrainingList(training: Training): ?Training
+ abstract CheckAdd(user: User): bool
+ abstract CheckAddTraining(training: Training): bool
+ abstract addUser(user: User): bool
+ abstract removeUser(user: User): bool
+ abstract addTraining(training: Training): bool
+ abstract removeTraining(training: Training): bool
}
class User {
- int id
- String username
- string nom
- string prenom
- string email
- string motDePasse
- string sexe
- float taille
- float poids
- DateTime dateNaissance
+ __construct(id: int, username: String, nom: string, prenom: string, email: string, motDePasse: string, sexe: string, taille: float, poids: float, dateNaissance: DateTime, role: Role)
+ getId(): int
+ setId(id: int): void
+ getUsername(): String
+ setUsername(username: int): void
+ getNom(): string
+ setNom(nom: string): void
+ getPrenom(): string
+ setPrenom(prenom: string): void
+ getEmail(): string
+ setEmail(email: string): void
+ getMotDePasse(): string
+ setMotDePasse(motDePasse: string): void
+ getSexe(): string
+ setSexe(sexe: string): void
+ getTaille(): float
+ setTaille(taille: float): void
+ getPoids(): float
+ setPoids(poids: float): void
+ getDateNaissance(): DateTime
+ setDateNaissance(dateNaissance: DateTime): void
+ getRole(): Role
+ setRole(role: Role): void
+ isValidPassword(password: string): bool
+ __toString(): String
}
class Statistique {
- idStat: int
- distanceTotale: float
- poids: float
- tempsTotal: time
- FCmoyenne: int
- FCmin: int
- FCmax: int
- cloriesBrulees: int
+ getIdStat(): int
+ getDistanceTotale(): float
+ getPoids(): float
+ getTempsTotal(): time
+ getFCmoyenne(): int
+ getFCmin(): int
+ getFCmax(): int
+ getCloriesBrulees(): int
+ __toString(): String
}
CoachAthlete --|> Coach
Coach --|> Role
Athlete --|> Role
User -> Role : role
Role -> User : usersList
Athlete -> Statistique : statsList
@enduml
````

@ -0,0 +1,92 @@
[retour au README.md](../../../README.md)
[Retour aux Documents](../../README_DOCUMENTS.md)
[Retour au diagramme de classes](../README_DIAGRAMMES.md)
# Diagramme de Classes : Gestion des Utilisateurs et Notifications
Bienvenue dans le cœur de notre système, où la gestion des utilisateurs et des notifications prend vie à travers ce diagramme de classes. Explorez les relations et les fonctionnalités essentielles qui orchestrent l'interaction entre les utilisateurs, les demandes d'amis, et les notifications.
**Entités Principales :**
- **Utilisateur (User) :** Représente les individus inscrits sur notre plateforme, caractérisés par leur nom et établissant des liens d'amitié avec d'autres utilisateurs.
- **Notification (Notification) :** Contient le texte informatif des notifications qui peuvent être émises par le système.
- **Demande d'Ami (Ask) :** Modélise une demande d'amitié émise par un utilisateur en direction d'un autre.
**Interfaces et Classes Abstraites :**
- **INotifier :** Interface définissant la méthode `notify()`, implémentée par des classes concrètes pour gérer la notification aux observateurs.
- **Observer :** Interface définissant la méthode `update()`, implémentée par les classes qui souhaitent être informées des changements dans un sujet observé.
- **UserManager :** Classe abstraite gérant la logique métier liée aux utilisateurs, tels que l'ajout ou la suppression d'amis, la réponse aux demandes d'amis, et la récupération de la liste d'amis.
- **IUserRepository :** Interface définissant les méthodes pour la recherche d'utilisateurs et l'ajout d'un nouvel utilisateur.
**Relations Clés :**
- Les utilisateurs peuvent avoir plusieurs amis et plusieurs notifications.
- La classe UserManager est connectée à IUserRepository pour gérer les opérations liées aux utilisateurs.
- Observer et Subject sont des composants du modèle de conception "Observer", permettant la notification efficace des changements dans le système.
Plongez-vous dans ce diagramme pour découvrir comment notre application crée un écosystème social dynamique, permettant aux utilisateurs d'interagir, de rester informés et de développer des liens significatifs au sein de la communauté.
```plantuml
class User {
+ name : string
}
User "1" --> "*" User: friends
User "1" --> "*" Notification: notifications
User "1" --> "*" Ask: friendRequests
class Notification {
- text : string
}
interface INotifier {
+ notify() : void
}
INotifier --|> Observer
abstract class UserManager {
- currentUser : User
+ deleteFriend(userId : int) : void
+ addFriend(userId : int) : void
+ respondToFriendRequest(requestId : int, choice : bool) : void
+ getFriends(userId : int) : User[]
}
class Ask {
- fromUser : int
- toUser : int
}
Ask --|> Subject
abstract class Subject {
+ attach(o : Observer) : void
+ detach(o : Observer) : void
+ notify() : void
}
Subject "1" --> "*" Observer
interface Observer {
+ update() : void
}
UserManager ..> User
UserManager o-- IUserRepository
UserManager o-- INotifier
interface IUserRepository {
+ findByUsername(username : string) : User
+ addUser(user : User) : bool
}
IUserRepository ..> User
```

@ -0,0 +1,201 @@
[retour au README.md](../../../README.md)
[Retour aux Documents](../../README_DOCUMENTS.md)
[Retour au diagramme de classes](../README_DIAGRAMMES.md)
# Introduction au Modèle de Données de l'Application
L'architecture de données de notre application de suivi d'activités sportives repose sur un modèle robuste, avec des entités clés pour représenter les activités, les athlètes et les coachs et la récupération de ces données au sein de notre application. Découvrez les composants principaux de notre modèle de données :
## Activité
L'entité Activité représente une session d'activité sportive avec des détails variés tels que le type d'activité, la date, la durée, l'effort ressenti, etc. Le `ActiviteEntity` encapsule ces données, tandis que le `ActiviteGateway` gère la communication avec la base de données pour les activités.
## Athlète
L'entité Athlète représente un utilisateur de l'application qui participe à des activités sportives. Le `AthleteEntity` stocke les détails de l'athlète, et le `AtheletGateway` facilite l'accès et la gestion des données des athlètes.
## Coach
L'entité Coach représente un utilisateur qui peut superviser et coacher d'autres athlètes. Le `CoachEntity` stocke les détails du coach, tandis que le `CoachGateway` gère les interactions avec la base de données.
## Mapper
Les mappers, tels que `ActiviteMapper`, `AthleteMapper`, et `CoachMapper`, facilitent la conversion entre les entités et les modèles utilisés dans l'application.
## Connexion à la Base de Données
La classe `Connection` étend de `PDO` et assure la connexion à la base de données. Chaque Gateway utilise cette connexion pour interagir avec la base de données.
```plantuml
@startuml
class ActiviteEntity {
- idActivite: int
- type: string
- date: string
- heureDebut: string
- heureFin: string
- effortRessenti: int
- variabilite: int
- variance: int
- ecartType: int
- moyenne: int
- maximum: int
- minimum: int
- temperatureMoyenne: int
+ getIdActivite(): int
+ getType(): string
+ getDate(): string
+ getHeureDebut(): string
+ getHeureFin(): string
+ getEffortRessenti(): int
+ getVariabilite(): int
+ getVariance(): int
+ getEcartType(): int
+ getMoyenne(): int
+ getMaximum(): int
+ getMinimum(): int
+ getTemperatureMoyenne(): int
+ setIdActivite(idActivite: int): void
+ setType(type: string): void
+ setDate(date: string): void
+ setHeureDebut(heureDebut: string): void
+ setHeureFin(heureFin: string): void
+ setEffortRessenti(effortRessenti: int): void
+ setVariabilite(variabilite: int): void
+ setVariance(variance: int): void
+ setEcartType(ecartType: int): void
+ setMoyenne(moyenne: int): void
+ setMaximum(maximum: int): void
+ setMinimum(minimum: int): void
+ setTemperatureMoyenne(temperatureMoyenne: int): void
}
class ActiviteGateway {
+ __construct(connection: Connection)
+ getActivite(): ?array
+ getActiviteById(activiteId: int): ?array
+ getActiviteByType(type: string): ?array
+ getActiviteByDate(date: string): ?array
+ getActiviteByTimeRange(startTime: string, endTime: string): ?array
+ getActiviteByEffort(effortRessenti: int): ?array
+ getActiviteByVariability(variabilite: int): ?array
+ getActiviteByTemperature(temperatureMoyenne: int): ?array
+ addActivite(activite: ActiviteEntity): bool
+ updateActivite(oldActivite: ActiviteEntity, newActivite: ActiviteEntity): bool
+ deleteActivite(idActivite: int): bool
}
class ActiviteMapper {
+ map(data: array): ActiviteEntity
+ ActiviteEntityToModel(activiteEntity: ActiviteEntity): Activite
}
class AthleteEntity {
- idAthlete: int
- nom: string
- prenom: string
- email: string
- sexe: string
- taille: float
- poids: float
- motDePasse: string
- dateNaissance: string
+ getIdAthlete(): int
+ getNom(): string
+ getPrenom(): string
+ getEmail(): string
+ getSexe(): string
+ getTaille(): float
+ getPoids(): float
+ getMotDePasse(): string
+ getDateNaissance(): string
+ setIdAthlete(idAthlete: int): void
+ setNom(nom: string): void
+ setPrenom(prenom: string): void
+ setEmail(email: string): void
+ setSexe(sexe: string): void
+ setTaille(taille: float): void
+ setPoids(poids: float): void
+ setMotDePasse(motDePasse: string): void
+ setDateNaissance(dateNaissance: string): void
}
class AtheletGateway {
+ __construct(connection: Connection)
+ getAthlete(): ?array
+ getAthleteById(userId: int): ?array
+ getAthleteByName(name: string): ?array
+ getAthleteByFirstName(firstName: string): ?array
+ getAthleteByEmail(email: string): ?array
+ getAthleteByGender(gender: string): ?array
+ getAthleteByHeight(height: int): ?array
+ getAthleteByWeight(weight: int): ?array
+ getAthleteByBirthDate(birthdate: string): ?array
+ addAthlete(athlete: AthleteEntity): bool
+ updateAthlete(oldAthlete: AthleteEntity, newAthlete: AthleteEntity): bool
+ deleteAthlete(idAthlete: int): bool
}
class AthleteMapper {
+ fromSqlToEntity(data: array): array
+ athleteEntityToModel(athleteEntity: AthleteEntity): User
+ athleteToEntity(user: User): AthleteEntity
}
class CoachEntity {
- idCoach: int
- nom: string
- prenom: string
- email: string
- sexe: string
- taille: float
- poids: float
- motDePasse: string
- dateNaissance: string
+ getIdCoach(): int
+ getNom(): string
+ getPrenom(): string
+ getEmail(): string
+ getSexe(): string
+ getTaille(): float
+ getPoids(): float
+ getMotDePasse(): string
+ getDateNaissance(): string
+ setIdCoach(idCoach: int): void
+ setNom(nom: string): void
+ setPrenom(prenom: string): void
+ setEmail(email: string): void
+ setSexe(sexe: string): void
+ setTaille(taille: float): void
+ setPoids(poids: float): void
+ setMotDePasse(motDePasse: string): void
+ setDateNaissance(dateNaissance: string): void
}
class CoachGateway {
+ __construct(connection: Connection)
+ getCoach(): ?array
+ getCoachById(userId: int): ?array
+ getCoachByName(name: string): ?array
+ getCoachByFirstName(firstName: string): ?array
+ getCoachByEmail(email: string): ?array
+ getCoachByGender(gender : string): ?array
+ getCoachByHeight(height: int): ?array
+ getCoachByBirthDate(birthdate: string): ?array
+ addCoach(coach: CoachEntity): bool
+ updateCoach(oldCoach: CoachEntity, newCoach: CoachEntity): bool
+ deleteCoach(idCoach: int): bool
}
class CoachMapper {
+ map(data: array): CoachEntity
+ CoachEntityToModel(coachEntity: CoachEntity): User
+ CoachToEntity(user: User): CoachEntity
}
class Connection extends PDO {
- stmt
+ __construct(dsn: string, username: string, password: string)
+ executeQuery(query: string, parameters: array): bool
+ executeWithErrorHandling(query: string, params: array): array
+ getResults(): array
}
Connection <- ActiviteGateway : connection
Connection <- AtheletGateway : connection
Connection <- CoachGateway : connection
AthleteMapper -> AthleteEntity
CoachMapper -> CoachEntity
ActiviteMapper -> ActiviteEntity
ActiviteMapper -> ActiviteGateway
CoachMapper -> CoachGateway
AthleteMapper -> AtheletGateway
@enduml
```

@ -0,0 +1,137 @@
[retour au README.md](../../../README.md)
[Retour aux Documents](../../README_DOCUMENTS.md)
[Retour au diagramme de classes](../README_DIAGRAMMES.md)
# Diagramme de classes pour l'importation de fichiers .fit
Bienvenue dans le monde de la gestion d'activités sportives avec notre application innovante ! Ce diagramme de classe se concentre sur une fonctionnalité essentielle qui améliorera l'expérience des utilisateurs : l'importation de fichiers .fit. Nous avons conçu un diagramme de classes pour vous offrir une vision claire et structurée de la manière dont cette fonctionnalité est implémentée au sein de notre application.
**Acteurs Principaux :**
- Utilisateur (User) : Représente un individu inscrit sur notre plateforme.
- Athlète (Athlete) : Un type spécialisé d'utilisateur, bénéficiant de fonctionnalités supplémentaires liées à la gestion d'activités sportives et avec la capacité d'importer des fichiers .fit.
**Entités Clés :**
- Activité (Activity) : Représente une session d'activité physique, avec des détails tels que le type, la date, la durée, et plus encore.
- Gestionnaires (Managers) : Gérant différentes facettes de l'application, notamment les utilisateurs, les activités et les fichiers.
**Fonctionnalité Clé :**
- Importation de fichiers .fit : Permet aux utilisateurs de charger des données provenant de fichiers .fit via la bibliothèque `php-fit-file-analysis`, générés par des dispositifs de suivi d'activité. Ces fichiers contiennent des informations précieuses telles que la fréquence cardiaque, la distance parcourue et d'autres données de santé importante pour nos analyses.
**Architecture :**
- AuthService (Service d'Authentification) : Gère l'authentification des utilisateurs, garantissant un accès sécurisé à la fonction d'importation.
- UserManager (Gestionnaire d'Utilisateurs) : Gère les opérations liées aux utilisateurs, y compris l'importation de fichiers .fit.
- ActivityManager (Gestionnaire d'Activités) : Responsable du stockage et de la gestion des activités importées.
**Objectif :**
Offrir aux utilisateurs, en particulier aux athlètes, la possibilité d'enrichir leur profil et de suivre leur performance en important des données détaillées à partir de fichiers .fit.
```plantuml
@startuml issue028_DiagrammeDeClasses
class Activite {
-idActivite:int
-type:String
-date:Date
-heureDebut:Date
-heureFin:Date
-effortRessenti:int
-variability:float
-variance:float
-standardDeviation:float
-average:float
-maximum:int
-minimum:int
-avrTemperature:float
-hasAutoPause:boolean
+getIdActivite():int
+getType():String
+getDate():Date
+getHeureDebut():Date
+getHeureFin():Date
+getEffortRessenti():int
+getVariability():float
+getVariance():float
+getStandardDeviation():float
+getAverage():float
+getMaximum():int
+getMinimum():int
+getAvrTemperature():float
+setType(type:String):void
+setEffortRessenti(effortRessenti:int):void
+__toString():String
}
class Role {
-id:int
}
class Athlete {
+getActivities():array
+addActivity(myActivity:Activity):boolean
}
class User {
-id:int
-username:String
-nom:String
-prenom:String
-email:String
-motDePasse:String
-sexe:String
-taille:float
-poids:float
-dateNaissance:Date
+getId():int
+setId(id:int):void
+getUsername():String
+setUsername(username:String):void
+getNom():String
+setNom(nom:String):void
+getPrenom():String
+setPrenom(prenom:String):void
+getEmail():String
+setEmail(email:String):void
+getMotDePasse():String
+setMotDePasse(motDePasse:String):void
+getSexe():String
+setSexe(sexe:String):void
+getTaille():float
+setTaille(taille:float):void
+getPoids():float
+setPoids(poids:float):void
+getDateNaissance():Date
+setDateNaissance(dateNaissance:Date):void
+getRole():Role
+setRole(role:Role):void
+isValidPassword(password:String):boolean
+__toString():String
}
class AthleteManager {
+getActivities():array
}
class ActivityManager {
+saveFitFileToJSON(monFichierFit:object):boolean
+uploadFile(type:string, effortRessenti:int, file_path_or_data:string|resource, options:array):boolean
}
class DataManager {
}
class UserManager {
+login(loginUser:string, passwordUser:string):boolean
+register(loginUser:string, passwordUser:string, data:array):boolean
+deconnecter():boolean
}
User -> Role: role
Athlete -|> Role
DataManager -> UserManager: -userMgr
DataManager -> AthleteManager: -athleteMgr
DataManager -> ActivityManager: -activityMgr
UserManager -> AuthService: -authService
UserManager -> User: -currentUser
ActivityManager -> AuthService: -authService
Athlete -> Activite: listActivite
AthleteManager -> AuthService: -authService
@enduml
```

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

@ -0,0 +1,50 @@
[retour au README.md](../../../README.md)
[Retour aux Documents](../../README_DOCUMENTS.md)
[Retour au diagramme de classes](../README_DIAGRAMMES.md)
# Introduction au Diagramme de Séquence : Gestion des Demandes d'Amis
Bienvenue dans le processus dynamique de gestion des demandes d'amis au sein de notre application ! Ce diagramme de séquence met en évidence les étapes clés impliquées dans la gestion des demandes d'amis entre utilisateurs.
**Acteurs Principaux :**
- **Utilisateur (u) :** L'individu interagissant avec l'application, recevant et répondant aux demandes d'amis.
**Flux d'Interaction :**
1. **Réception d'une Demande d'Ami :** Lorsqu'un utilisateur reçoit une demande d'ami, le modèle (Model) notifie le contrôleur (Controller) de la nouvelle demande, spécifiant l'identifiant de l'utilisateur émetteur.
2. **Affichage de la Demande d'Ami :** Le contrôleur transmet l'information à la vue (View), qui affiche la demande d'ami à l'utilisateur.
3. **Affichage de la Page des Demandes d'Amis :** L'utilisateur visualise la page des demandes d'amis dans l'interface utilisateur.
4. **Réponse à la Demande d'Ami :** L'utilisateur prend une décision quant à la demande d'ami, en répondant par un choix binaire (accepter ou refuser).
5. **Enregistrement de la Réponse :** La vue (View) transmet la réponse de l'utilisateur au contrôleur, qui enregistre cette réponse.
6. **Envoi de la Réponse :** Le contrôleur communique avec le modèle pour envoyer la réponse, indiquant si la demande a été acceptée (true) ou refusée (false).
À travers ce diagramme de séquence, découvrez comment notre application gère efficacement le processus de gestion des demandes d'amis, offrant aux utilisateurs une expérience transparente et réactive lors de l'établissement de connexions sociales au sein de la plateforme.
````plantuml
@startuml
actor User as u
boundary View as v
control Controller as c
entity Model as m
m-->c: pendingRequests: Request[]
c-->v: DisplayPendingRequests(pendingRequests)
v-->u: Show Friend Requests
u->v: RespondToRequest(requestId, response)
v-->c: RecordResponse(requestId, response)
c->m: UpdateRequestStatus(requestId, response)
m-->c: updateStatus: success/failure
c-->v: NotifyUpdateResult(updateStatus)
v-->u: Show Response Result
@enduml
``````

@ -0,0 +1,31 @@
[retour au README.md](../../../README.md)
[Retour aux Documents](../../README_DOCUMENTS.md)
[Retour au diagramme de classes](../README_DIAGRAMMES.md)
# Introduction au Diagramme de Séquence : Recherche d'Amis
Bienvenue dans le processus dynamique de recherche d'amis au sein de notre application ! Ce diagramme de séquence met en lumière les étapes clés impliquées lorsque les utilisateurs recherchent des amis en utilisant un pseudo spécifique.
**Acteurs Principaux :**
- **Utilisateur (u) :** L'individu interagissant avec l'application, initié à la recherche d'amis.
**Flux d'Interaction :**
1. **Accès à la Fonctionnalité de Recherche :** L'utilisateur déclenche la fonctionnalité de recherche d'amis depuis son interface utilisateur.
2. **Saisie du Pseudo :** L'utilisateur entre le pseudo de l'ami qu'il souhaite rechercher.
3. **Requête de Recherche :** La vue (View) transmet la demande de recherche au contrôleur (Controller), qui déclenche une requête GET au serveur pour récupérer la liste des amis correspondant au pseudo saisi.
4. **Traitement de la Requête :** Le modèle (Model) récupère la liste d'amis correspondante en utilisant l'identifiant de l'utilisateur et notifie le contrôleur du résultat.
5. **Notification des Utilisateurs :** Le modèle informe également les utilisateurs concernés (émetteur et destinataire) de l'action de recherche effectuée.
6. **Rendu de la Vue :** Le contrôleur reçoit la liste d'amis du modèle et rend cette liste à la vue.
7. **Affichage des Résultats :** La vue affiche les résultats de la recherche à l'utilisateur, montrant les amis qui correspondent au pseudo saisi.
À travers ce diagramme de séquence, découvrez comment notre application facilite le processus de recherche d'amis, fournissant aux utilisateurs une interface conviviale et réactive pour élargir leur réseau social au sein de la plateforme.
<img src="AjouterAmis.png" alt="Diagramme de Séquence : Recherche d'Amis" width="1000"/>

@ -0,0 +1,41 @@
[retour au README.md](../../../README.md)
[Retour aux Documents](../../README_DOCUMENTS.md)
[Retour au diagramme de classes](../README_DIAGRAMMES.md)
# Introduction au Processus de Connexion sur la Plateforme
Bienvenue sur notre plateforme de gestion d'activités sportives ! Pour offrir une expérience fluide et sécurisée, nous avons mis en place un processus de connexion intuitif. Découvrez comment accéder à votre compte ou créer un nouveau compte en quelques étapes simples.
**Étapes du Processus :**
1. **Demande de Page de Connexion :** L'utilisateur démarre en exprimant le désir de se connecter à la plateforme.
2. **Vérification de la Connexion Préexistante :** Le système vérifie si l'utilisateur est déjà connecté. En cas de connexion active, l'utilisateur est redirigé directement vers sa page de compte.
3. **Page de Connexion :** Si l'utilisateur n'est pas encore connecté, il est dirigé vers la page de connexion, où il peut saisir ses informations d'identification.
4. **Choix pour les Utilisateurs Possédant un Compte :** Si l'utilisateur a déjà un compte, il peut fournir ses informations de connexion existantes.
5. **Création de Compte pour les Nouveaux Utilisateurs :** Pour ceux qui n'ont pas encore de compte, l'option de création de compte est disponible. L'utilisateur peut fournir les détails nécessaires pour créer son compte.
6. **Page de Création de Compte :** Une page dédiée guide l'utilisateur tout au long du processus de création de compte, lui permettant de saisir les informations nécessaires.
7. **Validation et Connexion :** Une fois que les informations de connexion ou de création de compte sont fournies, le système procède à la vérification et connecte l'utilisateur à son compte.
```plantuml
actor User as u
u->Systeme : demandePageConnexion()
alt User déjà connecté
Systeme-->u : redirectionPageCompte()
end
Systeme-->u : PageConnexion()
alt User possède déjà un compte
u->Systeme:InfosConnexion()
else
u->Systeme:CreerCompte()
Systeme-->u :PageCreationCompte()
u->Systeme:InfosCreationCompte()
end
Systeme-->u :Connecter()
```

@ -0,0 +1,64 @@
[retour au README.md](../../../README.md)
[Retour aux Documents](../../README_DOCUMENTS.md)
[Retour au diagramme de classes](../README_DIAGRAMMES.md)
# Introduction au Diagramme de Séquence : Gestion des Amis
Bienvenue dans le processus dynamique de gestion des amis au sein de notre application ! Ce diagramme de séquence met en lumière les interactions entre l'utilisateur et l'application, ainsi que le flux d'informations entre les différentes composantes du système.
**Acteurs Principaux :**
- **Utilisateur (u) :** L'individu interagissant avec l'application, souhaitant consulter et gérer sa liste d'amis.
**Flux d'Interaction :**
1. **Demande de la Page d'Amis :** L'utilisateur déclenche la demande de la page d'amis, amorçant le processus d'affichage de sa liste d'amis.
2. **Récupération des Amis :** Le contrôleur (Controller) reçoit la demande et interagit avec le modèle (Model) pour récupérer la liste d'amis associée à l'identifiant de l'utilisateur.
- *Cas de Récupération Réussi :* Si la récupération est réussie, le modèle transmet la liste d'amis au contrôleur.
- *Cas d'Échec de Récupération :* En cas d'échec, une notification d'erreur est renvoyée.
3. **Affichage de la Liste d'Amis :** Le contrôleur rend la vue (View) en utilisant la liste d'amis récupérée, qui est ensuite affichée à l'utilisateur.
4. **Suppression d'un Ami :** L'utilisateur décide de supprimer un ami spécifique en cliquant sur l'option correspondante.
5. **Traitement de la Suppression :** Le contrôleur, en réponse à la demande de suppression, envoie une requête au modèle pour effectuer la suppression de l'ami identifié par son identifiant utilisateur (idUser).
- *Cas de Suppression Réussie :* Si la suppression est réussie, le modèle renvoie la liste d'amis mise à jour.
- *Cas d'Échec de Suppression :* En cas d'échec, une notification d'erreur est renvoyée.
6. **Affichage de la Liste d'Amis Mise à Jour :** La vue est mise à jour avec la nouvelle liste d'amis, qui est ensuite affichée à l'utilisateur.
À travers ce diagramme de séquence, découvrez comment notre application gère de manière fluide et réactive les interactions de l'utilisateur avec sa liste d'amis, garantissant une expérience utilisateur cohérente et sans heurts.
```plantuml
actor User as u
boundary View as v
control Controller as c
entity Model as m
u->v: Request Friends Page
v->c: Get /Friends
c->m: getFriends(userId)
alt successful retrieval
m-->c: friendsList: User[]
else retrieval failed
m-->c: error
end
c-->v: renderView(friendsList)
v-->u: Display Friends
u->v: clickDeleteFriend(idUser)
v->c: Post: deleteFriend(idUser)
c->m: deleteFriend(idUser)
alt successful deletion
m-->c: updatedFriendsList: User[]
else deletion failed
m-->c: error
end
c-->v: renderView(updatedFriendsList)
v-->u: Display Updated Friends
```

@ -0,0 +1,26 @@
[retour au README.md](../../README.md)
[Retour aux Documents](../README_DOCUMENTS.md)
# Diagrammes nécéssaires à notre projet
## Diagrammes de classes
- [issue016 - Statistiques coach ](DiagrammeDeClasses/README_issue016.md)
- [issue022 - Ajout des amis ](DiagrammeDeClasses/README_issue022.md)
- [issue023 - User Gateway ](DiagrammeDeClasses/README_issue023.md)
- [issue028 - Importation de fichiers .fit](DiagrammeDeClasses/README_issue028.md)
- [couche d'accès aux données](DiagrammeDeClasses/README_accesDonnees.md)
- [Diagramme général](DiagrammeDeClasses/README_DIAGRAMME.md)
## Diagrammes de séquence
- [Envoi de demande d'ami](DiagrammeDeSequence/README_demandeAmi.md)
- [Accepter une demande d'ami](DiagrammeDeSequence/README_accepterAmi.md)
- [Supprimer un ami](DiagrammeDeSequence/README_suppressionAmi.md)
- [issue021 - Authentification ](DiagrammeDeSequence/README_issue021.md)
## Diagrammes de cas d'utilisation
- [Cas d'utilisation pour la gestion du compte et des amitiés](CasUtilisations/README_gestionCompteAmitie.md)
- [Cas d'utilisation pour la gestion des activités et données](CasUtilisations/README_gestionActivites.md)
- [Cas d'utilisation pour la suivi d'une équipe sportive](CasUtilisations/README_coachSuiviSportif.md)
## Base de Données
- [MLD](BDD/README_BDD.md)

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

Binary file not shown.

@ -0,0 +1,13 @@
[retour au README.md](../../../README.md)
[Retour aux Documents](../../README_DOCUMENTS.md)
[Retour à la Gestion](../README_GESTION.md)
# GANTT
## Comparaison GANTT
- [Comparaison GANTT - Excel](CompraraisonGANTT.xlsx)
<img src="ComparaisonGANTT.png">
## Gestion de projet - MSProject
- [Gestion de projet - MSProject](Gantt.mpp)
- [GANTT - PDF](Gantt.pdf)

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

@ -0,0 +1,10 @@
[retour au README.md](../../../README.md)
[Retour aux Documents](../../README_DOCUMENTS.md)
[Retour à la Gestion](../README_GESTION.md)
## PERT
- [PERT - Excel](PERT.xlsx)
### PERT - Image
<img src="PERT1.png">
<img src="PERT2.png">

@ -0,0 +1,10 @@
[retour au README.md](../../README.md)
[Retour aux Documents](../README_DOCUMENTS.md)
# Gestion de projet
## PERT
- [PERT](PERT/README_PERT.md)
## GANTT
- [GANTT](GANTT/README_GANTT.md)

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 27 KiB

@ -0,0 +1,8 @@
[retour au README.md](../../README.md)
[Retour aux Documents](../README_DOCUMENTS.md)
# Personas
- [Personas Elsa Justin - PDF](ElsaJustin.pdf)
- [Personas Ethan Hulist - PDF](EthanHulist.pdf)
- [Personas Jules Gerdoli - PDF](JulesGerdoli.pdf)

@ -0,0 +1,11 @@
[README.md](../README.md)
## SOMMAIRE
# Diagrammes
- [Diagrammes](Diagramme/README_DIAGRAMMES.md)
# Personnas
- [Personnas](Personnas/README_PERSONNAS.md)
# Gestion de projet
- [Gestion de projet](Gestion/README_GESTION.md)

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2023 antoine.perederii
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

@ -1,26 +1,34 @@
<div align = center>
<h1>HeartTrack</h1>
<img src="Documents/Images/logo.png" />
</div>
<div align = center>
[Présentation](#présentation) | [Répartion](#répartition-du-git) | [Développement](#développement) | [Wiki](https://codefirst.iut.uca.fr/git/HeartTrack_Dev/Web/wiki)
---
---
&nbsp; ![PHP](https://img.shields.io/badge/PHP-000?style=for-the-badge&logo=Php&logoColor=white&color=purple)
&nbsp; ![CSS](https://img.shields.io/badge/CSS-000?style=for-the-badge&logo=css3&logoColor=white&color=darkblue)
&nbsp; ![DOCKER](https://img.shields.io/badge/Docker-2496ED.svg?style=for-the-badge&logo=Docker&logoColor=white)
&nbsp; ![PostgreSQL](https://img.shields.io/badge/Postgresql-000?style=for-the-badge&logo=postgresql&logoColor=white&color=blue)
&nbsp; ![JAVASCRIPT](https://img.shields.io/badge/JavaScript-000?style=for-the-badge&logo=javascript&logoColor=white&color=yellow)
</br>
</br>
<!-- [![Build Status]()](https://codefirst.iut.uca.fr/git/HeartDev/Web)
[![Quality Gate Status]()](https://codefirst.iut.uca.fr/git/HeartDev/Web)
[![Bugs]()](https://codefirst.iut.uca.fr/git/HeartDev/Web)
[![Coverage]()](https://codefirst.iut.uca.fr/git/HeartDev/Web)
[![Vulnerabilities]()](https://codefirst.iut.uca.fr/git/HeartDev/Web) -->
---
</div>
# Table des matières
[Présentation](#présentation) | [Répartition du Git](#répartition-du-git) | [Documentation](#documentation) | [Prerequisites](#prerequisites) | [Getting Started](#getting-started) | [Features](#features) | [Ce que nous avons fait](#ce-que-nous-avons-fait) | [Fabriqué avec](#fabriqué-avec) | [Contributeurs](#contributeurs) | [Comment contribuer](#comment-contribuer) | [License](#license) | [Remerciements](#remerciements)
</div>
# HeartTrack
## Présentation
@ -29,20 +37,22 @@
### Contexte
HeartTrack est une application web PHP et mobile Android destinée aux sportifs pour l'analyse de courbes cardiaques. L'objectif principal de cette application est de récupérer les données de fréquence cardiaque à partir d'une montre, de les afficher sous forme de courbes, d'identifier des patterns, de fournir des statistiques et de réaliser des prédictions liées à l'effort physique, à la chaleur, à la récupération, etc.
HeartTrack est une application web PHP et mobile Android destinée aux sportifs et aux coachs afin de permettre l'analyse de courbes de fréquences cardiaques et le suivi d'équipe sportive. L'objectif principal de cette application est de récupérer les données de fréquence cardiaque à partir de fichiers .FIT, de les afficher sous forme de courbes, d'identifier des paternes, de fournir des statistiques et de réaliser des prédictions liées à l'effort physique, à la chaleur, à la récupération, etc.
### Récapitulatif du Projet
Le projet HeartTrack, avec son application HeartTrack, vise à offrir une solution complète pour l'analyse des données de fréquence cardiaque, en mettant l'accent sur les besoins des sportifs. L'application sera capable de traiter et d'interpréter les données de manière intelligente, fournissant ainsi des informations précieuses pour optimiser les performances sportives et la santé.
Le projet HeartTrack, avec son application HeartTrack, vise à offrir une solution Open Source d'analyse des données de fréquence cardiaque, en mettant l'accent sur les besoins des sportifs et des coachs. L'application sera capable de traiter et d'interpréter les données de manière intelligente, fournissant ainsi des informations précieuses pour optimiser les performances sportives et la santé.
## Répartition du Git
[**Sources**](Sources) : **Code de l'application**
[**Sources**](Sources/) : **Code de l'application**
[**Documents**](Documents) : **Documentation de l'application**
[**Documents**](Documents/README_DOCUMENTS.md) : **Documentation de l'application et diagrammes**
--
[**Wiki**](https://codefirst.iut.uca.fr/git/HeartDev/Web/wiki/PHP) : **Wiki de notre projet (attendus PHP)**
---
Le projet HeartTrack utilise un modèle de flux de travail Git (Gitflow) pour organiser le développement. Voici une brève explication des principales branches :
@ -50,70 +60,80 @@ Le projet HeartTrack utilise un modèle de flux de travail Git (Gitflow) pour or
- **branche master** : La branche master est similaire à la branche de production, mais elle peut contenir des fonctionnalités en cours de développement qui sont presque prêtes pour une mise en production.
- **branche test** : Cette branche est utilisée pour déployer une version démo de l'application. Elle est mise à jour avec les dernières fonctionnalités et surtout la totalité de leurs test en développement.
- **branche test** : Cette branche est utilisée pour permettre différents tests sur l'application.
- **branche issue** : Pour chaque problème (issue) que vous résolvez, vous devez créer une branche portant le nom de l'issue, par exemple, "issue_#32_nom" où 32 est le numéro de l'issue et nom est une description courte de l'issue. Une fois l'issue résolue, assurez-vous de mettre à jour le changelog et de créer une merge request.
## Développement
### Travailler sur une Issue
Si vous êtes amené à travailler sur une issue, suivez ces principes :
1. Les issues sont créées dans le système de gestion de versions (Git), chaque issue ayant un numéro unique.
2. Lorsque vous décidez de travailler sur une issue, attribuez-vous l'issue et créez une branche avec un nom correspondant à l'issue sous la forme suivante : "issue_#32_nom" où 32 est le numéro de l'issue et nom est son libellé.
3. Une fois que vous avez résolu l'issue dans votre branche, assurez-vous de mettre à jour le changelog avec les modifications apportées.
4. Ensuite, poussez votre branche sur le référentiel distant et créez une merge request pour que vos modifications soient examinées par les autres membres de l'équipe.
## Prérequis
Avant de commencer à travailler sur le projet HeartTrack, assurez-vous d'avoir les prérequis suivants installés :
- Serveur web (par exemple, Apache)
- PHP (version recommandée)
- Base de données (par exemple, MySQL)
- Git
## Installation
Pour installer et exécuter le projet HeartTrack, suivez ces étapes :
1. Clonez ce référentiel sur votre machine locale en utilisant la commande suivante :
`git clone https://codefirst.iut.uca.fr/git/FitDev/Projet_fit_web`
2. Configurez votre environnement de développement avec les prérequis mentionnés ci-dessus.
3. Copiez le fichier de configuration d'exemple et configurez les paramètres de l'application :
cp config/config.example.php config/config.php
4. Importez la structure de la base de données à partir du fichier SQL fourni :
mysql -u votre_nom_utilisateur -p < db_schema.sql ou psql comme vous le souhaitez
5. Démarrez votre serveur web et accédez à l'application via le navigateur.
`npm run dev`
ou
`composer dev` e.q `php composer.phar dev`
## Exécution
Pour exécuter l'application, suivez les instructions d'installation ci-dessus. Une fois l'application configurée et le serveur web en cours d'exécution, accédez à l'application via votre navigateur web.
## Déploiement en Démo
Pour déployer une version de démonstration de l'application, utilisez la branche "demo" du référentiel. Cette branche est généralement mise à jour avec les dernières fonctionnalités en développement.
## Déploiement en Production
Pour déployer la version de production de l'application, utilisez la branche "prod" du référentiel.
---
N'hésitez pas à contribuer au développement de HeartTrack en résolvant des issues ou en ajoutant de nouvelles fonctionnalités. Nous vous encourageons à suivre les principes et les pratiques décrites dans ce document pour un développement efficace et collaboratif.
- **branche démo** : Cette branche est utilisée pour déployer une version démo de l'application. Elle est mise à jour avec les dernières fonctionnalités en développement.
## Documentation
Documentation et informations à propos de `HearthTrack` disponible [ici]()
### Prerequisites
* [Visual Studio code](https://code.visualstudio.com/) - exemple d'IDE gratuit
* [Git](https://git-scm.com/) - Versioning
* [XAMPP : X, Apache, MySQL, Perl, PHP](https://www.apachefriends.org/fr/index.html) - Languages
* [PostgreSQL](https://www.postgresql.org/) - Base de Donnée
## Getting Started
1. Cloner le répos
2. Faire un `composer install` dans le dossier `Sources/`
3. Importer la base de données `Sources/Database/hearttrack.sql`
4. Lancer le serveur Apache et MySQL
5. Lancer le projet avec `php -S localhost:8000 -t Sources/`
6. Ouvrir le navigateur et aller sur `localhost:8000/index.php`
## Features
* [x] Import de fichier .fit
* [x] Ajout d'amis
* [x] Création de compte
* [x] Ajout d'athlete pour le coach
* [x] Création d'entrainement
* [x] Création de courbes
* [x] Gérer ses permissions
## Ce que nous avons fait
* [x] PDO et Pattern Gateway
* [x] implémentation MVC et 2 contrôleurs
* [x] pattern Frontcontroleur sans routage
* [x] autoloader simple sans namespace ?
* [x] validation des entrées
* [x] vues dont vue erreur
* [x] partie administration ou équivalent
* [x] vues complètes bien segmentées et utilisation bootstrap
* [x] utilisation namespace et psr4
* [x] moteur twig pour les vues
* [x] pattern Frontcontroleur avec routage
* [x] Javascript
* [x] pattern fabrique
## Fabriqué avec
* [JetBrains Toolbox](https://www.jetbrains.com/fr-fr/toolbox-app/) - IDE
* [CodeFirst](https://codefirst.iut.uca.fr/) - Gitea
* [Drone](https://codefirst.iut.uca.fr/) - CI
* [SonarQube](https://codefirst.iut.uca.fr/sonar/) - Qualité
* [PHP 8](https://www.php.net/downloads) - Langage
* [html 5, CSS 3](https://developer.mozilla.org/fr/docs/Web/HTML) - Langage
* [Twig](https://twig.symfony.com/) - Langage
* [Doxygen](https://codefirst.iut.uca.fr/sonar/) - Documentation
## Contributeurs
* [Antoine PEREDERII](https://codefirst.iut.uca.fr/git/antoine.perederii)
* [Paul LEVRAULT](https://codefirst.iut.uca.fr/git/paul.levrault)
* [Kevin MONTEIRO](https://codefirst.iut.uca.fr/git/kevin.monteiro)
* [Antoine PINAGOT](https://codefirst.iut.uca.fr/git/antoine.pinagot)
* [David D'HALMEIDA](https://codefirst.iut.uca.fr/git/david.d_almeida)
## Comment contribuer
1. Forkez le projet (<https://codefirst.iut.uca.fr/git/HeartDev/Web>)
2. Créez votre branche (`git checkout -b feature/featureName`)
3. commit vos changements (`git commit -am 'Add some feature'`)
4. Push sur la branche (`git push origin feature/featureName`)
5. Créez une nouvelle Pull Request
## License
Ce projet est sous licence ``MIT`` - voir le fichier [LICENSE.md](LICENSE.md) pour plus d'informations.
## Remerciements
Ce projet a été réalisé dans le cadre de la SAÉ Projet Web et Mobile de l'IUT de Clermont-Ferrand.

@ -3,17 +3,43 @@
"autoload": {
"psr-4": {
"Hearttrack\\": "src/",
"Console\\":"src/Console"
"App\\": "src/app",
"Data\\": "src/data",
"Model\\": "src/data/model",
"Repository\\": "src/data/model/repository",
"Manager\\": "src/data/model/manager",
"Network\\": "src/data/core/network",
"Stub\\": [
"src/data/stub",
"src/data/stub/service",
"src/data/stub/repository"
],
"Console\\": "src/console",
"Shared\\": "src/shared",
"App\\Router\\": "src/app/router",
"App\\Controller\\": "src/app/controller",
"App\\Router\\Response\\" : "src/app/router/response",
"App\\Router\\Middleware\\" : "src/app/router/middleware",
"App\\Router\\Request\\" : "src/app/router/request",
"Shared\\Exception\\": "src/shared/exception",
"Shared\\Attributes\\": "src/shared/attributes",
"App\\Views\\Directives\\" : "src/app/views/directives",
"Data\\Core\\": "src/data/core/"
}
},
"require": {
"twig/twig": "^3.0"
"twig/twig": "^3.0",
"altorouter/altorouter": "1.1.0",
"vlucas/phpdotenv": "^5.5",
"psr/container": "^2.0",
"adriangibbons/php-fit-file-analysis": "^3.2.0"
},
"require-dev": {
"phpunit/phpunit": "*"
},
"scripts": {
"dev": "php -S localhost:8080 -t public -d display_errors=1 -d error_reporting=E_ALL"
}
"dev": "php -S localhost:8080 -t public -d display_errors=1 -d error_reporting=E_ALL",
"dev:console": "export APP_ENV=console && php public/index.php",
"dev:html" : "export APP_ENV=html && php -S localhost:8080 -t public -d display_errors=1 -d error_reporting=E_ALL"
}
}

1002
Sources/composer.lock generated

File diff suppressed because it is too large Load Diff

@ -0,0 +1,2 @@
AddType text/css .css
AddType application/javascript .js

@ -0,0 +1,31 @@
FROM php:8.2-apache as base
# Installation de dépendances nécessaires pour Composer
RUN apt-get update && apt-get install -y \
git \
unzip
# Installation de Composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
RUN docker-php-ext-install pdo pdo_mysql
# Copy configs
COPY ./config/virtual-host.conf /etc/apache2/sites-available/000-default.conf
COPY ./config/httpd.conf /etc/apache2/httpd.conf
# Setup App
RUN mkdir -p /app/public && chown -R www-data:www-data /app
WORKDIR /app
# add sources code
COPY . /app
ENV VOLUME_PATH /app/public
RUN composer install
EXPOSE 80
CMD ["apache2-foreground"]

@ -1,34 +1,22 @@
<?php
function loadEnv($filePath) {
if (!file_exists($filePath)) {
return false;
}
$lines = file($filePath, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
if ($lines === false) {
return false;
}
use Dotenv\Dotenv;
use Shared\Log;
foreach ($lines as $line) {
// Skip comments
if (strpos(trim($line), '#') === 0) {
continue;
}
$dotenv = Dotenv::createUnsafeImmutable(__DIR__,'.env');
$dotenv->safeLoad();
// echo($_ENV);
// apenrently getEnv is not a good thing cause
// const DB_HOST = $_ENV['DB_HOST'] ?? 'localhost';
// const DB_DATABASE = $_ENV['DB_DATABASE'] ?? 'heartTrack';
// const DB_USER = $_ENV['DB_USER'] ?? 'toto';
// const DB_PASSWORD = $_ENV['DB_PASSWORD'] ?? 'achanger';
define("APP_ENV", 'development');
list($key, $value) = explode('=', $line, 2);
$_ENV[trim($key)] = trim($value);
}
const DB_HOST = 'localhost';
const DB_DATABASE = 'heartTrack';
const DB_USER = 'toto';
const DB_PASSWORD = 'achanger';
//const APP_ENV = 'console';
return true;
}
// Load the .env file
loadEnv(__DIR__ . '/.env');
const DB_HOST = isset($_ENV['DB_HOST']) ? $_ENV['DB_HOST'] : 'localhost';
const DB_DATABASE = isset($_ENV['DB_DATABASE']) ? $_ENV['DB_DATABASE'] : 'heartTrack';
const DB_USER = isset($_ENV['DB_USER']) ? $_ENV['DB_USER'] : 'toto';
const DB_PASSWORD = isset($_ENV['DB_PASSWORD']) ? $_ENV['DB_PASSWORD'] : 'achanger';
const APP_ENV = isset($_ENV['APP_ENV']) ? $_ENV['APP_ENV'] : 'development';
const dsn = "mysql:host=" . DB_HOST . ";dbname=" . DB_DATABASE;
const DSN = "mysql:host=" . DB_HOST . ";dbname=" . DB_DATABASE;

@ -0,0 +1 @@
SetEnv ASSET_PREFIX containers/HeartDev-web/

@ -1,21 +1,19 @@
server {
listen 80;
server_name localhost;
index index.php index.html index.htm;
root /usr/share/nginx/html;
error_page 404 /index.php;
root /var/www/html;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass php:9000; # service name defined in docker-compose.yml file
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
include fastcgi_params;
}
location ~ /\.ht {
deny all;
location / {
root /usr/share/nginx/html;
try_files $uri /index.php;
}
}
}

@ -0,0 +1,39 @@
<VirtualHost *:80>
ServerName default
<Directory />
Options FollowSymLinks
AllowOverride None
Require all denied
</Directory>
<Directory ${VOLUME_PATH}>
AllowOverride All
Require all granted
</Directory>
DocumentRoot ${VOLUME_PATH}
AccessFileName .htaccess
<FilesMatch "^\.ht">
Require all denied
</FilesMatch>
LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %O" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
CustomLog /proc/self/fd/1 combined
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>
# Multiple DirectoryIndex directives within the same context will add
# to the list of resources to look for rather than replace
# https://httpd.apache.org/docs/current/mod/mod_dir.html#directoryindex
DirectoryIndex disabled
DirectoryIndex index.php index.html
</VirtualHost>

@ -1,15 +1,42 @@
version: '3'
services:
web:
nginx:
image: nginx:latest
ports:
- "8080:80"
- "3000:80"
volumes:
- ./public:/var/www/html
- ./config/nginx.conf:/etc/nginx/conf.d
links:
- php
php:
image: php:7.4-fpm
- ./config/nginx.conf:/etc/nginx/conf.d/default.conf
- .:/var/www
depends_on:
- mysql
- web
web:
build:
context: .
dockerfile: ./config/Dockerfile
ports:
- 9000:9000
volumes:
- ./src:/var/www/html
- .:/var/www
depends_on:
- mysql
environment:
DB_HOST: mysql
DB_PORT: port
DB_DATABASE: test
DB_USER: user
DB_PASSWORD: pass
APP_ENV: development
mysql:
image: mysql:latest
container_name: my-mysql-container
environment:
MYSQL_ROOT_PASSWORD: pass
MYSQL_DATABASE: test
MYSQL_USER: user
MYSQL_PASSWORD: pass
ports:
- "3307:3306"

@ -10,7 +10,9 @@
"test": "echo \"Error: no test specified\" && exit 1",
"tailwind": "tailwindcss -i ./src/app/views/global.css -o public/css/app.css --watch",
"build:css": "tailwindcss build ./src/app/views/global.css -o public/css/app.css",
"dev": "php -S localhost:8080 -t public -d display_errors=1 -d error_reporting=E_ALL"
"dev": "php -S localhost:8080 -t public -d display_errors=1 -d error_reporting=E_ALL",
"dev:console": "export APP_ENV=console && php public/index.php"
},
"keywords": [],
"author": "",

@ -0,0 +1,54 @@
// Set new default font family and font color to mimic Bootstrap's default styling
Chart.defaults.global.defaultFontFamily = '-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif';
Chart.defaults.global.defaultFontColor = '#292b2c';
// Area Chart Example
var ctx = document.getElementById("myAreaChart");
var myLineChart = new Chart(ctx, {
type: 'line',
data: {
labels: ["Mar 1", "Mar 2", "Mar 3", "Mar 4", "Mar 5", "Mar 6", "Mar 7", "Mar 8", "Mar 9", "Mar 10", "Mar 11", "Mar 12", "Mar 13"],
datasets: [{
label: "Sessions",
lineTension: 0.3,
backgroundColor: "rgba(2,117,216,0.2)",
borderColor: "rgba(2,117,216,1)",
pointRadius: 5,
pointBackgroundColor: "rgba(2,117,216,1)",
pointBorderColor: "rgba(255,255,255,0.8)",
pointHoverRadius: 5,
pointHoverBackgroundColor: "rgba(2,117,216,1)",
pointHitRadius: 50,
pointBorderWidth: 2,
data: [10000, 30162, 26263, 18394, 18287, 28682, 31274, 33259, 25849, 24159, 32651, 31984, 38451],
}],
},
options: {
scales: {
xAxes: [{
time: {
unit: 'date'
},
gridLines: {
display: false
},
ticks: {
maxTicksLimit: 7
}
}],
yAxes: [{
ticks: {
min: 0,
max: 40000,
maxTicksLimit: 5
},
gridLines: {
color: "rgba(0, 0, 0, .125)",
}
}],
},
legend: {
display: false
}
}
});

@ -0,0 +1,46 @@
// Set new default font family and font color to mimic Bootstrap's default styling
Chart.defaults.global.defaultFontFamily = '-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif';
Chart.defaults.global.defaultFontColor = '#292b2c';
// Bar Chart Example
var ctx = document.getElementById("myBarChart");
var myLineChart = new Chart(ctx, {
type: 'bar',
data: {
labels: ["January", "February", "March", "April", "May", "June"],
datasets: [{
label: "Revenue",
backgroundColor: "rgba(2,117,216,1)",
borderColor: "rgba(2,117,216,1)",
data: [4215, 5312, 6251, 7841, 9821, 14984],
}],
},
options: {
scales: {
xAxes: [{
time: {
unit: 'month'
},
gridLines: {
display: false
},
ticks: {
maxTicksLimit: 6
}
}],
yAxes: [{
ticks: {
min: 0,
max: 15000,
maxTicksLimit: 5
},
gridLines: {
display: true
}
}],
},
legend: {
display: false
}
}
});

@ -0,0 +1,16 @@
// Set new default font family and font color to mimic Bootstrap's default styling
Chart.defaults.global.defaultFontFamily = '-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif';
Chart.defaults.global.defaultFontColor = '#292b2c';
// Pie Chart Example
var ctx = document.getElementById("myPieChart");
var myPieChart = new Chart(ctx, {
type: 'pie',
data: {
labels: ["Blue", "Red", "Yellow", "Green"],
datasets: [{
data: [12.21, 15.58, 11.25, 8.32],
backgroundColor: ['#007bff', '#dc3545', '#ffc107', '#28a745'],
}],
},
});

@ -0,0 +1,4 @@
// Call the dataTables jQuery plugin
$(document).ready(function() {
$('#dataTable').DataTable();
});

Binary file not shown.

After

Width:  |  Height:  |  Size: 784 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 190 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 586 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 972 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 924 B

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 553 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 533 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 831 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 878 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 552 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 576 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 540 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 538 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 586 B

@ -0,0 +1,948 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:i="&amp;ns_ai;"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
sodipodi:docname="upload your files.svg"
xml:space="preserve"
enable-background="new 0 0 600 410"
viewBox="0 0 600 410"
height="410px"
width="600px"
y="0px"
x="0px"
id="Layer_1"
version="1.1"><metadata
id="metadata155"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
id="defs153" /><sodipodi:namedview
inkscape:current-layer="g110"
inkscape:window-maximized="0"
inkscape:window-y="0"
inkscape:window-x="0"
inkscape:cy="205"
inkscape:cx="300"
inkscape:zoom="1.895"
showgrid="false"
id="namedview151"
inkscape:window-height="1114"
inkscape:window-width="2025"
inkscape:pageshadow="2"
inkscape:pageopacity="0"
guidetolerance="10"
gridtolerance="10"
objecttolerance="10"
borderopacity="1"
bordercolor="#666666"
pagecolor="#ffffff" />
<switch
id="switch148">
<foreignObject
height="1"
width="1"
y="0"
x="0"
requiredExtensions="http://ns.adobe.com/AdobeIllustrator/10.0/">
<i:aipgfRef
xlink:href="#adobe_illustrator_pgf">
</i:aipgfRef>
</foreignObject>
<g
id="g146"
i:extraneous="self">
<g
id="g110">
<path
id="path2"
d="M240,351.7h103.6c1.9,0,3.5-1.8,3.5-3.8v-66.8c0-2.2-1.6-3.8-3.6-3.8l-61.5,0.2c-1,0-1.8-0.4-2.5-1.1 l-6.3-6.8c-0.6-0.7-1.6-1.1-2.5-1.1H240c-1.9,0-3.5,1.8-3.5,3.8V348C236.5,350,238,351.7,240,351.7z"
fill="#383838" />
<path
id="path4"
d="M341.1,333h-97.9c-1.6,0-2.9-1.3-2.9-2.9v-48c0-1.6,1.3-2.9,2.9-2.9h98.1c1.6,0,2.9,1.3,2.9,2.9v48 C344.1,331.7,342.8,333,341.1,333z"
fill="#FFFFFF" />
<g
id="g50"
opacity="0.1">
<path
id="path6"
d="M341.2,333.5h-97.9c-1.6,0-2.9-1.3-2.9-2.9v-48c0-1.6,1.3-2.9,2.9-2.9h98.1 c1.6,0,2.9,1.3,2.9,2.9v48C344.1,332.2,342.9,333.5,341.2,333.5z"
fill-opacity="0"
fill="#383838" />
<path
id="path8"
d="M341.4,333.6h-98.1c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9h98.1c1.6,0,2.9,1.3,2.9,2.9v48C344.2,332.3,342.9,333.6,341.4,333.6z"
enable-background="new "
fill="#383838"
opacity="4.761905e-02" />
<path
id="path10"
d="M341.5,333.6h-98.1c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9h98.1c1.6,0,2.9,1.3,2.9,2.9v48C344.4,332.4,343,333.6,341.5,333.6z"
enable-background="new "
fill="#383838"
opacity="9.523810e-02" />
<path
id="path12"
d="M341.6,333.8h-98.1c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9h98.1c1.6,0,2.9,1.3,2.9,2.9v48C344.5,332.4,343.2,333.8,341.6,333.8z"
enable-background="new "
fill="#383838"
opacity="0.1429" />
<path
id="path14"
d="M341.6,333.9h-97.9c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9h97.9c1.6,0,2.9,1.3,2.9,2.9v48C344.6,332.6,343.3,333.9,341.6,333.9z"
enable-background="new "
fill="#383838"
opacity="0.1905" />
<path
id="path16"
d="M341.7,333.9h-98c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9h98.1c1.6,0,2.9,1.3,2.9,2.9v48C344.6,332.6,343.4,333.9,341.7,333.9z"
enable-background="new "
fill="#383838"
opacity="0.2381" />
<path
id="path18"
d="M341.8,334h-98c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9h98.1c1.6,0,2.9,1.3,2.9,2.9v48C344.7,332.7,343.4,334,341.8,334z"
enable-background="new "
fill="#383838"
opacity="0.2857" />
<path
id="path20"
d="M342,334.1h-98.1c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9H342c1.6,0,2.9,1.3,2.9,2.9v48C344.8,332.8,343.5,334.1,342,334.1z"
enable-background="new "
fill="#383838"
opacity="0.3333" />
<path
id="path22"
d="M342,334.1h-98c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9h98.1c1.6,0,2.9,1.3,2.9,2.9v48C345,332.9,343.6,334.1,342,334.1z"
enable-background="new "
fill="#383838"
opacity="0.381" />
<path
id="path24"
d="M342.1,334.2h-98c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9h98.1c1.6,0,2.9,1.3,2.9,2.9v48C345,332.9,343.6,334.2,342.1,334.2z"
enable-background="new "
fill="#383838"
opacity="0.4286" />
<path
id="path26"
d="M342.2,334.4h-98.1c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9h98.1c1.6,0,2.9,1.3,2.9,2.9v47.9C345.1,333,343.9,334.4,342.2,334.4z"
enable-background="new "
fill="#383838"
opacity="0.4762" />
<path
id="path28"
d="M342.3,334.4h-98c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9h98.1c1.6,0,2.9,1.3,2.9,2.9v48C345.2,333,343.9,334.4,342.3,334.4z"
enable-background="new "
fill="#383838"
opacity="0.5238" />
<path
id="path30"
d="M342.4,334.5h-98c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9h98.1c1.6,0,2.9,1.3,2.9,2.9v48C345.3,333.2,344,334.5,342.4,334.5z"
enable-background="new "
fill="#383838"
opacity="0.5714" />
<path
id="path32"
d="M342.4,334.6h-97.9c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9h98.1c1.6,0,2.9,1.3,2.9,2.9v48C345.4,333.3,344.1,334.6,342.4,334.6z"
enable-background="new "
fill="#383838"
opacity="0.619" />
<path
id="path34"
d="M342.6,334.6h-98.1c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9h98.1c1.6,0,2.9,1.3,2.9,2.9v48C345.4,333.4,344.1,334.6,342.6,334.6z"
enable-background="new "
fill="#383838"
opacity="0.6667" />
<path
id="path36"
d="M342.7,334.7h-98.1c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9h98.1c1.6,0,2.9,1.3,2.9,2.9v48C345.6,333.4,344.2,334.7,342.7,334.7z"
enable-background="new "
fill="#383838"
opacity="0.7143" />
<path
id="path38"
d="M342.7,334.8h-98c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9h98.1c1.6,0,2.9,1.3,2.9,2.9v48C345.7,333.5,344.4,334.8,342.7,334.8z"
enable-background="new "
fill="#383838"
opacity="0.7619" />
<path
id="path40"
d="M342.9,334.8h-98c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9H343c1.6,0,2.9,1.3,2.9,2.9v48C345.8,333.5,344.5,334.8,342.9,334.8z"
enable-background="new "
fill="#383838"
opacity="0.8095" />
<path
id="path42"
d="M342.9,335H245c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9h98c1.6,0,2.9,1.3,2.9,2.9v48C345.8,333.6,344.5,335,342.9,335z"
enable-background="new "
fill="#383838"
opacity="0.8571" />
<path
id="path44"
d="M343,335.1h-98c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9h98c1.6,0,2.9,1.3,2.9,2.9v48C345.9,333.8,344.6,335.1,343,335.1z"
enable-background="new "
fill="#383838"
opacity="0.9048" />
<path
id="path46"
d="M343.2,335.1h-98.1c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9h98.1c1.6,0,2.9,1.3,2.9,2.9v48C346,333.8,344.7,335.1,343.2,335.1z"
enable-background="new "
fill="#383838"
opacity="0.9524" />
<path
id="path48"
d="M343.2,335.2h-98c-1.6,0-2.9-1.3-2.9-2.9v-48c0-1.6,1.3-2.9,2.9-2.9h98.1c1.6,0,2.9,1.3,2.9,2.9v48 C346.1,333.9,344.8,335.2,343.2,335.2z"
fill="#383838" />
</g>
<path
id="path52"
d="M342.8,335.2h-98.1c-1.6,0-2.9-1.3-2.9-2.9v-48c0-1.6,1.3-2.9,2.9-2.9h98.1c1.6,0,2.9,1.3,2.9,2.9v48 C345.7,333.9,344.4,335.2,342.8,335.2z"
fill="#FFFFFF" />
<g
id="g98"
opacity="0.1">
<path
id="path54"
d="M343,335.7h-97.9c-1.6,0-2.9-1.3-2.9-2.9v-48c0-1.6,1.3-2.9,2.9-2.9h98.1 c1.6,0,2.9,1.3,2.9,2.9v48C345.9,334.4,344.6,335.7,343,335.7z"
fill-opacity="0"
fill="#383838" />
<path
id="path56"
d="M343.2,335.8h-98.1c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9h98.1c1.6,0,2.9,1.3,2.9,2.9v48C346,334.5,344.8,335.8,343.2,335.8z"
enable-background="new "
fill="#383838"
opacity="4.761905e-02" />
<path
id="path58"
d="M343.3,335.9h-98.1c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9h98.1c1.6,0,2.9,1.3,2.9,2.9v48C346.1,334.6,344.8,335.9,343.3,335.9z"
enable-background="new "
fill="#383838"
opacity="9.523810e-02" />
<path
id="path60"
d="M343.4,335.9h-98.1c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9h98.1c1.6,0,2.9,1.3,2.9,2.9v48C346.3,334.6,345,335.9,343.4,335.9z"
enable-background="new "
fill="#383838"
opacity="0.1429" />
<path
id="path62"
d="M343.4,336h-97.9c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9h98.1c1.6,0,2.9,1.3,2.9,2.9v48C346.4,334.7,345.1,336,343.4,336z"
enable-background="new "
fill="#383838"
opacity="0.1905" />
<path
id="path64"
d="M343.5,336h-98c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9h98.1c1.6,0,2.9,1.3,2.9,2.9v48C346.4,334.8,345.1,336,343.5,336z"
enable-background="new "
fill="#383838"
opacity="0.2381" />
<path
id="path66"
d="M343.6,336.2h-98c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9h98.1c1.6,0,2.9,1.3,2.9,2.9v48C346.5,334.8,345.2,336.2,343.6,336.2z"
enable-background="new "
fill="#383838"
opacity="0.2857" />
<path
id="path68"
d="M343.6,336.3h-97.9c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9h98.1c1.6,0,2.9,1.3,2.9,2.9v48C346.6,335,345.3,336.3,343.6,336.3z"
enable-background="new "
fill="#383838"
opacity="0.3333" />
<path
id="path70"
d="M343.9,336.4h-98.1c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9h98.1c1.6,0,2.9,1.3,2.9,2.9v48C346.7,335.1,345.4,336.4,343.9,336.4z"
enable-background="new "
fill="#383838"
opacity="0.381" />
<path
id="path72"
d="M343.9,336.4h-98c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9H344c1.6,0,2.9,1.3,2.9,2.9v48C346.7,335.1,345.4,336.4,343.9,336.4z"
enable-background="new "
fill="#383838"
opacity="0.4286" />
<path
id="path74"
d="M344,336.5h-98.1c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9H344c1.6,0,2.9,1.3,2.9,2.9v48C346.9,335.2,345.6,336.5,344,336.5z"
enable-background="new "
fill="#383838"
opacity="0.4762" />
<path
id="path76"
d="M344.1,336.5h-98c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9h98.1c1.6,0,2.9,1.3,2.9,2.9v48C347,335.3,345.7,336.5,344.1,336.5z"
enable-background="new "
fill="#383838"
opacity="0.5238" />
<path
id="path78"
d="M344.1,336.6h-97.9c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9h98.1c1.6,0,2.9,1.3,2.9,2.9v48C347.1,335.3,345.8,336.6,344.1,336.6z"
enable-background="new "
fill="#383838"
opacity="0.5714" />
<path
id="path80"
d="M344.2,336.8h-97.9c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9h98.1c1.6,0,2.9,1.3,2.9,2.9v48C347.2,335.4,345.9,336.8,344.2,336.8z"
enable-background="new "
fill="#383838"
opacity="0.619" />
<path
id="path82"
d="M344.4,336.9h-98.1c-1.6,0-2.9-1.3-2.9-2.9v-48.1 c0-1.6,1.3-2.9,2.9-2.9h98.1c1.6,0,2.9,1.3,2.9,2.9v48C347.2,335.6,345.9,336.9,344.4,336.9z"
enable-background="new "
fill="#383838"
opacity="0.6667" />
<path
id="path84"
d="M344.5,336.9h-98.1c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9h98.1c1.6,0,2.9,1.3,2.9,2.9v48C347.3,335.6,346,336.9,344.5,336.9z"
enable-background="new "
fill="#383838"
opacity="0.7143" />
<path
id="path86"
d="M344.5,337h-98c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9h98.1c1.6,0,2.9,1.3,2.9,2.9v48C347.5,335.7,346.1,337,344.5,337z"
enable-background="new "
fill="#383838"
opacity="0.7619" />
<path
id="path88"
d="M344.6,337h-97.9c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9h98.1c1.6,0,2.9,1.3,2.9,2.9v48C347.5,335.8,346.3,337,344.6,337z"
enable-background="new "
fill="#383838"
opacity="0.8095" />
<path
id="path90"
d="M344.7,337.1h-97.9c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9h98.1c1.6,0,2.9,1.3,2.9,2.9v48C347.6,335.8,346.3,337.1,344.7,337.1z"
enable-background="new "
fill="#383838"
opacity="0.8571" />
<path
id="path92"
d="M344.8,337.2h-98c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9h98.1c1.6,0,2.9,1.3,2.9,2.9v48C347.7,335.9,346.4,337.2,344.8,337.2z"
enable-background="new "
fill="#383838"
opacity="0.9048" />
<path
id="path94"
d="M345,337.2h-98.1c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9H345c1.6,0,2.9,1.3,2.9,2.9v48C347.8,335.9,346.5,337.2,345,337.2z"
enable-background="new "
fill="#383838"
opacity="0.9524" />
<path
id="path96"
d="M345,337.4h-98c-1.6,0-2.9-1.3-2.9-2.9v-48c0-1.6,1.3-2.9,2.9-2.9h98.1c1.6,0,2.9,1.3,2.9,2.9v48 C347.9,336,346.6,337.4,345,337.4z"
fill="#383838" />
</g>
<path
id="path100"
d="M345,337.4h-98c-1.6,0-2.9-1.3-2.9-2.9v-48c0-1.6,1.3-2.9,2.9-2.9h98.1c1.6,0,2.9,1.3,2.9,2.9v48 C347.9,336,346.6,337.4,345,337.4z"
fill="#FFFFFF" />
<g
id="g104">
<path
id="path102"
d="M346.4,364.4H236.5c-2,0-3.7-1.7-3.7-3.8v-66c0-2,1.7-3.8,3.8-3.8h55.2c1,0,1.3-0.1,2-0.8l6.7-6.7 c0.7-0.7,1.7-1.1,2.6-1.1h43.2c2,0,3.7,1.7,3.7,3.8v74.6C350.1,362.7,348.4,364.4,346.4,364.4z"
fill="#55ACEE" />
</g>
</g>
<path
id="path112"
d="M382,79.8h-7.1c0.1-0.7,0.1-1.3,0.1-2c0-13.3-10.8-24.2-24.2-24.2c-2,0-3.6,0-5,0 c-5.5-20-23.8-34.7-45.6-34.7c-21.7,0-40,14.7-45.6,34.7c-1.4,0-3.1,0-5,0c-13.3,0-24.2,10.8-24.2,24.2c0,0.7,0,1.3,0.1,2h-7.1 c-15,0-27.2,12.2-27.2,27.2l0,0c0,15,12.2,27.2,27.2,27.2h163.5c15,0,27.2-12.2,27.2-27.2l0,0C409.2,92,397,79.8,382,79.8z"
fill="#58AEF3" />
<rect
id="rect114"
height="80"
width="34.3"
fill="#383838"
y="186.9"
x="278.9" />
<path
id="path116"
d="M269.6,203.7c17.5-3.4,35.3-3.5,52.8-0.3l-27.4-60.2L269.6,203.7z"
fill="#383838" />
<g
id="g120">
<path
id="path118"
d="M296,245.1c-7.2,0-13.1-5.9-13.1-13.1s5.9-13.1,13.1-13.1s13.1,5.9,13.1,13.1S303.3,245.1,296,245.1z M296,219.9c-6.6,0-12,5.4-12,12s5.4,12,12,12s12-5.4,12-12S302.6,219.9,296,219.9z"
fill="#FFFFFF" />
</g>
<g
id="g124">
<path
id="path122"
d="M294.3,238.3c-0.4,0-0.9-0.2-1.3-0.5l-4.3-3.6c-0.8-0.7-0.9-1.9-0.2-2.8c0.7-0.8,1.9-0.9,2.8-0.2l3,2.5 l7.5-6.9c0.8-0.7,2-0.7,2.8,0.1c0.8,0.8,0.7,2-0.1,2.8l-8.8,8.1C295.3,238.1,294.8,238.3,294.3,238.3z"
fill="#FFFFFF" />
</g>
</g>
</switch>
<i:aipgf
i:pgfVersion="24"
i:pgfEncoding="zstd/base64"
id="adobe_illustrator_pgf">
<![CDATA[
KLUv/QBYjDwDWuQakyqQAGDYDQDwe7ejpSQMkQg2DwwwL+HFw/QhxYqISBBItaVZBAAAYVkEAAQB
CWwJaQmgdARyrazZJR2B3pZ7SUegDaLE5pckdyf3DuO1nWVZjbHeBG/q0fTlN82tw2/+dWZjAcA1
OYQF8AGzVjjbsIC1Vffqsu1rdYWyGYyHA1otrEMZrrlmtX3NqxzK8PuK4dYVzu4rbrWr6525YPiF
47YVxjAcrwHY2NINYHWu1WVfq0XRcmtuqyWHrrjVsnPoiltxCAvosBAWwKrJ4ey+2jXA2oYy/HLZ
FabCcSibwWC4neUYhnVLbVlh3LZmd2VjTrZk11VjsNrGa4A3dMVzvAZw31YIC4hVl2WFsgpb3VCG
Y5UVymawGIYDCGMY3l2TmvOttebhNwEQvzGYbV+hK26Frrj1hjEMt+TYFbveWThrtSzVXUPZDNYO
mOVQNoOxbSuEBajs7KohLECW1xieue/svq1QhuNYGMMwWY5el6ZJmuH25QpTZ2wYw3AshMVv6Ipb
LoyVV1fIehPc2st6YzjkjnE094heNF0l/ciKdXbZcNZiXzM7s96EtyXDbwgLUOHZ29ptKMPx6lJj
cijDr7V9Z1fYzvLatm+Lta5tpfVaVrkWvl6va11bViibweAYVmczy9Ld+3I1rHegm10WssJUV21Z
MCuT2/Ztra74XeV4DbDGMFeNFW2rhqw3QRQrnUjKrBpodl9MOgKpcDoCsfLrst3rdqaG8kE7mG3R
jqyyLaVjZ5cyhjoWzSyrG5Dn0m2X3bhctZvdlXWpcdppKB3fYgdZCeR5lWXK2rLUOX5hARdxbrEW
RQeJzS6WpEeFgLcCvzGqSkeg7UMxGLtm3BcAbPxmeNuuaK+9aNuu6F7l12t+rZv+/zi/1s0uzfLP
r3XDR06W37/WTflZV6S2QJ06g2aZtcBcNoCVHZWvddPCXMraUjHft1S486mk5EjyGdS2NYyGIlO0
WMvastTQOlMLWrX1bmSLJl5nV9N6LbOaaVeQooOYSgLeSgArO1KlI1CnFS1XbVVWF8ARa/dlYWvc
CVhbePa2OphtW7PLxnC8BnhhX5KbJOWYxZSk3t2X7ttaQQJWl6tZZwGXtl3R17rZvew6N0sz1N8k
u/831zrc5Dh75/mt+BJ+Q9vvclZn0ByDsTCXjcmsq47i920xawB2Vtv1o3KxcfodnV5bVrfOavvK
bFubsXIXr7AKd6bKtmrHzq46ygLWuVtdtp1r76vT71yjdBrK/MJyyMIu0qXCY9y+LZltVVmd6TWG
xbBurr2y1uvKOrlzsTGsG9By11iFZVeN587UUPbv/4+sjnfx276tTu3Mknv+XQZTnVWXOq+zeQXN
K0idVcvawjNVfgR4BHjM3lmutVSyi1hblsrGaoDtWmWtt3VfdwXFaoDNslzZbWcCaq0aQOwWEDlW
A6hkF6GAB8yr63X5GrtaNtaS17nGYuN5Vh2r63XbmQBFB1ldb8GGU+ogkN0peKf1KItVzgC1hWXW
MpYm2W2zJLf7sjMrvx5Fp/o27vOG2vUzu+zr2f5D8bjWubW2K8gVqy9rjimyZoAaxxRRXWMK/Mao
hmvw6+lWmFqDuerG77kGz7WO7u7LzioA2HidZfXTxeSV05kaiqJr1fUjdvrvmVrQzfHadTCXjWfQ
6npbrCsSuwWqm9VY18pBUKg+ALAgDUXRza5G7FTfgJltWZY6C1hD3RogXuU19nR7ayhb9W3coxNV
38aps2oxXe5F5bnns8xuKp6Na3k2buMAUGJ51nleW9Xjci97AGWPfX9tbvL7rc1Qd+b4zfJzP46m
1770fvyb5N7cJjmGuvuj6U1Pjn5z0vRkqDfus1t4xoJQc1tTX6sFwWvetVYBF3HjeKe77XJ13DXA
ZZVFiq5934rY6b1xaul/TvbdfUnq0dw81B0nSVPv0dxmOZb9h7ojx5F/c5dmJ7vfY6g78pt7e16W
nhw5H0Pdldt3rcfNveZmOYZ64zpty2LalsXMbM3lvugcqx6x2zhI10E2rtEtFN3GdZDutVrEjXNt
3KfUac7VaRRCx+n07gLodpfQ6W6g0xs3oNTp7uFaXfHbWj/zWyB2j25ArLovO7dYi7hxjbjT8lX2
xjOoxcpqRdZSZ1DLYmV2JHZ74xqduOhcVo2h8Tq3LEakiBvX6NaZWiB2C/d1KYqNe3RuAK9LIG6c
vLYDZtAcU0yHw+VeVH+2zvIA0Nq22DlWPTOZbV/WbABoDcBuZJe7ti3QHFPmmBKbVY/bAXWLFVZj
oM7l1l549q4zWwN18epy2VdsVj3t+4ba9w11MbkWV7oWG4PVGMa2rYrKLHYTa81qAKD4nVnXpXPj
dZ7VubXCcryW5tVVW8/ssqqnWwOwmy5WXbX1wG+7BnAvs/h9rRZFt+jWWG0xC5hVQ0W3gLlsS41D
i7m1JrA6nWsFABu/c2sdKTbufbkauPbGqcvCaq1HVRZsHMxlZ5eNPe5boFJ9uDavINjbvrHHZWGr
PLvrbPaiLvfyfRsH4oRac1AV3+46z2qLUZnc7/LvkTRNbmpu7q3LsOw46WLjVEWO29F5vh0Pl4Wx
cWeFqZ7v2zgygJUduSvc2abnuxv9doy8G7m5O13y3u1uk3t3vPftGL0hd4U7KlOO1wHqZlYrKOda
+8rrZ15hsRraaovZ3aNdXS/HHLuHPLOuKF7b2kdr70FzTFH91X0LukcAKxtgLcnPzc6/aW4fcv27
T3ZfmqHmZDf+/bveo9ZajyE3HR35Ndm5Nk1zLEPNt6Nlf+g1736odV9ntYVna0jVt++0HmVZrM7g
N16g3JdlYesHQaG7RyX96O4hw1x2nleQiuweK0yVRapujr17xCtrVitwtWytouJbQ9ndrM7iF7O2
LEb1NZRv42Qtta10Abxtu5o6dXZXmMrpXHUA2j3k+G1fVJbX1ht7Zned1Vqv5fs27m+u+/9kqb0O
dze51l2TpWmaP5TXD5v5vo3jZu9M7bvvu23u7iHgrcBc1uXW3sr3bVwv+7i7xwoAVpbVAK7K8XTd
P363uebiFnn3WGfV4r7sAhZADrd2lLpbYepMo+geazuzoR163j3cl5XjdaQqNZTv2zgdet4tPor4
ndV4lmttq+m6R/zO6hqj37dxnQ67Y2W9LooD5PG+DtTEM4zeKZLjxAYTegIxUrEmRqtG6mVTis8+
B8NYoE2M5pFVLTYtEGYH2pkpO6hS4GqpBjbCMO4ETEE+MHmEFhYZDGBcAHSEq1qMKAiYD17wmTL+
thwjDuamh6SPpeGhH0vD+zZuIGyB3iQh1vBCCbGGZzIHHB4qO0HvYg44vFSnOLxLatTwVAauw4PJ
Luef3FQKVaUK2WVWesosmRWiaBclvo0jkUgk0mEtqBst7Fdhv3Rhv2in9NwU1I0mGrTEq0FLNGiJ
l4ZNo9GohMIm2JSen4Z/RyIHZfIKyuRVvyNRSVQSlVCM7HQBKRbkJ5L07hk8JAQwQf9Ekt49g4eE
QGHwIIAJDAYPifeJJH32PCQDn2Ye+rdxA7MB89AT+3HoBFsyMCsUHoc+IMrMQ58ts0UhSYCzZkYZ
LhquSXBkYJkMjMtnJkMrVfgueVhxlzyS+QTPuZIqVTjtnA8Uj1fqSg2mjKcuBStiys5JKZLgpcxj
VBpnnRgVg1EZltNlW04XuGG6pBCg5XTZBdPpsh2mfknFmtPlRbig9OU0+FsAURjbIiM8aOownaAl
QmFsj8jCVZFUfNlUyBfCi8x8WQzJjRiir0VnqUoVjooh+toQbAloKplKpkaIvrTMklnpGavSUPF4
6VhVKoEHWSTBP0MskuCox4okOJrprBMslcBGrCqVHCTaiXainUisglorFdSNioX9op1op9HodLps
VH4rIE+8aImX/jZO0xIvDZvSUQlcrGCRAWjQ+TbuHb2jdyTyPBTGRmsbCmM7ZPI7ekfpCbqglLEm
rFqvCateExRrwqpnnnTmSUGlObLKaPSxymiU5lcZjYIqddV95klP0GDmSc90LqjjJ5J4Bg8CmOAT
SToBrHiIJD1h8CCAU/M0gCJJJ4DF2sCWoAeKx0sPzFLzPKUnOEAzawNbMjBT+Meh94HZwEHx6AMz
BmweujywNT4mo/hsUUhKtMRLv6P0BDUxGcU5oZGkaxIWCMWM+i4KSdckLAo0GaVJmGEyiqMICZeO
LQoJyEEDKz3BTDoXVFWpwlWlCv82buNUH5FKXfW3cYhvLlUOkjkD8yRzzVWqcH5REy6dgTU633oU
SfDKRw03bvSZqevTSb+Nm6yRBGektVQkwedSxjEJFcZOXWkEfGNi5aNmOKegLjpLFM2rnmC+gqqg
Nh4GVqxxFkZ+K2BaUAfMgwqHRU5EUWmYCvulL6nUPD+WNSYiYJPDcrogCOCGpaRmNGKx4hg8JA5T
J6jUUPySUjQ4kQRP1FQaU3aCF0ToWXXcMJ2gAQecgBCuC+M8XRBC9PVtXKxKT/DbuBCSyqjLfkky
edWMb+NGa8KqZ56UxIqwYiHxXc4NAeTQLSWV4KKQgJYOwhY1dmOLGtsgY15O47ucPJM4qNuCkJon
49s4g2WNiZ9ljYkVTptQGLvyUQ0OPeRSwOf3/QE9AcEIzwkaMGqqjP4Qq4z2iFLzvHjpCVrkt1Ig
vxXw27jFpzD2h+FAQYNDl70BynCgjUvj7CAvao2WJDhaSs0z4U0RUVMejJXWaBcjjFrc8EQS/NAN
J0Z0uYwICsqPymE734HBIB0PqcrkV5YC/xnGUMUUUC2CRLGI/R4jyIRsQCBc/HtK+QDyC0+gTWEh
S5MQHRjSDmMK38adTKjFhzwYRg5DY/R+rGqxwGvTw9LCx3GtFBF1wi05ogkBfZyZUhbDRDecHtPI
IDs8kQQvxB9JQSlfChTGXrAirGhIGFYZbSmcCe7CnEoYNDGLE08KSiw1hOcoQyBQYgENrAbLt3Gk
AbGCbpklFMm4nE/Dy94Axnwglg0XAGcWzT2ZJTs5By9WfRREeKoXRjwgD1pnv/0s2N6blS16hZGt
OkZ+nyeFsdcULFXyilRHIUOBCP/AEsuQFKfx4DmQaihsRDvRSNEINg3wxhx33k+ocomBtGmOQAmy
Wic8eI6GtR6ntXKpQp9RipCZbLQLargELjpGeE6wfSMn6NC0+ktjcm/mScFLHH8b5w0gXJohYCkl
nPqo1K0Z5Z47881GJOmf0ECokCkdBFtCcog1DMKlTaRiTXjfqhaHGNHlog1MfuAxozhLddBf5ts4
UDKfoIYLLvIE4dIfDtv5xFBB2bjM7wP0LDKKM8HjGamifRvHMGUjd9di2gPh0i2BsgBOeKcEZR5M
HHuegMhImQqKUl9BwBgDLoAdT0ml9LdxktNAon3IOAUWSsFoeQmrpqDwbVwq0jjQrAGioJAQIwdJ
UuApRt/GJczNmUiNtCYmFqwhdtYj/W0ciZBuQHNtAdKEtEfwBD7dfBtHdg4ofsOQ4A==
]]>
<![CDATA[
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
ayTKvk8GhdEahinIJv9tHMwgTRixL/pMDFCewKk20gyZspviNNXfSw0cMKWCdPdgGDtjxZHCFE4L
L/scWIrYl8UQfg8JLXpKWeEJyN4IKSuJ+qsIHN63cR6XquGNlBDDC7lUDQ+UGjU80sfS8DaEgOFx
eXO67IrMEkPUgBZkpQo3lVLzbMgsh6lU4aWS4hGr0ljVFY+XRogkeKyKVd/GdUdhv7SjsGmn9CSV
SCXSB4GeLhvVEApjT0qoTF5l8qpl8jt6UBgbTXCES6NfqLQIlVLzDC0W4WKV0Y4GY7HKaFRd9cwz
88w8KaikUledUKmrJoD/J5J0AphgQfAlSJGkfwYPgj6wJXPk5DcvrUmIySjeY5qE1DwvCsnrL54r
o7gmZMko/hmZ1MVTVyq/FRBkXBQQCwLDAaEwNoMBsXyIFbcgYBIebkFQ1DAzBeVEYexK7HdKl5Q7
q6UWM9cBujDXkiPKLKGd7Pzou+/d9qQnNdl72cmuS8+3L/2mj+M4+u55N5ae79L8ndz//w3Jd+f5
HsdPbjpZjr7/Tpbj6MeRe775/ffR5CZJ+j5qtG/+TO+Sd74/7xvuR/03o9bek6pP9ZGqb6P6NqpP
b/z3fcP9uLc2/dZai8bR996Nn2/z680fSU56X2rTd79BOe9/Rpr/a7LkWmvP/99mH8fRb74nu+7/
qEuvTf+9L3nHd+f55nskN99vXm7TJP/+vuuQ/3GbW5ukaZre1OXm++43nHfjyDfZ++aTI+k5SW68
593zjiQ7H/noN/l5OZKmaXK/yd13/38cNz/8e5cjH/k4lp/8pMn9SO6xI3snv+8bzkvy/z2Snek7
qc29PS/99yQ3uyfH0jTNvsn/ffcb7v24Pf9k5/yb3v+tde9kyXfvpSe35z/k/u/SJPnvno/k971v
uMl3N458l5xvPtlJPX7ex5L7/7/vHPWej32zPe++m3/zXZqm933DTb67cpck2W3P+eaTHS/HcvS+
9959977/0uS78+XIt0mSXcl5775rz0uuyZHzTflHc5O9/3L03vfON2nyTpqeb8bRNPtIbrLsXH/d
9++bcfPdlSXfJdk36TnfdE+OJqnHr83ND33pfd/dc77LkeTbJEnt+d6bbf6RLL3JS9Nzv33vOul9
75v//w+153vTf/eab02auuz8m+Ynve+m5n785jdNs9ybHM2/R75Jb5p/e871qH/ptblH0utQd6RS
t13Vp1Wf6usb1bdRfRs3U32qb+NIpW6h6EyROXbO/TdN0xx1yDe+9KNZdq77Lkm+TbIzSbLj5v+/
9HvUZOemaZrmSHZ8DLfvZch995+T5Dj+kewjSX7vfTfJ8vO/zZBvyk/ur/vuyFD3bfJN8r3Nv0le
kmYvyc7U3vseas+393zjZiPZdalKR6DXxqFl5+bve9w4lPz+9767aY6dk36XXZedb9wGJUNN8q7r
/ss9mqZp+k3yzu+u3GVZck6SJblLrU3TNHuofSd7390PTZJrHuqS75Jv3Kbz+4/c1KVpmp6XfOPQ
bvykJ0uSNE1zDHnf3Te7yUdSa61/+H3vdi9Nk/PSkyXfG4d2XHu+SXKTnO/v+f7jN01Th3rsxh2S
vv/wbzbfnvSl2X3fuFnneenNTZajaZo8LH+nPeeWbm+cTOn43rjaxq0BlDq9capv4yCiOaaodLfY
qu7RWTSiDac0x5QLpdMb5266xe4UG8fadLrTv+tKvjuT3PE6QN243IvqOwOwMY5MgqlUKagK6l4w
Rlol3QR64wq3qEEARk6RS0FQMJL0kEsxcIEcOvhosHOJFRse9KVR3iTBE69psSasOg==
]]>
<![CDATA[
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
]]>
<![CDATA[
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
]]>
<![CDATA[
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
]]>
<![CDATA[
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
]]>
<![CDATA[
+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
]]>
<![CDATA[
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
epHJp0/efjFKCQ==
]]>
</i:aipgf>
</svg>

After

Width:  |  Height:  |  Size: 56 KiB

@ -0,0 +1,948 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:i="&amp;ns_ai;"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
sodipodi:docname="upload your files.svg"
xml:space="preserve"
enable-background="new 0 0 600 410"
viewBox="0 0 600 410"
height="410px"
width="600px"
y="0px"
x="0px"
id="Layer_1"
version="1.1"><metadata
id="metadata155"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
id="defs153" /><sodipodi:namedview
inkscape:current-layer="g110"
inkscape:window-maximized="0"
inkscape:window-y="0"
inkscape:window-x="0"
inkscape:cy="205"
inkscape:cx="300"
inkscape:zoom="1.895"
showgrid="false"
id="namedview151"
inkscape:window-height="1114"
inkscape:window-width="2025"
inkscape:pageshadow="2"
inkscape:pageopacity="0"
guidetolerance="10"
gridtolerance="10"
objecttolerance="10"
borderopacity="1"
bordercolor="#666666"
pagecolor="#ffffff" />
<switch
id="switch148">
<foreignObject
height="1"
width="1"
y="0"
x="0"
requiredExtensions="http://ns.adobe.com/AdobeIllustrator/10.0/">
<i:aipgfRef
xlink:href="#adobe_illustrator_pgf">
</i:aipgfRef>
</foreignObject>
<g
id="g146"
i:extraneous="self">
<g
id="g110">
<path
id="path2"
d="M240,351.7h103.6c1.9,0,3.5-1.8,3.5-3.8v-66.8c0-2.2-1.6-3.8-3.6-3.8l-61.5,0.2c-1,0-1.8-0.4-2.5-1.1 l-6.3-6.8c-0.6-0.7-1.6-1.1-2.5-1.1H240c-1.9,0-3.5,1.8-3.5,3.8V348C236.5,350,238,351.7,240,351.7z"
fill="#383838" />
<path
id="path4"
d="M341.1,333h-97.9c-1.6,0-2.9-1.3-2.9-2.9v-48c0-1.6,1.3-2.9,2.9-2.9h98.1c1.6,0,2.9,1.3,2.9,2.9v48 C344.1,331.7,342.8,333,341.1,333z"
fill="#FFFFFF" />
<g
id="g50"
opacity="0.1">
<path
id="path6"
d="M341.2,333.5h-97.9c-1.6,0-2.9-1.3-2.9-2.9v-48c0-1.6,1.3-2.9,2.9-2.9h98.1 c1.6,0,2.9,1.3,2.9,2.9v48C344.1,332.2,342.9,333.5,341.2,333.5z"
fill-opacity="0"
fill="#383838" />
<path
id="path8"
d="M341.4,333.6h-98.1c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9h98.1c1.6,0,2.9,1.3,2.9,2.9v48C344.2,332.3,342.9,333.6,341.4,333.6z"
enable-background="new "
fill="#383838"
opacity="4.761905e-02" />
<path
id="path10"
d="M341.5,333.6h-98.1c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9h98.1c1.6,0,2.9,1.3,2.9,2.9v48C344.4,332.4,343,333.6,341.5,333.6z"
enable-background="new "
fill="#383838"
opacity="9.523810e-02" />
<path
id="path12"
d="M341.6,333.8h-98.1c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9h98.1c1.6,0,2.9,1.3,2.9,2.9v48C344.5,332.4,343.2,333.8,341.6,333.8z"
enable-background="new "
fill="#383838"
opacity="0.1429" />
<path
id="path14"
d="M341.6,333.9h-97.9c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9h97.9c1.6,0,2.9,1.3,2.9,2.9v48C344.6,332.6,343.3,333.9,341.6,333.9z"
enable-background="new "
fill="#383838"
opacity="0.1905" />
<path
id="path16"
d="M341.7,333.9h-98c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9h98.1c1.6,0,2.9,1.3,2.9,2.9v48C344.6,332.6,343.4,333.9,341.7,333.9z"
enable-background="new "
fill="#383838"
opacity="0.2381" />
<path
id="path18"
d="M341.8,334h-98c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9h98.1c1.6,0,2.9,1.3,2.9,2.9v48C344.7,332.7,343.4,334,341.8,334z"
enable-background="new "
fill="#383838"
opacity="0.2857" />
<path
id="path20"
d="M342,334.1h-98.1c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9H342c1.6,0,2.9,1.3,2.9,2.9v48C344.8,332.8,343.5,334.1,342,334.1z"
enable-background="new "
fill="#383838"
opacity="0.3333" />
<path
id="path22"
d="M342,334.1h-98c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9h98.1c1.6,0,2.9,1.3,2.9,2.9v48C345,332.9,343.6,334.1,342,334.1z"
enable-background="new "
fill="#383838"
opacity="0.381" />
<path
id="path24"
d="M342.1,334.2h-98c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9h98.1c1.6,0,2.9,1.3,2.9,2.9v48C345,332.9,343.6,334.2,342.1,334.2z"
enable-background="new "
fill="#383838"
opacity="0.4286" />
<path
id="path26"
d="M342.2,334.4h-98.1c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9h98.1c1.6,0,2.9,1.3,2.9,2.9v47.9C345.1,333,343.9,334.4,342.2,334.4z"
enable-background="new "
fill="#383838"
opacity="0.4762" />
<path
id="path28"
d="M342.3,334.4h-98c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9h98.1c1.6,0,2.9,1.3,2.9,2.9v48C345.2,333,343.9,334.4,342.3,334.4z"
enable-background="new "
fill="#383838"
opacity="0.5238" />
<path
id="path30"
d="M342.4,334.5h-98c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9h98.1c1.6,0,2.9,1.3,2.9,2.9v48C345.3,333.2,344,334.5,342.4,334.5z"
enable-background="new "
fill="#383838"
opacity="0.5714" />
<path
id="path32"
d="M342.4,334.6h-97.9c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9h98.1c1.6,0,2.9,1.3,2.9,2.9v48C345.4,333.3,344.1,334.6,342.4,334.6z"
enable-background="new "
fill="#383838"
opacity="0.619" />
<path
id="path34"
d="M342.6,334.6h-98.1c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9h98.1c1.6,0,2.9,1.3,2.9,2.9v48C345.4,333.4,344.1,334.6,342.6,334.6z"
enable-background="new "
fill="#383838"
opacity="0.6667" />
<path
id="path36"
d="M342.7,334.7h-98.1c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9h98.1c1.6,0,2.9,1.3,2.9,2.9v48C345.6,333.4,344.2,334.7,342.7,334.7z"
enable-background="new "
fill="#383838"
opacity="0.7143" />
<path
id="path38"
d="M342.7,334.8h-98c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9h98.1c1.6,0,2.9,1.3,2.9,2.9v48C345.7,333.5,344.4,334.8,342.7,334.8z"
enable-background="new "
fill="#383838"
opacity="0.7619" />
<path
id="path40"
d="M342.9,334.8h-98c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9H343c1.6,0,2.9,1.3,2.9,2.9v48C345.8,333.5,344.5,334.8,342.9,334.8z"
enable-background="new "
fill="#383838"
opacity="0.8095" />
<path
id="path42"
d="M342.9,335H245c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9h98c1.6,0,2.9,1.3,2.9,2.9v48C345.8,333.6,344.5,335,342.9,335z"
enable-background="new "
fill="#383838"
opacity="0.8571" />
<path
id="path44"
d="M343,335.1h-98c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9h98c1.6,0,2.9,1.3,2.9,2.9v48C345.9,333.8,344.6,335.1,343,335.1z"
enable-background="new "
fill="#383838"
opacity="0.9048" />
<path
id="path46"
d="M343.2,335.1h-98.1c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9h98.1c1.6,0,2.9,1.3,2.9,2.9v48C346,333.8,344.7,335.1,343.2,335.1z"
enable-background="new "
fill="#383838"
opacity="0.9524" />
<path
id="path48"
d="M343.2,335.2h-98c-1.6,0-2.9-1.3-2.9-2.9v-48c0-1.6,1.3-2.9,2.9-2.9h98.1c1.6,0,2.9,1.3,2.9,2.9v48 C346.1,333.9,344.8,335.2,343.2,335.2z"
fill="#383838" />
</g>
<path
id="path52"
d="M342.8,335.2h-98.1c-1.6,0-2.9-1.3-2.9-2.9v-48c0-1.6,1.3-2.9,2.9-2.9h98.1c1.6,0,2.9,1.3,2.9,2.9v48 C345.7,333.9,344.4,335.2,342.8,335.2z"
fill="#FFFFFF" />
<g
id="g98"
opacity="0.1">
<path
id="path54"
d="M343,335.7h-97.9c-1.6,0-2.9-1.3-2.9-2.9v-48c0-1.6,1.3-2.9,2.9-2.9h98.1 c1.6,0,2.9,1.3,2.9,2.9v48C345.9,334.4,344.6,335.7,343,335.7z"
fill-opacity="0"
fill="#383838" />
<path
id="path56"
d="M343.2,335.8h-98.1c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9h98.1c1.6,0,2.9,1.3,2.9,2.9v48C346,334.5,344.8,335.8,343.2,335.8z"
enable-background="new "
fill="#383838"
opacity="4.761905e-02" />
<path
id="path58"
d="M343.3,335.9h-98.1c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9h98.1c1.6,0,2.9,1.3,2.9,2.9v48C346.1,334.6,344.8,335.9,343.3,335.9z"
enable-background="new "
fill="#383838"
opacity="9.523810e-02" />
<path
id="path60"
d="M343.4,335.9h-98.1c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9h98.1c1.6,0,2.9,1.3,2.9,2.9v48C346.3,334.6,345,335.9,343.4,335.9z"
enable-background="new "
fill="#383838"
opacity="0.1429" />
<path
id="path62"
d="M343.4,336h-97.9c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9h98.1c1.6,0,2.9,1.3,2.9,2.9v48C346.4,334.7,345.1,336,343.4,336z"
enable-background="new "
fill="#383838"
opacity="0.1905" />
<path
id="path64"
d="M343.5,336h-98c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9h98.1c1.6,0,2.9,1.3,2.9,2.9v48C346.4,334.8,345.1,336,343.5,336z"
enable-background="new "
fill="#383838"
opacity="0.2381" />
<path
id="path66"
d="M343.6,336.2h-98c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9h98.1c1.6,0,2.9,1.3,2.9,2.9v48C346.5,334.8,345.2,336.2,343.6,336.2z"
enable-background="new "
fill="#383838"
opacity="0.2857" />
<path
id="path68"
d="M343.6,336.3h-97.9c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9h98.1c1.6,0,2.9,1.3,2.9,2.9v48C346.6,335,345.3,336.3,343.6,336.3z"
enable-background="new "
fill="#383838"
opacity="0.3333" />
<path
id="path70"
d="M343.9,336.4h-98.1c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9h98.1c1.6,0,2.9,1.3,2.9,2.9v48C346.7,335.1,345.4,336.4,343.9,336.4z"
enable-background="new "
fill="#383838"
opacity="0.381" />
<path
id="path72"
d="M343.9,336.4h-98c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9H344c1.6,0,2.9,1.3,2.9,2.9v48C346.7,335.1,345.4,336.4,343.9,336.4z"
enable-background="new "
fill="#383838"
opacity="0.4286" />
<path
id="path74"
d="M344,336.5h-98.1c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9H344c1.6,0,2.9,1.3,2.9,2.9v48C346.9,335.2,345.6,336.5,344,336.5z"
enable-background="new "
fill="#383838"
opacity="0.4762" />
<path
id="path76"
d="M344.1,336.5h-98c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9h98.1c1.6,0,2.9,1.3,2.9,2.9v48C347,335.3,345.7,336.5,344.1,336.5z"
enable-background="new "
fill="#383838"
opacity="0.5238" />
<path
id="path78"
d="M344.1,336.6h-97.9c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9h98.1c1.6,0,2.9,1.3,2.9,2.9v48C347.1,335.3,345.8,336.6,344.1,336.6z"
enable-background="new "
fill="#383838"
opacity="0.5714" />
<path
id="path80"
d="M344.2,336.8h-97.9c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9h98.1c1.6,0,2.9,1.3,2.9,2.9v48C347.2,335.4,345.9,336.8,344.2,336.8z"
enable-background="new "
fill="#383838"
opacity="0.619" />
<path
id="path82"
d="M344.4,336.9h-98.1c-1.6,0-2.9-1.3-2.9-2.9v-48.1 c0-1.6,1.3-2.9,2.9-2.9h98.1c1.6,0,2.9,1.3,2.9,2.9v48C347.2,335.6,345.9,336.9,344.4,336.9z"
enable-background="new "
fill="#383838"
opacity="0.6667" />
<path
id="path84"
d="M344.5,336.9h-98.1c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9h98.1c1.6,0,2.9,1.3,2.9,2.9v48C347.3,335.6,346,336.9,344.5,336.9z"
enable-background="new "
fill="#383838"
opacity="0.7143" />
<path
id="path86"
d="M344.5,337h-98c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9h98.1c1.6,0,2.9,1.3,2.9,2.9v48C347.5,335.7,346.1,337,344.5,337z"
enable-background="new "
fill="#383838"
opacity="0.7619" />
<path
id="path88"
d="M344.6,337h-97.9c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9h98.1c1.6,0,2.9,1.3,2.9,2.9v48C347.5,335.8,346.3,337,344.6,337z"
enable-background="new "
fill="#383838"
opacity="0.8095" />
<path
id="path90"
d="M344.7,337.1h-97.9c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9h98.1c1.6,0,2.9,1.3,2.9,2.9v48C347.6,335.8,346.3,337.1,344.7,337.1z"
enable-background="new "
fill="#383838"
opacity="0.8571" />
<path
id="path92"
d="M344.8,337.2h-98c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9h98.1c1.6,0,2.9,1.3,2.9,2.9v48C347.7,335.9,346.4,337.2,344.8,337.2z"
enable-background="new "
fill="#383838"
opacity="0.9048" />
<path
id="path94"
d="M345,337.2h-98.1c-1.6,0-2.9-1.3-2.9-2.9v-48 c0-1.6,1.3-2.9,2.9-2.9H345c1.6,0,2.9,1.3,2.9,2.9v48C347.8,335.9,346.5,337.2,345,337.2z"
enable-background="new "
fill="#383838"
opacity="0.9524" />
<path
id="path96"
d="M345,337.4h-98c-1.6,0-2.9-1.3-2.9-2.9v-48c0-1.6,1.3-2.9,2.9-2.9h98.1c1.6,0,2.9,1.3,2.9,2.9v48 C347.9,336,346.6,337.4,345,337.4z"
fill="#383838" />
</g>
<path
id="path100"
d="M345,337.4h-98c-1.6,0-2.9-1.3-2.9-2.9v-48c0-1.6,1.3-2.9,2.9-2.9h98.1c1.6,0,2.9,1.3,2.9,2.9v48 C347.9,336,346.6,337.4,345,337.4z"
fill="#FFFFFF" />
<g
id="g104">
<path
id="path102"
d="M346.4,364.4H236.5c-2,0-3.7-1.7-3.7-3.8v-66c0-2,1.7-3.8,3.8-3.8h55.2c1,0,1.3-0.1,2-0.8l6.7-6.7 c0.7-0.7,1.7-1.1,2.6-1.1h43.2c2,0,3.7,1.7,3.7,3.8v74.6C350.1,362.7,348.4,364.4,346.4,364.4z"
fill="#55ACEE" />
</g>
</g>
<path
id="path112"
d="M382,79.8h-7.1c0.1-0.7,0.1-1.3,0.1-2c0-13.3-10.8-24.2-24.2-24.2c-2,0-3.6,0-5,0 c-5.5-20-23.8-34.7-45.6-34.7c-21.7,0-40,14.7-45.6,34.7c-1.4,0-3.1,0-5,0c-13.3,0-24.2,10.8-24.2,24.2c0,0.7,0,1.3,0.1,2h-7.1 c-15,0-27.2,12.2-27.2,27.2l0,0c0,15,12.2,27.2,27.2,27.2h163.5c15,0,27.2-12.2,27.2-27.2l0,0C409.2,92,397,79.8,382,79.8z"
fill="#58AEF3" />
<rect
id="rect114"
height="80"
width="34.3"
fill="#383838"
y="186.9"
x="278.9" />
<path
id="path116"
d="M269.6,203.7c17.5-3.4,35.3-3.5,52.8-0.3l-27.4-60.2L269.6,203.7z"
fill="#383838" />
<g
id="g120">
<path
id="path118"
d="M296,245.1c-7.2,0-13.1-5.9-13.1-13.1s5.9-13.1,13.1-13.1s13.1,5.9,13.1,13.1S303.3,245.1,296,245.1z M296,219.9c-6.6,0-12,5.4-12,12s5.4,12,12,12s12-5.4,12-12S302.6,219.9,296,219.9z"
fill="#FFFFFF" />
</g>
<g
id="g124">
<path
id="path122"
d="M294.3,238.3c-0.4,0-0.9-0.2-1.3-0.5l-4.3-3.6c-0.8-0.7-0.9-1.9-0.2-2.8c0.7-0.8,1.9-0.9,2.8-0.2l3,2.5 l7.5-6.9c0.8-0.7,2-0.7,2.8,0.1c0.8,0.8,0.7,2-0.1,2.8l-8.8,8.1C295.3,238.1,294.8,238.3,294.3,238.3z"
fill="#FFFFFF" />
</g>
</g>
</switch>
<i:aipgf
i:pgfVersion="24"
i:pgfEncoding="zstd/base64"
id="adobe_illustrator_pgf">
<![CDATA[
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
]]>
<![CDATA[
IEEA6rQdnWKlLpxSZllfs432koonabJMgdFNzUafBx4jO132BySjfYXD1FVpQoZJhEuDRqLs06SC
A4NBqleTT9cOBzHAvhhtYCnwnznDFL6N8wgQYDSCyZMHNZrBMJ6PFgJuZgfauUANSvnbuM8aM8go
T+AEUfRD5rOSpPYBQ47qJOTGULEKVs3+TxMJj96g4m/jXo9w6cVuEbpJkZaLzVk7xaRV6DzgIZ5J
Q6qBjRDwUlDBC6NTJh9ZxO7BMMpi+G3chKCC0T6FKXA6LQhYWvhv40YuaXBmKmPKIG9aWGRYVApI
oJiKWTLEExP4mKnAUI1NrORPOy1ldFV9G6cAeVF3PBBUfCBD4ljevAwQUk9LWQwRXnqCtXLTwxIm
n+LOAvW+uxEufTCZCh5yMaUMg/4J0r4shpKBVeWjZjQssIBPxIVFYeyEQ8Y82xS2mBAuPRv4J0hx
gFbma+mgHhg9ixPQCHNgmXDmnzJYF/HotMYMhVPjrCo1TxLH38aNYonG7mS8FRf/KqPRj2dAc5Tp
BEVrR9QuSWHsVoQSwYRMmAOLPjjFl5E/eDEhSSBTnrJJMBkogBsUVuSM42/j0FWV0S7dSeSLWTkE
DmbjwVj2stLPVUfiZZZ/ghyZy95ggXpfYYqImnO0w7OUOA0P9KiBXvhaLbwYG2t45kHBwhOQnaD3
bdwnITq8SKYvvNj4iYD8NOmXRY18DBlZar4slTkk6RCD/jAQ8JwDirrPMQno4ICiFlkjCUiu/gl+
rre1Wn6p0aAgitg9ur01FHHjZgFraG8NBQJpWwqbCeCNaRe0vuLV064CWE/XaQ5b5diswiqYywZ4
OWsLs3Nb46wBVJDaAq0tGyPBqhuvBO9co7xgnnQEClnSEYhtrbEnHYF2693M7osRsIbSEaiUjgKx
QmEw6WGj0WA0Fo1v4zL727iMXoSOxuLbOMaCR1aewHf6HFgKBFMlvoivV9o1LuuQ3VMZpAnj2ziL
+9FQyYERk6sw5TpA94PVYwQGWOog1CAgSLYIvJ5/ihIKISpDsKhselhCIMje88xND72aC64ye1WL
U19QN0pNcMDC2kEZwLgAGBs/kVn1z66SUfzbuHBUqvAwle6GpaDujQBBdAfkdNkKwyqj21TBUjyl
kvgLGMybSs5CoZtMBb9IDih4YRsI79u4hcxHBQpawLwfMZFDBQf+Nu7buG/jvo2rkfwMxmDU46KS
E2ZfFkPaiiJj6Lwm9nsQ8RLUloJhtDIVhkIb/ZO18HHsqTDfxqUSRCHKifGRjJ7XmKF8G9cpB1Bo
6Fj0sSAbQEAf57dx38bp1KjhPQoEFh5GdoIeKCHW8MKwBXoEshP0NgnR4YEuJ4fHK4yFV4DhDa8S
tiZhCxxnrmnqt3Hfxh0O38Z9ZAOQyUbNKgxJIAwtnHSAYQyvLR2uIzHzUwoNUVQWtD9OtMtjcjiM
J2giJSFMvzAklkvNZbCUoy2BdFio+PJtHAQOvSYFqzFDIcXUmkWL3gZl4IMSC6bAoEWZaLhBKTBV
SBeuwwpKG30b5yElcfyJSAa+jfs2LvNt3Ldx38bRuiVEkUXS1HKyHAggKOr95AQZWk5uQlZBUdiA
OCESsGBuelggs5bKbi0YmZ1pLBSRQpts1pO5GCgUsgq7Xh6Tz+ZhAFUYkCA9Y7AsTjTCTz1S8aXR
Ki/mJMMvFZBlAIXG3s9QCCSzONmAKqTLt3GgXfspr5UXs8BQsKpUBMYMZTKOGYrJ8aAeJEwSx+g6
q6UKRxkOdEbxPCRx/G1cJePDxMzjeP54UVsOI9GZ+Tau8X4xMfNNn8RoshJp7kR2WamXkawk6sTK
a3iNOF54mRKn4bk6xeGdneLwQBje8A6yE/Q6MK3hHURwwus4SocHKRiAJJjW8LTJpYBPzTZVOP82
7ts4UYUR9YWhEp1ybPxEwFjBdXAJE6p62XwyNDLm1UAUWWyukJg0ClFiByx4kQ1juQpFhcFDYp5U
rZV6YVnQ/jDAiJfFwOLFlG6KM++EVkqMJjECw6KThSkiajDikXRaFu5y/slyIy80Xn1Ciyp2gkwY
qhb3oNNlx+4XE2khRiIwKShqIMrAiKCxKBIgIcrqfwsGNfF0Kq5F1vrbuI7hIBLHFvdzaUsC5X1k
g5fl4C0hykYA1qEYMg0VJtYZV5dv47zQrMJoIgSjyTqSteNTGNvlOLhEdoKedpQOr1FhLDC84RWE
LXChOAC9AZeq4WF8C3oTxQHoFSREh8c/lkZkg3pWGc2YeERd80SS/klFLbtkFF8pshWaGZEnKBb8
ExQfcOoo+CfoCFPpBgsYkTS1O6eo9SswYNEo3NghwT9BCQHra1Fzipr2iSS4YnLCH9ogWLm6sRUE
/wQ/OvNP8DsIU+kOaeahT+S3MipV+JlwyGzw8UX9Tk6XvfBf1OGXQ4XW88w8dISnwIphQSZqUFYS
X0+ipDB2AuRF3X4rljdmKKfSqE1Pd3MACYX6UsmMszjxxO2iMsCpkC6Kt4N6lD4pCr3UXKUVc2Cp
od940kYlh18wIzyLAhsue9LEwbokTqEPpVVoLRhUCO1QZqOOYlULon8ECKJ7EUd0EbVqal+vIFCQ
pyGwbF4tD4UBC9vKB/VIK5ZPcEFW/CBWWqz2p6bSm1bFX846wfDgn2A4OVB90j/BD+MXrlIXF55C
qHFR+zstCz9Y1pi4NQcWHpL+CYaRjIU3SDJXbbESEFhxBJOoTZqsdfFABwteWaDeV7hQJKXAi84x
hohAAdkgbi2G/nkYacjk27jUwmxcPlDLdXlY6DDkeowLHvon2GUgjghiTKLeCAetTqa1NUfHlsE/
Dw6Df4KODbP2DOE5QdDgn2DsbSAT9UuxNi/4J+hp5qGDn8LYupOK4iYVNSZNgZN0YVhl9OKR6s0k
VUPxEHOeG0mCNyYCj9RlMx4PhcKlUQp/inqLKotW4JGkn0gkAkqmNLqAYuaHYYg2Mv8EG4X9YmT+
CTJk8qrbGuYEFYnMFw2rjJZP/3QYVhndUJUq/PBNkQQnQFioMKfZQd0aTUaBqX0NC5gikQgo8uad
UcrJvGpz00MzbIHeycB1eGfLLrwUQnR4nk5xeBDZCXoDBdWh8EokTsO7lBJiDa+GQZkbOHIaIO9J
jsWEy0UXzJCLVMqx5zWkGkMKYfQp0Rg98S0I+G2cgYKz0ogPY/VwCAiApoWPY3lj4FvQM1t2QdsU
1I1iY8+hwRRkDHi67ATEhnRcTmsmEfvjKmBwJjyYEOhoDYQK5QO0ShSoPEdgxNg9nKGDkcGzJlTF
t3Ek/yoijpcYT88LY1Rgg4wwP2qxBvHK8YiiyHHCURDHi5TASn8fxkq7Do1Kl8IZpQlkHZS2sCQk
fRiAR5q2NyMdcxMj7WIliCQqkP4JCEiHMoOjWwcIG41QITf6U2uk+kJQwejJxcToDhdcdCJGIAIn
ceQEK48WAnJAD+4ZgF6Gh9GPhOdJ9/MUJpTorPBIHKOryiNVSJfM6/nngtN+K8zpsisIJb2YqNAP
7QmuQBDABN7AwGxRSDR8tigknAPOa5oa0s898AHJfIIpT0sZT10gRsVcLvJbAd2GSdSxIDAgEAtC
IeE5QYTnBLkFAeE5ZwgPqmggXPqTqWqxF+kUVkPHVXM4tqixERpMQW54AqLRcPIMo2EAJscPrZo8
ayTKvk8GhdEahinIJv9tHMwgTRixL/pMDFCewKk20gyZspviNNXfSw0cMKWCdPdgGDtjxZHCFE4L
L/scWIrYl8UQfg8JLXpKWeEJyN4IKSuJ+qsIHN63cR6XquGNlBDDC7lUDQ+UGjU80sfS8DaEgOFx
eXO67IrMEkPUgBZkpQo3lVLzbMgsh6lU4aWS4hGr0ljVFY+XRogkeKyKVd/GdUdhv7SjsGmn9CSV
SCXSB4GeLhvVEApjT0qoTF5l8qpl8jt6UBgbTXCES6NfqLQIlVLzDC0W4WKV0Y4GY7HKaFRd9cwz
88w8KaikUledUKmrJoD/J5J0AphgQfAlSJGkfwYPgj6wJXPk5DcvrUmIySjeY5qE1DwvCsnrL54r
o7gmZMko/hmZ1MVTVyq/FRBkXBQQCwLDAaEwNoMBsXyIFbcgYBIebkFQ1DAzBeVEYexK7HdKl5Q7
q6UWM9cBujDXkiPKLKGd7Pzou+/d9qQnNdl72cmuS8+3L/2mj+M4+u55N5ae79L8ndz//w3Jd+f5
HsdPbjpZjr7/Tpbj6MeRe775/ffR5CZJ+j5qtG/+TO+Sd74/7xvuR/03o9bek6pP9ZGqb6P6NqpP
b/z3fcP9uLc2/dZai8bR996Nn2/z680fSU56X2rTd79BOe9/Rpr/a7LkWmvP/99mH8fRb74nu+7/
qEuvTf+9L3nHd+f55nskN99vXm7TJP/+vuuQ/3GbW5ukaZre1OXm++43nHfjyDfZ++aTI+k5SW68
593zjiQ7H/noN/l5OZKmaXK/yd13/38cNz/8e5cjH/k4lp/8pMn9SO6xI3snv+8bzkvy/z2Snek7
qc29PS/99yQ3uyfH0jTNvsn/ffcb7v24Pf9k5/yb3v+tde9kyXfvpSe35z/k/u/SJPnvno/k971v
uMl3N458l5xvPtlJPX7ex5L7/7/vHPWej32zPe++m3/zXZqm933DTb67cpck2W3P+eaTHS/HcvS+
9959977/0uS78+XIt0mSXcl5775rz0uuyZHzTflHc5O9/3L03vfON2nyTpqeb8bRNPtIbrLsXH/d
9++bcfPdlSXfJdk36TnfdE+OJqnHr83ND33pfd/dc77LkeTbJEnt+d6bbf6RLL3JS9Nzv33vOul9
75v//w+153vTf/eab02auuz8m+Ynve+m5n785jdNs9ybHM2/R75Jb5p/e871qH/ptblH0utQd6RS
t13Vp1Wf6usb1bdRfRs3U32qb+NIpW6h6EyROXbO/TdN0xx1yDe+9KNZdq77Lkm+TbIzSbLj5v+/
9HvUZOemaZrmSHZ8DLfvZch995+T5Dj+kewjSX7vfTfJ8vO/zZBvyk/ur/vuyFD3bfJN8r3Nv0le
kmYvyc7U3vseas+393zjZiPZdalKR6DXxqFl5+bve9w4lPz+9767aY6dk36XXZedb9wGJUNN8q7r
/ss9mqZp+k3yzu+u3GVZck6SJblLrU3TNHuofSd7390PTZJrHuqS75Jv3Kbz+4/c1KVpmp6XfOPQ
bvykJ0uSNE1zDHnf3Te7yUdSa61/+H3vdi9Nk/PSkyXfG4d2XHu+SXKTnO/v+f7jN01Th3rsxh2S
vv/wbzbfnvSl2X3fuFnneenNTZajaZo8LH+nPeeWbm+cTOn43rjaxq0BlDq9capv4yCiOaaodLfY
qu7RWTSiDac0x5QLpdMb5266xe4UG8fadLrTv+tKvjuT3PE6QN243IvqOwOwMY5MgqlUKagK6l4w
Rlol3QR64wq3qEEARk6RS0FQMJL0kEsxcIEcOvhosHOJFRse9KVR3iTBE69psSasOg==
]]>
<![CDATA[
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
]]>
<![CDATA[
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
]]>
<![CDATA[
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
]]>
<![CDATA[
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
]]>
<![CDATA[
+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
]]>
<![CDATA[
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
epHJp0/efjFKCQ==
]]>
</i:aipgf>
</svg>

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 453 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 359 B

@ -0,0 +1,71 @@
<?php
use Twig\Environment;
use Twig\Error\LoaderError;
use Twig\Error\RuntimeError;
use Twig\Extension\SandboxExtension;
use Twig\Markup;
use Twig\Sandbox\SecurityError;
use Twig\Sandbox\SecurityNotAllowedTagError;
use Twig\Sandbox\SecurityNotAllowedFilterError;
use Twig\Sandbox\SecurityNotAllowedFunctionError;
use Twig\Source;
use Twig\Template;
/* /home/home.html.twig */
class __TwigTemplate_af3d9cd9f4ff4c44106fba71564d7af6059a69449e652f694cd80b0b5e237d82 extends Template
{
private $source;
private $macros = [];
public function __construct(Environment $env)
{
parent::__construct($env);
$this->source = $this->getSourceContext();
$this->blocks = [
'title' => [$this, 'block_title'],
];
}
protected function doGetParent(array $context)
{
// line 1
return "base.html.twig";
}
protected function doDisplay(array $context, array $blocks = [])
{
$macros = $this->macros;
$this->parent = $this->loadTemplate("base.html.twig", "/home/home.html.twig", 1);
$this->parent->display($context, array_merge($this->blocks, $blocks));
}
// line 3
public function block_title($context, array $blocks = [])
{
$macros = $this->macros;
echo "Accueil - HearthTrack";
}
public function getTemplateName()
{
return "/home/home.html.twig";
}
public function isTraitable()
{
return false;
}
public function getDebugInfo()
{
return array ( 46 => 3, 35 => 1,);
}
public function getSourceContext()
{
return new Source("", "/home/home.html.twig", "/home/www/anpinagot/public_html/sae/Web/Sources/src/app/views/Templates/home/home.html.twig");
}
}

@ -0,0 +1,214 @@
<?php
use Twig\Environment;
use Twig\Error\LoaderError;
use Twig\Error\RuntimeError;
use Twig\Extension\SandboxExtension;
use Twig\Markup;
use Twig\Sandbox\SecurityError;
use Twig\Sandbox\SecurityNotAllowedTagError;
use Twig\Sandbox\SecurityNotAllowedFilterError;
use Twig\Sandbox\SecurityNotAllowedFunctionError;
use Twig\Source;
use Twig\Template;
/* home.html */
class __TwigTemplate_16e6c0dcab0136c1f1e8ae28198d95d31cd5a976b1114c0dd185f5b3a7465074 extends Template
{
private $source;
private $macros = [];
public function __construct(Environment $env)
{
parent::__construct($env);
$this->source = $this->getSourceContext();
$this->parent = false;
$this->blocks = [
];
}
protected function doDisplay(array $context, array $blocks = [])
{
$macros = $this->macros;
// line 1
echo "<!DOCTYPE html>
<html lang=\"fr\">
<head>
<meta charset=\"utf-8\" />
<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" />
<meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\" />
<meta name=\"description\" content=\"Accueil\" />
<meta name=\"author\" content=\"PINAGOT Antoine\" />
<title>Accueil - HeartTrack</title>
<link href=\"https://cdn.jsdelivr.net/npm/simple-datatables@7.1.2/dist/style.min.css\" rel=\"stylesheet\" />
<link href=\"../css/styles.css\" rel=\"stylesheet\" />
<script src=\"https://use.fontawesome.com/releases/v6.3.0/js/all.js\" crossorigin=\"anonymous\"></script>
</head>
<body class=\"sb-nav-fixed\">
<nav class=\"sb-topnav navbar navbar-expand navbar-dark bg-dark\">
<!-- Navbar Brand-->
<img class=\"navbar-brand ps-3\" src=\"../../../public/assets/img/logo.png\">
<!-- Sidebar Toggle-->
<button class=\"btn btn-link btn-sm order-1 order-lg-0 me-4 me-lg-0\" id=\"sidebarToggle\" href=\"#!\"><i class=\"fas fa-bars\"></i></button>
<!-- Navbar Search-->
<form class=\"d-none d-md-inline-block form-inline ms-auto me-0 me-md-3 my-2 my-md-0\">
<div class=\"input-group\">
<input class=\"form-control\" type=\"text\" placeholder=\"Rechercher...\" aria-label=\"Rechercher...\" aria-describedby=\"btnNavbarSearch\" />
<button class=\"btn btn-primary\" id=\"btnNavbarSearch\" type=\"button\"><i class=\"fas fa-search\"></i></button>
</div>
</form>
<!-- Navbar-->
<ul class=\"navbar-nav ms-auto ms-md-0 me-3 me-lg-4\">
<li class=\"nav-item dropdown\">
<a class=\"nav-link dropdown-toggle\" id=\"navbarDropdown\" href=\"#\" role=\"button\" data-bs-toggle=\"dropdown\" aria-expanded=\"false\"><i class=\"fas fa-user fa-fw\"></i></a>
<ul class=\"dropdown-menu dropdown-menu-end\" aria-labelledby=\"navbarDropdown\">
<li><a class=\"dropdown-item\" href=\"#!\">Profile</a></li>
<li><a class=\"dropdown-item\" href=\"#!\">Paramètres</a></li>
<li><hr class=\"dropdown-divider\" /></li>
<li><a class=\"dropdown-item\" href=\"#!\">Déconnexion</a></li>
</ul>
</li>
</ul>
</nav>
<div id=\"layoutSidenav\">
<div id=\"layoutSidenav_nav\">
<nav class=\"sb-sidenav accordion sb-sidenav-dark\" id=\"sidenavAccordion\">
<div class=\"sb-sidenav-menu\">
<div class=\"nav\">
<div class=\"sb-sidenav-menu-heading\">Menu</div>
<a class=\"nav-link\" href=\"home.html\">
<div class=\"sb-nav-link-icon\"><img src=\"assets/img/house.png\"></div>
Accueil
</a>
<div class=\"sb-sidenav-menu-heading\">Activités</div>
<a class=\"nav-link\" href=\"exercice.html\">
<div class=\"sb-nav-link-icon\"><img src=\"assets/img/sprinter.png\"></div>
Exercices
</a>
<a class=\"nav-link\" href=\"analyze.html\">
<div class=\"sb-nav-link-icon\"><i class=\"fas fa-chart-area\"></i></div>
Analyses
</a>
<div class=\"sb-sidenav-menu-heading\">Social</div>
<a class=\"nav-link\" href=\"friend.html\">
<div class=\"sb-nav-link-icon\"><img src=\"assets/img/group.png\"></div>
Amis
</a>
<a class=\"nav-link\" href=\"coaching.html\">
<div class=\"sb-nav-link-icon\"><img src=\"assets/img/coaching.png\"></div>
Coaching
</a>
<a class=\"nav-link\" href=\"mail.html\">
<div class=\"sb-nav-link-icon\"><img src=\"assets/img/letter.png\"></div>
Messagerie
</a>
</div>
</div>
<div class=\"sb-sidenav-footer\">
<div class=\"small\">Connecté en tant que:</div>
{user}
</div>
</nav>
</div>
<div id=\"layoutSidenav_content\">
<main>
<div class=\"container-fluid px-4\">
<h1 class=\"mt-4\">Accueil</h1>
<ol class=\"breadcrumb mb-4\">
<li class=\"breadcrumb-item active\">Vue d'ensemble</li>
</ol>
<div class=\"row\">
<div class=\"col-7\">
<div class=\"card mb-4\">
<div class=\"card-header\">
<i class=\"fas fa-chart-area me-1\"></i>
Stastiques globales
</div>
<div class=\"card-body\">
<canvas id=\"myAreaChart\" width=\"100%\" height=\"40\"></canvas>
</div>
</div>
</div>
<div class=\"col-5\">
<div class=\"card mb-4\">
<div class=\"card-header\">
<i class=\"fas fa-chart-bar me-1\"></i>
Résumé quotidien
</div>
<div class=\"card-body\">
</div>
</div>
</div>
</div>
<div class=\"row\">
<div class=\"col-5\">
<div class=\"card mb-4\">
<div class=\"card-header\">
<i class=\"fas fa-chart-bar me-1\"></i>
Liste d'amis
</div>
<div class=\"card-body\">
</div>
</div>
</div>
<div class=\"col-7\">
<div class=\"card mb-4\">
<div class=\"card-header\">
<i class=\"fas fa-chart-bar me-1\"></i>
Messagerie
</div>
<div class=\"card-body\">
</div>
</div>
</div>
</div>
</div>
</main>
<footer class=\"py-4 bg-light mt-auto\">
<div class=\"container-fluid px-4\">
<div class=\"d-flex align-items-center justify-content-between small\">
<div class=\"text-muted\">Copyright &copy; HeartTrack 2023</div>
<div>
<a href=\"#\">Politique de confidentialité</a>
&middot;
<a href=\"#\">Termes &amp; Conditions d'utilisations</a>
</div>
</div>
</div>
</footer>
</div>
</div>
<script src=\"https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js\" crossorigin=\"anonymous\"></script>
<script src=\"js/scripts.js\"></script>
<script src=\"https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.8.0/Chart.min.js\" crossorigin=\"anonymous\"></script>
<script src=\"assets/demo/chart-area-demo.js\"></script>
<script src=\"assets/demo/chart-bar-demo.js\"></script>
<script src=\"https://cdn.jsdelivr.net/npm/simple-datatables@7.1.2/dist/umd/simple-datatables.min.js\" crossorigin=\"anonymous\"></script>
<script src=\"js/datatables-simple-demo.js\"></script>
</body>
</html>
";
}
public function getTemplateName()
{
return "home.html";
}
public function getDebugInfo()
{
return array ( 37 => 1,);
}
public function getSourceContext()
{
return new Source("", "home.html", "/home/www/anpinagot/public_html/sae/Web/Sources/src/app/views/Templates/home.html");
}
}

@ -0,0 +1,215 @@
<?php
use Twig\Environment;
use Twig\Error\LoaderError;
use Twig\Error\RuntimeError;
use Twig\Extension\SandboxExtension;
use Twig\Markup;
use Twig\Sandbox\SecurityError;
use Twig\Sandbox\SecurityNotAllowedTagError;
use Twig\Sandbox\SecurityNotAllowedFilterError;
use Twig\Sandbox\SecurityNotAllowedFunctionError;
use Twig\Source;
use Twig\Template;
/* base.html.twig */
class __TwigTemplate_83f313b86da35998a96ccc25fa02176c3fca11644e117af297089ca4a85f55ab extends Template
{
private $source;
private $macros = [];
public function __construct(Environment $env)
{
parent::__construct($env);
$this->source = $this->getSourceContext();
$this->parent = false;
$this->blocks = [
'title' => [$this, 'block_title'],
'stylesheets' => [$this, 'block_stylesheets'],
'javascripts' => [$this, 'block_javascripts'],
'menu' => [$this, 'block_menu'],
'body' => [$this, 'block_body'],
'script' => [$this, 'block_script'],
];
}
protected function doDisplay(array $context, array $blocks = [])
{
$macros = $this->macros;
// line 1
echo "<!DOCTYPE html>
<html lang=\"fr \">
<head>
<meta charset=\"UTF-8\">
<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">
<title>";
// line 6
$this->displayBlock('title', $context, $blocks);
echo "</title>
";
// line 8
$this->displayBlock('stylesheets', $context, $blocks);
// line 12
echo "
";
// line 13
$this->displayBlock('javascripts', $context, $blocks);
// line 16
echo "</head>
<body class=\"sb-nav-fixed\">
";
// line 18
$this->displayBlock('menu', $context, $blocks);
// line 85
echo "
";
// line 86
$this->displayBlock('body', $context, $blocks);
// line 87
echo "
";
// line 88
$this->displayBlock('script', $context, $blocks);
// line 97
echo "</body>
</html>";
}
// line 6
public function block_title($context, array $blocks = [])
{
$macros = $this->macros;
}
// line 8
public function block_stylesheets($context, array $blocks = [])
{
$macros = $this->macros;
// line 9
echo " <link href=\"../css/styles.css\" rel=\"stylesheet\" />
<link href=\"https://cdn.jsdelivr.net/npm/simple-datatables@7.1.2/dist/style.min.css\" rel=\"stylesheet\" />
";
}
// line 13
public function block_javascripts($context, array $blocks = [])
{
$macros = $this->macros;
// line 14
echo " <script src=\"https://use.fontawesome.com/releases/v6.3.0/js/all.js\" crossorigin=\"anonymous\"></script>
";
}
// line 18
public function block_menu($context, array $blocks = [])
{
$macros = $this->macros;
// line 19
echo " <nav class=\"sb-topnav navbar navbar-expand navbar-dark bg-dark\">
<!-- Navbar Brand-->
<img class=\"navbar-brand ps-3\" src=\"../../../public/assets/img/logo.png\">
<!-- Sidebar Toggle-->
<button class=\"btn btn-link btn-sm order-1 order-lg-0 me-4 me-lg-0\" id=\"sidebarToggle\" href=\"#!\"><i class=\"fas fa-bars\"></i></button>
<!-- Navbar Search-->
<form class=\"d-none d-md-inline-block form-inline ms-auto me-0 me-md-3 my-2 my-md-0\">
<div class=\"input-group\">
<input class=\"form-control\" type=\"text\" placeholder=\"Rechercher...\" aria-label=\"Rechercher...\" aria-describedby=\"btnNavbarSearch\" />
<button class=\"btn btn-primary\" id=\"btnNavbarSearch\" type=\"button\"><i class=\"fas fa-search\"></i></button>
</div>
</form>
<!-- Navbar-->
<ul class=\"navbar-nav ms-auto ms-md-0 me-3 me-lg-4\">
<li class=\"nav-item dropdown\">
<a class=\"nav-link dropdown-toggle\" id=\"navbarDropdown\" href=\"#\" role=\"button\" data-bs-toggle=\"dropdown\" aria-expanded=\"false\"><i class=\"fas fa-user fa-fw\"></i></a>
<ul class=\"dropdown-menu dropdown-menu-end\" aria-labelledby=\"navbarDropdown\">
<li><a class=\"dropdown-item\" href=\"#!\">Profile</a></li>
<li><a class=\"dropdown-item\" href=\"#!\">Paramètres</a></li>
<li><hr class=\"dropdown-divider\" /></li>
<li><a class=\"dropdown-item\" href=\"#!\">Déconnexion</a></li>
</ul>
</li>
</ul>
</nav>
<div id=\"layoutSidenav\">
<div id=\"layoutSidenav_nav\">
<nav class=\"sb-sidenav accordion sb-sidenav-dark\" id=\"sidenavAccordion\">
<div class=\"sb-sidenav-menu\">
<div class=\"nav\">
<div class=\"sb-sidenav-menu-heading\">Menu</div>
<a class=\"nav-link\" href=\"home.html\">
<div class=\"sb-nav-link-icon\"><img src=\"assets/img/house.png\"></div>
Accueil
</a>
<div class=\"sb-sidenav-menu-heading\">Activités</div>
<a class=\"nav-link\" href=\"exercice.html\">
<div class=\"sb-nav-link-icon\"><img src=\"assets/img/sprinter.png\"></div>
Exercices
</a>
<a class=\"nav-link\" href=\"analyze.html\">
<div class=\"sb-nav-link-icon\"><i class=\"fas fa-chart-area\"></i></div>
Analyses
</a>
<div class=\"sb-sidenav-menu-heading\">Social</div>
<a class=\"nav-link\" href=\"friend.html\">
<div class=\"sb-nav-link-icon\"><img src=\"assets/img/group.png\"></div>
Amis
</a>
<a class=\"nav-link\" href=\"coaching.html\">
<div class=\"sb-nav-link-icon\"><img src=\"assets/img/coaching.png\"></div>
Coaching
</a>
<a class=\"nav-link\" href=\"mail.html\">
<div class=\"sb-nav-link-icon\"><img src=\"assets/img/letter.png\"></div>
Messagerie
</a>
</div>
</div>
<div class=\"sb-sidenav-footer\">
<div class=\"small\">Connecté en tant que:</div>
{user}
</div>
</nav>
</div>
";
}
// line 86
public function block_body($context, array $blocks = [])
{
$macros = $this->macros;
}
// line 88
public function block_script($context, array $blocks = [])
{
$macros = $this->macros;
// line 89
echo " <script src=\"https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js\" crossorigin=\"anonymous\"></script>
<script src=\"js/scripts.js\"></script>
<script src=\"https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.8.0/Chart.min.js\" crossorigin=\"anonymous\"></script>
<script src=\"assets/demo/chart-area-demo.js\"></script>
<script src=\"assets/demo/chart-bar-demo.js\"></script>
<script src=\"https://cdn.jsdelivr.net/npm/simple-datatables@7.1.2/dist/umd/simple-datatables.min.js\" crossorigin=\"anonymous\"></script>
<script src=\"js/datatables-simple-demo.js\"></script>
";
}
public function getTemplateName()
{
return "base.html.twig";
}
public function getDebugInfo()
{
return array ( 191 => 89, 187 => 88, 181 => 86, 112 => 19, 108 => 18, 103 => 14, 99 => 13, 93 => 9, 89 => 8, 83 => 6, 78 => 97, 76 => 88, 73 => 87, 71 => 86, 68 => 85, 66 => 18, 62 => 16, 60 => 13, 57 => 12, 55 => 8, 50 => 6, 43 => 1,);
}
public function getSourceContext()
{
return new Source("", "base.html.twig", "/home/www/anpinagot/public_html/sae/Web/Sources/src/app/views/Templates/base.html.twig");
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save