diff --git a/CHANGELOG.md b/CHANGELOG.md index 53339485c..db4ff2b37 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,15 @@ and this project adheres to * Use the user.label in accompanying course banner, instead of username; * fix: show validation message when closing accompanying course; * [thirdparty] link from modal to thirdparty detail page fixed (https://gitlab.com/champs-libres/departement-de-la-vendee/accent-suivi-developpement/-/issues/228) +* [assets] new asset to style suggestions lists (with add/remove item link) (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/258) +* [accompanyingCourseWorkEdit] improves hyphenation and line breaks for long badges +* [acompanyingCourse] improve Resume page + * complete all needed informations, + * actions and activities are clickables, + * better placement with js masonry blocks on top of content area, + * https://gitlab.com/champs-libres/departement-de-la-vendee/accent-suivi-developpement/-/issues/101 + * https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/295 +* [activity/calendar] on show page, concerned groups of persons table adapt itself to isVisibles options * [activity] remove the "plus" button in activity list * [activity] check ACL on activity list in person context * [list for accompanying course in person] filter list using ACL @@ -57,7 +66,7 @@ and this project adheres to * [accompanyingCourse] Ability to close accompanying course (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/296) * [task] Select2 field in task form to allow search for a user (https://gitlab.com/champs-libres/departement-de-la-vendee/accent-suivi-developpement/-/issues/167) * [list result] show all courses, except ones with period closed - +* [accompanyingCourse] improve banner with small carousel to display slide social-issues or slide associated persons (https://gitlab.com/champs-libres/departement-de-la-vendee/accent-suivi-developpement/-/issues/69) ### Test release 2021-11-15 diff --git a/CONVENTIONS.md b/CONVENTIONS.md index 4dcdb08ea..2543e54b7 100644 --- a/CONVENTIONS.md +++ b/CONVENTIONS.md @@ -56,28 +56,28 @@ Arborescence: Comment s'échaffaudent les styles dans Chill ? -1. l'entrypoint **mod_bootstrap** (module bootstrap) est le premier niveau. Toutes les parties(modules) de bootstrap sont convoquées dans le fichier ```bootstrap.js``` situé dans ```ChillMainBundle/Resources/public/module/bootstrap```. - * Au début, ce fichier importe le fichier ```variables.scss``` qui détermine la plupart des réglages bootstrap tels qu'on les a personnalisés. Ce fichier surcharge l'original, et de nombreuses variables y sont adaptées pour Chill. +1. l'entrypoint **mod_bootstrap** (module bootstrap) est le premier niveau. Toutes les parties(modules) de bootstrap sont convoquées dans le fichier ```bootstrap.js``` situé dans ```ChillMainBundle/Resources/public/module/bootstrap```. + * Au début, ce fichier importe le fichier ```variables.scss``` qui détermine la plupart des réglages bootstrap tels qu'on les a personnalisés. Ce fichier surcharge l'original, et de nombreuses variables y sont adaptées pour Chill. * On veillera à ce qu'on puisse toujours comparer ce fichier à l'original de bootstrap. En cas de mise à jour de bootstrap, il faudra générer un diff, et adapter ce diff sur le fichier variable de la nouvelle version. - * A la fin on importe le fichier ```custom.scss```, qui comprends des adaptations de bootstrap pour le préparer à notre thème Chill. + * A la fin on importe le fichier ```custom.scss```, qui comprends des adaptations de bootstrap pour le préparer à notre thème Chill. * ce ```custom.scss``` peut être splitté en plus petits fichiers avec des ```@import 'custom/...'``` * L'idée est que cette première couche bootstrap règle un partie importante des styles de l'application, en particulier ce qui touche aux position du layout, aux points de bascules responsive, aux marges et écarts appliqués par défauts aux éléments qu'on manipule. 2. l'entrypoint **chill** est le second niveau. Il contient le thème Chill qui est reconnaissable à l'application. * Chaque bundle a un dossier ```Resources/public/chill``` dans lequel on peut trouver une feuille sass principale, qui est éventuellement splittée avec des ```@imports```. Toutes ces feuilles sont compilées dans un unique entrypoint Chill, c'est le thème de l'application. Celui-ci surcharge bootstrap. - * La feuille chillmain.scss devrait contenir les cascades de styles les plus générales, celles qui sont appliquées à de nombreux endroits de l'application. + * La feuille chillmain.scss devrait contenir les cascades de styles les plus générales, celles qui sont appliquées à de nombreux endroits de l'application. * La feuille chillperson.scss va aussi retrouver des styles propres aux différents contextes des personnes: person, household et accompanyingcourse. * Certains bundles plus secondaires ne contiennent que des styles spécifiques à leur fonctionnement. 3. les entrypoints **vue_** sont utilisés pour des composants vue. Les fichiers vue peuvent contenir un bloc de styles scss. Ce sont des styles qui ne concernent que le composant et son héritage, le tag ```scoped``` précise justement sa portée (voir la doc). -4. les entrypoints **page_** sont utilisés pour ajouter des assets spécifiques à certaines pages, le plus souvent des scripts et des styles. +4. les entrypoints **page_** sont utilisés pour ajouter des assets spécifiques à certaines pages, le plus souvent des scripts et des styles. ## Taguer du code html et construire la cascade de styles L'exemple suivant montre comment taguer sans excès un élément de code. On remarque que: -* il n'est pas nécessaire de taguer toutes les classes intérieures, +* il n'est pas nécessaire de taguer toutes les classes intérieures, * il ne faut pas répéter la classe parent dans toutes les classes enfants. La cascade sass va permettre de saisir le html avec souplesse sans alourdir la structure des balises. * souvent la première classe sera déclinée par plusieurs classes qui commencent de la même manière: ```bloc-dark``` ajoute juste la version sombre de ```bloc```, on ne met pas ```bloc dark```, car on ne souhaite pas que la classe ```dark``` de ```bloc``` interagisse avec la même classe ```dark``` de ```table```. On aura donc un élément ```bloc bloc-dark``` et un élément ```table table-dark```. @@ -94,11 +94,11 @@ L'exemple suivant montre comment taguer sans excès un élément de code. On rem ``` -Finalement, il importe ici de définir ce qu'est un bloc, ce qu'est une zone d'actions et ce qu'est un bouton. Ces 3 éléments existent de manière autonome, ce sont les seuls qu'on tagge. +Finalement, il importe ici de définir ce qu'est un bloc, ce qu'est une zone d'actions et ce qu'est un bouton. Ces 3 éléments existent de manière autonome, ce sont les seuls qu'on tagge. Par exemple pour mettre un style au titre on précise juste h3 dans la cascade bloc. -```sass +```scss div.bloc { // un bloc générique, utilisé à plusieurs endroits &.bloc-dark { @@ -113,12 +113,12 @@ div.bloc { } } div.mon-bloc { - // des exceptions spécifiques à mon-bloc, + // des exceptions spécifiques à mon-bloc, // qui sont des adaptations de bloc } ul.record_actions { - // va uniformiser tous les record_actions de l'application + // va uniformiser tous les record_actions de l'application li { //... } @@ -260,7 +260,7 @@ Exemple: address|chill_entity_render_box ``` -Justification: +Justification: * des éléments sont parfois personnalisés par installation (par exemple, le nom de chaque utilisateur sera suivi par le nom du service) * pour rationaliser et rendre semblable les affichages @@ -270,13 +270,13 @@ A prevoir: * toujours trois positions: * inline - * block + * block * item (dans un tableau, une ligne) > block et item sont en fait la même option passée au render_box: render: bloc. Il y a aussi ‘raw’ pour le inline, et ‘label’ pour une titraille configurable avec des options. -> quand on passe l’option render: bloc, on peut placer le render_box dans une boucle for plus large qui fonctionne avec la classe flex-table ou la classe flex-bloc, ce qui donnera un affichage en rangée (table) ou en blocs. [name=Mathieu] - +> quand on passe l’option render: bloc, on peut placer le render_box dans une boucle for plus large qui fonctionne avec la classe flex-table ou la classe flex-bloc, ce qui donnera un affichage en rangée (table) ou en blocs. [name=Mathieu] + #### En vue @@ -292,13 +292,13 @@ A chaque fois qu'on indique le nom d'une personne, un parcours, un ménage, il y Ces éléments sont toujours proposé par des `render_box` par défaut. Des options permettent de les désactiver dans des cas particuliers -> à discuter, quelques réflexion: -> quelle est la logique qui domine pour les boutons ? on a symbolisé les 4 actions du crud par des couleurs: bleu(show) orange(edit) vert(create) et rouge(delete). -> Est-ce que c'est ça qui prime, et comment ça s'articule avec la logique des pictos ? +> à discuter, quelques réflexion: +> quelle est la logique qui domine pour les boutons ? on a symbolisé les 4 actions du crud par des couleurs: bleu(show) orange(edit) vert(create) et rouge(delete). +> Est-ce que c'est ça qui prime, et comment ça s'articule avec la logique des pictos ? > Par exemple, il pourrait être logique d'utiliser l'oeil bleu pour voir l'objet, qu'il s'agisse d'une personne ou d'un parcours, ce serait plutôt le contexte, et l'infobulle (title) qui préciserait le contexte. > Je pense que les pictos de boutons doivent faire référence à l'action, mais pas à l'objet. Autrement dit je n'utiliserais jamais l'icone du ménage ou du parcours dans les boutons. > Pour représenter les ménages et les parcours, je pense qu'il faudrait trouver autre chose que forkawesome. Si c'est des pictos, trouver un motif différents et de tailles différente. Réfléchir à un couplage picto-couleur-forme différent, qui exprime le contexte et qui se distingue bien des boutons. -> Idem pour les badges, il faut une palette de badge qui couvre tous les besoins: socialIssue, socialActions, socialReason, members, etc. [name=Mathieu] +> Idem pour les badges, il faut une palette de badge qui couvre tous les besoins: socialIssue, socialActions, socialReason, members, etc. [name=Mathieu] ### Formulaires @@ -350,7 +350,7 @@ A chaque fois qu'un élément est créé par un formulaire, un message flash doi > "L'élément a été créé" -Le nom de l'élément peut être remplacé par quelque chose de plus pertinent: +Le nom de l'élément peut être remplacé par quelque chose de plus pertinent: > * L'activité a été créée > * Le rendez-vous a été créé @@ -362,7 +362,7 @@ Le nom de l'élément peut être remplacé par quelque chose de plus pertinent: A chaque fois qu'un élément est enregistré, un message flash doit apparaitre: > * Les données ont été modifiées -> +> #### Erreur sur un formulaire (erreur de validation) @@ -377,7 +377,35 @@ Les erreurs doivent apparaitre attachée au champ qui les concerne. Toutefois, i A chaque fois qu'un lien est indiqué, vérifier si on ne doit pas utiliser la fonction `chill_return_path`, `chill_forward_return_path` ou `chill_return_path_or`. * depuis la page liste, vers l'ouverture d'un élément, ou le bouton création => utiliser `chill_path_add_return_path` -* dans ces pages d'éditions, +* dans ces pages d'éditions, * utiliser `chill_return_path_or` dans le bouton "Cancel"; * pour les boutons "enregistrer et voir" et "Enregistrer et fermer" => ? +### Assets pour les listes de suggestion + +Créer une liste de suggestions à ajouter (tout l'item est cliquable) +```html + +``` +Créer une liste de suggestions à enlever (avec une croix rouge cliquable, l'ancre a est vide) +```html + +``` +Créer un titre enlevable (avec une croix rouge cliquable, l'ancre a est vide) +```html +
+ title + +
+``` diff --git a/src/Bundle/ChillActivityBundle/Entity/Activity.php b/src/Bundle/ChillActivityBundle/Entity/Activity.php index c63ce90f7..07b88fcae 100644 --- a/src/Bundle/ChillActivityBundle/Entity/Activity.php +++ b/src/Bundle/ChillActivityBundle/Entity/Activity.php @@ -354,8 +354,9 @@ class Activity implements HasCenterInterface, HasScopeInterface, AccompanyingPer if (null !== $this->accompanyingPeriod) { $personsNotAssociated = []; + // TODO better semantic with: return $this->persons->filter(...); foreach ($this->persons as $person) { - if (!in_array($person, $this->getPersonsAssociated())) { + if ($this->accompanyingPeriod->getOpenParticipationContainsPerson($person) === null) { $personsNotAssociated[] = $person; } } diff --git a/src/Bundle/ChillActivityBundle/Resources/public/vuejs/Activity/components/ConcernedGroups.vue b/src/Bundle/ChillActivityBundle/Resources/public/vuejs/Activity/components/ConcernedGroups.vue index 721f136a9..853b43eb0 100644 --- a/src/Bundle/ChillActivityBundle/Resources/public/vuejs/Activity/components/ConcernedGroups.vue +++ b/src/Bundle/ChillActivityBundle/Resources/public/vuejs/Activity/components/ConcernedGroups.vue @@ -1,35 +1,33 @@