Compare commits

...

371 Commits

Author SHA1 Message Date
Nicolas MAYE 87f00a822b modification sur ecran de connexion
continuous-integration/drone/push Build is failing Details
2 years ago
Hugo LIVET 1abb8c9ada Merge branch 'Binding'
continuous-integration/drone/push Build is failing Details
2 years ago
Hugo LIVET 341bb8f5e6 ReadOnly buggé :(
continuous-integration/drone/push Build is failing Details
2 years ago
Hugo LIVET a392a21fc5 Patch Heure dans les vues
continuous-integration/drone/push Build is failing Details
2 years ago
Hugo LIVET 59fbd7c2d6 Réparation des tags de moyens de payement
continuous-integration/drone/push Build is failing Details
2 years ago
Hugo LIVET 9ce0a4af12 Push gestion Banques Desktop
continuous-integration/drone/push Build is failing Details
2 years ago
Hugo LIVET 6db964aafb Merge branch 'Binding' of https://codefirst.iut.uca.fr/git/ConsEcoTeam/ConsEco into Binding
continuous-integration/drone/push Build is failing Details
2 years ago
Hugo LIVET eeb10e8926 Bind Mobile
2 years ago
Hugo LIVET 12f7ebad49 Binding Mobile
2 years ago
Nicolas MAYE 3c93c66374 Modification majeur interface utilisateur (modification style global + navigation + binding statistique...)
continuous-integration/drone/push Build is failing Details
2 years ago
Nicolas MAYE fe1f1f8ff9 implémentation des fonctionnalités enregistrer et supprimer echeance + retirer et supprimer operation
2 years ago
Nicolas MAYE 4f0099fcef methode debit et crédit implémentés
2 years ago
Hugo LIVET c031ce2137 gestion combo box
continuous-integration/drone/push Build was killed Details
2 years ago
Hugo LIVET fd34a64857 Merge branch 'Binding' of https://codefirst.iut.uca.fr/git/ConsEcoTeam/ConsEco into Binding
continuous-integration/drone/push Build was killed Details
2 years ago
Hugo LIVET 2a0172ca8d add image
2 years ago
Nicolas MAYE bf2838b4c1 fusion
continuous-integration/drone/push Build was killed Details
2 years ago
Nicolas MAYE 43af56ca06 modification temporaire
2 years ago
Hugo LIVET ae06599285 Changement d'icones
continuous-integration/drone/push Build was killed Details
2 years ago
Hugo LIVET 529f4fd8b4 Bind mieux que nico psk il sait pas écrire
continuous-integration/drone/push Build was killed Details
2 years ago
Hugo LIVET 62c668c011 Patch bug LoadCompte, en cas de pluseurs appels de la méthode
continuous-integration/drone/push Build was killed Details
2 years ago
Nicolas MAYE c82de40d19 binding partie échéancier
continuous-integration/drone/push Build was killed Details
2 years ago
Nicolas MAYE ec757cad9f binding partie operation
continuous-integration/drone/push Build was killed Details
2 years ago
Nicolas MAYE d2cc90c555 Merge branch 'Binding' of https://codefirst.iut.uca.fr/git/ConsEcoTeam/ConsEco into Binding
continuous-integration/drone/push Build was killed Details
2 years ago
Nicolas MAYE 85ad54c95f modification mineur sur les vues
2 years ago
Hugo LIVET 517db9a0fe Bind nom planification
continuous-integration/drone/push Build was killed Details
2 years ago
Hugo LIVET 79964920a9 Bind Plannification ok
continuous-integration/drone/push Build was killed Details
2 years ago
Hugo LIVET b7c339d999 Fussion
2 years ago
Hugo LIVET 72156049aa Binding Plannification OK
2 years ago
Nicolas MAYE 75be7dd588 modification des vue concernant les fonctions
continuous-integration/drone/push Build was killed Details
2 years ago
Nicolas MAYE f3cf398e73 modification du dashboard pour le responsive
continuous-integration/drone/push Build was killed Details
2 years ago
Nicolas MAYE a7b8445c65 Amélioration UX (uniformisation de l'aspect visuel + ajout de bordure) + Binding du user dans "mon compte"
continuous-integration/drone/push Build was killed Details
2 years ago
Nicolas MAYE 3f341cebba modification vue login
continuous-integration/drone/push Build is failing Details
2 years ago
Nicolas MAYE 5e393fc899 modification mineur
continuous-integration/drone/push Build is failing Details
2 years ago
Nicolas MAYE 8346bdc69f Merge branch 'Binding' of https://codefirst.iut.uca.fr/git/ConsEcoTeam/ConsEco into Binding
2 years ago
Nicolas MAYE b6a61795e8 ajout de loadBanque, loadInscrit et loadBanqueDisponible + binding
2 years ago
Hugo LIVET f307902c6e System de connexion Desktop
continuous-integration/drone/push Build is failing Details
2 years ago
Hugo LIVET 325ca468f1 Push a reprendre
continuous-integration/drone/push Build is failing Details
2 years ago
Nicolas MAYE eba13a0488 Transférer les fichiers vers 'Documentation'
continuous-integration/drone/push Build is failing Details
2 years ago
Nicolas MAYE cf61f1c62a Supprimer 'Documentation/diagramme d'utilisation cons'eco.mdj'
continuous-integration/drone/push Build is failing Details
2 years ago
Nicolas MAYE bb85c270f1 Supprimer 'Documentation/Diagramme de cas dutilisation.pdf'
continuous-integration/drone/push Build is failing Details
2 years ago
Nicolas MAYE 84810a8966 Supprimer 'Documentation/Diagramme de cas d'utilisation.pdf'
continuous-integration/drone/push Build is failing Details
2 years ago
Nicolas MAYE c77146cd4e Transférer les fichiers vers 'Documentation'
continuous-integration/drone/push Build is failing Details
2 years ago
Nicolas MAYE 0a4b1727d8 modification et binding de compte
continuous-integration/drone/push Build is failing Details
2 years ago
Nicolas MAYE 1ca736aa2f implémentation des vues dans la partie statistique + ajout des comboBox
continuous-integration/drone/push Build is failing Details
2 years ago
Nicolas MAYE 582df8f9d8 Début de la modification, du manager et persistance
continuous-integration/drone/push Build is failing Details
2 years ago
Hugo LIVET a0ff37248a Correction Fusion UI_Windows
continuous-integration/drone/push Build is failing Details
2 years ago
Hugo LIVET 739fa77493 Fusion UI_Windows
2 years ago
Hugo LIVET 12651ea426 Merge pull request 'ManagerRefactoring' (#139) from ManagerRefactoring into master
continuous-integration/drone/push Build is failing Details
2 years ago
Hugo LIVET 16e266e8e6 Push bind banques
continuous-integration/drone/push Build is failing Details
2 years ago
Hugo LIVET 1499d68d98 OK
continuous-integration/drone/push Build is failing Details
2 years ago
Vincent ASTOLFI ceff9e0ed7 réparation de la connexion et protection des mots de passe
continuous-integration/drone/push Build is failing Details
2 years ago
Hugo LIVET 0d9a5188f5 Modif vues
continuous-integration/drone/push Build is failing Details
2 years ago
Hugo LIVET 0f00183fdc Réparation de PersAPI
continuous-integration/drone/push Build is failing Details
2 years ago
Hugo LIVET f2ae2d41cc Probleme
continuous-integration/drone/push Build is failing Details
2 years ago
Vincent ASTOLFI 6b06e3f909 Refactoring de toute les methodes des pages lies a la conenction afin de les rendres toute fonctionnelle avec l'API
continuous-integration/drone/push Build is failing Details
2 years ago
Vincent ASTOLFI c7bee1a4d6 refactoring du manager pour la page MainWindow
continuous-integration/drone/push Build is failing Details
2 years ago
Hugo LIVET 782d82eb74 Remise en état avec le nouvel IPersistanceManager
continuous-integration/drone/push Build is failing Details
2 years ago
Nicolas MAYE b4fd6dbd4e ajout de CV home, log, enregistrer/supprimer echeance + amelioration graphique
continuous-integration/drone/push Build is passing Details
2 years ago
Hugo LIVET faca3741a1 Netoyage
continuous-integration/drone/push Build is failing Details
2 years ago
Hugo LIVET 8abc26d7c8 Merge pull request 'ClientAPI' (#138) from ClientAPI into master
continuous-integration/drone/push Build is failing Details
2 years ago
Hugo LIVET bc7c834b5a Modif Fusion
continuous-integration/drone/push Build is failing Details
2 years ago
Hugo LIVET d4cd93bc97 Fusion
2 years ago
Hugo LIVET 0a6ea075b9 Modification API
continuous-integration/drone/push Build is failing Details
2 years ago
Nicolas MAYE fe81d4592c binding avec fake data fini sur planification, echeance et operation
continuous-integration/drone/push Build is passing Details
2 years ago
Hugo LIVET 82f94f9027 Implémentation de l'API finie !!
continuous-integration/drone/push Build is failing Details
2 years ago
Nicolas MAYE 67d9773fb8 maj operation
continuous-integration/drone/push Build is passing Details
2 years ago
Nicolas MAYE 63ce16c531 ajout classe MethodePayement
2 years ago
Nicolas MAYE 9542f60dc0 maj operation
2 years ago
Nicolas MAYE 94dce05f39 maj planification
2 years ago
Nicolas MAYE 6833a53ed1 ajout classe TagOpération
2 years ago
Nicolas MAYE 640fadb27d maj echeance
2 years ago
Nicolas MAYE 7e84a403a0 maj echeancier
2 years ago
Hugo LIVET 9f434806f1 Modification classe
continuous-integration/drone/push Build is failing Details
2 years ago
Hugo LIVET 014fa79013 Ajout de la Planification API
continuous-integration/drone/push Build is failing Details
2 years ago
Lucas EVARD 294bf73d9e Test unitaire Compte
continuous-integration/drone/push Build is failing Details
2 years ago
Lucas EVARD ab33f28138 Merge branch 'master' of https://codefirst.iut.uca.fr/git/hugo.livet/ConsEco
continuous-integration/drone/push Build is failing Details
2 years ago
Lucas EVARD b85bc56b26 Patch probleme tests unitaire Compte/Inscrit
2 years ago
Hugo LIVET 34ca7ca60f Implémentation de l'api dans la stratégie de persistance
continuous-integration/drone/push Build is failing Details
2 years ago
Hugo LIVET 0f3872e8f2 Ajout routes Opération
continuous-integration/drone/push Build is failing Details
2 years ago
Nicolas MAYE 90340af065 finalisation du binding de le vue opération
continuous-integration/drone/push Build is passing Details
2 years ago
Vincent ASTOLFI 2f4a85f154 Merge pull request 'modification du Stub désormais fonctionnelle' (#137) from modifStub into master
continuous-integration/drone/push Build is failing Details
2 years ago
Vincent ASTOLFI b581424a58 ajout de toute les méthodes dans le stub
continuous-integration/drone/push Build is failing Details
2 years ago
Nicolas MAYE f5f2686c91 modification du style + amélioration des vue echeancier, operation compte et planification
continuous-integration/drone/push Build is passing Details
2 years ago
Vincent ASTOLFI 247f1fe2ce Merge branch 'master' of https://codefirst.iut.uca.fr/git/ConsEcoTeam/ConsEco
continuous-integration/drone/push Build is failing Details
2 years ago
Vincent ASTOLFI 83d045b280 correction unitTest
2 years ago
Hugo LIVET 4e150819bc API Compte OK
continuous-integration/drone/push Build is failing Details
2 years ago
Nicolas MAYE a00febc8b4 modifications mineurs des vues
continuous-integration/drone/push Build is passing Details
2 years ago
Hugo LIVET 74d30d2522 Ajout des routes des banques
continuous-integration/drone/push Build is failing Details
2 years ago
Nicolas MAYE 32d656188d Merge branch 'UI_Windows' of https://codefirst.iut.uca.fr/git/ConsEcoTeam/ConsEco into UI_Windows
continuous-integration/drone/push Build is passing Details
2 years ago
Nicolas MAYE 51e8b4651b avancement et uniformisation des vues desktop
2 years ago
Hugo LIVET add061d7b4 Patch API
continuous-integration/drone/push Build is failing Details
2 years ago
Hugo LIVET c05615cf79 modif testFonctionnel
continuous-integration/drone/push Build is failing Details
2 years ago
Vincent ASTOLFI a834bba09b ajout de méthode dans le stub
continuous-integration/drone/push Build is failing Details
2 years ago
Hugo LIVET 5099cf76a0 Ajout des routes des banques mais bug sur l'api
2 years ago
Raphael LACOTE 61802355ff Ajout de commentaire pour les exceptions.
continuous-integration/drone/push Build is passing Details
2 years ago
Raphael LACOTE 34a203cee9 Ajout de nouveaux commentaires.
continuous-integration/drone/push Build is passing Details
2 years ago
Raphael LACOTE f48f3d580a Merge branch 'UI_Windows' of https://codefirst.iut.uca.fr/git/ConsEcoTeam/ConsEco into UI_Windows
continuous-integration/drone/push Build is passing Details
2 years ago
Raphael LACOTE a80283ff39 Ajout de nouveaux commentaires
2 years ago
Hugo LIVET 12fefde1d7 Ajout de Route
continuous-integration/drone/push Build is failing Details
2 years ago
Nicolas MAYE e6c47dd57c Merge branch 'UI_Windows' of https://codefirst.iut.uca.fr/git/ConsEcoTeam/ConsEco into UI_Windows
continuous-integration/drone/push Build is passing Details
2 years ago
Nicolas MAYE 1797a2b0ee avancement sur la vue planification
2 years ago
Raphael LACOTE c4dd19e329 Ajout de commentaires
continuous-integration/drone/push Build is passing Details
2 years ago
Raphael LACOTE e8776b9750 Rectification d'un bug de couleurs
continuous-integration/drone/push Build is passing Details
2 years ago
Raphael LACOTE 41b71baf3e Rectification d'un bug avec les couleurs
2 years ago
Nicolas MAYE 6d8e798211 modification vue windows
continuous-integration/drone/push Build is passing Details
2 years ago
Nicolas MAYE 4f180027f3 modification vue window
2 years ago
Hugo LIVET 3963d6dbd8 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is failing Details
2 years ago
Hugo LIVET 8889b164f8 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is failing Details
2 years ago
Hugo LIVET b6c86028ee Merge branch 'ClientAPI' of https://codefirst.iut.uca.fr/git/ConsEcoTeam/ConsEco into ClientAPI
continuous-integration/drone/push Build is failing Details
2 years ago
Hugo LIVET acb675e96a Nouvelle IDataPersistance pas finie psk malade :(
2 years ago
Hugo LIVET 69ea3a08c7 💚 correction des dépendances de la CI
continuous-integration/drone/push Build is failing Details
2 years ago
Hugo LIVET d3d1b57838 💚 MaJ CI
continuous-integration/drone/push Build is failing Details
2 years ago
Hugo LIVET 995a4b10ee Client API
continuous-integration/drone/push Build is failing Details
2 years ago
Nicolas MAYE f3c8100119 modification contenView DeletePlanification + implémentation listView dans CV_Planification
continuous-integration/drone/push Build is passing Details
2 years ago
Hugo LIVET 77e5c5787c Mise à jour de 'README.md'
continuous-integration/drone/push Build is failing Details
2 years ago
Vincent ASTOLFI 6db599b5f9 tw
continuous-integration/drone/push Build is failing Details
2 years ago
Nicolas MAYE a6a3133b11 ajout de la content View de delete planification
continuous-integration/drone/push Build is passing Details
2 years ago
Hugo LIVET 4fcaa57528 fusion
continuous-integration/drone/push Build is failing Details
2 years ago
Hugo LIVET 0d24d0b43a fusion
2 years ago
Lucas Evard 1a99d87d1a Modification vues pour fonctionner sur IOS
continuous-integration/drone/push Build is failing Details
2 years ago
Raphael LACOTE 1b2d3ba39f Merge branch 'UI_Windows' of https://codefirst.iut.uca.fr/git/ConsEcoTeam/ConsEco into UI_Windows
continuous-integration/drone/push Build is failing Details
2 years ago
Raphael LACOTE 9952b4d1c7 Création de CV_Statistiques
2 years ago
Hugo LIVET ff4e55615f Mise à jour de 'Sources/Data/tables.sql'
continuous-integration/drone/push Build is failing Details
2 years ago
Raphael LACOTE e1d13eb40f Merge branch 'UI_Windows' of https://codefirst.iut.uca.fr/git/ConsEcoTeam/ConsEco into UI_Windows
continuous-integration/drone/push Build is failing Details
2 years ago
Raphael LACOTE 79a93486ac Légère modification dans les vues windows
2 years ago
Vincent ASTOLFI 1565ff6d0e modif stub. Ajout de la possibilité de créer des comptes et de changer le mot de passe depuis le stub
continuous-integration/drone/push Build is failing Details
2 years ago
Nicolas MAYE 651014a924 Merge branch 'UI_Windows' of https://codefirst.iut.uca.fr/git/ConsEcoTeam/ConsEco into UI_Windows
continuous-integration/drone/push Build is failing Details
2 years ago
Nicolas MAYE 4deabc07b6 update csproj de la fusion
2 years ago
Nicolas MAYE a7b03eb446 Merge branch 'master' of https://codefirst.iut.uca.fr/git/ConsEcoTeam/ConsEco
continuous-integration/drone/push Build is failing Details
2 years ago
Nicolas MAYE 1e43a67e68 fusion de UI_Windows dans master
2 years ago
Hugo LIVET 9526b62b69 Merge branch 'GestionBanques' of https://codefirst.iut.uca.fr/git/ConsEcoTeam/ConsEco into GestionBanques
continuous-integration/drone/push Build is failing Details
2 years ago
Hugo LIVET 085561db1e ajout visu ( a reprendre fait a la va vite)
2 years ago
Vincent ASTOLFI 1add12c047 Merge branch 'API'
continuous-integration/drone/push Build is failing Details
2 years ago
Vincent ASTOLFI 38697e3d0b test documentation de l'API
continuous-integration/drone/push Build is failing Details
2 years ago
Nicolas MAYE 65c8e7eafc implémentation du contentView d'ajout d'une planification
continuous-integration/drone/push Build is failing Details
2 years ago
Raphael LACOTE da63a21499 Rectification d'un bug
continuous-integration/drone/push Build is failing Details
2 years ago
Raphael LACOTE 69f61a6a9d Rectification d'un problème d'affichage
2 years ago
Hugo LIVET 21bcd58154 Supprimer 'Sources/TestFonctionnel/CAcomplet.ofx'
continuous-integration/drone/push Build is failing Details
2 years ago
Hugo LIVET 6a363d2516 banque avec le manager a jour
continuous-integration/drone/push Build is failing Details
2 years ago
Hugo LIVET 3f6f1c4905 rebase
2 years ago
Vincent ASTOLFI 0d6979f482 test documentation
continuous-integration/drone/push Build is failing Details
2 years ago
Vincent ASTOLFI eb90d8e4d2 résolution bug
2 years ago
Vincent ASTOLFI d5675ae886 les routes PUT fonctionne désormais avec un body en json
2 years ago
Vincent ASTOLFI f10b2e4736 ajout de deux routes avec des requetes PUT (pas encore fonctionnelle) et test de documentation avec swagger
continuous-integration/drone/push Build is failing Details
2 years ago
Vincent ASTOLFI f8caddc10d ajout d'une route de type post fonctionnelle
continuous-integration/drone/push Build is failing Details
2 years ago
Vincent ASTOLFI f1124e311d modification de l'architecture de l'API afin qu'elle soit de type aplication. utilisation du framework slim php et ajout d'une première route
continuous-integration/drone/push Build is failing Details
2 years ago
Raphael LACOTE 9c106a06de Transformation de content page en content view
continuous-integration/drone/push Build is failing Details
2 years ago
Raphael LACOTE 8799539316 Merge branch 'UI_Windows' of https://codefirst.iut.uca.fr/git/ConsEcoTeam/ConsEco into UI_Windows
continuous-integration/drone/push Build is failing Details
2 years ago
Raphael LACOTE 87df36b72e Ajout de style et légère modif de vues
2 years ago
Raphael LACOTE b866c9a81a Modification des vues windows
continuous-integration/drone/push Build is failing Details
2 years ago
Raphael LACOTE 264eaf4d30 Travail sur les vues windows planification,échéancier, compte et opérations
2 years ago
Nicolas MAYE 4f942c6862 Merge branch 'UI_Windows' of https://codefirst.iut.uca.fr/git/ConsEcoTeam/ConsEco into UI_Windows
continuous-integration/drone/push Build is failing Details
2 years ago
Nicolas MAYE a829113cfd ajustement content view Planification
2 years ago
Vincent ASTOLFI 7167670b92 ajout de routes
continuous-integration/drone/push Build is failing Details
2 years ago
Nicolas MAYE daba159235 Merge branch 'UI_Windows' of https://codefirst.iut.uca.fr/git/ConsEcoTeam/ConsEco into UI_Windows
continuous-integration/drone/push Build is failing Details
2 years ago
Nicolas MAYE 4086ffd80a implémentation des contentView dans le dashboard
2 years ago
Vincent ASTOLFI ba9106a7de changement des routes
continuous-integration/drone/push Build is failing Details
2 years ago
Vincent ASTOLFI bcb3a7ee78 changement du fonctionnement des routes de l'API afin de les rendres plus faciles d'utilisation
continuous-integration/drone/push Build is failing Details
2 years ago
Vincent ASTOLFI 451f8aec79 ajout API : recuperer le mot de passe d'un user depuis son mail
continuous-integration/drone/push Build is failing Details
2 years ago
Vincent ASTOLFI c9db235c3b changement du functionnement de l'API afin de la rendre plus utilisable
continuous-integration/drone/push Build is failing Details
2 years ago
Raphael LACOTE da7fac375f Modification pour les vues windows et ajout de styles
continuous-integration/drone/push Build is failing Details
2 years ago
Nicolas MAYE 20601db044 indexation planification
continuous-integration/drone/push Build is failing Details
2 years ago
Nicolas MAYE 92390d408c mise en place des content view de planification et préparation du dashboard
2 years ago
Raphael LACOTE 8e616abb3a Merge branch 'UI_Windows' of https://codefirst.iut.uca.fr/git/ConsEcoTeam/ConsEco into UI_Windows
continuous-integration/drone/push Build is failing Details
2 years ago
Raphael LACOTE 0f0877191f Modification de la vue pour le compte
2 years ago
Hugo LIVET a43483a37c Merge branch 'GestionBanques' of https://codefirst.iut.uca.fr/git/ConsEcoTeam/ConsEco into GestionBanques
continuous-integration/drone/push Build is failing Details
2 years ago
Nicolas MAYE 4fddd4f802 modification planification
2 years ago
Lucas EVARD 8b4528c733 Push de la page Dashboard(début)
continuous-integration/drone/push Build is failing Details
2 years ago
Hugo LIVET 82d0dae292 Gestion Banques presque oke
2 years ago
Hugo LIVET 0ecb82b5ce Gestion de l'erreur de connexion a la BDD, ajout de composants + ajouts de vues
2 years ago
Hugo LIVET b66525131f Merge branch 'GestionBanques' of https://codefirst.iut.uca.fr/git/ConsEcoTeam/ConsEco into GestionBanques
continuous-integration/drone/push Build is passing Details
2 years ago
Hugo LIVET b8f18fdee5 Gestion Banques presque oke
2 years ago
Hugo LIVET 77a0f3c7c0 Gestion de l'erreur de connexion a la BDD, ajout de composants + ajouts de vues
2 years ago
Hugo LIVET 55d1fd1b28 Gestion Banques presque oke
continuous-integration/drone/push Build is passing Details
2 years ago
Raphael LACOTE 61b29d5a36 Légère modification de la page Comptepour les vues Windows
continuous-integration/drone/push Build is passing Details
2 years ago
Raphael LACOTE fef9f3f8f1 Lot de vues
continuous-integration/drone/push Build is passing Details
2 years ago
Raphael LACOTE 4a473fdf43 Lot de vues windows
2 years ago
Hugo LIVET 45b220c477 Merge pull request 'API' (#130) from API into master
continuous-integration/drone/push Build is passing Details
2 years ago
Vincent ASTOLFI aee8ec0e1f Supprimer 'Sources/Data/tablewithgeneratedid.sql'
continuous-integration/drone/push Build is passing Details
2 years ago
Vincent ASTOLFI ba71d3f6bf Supprimer 'Sources/Data/insert.sql'
continuous-integration/drone/push Build is passing Details
2 years ago
Nicolas MAYE e104f4a49a Merge branch 'UI_Windows' of https://codefirst.iut.uca.fr/git/ConsEcoTeam/ConsEco into UI_Windows
continuous-integration/drone/push Build is passing Details
2 years ago
Nicolas MAYE ba96c3b9d4 modification vue planification
2 years ago
Vincent ASTOLFI c39a66beb5 Mise à jour de 'Sources/API/config/Config.php'
continuous-integration/drone/push Build is passing Details
2 years ago
Vincent ASTOLFI d15bb0215a Mise à jour de 'Sources/API/controller/Controller.php'
continuous-integration/drone/push Build is passing Details
2 years ago
Vincent ASTOLFI 2c15eeedb6 test résolution de la base de données
continuous-integration/drone/push Build is passing Details
2 years ago
Vincent ASTOLFI 97bf4b2829 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is passing Details
2 years ago
Vincent ASTOLFI b4b0bd1807 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is passing Details
2 years ago
Vincent ASTOLFI 602c77d881 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is passing Details
2 years ago
Vincent ASTOLFI 86c436e855 test résolution de la base de données
continuous-integration/drone/push Build is passing Details
2 years ago
Vincent ASTOLFI aa37947d27 test résolution de la base de données
continuous-integration/drone/push Build is passing Details
2 years ago
Vincent ASTOLFI 442490d3ec test résolution de la base de données
continuous-integration/drone/push Build is passing Details
2 years ago
Vincent ASTOLFI 989fbea0f2 test résolution de la bdd
continuous-integration/drone/push Build is passing Details
2 years ago
Vincent ASTOLFI 3f072984fe test résolution de la base de données
continuous-integration/drone/push Build is passing Details
2 years ago
Vincent ASTOLFI d0025c8e94 Merge branch 'API' of https://codefirst.iut.uca.fr/git/ConsEcoTeam/ConsEco into API
continuous-integration/drone/push Build is passing Details
2 years ago
Vincent ASTOLFI 5bc558d87f correction affichage
2 years ago
Vincent ASTOLFI 03c36276d4 tweaks
continuous-integration/drone/push Build is passing Details
2 years ago
Vincent ASTOLFI 7afa8f4b52 tw
continuous-integration/drone/push Build is passing Details
2 years ago
Vincent ASTOLFI 3120c193b6 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is failing Details
2 years ago
Vincent ASTOLFI 4296e9b524 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is passing Details
2 years ago
Nicolas MAYE 2cc56e591b ajout des vue compte et echeancier
continuous-integration/drone/push Build is passing Details
2 years ago
Vincent ASTOLFI fd5bff0cc8 tw
continuous-integration/drone/push Build is passing Details
2 years ago
Hugo LIVET 5c5ac6637d Gestion de l'erreur de connexion a la BDD, ajout de composants + ajouts de vues
continuous-integration/drone/push Build is passing Details
2 years ago
Vincent ASTOLFI 7e7ef88126 Mise à jour de 'README.md'
continuous-integration/drone/push Build is passing Details
2 years ago
Vincent ASTOLFI e0096cad40 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is passing Details
2 years ago
Vincent ASTOLFI 7e254fbbac Mise à jour de 'Sources/API/config/Config.php'
continuous-integration/drone/push Build is passing Details
2 years ago
Vincent ASTOLFI cb53baf55d Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is passing Details
2 years ago
Vincent ASTOLFI 2233808a9c Mise à jour de 'Sources/API/config/Config.php'
continuous-integration/drone/push Build is passing Details
2 years ago
Raphael LACOTE 401521723b Merge branch 'UI_Windows' of https://codefirst.iut.uca.fr/git/ConsEcoTeam/ConsEco into UI_Windows
continuous-integration/drone/push Build is passing Details
2 years ago
Raphael LACOTE 823bdf20b6 Ajout des styles ( En espérant que ca marche cet fois ci)
2 years ago
Vincent ASTOLFI 1fb222dea5 Mise à jour de 'Sources/API/config/Config.php'
continuous-integration/drone/push Build is passing Details
2 years ago
Vincent ASTOLFI 2d6ebc22e6 Mise à jour de 'Sources/API/config/Config.php'
continuous-integration/drone/push Build is passing Details
2 years ago
Vincent ASTOLFI c536d9fc6d Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is passing Details
2 years ago
Nicolas MAYE 1da869673f ajout couleur texte
continuous-integration/drone/push Build is passing Details
2 years ago
Nicolas MAYE fb72e6fe51 Merge branch 'UI_Windows' of https://codefirst.iut.uca.fr/git/ConsEcoTeam/ConsEco into UI_Windows
2 years ago
Nicolas MAYE 0eaba5c069 ajout élément sur la vue planification
2 years ago
Vincent ASTOLFI cbf6169d3f Mise à jour de 'Sources/API/config/Config.php'
continuous-integration/drone/push Build is passing Details
2 years ago
Vincent ASTOLFI e4a38e1994 Mise à jour de 'Sources/API/config/Config.php'
continuous-integration/drone/push Build is passing Details
2 years ago
Raphael LACOTE 8f38c138d4 Ajout de la vue forgetPassword pour les vues windows
continuous-integration/drone/push Build is passing Details
2 years ago
Vincent ASTOLFI 552bf01be6 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is passing Details
2 years ago
Vincent ASTOLFI bd85104cb1 Merge branch 'API' of https://codefirst.iut.uca.fr/git/ConsEcoTeam/ConsEco into API
continuous-integration/drone/push Build is passing Details
2 years ago
Vincent ASTOLFI cf1b4ec647 scripy d'insertion des tables et test d'affichage des données grâce à l'API
2 years ago
Nicolas MAYE 00be26cd44 Merge branch 'UI_Windows' of https://codefirst.iut.uca.fr/git/ConsEcoTeam/ConsEco into UI_Windows
continuous-integration/drone/push Build is passing Details
2 years ago
Nicolas MAYE 869ead0667 Ajout d'éléments dans la vue dashboard
2 years ago
Vincent ASTOLFI 37bb27e889 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is passing Details
2 years ago
Vincent ASTOLFI 4a255191ac Merge branch 'API' of https://codefirst.iut.uca.fr/git/ConsEcoTeam/ConsEco into API
continuous-integration/drone/push Build is passing Details
2 years ago
Vincent ASTOLFI 670161bea9 ajout des routes et d'une première requête en base de données (normalement l'API focntionne désormais
2 years ago
Nicolas MAYE a8d240dc6e creation des vues windows inscription , dashboard, opération et planification + navigation
continuous-integration/drone/push Build is passing Details
2 years ago
Lucas EVARD ef18ad6a88 Mise à jour de 'Dockerfile'
continuous-integration/drone/push Build is passing Details
2 years ago
Lucas EVARD 35ef3d3a7d Mise à jour de 'Dockerfile'
continuous-integration/drone/push Build is failing Details
2 years ago
Lucas EVARD c72a79ae54 Mise à jour de 'Dockerfile'
continuous-integration/drone/push Build is failing Details
2 years ago
Lucas EVARD b8a9eaf567 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is failing Details
2 years ago
Lucas EVARD 1731e4d558 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is failing Details
2 years ago
Lucas EVARD 7b2448a646 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is failing Details
2 years ago
Lucas EVARD 271d5ba630 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is failing Details
2 years ago
Lucas EVARD 23ef83b8e9 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is failing Details
2 years ago
Lucas EVARD e07290cd63 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build was killed Details
2 years ago
Lucas EVARD 311a7a603f Mise à jour de '.drone.yml'
continuous-integration/drone/push Build was killed Details
2 years ago
Lucas EVARD 896eaf6035 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is failing Details
2 years ago
Lucas EVARD 72f1d8fa14 Mise à jour de '.drone.yml'
2 years ago
Lucas EVARD 4c268995ad Mise à jour de '.drone.yml'
continuous-integration/drone/push Build was killed Details
2 years ago
Lucas EVARD 94ac0bf95d Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is failing Details
2 years ago
Lucas EVARD 901ebe3c04 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build was killed Details
2 years ago
Lucas EVARD 9afdb0bd76 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is failing Details
2 years ago
Lucas EVARD e3d701b8b4 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is failing Details
2 years ago
Lucas EVARD 03c969077f Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is failing Details
2 years ago
Lucas EVARD f45f252c52 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is failing Details
2 years ago
Lucas EVARD 3002f215c1 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build was killed Details
2 years ago
Lucas EVARD 3f39b3e1c2 Mise à jour de '.drone.yml'
2 years ago
Lucas EVARD 709124b730 Mise à jour de '.drone.yml'
2 years ago
Lucas EVARD e748392be9 Mise à jour de 'Dockerfile'
continuous-integration/drone/push Build is failing Details
2 years ago
Lucas EVARD f0bb87593f Mise à jour de 'Dockerfile'
continuous-integration/drone/push Build is failing Details
2 years ago
Lucas EVARD 7aa281ae21 Mise à jour de 'Dockerfile'
continuous-integration/drone/push Build is failing Details
2 years ago
Lucas EVARD 6a9fa57b7f Mise à jour de 'Dockerfile'
continuous-integration/drone/push Build is failing Details
2 years ago
Lucas EVARD 7f5bbb06ba Mise à jour de 'Dockerfile'
continuous-integration/drone/push Build is failing Details
2 years ago
Lucas EVARD b9486895e0 Mise à jour de 'Dockerfile'
continuous-integration/drone/push Build was killed Details
2 years ago
Lucas EVARD 4c7f9391d0 Mise à jour de 'Dockerfile'
continuous-integration/drone/push Build is failing Details
2 years ago
Lucas EVARD c017c76958 Mise à jour de 'Dockerfile'
continuous-integration/drone/push Build was killed Details
2 years ago
Lucas EVARD 6a18ef22a2 Mise à jour de 'Dockerfile'
continuous-integration/drone/push Build is failing Details
2 years ago
Lucas EVARD 07f46b5dfb Mise à jour de 'Dockerfile'
continuous-integration/drone/push Build was killed Details
2 years ago
Lucas EVARD 3d5eccb6c1 Mise à jour de 'Dockerfile'
continuous-integration/drone/push Build is failing Details
2 years ago
Lucas EVARD b108356b16 Mise à jour de 'Dockerfile'
continuous-integration/drone/push Build is failing Details
2 years ago
Lucas EVARD 345f6c8314 Mise à jour de 'Dockerfile'
continuous-integration/drone/push Build is failing Details
2 years ago
Lucas EVARD e36abf4079 Mise à jour de 'Dockerfile'
continuous-integration/drone/push Build is failing Details
2 years ago
Lucas EVARD 9b64f67fe5 Mise à jour de 'Dockerfile'
continuous-integration/drone/push Build was killed Details
2 years ago
Lucas EVARD 081cd9554c Mise à jour de 'Dockerfile'
continuous-integration/drone/push Build is failing Details
2 years ago
Lucas EVARD 53e00fdfb2 Mise à jour de 'Dockerfile'
continuous-integration/drone/push Build is failing Details
2 years ago
Lucas EVARD 29027efbef Mise à jour de 'Dockerfile'
continuous-integration/drone/push Build is failing Details
2 years ago
Lucas EVARD 7b7f0164a8 Mise à jour de 'Dockerfile'
continuous-integration/drone/push Build is failing Details
2 years ago
Lucas EVARD ce7d6b27ec Mise à jour de '.drone.yml'
continuous-integration/drone/push Build was killed Details
2 years ago
Lucas EVARD 92f88b1965 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is failing Details
2 years ago
Lucas EVARD e22ef96cfd Mise à jour de '.drone.yml'
continuous-integration/drone/push Build was killed Details
2 years ago
Lucas EVARD 28d5adf5ee Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is failing Details
2 years ago
Lucas EVARD d7becf1096 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build encountered an error Details
2 years ago
Lucas EVARD 6eedeb0c5f Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is failing Details
2 years ago
Vincent ASTOLFI 47c3e1717d Merge branch 'API' of https://codefirst.iut.uca.fr/git/ConsEcoTeam/ConsEco into API
continuous-integration/drone/push Build is passing Details
2 years ago
Vincent ASTOLFI c0d04bf57b ajout du .htaccess pour rediriger les demandes de route
2 years ago
Lucas EVARD 8caad87953 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is passing Details
2 years ago
Lucas EVARD a66287d01f Mise à jour de '.drone.yml'
2 years ago
Lucas EVARD d00c09be2e Mise à jour de '.drone.yml'
2 years ago
Vincent ASTOLFI fd459d3e19 test des routes
continuous-integration/drone/push Build is passing Details
2 years ago
Vincent ASTOLFI 1960020877 test des routes
continuous-integration/drone/push Build is passing Details
2 years ago
Vincent ASTOLFI f758b09cd6 correction de l'autoloader
continuous-integration/drone/push Build is passing Details
2 years ago
Vincent ASTOLFI ad10e2351c correction de l'autoloader
continuous-integration/drone/push Build is passing Details
2 years ago
Vincent ASTOLFI 0751a60d18 correction de l'autoloader
continuous-integration/drone/push Build is passing Details
2 years ago
Vincent ASTOLFI f5598ce94f ajout de l'AltoRouteur
continuous-integration/drone/push Build is passing Details
2 years ago
Vincent ASTOLFI 7f15ec418b Merge branch 'API' of https://codefirst.iut.uca.fr/git/ConsEcoTeam/ConsEco into API
continuous-integration/drone/push Build is passing Details
2 years ago
Vincent ASTOLFI 584f87a2aa ajout de l'AltoRouteur
2 years ago
Lucas EVARD a95557ad34 Transférer les fichiers vers 'Sources/Data'
continuous-integration/drone/push Build is passing Details
2 years ago
Vincent ASTOLFI 352920f5e1 premier test de route
continuous-integration/drone/push Build is passing Details
2 years ago
Vincent ASTOLFI eff76fb7b4 Merge branch 'API' of https://codefirst.iut.uca.fr/git/ConsEcoTeam/ConsEco into API
continuous-integration/drone/push Build is passing Details
2 years ago
Vincent ASTOLFI 9f0ca4ba9f changement de l'index.php
2 years ago
Vincent ASTOLFI 8d9e015778 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is passing Details
2 years ago
Vincent ASTOLFI 19f6b56233 ajout des fichiers nécessaire
continuous-integration/drone/push Build is passing Details
2 years ago
Lucas EVARD ca995af681 Ajout SQL dans le dossier Data
2 years ago
Vincent ASTOLFI 792e42f27b Mise à jour de 'Dockerfile'
continuous-integration/drone/push Build is passing Details
2 years ago
Hugo LIVET f0cbf3f759 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is passing Details
2 years ago
Vincent ASTOLFI e12ab62220 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build was killed Details
2 years ago
Vincent ASTOLFI 6b1c0ea5b8 Mise à jour de 'Dockerfile'
continuous-integration/drone/push Build is failing Details
2 years ago
Vincent ASTOLFI f631fc9159 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is failing Details
2 years ago
Vincent ASTOLFI 2d0a40806f Mise à jour de '.drone.yml'
continuous-integration/drone/push Build encountered an error Details
2 years ago
Vincent ASTOLFI 2014ad6145 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build encountered an error Details
2 years ago
Vincent ASTOLFI bdaeffb047 Mise à jour de '.drone.yml'
2 years ago
Vincent ASTOLFI 4acfb92431 création du premier fichier de php et test de la branche
continuous-integration/drone/push Build is passing Details
2 years ago
Hugo LIVET c464449aa9 Mise à jour de 'README.md'
continuous-integration/drone/push Build is passing Details
2 years ago
Hugo LIVET 7cabd7d9f8 Patch Fusion view
continuous-integration/drone/push Build is passing Details
2 years ago
Hugo LIVET c8a17b0042 Fusion de la séparation des vues Mobile et Desktop
continuous-integration/drone/push Build is passing Details
2 years ago
Hugo LIVET 121998e394 Patch Images
continuous-integration/drone/push Build is passing Details
2 years ago
Hugo LIVET 81201329d3 Modif patch pour que ce soit mieux
continuous-integration/drone/push Build is passing Details
2 years ago
Hugo LIVET c930afdf9c Corection de la sépatation afin de coriger la navigation
continuous-integration/drone/push Build is passing Details
2 years ago
Nicolas MAYE 52a134be86 Mise en place de la séparation des vue desktop et mobile + main page windows + réorganisation des dossier
continuous-integration/drone/push Build is passing Details
2 years ago
Nicolas MAYE 9b77b36c32 inedexation
2 years ago
Lucas EVARD 6513dd0ad4 Fusion et gestion des conflits
continuous-integration/drone/push Build is passing Details
2 years ago
Lucas EVARD 845c42ebfc Selection banque
2 years ago
Vincent ASTOLFI d4de3b9a20 premier ajout de la page opérations
continuous-integration/drone/push Build is passing Details
2 years ago
Hugo LIVET 671aecfcab PatchBugetWarns
continuous-integration/drone/push Build is passing Details
2 years ago
Vincent ASTOLFI b0fed8ff57 Merge pull request 'Dashboard' (#113) from Dashboard into master
continuous-integration/drone/push Build is passing Details
2 years ago
Hugo LIVET f23ce25456 Correction Classe Compte
continuous-integration/drone/push Build is passing Details
2 years ago
Hugo LIVET 6a83ae33bc Patch CI
continuous-integration/drone/push Build is passing Details
2 years ago
Hugo LIVET 49702f9d53 Ajout du deserializer en OFX
continuous-integration/drone/push Build is failing Details
2 years ago
Lucas EVARD 708400876c Modification tests unitaires
continuous-integration/drone/push Build is passing Details
2 years ago
Lucas EVARD 502335e9a8 modification classe pour accueillir le format OFX
continuous-integration/drone/push Build is failing Details
2 years ago
Lucas EVARD eeb0e5b4e2 push de branche et ajout bouton selection de banque
continuous-integration/drone/push Build is passing Details
2 years ago
Lucas EVARD 5ddc3b66f5 Merge branch 'master' of https://codefirst.iut.uca.fr/git/hugo.livet/ConsEco
2 years ago
Lucas EVARD 0c0ef2118b Bug retour lors de la déconnexion résolu
2 years ago
Hugo LIVET 725df65f5a Début de Dashboard sans le chargement depuis le CSV
continuous-integration/drone/push Build is passing Details
2 years ago
Lucas EVARD 14e039f81d Merge pull request 'changement du fonctionnement de l'envoie d'email de confirmation lors du changement de mot de passe afin que l'on ne puisse plus spam l'envoie de mail et ainsi éviter les bugs' (#107) from bug_multi_mail into master
continuous-integration/drone/push Build is passing Details
2 years ago
Vincent ASTOLFI 3d4b413029 changement du fonctionnement de l'envoie d'email de confirmation lors du changement de mot de passe afin que l'on ne puisse plus spam l'envoie de mail et ainsi éviter les bugs
continuous-integration/drone/push Build is passing Details
2 years ago
Nicolas MAYE 131218b1be branche
continuous-integration/drone/push Build is passing Details
2 years ago
Lucas EVARD 0d16419114 Ajout d'un bouton de déconnexion dans les paramétres
continuous-integration/drone/push Build is passing Details
2 years ago
Hugo LIVET 4a911ea421 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is passing Details
2 years ago
Hugo LIVET 9768f391cd Fusion WPF -> MAUI
continuous-integration/drone/push Build is failing Details
2 years ago
Hugo LIVET 2007cb00d7 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is passing Details
2 years ago
Hugo LIVET 536d533f7e Transfert du dépot ConsEcoMAUI -> ConsEco (Tout le groupe a participé au dépot ConsEcoMAUI)
continuous-integration/drone/push Build is failing Details
2 years ago
Hugo LIVET ff33c3c370 Merge pull request 'Navigator sur Master' (#93) from Navigator into master
continuous-integration/drone/push Build is passing Details
2 years ago
Hugo LIVET 132e81f6e6 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is passing Details
2 years ago
Hugo LIVET 18d62446a3 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is failing Details
2 years ago
Hugo LIVET 00be0590eb Ajout de sonnar
continuous-integration/drone/push Build is failing Details
2 years ago
Vincent ASTOLFI d0dc886e2a Mise à jour de 'README.md'
continuous-integration/drone/push Build is passing Details
2 years ago
Vincent ASTOLFI 5b5fb942e5 Mise à jour de 'README.md'
continuous-integration/drone/push Build is passing Details
2 years ago
Vincent ASTOLFI e4b3baf2c1 Mise à jour de 'README.md'
continuous-integration/drone/push Build is passing Details
2 years ago
Vincent ASTOLFI ad36591591 Mise à jour de 'README.md'
continuous-integration/drone/push Build is passing Details
2 years ago
Vincent ASTOLFI a71c83dc0d Mise à jour de 'README.md'
continuous-integration/drone/push Build is passing Details
2 years ago
Vincent ASTOLFI 99744488a1 Transférer les fichiers vers 'Documentation_En_Cours'
continuous-integration/drone/push Build is passing Details
2 years ago
Vincent ASTOLFI f061fbb871 Supprimer 'Documentation_En_Cours/logo avec fond.png'
continuous-integration/drone/push Build is passing Details
2 years ago
Vincent ASTOLFI 81444cee0b Transférer les fichiers vers 'Documentation_En_Cours'
continuous-integration/drone/push Build is passing Details
2 years ago
Vincent ASTOLFI a59003bd5a Supprimer 'Documentation_En_Cours/logo avec fond.png'
continuous-integration/drone/push Build is passing Details
2 years ago
Vincent ASTOLFI c7c633157d Transférer les fichiers vers 'Documentation_En_Cours'
continuous-integration/drone/push Build is passing Details
2 years ago
Vincent ASTOLFI f11aa65f6d Mise à jour de 'README.md'
continuous-integration/drone/push Build is passing Details
2 years ago
Vincent ASTOLFI 0a2c876cd0 Transférer les fichiers vers 'Documentation_En_Cours'
continuous-integration/drone/push Build is passing Details
2 years ago
Vincent ASTOLFI eed5e02f42 Mise à jour de 'README.md'
continuous-integration/drone/push Build is passing Details
2 years ago
Vincent ASTOLFI 8baf662f57 Mise à jour de 'README.md'
continuous-integration/drone/push Build is passing Details
2 years ago
Vincent ASTOLFI cd8c995691 Mise à jour de 'README.md'
continuous-integration/drone/push Build is passing Details
2 years ago
Hugo LIVET f3b5932f4d Ajout du status de build
continuous-integration/drone/push Build is passing Details
2 years ago
Hugo LIVET 87882e8e57 Déactivation de dokerfile
continuous-integration/drone/push Build is passing Details
2 years ago
Hugo LIVET 496e6f588d Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is failing Details
2 years ago
Hugo LIVET aee1f038cc Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is passing Details
2 years ago
Hugo LIVET 64e71fe16c Mise à jour de 'Dockerfile'
continuous-integration/drone/push Build is failing Details
2 years ago
Hugo LIVET 166fb545cc Ajout docker
continuous-integration/drone/push Build is failing Details
2 years ago
Hugo LIVET 3245fe1308 Sonar
continuous-integration/drone/push Build is failing Details
2 years ago
Hugo LIVET 715ba476f6 Dokerfile
continuous-integration/drone/push Build is failing Details
2 years ago
Hugo LIVET df36f0e430 Avec Docker
continuous-integration/drone/push Build is failing Details
2 years ago
Hugo LIVET 9033e0c734 Tentative de correction de drone avec sonar
continuous-integration/drone/push Build is failing Details
2 years ago
Hugo LIVET 6e48ad3198 Test d'ajout de Sonar
continuous-integration/drone/push Build is failing Details
2 years ago
Raphael LACOTE 0e3858154f Correction branche
continuous-integration/drone/push Build is passing Details
2 years ago
Raphael LACOTE 129d4c22e7 Création de la classe inscrit et de l'énumeration devise
2 years ago
Raphael LACOTE 24a2851283 Création de l'énumeration Devises et de la classe Inscrit
2 years ago
Vincent ASTOLFI 4343420805 Transférer les fichiers vers 'Documentation_En_Cours'
continuous-integration/drone/push Build is passing Details
2 years ago
Nicolas MAYE 0f63e91306 Modification de la description des cas d'utilisation (il est desormais fini)
continuous-integration/drone/push Build is passing Details
2 years ago
Nicolas MAYE 54a39123d2 diagramme user cases fini
continuous-integration/drone/push Build is passing Details
2 years ago
Nicolas MAYE ad0c7cc294 modification du diagramme user case
continuous-integration/drone/push Build is passing Details
2 years ago
Nicolas MAYE d391787eb1 modification diagramme cas d'utilisation
2 years ago

@ -1,6 +1,6 @@
kind: pipeline
type: docker
name: CI_CONSECO
name: CI_CONSECO_MAUI
trigger :
event:
@ -10,27 +10,33 @@ steps:
- name: build
image: mcr.microsoft.com/dotnet/sdk:6.0
commands:
- cd Code
- dotnet restore CI_CONSECO.sln
- dotnet build CI_CONSECO.sln -c Release --no-restore
- dotnet publish CI_CONSECO.sln -c Release --no-restore -o CI_PROJECT_DIR/build/release
- dotnet add package Newtonsoft.Json
- cd Sources
- dotnet workload restore
- dotnet restore CI_MAUI.sln
- dotnet build CI_MAUI.sln -c Release --no-restore
- dotnet publish CI_MAUI.sln -c Release --no-restore -o CI_PROJECT_DIR/build/release
- name: tests
image: mcr.microsoft.com/dotnet/sdk:6.0
commands:
- cd Code
- dotnet restore CI_CONSECO.sln
- dotnet test CI_CONSECO.sln --no-restore
- cd Sources
- dotnet restore CI_MAUI.sln
- dotnet test CI_MAUI.sln --no-restore
depends_on: [build]
- name: code-analysis
image: hub.codefirst.iut.uca.fr/thomas.bellembois/codefirst-dronesonarplugin-dotnet6
commands:
- cd Code/
- dotnet restore CI_CONSECO.sln
- dotnet add package Newtonsoft.Json
- cd Sources/
- dotnet workload restore
- dotnet restore CI_MAUI.sln
- dotnet sonarscanner begin /k:ConsEco /d:sonar.host.url=$${PLUGIN_SONAR_HOST} /d:sonar.coverageReportPaths="coveragereport/SonarQube.xml" /d:sonar.coverage.exclusions="Tests/**" /d:sonar.login=$${PLUGIN_SONAR_TOKEN}
- dotnet build CI_CONSECO.sln -c Release --no-restore
- dotnet test CI_CONSECO.sln --logger trx --no-restore /p:CollectCoverage=true /p:CoverletOutputFormat=cobertura --collect "XPlat Code Coverage"
- dotnet build CI_MAUI.sln -c Release --no-restore
- dotnet test CI_MAUI.sln --logger trx --no-restore /p:CollectCoverage=true /p:CoverletOutputFormat=cobertura --collect "XPlat Code Coverage"
- reportgenerator -reports:"**/coverage.cobertura.xml" -reporttypes:SonarQube -targetdir:"coveragereport"
- dotnet publish CI_CONSECO.sln -c Release --no-restore -o CI_PROJECT_DIR/build/release
- dotnet publish CI_MAUI.sln -c Release --no-restore -o CI_PROJECT_DIR/build/release
- dotnet sonarscanner end /d:sonar.login=$${PLUGIN_SONAR_TOKEN}
secrets: [ SECRET_SONAR_LOGIN ]
settings:
@ -41,3 +47,51 @@ steps:
from_secret: SECRET_SONAR_LOGIN
depends_on: [tests]
- name: deploy-container-mysql
image: hub.codefirst.iut.uca.fr/thomas.bellembois/codefirst-dockerproxy-clientdrone:latest
environment:
IMAGENAME: mariadb:latest
CONTAINERNAME: mariadb
COMMAND: create
OVERWRITE: true
PRIVATE: false
CODEFIRST_CLIENTDRONE_ENV_MARIADB_ROOT_PASSWORD:
from_secret: db_root_password
CODEFIRST_CLIENTDRONE_ENV_MARIADB_DATABASE:
from_secret: db_database
CODEFIRST_CLIENTDRONE_ENV_MARIADB_USER:
from_secret: db_user
CODEFIRST_CLIENTDRONE_ENV_MARIADB_PASSWORD:
from_secret: db_password
- name: web-API
image: plugins/docker
settings:
dockerfile: ./Dockerfile
context: ./
registry: hub.codefirst.iut.uca.fr
repo: hub.codefirst.iut.uca.fr/vincent.astolfi/conseco
username:
from_secret: secret-registry-username
password:
from_secret: secret-registry-password
- name: deploy-web-container
image: hub.codefirst.iut.uca.fr/thomas.bellembois/codefirst-dockerproxy-clientdrone:latest
environment:
IMAGENAME: hub.codefirst.iut.uca.fr/vincent.astolfi/conseco:latest
CONTAINERNAME: conseco
COMMAND: create
OVERWRITE: true
CODEFIRST_CLIENTDRONE_ENV_DB_SERVER:
from_secret: db_server
CODEFIRST_CLIENTDRONE_ENV_MARIADB_ROOT_PASSWORD:
from_secret: db_root_password
CODEFIRST_CLIENTDRONE_ENV_MARIADB_DATABASE:
from_secret: db_database
CODEFIRST_CLIENTDRONE_ENV_MARIADB_USER:
from_secret: db_user
CODEFIRST_CLIENTDRONE_ENV_MARIADB_PASSWORD:
from_secret: db_password
depends_on: [ web-API, deploy-container-mysql ]

400
Code/.gitignore vendored

@ -1,400 +0,0 @@
# ---> VisualStudio
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore
# User-specific files
*.rsuser
*.suo
*.user
*.userosscache
*.sln.docstates
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
# Mono auto generated files
mono_crash.*
# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
[Ww][Ii][Nn]32/
[Aa][Rr][Mm]/
[Aa][Rr][Mm]64/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/
[Ll]ogs/
# Visual Studio 2015/2017 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/
# Visual Studio 2017 auto generated files
Generated\ Files/
# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
# NUnit
*.VisualState.xml
TestResult.xml
nunit-*.xml
# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c
# Benchmark Results
BenchmarkDotNet.Artifacts/
# .NET Core
project.lock.json
project.fragment.lock.json
artifacts/
# ASP.NET Scaffolding
ScaffoldingReadMe.txt
# StyleCop
StyleCopReport.xml
# Files built by Visual Studio
*_i.c
*_p.c
*_h.h
*.ilk
*.meta
*.obj
*.iobj
*.pch
*.pdb
*.ipdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*_wpftmp.csproj
*.log
*.tlog
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc
# Chutzpah Test files
_Chutzpah*
# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb
# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap
# Visual Studio Trace Files
*.e2e
# TFS 2012 Local Workspace
$tf/
# Guidance Automation Toolkit
*.gpState
# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user
# TeamCity is a build add-in
_TeamCity*
# DotCover is a Code Coverage Tool
*.dotCover
# AxoCover is a Code Coverage Tool
.axoCover/*
!.axoCover/settings.json
# Coverlet is a free, cross platform Code Coverage Tool
coverage*.json
coverage*.xml
coverage*.info
# Visual Studio code coverage results
*.coverage
*.coveragexml
# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*
# MightyMoose
*.mm.*
AutoTest.Net/
# Web workbench (sass)
.sass-cache/
# Installshield output folder
[Ee]xpress/
# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html
# Click-Once directory
publish/
# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# Note: Comment the next line if you want to checkin your web deploy settings,
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj
# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/
# NuGet Packages
*.nupkg
# NuGet Symbol Packages
*.snupkg
# The packages folder can be ignored because of Package Restore
**/[Pp]ackages/*
# except build/, which is used as an MSBuild target.
!**/[Pp]ackages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/[Pp]ackages/repositories.config
# NuGet v3's project.json files produces more ignorable files
*.nuget.props
*.nuget.targets
# Microsoft Azure Build Output
csx/
*.build.csdef
# Microsoft Azure Emulator
ecf/
rcf/
# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt
*.appx
*.appxbundle
*.appxupload
# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!?*.[Cc]ache/
# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.jfm
*.pfx
*.publishsettings
orleans.codegen.cs
# Including strong name files can present a security risk
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
#*.snk
# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/
# RIA/Silverlight projects
Generated_Code/
# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
ServiceFabricBackup/
*.rptproj.bak
# SQL Server files
*.mdf
*.ldf
*.ndf
# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
*.rptproj.rsuser
*- [Bb]ackup.rdl
*- [Bb]ackup ([0-9]).rdl
*- [Bb]ackup ([0-9][0-9]).rdl
# Microsoft Fakes
FakesAssemblies/
# GhostDoc plugin setting file
*.GhostDoc.xml
# Node.js Tools for Visual Studio
.ntvs_analysis.dat
node_modules/
# Visual Studio 6 build log
*.plg
# Visual Studio 6 workspace options file
*.opt
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
*.vbw
# Visual Studio 6 auto-generated project file (contains which files were open etc.)
*.vbp
# Visual Studio 6 workspace and project file (working project files containing files to include in project)
*.dsw
*.dsp
# Visual Studio 6 technical files
*.ncb
*.aps
# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions
# Paket dependency manager
.paket/paket.exe
paket-files/
# FAKE - F# Make
.fake/
# CodeRush personal settings
.cr/personal
# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc
# Cake - Uncomment if you are using it
# tools/**
# !tools/packages.config
# Tabs Studio
*.tss
# Telerik's JustMock configuration file
*.jmconfig
# BizTalk build output
*.btp.cs
*.btm.cs
*.odx.cs
*.xsd.cs
# OpenCover UI analysis results
OpenCover/
# Azure Stream Analytics local run output
ASALocalRun/
# MSBuild Binary and Structured Log
*.binlog
# NVidia Nsight GPU debugger configuration file
*.nvuser
# MFractors (Xamarin productivity tool) working folder
.mfractor/
# Local History for Visual Studio
.localhistory/
# Visual Studio History (VSHistory) files
.vshistory/
# BeatPulse healthcheck temp database
healthchecksdb
# Backup folder for Package Reference Convert tool in Visual Studio 2017
MigrationBackup/
# Ionide (cross platform F# VS Code tools) working folder
.ionide/
# Fody - auto-generated XML schema
FodyWeavers.xsd
# VS Code files for those working on multiple tools
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
*.code-workspace
# Local History for Visual Studio Code
.history/
# Windows Installer files from build outputs
*.cab
*.msi
*.msix
*.msm
*.msp
# JetBrains Rider
*.sln.iml

@ -1,37 +0,0 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.2.32616.157
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Model", "Model\Model.csproj", "{ACFA83F8-98C8-43AE-9328-B3F751098FFA}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestFonctionnel", "TestFonctionnel\TestFonctionnel.csproj", "{7AC4F84F-1124-4EC1-BF38-17F3F4FBEB3E}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestsUnitaires", "TestsUnitaires\TestsUnitaires.csproj", "{B1AE713C-B5DE-4E81-A33F-818AAD0548A7}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{ACFA83F8-98C8-43AE-9328-B3F751098FFA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{ACFA83F8-98C8-43AE-9328-B3F751098FFA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{ACFA83F8-98C8-43AE-9328-B3F751098FFA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{ACFA83F8-98C8-43AE-9328-B3F751098FFA}.Release|Any CPU.Build.0 = Release|Any CPU
{7AC4F84F-1124-4EC1-BF38-17F3F4FBEB3E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7AC4F84F-1124-4EC1-BF38-17F3F4FBEB3E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7AC4F84F-1124-4EC1-BF38-17F3F4FBEB3E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7AC4F84F-1124-4EC1-BF38-17F3F4FBEB3E}.Release|Any CPU.Build.0 = Release|Any CPU
{B1AE713C-B5DE-4E81-A33F-818AAD0548A7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B1AE713C-B5DE-4E81-A33F-818AAD0548A7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B1AE713C-B5DE-4E81-A33F-818AAD0548A7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B1AE713C-B5DE-4E81-A33F-818AAD0548A7}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {997F299E-EAB1-4F11-AC37-BCC0B7D63CA4}
EndGlobalSection
EndGlobal

@ -1,43 +0,0 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.2.32616.157
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IHM", "IHM\IHM.csproj", "{355FC972-9C0D-4CBD-8003-EFBDACA7CFFF}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Model", "Model\Model.csproj", "{ACFA83F8-98C8-43AE-9328-B3F751098FFA}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestFonctionnel", "TestFonctionnel\TestFonctionnel.csproj", "{7AC4F84F-1124-4EC1-BF38-17F3F4FBEB3E}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestsUnitaires", "TestsUnitaires\TestsUnitaires.csproj", "{B1AE713C-B5DE-4E81-A33F-818AAD0548A7}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{355FC972-9C0D-4CBD-8003-EFBDACA7CFFF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{355FC972-9C0D-4CBD-8003-EFBDACA7CFFF}.Debug|Any CPU.Build.0 = Debug|Any CPU
{355FC972-9C0D-4CBD-8003-EFBDACA7CFFF}.Release|Any CPU.ActiveCfg = Release|Any CPU
{355FC972-9C0D-4CBD-8003-EFBDACA7CFFF}.Release|Any CPU.Build.0 = Release|Any CPU
{ACFA83F8-98C8-43AE-9328-B3F751098FFA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{ACFA83F8-98C8-43AE-9328-B3F751098FFA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{ACFA83F8-98C8-43AE-9328-B3F751098FFA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{ACFA83F8-98C8-43AE-9328-B3F751098FFA}.Release|Any CPU.Build.0 = Release|Any CPU
{7AC4F84F-1124-4EC1-BF38-17F3F4FBEB3E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7AC4F84F-1124-4EC1-BF38-17F3F4FBEB3E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7AC4F84F-1124-4EC1-BF38-17F3F4FBEB3E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7AC4F84F-1124-4EC1-BF38-17F3F4FBEB3E}.Release|Any CPU.Build.0 = Release|Any CPU
{B1AE713C-B5DE-4E81-A33F-818AAD0548A7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B1AE713C-B5DE-4E81-A33F-818AAD0548A7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B1AE713C-B5DE-4E81-A33F-818AAD0548A7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B1AE713C-B5DE-4E81-A33F-818AAD0548A7}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {997F299E-EAB1-4F11-AC37-BCC0B7D63CA4}
EndGlobalSection
EndGlobal

@ -1,165 +0,0 @@
<Application x:Class="IHM.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:IHM"
xmlns:conv="clr-namespace:IHM.Converters"
StartupUri="MainWindow.xaml">
<Application.Resources>
<conv:Func2WindowPartConverter x:Key="Func2WpConv"/>
<Style x:Key="BorderRessource" TargetType="Border">
<Setter Property="BorderBrush" Value="#63A4FF"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="Margin" Value="20"/>
<Setter Property="CornerRadius" Value="5"/>
<Setter Property="Height" Value="30"/>
<Setter Property="Width" Value="175"/>
</Style>
<Style TargetType="UserControl" x:Key="ImageFondRessource">
<Setter Property="Background">
<Setter.Value>
<VisualBrush>
<VisualBrush.Visual>
<Image Source="./images/fond.jpg">
<Image.Effect>
<BlurEffect Radius="0"/>
</Image.Effect>
</Image>
</VisualBrush.Visual>
</VisualBrush>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="TextBlockRessource" TargetType="TextBlock">
<Setter Property="HorizontalAlignment" Value="Center"/>
<Setter Property="VerticalAlignment" Value="Center"/>
</Style>
<Style x:Key="TitreDePage" TargetType="TextBlock">
<Setter Property="HorizontalAlignment" Value="Center"/>
<Setter Property="FontFamily" Value="Slab serif"/>
<Setter Property="FontSize" Value="30"/>
<Setter Property="FontWeight" Value="Bold"/>
<Setter Property="DockPanel.Dock" Value="Top"/>
<Setter Property="Foreground" Value="White"/>
<Setter Property="Margin" Value="20"/>
</Style>
<Style TargetType="Button" x:Key="TransparentButtonRessource">
<Setter Property="Background" Value="Transparent" />
<Setter Property="TextBlock.TextAlignment" Value="Center" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border CornerRadius="5" Background="Transparent" BorderBrush="#63A4FF" BorderThickness="1" >
<ContentPresenter x:Name="contentPresenter" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="GreenButtonRessource" TargetType="Button">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border CornerRadius="5" BorderBrush="#63A4FF" BorderThickness="1" >
<Border.Background>
<LinearGradientBrush>
<GradientStop Color="#80FF72" Offset="0"/>
<GradientStop Color="#7EE8FA" Offset="1"/>
</LinearGradientBrush>
</Border.Background>
<ContentPresenter x:Name="contentPresenter" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Setter Property="HorizontalAlignment" Value="Center"/>
<Setter Property="VerticalAlignment" Value="Center"/>
<Setter Property="Padding" Value="10"/>
<Setter Property="Margin" Value="60,0,0,0"/>
<Setter Property="Height" Value="25"/>
<Setter Property="Width" Value="200"/>
</Style>
<Style x:Key="OrangeButtonRessource" TargetType="Button">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border CornerRadius="5" BorderBrush="#63A4FF" BorderThickness="1" >
<Border.Background>
<LinearGradientBrush>
<GradientStop Color="#FBD72B" Offset="0"/>
<GradientStop Color="#F9484A" Offset="1"/>
</LinearGradientBrush>
</Border.Background>
<ContentPresenter x:Name="contentPresenter" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Setter Property="HorizontalAlignment" Value="Center"/>
<Setter Property="VerticalAlignment" Value="Center"/>
</Style>
<SolidColorBrush x:Key="CouleurPrincipale" Color="#23395d"/>
<SolidColorBrush x:Key="CouleurBouton" Color="#99425d"/>
<Style x:Key="BoutonMain" TargetType="Button">
<Setter Property="Height" Value="40"/>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="Margin" Value="10,10,10,10" />
<Setter Property="FontSize" Value="16"/>
<Setter Property="Foreground" Value="White"/>
<Setter Property="Background" Value="{StaticResource CouleurBouton}"/>
<Style.Resources>
<Style TargetType="Border">
<Setter Property="CornerRadius" Value="20,20,20,20"/>
</Style>
</Style.Resources>
<Style.Triggers>
<Trigger Property="IsDefault" Value="True">
<Setter Property="Background" Value="Black"/>
<Trigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<ColorAnimation Duration="0:0:0.5" Storyboard.TargetProperty="(Button.Background).(SolidColorBrush.Color)" To="#23395d"/>
</Storyboard>
</BeginStoryboard>
</Trigger.EnterActions>
</Trigger>
<Trigger Property ="IsMouseOver" Value="True">
<Setter Property= "Opacity" Value="0.3"/>
</Trigger>
</Style.Triggers>
</Style>
</Application.Resources>
</Application>

@ -1,22 +0,0 @@
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
namespace IHM
{
/// <summary>
/// Interaction logic for App.xaml
/// </summary>
public partial class App : Application
{
public Navigator Navigator { get; private set; } = new Navigator();
}
}

@ -1,10 +0,0 @@
using System.Windows;
[assembly: ThemeInfo(
ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located
//(used if a resource is not found in the page,
// or application resource dictionaries)
ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located
//(used if a resource is not found in the page,
// app, or any theme specific resource dictionaries)
)]

@ -1,28 +0,0 @@
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Controls;
using System.Windows.Data;
namespace IHM.Converters
{
public class Func2WindowPartConverter : IValueConverter
{
public object? Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
Func<UserControl>? windowPartCreator = value as Func<UserControl>;
if (windowPartCreator == null)
{
return null;
}
return windowPartCreator();
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
}

@ -1,28 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net6.0-windows</TargetFramework>
<Nullable>enable</Nullable>
<UseWPF>true</UseWPF>
</PropertyGroup>
<ItemGroup>
<None Remove="images\fond.jpg" />
<None Remove="images\fond2.png" />
<None Remove="images\logo.png" />
</ItemGroup>
<ItemGroup>
<Content Include="images\fond.jpg">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="images\fond2.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="images\logo.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
</Project>

@ -1,38 +0,0 @@
<Window x:Class="IHM.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:IHM"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.30*"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="0" Background="{StaticResource CouleurPrincipale}">
<Image Source="images/logo.png" Margin="10" Grid.Column="0" Grid.Row="0" Width="75"/>
<Button Click="Button_Click_TableauDeBord" Content="Tableau de bord" Style="{StaticResource BoutonMain}" IsDefault="True"/>
<Button Click="Button_Click_Compte" Content="Compte" Style="{StaticResource BoutonMain}"/>
<Button Click="Button_Click_Operation" Content="Opérations" Style="{StaticResource BoutonMain}"/>
<Button Click="Button_Click_Echeancier" Content="Echéancier" Style="{StaticResource BoutonMain}"/>
<Button Click="Button_Click_Planification" Content="Planification" Style="{StaticResource BoutonMain}"/>
</StackPanel>
<ContentControl x:Name="contentControl"
DataContext="{Binding Nav}"
Content="{Binding SelectedUserControlCreator.Value,Converter={StaticResource Func2WpConv}}"
Grid.Column="1" Grid.Row="1"/>
</Grid>
</Window>

@ -1,128 +0,0 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace IHM
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public Navigator Nav => (App.Current as App).Navigator;
public MainWindow()
{
InitializeComponent();
DataContext = this;
}
public void ChangerStyleBtn(Button btn)
{
StackPanel sp = (StackPanel)btn.Parent;
if (sp == null) return;
UIElementCollection UIEC = sp.Children;
if (UIEC == null) return;
foreach (UIElement obj in UIEC)
{
if (obj as Button != null)
{
(obj as Button).IsDefault = false;
}
}
btn.IsDefault = true;
}
private void Button_Click_TableauDeBord(object sender, RoutedEventArgs e)
{
Button btn = (Button)sender;
if (btn == null) return;
if (btn.IsDefault == false)
{
Nav.NavigateTo(Navigator.PART_TABLEAU_DE_BORD);
ChangerStyleBtn(btn);
}
else return;
}
private void Button_Click_Compte(object sender, RoutedEventArgs e)
{
Button btn = (Button)sender;
if (btn == null) return;
if (btn.IsDefault == false)
{
Nav.NavigateTo(Navigator.PART_COMPTE);
ChangerStyleBtn(btn);
}
else return;
}
private void Button_Click_Operation(object sender, RoutedEventArgs e)
{
Button btn = (Button)sender;
if (btn == null) return;
if (btn.IsDefault == false)
{
Nav.NavigateTo(Navigator.PART_OPERATION);
ChangerStyleBtn(btn);
}
else return;
}
private void Button_Click_Echeancier(object sender, RoutedEventArgs e)
{
Button btn = (Button)sender;
if (btn == null) return;
if (btn.IsDefault == false)
{
Nav.NavigateTo(Navigator.PART_ECHEANCIER);
ChangerStyleBtn(btn);
}
else return;
}
private void Button_Click_Planification(object sender, RoutedEventArgs e)
{
Button btn = (Button)sender;
if (btn == null) return;
if (btn.IsDefault == false)
{
Nav.NavigateTo(Navigator.PART_PLANIFICATION);
ChangerStyleBtn(btn);
}
else return;
}
}
}

@ -1,103 +0,0 @@
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Controls;
namespace IHM
{
public class Navigator : INotifyPropertyChanged
{
public const string PART_MAIN = "Main";
public const string PART_CONNEXION = "Connexion";
public const string PART_INSCRIPTION = "Inscription";
public const string PART_TABLEAU_DE_BORD = "Tableau de Bord";
public const string PART_COMPTE = "Compte";
public const string PART_AJOUTER_BANQUE = "Ajouter une banque";
public const string PART_SUPPRIMER_BANQUE = "Supprimer une banque";
public const string PART_AJOUTER_COMPTE = "Ajouter une compte";
public const string PART_SUPPRIMER_COMPTE = "Supprimer un compte";
public const string PART_MODIFSOLDE = "ModifSolde";
public const string PART_OPERATION = "Opération";
public const string PART_ECHEANCIER = "Echéancier";
public const string PART_AJOUTER_ECHEANCE = "Enregistrer une échéance";
public const string PART_SUPPRIMER_ECHEANCE = "Supprimer une échéance";
public const string PART_PLANIFICATION = "Planification";
public const string PART_AJOUTER_PLANIFICATION = "Ajouter une planification";
public const string PART_SUPPRIMER_PLANIFICATION = "Supprimer une planification";
public const string PART_EFFECTUER_CREDIT = "Effectuer un crédit";
public const string PART_EFFECTUER_DEBIT = "Effectuer un débit";
public const string PART_RETIRER_OPERATION = "Retirer une opération";
public const string PART_SUPPRIMER_OPERATION = "Supprimer une opération";
public ReadOnlyDictionary<string, Func<UserControl>> WindowPart { get; private set; }
Dictionary<string, Func<UserControl>> windowPart { get; set; } = new Dictionary<string, Func<UserControl>>
{
[PART_MAIN] = () => new UCBienvenue(),
[PART_CONNEXION] = () => new UCConnexion(),
[PART_COMPTE] = () => new UCCompte(),
[PART_OPERATION] = () => new UCOperation(),
[PART_ECHEANCIER] = () => new UCEcheancier(),
[PART_PLANIFICATION] = () => new UCPlanification(),
[PART_INSCRIPTION] = () => new UCInscription(),
[PART_MODIFSOLDE] = () => new UCModifSolde(),
[PART_AJOUTER_BANQUE] = () => new UCAjouterBanque(),
[PART_SUPPRIMER_BANQUE] = () => new UCSupprimerBanque(),
[PART_AJOUTER_COMPTE] = () => new UCAjouterCompte(),
[PART_SUPPRIMER_COMPTE] = () => new UCSupprimerCompte(),
[PART_AJOUTER_ECHEANCE] = () => new UCAjouterEcheance(),
[PART_SUPPRIMER_ECHEANCE] = () => new UCSupprimerEcheance(),
[PART_AJOUTER_PLANIFICATION] = () => new UCAjouterPlanification(),
[PART_SUPPRIMER_PLANIFICATION] = () => new UCSupprimerPlanification(),
[PART_TABLEAU_DE_BORD] = () => new UCTableauDeBord(),
[PART_EFFECTUER_CREDIT] = () => new UCEffectuerCredit(),
[PART_EFFECTUER_DEBIT] = () => new UCEffectuerCredit(),
[PART_RETIRER_OPERATION] = () => new UCEffectuerCredit(),
[PART_SUPPRIMER_OPERATION] = () => new UCEffectuerCredit()
};
public Navigator()
{
WindowPart = new ReadOnlyDictionary<string, Func<UserControl>>(windowPart);
SelectedUserControlCreator = windowPart.First();
}
public KeyValuePair<string, Func<UserControl>> SelectedUserControlCreator
{
get => selectedUserControlCreator;
set
{
if (selectedUserControlCreator.Equals(value)) return;
selectedUserControlCreator = value;
OnPropertyChanged();
}
}
private KeyValuePair<string, Func<UserControl>> selectedUserControlCreator;
public event PropertyChangedEventHandler? PropertyChanged;
void OnPropertyChanged([CallerMemberName] string propertyName = "")
=> PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
public void NavigateTo(string windowPartName)
{
if (WindowPart.ContainsKey(windowPartName))
{
SelectedUserControlCreator = WindowPart.Single(kvp => kvp.Key == windowPartName);
}
}
}
}

@ -1,16 +0,0 @@
<UserControl x:Class="IHM.UCAjouterBanque"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:IHM"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800"
Style="{StaticResource ImageFondRessource}">
<DockPanel>
<TextBlock Text="A faire" FontSize="40"/>
<Button Click="Button_Click_Retour" Style="{StaticResource GreenButtonRessource}">
<TextBlock Text="Retour"/>
</Button>
</DockPanel>
</UserControl>

@ -1,34 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace IHM
{
/// <summary>
/// Logique d'interaction pour UCAjouterBanque.xaml
/// </summary>
public partial class UCAjouterBanque : UserControl
{
public Navigator Nav => (App.Current as App).Navigator;
public UCAjouterBanque()
{
InitializeComponent();
}
private void Button_Click_Retour(object sender, RoutedEventArgs e)
{
Nav.NavigateTo(Navigator.PART_COMPTE);
}
}
}

@ -1,16 +0,0 @@
<UserControl x:Class="IHM.UCAjouterCompte"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:IHM"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800"
Style="{StaticResource ImageFondRessource}">
<DockPanel>
<TextBlock Text="A FAIRE" FontSize="40"/>
<Button Click="Button_Click_Retour" Style="{StaticResource GreenButtonRessource}">
<TextBlock Text="Retour"/>
</Button>
</DockPanel>
</UserControl>

@ -1,35 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace IHM
{
/// <summary>
/// Logique d'interaction pour UCAjouterCompte.xaml
/// </summary>
public partial class UCAjouterCompte : UserControl
{
public Navigator Nav => (App.Current as App).Navigator;
public UCAjouterCompte()
{
InitializeComponent();
}
private void Button_Click_Retour(object sender, RoutedEventArgs e)
{
Nav.NavigateTo(Navigator.PART_COMPTE);
}
}
}

@ -1,16 +0,0 @@
<UserControl x:Class="IHM.UCAjouterEcheance"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:IHM"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800"
Style="{StaticResource ImageFondRessource}">
<DockPanel>
<TextBlock Text="A FAIRE" FontSize="40"/>
<Button Click="Button_Click_Retour" Style="{StaticResource GreenButtonRessource}">
<TextBlock Text="Retour"/>
</Button>
</DockPanel>
</UserControl>

@ -1,35 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace IHM
{
/// <summary>
/// Logique d'interaction pour UCAjouterEcheance.xaml
/// </summary>
public partial class UCAjouterEcheance : UserControl
{
public Navigator Nav => (App.Current as App).Navigator;
public UCAjouterEcheance()
{
InitializeComponent();
}
private void Button_Click_Retour(object sender, RoutedEventArgs e)
{
Nav.NavigateTo(Navigator.PART_ECHEANCIER);
}
}
}

@ -1,16 +0,0 @@
<UserControl x:Class="IHM.UCAjouterPlanification"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:IHM"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800"
Style="{StaticResource ImageFondRessource}">
<DockPanel>
<TextBlock Text="A FAIRE" FontSize="40"/>
<Button Click="Button_Click_Retour" Style="{StaticResource GreenButtonRessource}">
<TextBlock Text="Retour"/>
</Button>
</DockPanel>
</UserControl>

@ -1,35 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace IHM
{
/// <summary>
/// Logique d'interaction pour UCAjouterPlanification.xaml
/// </summary>
public partial class UCAjouterPlanification : UserControl
{
public Navigator Nav => (App.Current as App).Navigator;
public UCAjouterPlanification()
{
InitializeComponent();
}
private void Button_Click_Retour(object sender, RoutedEventArgs e)
{
Nav.NavigateTo(Navigator.PART_PLANIFICATION);
}
}
}

@ -1,41 +0,0 @@
<UserControl x:Class="IHM.UCBienvenue"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:IHM"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800"
Style="{StaticResource ImageFondRessource}">
<DockPanel>
<TextBlock Style="{StaticResource TitreDePage}" >Bienvenue sur Cons'Eco</TextBlock>
<Image Source="./images/logo.png" DockPanel.Dock="Top" Height="100" />
<TextBlock Foreground="Black" FontSize="15" HorizontalAlignment="Center" DockPanel.Dock="Top">
La première application d'aide à la gestion de budget personnel ou en entreprise
</TextBlock>
<Grid DockPanel.Dock="Bottom">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<StackPanel>
<TextBlock HorizontalAlignment="Center" Margin="50" FontSize="15">
Vous pouvez créer un compte
</TextBlock>
<Button Click="Button_Click_Inscription" Style="{StaticResource GreenButtonRessource}" Height="30" Width="100">
<TextBlock Text="Inscription"/>
</Button>
</StackPanel>
<StackPanel Grid.Column="1">
<TextBlock HorizontalAlignment="Center" Margin="50" FontSize="15">
Ou vous connecter si vous en possédée déjà un
</TextBlock>
<Button Click="Button_Click_Connexion" Style="{StaticResource GreenButtonRessource}" Height="30" Width="100">
<TextBlock Text="Connexion"/>
</Button>
</StackPanel>
</Grid>
</DockPanel>
</UserControl>

@ -1,40 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace IHM
{
/// <summary>
/// Logique d'interaction pour UCBienvenue.xaml
/// </summary>
public partial class UCBienvenue : UserControl
{
public Navigator Nav => (App.Current as App).Navigator;
public UCBienvenue()
{
InitializeComponent();
DataContext = this;
}
private void Button_Click_Inscription(object sender, RoutedEventArgs e)
{
Nav.NavigateTo(Navigator.PART_INSCRIPTION);
}
private void Button_Click_Connexion(object sender, RoutedEventArgs e)
{
Nav.NavigateTo(Navigator.PART_CONNEXION);
}
}
}

@ -1,42 +0,0 @@
<UserControl x:Class="IHM.UCCompte"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:IHM"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800"
Style="{StaticResource ImageFondRessource}">
<DockPanel>
<StackPanel DockPanel.Dock="Top">
<TextBlock Style="{StaticResource TitreDePage}" >Compte</TextBlock>
<StackPanel DockPanel.Dock="Left" Orientation="Horizontal" HorizontalAlignment="Center">
<Button Click="Button_Click_Ajouter_Banque" Style="{StaticResource GreenButtonRessource}" Height="25" Width="150" Margin="20">
<TextBlock Text="Ajouter une banque" Style="{StaticResource TextBlockRessource}"/>
</Button>
<Button Click="Button_Click_Supprimer_Banque" Style="{StaticResource GreenButtonRessource}" Height="25" Width="150" Margin="20">
<TextBlock Text="Supprimer une banque" Style="{StaticResource TextBlockRessource}"/>
</Button>
<Button Click="Button_Click_Ajouter_Compte" Style="{StaticResource GreenButtonRessource}" Height="25" Width="150" Margin="20">
<TextBlock Text="Ajouter un compte" Style="{StaticResource TextBlockRessource}"/>
</Button>
<Button Click="Button_Click_Supprimer_Compte" Style="{StaticResource GreenButtonRessource}" Height="25" Width="150" Margin="20">
<TextBlock Text="Supprimer un compte" Style="{StaticResource TextBlockRessource}"/>
</Button>
</StackPanel>
</StackPanel>
<Button Click="Button_Click_ModifSolde" DockPanel.Dock="Bottom" Style="{StaticResource GreenButtonRessource}" Height="25" Width="170" Margin="20">
<TextBlock Text="Modifier votre solde" Style="{StaticResource TextBlockRessource}"/>
</Button>
<TextBlock VerticalAlignment="Center" Text=" Le solde de votre compte courant est de : ???" Style="{StaticResource TextBlockRessource}" FontSize="16" FontWeight="DemiBold"/>
</DockPanel>
</UserControl>

@ -1,52 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace IHM
{
public partial class UCCompte : UserControl
{
public Navigator Nav => (App.Current as App).Navigator;
public UCCompte()
{
InitializeComponent();
}
private void Button_Click_ModifSolde(object sender, RoutedEventArgs e)
{
Nav.NavigateTo(Navigator.PART_MODIFSOLDE);
}
private void Button_Click_Ajouter_Banque(object sender, RoutedEventArgs e)
{
Nav.NavigateTo(Navigator.PART_AJOUTER_BANQUE);
}
private void Button_Click_Supprimer_Banque(object sender, RoutedEventArgs e)
{
Nav.NavigateTo(Navigator.PART_SUPPRIMER_BANQUE);
}
private void Button_Click_Ajouter_Compte(object sender, RoutedEventArgs e)
{
Nav.NavigateTo(Navigator.PART_AJOUTER_COMPTE);
}
private void Button_Click_Supprimer_Compte(object sender, RoutedEventArgs e)
{
Nav.NavigateTo(Navigator.PART_SUPPRIMER_COMPTE);
}
}
}

@ -1,71 +0,0 @@
<UserControl x:Class="IHM.UCConnexion"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:IHM"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800"
Style="{StaticResource ImageFondRessource}">
<DockPanel>
<TextBlock Style="{StaticResource TitreDePage}" >Connexion</TextBlock>
<TextBlock DockPanel.Dock="Top" HorizontalAlignment="Center" FontSize="15" Margin="20">Connectez vous à un compte déjà existant</TextBlock>
<Button Click="Button_Click_Acceuil" Margin="20" DockPanel.Dock="Bottom" Style="{StaticResource GreenButtonRessource}">
<TextBlock Text="Retour à la page d'acceuil"/>
</Button>
<Button DockPanel.Dock="Bottom" Click="Button_Click_Connection" Style="{StaticResource GreenButtonRessource}" Height="25" Width="150">
<TextBlock Text="Se connecter" Style="{StaticResource TextBlockRessource}"/>
</Button>
<Button DockPanel.Dock="Bottom" Click="Button_Click_Forget_Password" Style="{StaticResource OrangeButtonRessource}" Height="25" Width="170" Margin="20">
<TextBlock Text="Mot de passe oublié ?" Style="{StaticResource TextBlockRessource}"/>
</Button>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<TextBlock Style="{StaticResource TextBlockRessource}" FontSize="15">Nom d'utilisateur</TextBlock>
<StackPanel Grid.Column="1" Margin="30">
<TextBlock x:Name="ErrorUserName" HorizontalAlignment="Center" FontSize="15" Foreground="#FF6347" Visibility="Hidden">Veuillez renseigner votre nom d'utilisateurs</TextBlock>
<Border Grid.Column="1" Style="{StaticResource BorderRessource}">
<TextBox x:Name="UserName">
<TextBox.Resources>
<Style TargetType="{x:Type Border}">
<Setter Property="CornerRadius" Value="5"/>
</Style>
</TextBox.Resources>
</TextBox>
</Border>
</StackPanel>
<TextBlock Grid.Row="1" Style="{StaticResource TextBlockRessource}" FontSize="15">Mot de passe</TextBlock>
<StackPanel Grid.Row="1" Grid.Column="1">
<TextBlock x:Name="ErrorPassword" HorizontalAlignment="Center" FontSize="15" Foreground="#FF6347" Visibility="Hidden">Veuillez renseigner votre mot de passe</TextBlock>
<Border Style="{StaticResource BorderRessource}">
<PasswordBox x:Name="Password">
<PasswordBox.Resources>
<Style TargetType="{x:Type Border}">
<Setter Property="CornerRadius" Value="5"/>
</Style>
</PasswordBox.Resources>
</PasswordBox>
</Border>
</StackPanel>
</Grid>
</DockPanel>
</UserControl>

@ -1,58 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace IHM
{
/// <summary>
/// Logique d'interaction pour UCConnexion.xaml
/// </summary>
public partial class UCConnexion : UserControl
{
public Navigator Nav => (App.Current as App).Navigator;
public UCConnexion()
{
InitializeComponent();
}
private void Button_Click_Acceuil(object sender, RoutedEventArgs e)
{
Nav.NavigateTo(Navigator.PART_MAIN);
}
private void Button_Click_Connection(object sender, RoutedEventArgs e)
{
ErrorPassword.Visibility = Visibility.Hidden;
Password.Background = new SolidColorBrush(Colors.White);
ErrorUserName.Visibility = Visibility.Hidden;
UserName.Background = new SolidColorBrush(Colors.White);
if (UserName.Text.ToString() == "")
{
ErrorUserName.Visibility = Visibility.Visible;
UserName.Background = new BrushConverter().ConvertFromString("#FF6347") as SolidColorBrush;
}
if (Password.Password.ToString() == "")
{
ErrorPassword.Visibility = Visibility.Visible;
Password.Background = new BrushConverter().ConvertFromString("#FF6347") as SolidColorBrush;
}
}
private void Button_Click_Forget_Password(object sender, RoutedEventArgs e)
{
// TO DO
}
}
}

@ -1,43 +0,0 @@
<UserControl x:Class="IHM.UCEcheancier"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:IHM"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800"
Style="{StaticResource ImageFondRessource}">
<DockPanel>
<TextBlock Style="{StaticResource TitreDePage}" >Echeancier</TextBlock>
<WrapPanel DockPanel.Dock="Bottom" HorizontalAlignment="Center">
<Border Style="{StaticResource BorderRessource}" Background="BlueViolet">
<TextBlock DockPanel.Dock="Bottom" Text="Total" TextAlignment="Center" VerticalAlignment="Center"/>
</Border>
<Border Style="{StaticResource BorderRessource}" Background="BlueViolet">
<TextBlock DockPanel.Dock="Bottom" Text="???" TextAlignment="Center" VerticalAlignment="Center"/>
</Border>
</WrapPanel>
<StackPanel Orientation="Vertical" HorizontalAlignment="Center">
<WrapPanel HorizontalAlignment="Center">
<Button Click="Button_Click_Ajouter_Echeance" Style="{StaticResource GreenButtonRessource}" Content="Enregistrer une échéance"/>
<Button Click="Button_Click_Supprimer_Echeance" Style="{StaticResource GreenButtonRessource}" Content="Supprimer une échéance"/>
</WrapPanel>
<WrapPanel HorizontalAlignment="Center">
<WrapPanel.Resources>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Margin" Value="60,10,30,0"/>
</Style>
</WrapPanel.Resources>
<TextBlock Text="Nom"/>
<TextBlock Text="Date"/>
<TextBlock Text="Paiement"/>
<TextBlock Text="Type"/>
<TextBlock Text="Crédit"/>
<TextBlock Text="Débit"/>
</WrapPanel>
</StackPanel>
</DockPanel>
</UserControl>

@ -1,40 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace IHM
{
/// <summary>
/// Logique d'interaction pour UCEcheancier.xaml
/// </summary>
public partial class UCEcheancier : UserControl
{
public Navigator Nav => (App.Current as App).Navigator;
public UCEcheancier()
{
InitializeComponent();
}
private void Button_Click_Ajouter_Echeance(object sender, RoutedEventArgs e)
{
Nav.NavigateTo(Navigator.PART_AJOUTER_ECHEANCE);
}
private void Button_Click_Supprimer_Echeance(object sender, RoutedEventArgs e)
{
Nav.NavigateTo(Navigator.PART_SUPPRIMER_ECHEANCE);
}
}
}

@ -1,16 +0,0 @@
<UserControl x:Class="IHM.UCEffectuerCredit"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:IHM"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800"
Style="{StaticResource ImageFondRessource}">
<DockPanel>
<TextBlock Text="A FAIRE" FontSize="40"/>
<Button Click="Button_Click_Retour" Style="{StaticResource GreenButtonRessource}">
<TextBlock Text="Retour"/>
</Button>
</DockPanel>
</UserControl>

@ -1,34 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace IHM
{
/// <summary>
/// Logique d'interaction pour UserControl1.xaml
/// </summary>
public partial class UCEffectuerCredit : UserControl
{
public Navigator Nav => (App.Current as App).Navigator;
public UCEffectuerCredit()
{
InitializeComponent();
}
private void Button_Click_Retour(object sender, RoutedEventArgs e)
{
Nav.NavigateTo(Navigator.PART_OPERATION);
}
}
}

@ -1,16 +0,0 @@
<UserControl x:Class="IHM.UCEffectuerDebit"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:IHM"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800"
Style="{StaticResource ImageFondRessource}">
<DockPanel>
<TextBlock Text="A FAIRE" FontSize="40"/>
<Button Click="Button_Click_Retour" Style="{StaticResource GreenButtonRessource}">
<TextBlock Text="Retour"/>
</Button>
</DockPanel>
</UserControl>

@ -1,34 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace IHM
{
/// <summary>
/// Logique d'interaction pour UserControl1.xaml
/// </summary>
public partial class UCEffectuerDebit : UserControl
{
public Navigator Nav => (App.Current as App).Navigator;
public UCEffectuerDebit()
{
InitializeComponent();
}
private void Button_Click_Retour(object sender, RoutedEventArgs e)
{
Nav.NavigateTo(Navigator.PART_OPERATION);
}
}
}

@ -1,94 +0,0 @@
<UserControl x:Class="IHM.UCInscription"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:IHM"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800"
Style="{StaticResource ImageFondRessource}">
<DockPanel>
<TextBlock Style="{StaticResource TitreDePage}" >Inscription</TextBlock>
<TextBlock DockPanel.Dock="Top" HorizontalAlignment="Center" FontSize="15" Margin="20">Veuillez créer votre compte en retrant vos informations</TextBlock>
<Button Click="Button_Click_Acceuil" Margin="20" DockPanel.Dock="Bottom" Style="{StaticResource GreenButtonRessource}">
<TextBlock Text="Retour à la page d'acceuil"/>
</Button>
<Button DockPanel.Dock="Bottom" Click="Button_Click_Validation" Style="{StaticResource GreenButtonRessource}" Height="25" Width="150">
<TextBlock Text="Valider" Style="{StaticResource TextBlockRessource}"/>
</Button>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<TextBlock Text="Nom d'utilisateur" Style="{StaticResource TextBlockRessource}"/>
<Border Grid.Column="1" Style="{StaticResource BorderRessource}">
<TextBox>
<TextBox.Resources>
<Style TargetType="{x:Type Border}">
<Setter Property="CornerRadius" Value="5"/>
</Style>
</TextBox.Resources>
</TextBox>
</Border>
<TextBlock Grid.Row="1" Text="Nom" Style="{StaticResource TextBlockRessource}"/>
<Border Grid.Column="1" Grid.Row="1" Style="{StaticResource BorderRessource}">
<TextBox>
<TextBox.Resources>
<Style TargetType="{x:Type Border}">
<Setter Property="CornerRadius" Value="5"/>
</Style>
</TextBox.Resources>
</TextBox>
</Border>
<TextBlock Grid.Row="2" Text="Prenom" Style="{StaticResource TextBlockRessource}"/>
<Border Grid.Column="1" Grid.Row="2" Style="{StaticResource BorderRessource}">
<TextBox>
<TextBox.Resources>
<Style TargetType="{x:Type Border}">
<Setter Property="CornerRadius" Value="5"/>
</Style>
</TextBox.Resources>
</TextBox>
</Border>
<TextBlock Grid.Row="3" Text="Mail" Style="{StaticResource TextBlockRessource}"/>
<Border Grid.Column="1" Grid.Row="3" Style="{StaticResource BorderRessource}">
<TextBox>
<TextBox.Resources>
<Style TargetType="{x:Type Border}">
<Setter Property="CornerRadius" Value="5"/>
</Style>
</TextBox.Resources>
</TextBox>
</Border>
<TextBlock Grid.Row="4" Text="Mot de passe" Style="{StaticResource TextBlockRessource}"/>
<Border Grid.Column="1" Grid.Row="4" Style="{StaticResource BorderRessource}">
<TextBox>
<TextBox.Resources>
<Style TargetType="{x:Type Border}">
<Setter Property="CornerRadius" Value="5"/>
</Style>
</TextBox.Resources>
</TextBox>
</Border>
</Grid>
</DockPanel>
</UserControl>

@ -1,39 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace IHM
{
/// <summary>
/// Logique d'interaction pour UCInscription.xaml
/// </summary>
public partial class UCInscription : UserControl
{
public Navigator Nav => (App.Current as App).Navigator;
public UCInscription()
{
InitializeComponent();
}
private void Button_Click_Acceuil(object sender, RoutedEventArgs e)
{
Nav.NavigateTo(Navigator.PART_MAIN);
}
private void Button_Click_Validation(object sender, RoutedEventArgs e)
{
// TO DO
}
}
}

@ -1,37 +0,0 @@
<UserControl x:Class="IHM.UCModifSolde"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:IHM"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800"
Style="{StaticResource ImageFondRessource}">
<DockPanel>
<TextBlock DockPanel.Dock="Top" Style="{StaticResource TitreDePage}" >Modification de votre solde</TextBlock>
<StackPanel DockPanel.Dock="Bottom" Orientation="Horizontal" Margin="20" HorizontalAlignment="Center">
<Button Click="Button_Click_Compte" Style="{StaticResource GreenButtonRessource}" Height="25" Width="170">
<TextBlock Text="Retour" Style="{StaticResource TextBlockRessource}"/>
</Button>
<Button DockPanel.Dock="Bottom" Style="{StaticResource GreenButtonRessource}" Height="25" Width="170" Margin="150,0,0,0">
<TextBlock Text="Confirmer" Style="{StaticResource TextBlockRessource}"/>
</Button>
</StackPanel>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
<TextBlock Margin="50" Height="25" Width="80">Nouveau solde</TextBlock>
<TextBox Margin="50" Height="25" Width="170">
<TextBox.Resources>
<Style TargetType="{x:Type Border}">
<Setter Property="CornerRadius" Value="5"/>
</Style>
</TextBox.Resources>
</TextBox>
</StackPanel>
</DockPanel>
</UserControl>

@ -1,34 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace IHM
{
/// <summary>
/// Logique d'interaction pour Page1.xaml
/// </summary>
public partial class UCModifSolde : UserControl
{
public Navigator Nav => (App.Current as App).Navigator;
public UCModifSolde()
{
InitializeComponent();
}
private void Button_Click_Compte(object sender, RoutedEventArgs e)
{
Nav.NavigateTo(Navigator.PART_COMPTE);
}
}
}

@ -1,46 +0,0 @@
<UserControl x:Class="IHM.UCOperation"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:IHM"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800"
Style="{StaticResource ImageFondRessource}">
<DockPanel>
<TextBlock DockPanel.Dock="Top" Text="Opérations" Style="{StaticResource TitreDePage}"/>
<WrapPanel DockPanel.Dock="Bottom" HorizontalAlignment="Center">
<Border Style="{StaticResource BorderRessource}" Background="BlueViolet">
<TextBlock DockPanel.Dock="Bottom" Text="Solde" TextAlignment="Center" VerticalAlignment="Center"/>
</Border>
<Border Style="{StaticResource BorderRessource}" Background="BlueViolet">
<TextBlock DockPanel.Dock="Bottom" Text="???" TextAlignment="Center" VerticalAlignment="Center"/>
</Border>
</WrapPanel>
<StackPanel Orientation="Vertical" HorizontalAlignment="Center">
<WrapPanel HorizontalAlignment="Center">
<Button Style="{StaticResource GreenButtonRessource}" Click="Button_Click_EffectuerCredit" Content="Effectuer un crédit"/>
<Button Style="{StaticResource GreenButtonRessource}" Click="Button_Click_EffectuerDebit" Content="Effectuer un débit"/>
<Button Style="{StaticResource GreenButtonRessource}" Click="Button_Click_RetirerOperation" Content="Retirer une opération"/>
<Button Style="{StaticResource GreenButtonRessource}" Click="Button_Click_SupprimerOperation" Content="Supprimer une opération"/>
</WrapPanel>
<WrapPanel HorizontalAlignment="Center">
<WrapPanel.Resources>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Margin" Value="60,10,30,0"/>
</Style>
</WrapPanel.Resources>
<TextBlock Text="Nom"/>
<TextBlock Text="Date"/>
<TextBlock Text="Paiement"/>
<TextBlock Text="Type"/>
<TextBlock Text="Crédit"/>
<TextBlock Text="Débit"/>
</WrapPanel>
</StackPanel>
</DockPanel>
</UserControl>

@ -1,46 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace IHM
{
/// <summary>
/// Logique d'interaction pour UCOperation.xaml
/// </summary>
public partial class UCOperation : UserControl
{
public Navigator Nav => (App.Current as App).Navigator;
public UCOperation()
{
InitializeComponent();
}
private void Button_Click_EffectuerCredit(object sender, RoutedEventArgs e)
{
Nav.NavigateTo(Navigator.PART_EFFECTUER_CREDIT);
}
private void Button_Click_EffectuerDebit(object sender, RoutedEventArgs e)
{
Nav.NavigateTo(Navigator.PART_EFFECTUER_DEBIT);
}
private void Button_Click_RetirerOperation(object sender, RoutedEventArgs e)
{
Nav.NavigateTo(Navigator.PART_RETIRER_OPERATION);
}
private void Button_Click_SupprimerOperation(object sender, RoutedEventArgs e)
{
Nav.NavigateTo(Navigator.PART_SUPPRIMER_OPERATION);
}
}
}

@ -1,50 +0,0 @@
<UserControl x:Class="IHM.UCPlanification"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:IHM"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800"
Style="{StaticResource ImageFondRessource}">
<DockPanel>
<TextBlock DockPanel.Dock="Top" Text="Planification" Style="{StaticResource TitreDePage}"/>
<WrapPanel DockPanel.Dock="Bottom" HorizontalAlignment="Center">
<Border Style="{StaticResource BorderRessource}" Background="BlueViolet">
<TextBlock DockPanel.Dock="Bottom" Text="Total" TextAlignment="Center" VerticalAlignment="Center"/>
</Border>
<Border Style="{StaticResource BorderRessource}" Background="BlueViolet">
<TextBlock DockPanel.Dock="Bottom" Text="???" TextAlignment="Center" VerticalAlignment="Center"/>
</Border>
</WrapPanel>
<StackPanel Orientation="Vertical" HorizontalAlignment="Center">
<WrapPanel HorizontalAlignment="Center">
<Button Style="{StaticResource GreenButtonRessource}" Click="Button_Click_Ajouter_Planification" Content="Enregistrer une planification"/>
<Button Style="{StaticResource GreenButtonRessource}" Click="Button_Click_Supprimer_Planification" Content="supprimer une planification"/>
</WrapPanel>
<TextBlock Text="Basculement vers échéancier tous les premiers du mois" HorizontalAlignment="Center" FontStyle="Italic"/>
<WrapPanel HorizontalAlignment="Center">
<WrapPanel.Resources>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Margin" Value="60,10,30,0"/>
</Style>
</WrapPanel.Resources>
<TextBlock Text="Nom"/>
<TextBlock Text="Date"/>
<TextBlock Text="Paiement"/>
<TextBlock Text="Type"/>
<TextBlock Text="Crédit"/>
<TextBlock Text="Débit"/>
</WrapPanel>
</StackPanel>
</DockPanel>
</UserControl>

@ -1,40 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace IHM
{
/// <summary>
/// Logique d'interaction pour UCPlannification.xaml
/// </summary>
public partial class UCPlanification : UserControl
{
public Navigator Nav => (App.Current as App).Navigator;
public UCPlanification()
{
InitializeComponent();
}
private void Button_Click_Ajouter_Planification(object sender, RoutedEventArgs e)
{
Nav.NavigateTo(Navigator.PART_AJOUTER_PLANIFICATION);
}
private void Button_Click_Supprimer_Planification(object sender, RoutedEventArgs e)
{
Nav.NavigateTo(Navigator.PART_SUPPRIMER_PLANIFICATION);
}
}
}

@ -1,16 +0,0 @@
<UserControl x:Class="IHM.UCRetirerOperation"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:IHM"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800"
Style="{StaticResource ImageFondRessource}">
<DockPanel>
<TextBlock Text="A FAIRE" FontSize="40"/>
<Button Click="Button_Click_Retour" Style="{StaticResource GreenButtonRessource}">
<TextBlock Text="Retour"/>
</Button>
</DockPanel>
</UserControl>

@ -1,34 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace IHM
{
/// <summary>
/// Logique d'interaction pour UserControl2.xaml
/// </summary>
public partial class UCRetirerOperation : UserControl
{
public Navigator Nav => (App.Current as App).Navigator;
public UCRetirerOperation()
{
InitializeComponent();
}
private void Button_Click_Retour(object sender, RoutedEventArgs e)
{
Nav.NavigateTo(Navigator.PART_OPERATION);
}
}
}

@ -1,16 +0,0 @@
<UserControl x:Class="IHM.UCSupprimerBanque"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:IHM"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800"
Style="{StaticResource ImageFondRessource}">
<DockPanel>
<TextBlock Text="A FAIRE" FontSize="40"/>
<Button Click="Button_Click_Retour" Style="{StaticResource GreenButtonRessource}">
<TextBlock Text="Retour"/>
</Button>
</DockPanel>
</UserControl>

@ -1,34 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace IHM
{
/// <summary>
/// Logique d'interaction pour UCSupprimerBanque.xaml
/// </summary>
public partial class UCSupprimerBanque : UserControl
{
public Navigator Nav => (App.Current as App).Navigator;
public UCSupprimerBanque()
{
InitializeComponent();
}
private void Button_Click_Retour(object sender, RoutedEventArgs e)
{
Nav.NavigateTo(Navigator.PART_COMPTE);
}
}
}

@ -1,17 +0,0 @@
<UserControl x:Class="IHM.UCSupprimerCompte"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:IHM"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800"
Style="{StaticResource ImageFondRessource}">
<DockPanel>
<TextBlock Text="A FAIRE" FontSize="40"/>
<Button Click="Button_Click_Retour" Style="{StaticResource GreenButtonRessource}">
<TextBlock Text="Retour"/>
</Button>
</DockPanel>
</UserControl>

@ -1,35 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace IHM
{
/// <summary>
/// Logique d'interaction pour UCSupprimerCompte.xaml
/// </summary>
public partial class UCSupprimerCompte : UserControl
{
public Navigator Nav => (App.Current as App).Navigator;
public UCSupprimerCompte()
{
InitializeComponent();
}
private void Button_Click_Retour(object sender, RoutedEventArgs e)
{
Nav.NavigateTo(Navigator.PART_COMPTE);
}
}
}

@ -1,16 +0,0 @@
<UserControl x:Class="IHM.UCSupprimerEcheance"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:IHM"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800"
Style="{StaticResource ImageFondRessource}">
<DockPanel>
<TextBlock Text="A FAIRE" FontSize="40"/>
<Button Click="Button_Click_Retour" Style="{StaticResource GreenButtonRessource}">
<TextBlock Text="Retour"/>
</Button>
</DockPanel>
</UserControl>

@ -1,35 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace IHM
{
/// <summary>
/// Logique d'interaction pour UCSupprimerEcheance.xaml
/// </summary>
public partial class UCSupprimerEcheance : UserControl
{
public Navigator Nav => (App.Current as App).Navigator;
public UCSupprimerEcheance()
{
InitializeComponent();
}
private void Button_Click_Retour(object sender, RoutedEventArgs e)
{
Nav.NavigateTo(Navigator.PART_ECHEANCIER);
}
}
}

@ -1,16 +0,0 @@
<UserControl x:Class="IHM.UCSupprimerOperation"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:IHM"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800"
Style="{StaticResource ImageFondRessource}">
<DockPanel>
<TextBlock Text="A FAIRE" FontSize="40"/>
<Button Click="Button_Click_Retour" Style="{StaticResource GreenButtonRessource}">
<TextBlock Text="Retour"/>
</Button>
</DockPanel>
</UserControl>

@ -1,34 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace IHM
{
/// <summary>
/// Logique d'interaction pour UserControl3.xaml
/// </summary>
public partial class UCSupprimerOperation : UserControl
{
public Navigator Nav => (App.Current as App).Navigator;
public UCSupprimerOperation()
{
InitializeComponent();
}
private void Button_Click_Retour(object sender, RoutedEventArgs e)
{
Nav.NavigateTo(Navigator.PART_OPERATION);
}
}
}

@ -1,16 +0,0 @@
<UserControl x:Class="IHM.UCSupprimerPlanification"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:IHM"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800"
Style="{StaticResource ImageFondRessource}">
<DockPanel>
<TextBlock Text="A FAIRE" FontSize="40"/>
<Button Click="Button_Click_Retour" Style="{StaticResource GreenButtonRessource}">
<TextBlock Text="Retour"/>
</Button>
</DockPanel>
</UserControl>

@ -1,35 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace IHM
{
/// <summary>
/// Logique d'interaction pour UCSupprimerPlanification.xaml
/// </summary>
public partial class UCSupprimerPlanification : UserControl
{
public Navigator Nav => (App.Current as App).Navigator;
public UCSupprimerPlanification()
{
InitializeComponent();
}
private void Button_Click_Retour(object sender, RoutedEventArgs e)
{
Nav.NavigateTo(Navigator.PART_PLANIFICATION);
}
}
}

@ -1,12 +0,0 @@
<UserControl x:Class="IHM.UCTableauDeBord"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:IHM"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<Grid>
</Grid>
</UserControl>

@ -1,28 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace IHM
{
/// <summary>
/// Logique d'interaction pour UCTableauDeBord.xaml
/// </summary>
public partial class UCTableauDeBord : UserControl
{
public UCTableauDeBord()
{
InitializeComponent();
}
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 567 KiB

@ -1,7 +0,0 @@
namespace Model
{
public class Class1
{
}
}

@ -1,9 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>

@ -1,2 +0,0 @@
// See https://aka.ms/new-console-template for more information
Console.WriteLine("Hello, World!");

@ -1,10 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>

@ -1,11 +0,0 @@
namespace TestsUnitaires
{
public class UnitTest1
{
[Fact]
public void Test1()
{
}
}
}

@ -0,0 +1,6 @@
FROM php:8.1-apache
RUN apt-get update && apt-get install -y mariadb-client
RUN docker-php-ext-install mysqli pdo pdo_mysql && docker-php-ext-enable pdo_mysql
COPY ./Sources/API /var/www/html/
COPY ./Sources/Data /sql/
RUN cd /sql/

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 97 KiB

After

Width:  |  Height:  |  Size: 97 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 113 KiB

@ -1 +1,19 @@
# Cons'Eco
[![Build Status](https://codefirst.iut.uca.fr/api/badges/ConsEcoTeam/ConsEco/status.svg)](https://codefirst.iut.uca.fr/hugo.livet/ConsEco)
[![Csharp](https://img.shields.io/badge/-CSharp-50C878?style=for-the-badge&logo=csharp)](https://learn.microsoft.com/fr-fr/dotnet/csharp/) [![Xaml](https://img.shields.io/badge/-XAML-6495ED?style=for-the-badge&logo=xaml)](https://learn.microsoft.com/fr-fr/dotnet/desktop/wpf/xaml/?view=netdesktop-6.0) [![.NET/WPF](https://img.shields.io/badge/-.NET/MAUI-B87333?style=for-the-badge&logo=dotnet)](https://learn.microsoft.com/fr-fr/dotnet/maui/what-is-maui?view=net-maui-6.0)
<br />
<div align="center">
<a href=https://codefirst.iut.uca.fr/git/hugo.livet/ConsEco>
<img src="Documentation_En_Cours/logoaf.png" alt="Logo" width="150" height="160">
</a>
</div>
<br />
## Bienvenue sur Cons'Eco
---
[Nous vous conseillons d'aller voir le wiki de ce projet](https://codefirst.iut.uca.fr/git/hugo.livet/ConsEco/wiki)

@ -0,0 +1,8 @@
{
"require": {
"slim/slim": "4.*",
"slim/psr7": "^1.6",
"zircote/swagger-php": "^4.5",
"doctrine/annotations": "^1.14"
}
}

File diff suppressed because it is too large Load Diff

@ -0,0 +1,22 @@
<?php
class Database {
private $host = 'localhost';
private $db_name = 'testAPI';
private $username = 'viastolfi';
private $password = 'MhhLeCaca1!';
private $conn;
public function connect(){
$this->conn = null;
try{
$this->conn = new PDO('mysql:host='.$this->host.';dbname='.$this->db_name, $this->username, $this->password);
$this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e){
echo 'Connection Error :'.$e->getMessage();
}
return $this->conn;
}
}
?>

@ -0,0 +1,25 @@
<?php
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
use Slim\Factory\AppFactory;
require __DIR__ .'/../vendor/autoload.php';
require __DIR__.'/../config/Database.php';
$app = AppFactory::create();
$app->get('/', function (Request $request, Response $response, $args) {
$response->getBody()->write("Hello world!");
return $response;
});
require __DIR__.'/../routes/Inscrit.php';
require __DIR__.'/../routes/Banque.php';
require __DIR__.'/../routes/Compte.php';
require __DIR__.'/../routes/Operation.php';
require __DIR__.'/../routes/Planification.php';
require __DIR__.'/../routes/Echeance.php';
$app->run();
?>

@ -0,0 +1,140 @@
<?php
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
use Slim\Factory\AppFactory;
use OpenApi\Annotations as OA;
/**
* @OA\Info(title="My First API", version="0.1")
*/
$app->addBodyParsingMiddleware();
$app->addRoutingMiddleware();
$app->addErrorMiddleware(true, true, true);
/**
* @OA\Get(path="/api/Banque",
* @OA\Response(response="200", description="Succes")
* @OA\Response(response="500", description="Bdd Error")
* )
*/
$app->get('/Banque/', function(Request $request, Response $response){
$query = "SELECT * FROM Banque";
try{
$db = new Database();
$conn = $db->connect();
$stmt = $conn->query($query);
$inscrits = $stmt->fetchAll(PDO::FETCH_OBJ);
$db = null;
$response->getBody()->write(json_encode($inscrits));
return $response
->withHeader('content-type', 'application/json')
->withStatus(200);
} catch(PDOException $e){
$error = array("message" => $e->getMessage());
$response->getBody()->write(json_encode($error));
return $response
->withHeader('content-type', 'application/json')
->withStatus(500);
}
});
$app->post('/Banque/FromId/', function(Request $request, Response $response,array $args){
$id = $request->getParsedBody()["id"];
$query = 'SELECT id, nomBanque FROM InscrBanque WHERE idInscrit=:id';
try{
$db = new Database();
$conn = $db->connect();
$stmt = $conn->prepare($query);
$stmt->bindValue(':id', $id, PDO::PARAM_STR);
$stmt->execute();
$inscrit = $stmt->fetchAll(PDO::FETCH_OBJ);
$db = null;
$response->getBody()->write(json_encode($inscrit));
return $response
->withHeader('content-type', 'application/json')
->withStatus(200);
} catch(PDOException $e){
$error = array("message" => $e->getMessage());
$response->getBody()->write(json_encode($error));
return $response
->withHeader('content-type', 'application/json')
->withStatus(500);
}
});
$app->post('/Banque/add/', function(Request $request, Response $response, array $args){
$nom = $request->getParsedBody()["nom"];
$idInscrit = $request->getParsedBody()["idInscrit"];
$query = "INSERT INTO InscrBanque (nomBanque, idInscrit) VALUES (:nom, :idI)";
try{
$db = new Database();
$conn = $db->connect();
$stmt = $conn->prepare($query);
$stmt->bindValue(':nom', $nom, PDO::PARAM_STR);
$stmt->bindValue(':idI', $idInscrit, PDO::PARAM_STR);
$result = $stmt->execute();
$db = null;
$response->getBody()->write(json_encode($result));
return $response
->withHeader('content-type', 'application/json')
->withStatus(200);
} catch(PDOException $e){
$error = array("message" => $e->getMessage());
$response->getBody()->write(json_encode($error));
return $response
->withHeader('content-type', 'application/json')
->withStatus(500);
}
});
$app->delete('/Banque/delete/', function (Request $request, Response $response, array $args) {
$nom = $request->getParsedBody()["nom"];
$idInscrit = $request->getParsedBody()["idInscrit"];
$query = "DELETE FROM InscrBanque WHERE nomBanque=:nom AND idInscrit=:idI";
try{
$db = new Database();
$conn = $db->connect();
$stmt = $conn->prepare($query);
$stmt->bindValue(':nom', $nom, PDO::PARAM_STR);
$stmt->bindValue(':idI', $idInscrit, PDO::PARAM_STR);
$result = $stmt->execute();
$db = null;
$response->getBody()->write(json_encode($result));
return $response
->withHeader('content-type', 'application/json')
->withStatus(200);
} catch(PDOException $e){
$error = array("message" => $e->getMessage());
$response->getBody()->write(json_encode($error));
return $response
->withHeader('content-type', 'application/json')
->withStatus(500);
}
});
?>

@ -0,0 +1,116 @@
<?php
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
use Slim\Factory\AppFactory;
use OpenApi\Annotations as OA;
/**
* @OA\Info(title="My First API", version="0.1")
*/
$app->addBodyParsingMiddleware();
$app->addRoutingMiddleware();
$app->addErrorMiddleware(true, true, true);
/**
* @OA\Get(path="/api/Compte",
* @OA\Response(response="200", description="Succes")
* @OA\Response(response="500", description="Bdd Error")
* )
*/
$app->post('/Compte/FromIdInscrit/', function(Request $request, Response $response,array $args){
$idInscrit = $request->getParsedBody()["id"];
$query = 'SELECT * FROM Compte WHERE idInscritBanque=:id';
try{
$db = new Database();
$conn = $db->connect();
$stmt = $conn->prepare($query);
$stmt->bindValue(':id', $idInscrit, PDO::PARAM_STR);
$stmt->execute();
$compte = $stmt->fetchAll(PDO::FETCH_OBJ);
$db = null;
$response->getBody()->write(json_encode($compte));
return $response
->withHeader('content-type', 'application/json')
->withStatus(200);
} catch(PDOException $e){
$error = array("message" => $e->getMessage());
$response->getBody()->write(json_encode($error));
return $response
->withHeader('content-type', 'application/json')
->withStatus(500);
}
});
$app->post('/Compte/add/', function(Request $request, Response $response, array $args){
$nom = $request->getParsedBody()["nom"];
$idInscrit = $request->getParsedBody()["idInscrit"];
$query = "INSERT INTO Compte (nom, idInscritBanque) VALUES (:nom, :idI)";
try{
$db = new Database();
$conn = $db->connect();
$stmt = $conn->prepare($query);
$stmt->bindValue(':nom', $nom, PDO::PARAM_STR);
$stmt->bindValue(':idI', $idInscrit, PDO::PARAM_STR);
$result = $stmt->execute();
$db = null;
$response->getBody()->write(json_encode($result));
return $response
->withHeader('content-type', 'application/json')
->withStatus(200);
} catch(PDOException $e){
$error = array("message" => $e->getMessage());
$response->getBody()->write(json_encode($error));
return $response
->withHeader('content-type', 'application/json')
->withStatus(500);
}
});
$app->delete('/Compte/delete/', function (Request $request, Response $response, array $args) {
$nom = $request->getParsedBody()["nom"];
$idInscrit = $request->getParsedBody()["idInscrit"];
$query = "DELETE FROM Compte WHERE nom=:nom AND idInscritBanque=:idI";
try{
$db = new Database();
$conn = $db->connect();
$stmt = $conn->prepare($query);
$stmt->bindValue(':nom', $nom, PDO::PARAM_STR);
$stmt->bindValue(':idI', $idInscrit, PDO::PARAM_STR);
$result = $stmt->execute();
$db = null;
$response->getBody()->write(json_encode($result));
return $response
->withHeader('content-type', 'application/json')
->withStatus(200);
} catch(PDOException $e){
$error = array("message" => $e->getMessage());
$response->getBody()->write(json_encode($error));
return $response
->withHeader('content-type', 'application/json')
->withStatus(500);
}
});
?>

@ -0,0 +1,125 @@
<?php
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
use Slim\Factory\AppFactory;
use OpenApi\Annotations as OA;
/**
* @OA\Info(title="My First API", version="0.1")
*/
$app->addBodyParsingMiddleware();
$app->addRoutingMiddleware();
$app->addErrorMiddleware(true, true, true);
/**
* @OA\Get(path="/api/Echeance",
* @OA\Response(response="200", description="Succes")
* @OA\Response(response="500", description="Bdd Error")
* )
*/
$app->post('/Echeance/FromIdCompte/', function(Request $request, Response $response,array $args){
$idCompte = $request->getParsedBody()["id"];
$query = 'SELECT * FROM Echeancier WHERE compte=:id';
try{
$db = new Database();
$conn = $db->connect();
$stmt = $conn->prepare($query);
$stmt->bindValue(':id', $idCompte, PDO::PARAM_STR);
$stmt->execute();
$ope = $stmt->fetchAll(PDO::FETCH_OBJ);
$db = null;
$response->getBody()->write(json_encode($ope));
return $response
->withHeader('content-type', 'application/json')
->withStatus(200);
} catch(PDOException $e){
$error = array("message" => $e->getMessage());
$response->getBody()->write(json_encode($error));
return $response
->withHeader('content-type', 'application/json')
->withStatus(500);
}
});
$app->post('/Echeance/add/', function(Request $request, Response $response, array $args){
$compte = $request->getParsedBody()["compte"];
$nom = $request->getParsedBody()["nom"];
$montant = $request->getParsedBody()["montant"];
$dateO = $request->getParsedBody()["dateO"];
$methodePayement = $request->getParsedBody()["methodePayement"];
$isDebit = $request->getParsedBody()["isDebit"];
$tag = $request->getParsedBody()["tag"];
$query = "INSERT INTO Echeancier (compte, nom, montant, dateO, methodePayement, isDebit, tag) SELECT :compte,:nom,:montant, STR_TO_DATE(:dateO, '%d/%m/%Y %H:%i:%s' ), :methodePayement, :isD ,:tag;";
try{
$db = new Database();
$conn = $db->connect();
$stmt = $conn->prepare($query);
$stmt->bindValue(':compte', $compte, PDO::PARAM_STR);
$stmt->bindValue(':nom', $nom, PDO::PARAM_STR);
$stmt->bindValue(':montant', $montant, PDO::PARAM_STR);
$stmt->bindValue(':dateO', $dateO, PDO::PARAM_STR);
$stmt->bindValue(':methodePayement', $methodePayement, PDO::PARAM_STR);
$stmt->bindValue(':isD', $isDebit, PDO::PARAM_BOOL);
$stmt->bindValue(':tag', $tag, PDO::PARAM_STR);
$result = $stmt->execute();
$db = null;
$response->getBody()->write(json_encode($result));
return $response
->withHeader('content-type', 'application/json')
->withStatus(200);
} catch(PDOException $e){
$error = array("message" => $e->getMessage());
$response->getBody()->write(json_encode($error));
return $response
->withHeader('content-type', 'application/json')
->withStatus(500);
}
});
$app->delete('/Echeance/delete/', function (Request $request, Response $response, array $args) {
$compte = $request->getParsedBody()["compte"];
$nom = $request->getParsedBody()["nom"];
$query = "DELETE FROM Echeancier WHERE compte=:compte AND nom=:nom";
try{
$db = new Database();
$conn = $db->connect();
$stmt = $conn->prepare($query);
$stmt->bindValue(':compte', $compte, PDO::PARAM_STR);
$stmt->bindValue(':nom', $nom, PDO::PARAM_STR);
$result = $stmt->execute();
$db = null;
$response->getBody()->write(json_encode($result));
return $response
->withHeader('content-type', 'application/json')
->withStatus(200);
} catch(PDOException $e){
$error = array("message" => $e->getMessage());
$response->getBody()->write(json_encode($error));
return $response
->withHeader('content-type', 'application/json')
->withStatus(500);
}
});
?>

@ -0,0 +1,172 @@
<?php
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
use Slim\Factory\AppFactory;
use OpenApi\Annotations as OA;
/**
* @OA\Info(title="My First API", version="0.1")
*/
$app->addBodyParsingMiddleware();
$app->addRoutingMiddleware();
$app->addErrorMiddleware(true, true, true);
/**
* @OA\Get(path="/api/Inscrit",
* @OA\Response(response="200", description="Succes")
* @OA\Response(response="500", description="Bdd Error")
* )
*/
$app->get('/Inscrit/', function(Request $request, Response $response){
$query = "SELECT * FROM Inscrit";
try{
$db = new Database();
$conn = $db->connect();
$stmt = $conn->query($query);
$inscrits = $stmt->fetchAll(PDO::FETCH_OBJ);
$db = null;
$response->getBody()->write(json_encode($inscrits));
return $response
->withHeader('content-type', 'application/json')
->withStatus(200);
} catch(PDOException $e){
$error = array("message" => $e->getMessage());
$response->getBody()->write(json_encode($error));
return $response
->withHeader('content-type', 'application/json')
->withStatus(500);
}
});
$app->post('/Inscrit/FromMail/', function(Request $request, Response $response,array $args){
$mail = $request->getParsedBody()["email"];
$query = 'SELECT * FROM Inscrit WHERE mail=:mail';
try{
$db = new Database();
$conn = $db->connect();
$stmt = $conn->prepare($query);
$stmt->bindValue(':mail', $mail, PDO::PARAM_STR);
$stmt->execute();
$inscrit = $stmt->fetchAll(PDO::FETCH_OBJ);
$db = null;
$response->getBody()->write(json_encode($inscrit));
return $response
->withHeader('content-type', 'application/json')
->withStatus(200);
} catch(PDOException $e){
$error = array("message" => $e->getMessage());
$response->getBody()->write(json_encode($error));
return $response
->withHeader('content-type', 'application/json')
->withStatus(500);
}
});
$app->put('/Inscrit/UpdatePassword/', function(Request $request, Response $response, array $args){
$mail = $request->getParsedBody()["email"];
$password = $request->getParsedBody()["password"];
$query = 'UPDATE Inscrit SET mdp=:password WHERE mail=:mail';
try{
$db = new Database();
$conn = $db->connect();
$stmt = $conn->prepare($query);
$stmt->bindValue(':mail', $mail, PDO::PARAM_STR);
$stmt->bindValue(':password', $password, PDO::PARAM_STR);
$result = $stmt->execute();
$db = null;
$response->getBody()->write(json_encode($result));
return $response
->withHeader('content-type', 'application/json')
->withStatus(200);
} catch(PDOException $e){
$error = array("message" => $e->getMessage());
$response->getBody()->write(json_encode($error));
return $response
->withHeader('content-type', 'application/json')
->withStatus(500);
}
});
$app->post('/Inscrit/add/', function(Request $request, Response $response, array $args){
$nom = $request->getParsedBody()["nom"];
$prenom = $request->getParsedBody()["prenom"];
$mail = $request->getParsedbody()["email"];
$password = $request->getParsedBody()["password"];
$query = "INSERT INTO Inscrit (nom, prenom, mail, mdp) VALUES (:nom, :prenom, :mail, :password);";
try{
$db = new Database();
$conn = $db->connect();
$stmt = $conn->prepare($query);
$stmt->bindValue(':nom', $nom, PDO::PARAM_STR);
$stmt->bindValue(':prenom', $prenom, PDO::PARAM_STR);
$stmt->bindValue(':mail', $mail, PDO::PARAM_STR);
$stmt->bindValue(':password', $password, PDO::PARAM_STR);
$result = $stmt->execute();
$db = null;
$response->getBody()->write(json_encode($result));
return $response
->withHeader('content-type', 'application/json')
->withStatus(200);
} catch(PDOException $e){
$error = array("message" => $e->getMessage());
$response->getBody()->write(json_encode($error));
return $response
->withHeader('content-type', 'application/json')
->withStatus(500);
}
});
$app->delete('/Inscrit/delete/', function (Request $request, Response $response, array $args) {
$email = $request->getParsedBody()["email"];
$query = "DELETE FROM Inscrit WHERE mail=:mail";
try{
$db = new Database();
$conn = $db->connect();
$stmt = $conn->prepare($query);
$stmt->bindValue(':mail', $email, PDO::PARAM_STR);
$result = $stmt->execute();
$db = null;
$response->getBody()->write(json_encode($result));
return $response
->withHeader('content-type', 'application/json')
->withStatus(200);
} catch(PDOException $e){
$error = array("message" => $e->getMessage());
$response->getBody()->write(json_encode($error));
return $response
->withHeader('content-type', 'application/json')
->withStatus(500);
}
});
?>

@ -0,0 +1,127 @@
<?php
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
use Slim\Factory\AppFactory;
use OpenApi\Annotations as OA;
/**
* @OA\Info(title="My First API", version="0.1")
*/
$app->addBodyParsingMiddleware();
$app->addRoutingMiddleware();
$app->addErrorMiddleware(true, true, true);
/**
* @OA\Get(path="/api/Operation",
* @OA\Response(response="200", description="Succes")
* @OA\Response(response="500", description="Bdd Error")
* )
*/
$app->post('/Operation/FromIdCompte/', function(Request $request, Response $response,array $args){
$idCompte = $request->getParsedBody()["id"];
$query = 'SELECT * FROM Operation WHERE compte=:id';
try{
$db = new Database();
$conn = $db->connect();
$stmt = $conn->prepare($query);
$stmt->bindValue(':id', $idCompte, PDO::PARAM_STR);
$stmt->execute();
$ope = $stmt->fetchAll(PDO::FETCH_OBJ);
$db = null;
$response->getBody()->write(json_encode($ope));
return $response
->withHeader('content-type', 'application/json')
->withStatus(200);
} catch(PDOException $e){
$error = array("message" => $e->getMessage());
$response->getBody()->write(json_encode($error));
return $response
->withHeader('content-type', 'application/json')
->withStatus(500);
}
});
$app->post('/Operation/add/', function(Request $request, Response $response, array $args){
$compte = $request->getParsedBody()["compte"];
$nom = $request->getParsedBody()["nom"];
$montant = $request->getParsedBody()["montant"];
$dateO = $request->getParsedBody()["dateO"];
$methodePayement = $request->getParsedBody()["methodePayement"];
$isDebit = $request->getParsedBody()["isDebit"];
$tag = $request->getParsedBody()["tag"];
$fromBanque = $request->getParsedBody()["fromBanque"];
$query = "INSERT INTO Operation (compte, nom, montant, dateO, methodePayement, isDebit, fromBanque, tag) SELECT :compte,:nom,:montant, STR_TO_DATE(:dateO, '%d/%m/%Y %H:%i:%s' ), :methodePayement, :isD, :fromBanque, :tag;";
try{
$db = new Database();
$conn = $db->connect();
$stmt = $conn->prepare($query);
$stmt->bindValue(':compte', $compte, PDO::PARAM_STR);
$stmt->bindValue(':nom', $nom, PDO::PARAM_STR);
$stmt->bindValue(':montant', $montant, PDO::PARAM_STR);
$stmt->bindValue(':dateO', $dateO, PDO::PARAM_STR);
$stmt->bindValue(':methodePayement', $methodePayement, PDO::PARAM_STR);
$stmt->bindValue(':isD', $isDebit, PDO::PARAM_BOOL);
$stmt->bindValue(':tag', $tag, PDO::PARAM_STR);
$stmt->bindValue(':fromBanque', $fromBanque, PDO::PARAM_BOOL);
$result = $stmt->execute();
$db = null;
$response->getBody()->write(json_encode($result));
return $response
->withHeader('content-type', 'application/json')
->withStatus(200);
} catch(PDOException $e){
$error = array("message" => $e->getMessage());
$response->getBody()->write(json_encode($error));
return $response
->withHeader('content-type', 'application/json')
->withStatus(500);
}
});
$app->delete('/Operation/delete/', function (Request $request, Response $response, array $args) {
$compte = $request->getParsedBody()["compte"];
$nom = $request->getParsedBody()["nom"];
$query = "DELETE FROM Operation WHERE compte=:compte AND nom=:nom";
try{
$db = new Database();
$conn = $db->connect();
$stmt = $conn->prepare($query);
$stmt->bindValue(':compte', $compte, PDO::PARAM_STR);
$stmt->bindValue(':nom', $nom, PDO::PARAM_STR);
$result = $stmt->execute();
$db = null;
$response->getBody()->write(json_encode($result));
return $response
->withHeader('content-type', 'application/json')
->withStatus(200);
} catch(PDOException $e){
$error = array("message" => $e->getMessage());
$response->getBody()->write(json_encode($error));
return $response
->withHeader('content-type', 'application/json')
->withStatus(500);
}
});
?>

@ -0,0 +1,125 @@
<?php
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
use Slim\Factory\AppFactory;
use OpenApi\Annotations as OA;
/**
* @OA\Info(title="My First API", version="0.1")
*/
$app->addBodyParsingMiddleware();
$app->addRoutingMiddleware();
$app->addErrorMiddleware(true, true, true);
/**
* @OA\Get(path="/api/Planification",
* @OA\Response(response="200", description="Succes")
* @OA\Response(response="500", description="Bdd Error")
* )
*/
$app->post('/Planification/FromIdCompte/', function(Request $request, Response $response,array $args){
$idCompte = $request->getParsedBody()["id"];
$query = 'SELECT * FROM Planification WHERE compte=:id';
try{
$db = new Database();
$conn = $db->connect();
$stmt = $conn->prepare($query);
$stmt->bindValue(':id', $idCompte, PDO::PARAM_STR);
$stmt->execute();
$ope = $stmt->fetchAll(PDO::FETCH_OBJ);
$db = null;
$response->getBody()->write(json_encode($ope));
return $response
->withHeader('content-type', 'application/json')
->withStatus(200);
} catch(PDOException $e){
$error = array("message" => $e->getMessage());
$response->getBody()->write(json_encode($error));
return $response
->withHeader('content-type', 'application/json')
->withStatus(500);
}
});
$app->post('/Planification/add/', function(Request $request, Response $response, array $args){
$compte = $request->getParsedBody()["compte"];
$nom = $request->getParsedBody()["nom"];
$montant = $request->getParsedBody()["montant"];
$dateO = $request->getParsedBody()["dateO"];
$methodePayement = $request->getParsedBody()["methodePayement"];
$isDebit = $request->getParsedBody()["isDebit"];
$tag = $request->getParsedBody()["tag"];
$query = "INSERT INTO Planification (compte, nom, montant, dateO, methodePayement, isDebit, tag) SELECT :compte,:nom,:montant, STR_TO_DATE(:dateO, '%d/%m/%Y %H:%i:%s' ), :methodePayement, :isD ,:tag;";
try{
$db = new Database();
$conn = $db->connect();
$stmt = $conn->prepare($query);
$stmt->bindValue(':compte', $compte, PDO::PARAM_STR);
$stmt->bindValue(':nom', $nom, PDO::PARAM_STR);
$stmt->bindValue(':montant', $montant, PDO::PARAM_STR);
$stmt->bindValue(':dateO', $dateO, PDO::PARAM_STR);
$stmt->bindValue(':methodePayement', $methodePayement, PDO::PARAM_STR);
$stmt->bindValue(':isD', $isDebit, PDO::PARAM_BOOL);
$stmt->bindValue(':tag', $tag, PDO::PARAM_STR);
$result = $stmt->execute();
$db = null;
$response->getBody()->write(json_encode($result));
return $response
->withHeader('content-type', 'application/json')
->withStatus(200);
} catch(PDOException $e){
$error = array("message" => $e->getMessage());
$response->getBody()->write(json_encode($error));
return $response
->withHeader('content-type', 'application/json')
->withStatus(500);
}
});
$app->delete('/Planification/delete/', function (Request $request, Response $response, array $args) {
$compte = $request->getParsedBody()["compte"];
$nom = $request->getParsedBody()["nom"];
$query = "DELETE FROM Planification WHERE compte=:compte AND nom=:nom";
try{
$db = new Database();
$conn = $db->connect();
$stmt = $conn->prepare($query);
$stmt->bindValue(':compte', $compte, PDO::PARAM_STR);
$stmt->bindValue(':nom', $nom, PDO::PARAM_STR);
$result = $stmt->execute();
$db = null;
$response->getBody()->write(json_encode($result));
return $response
->withHeader('content-type', 'application/json')
->withStatus(200);
} catch(PDOException $e){
$error = array("message" => $e->getMessage());
$response->getBody()->write(json_encode($error));
return $response
->withHeader('content-type', 'application/json')
->withStatus(500);
}
});
?>

@ -0,0 +1,7 @@
<?php
// autoload.php @generated by Composer
require_once __DIR__ . '/composer/autoload_real.php';
return ComposerAutoloaderInita934429c0ea4f4482346c5d296943a81::getLoader();

@ -0,0 +1,572 @@
<?php
/*
* This file is part of Composer.
*
* (c) Nils Adermann <naderman@naderman.de>
* Jordi Boggiano <j.boggiano@seld.be>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Composer\Autoload;
/**
* ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
*
* $loader = new \Composer\Autoload\ClassLoader();
*
* // register classes with namespaces
* $loader->add('Symfony\Component', __DIR__.'/component');
* $loader->add('Symfony', __DIR__.'/framework');
*
* // activate the autoloader
* $loader->register();
*
* // to enable searching the include path (eg. for PEAR packages)
* $loader->setUseIncludePath(true);
*
* In this example, if you try to use a class in the Symfony\Component
* namespace or one of its children (Symfony\Component\Console for instance),
* the autoloader will first look for the class under the component/
* directory, and it will then fallback to the framework/ directory if not
* found before giving up.
*
* This class is loosely based on the Symfony UniversalClassLoader.
*
* @author Fabien Potencier <fabien@symfony.com>
* @author Jordi Boggiano <j.boggiano@seld.be>
* @see https://www.php-fig.org/psr/psr-0/
* @see https://www.php-fig.org/psr/psr-4/
*/
class ClassLoader
{
/** @var ?string */
private $vendorDir;
// PSR-4
/**
* @var array[]
* @psalm-var array<string, array<string, int>>
*/
private $prefixLengthsPsr4 = array();
/**
* @var array[]
* @psalm-var array<string, array<int, string>>
*/
private $prefixDirsPsr4 = array();
/**
* @var array[]
* @psalm-var array<string, string>
*/
private $fallbackDirsPsr4 = array();
// PSR-0
/**
* @var array[]
* @psalm-var array<string, array<string, string[]>>
*/
private $prefixesPsr0 = array();
/**
* @var array[]
* @psalm-var array<string, string>
*/
private $fallbackDirsPsr0 = array();
/** @var bool */
private $useIncludePath = false;
/**
* @var string[]
* @psalm-var array<string, string>
*/
private $classMap = array();
/** @var bool */
private $classMapAuthoritative = false;
/**
* @var bool[]
* @psalm-var array<string, bool>
*/
private $missingClasses = array();
/** @var ?string */
private $apcuPrefix;
/**
* @var self[]
*/
private static $registeredLoaders = array();
/**
* @param ?string $vendorDir
*/
public function __construct($vendorDir = null)
{
$this->vendorDir = $vendorDir;
}
/**
* @return string[]
*/
public function getPrefixes()
{
if (!empty($this->prefixesPsr0)) {
return call_user_func_array('array_merge', array_values($this->prefixesPsr0));
}
return array();
}
/**
* @return array[]
* @psalm-return array<string, array<int, string>>
*/
public function getPrefixesPsr4()
{
return $this->prefixDirsPsr4;
}
/**
* @return array[]
* @psalm-return array<string, string>
*/
public function getFallbackDirs()
{
return $this->fallbackDirsPsr0;
}
/**
* @return array[]
* @psalm-return array<string, string>
*/
public function getFallbackDirsPsr4()
{
return $this->fallbackDirsPsr4;
}
/**
* @return string[] Array of classname => path
* @psalm-return array<string, string>
*/
public function getClassMap()
{
return $this->classMap;
}
/**
* @param string[] $classMap Class to filename map
* @psalm-param array<string, string> $classMap
*
* @return void
*/
public function addClassMap(array $classMap)
{
if ($this->classMap) {
$this->classMap = array_merge($this->classMap, $classMap);
} else {
$this->classMap = $classMap;
}
}
/**
* Registers a set of PSR-0 directories for a given prefix, either
* appending or prepending to the ones previously set for this prefix.
*
* @param string $prefix The prefix
* @param string[]|string $paths The PSR-0 root directories
* @param bool $prepend Whether to prepend the directories
*
* @return void
*/
public function add($prefix, $paths, $prepend = false)
{
if (!$prefix) {
if ($prepend) {
$this->fallbackDirsPsr0 = array_merge(
(array) $paths,
$this->fallbackDirsPsr0
);
} else {
$this->fallbackDirsPsr0 = array_merge(
$this->fallbackDirsPsr0,
(array) $paths
);
}
return;
}
$first = $prefix[0];
if (!isset($this->prefixesPsr0[$first][$prefix])) {
$this->prefixesPsr0[$first][$prefix] = (array) $paths;
return;
}
if ($prepend) {
$this->prefixesPsr0[$first][$prefix] = array_merge(
(array) $paths,
$this->prefixesPsr0[$first][$prefix]
);
} else {
$this->prefixesPsr0[$first][$prefix] = array_merge(
$this->prefixesPsr0[$first][$prefix],
(array) $paths
);
}
}
/**
* Registers a set of PSR-4 directories for a given namespace, either
* appending or prepending to the ones previously set for this namespace.
*
* @param string $prefix The prefix/namespace, with trailing '\\'
* @param string[]|string $paths The PSR-4 base directories
* @param bool $prepend Whether to prepend the directories
*
* @throws \InvalidArgumentException
*
* @return void
*/
public function addPsr4($prefix, $paths, $prepend = false)
{
if (!$prefix) {
// Register directories for the root namespace.
if ($prepend) {
$this->fallbackDirsPsr4 = array_merge(
(array) $paths,
$this->fallbackDirsPsr4
);
} else {
$this->fallbackDirsPsr4 = array_merge(
$this->fallbackDirsPsr4,
(array) $paths
);
}
} elseif (!isset($this->prefixDirsPsr4[$prefix])) {
// Register directories for a new namespace.
$length = strlen($prefix);
if ('\\' !== $prefix[$length - 1]) {
throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
}
$this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
$this->prefixDirsPsr4[$prefix] = (array) $paths;
} elseif ($prepend) {
// Prepend directories for an already registered namespace.
$this->prefixDirsPsr4[$prefix] = array_merge(
(array) $paths,
$this->prefixDirsPsr4[$prefix]
);
} else {
// Append directories for an already registered namespace.
$this->prefixDirsPsr4[$prefix] = array_merge(
$this->prefixDirsPsr4[$prefix],
(array) $paths
);
}
}
/**
* Registers a set of PSR-0 directories for a given prefix,
* replacing any others previously set for this prefix.
*
* @param string $prefix The prefix
* @param string[]|string $paths The PSR-0 base directories
*
* @return void
*/
public function set($prefix, $paths)
{
if (!$prefix) {
$this->fallbackDirsPsr0 = (array) $paths;
} else {
$this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
}
}
/**
* Registers a set of PSR-4 directories for a given namespace,
* replacing any others previously set for this namespace.
*
* @param string $prefix The prefix/namespace, with trailing '\\'
* @param string[]|string $paths The PSR-4 base directories
*
* @throws \InvalidArgumentException
*
* @return void
*/
public function setPsr4($prefix, $paths)
{
if (!$prefix) {
$this->fallbackDirsPsr4 = (array) $paths;
} else {
$length = strlen($prefix);
if ('\\' !== $prefix[$length - 1]) {
throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
}
$this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
$this->prefixDirsPsr4[$prefix] = (array) $paths;
}
}
/**
* Turns on searching the include path for class files.
*
* @param bool $useIncludePath
*
* @return void
*/
public function setUseIncludePath($useIncludePath)
{
$this->useIncludePath = $useIncludePath;
}
/**
* Can be used to check if the autoloader uses the include path to check
* for classes.
*
* @return bool
*/
public function getUseIncludePath()
{
return $this->useIncludePath;
}
/**
* Turns off searching the prefix and fallback directories for classes
* that have not been registered with the class map.
*
* @param bool $classMapAuthoritative
*
* @return void
*/
public function setClassMapAuthoritative($classMapAuthoritative)
{
$this->classMapAuthoritative = $classMapAuthoritative;
}
/**
* Should class lookup fail if not found in the current class map?
*
* @return bool
*/
public function isClassMapAuthoritative()
{
return $this->classMapAuthoritative;
}
/**
* APCu prefix to use to cache found/not-found classes, if the extension is enabled.
*
* @param string|null $apcuPrefix
*
* @return void
*/
public function setApcuPrefix($apcuPrefix)
{
$this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null;
}
/**
* The APCu prefix in use, or null if APCu caching is not enabled.
*
* @return string|null
*/
public function getApcuPrefix()
{
return $this->apcuPrefix;
}
/**
* Registers this instance as an autoloader.
*
* @param bool $prepend Whether to prepend the autoloader or not
*
* @return void
*/
public function register($prepend = false)
{
spl_autoload_register(array($this, 'loadClass'), true, $prepend);
if (null === $this->vendorDir) {
return;
}
if ($prepend) {
self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders;
} else {
unset(self::$registeredLoaders[$this->vendorDir]);
self::$registeredLoaders[$this->vendorDir] = $this;
}
}
/**
* Unregisters this instance as an autoloader.
*
* @return void
*/
public function unregister()
{
spl_autoload_unregister(array($this, 'loadClass'));
if (null !== $this->vendorDir) {
unset(self::$registeredLoaders[$this->vendorDir]);
}
}
/**
* Loads the given class or interface.
*
* @param string $class The name of the class
* @return true|null True if loaded, null otherwise
*/
public function loadClass($class)
{
if ($file = $this->findFile($class)) {
includeFile($file);
return true;
}
return null;
}
/**
* Finds the path to the file where the class is defined.
*
* @param string $class The name of the class
*
* @return string|false The path if found, false otherwise
*/
public function findFile($class)
{
// class map lookup
if (isset($this->classMap[$class])) {
return $this->classMap[$class];
}
if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
return false;
}
if (null !== $this->apcuPrefix) {
$file = apcu_fetch($this->apcuPrefix.$class, $hit);
if ($hit) {
return $file;
}
}
$file = $this->findFileWithExtension($class, '.php');
// Search for Hack files if we are running on HHVM
if (false === $file && defined('HHVM_VERSION')) {
$file = $this->findFileWithExtension($class, '.hh');
}
if (null !== $this->apcuPrefix) {
apcu_add($this->apcuPrefix.$class, $file);
}
if (false === $file) {
// Remember that this class does not exist.
$this->missingClasses[$class] = true;
}
return $file;
}
/**
* Returns the currently registered loaders indexed by their corresponding vendor directories.
*
* @return self[]
*/
public static function getRegisteredLoaders()
{
return self::$registeredLoaders;
}
/**
* @param string $class
* @param string $ext
* @return string|false
*/
private function findFileWithExtension($class, $ext)
{
// PSR-4 lookup
$logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
$first = $class[0];
if (isset($this->prefixLengthsPsr4[$first])) {
$subPath = $class;
while (false !== $lastPos = strrpos($subPath, '\\')) {
$subPath = substr($subPath, 0, $lastPos);
$search = $subPath . '\\';
if (isset($this->prefixDirsPsr4[$search])) {
$pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1);
foreach ($this->prefixDirsPsr4[$search] as $dir) {
if (file_exists($file = $dir . $pathEnd)) {
return $file;
}
}
}
}
}
// PSR-4 fallback dirs
foreach ($this->fallbackDirsPsr4 as $dir) {
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
return $file;
}
}
// PSR-0 lookup
if (false !== $pos = strrpos($class, '\\')) {
// namespaced class name
$logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
. strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
} else {
// PEAR-like class name
$logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
}
if (isset($this->prefixesPsr0[$first])) {
foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
if (0 === strpos($class, $prefix)) {
foreach ($dirs as $dir) {
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
return $file;
}
}
}
}
}
// PSR-0 fallback dirs
foreach ($this->fallbackDirsPsr0 as $dir) {
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
return $file;
}
}
// PSR-0 include paths.
if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
return $file;
}
return false;
}
}
/**
* Scope isolated include.
*
* Prevents access to $this/self from included files.
*
* @param string $file
* @return void
* @private
*/
function includeFile($file)
{
include $file;
}

@ -0,0 +1,350 @@
<?php
/*
* This file is part of Composer.
*
* (c) Nils Adermann <naderman@naderman.de>
* Jordi Boggiano <j.boggiano@seld.be>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Composer;
use Composer\Autoload\ClassLoader;
use Composer\Semver\VersionParser;
/**
* This class is copied in every Composer installed project and available to all
*
* See also https://getcomposer.org/doc/07-runtime.md#installed-versions
*
* To require its presence, you can require `composer-runtime-api ^2.0`
*/
class InstalledVersions
{
/**
* @var mixed[]|null
* @psalm-var array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}|array{}|null
*/
private static $installed;
/**
* @var bool|null
*/
private static $canGetVendors;
/**
* @var array[]
* @psalm-var array<string, array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}>
*/
private static $installedByVendor = array();
/**
* Returns a list of all package names which are present, either by being installed, replaced or provided
*
* @return string[]
* @psalm-return list<string>
*/
public static function getInstalledPackages()
{
$packages = array();
foreach (self::getInstalled() as $installed) {
$packages[] = array_keys($installed['versions']);
}
if (1 === \count($packages)) {
return $packages[0];
}
return array_keys(array_flip(\call_user_func_array('array_merge', $packages)));
}
/**
* Returns a list of all package names with a specific type e.g. 'library'
*
* @param string $type
* @return string[]
* @psalm-return list<string>
*/
public static function getInstalledPackagesByType($type)
{
$packagesByType = array();
foreach (self::getInstalled() as $installed) {
foreach ($installed['versions'] as $name => $package) {
if (isset($package['type']) && $package['type'] === $type) {
$packagesByType[] = $name;
}
}
}
return $packagesByType;
}
/**
* Checks whether the given package is installed
*
* This also returns true if the package name is provided or replaced by another package
*
* @param string $packageName
* @param bool $includeDevRequirements
* @return bool
*/
public static function isInstalled($packageName, $includeDevRequirements = true)
{
foreach (self::getInstalled() as $installed) {
if (isset($installed['versions'][$packageName])) {
return $includeDevRequirements || empty($installed['versions'][$packageName]['dev_requirement']);
}
}
return false;
}
/**
* Checks whether the given package satisfies a version constraint
*
* e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call:
*
* Composer\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3')
*
* @param VersionParser $parser Install composer/semver to have access to this class and functionality
* @param string $packageName
* @param string|null $constraint A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package
* @return bool
*/
public static function satisfies(VersionParser $parser, $packageName, $constraint)
{
$constraint = $parser->parseConstraints($constraint);
$provided = $parser->parseConstraints(self::getVersionRanges($packageName));
return $provided->matches($constraint);
}
/**
* Returns a version constraint representing all the range(s) which are installed for a given package
*
* It is easier to use this via isInstalled() with the $constraint argument if you need to check
* whether a given version of a package is installed, and not just whether it exists
*
* @param string $packageName
* @return string Version constraint usable with composer/semver
*/
public static function getVersionRanges($packageName)
{
foreach (self::getInstalled() as $installed) {
if (!isset($installed['versions'][$packageName])) {
continue;
}
$ranges = array();
if (isset($installed['versions'][$packageName]['pretty_version'])) {
$ranges[] = $installed['versions'][$packageName]['pretty_version'];
}
if (array_key_exists('aliases', $installed['versions'][$packageName])) {
$ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']);
}
if (array_key_exists('replaced', $installed['versions'][$packageName])) {
$ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']);
}
if (array_key_exists('provided', $installed['versions'][$packageName])) {
$ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']);
}
return implode(' || ', $ranges);
}
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
}
/**
* @param string $packageName
* @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present
*/
public static function getVersion($packageName)
{
foreach (self::getInstalled() as $installed) {
if (!isset($installed['versions'][$packageName])) {
continue;
}
if (!isset($installed['versions'][$packageName]['version'])) {
return null;
}
return $installed['versions'][$packageName]['version'];
}
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
}
/**
* @param string $packageName
* @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present
*/
public static function getPrettyVersion($packageName)
{
foreach (self::getInstalled() as $installed) {
if (!isset($installed['versions'][$packageName])) {
continue;
}
if (!isset($installed['versions'][$packageName]['pretty_version'])) {
return null;
}
return $installed['versions'][$packageName]['pretty_version'];
}
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
}
/**
* @param string $packageName
* @return string|null If the package is being replaced or provided but is not really installed, null will be returned as reference
*/
public static function getReference($packageName)
{
foreach (self::getInstalled() as $installed) {
if (!isset($installed['versions'][$packageName])) {
continue;
}
if (!isset($installed['versions'][$packageName]['reference'])) {
return null;
}
return $installed['versions'][$packageName]['reference'];
}
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
}
/**
* @param string $packageName
* @return string|null If the package is being replaced or provided but is not really installed, null will be returned as install path. Packages of type metapackages also have a null install path.
*/
public static function getInstallPath($packageName)
{
foreach (self::getInstalled() as $installed) {
if (!isset($installed['versions'][$packageName])) {
continue;
}
return isset($installed['versions'][$packageName]['install_path']) ? $installed['versions'][$packageName]['install_path'] : null;
}
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
}
/**
* @return array
* @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}
*/
public static function getRootPackage()
{
$installed = self::getInstalled();
return $installed[0]['root'];
}
/**
* Returns the raw installed.php data for custom implementations
*
* @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect.
* @return array[]
* @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}
*/
public static function getRawData()
{
@trigger_error('getRawData only returns the first dataset loaded, which may not be what you expect. Use getAllRawData() instead which returns all datasets for all autoloaders present in the process.', E_USER_DEPRECATED);
if (null === self::$installed) {
// only require the installed.php file if this file is loaded from its dumped location,
// and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
if (substr(__DIR__, -8, 1) !== 'C') {
self::$installed = include __DIR__ . '/installed.php';
} else {
self::$installed = array();
}
}
return self::$installed;
}
/**
* Returns the raw data of all installed.php which are currently loaded for custom implementations
*
* @return array[]
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}>
*/
public static function getAllRawData()
{
return self::getInstalled();
}
/**
* Lets you reload the static array from another file
*
* This is only useful for complex integrations in which a project needs to use
* this class but then also needs to execute another project's autoloader in process,
* and wants to ensure both projects have access to their version of installed.php.
*
* A typical case would be PHPUnit, where it would need to make sure it reads all
* the data it needs from this class, then call reload() with
* `require $CWD/vendor/composer/installed.php` (or similar) as input to make sure
* the project in which it runs can then also use this class safely, without
* interference between PHPUnit's dependencies and the project's dependencies.
*
* @param array[] $data A vendor/composer/installed.php data set
* @return void
*
* @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>} $data
*/
public static function reload($data)
{
self::$installed = $data;
self::$installedByVendor = array();
}
/**
* @return array[]
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}>
*/
private static function getInstalled()
{
if (null === self::$canGetVendors) {
self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders');
}
$installed = array();
if (self::$canGetVendors) {
foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) {
if (isset(self::$installedByVendor[$vendorDir])) {
$installed[] = self::$installedByVendor[$vendorDir];
} elseif (is_file($vendorDir.'/composer/installed.php')) {
$installed[] = self::$installedByVendor[$vendorDir] = require $vendorDir.'/composer/installed.php';
if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) {
self::$installed = $installed[count($installed) - 1];
}
}
}
}
if (null === self::$installed) {
// only require the installed.php file if this file is loaded from its dumped location,
// and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
if (substr(__DIR__, -8, 1) !== 'C') {
self::$installed = require __DIR__ . '/installed.php';
} else {
self::$installed = array();
}
}
$installed[] = self::$installed;
return $installed;
}
}

@ -0,0 +1,19 @@
Copyright (c) Nils Adermann, Jordi Boggiano
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.

@ -0,0 +1,15 @@
<?php
// autoload_classmap.php @generated by Composer
$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);
return array(
'Attribute' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/Attribute.php',
'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php',
'PhpToken' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/PhpToken.php',
'Stringable' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/Stringable.php',
'UnhandledMatchError' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php',
'ValueError' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/ValueError.php',
);

@ -0,0 +1,14 @@
<?php
// autoload_files.php @generated by Composer
$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);
return array(
'7b11c4dc42b3b3023073cb14e519683c' => $vendorDir . '/ralouphie/getallheaders/src/getallheaders.php',
'320cde22f66dd4f5d3fd621d3e88b98f' => $vendorDir . '/symfony/polyfill-ctype/bootstrap.php',
'a4a119a56e50fbb293281d9a48007e0e' => $vendorDir . '/symfony/polyfill-php80/bootstrap.php',
'253c157292f75eb38082b5acb06f3f01' => $vendorDir . '/nikic/fast-route/src/functions.php',
'6e3fae29631ef280660b3cdad06f25a8' => $vendorDir . '/symfony/deprecation-contracts/function.php',
);

@ -0,0 +1,9 @@
<?php
// autoload_namespaces.php @generated by Composer
$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);
return array(
);

@ -0,0 +1,26 @@
<?php
// autoload_psr4.php @generated by Composer
$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);
return array(
'Symfony\\Polyfill\\Php80\\' => array($vendorDir . '/symfony/polyfill-php80'),
'Symfony\\Polyfill\\Ctype\\' => array($vendorDir . '/symfony/polyfill-ctype'),
'Symfony\\Component\\Yaml\\' => array($vendorDir . '/symfony/yaml'),
'Symfony\\Component\\Finder\\' => array($vendorDir . '/symfony/finder'),
'Slim\\Psr7\\' => array($vendorDir . '/slim/psr7/src'),
'Slim\\' => array($vendorDir . '/slim/slim/Slim'),
'Psr\\Log\\' => array($vendorDir . '/psr/log/src'),
'Psr\\Http\\Server\\' => array($vendorDir . '/psr/http-server-handler/src', $vendorDir . '/psr/http-server-middleware/src'),
'Psr\\Http\\Message\\' => array($vendorDir . '/psr/http-factory/src', $vendorDir . '/psr/http-message/src'),
'Psr\\Container\\' => array($vendorDir . '/psr/container/src'),
'Psr\\Cache\\' => array($vendorDir . '/psr/cache/src'),
'OpenApi\\' => array($vendorDir . '/zircote/swagger-php/src'),
'Fig\\Http\\Message\\' => array($vendorDir . '/fig/http-message-util/src'),
'FastRoute\\' => array($vendorDir . '/nikic/fast-route/src'),
'Doctrine\\Deprecations\\' => array($vendorDir . '/doctrine/deprecations/lib/Doctrine/Deprecations'),
'Doctrine\\Common\\Lexer\\' => array($vendorDir . '/doctrine/lexer/src'),
'Doctrine\\Common\\Annotations\\' => array($vendorDir . '/doctrine/annotations/lib/Doctrine/Common/Annotations'),
);

@ -0,0 +1,80 @@
<?php
// autoload_real.php @generated by Composer
class ComposerAutoloaderInita934429c0ea4f4482346c5d296943a81
{
private static $loader;
public static function loadClassLoader($class)
{
if ('Composer\Autoload\ClassLoader' === $class) {
require __DIR__ . '/ClassLoader.php';
}
}
/**
* @return \Composer\Autoload\ClassLoader
*/
public static function getLoader()
{
if (null !== self::$loader) {
return self::$loader;
}
require __DIR__ . '/platform_check.php';
spl_autoload_register(array('ComposerAutoloaderInita934429c0ea4f4482346c5d296943a81', 'loadClassLoader'), true, true);
self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(\dirname(__FILE__)));
spl_autoload_unregister(array('ComposerAutoloaderInita934429c0ea4f4482346c5d296943a81', 'loadClassLoader'));
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
if ($useStaticLoader) {
require __DIR__ . '/autoload_static.php';
call_user_func(\Composer\Autoload\ComposerStaticInita934429c0ea4f4482346c5d296943a81::getInitializer($loader));
} else {
$map = require __DIR__ . '/autoload_namespaces.php';
foreach ($map as $namespace => $path) {
$loader->set($namespace, $path);
}
$map = require __DIR__ . '/autoload_psr4.php';
foreach ($map as $namespace => $path) {
$loader->setPsr4($namespace, $path);
}
$classMap = require __DIR__ . '/autoload_classmap.php';
if ($classMap) {
$loader->addClassMap($classMap);
}
}
$loader->register(true);
if ($useStaticLoader) {
$includeFiles = Composer\Autoload\ComposerStaticInita934429c0ea4f4482346c5d296943a81::$files;
} else {
$includeFiles = require __DIR__ . '/autoload_files.php';
}
foreach ($includeFiles as $fileIdentifier => $file) {
composerRequirea934429c0ea4f4482346c5d296943a81($fileIdentifier, $file);
}
return $loader;
}
}
/**
* @param string $fileIdentifier
* @param string $file
* @return void
*/
function composerRequirea934429c0ea4f4482346c5d296943a81($fileIdentifier, $file)
{
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
$GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
require $file;
}
}

@ -0,0 +1,143 @@
<?php
// autoload_static.php @generated by Composer
namespace Composer\Autoload;
class ComposerStaticInita934429c0ea4f4482346c5d296943a81
{
public static $files = array (
'7b11c4dc42b3b3023073cb14e519683c' => __DIR__ . '/..' . '/ralouphie/getallheaders/src/getallheaders.php',
'320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php',
'a4a119a56e50fbb293281d9a48007e0e' => __DIR__ . '/..' . '/symfony/polyfill-php80/bootstrap.php',
'253c157292f75eb38082b5acb06f3f01' => __DIR__ . '/..' . '/nikic/fast-route/src/functions.php',
'6e3fae29631ef280660b3cdad06f25a8' => __DIR__ . '/..' . '/symfony/deprecation-contracts/function.php',
);
public static $prefixLengthsPsr4 = array (
'S' =>
array (
'Symfony\\Polyfill\\Php80\\' => 23,
'Symfony\\Polyfill\\Ctype\\' => 23,
'Symfony\\Component\\Yaml\\' => 23,
'Symfony\\Component\\Finder\\' => 25,
'Slim\\Psr7\\' => 10,
'Slim\\' => 5,
),
'P' =>
array (
'Psr\\Log\\' => 8,
'Psr\\Http\\Server\\' => 16,
'Psr\\Http\\Message\\' => 17,
'Psr\\Container\\' => 14,
'Psr\\Cache\\' => 10,
),
'O' =>
array (
'OpenApi\\' => 8,
),
'F' =>
array (
'Fig\\Http\\Message\\' => 17,
'FastRoute\\' => 10,
),
'D' =>
array (
'Doctrine\\Deprecations\\' => 22,
'Doctrine\\Common\\Lexer\\' => 22,
'Doctrine\\Common\\Annotations\\' => 28,
),
);
public static $prefixDirsPsr4 = array (
'Symfony\\Polyfill\\Php80\\' =>
array (
0 => __DIR__ . '/..' . '/symfony/polyfill-php80',
),
'Symfony\\Polyfill\\Ctype\\' =>
array (
0 => __DIR__ . '/..' . '/symfony/polyfill-ctype',
),
'Symfony\\Component\\Yaml\\' =>
array (
0 => __DIR__ . '/..' . '/symfony/yaml',
),
'Symfony\\Component\\Finder\\' =>
array (
0 => __DIR__ . '/..' . '/symfony/finder',
),
'Slim\\Psr7\\' =>
array (
0 => __DIR__ . '/..' . '/slim/psr7/src',
),
'Slim\\' =>
array (
0 => __DIR__ . '/..' . '/slim/slim/Slim',
),
'Psr\\Log\\' =>
array (
0 => __DIR__ . '/..' . '/psr/log/src',
),
'Psr\\Http\\Server\\' =>
array (
0 => __DIR__ . '/..' . '/psr/http-server-handler/src',
1 => __DIR__ . '/..' . '/psr/http-server-middleware/src',
),
'Psr\\Http\\Message\\' =>
array (
0 => __DIR__ . '/..' . '/psr/http-factory/src',
1 => __DIR__ . '/..' . '/psr/http-message/src',
),
'Psr\\Container\\' =>
array (
0 => __DIR__ . '/..' . '/psr/container/src',
),
'Psr\\Cache\\' =>
array (
0 => __DIR__ . '/..' . '/psr/cache/src',
),
'OpenApi\\' =>
array (
0 => __DIR__ . '/..' . '/zircote/swagger-php/src',
),
'Fig\\Http\\Message\\' =>
array (
0 => __DIR__ . '/..' . '/fig/http-message-util/src',
),
'FastRoute\\' =>
array (
0 => __DIR__ . '/..' . '/nikic/fast-route/src',
),
'Doctrine\\Deprecations\\' =>
array (
0 => __DIR__ . '/..' . '/doctrine/deprecations/lib/Doctrine/Deprecations',
),
'Doctrine\\Common\\Lexer\\' =>
array (
0 => __DIR__ . '/..' . '/doctrine/lexer/src',
),
'Doctrine\\Common\\Annotations\\' =>
array (
0 => __DIR__ . '/..' . '/doctrine/annotations/lib/Doctrine/Common/Annotations',
),
);
public static $classMap = array (
'Attribute' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/Attribute.php',
'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php',
'PhpToken' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/PhpToken.php',
'Stringable' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/Stringable.php',
'UnhandledMatchError' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php',
'ValueError' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/ValueError.php',
);
public static function getInitializer(ClassLoader $loader)
{
return \Closure::bind(function () use ($loader) {
$loader->prefixLengthsPsr4 = ComposerStaticInita934429c0ea4f4482346c5d296943a81::$prefixLengthsPsr4;
$loader->prefixDirsPsr4 = ComposerStaticInita934429c0ea4f4482346c5d296943a81::$prefixDirsPsr4;
$loader->classMap = ComposerStaticInita934429c0ea4f4482346c5d296943a81::$classMap;
}, null, ClassLoader::class);
}
}

File diff suppressed because it is too large Load Diff

@ -0,0 +1,224 @@
<?php return array(
'root' => array(
'pretty_version' => 'dev-master',
'version' => 'dev-master',
'type' => 'library',
'install_path' => __DIR__ . '/../../',
'aliases' => array(),
'reference' => '0d6979f482a4dc4159775749125b647077c1dbcd',
'name' => '__root__',
'dev' => true,
),
'versions' => array(
'__root__' => array(
'pretty_version' => 'dev-master',
'version' => 'dev-master',
'type' => 'library',
'install_path' => __DIR__ . '/../../',
'aliases' => array(),
'reference' => '0d6979f482a4dc4159775749125b647077c1dbcd',
'dev_requirement' => false,
),
'doctrine/annotations' => array(
'pretty_version' => '1.14.1',
'version' => '1.14.1.0',
'type' => 'library',
'install_path' => __DIR__ . '/../doctrine/annotations',
'aliases' => array(),
'reference' => '9e034d7a70032d422169f27d8759e8d84abb4f51',
'dev_requirement' => false,
),
'doctrine/deprecations' => array(
'pretty_version' => 'v1.0.0',
'version' => '1.0.0.0',
'type' => 'library',
'install_path' => __DIR__ . '/../doctrine/deprecations',
'aliases' => array(),
'reference' => '0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de',
'dev_requirement' => false,
),
'doctrine/lexer' => array(
'pretty_version' => '2.0.0',
'version' => '2.0.0.0',
'type' => 'library',
'install_path' => __DIR__ . '/../doctrine/lexer',
'aliases' => array(),
'reference' => '3cf140b81e55d5d640f73367d829db7e3023ef69',
'dev_requirement' => false,
),
'fig/http-message-util' => array(
'pretty_version' => '1.1.5',
'version' => '1.1.5.0',
'type' => 'library',
'install_path' => __DIR__ . '/../fig/http-message-util',
'aliases' => array(),
'reference' => '9d94dc0154230ac39e5bf89398b324a86f63f765',
'dev_requirement' => false,
),
'nikic/fast-route' => array(
'pretty_version' => 'v1.3.0',
'version' => '1.3.0.0',
'type' => 'library',
'install_path' => __DIR__ . '/../nikic/fast-route',
'aliases' => array(),
'reference' => '181d480e08d9476e61381e04a71b34dc0432e812',
'dev_requirement' => false,
),
'psr/cache' => array(
'pretty_version' => '3.0.0',
'version' => '3.0.0.0',
'type' => 'library',
'install_path' => __DIR__ . '/../psr/cache',
'aliases' => array(),
'reference' => 'aa5030cfa5405eccfdcb1083ce040c2cb8d253bf',
'dev_requirement' => false,
),
'psr/container' => array(
'pretty_version' => '2.0.2',
'version' => '2.0.2.0',
'type' => 'library',
'install_path' => __DIR__ . '/../psr/container',
'aliases' => array(),
'reference' => 'c71ecc56dfe541dbd90c5360474fbc405f8d5963',
'dev_requirement' => false,
),
'psr/http-factory' => array(
'pretty_version' => '1.0.1',
'version' => '1.0.1.0',
'type' => 'library',
'install_path' => __DIR__ . '/../psr/http-factory',
'aliases' => array(),
'reference' => '12ac7fcd07e5b077433f5f2bee95b3a771bf61be',
'dev_requirement' => false,
),
'psr/http-factory-implementation' => array(
'dev_requirement' => false,
'provided' => array(
0 => '1.0',
),
),
'psr/http-message' => array(
'pretty_version' => '1.0.1',
'version' => '1.0.1.0',
'type' => 'library',
'install_path' => __DIR__ . '/../psr/http-message',
'aliases' => array(),
'reference' => 'f6561bf28d520154e4b0ec72be95418abe6d9363',
'dev_requirement' => false,
),
'psr/http-message-implementation' => array(
'dev_requirement' => false,
'provided' => array(
0 => '1.0',
),
),
'psr/http-server-handler' => array(
'pretty_version' => '1.0.1',
'version' => '1.0.1.0',
'type' => 'library',
'install_path' => __DIR__ . '/../psr/http-server-handler',
'aliases' => array(),
'reference' => 'aff2f80e33b7f026ec96bb42f63242dc50ffcae7',
'dev_requirement' => false,
),
'psr/http-server-middleware' => array(
'pretty_version' => '1.0.1',
'version' => '1.0.1.0',
'type' => 'library',
'install_path' => __DIR__ . '/../psr/http-server-middleware',
'aliases' => array(),
'reference' => '2296f45510945530b9dceb8bcedb5cb84d40c5f5',
'dev_requirement' => false,
),
'psr/log' => array(
'pretty_version' => '3.0.0',
'version' => '3.0.0.0',
'type' => 'library',
'install_path' => __DIR__ . '/../psr/log',
'aliases' => array(),
'reference' => 'fe5ea303b0887d5caefd3d431c3e61ad47037001',
'dev_requirement' => false,
),
'ralouphie/getallheaders' => array(
'pretty_version' => '3.0.3',
'version' => '3.0.3.0',
'type' => 'library',
'install_path' => __DIR__ . '/../ralouphie/getallheaders',
'aliases' => array(),
'reference' => '120b605dfeb996808c31b6477290a714d356e822',
'dev_requirement' => false,
),
'slim/psr7' => array(
'pretty_version' => '1.6',
'version' => '1.6.0.0',
'type' => 'library',
'install_path' => __DIR__ . '/../slim/psr7',
'aliases' => array(),
'reference' => '3471c22c1a0d26c51c78f6aeb06489d38cf46a4d',
'dev_requirement' => false,
),
'slim/slim' => array(
'pretty_version' => '4.11.0',
'version' => '4.11.0.0',
'type' => 'library',
'install_path' => __DIR__ . '/../slim/slim',
'aliases' => array(),
'reference' => 'b0f4ca393ea037be9ac7292ba7d0a34d18bac0c7',
'dev_requirement' => false,
),
'symfony/deprecation-contracts' => array(
'pretty_version' => 'v3.2.0',
'version' => '3.2.0.0',
'type' => 'library',
'install_path' => __DIR__ . '/../symfony/deprecation-contracts',
'aliases' => array(),
'reference' => '1ee04c65529dea5d8744774d474e7cbd2f1206d3',
'dev_requirement' => false,
),
'symfony/finder' => array(
'pretty_version' => 'v6.2.0',
'version' => '6.2.0.0',
'type' => 'library',
'install_path' => __DIR__ . '/../symfony/finder',
'aliases' => array(),
'reference' => 'eb2355f69519e4ef33f1835bca4c935f5d42e570',
'dev_requirement' => false,
),
'symfony/polyfill-ctype' => array(
'pretty_version' => 'v1.27.0',
'version' => '1.27.0.0',
'type' => 'library',
'install_path' => __DIR__ . '/../symfony/polyfill-ctype',
'aliases' => array(),
'reference' => '5bbc823adecdae860bb64756d639ecfec17b050a',
'dev_requirement' => false,
),
'symfony/polyfill-php80' => array(
'pretty_version' => 'v1.27.0',
'version' => '1.27.0.0',
'type' => 'library',
'install_path' => __DIR__ . '/../symfony/polyfill-php80',
'aliases' => array(),
'reference' => '7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936',
'dev_requirement' => false,
),
'symfony/yaml' => array(
'pretty_version' => 'v6.2.0',
'version' => '6.2.0.0',
'type' => 'library',
'install_path' => __DIR__ . '/../symfony/yaml',
'aliases' => array(),
'reference' => 'f2570f21bd4adc3589aa3133323273995109bae0',
'dev_requirement' => false,
),
'zircote/swagger-php' => array(
'pretty_version' => '4.5.1',
'version' => '4.5.1.0',
'type' => 'library',
'install_path' => __DIR__ . '/../zircote/swagger-php',
'aliases' => array(),
'reference' => 'eb84fb4d65a327e604812fbddc6c27f69b9ed6e2',
'dev_requirement' => false,
),
),
);

@ -0,0 +1,26 @@
<?php
// platform_check.php @generated by Composer
$issues = array();
if (!(PHP_VERSION_ID >= 80100)) {
$issues[] = 'Your Composer dependencies require a PHP version ">= 8.1.0". You are running ' . PHP_VERSION . '.';
}
if ($issues) {
if (!headers_sent()) {
header('HTTP/1.1 500 Internal Server Error');
}
if (!ini_get('display_errors')) {
if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') {
fwrite(STDERR, 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . implode(PHP_EOL, $issues) . PHP_EOL.PHP_EOL);
} elseif (!headers_sent()) {
echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL;
}
}
trigger_error(
'Composer detected issues in your platform: ' . implode(' ', $issues),
E_USER_ERROR
);
}

@ -0,0 +1,19 @@
Copyright (c) 2006-2013 Doctrine Project
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.

@ -0,0 +1,24 @@
⚠️ PHP 8 introduced
[attributes](https://www.php.net/manual/en/language.attributes.overview.php),
which are a native replacement for annotations. As such, this library is
considered feature complete, and should receive exclusively bugfixes and
security fixes.
# Doctrine Annotations
[![Build Status](https://github.com/doctrine/annotations/workflows/Continuous%20Integration/badge.svg?label=build)](https://github.com/doctrine/persistence/actions)
[![Dependency Status](https://www.versioneye.com/package/php--doctrine--annotations/badge.png)](https://www.versioneye.com/package/php--doctrine--annotations)
[![Reference Status](https://www.versioneye.com/php/doctrine:annotations/reference_badge.svg)](https://www.versioneye.com/php/doctrine:annotations/references)
[![Total Downloads](https://poser.pugx.org/doctrine/annotations/downloads.png)](https://packagist.org/packages/doctrine/annotations)
[![Latest Stable Version](https://img.shields.io/packagist/v/doctrine/annotations.svg?label=stable)](https://packagist.org/packages/doctrine/annotations)
Docblock Annotations Parser library (extracted from [Doctrine Common](https://github.com/doctrine/common)).
## Documentation
See the [doctrine-project website](https://www.doctrine-project.org/projects/doctrine-annotations/en/latest/index.html).
## Contributing
When making a pull request, make sure your changes follow the
[Coding Standard Guidelines](https://www.doctrine-project.org/projects/doctrine-coding-standard/en/current/reference/index.html#introduction).

@ -0,0 +1,72 @@
{
"name": "doctrine/annotations",
"description": "Docblock Annotations Parser",
"license": "MIT",
"type": "library",
"keywords": [
"annotations",
"docblock",
"parser"
],
"authors": [
{
"name": "Guilherme Blanco",
"email": "guilhermeblanco@gmail.com"
},
{
"name": "Roman Borschel",
"email": "roman@code-factory.org"
},
{
"name": "Benjamin Eberlei",
"email": "kontakt@beberlei.de"
},
{
"name": "Jonathan Wage",
"email": "jonwage@gmail.com"
},
{
"name": "Johannes Schmitt",
"email": "schmittjoh@gmail.com"
}
],
"homepage": "https://www.doctrine-project.org/projects/annotations.html",
"require": {
"php": "^7.1 || ^8.0",
"ext-tokenizer": "*",
"doctrine/lexer": "^1 || ^2",
"psr/cache": "^1 || ^2 || ^3"
},
"require-dev": {
"doctrine/cache": "^1.11 || ^2.0",
"doctrine/coding-standard": "^9 || ^10",
"phpstan/phpstan": "~1.4.10 || ^1.8.0",
"phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
"symfony/cache": "^4.4 || ^5.4 || ^6",
"vimeo/psalm": "^4.10"
},
"suggest": {
"php": "PHP 8.0 or higher comes with attributes, a native replacement for annotations"
},
"autoload": {
"psr-4": {
"Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations"
}
},
"autoload-dev": {
"psr-4": {
"Doctrine\\Performance\\Common\\Annotations\\": "tests/Doctrine/Performance/Common/Annotations",
"Doctrine\\Tests\\Common\\Annotations\\": "tests/Doctrine/Tests/Common/Annotations"
},
"files": [
"tests/Doctrine/Tests/Common/Annotations/Fixtures/functions.php",
"tests/Doctrine/Tests/Common/Annotations/Fixtures/SingleClassLOC1000.php"
]
},
"config": {
"allow-plugins": {
"dealerdirect/phpcodesniffer-composer-installer": true
},
"sort-packages": true
}
}

@ -0,0 +1,252 @@
Handling Annotations
====================
There are several different approaches to handling annotations in PHP.
Doctrine Annotations maps docblock annotations to PHP classes. Because
not all docblock annotations are used for metadata purposes a filter is
applied to ignore or skip classes that are not Doctrine annotations.
Take a look at the following code snippet:
.. code-block:: php
namespace MyProject\Entities;
use Doctrine\ORM\Mapping AS ORM;
use Symfony\Component\Validator\Constraints AS Assert;
/**
* @author Benjamin Eberlei
* @ORM\Entity
* @MyProject\Annotations\Foobarable
*/
class User
{
/**
* @ORM\Id @ORM\Column @ORM\GeneratedValue
* @dummy
* @var int
*/
private $id;
/**
* @ORM\Column(type="string")
* @Assert\NotEmpty
* @Assert\Email
* @var string
*/
private $email;
}
In this snippet you can see a variety of different docblock annotations:
- Documentation annotations such as ``@var`` and ``@author``. These
annotations are ignored and never considered for throwing an
exception due to wrongly used annotations.
- Annotations imported through use statements. The statement ``use
Doctrine\ORM\Mapping AS ORM`` makes all classes under that namespace
available as ``@ORM\ClassName``. Same goes for the import of
``@Assert``.
- The ``@dummy`` annotation. It is not a documentation annotation and
not ignored. For Doctrine Annotations it is not entirely clear how
to handle this annotation. Depending on the configuration an exception
(unknown annotation) will be thrown when parsing this annotation.
- The fully qualified annotation ``@MyProject\Annotations\Foobarable``.
This is transformed directly into the given class name.
How are these annotations loaded? From looking at the code you could
guess that the ORM Mapping, Assert Validation and the fully qualified
annotation can just be loaded using
the defined PHP autoloaders. This is not the case however: For error
handling reasons every check for class existence inside the
``AnnotationReader`` sets the second parameter $autoload
of ``class_exists($name, $autoload)`` to false. To work flawlessly the
``AnnotationReader`` requires silent autoloaders which many autoloaders are
not. Silent autoloading is NOT part of the `PSR-0 specification
<https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md>`_
for autoloading.
This is why Doctrine Annotations uses its own autoloading mechanism
through a global registry. If you are wondering about the annotation
registry being global, there is no other way to solve the architectural
problems of autoloading annotation classes in a straightforward fashion.
Additionally if you think about PHP autoloading then you recognize it is
a global as well.
To anticipate the configuration section, making the above PHP class work
with Doctrine Annotations requires this setup:
.. code-block:: php
use Doctrine\Common\Annotations\AnnotationReader;
use Doctrine\Common\Annotations\AnnotationRegistry;
AnnotationRegistry::registerFile("/path/to/doctrine/lib/Doctrine/ORM/Mapping/Driver/DoctrineAnnotations.php");
AnnotationRegistry::registerAutoloadNamespace("Symfony\Component\Validator\Constraint", "/path/to/symfony/src");
AnnotationRegistry::registerAutoloadNamespace("MyProject\Annotations", "/path/to/myproject/src");
$reader = new AnnotationReader();
AnnotationReader::addGlobalIgnoredName('dummy');
The second block with the annotation registry calls registers all the
three different annotation namespaces that are used.
Doctrine Annotations saves all its annotations in a single file, that is
why ``AnnotationRegistry#registerFile`` is used in contrast to
``AnnotationRegistry#registerAutoloadNamespace`` which creates a PSR-0
compatible loading mechanism for class to file names.
In the third block, we create the actual ``AnnotationReader`` instance.
Note that we also add ``dummy`` to the global list of ignored
annotations for which we do not throw exceptions. Setting this is
necessary in our example case, otherwise ``@dummy`` would trigger an
exception to be thrown during the parsing of the docblock of
``MyProject\Entities\User#id``.
Setup and Configuration
-----------------------
To use the annotations library is simple, you just need to create a new
``AnnotationReader`` instance:
.. code-block:: php
$reader = new \Doctrine\Common\Annotations\AnnotationReader();
This creates a simple annotation reader with no caching other than in
memory (in php arrays). Since parsing docblocks can be expensive you
should cache this process by using a caching reader.
To cache annotations, you can create a ``Doctrine\Common\Annotations\PsrCachedReader``.
This reader decorates the original reader and stores all annotations in a PSR-6
cache:
.. code-block:: php
use Doctrine\Common\Annotations\AnnotationReader;
use Doctrine\Common\Annotations\PsrCachedReader;
$cache = ... // instantiate a PSR-6 Cache pool
$reader = new PsrCachedReader(
new AnnotationReader(),
$cache,
$debug = true
);
The ``debug`` flag is used here as well to invalidate the cache files
when the PHP class with annotations changed and should be used during
development.
.. warning ::
The ``AnnotationReader`` works and caches under the
assumption that all annotations of a doc-block are processed at
once. That means that annotation classes that do not exist and
aren't loaded and cannot be autoloaded (using the
AnnotationRegistry) would never be visible and not accessible if a
cache is used unless the cache is cleared and the annotations
requested again, this time with all annotations defined.
By default the annotation reader returns a list of annotations with
numeric indexes. If you want your annotations to be indexed by their
class name you can wrap the reader in an ``IndexedReader``:
.. code-block:: php
use Doctrine\Common\Annotations\AnnotationReader;
use Doctrine\Common\Annotations\IndexedReader;
$reader = new IndexedReader(new AnnotationReader());
.. warning::
You should never wrap the indexed reader inside a cached reader,
only the other way around. This way you can re-use the cache with
indexed or numeric keys, otherwise your code may experience failures
due to caching in a numerical or indexed format.
Registering Annotations
~~~~~~~~~~~~~~~~~~~~~~~
As explained in the introduction, Doctrine Annotations uses its own
autoloading mechanism to determine if a given annotation has a
corresponding PHP class that can be autoloaded. For annotation
autoloading you have to configure the
``Doctrine\Common\Annotations\AnnotationRegistry``. There are three
different mechanisms to configure annotation autoloading:
- Calling ``AnnotationRegistry#registerFile($file)`` to register a file
that contains one or more annotation classes.
- Calling ``AnnotationRegistry#registerNamespace($namespace, $dirs =
null)`` to register that the given namespace contains annotations and
that their base directory is located at the given $dirs or in the
include path if ``NULL`` is passed. The given directories should *NOT*
be the directory where classes of the namespace are in, but the base
directory of the root namespace. The AnnotationRegistry uses a
namespace to directory separator approach to resolve the correct path.
- Calling ``AnnotationRegistry#registerLoader($callable)`` to register
an autoloader callback. The callback accepts the class as first and
only parameter and has to return ``true`` if the corresponding file
was found and included.
.. note::
Loaders have to fail silently, if a class is not found even if it
matches for example the namespace prefix of that loader. Never is a
loader to throw a warning or exception if the loading failed
otherwise parsing doc block annotations will become a huge pain.
A sample loader callback could look like:
.. code-block:: php
use Doctrine\Common\Annotations\AnnotationRegistry;
use Symfony\Component\ClassLoader\UniversalClassLoader;
AnnotationRegistry::registerLoader(function($class) {
$file = str_replace("\\", DIRECTORY_SEPARATOR, $class) . ".php";
if (file_exists("/my/base/path/" . $file)) {
// file_exists() makes sure that the loader fails silently
require "/my/base/path/" . $file;
}
});
$loader = new UniversalClassLoader();
AnnotationRegistry::registerLoader(array($loader, "loadClass"));
Ignoring missing exceptions
~~~~~~~~~~~~~~~~~~~~~~~~~~~
By default an exception is thrown from the ``AnnotationReader`` if an
annotation was found that:
- is not part of the list of ignored "documentation annotations";
- was not imported through a use statement;
- is not a fully qualified class that exists.
You can disable this behavior for specific names if your docblocks do
not follow strict requirements:
.. code-block:: php
$reader = new \Doctrine\Common\Annotations\AnnotationReader();
AnnotationReader::addGlobalIgnoredName('foo');
PHP Imports
~~~~~~~~~~~
By default the annotation reader parses the use-statement of a php file
to gain access to the import rules and register them for the annotation
processing. Only if you are using PHP Imports can you validate the
correct usage of annotations and throw exceptions if you misspelled an
annotation. This mechanism is enabled by default.
To ease the upgrade path, we still allow you to disable this mechanism.
Note however that we will remove this in future versions:
.. code-block:: php
$reader = new \Doctrine\Common\Annotations\AnnotationReader();
$reader->setEnabledPhpImports(false);

@ -0,0 +1,443 @@
Custom Annotation Classes
=========================
If you want to define your own annotations, you just have to group them
in a namespace and register this namespace in the ``AnnotationRegistry``.
Annotation classes have to contain a class-level docblock with the text
``@Annotation``:
.. code-block:: php
namespace MyCompany\Annotations;
/** @Annotation */
class Bar
{
// some code
}
Inject annotation values
------------------------
The annotation parser checks if the annotation constructor has arguments,
if so then it will pass the value array, otherwise it will try to inject
values into public properties directly:
.. code-block:: php
namespace MyCompany\Annotations;
/**
* @Annotation
*
* Some Annotation using a constructor
*/
class Bar
{
private $foo;
public function __construct(array $values)
{
$this->foo = $values['foo'];
}
}
/**
* @Annotation
*
* Some Annotation without a constructor
*/
class Foo
{
public $bar;
}
Optional: Constructors with Named Parameters
--------------------------------------------
Starting with Annotations v1.11 a new annotation instantiation strategy
is available that aims at compatibility of Annotation classes with the PHP 8
attribute feature. You need to declare a constructor with regular parameter
names that match the named arguments in the annotation syntax.
To enable this feature, you can tag your annotation class with
``@NamedArgumentConstructor`` (available from v1.12) or implement the
``Doctrine\Common\Annotations\NamedArgumentConstructorAnnotation`` interface
(available from v1.11 and deprecated as of v1.12).
When using the ``@NamedArgumentConstructor`` tag, the first argument of the
constructor is considered as the default one.
Usage with the ``@NamedArgumentConstructor`` tag
.. code-block:: php
namespace MyCompany\Annotations;
/**
* @Annotation
* @NamedArgumentConstructor
*/
class Bar implements NamedArgumentConstructorAnnotation
{
private $foo;
public function __construct(string $foo)
{
$this->foo = $foo;
}
}
/** Usable with @Bar(foo="baz") */
/** Usable with @Bar("baz") */
In combination with PHP 8's constructor property promotion feature
you can simplify this to:
.. code-block:: php
namespace MyCompany\Annotations;
/**
* @Annotation
* @NamedArgumentConstructor
*/
class Bar implements NamedArgumentConstructorAnnotation
{
public function __construct(private string $foo) {}
}
Usage with the
``Doctrine\Common\Annotations\NamedArgumentConstructorAnnotation``
interface (v1.11, deprecated as of v1.12):
.. code-block:: php
namespace MyCompany\Annotations;
use Doctrine\Common\Annotations\NamedArgumentConstructorAnnotation;
/** @Annotation */
class Bar implements NamedArgumentConstructorAnnotation
{
private $foo;
public function __construct(private string $foo) {}
}
/** Usable with @Bar(foo="baz") */
Annotation Target
-----------------
``@Target`` indicates the kinds of class elements to which an annotation
type is applicable. Then you could define one or more targets:
- ``CLASS`` Allowed in class docblocks
- ``PROPERTY`` Allowed in property docblocks
- ``METHOD`` Allowed in the method docblocks
- ``FUNCTION`` Allowed in function dockblocks
- ``ALL`` Allowed in class, property, method and function docblocks
- ``ANNOTATION`` Allowed inside other annotations
If the annotations is not allowed in the current context, an
``AnnotationException`` is thrown.
.. code-block:: php
namespace MyCompany\Annotations;
/**
* @Annotation
* @Target({"METHOD","PROPERTY"})
*/
class Bar
{
// some code
}
/**
* @Annotation
* @Target("CLASS")
*/
class Foo
{
// some code
}
Attribute types
---------------
The annotation parser checks the given parameters using the phpdoc
annotation ``@var``, The data type could be validated using the ``@var``
annotation on the annotation properties or using the ``@Attributes`` and
``@Attribute`` annotations.
If the data type does not match you get an ``AnnotationException``
.. code-block:: php
namespace MyCompany\Annotations;
/**
* @Annotation
* @Target({"METHOD","PROPERTY"})
*/
class Bar
{
/** @var mixed */
public $mixed;
/** @var boolean */
public $boolean;
/** @var bool */
public $bool;
/** @var float */
public $float;
/** @var string */
public $string;
/** @var integer */
public $integer;
/** @var array */
public $array;
/** @var SomeAnnotationClass */
public $annotation;
/** @var array<integer> */
public $arrayOfIntegers;
/** @var array<SomeAnnotationClass> */
public $arrayOfAnnotations;
}
/**
* @Annotation
* @Target({"METHOD","PROPERTY"})
* @Attributes({
* @Attribute("stringProperty", type = "string"),
* @Attribute("annotProperty", type = "SomeAnnotationClass"),
* })
*/
class Foo
{
public function __construct(array $values)
{
$this->stringProperty = $values['stringProperty'];
$this->annotProperty = $values['annotProperty'];
}
// some code
}
Annotation Required
-------------------
``@Required`` indicates that the field must be specified when the
annotation is used. If it is not used you get an ``AnnotationException``
stating that this value can not be null.
Declaring a required field:
.. code-block:: php
/**
* @Annotation
* @Target("ALL")
*/
class Foo
{
/** @Required */
public $requiredField;
}
Usage:
.. code-block:: php
/** @Foo(requiredField="value") */
public $direction; // Valid
/** @Foo */
public $direction; // Required field missing, throws an AnnotationException
Enumerated values
-----------------
- An annotation property marked with ``@Enum`` is a field that accepts a
fixed set of scalar values.
- You should use ``@Enum`` fields any time you need to represent fixed
values.
- The annotation parser checks the given value and throws an
``AnnotationException`` if the value does not match.
Declaring an enumerated property:
.. code-block:: php
/**
* @Annotation
* @Target("ALL")
*/
class Direction
{
/**
* @Enum({"NORTH", "SOUTH", "EAST", "WEST"})
*/
public $value;
}
Annotation usage:
.. code-block:: php
/** @Direction("NORTH") */
public $direction; // Valid value
/** @Direction("NORTHEAST") */
public $direction; // Invalid value, throws an AnnotationException
Constants
---------
The use of constants and class constants is available on the annotations
parser.
The following usages are allowed:
.. code-block:: php
namespace MyCompany\Entity;
use MyCompany\Annotations\Foo;
use MyCompany\Annotations\Bar;
use MyCompany\Entity\SomeClass;
/**
* @Foo(PHP_EOL)
* @Bar(Bar::FOO)
* @Foo({SomeClass::FOO, SomeClass::BAR})
* @Bar({SomeClass::FOO_KEY = SomeClass::BAR_VALUE})
*/
class User
{
}
Be careful with constants and the cache !
.. note::
The cached reader will not re-evaluate each time an annotation is
loaded from cache. When a constant is changed the cache must be
cleaned.
Usage
-----
Using the library API is simple. Using the annotations described in the
previous section, you can now annotate other classes with your
annotations:
.. code-block:: php
namespace MyCompany\Entity;
use MyCompany\Annotations\Foo;
use MyCompany\Annotations\Bar;
/**
* @Foo(bar="foo")
* @Bar(foo="bar")
*/
class User
{
}
Now we can write a script to get the annotations above:
.. code-block:: php
$reflClass = new ReflectionClass('MyCompany\Entity\User');
$classAnnotations = $reader->getClassAnnotations($reflClass);
foreach ($classAnnotations AS $annot) {
if ($annot instanceof \MyCompany\Annotations\Foo) {
echo $annot->bar; // prints "foo";
} else if ($annot instanceof \MyCompany\Annotations\Bar) {
echo $annot->foo; // prints "bar";
}
}
You have a complete API for retrieving annotation class instances from a
class, property or method docblock:
Reader API
~~~~~~~~~~
Access all annotations of a class
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. code-block:: php
public function getClassAnnotations(\ReflectionClass $class);
Access one annotation of a class
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. code-block:: php
public function getClassAnnotation(\ReflectionClass $class, $annotationName);
Access all annotations of a method
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. code-block:: php
public function getMethodAnnotations(\ReflectionMethod $method);
Access one annotation of a method
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. code-block:: php
public function getMethodAnnotation(\ReflectionMethod $method, $annotationName);
Access all annotations of a property
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. code-block:: php
public function getPropertyAnnotations(\ReflectionProperty $property);
Access one annotation of a property
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. code-block:: php
public function getPropertyAnnotation(\ReflectionProperty $property, $annotationName);
Access all annotations of a function
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. code-block:: php
public function getFunctionAnnotations(\ReflectionFunction $property);
Access one annotation of a function
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. code-block:: php
public function getFunctionAnnotation(\ReflectionFunction $property, $annotationName);

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

Loading…
Cancel
Save