Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentes Révision précédente | |||
| projets:mca:code [11/05/2019 13:32] – [Contrôleurs] rgrondin | projets:mca:code [11/09/2019 14:51] (Version actuelle) – rgrondin | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| + | ====== Code de MyCentraleAssos ====== | ||
| + | Le code de MyCentraleAssos est ouvert uniquement à l' | ||
| + | ===== Technologies utilisées ===== | ||
| + | MyCentraleAssos utilise la norme de développement du GInfo avec les technologies suivantes : | ||
| + | * Framework Symfony 4 avec les modules usuels : | ||
| + | * Twig pour les templates | ||
| + | * Doctrine pour l'ORM | ||
| + | * FOSUserBundle pour la gestion des utilisateurs | ||
| + | * Webpack Encore pour la gestion des assets (CSS & JS) | ||
| + | * Des modules un peu moins usuels pour certains besoins spécifiques : | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * TCPDF avec [[https:// | ||
| + | |||
| + | La liste complète ainsi que les versions sont disponibles sur le [[https:// | ||
| + | |||
| + | L' | ||
| + | |||
| + | Les technologies utilisées pour le développement sont : | ||
| + | * Composer pour la gestion de dépendances back (PHP) | ||
| + | * NPM pour la gestion de dépendances front (Modules JS etc...) | ||
| + | |||
| + | De plus diverses libraries sont utilisées en front : | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | |||
| + | La liste complète ainsi que les versions sont disponibles sur le [[https:// | ||
| + | ===== Entités ===== | ||
| + | Le schéma relationnel de MyCA peut être résumé par le diagramme UML suivant : | ||
| + | {{ : | ||
| + | |||
| + | Le schéma est correct à quelques champs près pour quelques entités. | ||
| + | |||
| + | ==== Utilisateurs ==== | ||
| + | Détail | ||
| + | |||
| + | ==== Associations ==== | ||
| + | Détail | ||
| + | |||
| + | ==== Cotisations ==== | ||
| + | Détails | ||
| + | |||
| + | ===== Contrôleurs ===== | ||
| + | les controllers sont répartis suivant une logique fonctionnelle dans divers dossiers : | ||
| + | * **/ | ||
| + | * // | ||
| + | * **/ | ||
| + | * // | ||
| + | * // | ||
| + | * // | ||
| + | * // | ||
| + | * // | ||
| + | * **/ | ||
| + | * // | ||
| + | * // | ||
| + | * // | ||
| + | * **/ | ||
| + | * **/ | ||
| + | |||
| + | ===== Particularités de code de MyCentraleAssos ===== | ||
| + | ==== Envoi de mails ==== | ||
| + | Pour envoyer des mails facilement, on peut utiliser le service Mailer écrit pour My. Pour l' | ||
| + | <code php> | ||
| + | * @Route("/ | ||
| + | * @Security(" | ||
| + | */ | ||
| + | public function addMember(Groupe $groupe, Request $request, Mailer $mailer) | ||
| + | {</ | ||
| + | |||
| + | Celui-ci permet d' | ||
| + | |||
| + | Utilisation : <code php> | ||
| + | * **Destinataire :** array [email => nom] | ||
| + | * **Titre :** string (titre du mail) | ||
| + | * **params :** array, paramètres passés au render du twig | ||
| + | * **html_template :** chemin du template html twig | ||
| + | * **plain_template :** chemin du template txt twig (sans html) | ||
| + | * **pice_jointe :** array | ||
| + | |||
| + | Exemple d' | ||
| + | <code php> | ||
| + | [$user-> | ||
| + | 'Vous avez été ajouté au groupe ' | ||
| + | [' | ||
| + | ' | ||
| + | ' | ||
| + | ); | ||
| + | </ | ||
| + | |||
| + | Pour un exemple avec pièces jointes voir le **CotisationController.php** | ||
| + | |||
| + | ==== Champ de recherche d' | ||
| + | Pour mettre un champ de recherche d' | ||
| + | |||
| + | Exemple : <code html>< | ||
| + | ou un form avec twig : <code html>{{ form_row(form.user, | ||
| + | |||
| + | Import du fichier JS : <code html>< | ||
| + | |||
| + | **Très important :** lors de l' | ||
| + | <code php> | ||
| + | { | ||
| + | $builder | ||
| + | [...] | ||
| + | -> | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | ]) | ||
| + | [...} | ||
| + | ; | ||
| + | |||
| + | // Comme pas de choix disponibles sur le User (autocomplete), | ||
| + | $builder-> | ||
| + | $data = $event-> | ||
| + | |||
| + | if(!$data || empty($data[' | ||
| + | |||
| + | $event-> | ||
| + | [ | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | return $repo-> | ||
| + | }, | ||
| + | ' | ||
| + | ]); | ||
| + | }); | ||
| + | }</ | ||
| + | |||
| + | **Cas particulier :** Non validation du formulaire (sans rafraîchissement) on peut réinitialiser le champ via le code suivant (exemple ajout utilisateur dans groupe sans rechargement) : | ||
| + | <code javascript> | ||
| + | let uid = $(this).val(), | ||
| + | gid = $('# | ||
| + | csrf = $('# | ||
| + | |||
| + | if(!uid) | ||
| + | return; | ||
| + | |||
| + | $(this).val('' | ||
| + | | ||
| + | [...} | ||
| + | </ | ||
| + | |||
| + | ==== DataTable ==== | ||