Compare commits

...

389 Commits

Author SHA1 Message Date
julielenaerts 6bb39bc4e0 changelog entry put in correct place 2022-01-24 15:03:08 +01:00
julielenaerts 45f3bb00d6 php csfixes 2022-01-21 16:50:24 +01:00
julielenaerts 2b9f0e5177 changelog updated 2022-01-21 16:50:09 +01:00
julielenaerts fcf2ae364f all comments are kept when after a second is flagged 2022-01-21 16:47:02 +01:00
julienfastre c736c2b5bb update changelog 2022-01-19 17:48:46 +01:00
julienfastre b3aca957ff Merge remote-tracking branch 'origin/master' into issue377_addFields_toPerson 2022-01-19 17:47:34 +01:00
julienfastre 03bd4d1942 update logic to adapt to altnames 2022-01-19 17:46:27 +01:00
julielenaerts 409cd40460 js code put in seperate file for compilation 2022-01-19 15:37:30 +01:00
julielenaerts 2811e61439 fix filtering of names 2022-01-19 15:13:22 +01:00
julienfastre 2ff34688bb fix validation for notification 2022-01-19 13:59:03 +01:00
julienfastre 8133dd7385 Merge branch 'issue375_dead_persons' into 'master'
person: add obele sign for dead persons

See merge request Chill-Projet/chill-bundles!292
2022-01-19 11:23:52 +00:00
juminet 256dab3739 person: add obele sign for dead persons 2022-01-19 11:23:51 +00:00
julienfastre 532a751509 Merge branch 'issue381_address_in_location' into 'master'
address in location

See merge request Chill-Projet/chill-bundles!289
2022-01-19 11:22:33 +00:00
juminet f0a7565302 [location] fix address saving in admin form 2022-01-19 11:22:33 +00:00
julienfastre 64c4f1ece2 Merge branch 'issue374_documents_in_activity_bug' into 'master'
Issue374 documents in activity bug

See merge request Chill-Projet/chill-bundles!287
2022-01-19 10:59:44 +00:00
juminet ad983d80d2 Issue374 documents in activity bug 2022-01-19 10:59:44 +00:00
julielenaerts 21d5f974eb advanced search possible 2022-01-18 10:20:45 +01:00
julielenaerts 59b2b07a21 space added between deathdate and age + changelog updated 2022-01-17 18:04:43 +01:00
julielenaerts eaf9f72fdd lastname added in uppercase 2022-01-17 16:34:54 +01:00
julielenaerts 169442decc changelog updated 2022-01-17 16:29:46 +01:00
julielenaerts cf8e25e823 search parameter also passed on in normal list template 2022-01-17 16:26:51 +01:00
julielenaerts 96b1f31665 javascript added to easily fill in form fields with name elements 2022-01-17 16:24:35 +01:00
julienfastre 2ad798c0bf Merge branch 'master' into notification_finitions 2022-01-17 15:29:48 +01:00
julienfastre 7e932e838f Squashed commit of the following:
commit 9e767fa3e0788d87437c235e51fcdc4f26f75d98
Author: Julien Fastré <julien.fastre@champs-libres.coop>
Date:   Mon Jan 17 15:28:02 2022 +0100

    traductions

commit db65134743
Author: nobohan <juminet@gmail.com>
Date:   Mon Jan 17 12:17:22 2022 +0100

    add person: increase z-index of toast and wait for validation before closing modal

commit 7af4c3434e
Merge: a09c8ee8a 46c6d0e29
Author: Julien Fastré <julien.fastre@champs-libres.coop>
Date:   Sun Jan 16 22:51:45 2022 +0100

    Merge remote-tracking branch 'origin/master' into issue357_front_end_validation

commit a09c8ee8af
Author: nobohan <juminet@gmail.com>
Date:   Wed Jan 12 15:47:11 2022 +0100

    upd CHANGELOG

commit a312a9463d
Author: nobohan <juminet@gmail.com>
Date:   Wed Jan 12 15:29:32 2022 +0100

    address: display error message if some fields are empty (street & streetnumber)

commit 0035128138
Author: nobohan <juminet@gmail.com>
Date:   Wed Jan 12 14:47:43 2022 +0100

    address: display error message if some fields are empty

commit 49cb154672
Author: nobohan <juminet@gmail.com>
Date:   Tue Jan 11 20:58:00 2022 +0100

    address: add field validation (WIP)

commit 1a7ec9e396
Author: nobohan <juminet@gmail.com>
Date:   Tue Jan 11 17:16:43 2022 +0100

    Activity: fix vuejs warning

commit fa0b9271c2
Author: nobohan <juminet@gmail.com>
Date:   Tue Jan 11 16:13:23 2022 +0100

    location: treat 422 error when POSTing new location

commit c7b9a1a3fe
Author: nobohan <juminet@gmail.com>
Date:   Tue Jan 11 16:00:29 2022 +0100

    location: fix error when creating a new location: a new location could not be added to the availableLocations due to refactoring

commit f1c61a2387
Author: nobohan <juminet@gmail.com>
Date:   Tue Jan 11 15:20:33 2022 +0100

    person: treat 422 error in AddPerson for thirdparty

commit 8f6a70b240
Author: nobohan <juminet@gmail.com>
Date:   Tue Jan 11 11:30:05 2022 +0100

    person: add validation for required fields in on-the-fly person

commit 40e4bf953f
Author: nobohan <juminet@gmail.com>
Date:   Tue Jan 11 09:34:15 2022 +0100

    vuejs: better violations message in 422 error handling

commit 378f3a16fc
Author: nobohan <juminet@gmail.com>
Date:   Mon Jan 10 18:11:02 2022 +0100

    person: on-the-fly person: first implementation of makeFetch for posting person
2022-01-17 15:28:49 +01:00
julielenaerts 41354097f3 order of form fields changed 2022-01-17 14:25:28 +01:00
julielenaerts 9a3f35703b parameter passed to person creation page 2022-01-17 14:24:46 +01:00
julielenaerts 5423de3bd9 fields added to person creation form 2022-01-17 14:23:54 +01:00
julienfastre 5e3d421b56 remove the possibility to generate a document from accompanying period work 2022-01-16 23:59:02 +01:00
julienfastre 71ca033b08 Merge branch 'issue363_localisation_type_not_available_to_users' into 'master'
localisation type not available to edit by users

See merge request Chill-Projet/chill-bundles!282
2022-01-16 22:51:29 +00:00
juminet 2c774e814e localisation type not available to edit by users 2022-01-16 22:51:29 +00:00
julienfastre 3034ba411f [course list in person context] show renderbox for referent 2022-01-16 23:39:47 +01:00
julienfastre ce6e51df87 Merge branch 'issue341_user_main_location' into 'master'
[main] Add mainLocation field to User entity

See merge request Chill-Projet/chill-bundles!283
2022-01-16 22:36:55 +00:00
juminet 6843b4cb2a [main] Add mainLocation field to User entity 2022-01-16 22:36:55 +00:00
julienfastre dcbce270ad Merge branch 'issue376_internal_activityType_display' into 'master'
Display of activity types

See merge request Chill-Projet/chill-bundles!286
2022-01-16 22:18:16 +00:00
LenaertsJ 3f5a6c6b15 Display of activity types 2022-01-16 22:18:16 +00:00
Mathieu Jaumotte d806551477 notification, list item: manage option fold_item with macro 2022-01-15 20:33:31 +01:00
Mathieu Jaumotte 120ce40dbe notification list: use bootstrap accordion to fold/unfold notification content 2022-01-15 17:13:20 +01:00
Mathieu Jaumotte 22022e5143 JS toggle class read/unread status works on *all* container (change DOM selector) 2022-01-14 20:02:00 +01:00
julielenaerts 46c6d0e293 minor fix: } missing in template causing an error 2022-01-14 15:25:17 +01:00
Mathieu Jaumotte 20fcaa5428 notification: add prefix in object 2022-01-14 15:03:36 +01:00
julielenaerts bb0a04b19a Using translations instead of hardcoded 2022-01-14 14:37:50 +01:00
julielenaerts 8d3ba314e0 adjustment badges into rounded-pill + red color for urgent 2022-01-14 14:18:37 +01:00
julielenaerts 9e48a1db0a badges added in list view for parcours that are urgent and/or confidential 2022-01-14 13:58:56 +01:00
Mathieu Jaumotte 819017112d JS toggle class read/unread when clicking on vue component NotificationReadToggle.vue 2022-01-13 18:56:07 +01:00
Mathieu Jaumotte d7d7fb5693 add a chill button "tpchild", to create on-the-fly thirdparty (kind=child) 2022-01-13 16:15:49 +01:00
Mathieu Jaumotte 650e0d79be improve notification list and show styles 2022-01-13 15:40:41 +01:00
Mathieu Jaumotte 0afccd12a9 fix error when twig insert onthefly with parent undefined 2022-01-13 14:11:53 +01:00
Mathieu Jaumotte 7abe3e1b2d chill-no-data-statement smaller (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/354) 2022-01-13 14:11:08 +01:00
Mathieu Jaumotte 6c71cb0e80 Merge branch '232_resources_comment' into 'master'
232 resources comment

See merge request Chill-Projet/chill-bundles!276
2022-01-13 11:05:15 +00:00
Mathieu Jaumotte 11d4450244 fix condition to show comment in on-the-fly 2022-01-13 11:27:36 +01:00
julienfastre 5a79df0e0a fix test 2022-01-12 22:34:32 +01:00
julienfastre c0c2131be0 fix notification test 2022-01-12 22:22:18 +01:00
Mathieu Jaumotte e6ea2674c2 comment console.log, remove v-bind before ':' 2022-01-12 22:13:14 +01:00
julienfastre 39b5ce0320 fix access to database in ci 2022-01-12 22:06:47 +01:00
Mathieu Jaumotte e0ee817421 batch rename twig attribut 2022-01-12 21:36:12 +01:00
julienfastre 8159144f26 fix accesss to database on ci 2022-01-12 20:20:20 +00:00
Mathieu Jaumotte 630115fd3a update changelog 2022-01-12 20:43:17 +01:00
Mathieu Jaumotte 87cf8d737e remove dump 2022-01-12 20:38:09 +01:00
Mathieu Jaumotte ecda740d81 on-the-fly: add a 'parent' option to pass parent context. So we could now display resource.comment below the renderbox. 2022-01-12 20:26:54 +01:00
Mathieu Jaumotte c9e3960238 clean commented unused code 2022-01-12 17:55:00 +01:00
Mathieu Jaumotte 782e098e31 Course resume page: hide a masonry bloc if no content (fix) 2022-01-12 17:37:49 +01:00
Mathieu Jaumotte 34ff91979b emit response and commit change in store 2022-01-12 17:06:21 +01:00
Mathieu Jaumotte abcc8557ce resources: add a WriteComment new subcomponent 2022-01-12 15:25:06 +01:00
julielenaerts 15342f85d3 only show current participations in parcours resumé 2022-01-12 13:39:53 +01:00
julielenaerts b679d833da display location type between parentheses for actions 2022-01-12 13:37:04 +01:00
julielenaerts f8ca349d9e use renderbox to display referrer in action list item 2022-01-12 12:10:41 +01:00
julielenaerts a8978a52b9 blur effect added on requestor if marked as anonymous 2022-01-12 12:05:45 +01:00
Mathieu Jaumotte b1bffd875c Undo 'add thirdparty comment in acccourse resources' (commit 62b8b3e6)
-> it was displaying wrong comment !
2022-01-12 11:19:57 +01:00
Mathieu Jaumotte b23161fa1d Merge branch 'master' into 232_resources_comment 2022-01-12 10:11:39 +01:00
Mathieu Jaumotte e540baaa4f fix condition when confirming delete action 2022-01-12 10:09:42 +01:00
julienfastre 9fe744f09f thirdparty docgen normalizer: fix return type for telephone 2022-01-12 09:39:15 +01:00
julienfastre 6b1310148f notification: fix test 2022-01-11 11:24:11 +01:00
julienfastre 1650f30a59 upgrade app 2022-01-11 11:22:46 +01:00
julienfastre f6386a13ac fix cs 2022-01-11 11:05:42 +01:00
Mathieu Jaumotte e437705714 composer deps symfony/mime, change version 2022-01-11 10:29:00 +01:00
Mathieu Jaumotte f79225fc2b Merge branch 'master' into notification/completion 2022-01-11 10:18:02 +01:00
julienfastre 7564c2fde1 AccompanyingPeriodResource: add ACL 2022-01-10 23:12:52 +01:00
julienfastre 2c4d06371c AccompanyingPeriodResource: fix deserialization + code style 2022-01-10 23:08:23 +01:00
julienfastre 8e012982f5 Merge remote-tracking branch 'origin/master' into 232_resources_comment 2022-01-10 21:56:36 +01:00
julienfastre ba893e8429 Merge branch '327_pinned_comment' into 'master'
327 pinned comment

See merge request Chill-Projet/chill-bundles!279
2022-01-10 20:55:37 +00:00
Mathieu Jaumotte b153fc19f6 327 pinned comment 2022-01-10 20:55:37 +00:00
julienfastre 098c2fbaa0 Merge remote-tracking branch 'origin/master' into 232_resources_comment 2022-01-10 21:50:00 +01:00
Mathieu Jaumotte 479e4ffe64 add notification box in context person, page show activity 2022-01-10 17:08:56 +01:00
Mathieu Jaumotte 42a14fbd6b AccompanyingPeriod list: manage context entity variable in record_actions buttons (TO BE CHECKED)
Need to pass context entity in record_actions buttons to use variables like 'person' !
2022-01-10 16:55:01 +01:00
Mathieu Jaumotte 46ca74fc70 Merge branch 'master' into notification/completion 2022-01-10 16:11:06 +01:00
Mathieu Jaumotte ae931b5869 update changelog 2022-01-10 16:04:04 +01:00
Mathieu Jaumotte fded08aaaa include Activity in notification (ShowInNotification) 2022-01-10 16:01:22 +01:00
Mathieu Jaumotte d60938352b notification: add selector on title, move styles 2022-01-10 15:59:36 +01:00
Mathieu Jaumotte af6f3043ae activity list page: put item bloc in a separate include 2022-01-10 15:58:11 +01:00
Mathieu Jaumotte 8afd1ee275 Activity show page: move notify button and notification-box in post menu area 2022-01-10 15:14:50 +01:00
Mathieu Jaumotte 5a739380cd force ShowInNotification background (for odd gray container) 2022-01-10 14:36:58 +01:00
Mathieu Jaumotte a1ec2b637d ShownInNotification: put border on alert block 2022-01-10 14:36:27 +01:00
Mathieu Jaumotte 584b77bbf4 accourse resume page: fix masonry block border 2022-01-10 14:36:27 +01:00
Mathieu Jaumotte e84182cdac translations + alert message position 2022-01-10 13:08:09 +01:00
julienfastre 01d51da7e1 Merge branch 'issue344_vue_multiselect_i18n' into 'master'
Issue344 vue multiselect i18n

See merge request Chill-Projet/chill-bundles!278
2022-01-10 12:04:57 +00:00
juminet 699dcc85de Issue344 vue multiselect i18n 2022-01-10 12:04:57 +00:00
julienfastre e677c0fe2f Merge branch 'issue309_address_lines' into 'master'
address: render Address as lines

See merge request Chill-Projet/chill-bundles!277
2022-01-10 11:49:38 +00:00
juminet edeaaf0218 address: render Address as lines 2022-01-10 11:49:38 +00:00
Mathieu Jaumotte afae3b58c2 notification form integration (create/edit) 2022-01-10 12:44:08 +01:00
Mathieu Jaumotte 95027e93c6 fix translations for AddPersons in PickEntity 2022-01-10 12:41:47 +01:00
julienfastre a3ea28d307 Merge branch 'issue342_location_in_acc_period' into 'master'
accompanying period: add location to accompanying period + add delete button

See merge request Chill-Projet/chill-bundles!272
2022-01-10 11:03:14 +00:00
juminet 921dd639bf accompanying period: add location to accompanying period + add delete button 2022-01-10 11:03:14 +00:00
Mathieu Jaumotte a40077e91b include AccompanyingPeriod in notification (shownInNotification) 2022-01-10 10:52:09 +01:00
julienfastre 8de5c8900a Merge branch 'docgen/action-add-missing-goals' into 'master'
Docgen/action add missing goals

See merge request Chill-Projet/chill-bundles!280
2022-01-10 09:35:26 +00:00
julienfastre efc3e3915b Docgen/action add missing goals 2022-01-10 09:35:26 +00:00
Mathieu Jaumotte 98ab3b66ba Accompanying periods list: move item in separate template (to share) 2022-01-10 10:21:31 +01:00
Mathieu Jaumotte b1cd85971a notification show page: use macro to display thread comments 2022-01-07 15:50:47 +01:00
Mathieu Jaumotte 0a3b50568d Merge branch '327_pinned_comment' into notification/completion 2022-01-07 15:25:54 +01:00
Mathieu Jaumotte 69b5c98d2e inject record_actions buttons inside macro 2022-01-07 15:24:06 +01:00
Mathieu Jaumotte 5c4bef26e8 hotfix typo in NotificationComment 2022-01-07 14:56:17 +01:00
Mathieu Jaumotte bdf4b71080 Merge branch '327_pinned_comment' into notification/completion 2022-01-07 13:02:59 +01:00
Mathieu Jaumotte c60d46c68b put macro show_comment in a separate template 2022-01-07 12:51:03 +01:00
Mathieu Jaumotte be4b8a94f0 AccompanyingCourse comments: move and rename files 2022-01-07 12:37:19 +01:00
Mathieu Jaumotte a54cc70fd6 temporary disable previous commit 2022-01-07 12:34:14 +01:00
Mathieu Jaumotte 18959f60e2 reuse notification item in show template 2022-01-06 19:42:45 +01:00
Mathieu Jaumotte 7d4ca8d149 remove dropped tests, separate list item in external include 2022-01-06 19:04:24 +01:00
Mathieu Jaumotte 442e2a1ede notification list, item header integration (test 3 ways) 2022-01-06 19:04:24 +01:00
Mathieu Jaumotte c32b767d9b Notifications list template 2022-01-06 19:04:16 +01:00
Mathieu Jaumotte 140f53b81f setting NotificationReadToggle options for several cases. improve options 2022-01-06 13:34:39 +01:00
Mathieu Jaumotte b9e5734039 bouton bleu 2022-01-05 21:16:47 +01:00
Mathieu Jaumotte f5f5d66f3d design notification box in post menu area 2022-01-05 20:58:51 +01:00
Mathieu Jaumotte 1e0c62b09d Merge branch 'master' into notification/completion 2022-01-05 11:15:49 +01:00
julienfastre 78cf817921 docgen: add location to accompanying period 2022-01-04 23:50:22 +01:00
julienfastre 40a457ba69 notificaiton: add mailer component 2022-01-04 22:41:17 +01:00
julienfastre 66aac8908c notification: fix translations 2022-01-04 22:41:04 +01:00
julienfastre c17fd968be notification: do not show system notification in UI 2022-01-04 22:40:48 +01:00
julienfastre 6f561f57a6 Notification: send an email when a notification is created 2022-01-04 22:35:23 +01:00
Mathieu Jaumotte 4f1540c541 add a patch resource api endpoint (wip) 2022-01-04 19:37:27 +01:00
julienfastre 4ef024516c notificaiton: improve NotificationHandlerInterface + mark notification
as unread if a comment is appended
2022-01-04 19:02:03 +01:00
julienfastre ebc6d21ba6 notification: order notification by date desc in inbox and sent 2022-01-04 18:38:08 +01:00
julienfastre d31661ae7a notification: fix NotificationHandlerInterface 2022-01-04 17:55:34 +01:00
julienfastre f76f7a1641 notification: handle activities 2022-01-04 17:40:47 +01:00
Pol Dellaiera f63afea2ce Autofix code style. 2022-01-04 17:32:05 +01:00
Pol Dellaiera 660e45ac59 tests: Tag failing test as incomplete. 2022-01-04 17:27:30 +01:00
Pol Dellaiera e619e58a6e tests: Tag failing test as incomplete. 2022-01-04 17:20:25 +01:00
julienfastre 160d382e07 notification: add notification sent to widget which list notifications
ont an entity
2022-01-04 17:14:09 +01:00
julienfastre a8fe049ecd notification: add more variable in twig template 2022-01-04 17:00:31 +01:00
julienfastre 3a207b2c5d Notification: add a counter for notifications 2022-01-04 16:44:01 +01:00
Pol Dellaiera 08de360677 tests: Tag failing test as incomplete. 2022-01-04 16:38:21 +01:00
Pol Dellaiera e2ad590310 tests: Get rid of PHPUnit deprecations. 2022-01-04 16:29:49 +01:00
Pol Dellaiera 6ebcd87508 tests: Replace assertInternalType with proper method.
See https://github.com/sebastianbergmann/phpunit/issues/3369
2022-01-04 16:21:06 +01:00
nobohan 06f8014b76 Merge branch 'master' into issue303_household_fixes 2022-01-04 16:06:15 +01:00
nobohan 52f817bde7 fix conflicts when merging master 2022-01-04 15:56:32 +01:00
Mathieu Jaumotte af2eca0d03 Change accompanyingCourse Resources comment by a string 2022-01-04 15:56:00 +01:00
Pol Dellaiera 33913867ee cs: Use Collection more and fix potential duplicates. 2022-01-04 15:55:56 +01:00
julienfastre bcd25fa950 Merge branch 'issue349-masonry' into 'master'
Issue349 masonry

See merge request Chill-Projet/chill-bundles!274
2022-01-04 14:38:04 +00:00
Pol Dellaiera acf7142bad cs: Use Collection more. 2022-01-04 15:29:17 +01:00
Pol Dellaiera c8c5af8d14 cs: Update PersonJsonNormalizer. 2022-01-04 15:18:03 +01:00
nobohan aa6b770bfe fix conflict 2022-01-04 15:11:43 +01:00
nobohan 4d5d5265df fix alt name choice array 2022-01-04 15:10:03 +01:00
Pol Dellaiera d19c5c9e41 cs: Autofix. 2022-01-04 15:07:41 +01:00
Pol Dellaiera cf588c97c0 cs: Autofix. 2022-01-04 14:41:52 +01:00
Pol Dellaiera f3f5cc550c sa: Fix PHPStan issue. 2022-01-04 14:41:52 +01:00
Pol Dellaiera c7d00ca937 chore: Optimize composer.json. 2022-01-04 14:41:52 +01:00
nobohan e3c0dca1d1 upd CHANGELOG 2022-01-04 14:39:43 +01:00
nobohan f4c8d0b09a Merge remote-tracking branch 'origin/master' into issue230_person 2022-01-04 13:50:27 +01:00
Mathieu Jaumotte 68ea0a1086 wip delete comment 2022-01-04 12:07:37 +01:00
julienfastre 5bb5468198 notificaiton: add title to list and forms 2022-01-04 11:32:15 +01:00
Mathieu Jaumotte 5fead5b467 fix translation, disable throw exception 2022-01-04 11:18:56 +01:00
Pol Dellaiera 72a15bb823 chore: Update composer.json. 2022-01-04 11:15:13 +01:00
julienfastre 0edd5667e0 fix cs 2022-01-04 11:09:59 +01:00
Mathieu Jaumotte 862f9aefb0 update changelog 2022-01-04 10:27:28 +01:00
julienfastre 45dd21e02a add component and type to add user dynamically 2022-01-03 15:42:24 +01:00
julienfastre 5bf1b9d8bd send system notification on period confirmation 2021-12-30 02:11:21 +01:00
julienfastre 7bc4ad9779 twig extension for listing notification on a given entity 2021-12-30 01:02:16 +01:00
julienfastre 1576507f7e notification: fix widget toggle read status 2021-12-29 23:09:26 +01:00
julienfastre 9ddfd194be notification: small vue component to toggle read status of a notification 2021-12-29 18:51:25 +01:00
julienfastre 8fe94bd117 notification: update comment and api endpoint for marking as read/unread 2021-12-29 17:36:14 +01:00
julienfastre 9d638fe897 allow to edit notification 2021-12-29 15:24:52 +01:00
julienfastre 478c3b3247 notification: add update information 2021-12-29 15:12:27 +01:00
Mathieu Jaumotte dc581fcf57 fix details and corrections 2021-12-29 15:06:33 +01:00
Mathieu Jaumotte bd909b0061 fix details and corrections 2021-12-29 14:57:18 +01:00
julienfastre 58c7560a1c Merge remote-tracking branch 'origin/notification/completion' into notification/completion 2021-12-29 14:46:55 +01:00
Mathieu Jaumotte 9e67d9586d masonry: add origin bloc 2021-12-29 12:32:19 +01:00
Mathieu Jaumotte 982dd78828 put back warnings inside condition 2021-12-29 12:15:21 +01:00
Mathieu Jaumotte 1055fd9398 masonry: raise comment bloc width 2021-12-29 12:13:39 +01:00
Mathieu Jaumotte 5089bba4d7 improve masonry bloc style 2021-12-29 12:11:20 +01:00
Mathieu Jaumotte 433307020a add a new button to send notifications 2021-12-29 10:52:15 +01:00
julienfastre 5a5ff5f54a notification: fix type for id 2021-12-28 23:32:11 +01:00
julienfastre a0b112e8db notificaiton: handle remove addressee and reset at the end of registering unread 2021-12-28 23:31:33 +01:00
julienfastre cb88a37885 notification: add comment in show and append comment 2021-12-28 23:25:12 +01:00
julienfastre 9647785d8b notificaton: add comments 2021-12-28 23:03:58 +01:00
julienfastre 1ad6a958e2 notification: add show action 2021-12-28 22:35:15 +01:00
julienfastre f453dbb543 notification: more check in test 2021-12-28 20:04:30 +01:00
julienfastre b323ddae05 fix loading of unread addressees in notification 2021-12-28 19:40:38 +01:00
julienfastre d5d64cdf65 upgrade test app 2021-12-26 01:12:42 +01:00
julienfastre 700bb02374 notification: add test for unread consistency 2021-12-26 01:12:32 +01:00
julienfastre bd3919efcb notification: store users which are unread instead of read, and in
dedicated table

The query "which are the unread notification" is much more frequent than
the read one. We then store the unread items in a dedicated table.
2021-12-26 01:00:50 +01:00
julienfastre f6f0786d38 notificaiton: load interface automatically 2021-12-25 22:53:35 +01:00
julienfastre 5cebcfddb7 fix cs ? 2021-12-25 22:51:58 +01:00
julienfastre 11824adda4 notification: create 2021-12-25 22:41:25 +01:00
julienfastre d62893827b create a notification controller 2021-12-25 22:16:34 +01:00
julienfastre e972beee11 fix controller loading and add UserMenu entry 2021-12-25 20:47:54 +01:00
Pol Dellaiera 6a0ce72836 tests: Remove @expectException annotation. 2021-12-21 16:22:31 +01:00
Pol Dellaiera f93b1935ee ci: Update PHPUnit behavior. 2021-12-21 16:14:27 +01:00
Pol Dellaiera 64ec3e62da ci: Update PHPUnit behavior. 2021-12-21 15:52:47 +01:00
Pol Dellaiera 492d5caaf0 fix: Fix return types in tests. 2021-12-21 15:39:09 +01:00
Pol Dellaiera 2ed3a91d8e fix: Fix return types in tests. 2021-12-21 15:32:58 +01:00
Pol Dellaiera b55c19cd9e fix: Fix return types in tests. 2021-12-21 15:26:22 +01:00
Pol Dellaiera 70ca203e23 fix: Fix return types in tests. 2021-12-21 15:19:36 +01:00
Pol Dellaiera 58a13d932f fix: Fix return types in tests. 2021-12-21 15:12:15 +01:00
Pol Dellaiera 11c6f6d84a Fix code-style. 2021-12-21 15:02:43 +01:00
Pol Dellaiera 3d0be940f0 fix: Fix return types in tests. 2021-12-21 15:02:12 +01:00
Pol Dellaiera ea839a4b52 fix: Add missing UUID doctrine type. 2021-12-21 14:54:37 +01:00
Mathieu Jaumotte 793f7724a7 Merge branch 'master' of gitlab.com:Chill-Projet/chill-bundles 2021-12-21 14:44:50 +01:00
Mathieu Jaumotte 40e7bfef4d Merge branch 'design_corrections' 2021-12-21 14:44:23 +01:00
Pol Dellaiera d692793714 fix: Add missing UUID doctrine type. 2021-12-21 14:31:31 +01:00
Pol Dellaiera 01ef9617d6 chore: Require symfony/serializer ^5.3 because we are using Serialization contexts. 2021-12-21 12:23:10 +01:00
Pol Dellaiera 530ad497bc cs: Fix code-style. 2021-12-21 12:13:20 +01:00
Pol Dellaiera e2bc868495 sa: Update PSalm baseline. 2021-12-21 12:05:36 +01:00
Pol Dellaiera b743475761 sa: Fix all issues related to PHP versions and static-analysis. 2021-12-21 11:58:58 +01:00
Pol Dellaiera b3823161af fix: Do not use deprecated classes. 2021-12-21 11:18:17 +01:00
Pol Dellaiera beeb69c70d chore: Update composer.json
Restrict to PHP 7.4.
Fix versions of packages using branches.
2021-12-21 11:15:19 +01:00
Pol Dellaiera 8401ce2656 cs: Fix code-style (using PHPCSFixer and PHPCS). 2021-12-21 10:59:23 +01:00
Pol Dellaiera b7360955f7 chore: Relax dependencies for faster composer install. 2021-12-21 10:52:14 +01:00
Pol Dellaiera 8c3fb6dfa7 Merge branch 'feat/add-psalm-checks' 2021-12-21 10:15:34 +01:00
Pol Dellaiera c84ba5371d test: Do not use PHP 8 keywords yet.
It's much too early ! :)
2021-12-21 10:06:18 +01:00
Pol Dellaiera 4d9c643977 test: Add psalm checks. 2021-12-21 09:59:20 +01:00
Mathieu Jaumotte f117dcd703 objective-result-eval: display as a table in lists and dashboards 2021-12-20 15:46:07 +01:00
Mathieu Jaumotte 67c1760b51 fix bootstrap class 2021-12-20 13:53:49 +01:00
Mathieu Jaumotte 97792fd85f Merge branch 'master' of gitlab.com:Chill-Projet/chill-bundles 2021-12-20 12:58:35 +01:00
Mathieu Jaumotte ae43e23ec6 Merge branch 'master' into issue321_layout_improvements_actionForm 2021-12-20 12:56:41 +01:00
Mathieu Jaumotte 6a4d7fbece AccompanyingCourseWorkEdit: fix bug, remove goal one by one
(adding a temporary negative index on just created goals)
2021-12-20 12:52:29 +01:00
Mathieu Jaumotte 1a0dcfa8d0 Merge branch 'issue265' 2021-12-17 16:20:15 +01:00
Mathieu Jaumotte 66f407ab8c filiation: fix 265 https://gitlab.com/champs-libres/departement-de-la-vendee/accent-suivi-developpement/-/issues/265 2021-12-17 16:19:28 +01:00
Mathieu Jaumotte c7e992fd1a rename title (https://gitlab.com/champs-libres/departement-de-la-vendee/accent-suivi-developpement/-/issues/177) 2021-12-17 11:51:44 +01:00
Mathieu Jaumotte 3d16f68f54 accompanyingcourse-work: improve ui 2021-12-17 08:16:39 +01:00
julienfastre 36890a2256 person document: fix use of deprecated role class 2021-12-17 00:33:02 +01:00
Mathieu Jaumotte 395920bd51 suggest-list: picto is managedby css 2021-12-17 00:22:20 +01:00
julienfastre 773aee5534 address reference: add index for refid 2021-12-16 22:41:37 +01:00
Mathieu Jaumotte a6cc6221d6 restore badge-title appearance 2021-12-16 22:35:47 +01:00
Mathieu Jaumotte 37ed6b7591 revert some scss conflicts with suggest-list 2021-12-16 22:18:17 +01:00
julienfastre cdc335372f person denormalization: use object to populate if any 2021-12-16 22:02:00 +01:00
julienfastre e0bed186b8 normalization of date: allow null 2021-12-16 22:01:35 +01:00
Mathieu Jaumotte d588c36308 Merge branch '327_pinned_comment' into issue321_layout_improvements_actionForm 2021-12-16 21:41:22 +01:00
julienfastre 06cbe8325c fix person validation 2021-12-16 21:39:59 +01:00
julienfastre 400ce3ac82 remove dead code 2021-12-16 21:28:53 +01:00
julienfastre 14aab637eb start to simplify validation groups for person 2021-12-16 21:23:40 +01:00
julienfastre 6296c7a307 household/address: show date validFrom and validTo when moving Household 2021-12-16 21:23:40 +01:00
julienfastre b613a2f49b holder: fix when repositionning/moving member on same day
* if holder has not the index '0', validator fails. Use the method
Collection::first
* change constraint to allow a move on household on same day
2021-12-16 21:23:34 +01:00
Mathieu Jaumotte 91bee4aad3 wip goal-result on resume page 2021-12-16 18:55:21 +01:00
Mathieu Jaumotte 45b71b207e activity fix: display comment in list 2021-12-16 13:58:43 +01:00
julielenaerts 751a418c1f Update changelog 2021-12-16 10:42:02 +01:00
julielenaerts 8cf08f66d5 Fix bug in singleTaskController 2021-12-16 10:41:51 +01:00
julielenaerts b7c0548212 Fix style of dropdown menu 2021-12-16 10:41:36 +01:00
julienfastre 408a14926f Merge branch 'docgen/add-base-context' 2021-12-15 23:52:51 +01:00
julienfastre efdd96b69f docgen: person normalization: fix typing of age 2021-12-15 23:51:41 +01:00
julienfastre 10ebf0b63a Merge branch 'docgen/add-base-context' into 'master'
Docgen/add base context

See merge request Chill-Projet/chill-bundles!270
2021-12-15 22:43:06 +00:00
julienfastre d4a5735e15 Docgen/add base context 2021-12-15 22:43:06 +00:00
julienfastre 9453fc2dd5 docgen: add age and base context 2021-12-15 23:42:37 +01:00
Mathieu Jaumotte f01b87b348 comments: form controller 2021-12-15 23:34:41 +01:00
julienfastre 689f612382 fix cs 2021-12-15 23:05:37 +01:00
julienfastre 17a81d7e66 build base context data 2021-12-15 23:05:25 +01:00
julienfastre 6501a0148e fix downloading document 2021-12-15 22:14:20 +01:00
julienfastre 44d38bcef5 fix typing for email 2021-12-15 22:14:20 +01:00
julienfastre 75dda5b999 userpicker: fix role type: adapt on both allowed types 2021-12-15 22:14:20 +01:00
julienfastre 46ecab24c2 update changelog 2021-12-15 22:14:20 +01:00
julienfastre 45c608cd48 AddPerson: optimize request while searching
* wait for a person to finish to type: delay before launching request;
* cancel previous requests, if any
2021-12-15 22:14:20 +01:00
julielenaerts ecbe30ae53 person create button style changed to full width + update changelog 2021-12-15 14:21:31 +01:00
Mathieu Jaumotte 4e8492db70 Merge branch 'master' of gitlab.com:Chill-Projet/chill-bundles 2021-12-15 00:15:24 +01:00
Mathieu Jaumotte 48f62a2a17 refund template design for person household_history 2021-12-15 00:14:31 +01:00
julienfastre decc74c040 Merge branch 'issue332_location_activity' into 'master'
fix: add availableForUsers condition from locationType in the location API endpoint

See merge request Chill-Projet/chill-bundles!264
2021-12-14 22:28:09 +00:00
julienfastre de790d11a8 activity/location: refactor
Refactor the way for loading locations:

* fix showing the default location
* fix when there is not thirdparty default location
* separate api queries instead of inlines;
* use the store instead of the mounted
* refactored for a possible re-use in calendar
2021-12-14 23:20:47 +01:00
julienfastre 3a9fac08c3 Merge remote-tracking branch 'origin/master' into issue332_location_activity 2021-12-14 19:55:16 +01:00
julienfastre f4fe297765 Merge branch 'issue336_internal_create_action_fixes' into 'master'
Issue336 internal create action fixes

See merge request Chill-Projet/chill-bundles!268
2021-12-14 18:48:31 +00:00
LenaertsJ 264bd76461 Issue336 internal create action fixes 2021-12-14 18:48:31 +00:00
Mathieu Jaumotte 45bcb27b79 Merge branch 'master' into fixes/thirdparty 2021-12-14 18:42:25 +01:00
Mathieu Jaumotte cf22a49487 Merge branch 'master' into 327_pinned_comment 2021-12-14 18:40:12 +01:00
Mathieu Jaumotte e71e369f15 temporary disable comment page in menu 2021-12-14 18:39:22 +01:00
Mathieu Jaumotte 1a604ecf65 Merge branch 'master' into divers 2021-12-14 18:32:12 +01:00
Mathieu Jaumotte da7bfa8a4e thirdparty: fix denormalization of thirdparty 2021-12-14 15:46:55 +01:00
Mathieu Jaumotte d3127bed6d thirdparty: add address on kind = contact 2021-12-14 14:57:11 +01:00
Mathieu Jaumotte 3c1c07dc64 comments: edit links with anchor and parameter 2021-12-14 10:54:44 +01:00
Mathieu Jaumotte 530267a9b0 commments: add basic form in template 2021-12-14 10:31:51 +01:00
julienfastre f9dd1c5231 fix cs 2021-12-13 22:57:50 +01:00
julienfastre f2fd30b690 add ordering to social issue and social action 2021-12-13 22:48:54 +01:00
julienfastre 3d3cc9aeb4 fix import 2021-12-13 22:19:05 +01:00
Mathieu Jaumotte 8b2a8544b8 form type and controller, wip 2021-12-13 21:58:56 +01:00
Mathieu Jaumotte be5f54c142 comments: build list 2021-12-13 21:49:03 +01:00
julienfastre 1fbe044729 update schema: an evaluation may be linked to multiple actions 2021-12-13 21:42:29 +01:00
julielenaerts 60032c96f7 update changelog and cs-fixer 2021-12-13 19:43:07 +01:00
julielenaerts 976f2fd41a fix thirdparty renderbox after merge 2021-12-13 19:37:19 +01:00
julielenaerts 19741530bf Corrections after merge (double declares) 2021-12-13 19:24:21 +01:00
julielenaerts 6e079fa771 Fix bug remove associated party in activity form 2021-12-13 19:24:03 +01:00
julielenaerts 8c14232a91 Conflict resolved after rebase 2021-12-13 19:16:53 +01:00
julielenaerts a983b34f0d styling adjusted 2021-12-13 19:06:27 +01:00
julielenaerts 4970cf000e behavior and style changed for adding motifs,obectifs, dispositifs 2021-12-13 19:06:27 +01:00
julielenaerts 1422ddeb2a restyling and deleting of console.logs 2021-12-13 19:06:27 +01:00
julielenaerts 9afc8c64ad stylefix 2021-12-13 19:06:27 +01:00
julielenaerts 200f1749f1 patchOnTheFly action added to store, bug in posting thirdparty though 2021-12-13 19:06:27 +01:00
julielenaerts 4645ede7d1 social issue added to title 2021-12-13 19:06:27 +01:00
julielenaerts 6016038813 add modal to confirm delete action + delete button changed 2021-12-13 19:06:06 +01:00
julielenaerts d40b0e88ed change of masquer message, removal double import 2021-12-13 19:06:06 +01:00
julielenaerts f26863487b fix badge mixin 2021-12-13 19:06:06 +01:00
julienfastre 5b531a0529 improve docgen wip 2021-12-13 19:04:37 +01:00
julienfastre a25123ee38 add docgen:normalization for relation 2021-12-13 19:03:42 +01:00
julienfastre 2524229941 docgen normalization for relation 2021-12-13 19:03:22 +01:00
julielenaerts 119a9981af Using thirdparty renderbox to display intervening thirdparties 2021-12-13 19:02:26 +01:00
julielenaerts decc18596b minor adjustment to allow for action title banner with correct colors 2021-12-13 19:01:36 +01:00
julielenaerts eea72c9bcd fix after rebase 2021-12-13 19:01:36 +01:00
julielenaerts 717b71ff54 first commit 2021-12-13 19:01:36 +01:00
julienfastre 64015479b1 improve docgen, trnslations, admin 2021-12-13 19:01:36 +01:00
julienfastre 18fa4eb586 fix tests (wip) 2021-12-13 19:00:13 +01:00
julienfastre 47574f82aa fix code style 2021-12-13 19:00:13 +01:00
julienfastre 12309ca1b5 fix tests (wip) 2021-12-13 18:59:43 +01:00
julielenaerts 20c95a179d first commit 2021-12-13 18:58:17 +01:00
Mathieu Jaumotte d5290e4bdd create comments page, with menu entry, route and template 2021-12-13 17:25:39 +01:00
Mathieu Jaumotte f4396459a0 comments: add isPinned() method 2021-12-13 16:42:41 +01:00
Mathieu Jaumotte f8071d32c0 batch replace/rename initialComment by pinnedComment 2021-12-13 16:31:16 +01:00
julienfastre 4dc490beb7 change public function to protected function 2021-12-13 14:57:36 +00:00
Mathieu Jaumotte 52a137ee77 thirdparty: no need to burst the code: complete commit 1efdade38 2021-12-13 15:46:02 +01:00
Mathieu Jaumotte 985d8f0eae thirdparty form: clean builder, and test if this kind input address 2021-12-13 15:33:43 +01:00
nobohan f0a8aa6c90 upd CHANGELOG 2021-12-13 15:06:35 +01:00
nobohan bbebaa9fae household member editor: comment markNoAddress button 2021-12-13 14:58:01 +01:00
Mathieu Jaumotte 5526790d42 diaplay initialComment on course resume page 2021-12-13 14:49:16 +01:00
nobohan 159dba0dc3 household member editor: do not add in new members if the member is included in the members of household 2021-12-13 14:36:08 +01:00
julielenaerts 550b4775bf behavior and style changed for adding motifs,obectifs, dispositifs 2021-12-13 14:32:59 +01:00
nobohan f2c724726a household member editor: fix show other household warning + wording 2021-12-13 14:16:01 +01:00
Mathieu Jaumotte 133e4858dc household_member_editor: fix translation for onthefly and address modal, fix button appearance 2021-12-13 13:54:29 +01:00
Mathieu Jaumotte b3ee745479 fix vue translation 2021-12-13 12:44:47 +01:00
nobohan 13faf6fe5a household member editor: display when a concerned person already belongs to a household 2021-12-13 12:19:23 +01:00
nobohan da12aedb53 household: redirect to the household page when a household is created from a person 2021-12-13 11:19:29 +01:00
nobohan af87b3f6da household: add onthefly translations 2021-12-13 11:19:29 +01:00
nobohan 872090e02a household: change translations + add address i18n in household component 2021-12-13 11:19:29 +01:00
nobohan 4b432c64b0 php cs fixer 2021-12-13 11:07:30 +01:00
nobohan 8493a64794 upd CHANGELOG 2021-12-13 11:05:46 +01:00
nobohan 82c027fe2a add the current location of the user as API point + add it in the activity location list 2021-12-13 11:04:10 +01:00
Mathieu Jaumotte 7f2e3ee8e2 fix filiation error with gender undefined (#331) 2021-12-13 09:45:46 +01:00
Mathieu Jaumotte 7129b3149b undo partial wip resolution 2021-12-13 09:45:05 +01:00
nobohan 1e99ca2ca5 fix: add availableForUsers condition from locationType in the location API endpoint 2021-12-13 09:41:27 +01:00
Mathieu Jaumotte cc42a4ae51 Merge branch 'divers' of gitlab.com:Chill-Projet/chill-bundles into divers 2021-12-13 09:33:37 +01:00
Mathieu Jaumotte 6c28ff00ab onthefly create thirdparty: use badge-entity for radio buttons label 2021-12-13 09:30:34 +01:00
Mathieu Jaumotte d7db8400d2 accompanyingCourse list: display badges as clickable onthefly modal 2021-12-13 09:30:34 +01:00
Mathieu Jaumotte 16b3be322a actions list: display badges as clickable onthefly modal 2021-12-13 09:30:34 +01:00
julielenaerts 329026e36c restyling and deleting of console.logs 2021-12-10 17:47:16 +01:00
julielenaerts 19a53ada88 stylefix 2021-12-10 17:24:38 +01:00
julielenaerts 4c31100dc7 patchOnTheFly action added to store, bug in posting thirdparty though 2021-12-10 17:14:18 +01:00
julielenaerts 536a1a46da social issue added to title 2021-12-10 17:01:06 +01:00
julielenaerts 5ed7572f95 bugfix 2021-12-10 17:00:19 +01:00
julielenaerts f1067661d4 add modal to confirm delete action + delete button changed 2021-12-10 17:00:04 +01:00
Mathieu Jaumotte 3592434623 onthefly create thirdparty: use badge-entity for radio buttons label 2021-12-10 15:37:12 +01:00
Mathieu Jaumotte 94ec165c4c accompanyingCourse list: display badges as clickable onthefly modal 2021-12-10 14:30:16 +01:00
Mathieu Jaumotte 1c3c2be176 actions list: display badges as clickable onthefly modal 2021-12-10 14:10:23 +01:00
julielenaerts edaad844aa Merge branch 'docgen/improve-normalizer' into issue321_layout_improvements_actionForm 2021-12-10 11:47:30 +01:00
julielenaerts 2edf36b6c5 change of masquer message, removal double import 2021-12-10 11:47:01 +01:00
julielenaerts 95e45a8ad2 fix badge mixin 2021-12-10 10:46:47 +01:00
julienfastre 9004686a13 improve docgen wip 2021-12-10 01:10:55 +01:00
julienfastre e266fa0e5d show errors from relatorio driver 2021-12-09 21:50:56 +01:00
julienfastre 75ba56fa09 add verification tool for admin 2021-12-09 21:14:12 +01:00
julienfastre 12d6829b98 fix type with phonenumber helper 2021-12-09 14:17:42 +01:00
julienfastre 7b5e96771f Merge remote-tracking branch 'origin/master' into docgen/improve-normalizer 2021-12-09 14:11:14 +01:00
julienfastre 8a9024de13 add docgen:normalization for relation 2021-12-09 13:51:36 +01:00
julielenaerts 9387d37746 Resolve merge conflict 2021-12-09 13:49:22 +01:00
julienfastre 24a404964b docgen normalization for relation 2021-12-09 12:44:41 +01:00
julielenaerts 534a8bb3af Using thirdparty renderbox to display intervening thirdparties 2021-12-09 12:35:52 +01:00
julielenaerts 21e3da0266 minor adjustment to allow for action title banner with correct colors 2021-12-09 12:34:44 +01:00
julielenaerts 85a1fcca18 fix after rebase 2021-12-09 11:49:37 +01:00
julielenaerts 793f5116ab first commit 2021-12-09 11:39:15 +01:00
julienfastre 5d24bd4d11 Merge branch 'master' into docgen/improve-normalizer 2021-12-08 21:08:30 +01:00
julienfastre 70ab232149 improve docgen, trnslations, admin 2021-12-08 13:58:49 +01:00
julienfastre 027c01fc58 fix css block 2021-12-08 12:23:24 +01:00
julienfastre fdc5127c74 fix some error in test (wip) 2021-12-08 11:57:16 +01:00
julienfastre b8d48f04ae fix tests (wip) 2021-12-08 11:47:50 +01:00
julienfastre f1b1771d6b fix tests (wip) 2021-12-08 11:35:00 +01:00
julienfastre 62dabbe1e7 fix code style 2021-12-08 11:14:46 +01:00
julienfastre 4101392190 fix tests and type hinting 2021-12-08 11:13:49 +01:00
julienfastre 3f1bed0b1c fix tests (wip) 2021-12-08 11:05:41 +01:00
julienfastre 79fbdcdee4 type hint User class 2021-12-08 11:05:29 +01:00
julienfastre 3d8d79323e remove error messages 2021-12-08 10:56:30 +01:00
julienfastre 32178e22fe fix tests (wip) 2021-12-08 10:51:30 +01:00
julienfastre 60a8c20896 update app 2021-12-08 10:29:54 +01:00
julienfastre 9d8011da61 fix loading origin 2021-12-08 10:06:35 +01:00
julienfastre 789eeadb40 fix loading fixtures for doc generator template 2021-12-08 09:52:51 +01:00
julienfastre f206fdb08c fix code style 2021-12-08 09:52:35 +01:00
julienfastre 9d5409d8d9 fix casting 2021-12-08 09:52:06 +01:00
julienfastre e297d82533 fixes on tests [WIP] 2021-12-08 09:26:13 +01:00
julielenaerts 32a7734d30 first commit 2021-12-03 18:58:57 +01:00
nobohan 8affeb08d9 person: add altnames in the onthefly component 2021-12-03 12:10:02 +01:00
nobohan 047083812e person: add altNames in person form: v-model option but not working 2021-12-03 11:27:18 +01:00
nobohan 49da5fe060 person: fix altname denormalisation 2021-12-02 12:00:57 +01:00
nobohan bcdddcde9b person: new person modal: add email field + re-order fields 2021-12-02 10:59:59 +01:00
nobohan 64d3edfc42 person: [technical debt]: hardcode altname array 2021-12-02 10:59:59 +01:00
nobohan 912f9bacdb person: document altname api endpoint in swagger 2021-12-02 10:59:59 +01:00
nobohan 55e94fbe2a person: retrieve altname config with ConfigPersonAltNamesHelper 2021-12-02 10:59:59 +01:00
nobohan c5acfc9bbc person: deserialise altnames (WIP) 2021-12-02 10:59:59 +01:00
nobohan 780b7db8cb person: add altnames in the person creation modal 2021-12-02 10:59:59 +01:00
nobohan d71d1beb42 person: remove api endpoint (was a mistake) 2021-12-02 10:59:59 +01:00
nobohan 3d3ce7814b person: add api endpoint for altname + implement getValidationGroups 2021-12-02 10:59:59 +01:00
nobohan 438cb7317a person: add api point for altname config 2021-12-02 10:59:59 +01:00
657 changed files with 11851 additions and 2879 deletions
-1
View File
@@ -3,4 +3,3 @@
# Run tests from root to adapt your own environment
KERNEL_CLASS='App\Kernel'
APP_SECRET='$ecretf0rt3st'
DATABASE_URL=postgresql://postgres:postgres@db:5432/postgres?serverVersion=12&charset=utf8
+15 -2
View File
@@ -20,6 +20,8 @@ variables:
# Configure postgres environment variables (https://hub.docker.com/r/_/postgres/)
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
# configure database access
DATABASE_URL: postgresql://postgres:postgres@db:5432/postgres?serverVersion=12&charset=utf8
# fetch the chill-app using git submodules
GIT_SUBMODULE_STRATEGY: recursive
REDIS_HOST: redis
@@ -60,7 +62,7 @@ code_style:
- bin
- tests/app/vendor/
sa_tests:
phpstan_tests:
stage: Tests
image: registry.gitlab.com/chill-projet/chill-app/php-base-image:7.4
script:
@@ -71,6 +73,17 @@ sa_tests:
- bin
- tests/app/vendor/
psalm_tests:
stage: Tests
image: registry.gitlab.com/chill-projet/chill-app/php-base-image:7.4
script:
- bin/grumphp run --tasks=psalm
artifacts:
expire_in: 30 min
paths:
- bin
- tests/app/vendor/
unit_tests:
stage: Tests
image: registry.gitlab.com/chill-projet/chill-app/php-base-image:7.4
@@ -79,7 +92,7 @@ unit_tests:
- php -d memory_limit=2G tests/app/bin/console cache:clear --env=dev
- php -d memory_limit=3G tests/app/bin/console doctrine:fixtures:load -n
- php -d memory_limit=2G tests/app/bin/console cache:clear --env=test
- php -d memory_limit=3G bin/phpunit --colors=never
- php -d memory_limit=4G bin/phpunit --colors=never
artifacts:
expire_in: 30 min
paths:
+79 -4
View File
@@ -11,9 +11,85 @@ and this project adheres to
## Unreleased
<!-- write down unreleased development here -->
* [person] name suggestions within create person form when person is created departing from a search input (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/377)
* [parcours]: bug fix when comment is pinned all other comments remain in the collection (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/385)
## Test releases
### test release 2022-01-19
* vuejs: add dead information on all on-the-fly person render boxes, in vis graph and other templates (https://gitlab.com/champs-libres/departement-de-la-vendee/accent-suivi-developpement/-/issues/271)
* [thirdparty] fix bug in 3rd party view: types was replaced by thirdPartyTypes
* [main] location form type: fix unmapped address field (https://gitlab.com/champs-libres/departement-de-la-vendee/accent-suivi-developpement/-/issues/246)
* [activity] fix wrong import of js assets for adding and viewing documents in activity (https://gitlab.com/champs-libres/departement-de-la-vendee/accent-suivi-developpement/-/issues/83 & https://gitlab.com/champs-libres/departement-de-la-vendee/accent-suivi-developpement/-/issues/176)
* [person]: space added between deathdate and age in twig renderbox (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/380)
### test release 2022-01-17
* [main] Add editableByUser field to locationType entity, adapt the admin template and add this condition in the location-type endpoint (see https://gitlab.com/champs-libres/departement-de-la-vendee/accent-suivi-developpement/-/issues/297)
* [main] Add mainLocation field to User entity and add it in user form type
* rewrite page which allow to select activity
* [main] Add mainLocation field to User entity and add it in user form type
* [course list in person context] show full username/label for ref
* [accompanying period work] remove the possibility to generate document from an accompanying period work
## Test releases
* vuejs: add validation on required fields for AddPerson, Address and Location components
* vuejs: treat 422 validation errors in locations and AddPerson components
### test release 2022-01-12
* fix thirdparty normalizer on telephone field: https://gitlab.com/champs-libres/departement-de-la-vendee/accent-suivi-developpement/-/issues/322
### test release 2022-01-11
* vuejs: translate in French all multiselect widgets
* [address] define address lines according postal standards for France and Belgium (default) and change AddressRender, chill_entity_render_box and AddressRenderBox.vue
* [household] change translations (champs-libres/departement-de-la-vendee/accent-suivi-developpement#109)
* [household] add address i18n in household component (champs-libres/departement-de-la-vendee/accent-suivi-developpement#158)
* [household] add on the fly i18n in household component
* [household] redirect to the household page when a household is created from a person (champs-libres/departement-de-la-vendee/accent-suivi-developpement#175)
* [household] household member editor: display alert if some members have already an household (champs-libres/departement-de-la-vendee/accent-suivi-developpement#172)
* [household] household member editor: do not add in new members if the member is included in the members of household (champs-libres/departement-de-la-vendee/accent-suivi-developpement#123)
* [household] household member editor: remove markNoAddress button (champs-libres/departement-de-la-vendee/accent-suivi-developpement#109)
* [person]: ordering fields in add person (https://gitlab.com/champs-libres/departement-de-la-vendee/accent-suivi-developpement/-/issues/61)
* [person]: Add email and alt names in add person (https://gitlab.com/champs-libres/departement-de-la-vendee/accent-suivi-developpement/-/issues/61)
* [accompanyingCourse] Add a delete action and delete buttons to delete a accompanying course when step = DRAFT (https://gitlab.com/champs-libres/departement-de-la-vendee/accent-suivi-developpement/-/issues/64)
* [accompanyingCourse] Add a administrative location in the accompanying course, set the user current location as default, allow to select a location in a select field and do not allow to confirm the accompanying course if location is empty.
* [accompanyingCourse] Add the administrative location in the available variables for document generation
* AddAddress: optimize loading: wait for the user finish typing;
* UserPicker: fix bug with deprecated role
* docgen: add base context + tests
* docgen: add age for person
* [household menu] fix filiation order https://gitlab.com/champs-libres/departement-de-la-vendee/accent-suivi-developpement/-/issues/265
* [AddAddress]: optimize loading: wait for the user finish typing;
* [UserPicker]: fix bug with deprecated role
* [docgen]: add base context + tests
* [docgen]: add age for person
* [task]: fix dropdown menu style + fix bug in singleTaskController (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/338)
* Household: fix bug when moving person on the same day (see https://gitlab.com/champs-libres/departement-de-la-vendee/accent-suivi-developpement/-/issues/281)
* Household: show date validFrom and validTo when moving
* address reference: add index for refid
* [accompanyingCourse_work] fix styles conflicts + fix bug with remove goal (remove goals one at a time)
* [accompanyingCourse] improve masonry on resume page, add origin
* [notification] new notification interface, can be associated to AccompanyingCourse/Period, Activities.
* List notifications, show, and comment in User section
* Notify button and contextual notification box on associated objects pages
* [accompanyingCourse] add a comment for each resource associated. A modal allow to save comment. Comment is displayed in on-the-fly show modal of the accompanyingCourse context (edit page + resume page).
### test release 2021-12-14
* [asideactivity] creation of aside activity category fixed (https://gitlab.com/champs-libres/departement-de-la-vendee/accent-suivi-developpement/-/issues/262)
* [vendee/person] fix typo "situation professionelle" => "situation professionnelle"
* [main] add availableForUsers condition from locationType in the location API endpoint (champs-libres/departement-de-la-vendee/accent-suivi-developpement#248)
* [main] add the current location of the user as API point + add it in the activity location list (champs-libres/departement-de-la-vendee/accent-suivi-developpement#247)
* [activity] improve show/new/edit templates, fix SEE and SEE_DETAILS acl
* [badges] create specific badge for TMS, and make person/thirdparty badges clickable with on-the-fly modal in :
* concerned groups items (activity, calendar)
* accompanyingCourseWork lists
* accompanyingCourse lists
* [acompanyingCourse] add initial comment on Resume page
* [person] create button full width (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/330)
### test release 2021-12-11
* [main] add order field to civility
@@ -34,6 +110,9 @@ and this project adheres to
* [person] add death information in person render box in twig and vue render boxes (https://gitlab.com/champs-libres/departement-de-la-vendee/accent-suivi-developpement/-/issues/191)
* [asideactivity] creation of aside activity category fixed (https://gitlab.com/champs-libres/departement-de-la-vendee/accent-suivi-developpement/-/issues/262)
* [vendee/person] fix typo "situation professionelle" => "situation professionnelle"
* [accompanyingcourse_work] Changes in layout/behavior of edit form (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/321)
* [badge-entity] design coherency between pills badge-person and 3 kinds of badge-thirdparty
* [AddPersons] suggestions row are clickable, not only checkbox
### test release 2021-12-06
@@ -50,10 +129,6 @@ and this project adheres to
* [visgraph] improve and fix bugs on vis-network relationship graph
* [bugfix] posting of birth- and deathdate through api fixed.
* [suggestions] improve suggestions lists
* [badge-entity] design coherency between badge-person and 3 kinds of badge-thirdparty
* [AddPersons] suggestions row are clickable, not only checkbox
* [activity] improve show/new/edit templates, fix SEE and SEE_DETAILS acl
* [activity][calendar] concerned groups items are clickable with on-the-fly modal, create specific badge for TMS column
### Test release 2021-11-19 - bis
+2 -3
View File
@@ -397,7 +397,6 @@ Créer une liste de suggestions à enlever (avec une croix rouge cliquable, l'an
<li>
<span>
item
<a></a>
</span>
</li>
</ul>
@@ -405,8 +404,8 @@ Créer une liste de suggestions à enlever (avec une croix rouge cliquable, l'an
Créer un titre enlevable (avec une croix rouge cliquable, l'ancre a est vide)
```html
<div class="item-title">
title
<a></a>
<span>title</span>
</div>
```
Les classes `cols` ou `inline` peuvent être ajoutées à côté de `list-suggest` pour modifier la disposition de la liste.
Dans le dernier exemple, on met une classe `removable` sur le span, si on veut pouvoir enlever l'élément.
+55 -31
View File
@@ -1,52 +1,56 @@
{
"name": "chill-project/chill-bundles",
"type": "library",
"description": "Most used bundles for chill-project",
"license": "AGPL-3.0-only",
"type": "library",
"keywords": [
"chill",
"social worker"
],
"license": "AGPL-3.0-only",
"require": {
"champs-libres/async-uploader-bundle": "dev-sf4",
"champs-libres/wopi-bundle": "dev-master",
"composer/package-versions-deprecated": "^1.10",
"php": "^7.4",
"champs-libres/async-uploader-bundle": "dev-sf4#d57134aee8e504a83c902ff0cf9f8d36ac418290",
"champs-libres/wopi-bundle": "dev-master#59b468503b9413f8d588ef9e626e7675560db3d8",
"champs-libres/wopi-lib": "dev-master#0e1da19bb6de820080b8651867a7e475be590060",
"doctrine/doctrine-bundle": "^2.1",
"doctrine/doctrine-migrations-bundle": "^3.0",
"doctrine/orm": "^2.7",
"erusev/parsedown": "^1.7",
"graylog2/gelf-php": "^1.5",
"knplabs/knp-menu": "^3.1",
"knplabs/knp-menu-bundle": "^3.0",
"knplabs/knp-time-bundle": "^1.12",
"league/csv": "^9.7.1",
"nyholm/psr7": "^1.4",
"ocramius/package-versions": "^1.10",
"phpoffice/phpspreadsheet": "^1.16",
"ramsey/uuid-doctrine": "^1.7",
"sensio/framework-extra-bundle": "^5.5",
"spomky-labs/base64url": "^2.0",
"symfony/asset": "4.*",
"symfony/browser-kit": "^5.2",
"symfony/css-selector": "^5.2",
"symfony/expression-language": "4.*",
"symfony/form": "4.*",
"symfony/intl": "4.*",
"symfony/mime": "^4 || ^5",
"symfony/asset": "^4.4",
"symfony/browser-kit": "^4.4",
"symfony/css-selector": "^4.4",
"symfony/expression-language": "^4.4",
"symfony/form": "^4.4",
"symfony/framework-bundle": "^4.4",
"symfony/intl": "^4.4",
"symfony/mailer": "^5.4",
"symfony/mime": "^5.4",
"symfony/monolog-bundle": "^3.5",
"symfony/security-bundle": "4.*",
"symfony/serializer": "^5.2",
"symfony/security-bundle": "^4.4",
"symfony/serializer": "^5.3",
"symfony/swiftmailer-bundle": "^3.5",
"symfony/templating": "4.*",
"symfony/translation": "4.*",
"symfony/templating": "^4.4",
"symfony/translation": "^4.4",
"symfony/twig-bundle": "^4.4",
"symfony/validator": "4.*",
"symfony/validator": "^4.4",
"symfony/webpack-encore-bundle": "^1.11",
"symfony/workflow": "4.*",
"symfony/yaml": "4.*",
"twig/extra-bundle": "^2.12 || ^3.0",
"symfony/workflow": "^4.4",
"symfony/yaml": "^4.4",
"twig/extra-bundle": "^3.0",
"twig/intl-extra": "^3.0",
"twig/markdown-extra": "^3.3",
"twig/twig": "^2.12 || ^3.0"
"twig/string-extra": "^3.3",
"twig/twig": "^3.0"
},
"conflict": {
"symfony/symfony": "*"
@@ -56,19 +60,28 @@
"drupol/php-conventions": "^5",
"fakerphp/faker": "^1.13",
"nelmio/alice": "^3.8",
"phpspec/prophecy-phpunit": "^2.0",
"phpstan/phpstan-strict-rules": "^1.0",
"phpunit/phpunit": "^7.0",
"phpunit/phpunit": ">= 7.5",
"symfony/debug-bundle": "^5.1",
"symfony/dotenv": "^5.1",
"symfony/dotenv": "^4.4",
"symfony/maker-bundle": "^1.20",
"symfony/phpunit-bridge": "^5.2",
"symfony/stopwatch": "^5.1",
"symfony/var-dumper": "4.*",
"symfony/web-profiler-bundle": "^5.0"
"symfony/phpunit-bridge": "^4.4",
"symfony/stopwatch": "^4.4",
"symfony/var-dumper": "^4.4",
"symfony/web-profiler-bundle": "^4.4"
},
"config": {
"bin-dir": "bin",
"vendor-dir": "tests/app/vendor"
"optimize-autoloader": true,
"sort-packages": true,
"vendor-dir": "tests/app/vendor",
"allow-plugins": {
"composer/package-versions-deprecated": true,
"phpstan/extension-installer": true,
"ergebnis/composer-normalize": true,
"phpro/grumphp": true
}
},
"autoload": {
"psr-4": {
@@ -95,8 +108,19 @@
"Chill\\DocGeneratorBundle\\Tests\\": "src/Bundle/ChillDocGeneratorBundle/tests"
}
},
"minimum-stability": "dev",
"prefer-stable": true,
"config": {
"allow-plugins": {
"composer/package-versions-deprecated": true,
"phpstan/extension-installer": true,
"ergebnis/composer-normalize": true,
"phpro/grumphp": true,
"ocramius/package-versions": true
},
"bin-dir": "bin",
"optimize-autoloader": true,
"sort-packages": true,
"vendor-dir": "tests/app/vendor"
},
"scripts": {
"auto-scripts": {
"cache:clear": "symfony-cmd",
@@ -91,7 +91,9 @@ class CountPerson implements ExportInterface
public function initiateQuery(array $requiredModifiers, array $acl, array $data = [])
{
// we gather all center the user choose.
$centers = array_map(static function ($el) { return $el['center']; }, $acl);
$centers = array_map(static function ($el) {
return $el['center'];
}, $acl);
$qb = $this->entityManager->createQueryBuilder();
@@ -11,53 +11,53 @@ declare(strict_types=1);
namespace Chill\MainBundle\DependencyInjection;
use Chill\MainBundle\DependencyInjection\Widget\AddWidgetConfigurationTrait;
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
use Symfony\Component\Config\Definition\ConfigurationInterface;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Chill\MainBundle\DependencyInjection\Widget\AddWidgetConfigurationTrait;
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
use Symfony\Component\Config\Definition\ConfigurationInterface;
use Symfony\Component\DependencyInjection\ContainerBuilder;
/**
* Configure the main bundle.
*/
class ChillMainConfiguration implements ConfigurationInterface
{
use AddWidgetConfigurationTrait;
/**
* Configure the main bundle.
*/
class ChillMainConfiguration implements ConfigurationInterface
{
use AddWidgetConfigurationTrait;
/**
* @var ContainerBuilder
*/
private $containerBuilder;
/**
* @var ContainerBuilder
*/
private $containerBuilder;
public function __construct(
array $widgetFactories,
ContainerBuilder $containerBuilder
) {
// we register here widget factories (see below)
$this->setWidgetFactories($widgetFactories);
// we will need the container builder later...
$this->containerBuilder = $containerBuilder;
}
public function __construct(
array $widgetFactories,
ContainerBuilder $containerBuilder
) {
// we register here widget factories (see below)
$this->setWidgetFactories($widgetFactories);
// we will need the container builder later...
$this->containerBuilder = $containerBuilder;
}
public function getConfigTreeBuilder()
{
$treeBuilder = new TreeBuilder();
$rootNode = $treeBuilder->root('chill_main');
public function getConfigTreeBuilder()
{
$treeBuilder = new TreeBuilder();
$rootNode = $treeBuilder->root('chill_main');
$rootNode
->children()
$rootNode
->children()
// ...
->arrayNode('widgets')
->canBeDisabled()
->children()
// we declare here all configuration for homepage place
->append($this->addWidgetsConfiguration('homepage', $this->containerBuilder))
->end() // end of widgets/children
->end() // end of widgets
->end() // end of root/children
->end() // end of root
// ...
->arrayNode('widgets')
->canBeDisabled()
->children()
// we declare here all configuration for homepage place
->append($this->addWidgetsConfiguration('homepage', $this->containerBuilder))
->end() // end of widgets/children
->end() // end of widgets
->end() // end of root/children
->end() // end of root
;
return $treeBuilder;
}
}
return $treeBuilder;
}
}
+25
View File
@@ -12,3 +12,28 @@ parameters:
tasks.phpcsfixer.allow_risky: true
tasks.phpcsfixer.diff: true
tasks.phpstan.level: 1
tasks.phpstan.blocking: true
tasks.phpstan.ignore_patterns:
- "/.github/"
- "/.idea/"
- "/build/"
- "/benchmarks/"
- "/docs/"
- "/node_modules/"
- "/resource/"
- "/spec/"
- "/var/"
- "/vendor/"
# Psalm
tasks.psalm.blocking: true
tasks.psalm.ignore_patterns:
- "/.github/"
- "/.idea/"
- "/build/"
- "/benchmarks/"
- "/node_modules/"
- "/resource/"
- "/spec/"
- "/var/"
- "/vendor/"
-23
View File
@@ -417,15 +417,6 @@ parameters:
count: 1
path: src/Bundle/ChillDocStoreBundle/Controller/DocumentPersonController.php
-
message:
"""
#^Instantiation of deprecated class Symfony\\\\Component\\\\Security\\\\Core\\\\Role\\\\Role\\:
since Symfony 4\\.3, to be removed in 5\\.0\\. Use strings as roles instead\\.$#
"""
count: 3
path: src/Bundle/ChillDocStoreBundle/Controller/DocumentPersonController.php
-
message:
"""
@@ -435,15 +426,6 @@ parameters:
count: 1
path: src/Bundle/ChillDocStoreBundle/Controller/DocumentPersonController.php
-
message:
"""
#^Fetching class constant class of deprecated class Symfony\\\\Component\\\\Security\\\\Core\\\\Role\\\\Role\\:
since Symfony 4\\.3, to be removed in 5\\.0\\. Use strings as roles instead\\.$#
"""
count: 1
path: src/Bundle/ChillDocStoreBundle/Form/PersonDocumentType.php
-
message:
"""
@@ -877,11 +859,6 @@ parameters:
count: 1
path: src/Bundle/ChillMainBundle/Security/PasswordRecover/PasswordRecoverEvent.php
-
message: "#^Call to deprecated method setTimeout\\(\\) of class Redis\\.$#"
count: 1
path: src/Bundle/ChillMainBundle/Security/PasswordRecover/PasswordRecoverLocker.php
-
message:
"""
-5
View File
@@ -315,11 +315,6 @@ parameters:
count: 1
path: src/Bundle/ChillMainBundle/Security/PasswordRecover/TokenManager.php
-
message: "#^Construct empty\\(\\) is not allowed\\. Use more strict comparison\\.$#"
count: 3
path: src/Bundle/ChillMainBundle/Templating/Entity/AddressRender.php
-
message: "#^Construct empty\\(\\) is not allowed\\. Use more strict comparison\\.$#"
count: 1
+1 -1
View File
@@ -2,7 +2,7 @@
<!-- https://phpunit.readthedocs.io/en/latest/configuration.html -->
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="vendor/phpunit/phpunit/phpunit.xsd"
xsi:noNamespaceSchemaLocation="tests/app/vendor/phpunit/phpunit/phpunit.xsd"
backupGlobals="false"
colors="true"
bootstrap="tests/app/tests/bootstrap.php"
+2006
View File
File diff suppressed because it is too large Load Diff
+16
View File
@@ -0,0 +1,16 @@
<?xml version="1.0"?>
<psalm
errorLevel="7"
resolveFromConfigFile="true"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="https://getpsalm.org/schema/config"
xsi:schemaLocation="https://getpsalm.org/schema/config tests/app/vendor/vimeo/psalm/config.xsd"
errorBaseline="psalm-baseline.xml"
>
<projectFiles>
<directory name="src" />
<ignoreFiles>
<directory name="./tests/" />
</ignoreFiles>
</projectFiles>
</psalm>
@@ -39,6 +39,7 @@ use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Security\Core\Role\Role;
use Symfony\Component\Serializer\SerializerInterface;
use function array_key_exists;
final class ActivityController extends AbstractController
@@ -307,8 +308,10 @@ final class ActivityController extends AbstractController
$activityData = $request->query->get('activityData');
}
if (!$activityType instanceof \Chill\ActivityBundle\Entity\ActivityType
|| !$activityType->isActive()) {
if (
!$activityType instanceof \Chill\ActivityBundle\Entity\ActivityType
|| !$activityType->isActive()
) {
$params = $this->buildParamsToUrl($person, $accompanyingPeriod);
if (null !== $activityData) {
@@ -14,7 +14,6 @@ namespace Chill\ActivityBundle\Controller;
use Chill\ActivityBundle\Entity\ActivityReasonCategory;
use Chill\ActivityBundle\Form\ActivityReasonCategoryType;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\HttpFoundation\Request;
@@ -14,7 +14,6 @@ namespace Chill\ActivityBundle\Controller;
use Chill\ActivityBundle\Entity\ActivityReason;
use Chill\ActivityBundle\Form\ActivityReasonType;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\HttpFoundation\Request;
@@ -19,6 +19,7 @@ use Chill\MainBundle\Entity\RoleScope;
use Doctrine\Common\DataFixtures\AbstractFixture;
use Doctrine\Common\DataFixtures\OrderedFixtureInterface;
use Doctrine\Persistence\ObjectManager;
use function in_array;
/**
@@ -13,6 +13,7 @@ namespace Chill\ActivityBundle\DependencyInjection;
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
use Symfony\Component\Config\Definition\ConfigurationInterface;
use function is_int;
/**
@@ -25,6 +25,7 @@ use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Security\Core\Role\Role;
use Symfony\Component\Validator\Context\ExecutionContextInterface;
use function array_key_exists;
use function count;
@@ -27,6 +27,7 @@ use Symfony\Component\Security\Core\Role\Role;
use Symfony\Component\Translation\TranslatorInterface;
use Symfony\Component\Validator\Constraints\Callback;
use Symfony\Component\Validator\Context\ExecutionContextInterface;
use function array_key_exists;
use function count;
use function in_array;
@@ -189,7 +190,9 @@ class ListActivity implements ListInterface
public function initiateQuery(array $requiredModifiers, array $acl, array $data = [])
{
$centers = array_map(static function ($el) { return $el['center']; }, $acl);
$centers = array_map(static function ($el) {
return $el['center'];
}, $acl);
// throw an error if any fields are present
if (!array_key_exists('fields', $data)) {
@@ -25,6 +25,7 @@ use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Security\Core\Role\Role;
use Symfony\Component\Validator\Context\ExecutionContextInterface;
use function array_key_exists;
use function count;
@@ -24,6 +24,7 @@ use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Security\Core\Role\Role;
use Symfony\Component\Validator\Context\ExecutionContextInterface;
use function count;
class ActivityTypeFilter implements ExportElementValidatedInterface, FilterInterface
@@ -31,6 +31,7 @@ use Symfony\Component\Form\FormEvents;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\Translation\TranslatorInterface;
use Symfony\Component\Validator\Context\ExecutionContextInterface;
use function count;
class PersonHavingActivityBetweenDateFilter implements ExportElementValidatedInterface, FilterInterface
@@ -48,6 +48,7 @@ use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use function in_array;
class ActivityType extends AbstractType
@@ -306,6 +307,7 @@ class ActivityType extends AbstractType
'allow_add' => true,
'button_add_label' => 'activity.Insert a document',
'button_remove_label' => 'activity.Remove a document',
'empty_collection_explain' => 'No documents',
]);
}
@@ -36,8 +36,10 @@ class AccompanyingCourseMenuBuilder implements LocalMenuBuilderInterface
{
$period = $parameters['accompanyingCourse'];
if (AccompanyingPeriod::STEP_DRAFT !== $period->getStep()
&& $this->security->isGranted(ActivityVoter::SEE, $period)) {
if (
AccompanyingPeriod::STEP_DRAFT !== $period->getStep()
&& $this->security->isGranted(ActivityVoter::SEE, $period)
) {
$menu->addChild($this->translator->trans('Activity'), [
'route' => 'chill_activity_activity_list',
'routeParameters' => [
@@ -14,6 +14,7 @@ namespace Chill\ActivityBundle\Menu;
use Chill\MainBundle\Routing\LocalMenuBuilderInterface;
use Knp\Menu\MenuItem;
use Symfony\Component\Security\Core\Security;
use function in_array;
final class AdminMenuBuilder implements LocalMenuBuilderInterface
@@ -0,0 +1,45 @@
<?php
/**
* Chill is a software for social workers
*
* For the full copyright and license information, please view
* the LICENSE file that was distributed with this source code.
*/
declare(strict_types=1);
namespace Chill\ActivityBundle\Notification;
use Chill\ActivityBundle\Entity\Activity;
use Chill\ActivityBundle\Repository\ActivityRepository;
use Chill\MainBundle\Entity\Notification;
use Chill\MainBundle\Notification\NotificationHandlerInterface;
final class ActivityNotificationHandler implements NotificationHandlerInterface
{
private ActivityRepository $activityRepository;
public function __construct(ActivityRepository $activityRepository)
{
$this->activityRepository = $activityRepository;
}
public function getTemplate(Notification $notification, array $options = []): string
{
return '@ChillActivity/Activity/showInNotification.html.twig';
}
public function getTemplateData(Notification $notification, array $options = []): array
{
return [
'notification' => $notification,
'activity' => $this->activityRepository->find($notification->getRelatedEntityId()),
];
}
public function supports(Notification $notification, array $options = []): bool
{
return $notification->getRelatedEntityClass() === Activity::class;
}
}
@@ -1,33 +0,0 @@
<?php
/**
* Chill is a software for social workers
*
* For the full copyright and license information, please view
* the LICENSE file that was distributed with this source code.
*/
declare(strict_types=1);
namespace Chill\ActivityBundle\Notification;
use Chill\ActivityBundle\Entity\Activity;
use Chill\MainBundle\Entity\Notification;
final class ActivityNotificationRenderer
{
public function getTemplate()
{
return '@ChillActivity/Activity/showInNotification.html.twig';
}
public function getTemplateData(Notification $notification)
{
return ['notification' => $notification];
}
public function supports(Notification $notification, array $options = []): bool
{
return $notification->getRelatedEntityClass() === Activity::class;
}
}
@@ -22,6 +22,7 @@ use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Component\Security\Core\Role\Role;
use Symfony\Component\Security\Core\Security;
use function count;
use function in_array;
@@ -167,7 +168,9 @@ final class ActivityACLAwareRepository implements ActivityACLAwareRepositoryInte
$reachableScopes = $this->authorizationHelper->getReachableScopes($this->tokenStorage->getToken()->getUser(), $role, $center);
// we get the ids for those scopes
$reachablesScopesId = array_map(
static function (Scope $scope) { return $scope->getId(); },
static function (Scope $scope) {
return $scope->getId();
},
$reachableScopes
);
@@ -9,8 +9,9 @@ div.new-activity-select-type {
display: flex;
flex-direction: row;
flex-wrap: wrap;
justify-content: center;
justify-content: flex-start;
gap: 12px;
margin-bottom: 30px;
div.bloc {
width: 200px;
@@ -27,26 +28,26 @@ div.new-activity-select-type {
// precise dashboard specific details
p.date-label {
display: inline-block;
margin: 0 0.5em 0 0;
font-weight: 700;
font-size: 18pt;
display: inline-block;
margin: 0 0.5em 0 0;
font-weight: 700;
font-size: 18pt;
}
div.dashboard,
h2.badge-title {
ul.list-content {
font-size: 70%;
list-style-type: none;
padding-left: 0;
margin: 0;
li {
margin-bottom: 0.2em;
// exception: change bg color for action badges above dashboard
.bg-light {
background-color: $chill-light-gray !important;
}
}
}
ul.list-content {
font-size: 70%;
list-style-type: none;
padding-left: 0;
margin: 0;
li {
margin-bottom: 0.2em;
// exception: change bg color for action badges above dashboard
.bg-light {
background-color: $chill-light-gray !important;
}
}
}
}
//// ACTIVITY SHOW AND FORM PAGES
@@ -11,7 +11,7 @@ import Location from './components/Location.vue';
export default {
name: "App",
props: ['hasSocialIssues', 'hasLocation', 'hasPerson'],
props: ['hasSocialIssues', 'hasLocation', 'hasPerson'],
components: {
ConcernedGroups,
SocialIssuesAcc,
@@ -17,6 +17,14 @@ const getLocations = () => fetchResults('/api/1.0/main/location.json');
const getLocationTypes = () => fetchResults('/api/1.0/main/location-type.json');
const getUserCurrentLocation =
() => fetch('/api/1.0/main/user-current-location.json')
.then(response => {
if (response.ok) { return response.json(); }
throw Error('Error with request resource response');
});
/*
* Load Location Type by defaultFor
* @param {string} entity - can be "person" or "thirdparty"
@@ -48,5 +56,6 @@ export {
getLocations,
getLocationTypes,
getLocationTypeByDefaultFor,
postLocation
postLocation,
getUserCurrentLocation
};
@@ -12,7 +12,7 @@
</div>
<div v-if="getContext === 'accompanyingCourse' && suggestedEntities.length > 0">
<ul class="list-suggest add-items inline">
<li v-for="p in suggestedEntities" @click="addSuggestedEntity(p)">
<li v-for="(p, i) in suggestedEntities" @click="addSuggestedEntity(p)" :key="`suggestedEntities-${i}`">
<span>{{ p.text }}</span>
</li>
</ul>
@@ -1,8 +1,7 @@
<template>
<li>
<span :title="person.text">
<span class="chill_denomination">{{ textCutted }}</span>
<a @click.prevent="$emit('remove', person)"></a>
<span class="chill_denomination" @click.prevent="$emit('remove', person)">{{ textCutted }}</span>
</span>
</li>
</template>
@@ -15,14 +15,16 @@
:searchable="true"
:placeholder="$t('activity.choose_location')"
:custom-label="customLabel"
:options="locations"
:select-label="$t('multiselect.select_label')"
:deselect-label="$t('multiselect.deselect_label')"
:selected-label="$t('multiselect.selected_label')"
:options="availableLocations"
group-values="locations"
group-label="locationGroup"
v-model="location"
>
</VueMultiselect>
<new-location v-bind:locations="locations"></new-location>
<new-location v-bind:availableLocations="availableLocations"></new-location>
</div>
</div>
</teleport>
@@ -32,7 +34,6 @@
import { mapState, mapGetters } from "vuex";
import VueMultiselect from "vue-multiselect";
import NewLocation from "./Location/NewLocation.vue";
import { getLocations, getLocationTypeByDefaultFor } from "../api.js";
export default {
name: "Location",
@@ -40,13 +41,8 @@ export default {
NewLocation,
VueMultiselect,
},
data() {
return {
locations: [],
};
},
computed: {
...mapState(["activity"]),
...mapState(["activity", "availableLocations"]),
...mapGetters(["suggestedEntities"]),
location: {
get() {
@@ -57,53 +53,6 @@ export default {
},
},
},
mounted() {
getLocations().then(
(results) => {
getLocationTypeByDefaultFor('person').then(
(personLocationType) => {
if (personLocationType) {
const personLocation = this.makeAccompanyingPeriodLocation(personLocationType);
const concernedPersonsLocation =
this.makeConcernedPersonsLocation(personLocationType);
getLocationTypeByDefaultFor('thirdparty').then(
thirdpartyLocationType => {
const concernedThirdPartiesLocation =
this.makeConcernedThirdPartiesLocation(thirdpartyLocationType);
this.locations = [
{
locationGroup: 'Localisation du parcours',
locations: [personLocation]
},
{
locationGroup: 'Parties concernées',
locations: [...concernedPersonsLocation, ...concernedThirdPartiesLocation]
},
{
locationGroup: 'Autres localisations',
locations: results
}
];
}
)
} else {
this.locations = [
{
locationGroup: 'Localisations',
locations: response.results
}
];
}
if (window.default_location_id) {
let location = this.locations.filter(
(l) => l.id === window.default_location_id
);
this.$store.dispatch("updateLocation", location);
}
}
)
})
},
methods: {
labelAccompanyingCourseLocation(value) {
return `${value.address.text} (${value.locationType.title.fr})`
@@ -117,58 +66,6 @@ export default {
: value.locationType.title.fr
: '';
},
makeConcernedPersonsLocation(locationType) {
let locations = [];
this.suggestedEntities.forEach(
(e) => {
if (e.type === 'person' && e.current_household_address !== null){
locations.push({
type: 'location',
id: -this.suggestedEntities.indexOf(e)*10,
onthefly: true,
name: e.text,
address: {
id: e.current_household_address.address_id,
},
locationType: locationType
});
}
}
)
return locations;
},
makeConcernedThirdPartiesLocation(locationType) {
let locations = [];
this.suggestedEntities.forEach(
(e) => {
if (e.type === 'thirdparty' && e.address !== null){
locations.push({
type: 'location',
id: -this.suggestedEntities.indexOf(e)*10,
onthefly: true,
name: e.text,
address: { id: e.address.address_id },
locationType: locationType
});
}
}
)
return locations;
},
makeAccompanyingPeriodLocation(locationType) {
const accPeriodLocation = this.activity.accompanyingPeriod.location;
return {
type: 'location',
id: -1,
onthefly: true,
name: '__AccompanyingCourseLocation__',
address: {
id: accPeriodLocation.address_id,
text: `${accPeriodLocation.text} - ${accPeriodLocation.postcode.code} ${accPeriodLocation.postcode.name}`
},
locationType: locationType
}
}
},
};
</script>
@@ -18,15 +18,6 @@
</template>
<template v-slot:body>
<form>
<div class="form-floating mb-3">
<p v-if="errors.length">
<b>{{ $t('activity.errors') }}</b>
<ul>
<li v-for="error in errors" :key="error">{{ error }}</li>
</ul>
</p>
</div>
<div class="form-floating mb-3">
<select class="form-select form-select-lg" id="type" required v-model="selectType">
<option selected disabled value="">{{ $t('activity.choose_location_type') }}</option>
@@ -62,6 +53,12 @@
<input class="form-control form-control-lg" id="email" v-model="inputEmail" placeholder />
<label for="email">{{ $t('activity.location_fields.email') }}</label>
</div>
<div class="alert alert-warning" v-if="errors.length">
<ul>
<li v-for="(e, i) in errors" :key="i">{{ e }}</li>
</ul>
</div>
</form>
</template>
<template v-slot:footer>
@@ -81,7 +78,8 @@
import Modal from 'ChillMainAssets/vuejs/_components/Modal.vue';
import AddAddress from "ChillMainAssets/vuejs/Address/components/AddAddress.vue";
import { mapState } from "vuex";
import { getLocationTypes, postLocation } from "../../api";
import { getLocationTypes } from "../../api";
import { makeFetch } from 'ChillMainAssets/lib/api/apiMethods';
export default {
name: "NewLocation",
@@ -89,7 +87,7 @@ export default {
Modal,
AddAddress,
},
props: ['locations'],
props: ['availableLocations'],
data() {
return {
errors: [],
@@ -223,7 +221,6 @@ export default {
},
saveNewLocation() {
if (this.checkForm()) {
console.log('saveNewLocation', this.selected);
let body = {
type: 'location',
name: this.selected.name,
@@ -242,23 +239,28 @@ export default {
}
});
}
postLocation(body)
.then(
location => new Promise(resolve => {
this.locations.push(location);
this.$store.dispatch('updateLocation', location);
resolve();
this.modal.showModal = false;
})
).catch(
err => {
this.errors.push(err.message);
makeFetch('POST', '/api/1.0/main/location.json', body)
.then(response => {
this.$store.dispatch('addAvailableLocationGroup', {
locationGroup: 'Localisations nouvellement créées',
locations: [response]
});
this.$store.dispatch('updateLocation', response);
this.modal.showModal = false;
})
.catch((error) => {
if (error.name === 'ValidationException') {
for (let v of error.violations) {
this.errors.push(v);
}
} else {
this.errors.push('An error occurred');
}
);
})
};
},
submitNewAddress(payload) {
console.log('submitNewAddress', payload);
this.selected.addressId = payload.addressId;
this.addAddress.context.addressId = payload.addressId;
this.addAddress.context.edit = true;
@@ -9,9 +9,9 @@
<check-social-issue
v-for="issue in socialIssuesList"
v-bind:key="issue.id"
v-bind:issue="issue"
v-bind:selection="socialIssuesSelected"
:key="issue.id"
:issue="issue"
:selection="socialIssuesSelected"
@updateSelected="updateIssuesSelected">
</check-social-issue>
@@ -21,18 +21,18 @@
label="text"
track-by="id"
open-direction="bottom"
v-bind:close-on-select="true"
v-bind:preserve-search="false"
v-bind:reset-after="true"
v-bind:hide-selected="true"
v-bind:taggable="false"
v-bind:multiple="false"
v-bind:searchable="true"
v-bind:allow-empty="true"
v-bind:show-labels="false"
v-bind:loading="issueIsLoading"
v-bind:placeholder="$t('activity.choose_other_social_issue')"
v-bind:options="socialIssuesOther"
:close-on-select="true"
:preserve-search="false"
:reset-after="true"
:hide-selected="true"
:taggable="false"
:multiple="false"
:searchable="true"
:allow-empty="true"
:show-labels="false"
:loading="issueIsLoading"
:placeholder="$t('activity.choose_other_social_issue')"
:options="socialIssuesOther"
@select="addIssueInList">
</VueMultiselect>
</div>
@@ -58,9 +58,9 @@
<check-social-action
v-if="socialIssuesSelected.length || socialActionsSelected.length"
v-for="action in socialActionsList"
v-bind:key="action.id"
v-bind:action="action"
v-bind:selection="socialActionsSelected"
:key="action.id"
:action="action"
:selection="socialActionsSelected"
@updateSelected="updateActionsSelected">
</check-social-action>
</template>
@@ -1,4 +1,5 @@
import { personMessages } from 'ChillPersonAssets/vuejs/_js/i18n'
import { multiSelectMessages } from 'ChillMainAssets/vuejs/_js/i18n'
const activityMessages = {
fr: {
@@ -33,12 +34,11 @@ const activityMessages = {
},
create_address: 'Créer une adresse',
edit_address: "Modifier l'adresse"
}
}
}
Object.assign(activityMessages.fr, personMessages.fr);
Object.assign(activityMessages.fr, personMessages.fr, multiSelectMessages.fr);
export {
activityMessages
@@ -12,7 +12,11 @@ const hasLocation = document.querySelector('#location') !== null;
const hasPerson = document.querySelector('#add-persons') !== null;
const app = createApp({
template: `<app :hasSocialIssues="hasSocialIssues", :hasLocation="hasLocation", :hasPerson="hasPerson"></app>`,
template: `<app
:hasSocialIssues="hasSocialIssues"
:hasLocation="hasLocation"
:hasPerson="hasPerson"
></app>`,
data() {
return {
hasSocialIssues,
@@ -1,6 +1,7 @@
import 'es6-promise/auto';
import { createStore } from 'vuex';
import { postLocation } from './api';
import prepareLocations from './store.locations.js';
const debug = process.env.NODE_ENV !== 'production';
//console.log('window.activity', window.activity);
@@ -25,6 +26,7 @@ const store = createStore({
activity: window.activity,
socialIssuesOther: [],
socialActionsList: [],
availableLocations: [],
},
getters: {
suggestedEntities(state) {
@@ -200,6 +202,9 @@ const store = createStore({
console.log("### mutation: updateLocation", value);
state.activity.location = value;
},
addAvailableLocationGroup(state, group) {
state.availableLocations.push(group);
}
},
actions: {
addIssueSelected({ commit }, issue) {
@@ -235,6 +240,9 @@ const store = createStore({
});
commit("updateActionsSelected", payload);
},
addAvailableLocationGroup({ commit }, payload) {
commit("addAvailableLocationGroup", payload);
},
addPersonsInvolved({ commit }, payload) {
//console.log('### action addPersonsInvolved', payload.result.type);
switch (payload.result.type) {
@@ -335,4 +343,6 @@ const store = createStore({
},
});
prepareLocations(store);
export default store;
@@ -0,0 +1,123 @@
import {getLocations, getLocationTypeByDefaultFor, getUserCurrentLocation} from "./api";
const makeConcernedPersonsLocation = (locationType, store) => {
let locations = [];
store.getters.suggestedEntities.forEach(
(e) => {
if (e.type === 'person' && e.current_household_address !== null){
locations.push({
type: 'location',
id: -store.getters.suggestedEntities.indexOf(e)*10,
onthefly: true,
name: e.text,
address: {
id: e.current_household_address.address_id,
},
locationType: locationType
});
}
}
)
return locations;
};
const makeConcernedThirdPartiesLocation = (locationType, store) => {
let locations = [];
store.getters.suggestedEntities.forEach(
(e) => {
if (e.type === 'thirdparty' && e.address !== null){
locations.push({
type: 'location',
id: -store.getters.suggestedEntities.indexOf(e)*10,
onthefly: true,
name: e.text,
address: { id: e.address.address_id },
locationType: locationType
});
}
}
)
return locations;
};
const makeAccompanyingPeriodLocation = (locationType, store) => {
const accPeriodLocation = store.state.activity.accompanyingPeriod.location;
return {
type: 'location',
id: -1,
onthefly: true,
name: '__AccompanyingCourseLocation__',
address: {
id: accPeriodLocation.address_id,
text: `${accPeriodLocation.text} - ${accPeriodLocation.postcode.code} ${accPeriodLocation.postcode.name}`
},
locationType: locationType
}
};
export default function prepareLocations(store) {
// find the locations
let allLocations = getLocations().then(
(results) => {
store.commit('addAvailableLocationGroup', {
locationGroup: 'Autres localisations',
locations: results
});
}
);
let currentLocation = getUserCurrentLocation().then(
userCurrentLocation => {
if (null !== userCurrentLocation) {
store.commit('addAvailableLocationGroup', {
locationGroup: 'Ma localisation',
locations: [userCurrentLocation]
});
}
}
);
let partiesLocations = [], partyPromise;
['person', 'thirdparty'].forEach(kind => {
partyPromise = getLocationTypeByDefaultFor(kind).then(
(kindLocationType) => {
if (kindLocationType) {
let concernedKindLocations;
if (kind === 'person') {
concernedKindLocations = makeConcernedPersonsLocation(kindLocationType, store);
// add location for the parcours into suggestions
const personLocation = makeAccompanyingPeriodLocation(kindLocationType, store);
store.commit('addAvailableLocationGroup', {
locationGroup: 'Localisation du parcours',
locations: [personLocation]
});
} else {
concernedKindLocations = makeConcernedThirdPartiesLocation(kindLocationType, store);
}
store.commit('addAvailableLocationGroup', {
locationGroup: kind === 'person' ? 'Usagers concernés' : 'Tiers concernés',
locations: concernedKindLocations,
});
}
}
);
partiesLocations.push(partyPromise);
});
// when all location are loaded
Promise.all([allLocations, currentLocation, ...partiesLocations]).then(() => {
console.log('current location in activity', store.state.activity.location);
console.log('default loation id', window.default_location_id);
if (window.default_location_id) {
for (let group of store.state.availableLocations) {
console.log(group);
let location = group.locations.find((l) => l.id === window.default_location_id);
console.log(location);
if (location !== undefined) {
store.dispatch('updateLocation', location);
break;
}
}
}
});
}
@@ -18,7 +18,8 @@ use Symfony\Component\HttpFoundation\Request;
// This check prevents access to debug front controllers that are deployed by accident to production servers.
// Feel free to remove this, extend it, or make something more sophisticated.
if (isset($_SERVER['HTTP_CLIENT_IP'])
if (
isset($_SERVER['HTTP_CLIENT_IP'])
|| isset($_SERVER['HTTP_X_FORWARDED_FOR'])
|| !(in_array($_SERVER['REMOTE_ADDR'], ['127.0.0.1', 'fe80::1', '::1'], true) || \PHP_SAPI === 'cli-server')
) {
@@ -0,0 +1,151 @@
{% set t = activity.type %}
<div class="item-bloc activity-item{% if itemBlocClass is defined %} {{ itemBlocClass }}{% endif %}">
<div class="item-row">
<div class="wrap-list">
<div class="wl-row">
<div class="wl-col title">
{% if activity.date %}
<p class="date-label">
{{ activity.date|format_date('short') }}
</p>
{% endif %}
</div>
<div class="wl-col list">
<h2 class="badge-title">
<span class="title_label"></span>
<span class="title_action">
{{ activity.type.name | localize_translatable_string }}
{% if activity.emergency %}
<span class="badge bg-danger rounded-pill fs-6 float-end">{{ 'Emergency'|trans|upper }}</span>
{% endif %}
</span>
</h2>
</div>
</div>
</div>
</div>
<div class="item-row column separator">
<div class="wrap-list">
{% if activity.location and t.locationVisible %}
<div class="wl-row">
<div class="wl-col title"><h3>{{ 'location'|trans }}</h3></div>
<div class="wl-col list">
<p class="wl-item">
{{ activity.location.name }}
<span>({{ activity.location.locationType.title|localize_translatable_string }})</span>
</p>
</div>
</div>
{% endif %}
{% if activity.sentReceived is not empty and t.sentReceivedVisible %}
<div class="wl-row">
<div class="wl-col title"><h3>{{ 'Sent received'|trans }}</h3></div>
<div class="wl-col list">
<p class="wl-item">
{{ activity.sentReceived|capitalize|trans }}
</p>
</div>
</div>
{% endif %}
{% if activity.user and t.userVisible %}
<div class="wl-row">
<div class="wl-col title"><h3>{{ 'Referrer'|trans }}</h3></div>
<div class="wl-col list">
<p class="wl-item">
{{ activity.user|chill_entity_render_string|capitalize }}
</p>
</div>
</div>
{% endif %}
</div>
{% include 'ChillActivityBundle:Activity:concernedGroups.html.twig' with {
'context': context,
'render': 'wrap-list',
'entity': activity,
'badge_person': true
} %}
<div class="wrap-list">
{%- if activity.reasons is not empty and t.reasonsVisible -%}
<div class="wl-row">
<div class="wl-col title">
<h3>{{ 'Reasons'|trans }}</h3>
</div>
<div class="wl-col list">
{% for r in activity.reasons %}
<p class="wl-item reasons">
{{ r|chill_entity_render_box }}
</p>
{% endfor %}
</div>
</div>
{% endif %}
{%- if activity.socialIssues is not empty and t.socialIssuesVisible -%}
<div class="wl-row">
<div class="wl-col title">
<h3>{{ 'Social issues'|trans }}</h3>
</div>
<div class="wl-col list">
{% for r in activity.socialIssues %}
<p class="wl-item social-issues">
{{ r|chill_entity_render_box }}
</p>
{% endfor %}
</div>
</div>
{% endif %}
{%- if activity.socialActions is not empty and t.socialActionsVisible -%}
<div class="wl-row">
<div class="wl-col title">
<h3>{{ 'Social actions'|trans }}</h3>
</div>
<div class="wl-col list">
{% for r in activity.socialActions %}
<p class="wl-item social-actions">
{{ r|chill_entity_render_box }}
</p>
{% endfor %}
</div>
</div>
{% endif %}
{% if activity.comment.comment is not empty and is_granted('CHILL_ACTIVITY_SEE_DETAILS', activity) %}
<div class="wl-row">
<div class="wl-col title">
<h3>{{ 'Comment'|trans }}</h3>
</div>
<div class="wl-col list">
{{ activity.comment|chill_entity_render_box({
'disable_markdown': false,
'limit_lines': 3,
'metadata': false
}) }}
</div>
</div>
{% endif %}
{# Only if ACL SEE_DETAILS AND/OR only on template SHOW ??
durationTime
travelTime
comment
documents
attendee
#}
</div>
</div>
<div class="item-row separator">
<ul class="record_actions">
{{ recordAction }}
</ul>
</div>
</div>
@@ -3,11 +3,13 @@
{{ path(pathname, parms) }}
{% endmacro %}
{% macro insert_onthefly(type, entity) %}
{% macro insert_onthefly(type, entity, parent = null) %}
{% include '@ChillMain/OnTheFly/_insert_vue_onthefly.html.twig' with {
action: 'show', displayBadge: true,
targetEntity: { name: type, id: entity.id },
buttonText: entity|chill_entity_render_string
buttonText: entity|chill_entity_render_string,
isDead: entity.deathdate is not null,
parent: parent
} %}
{% endmacro %}
@@ -59,7 +61,7 @@
}]) %}
{% endif %}
{% if (with_display == 'bloc') %}
{% if (render == 'bloc') %}
<div class="{{ context }} flex-bloc concerned-groups">
{% for bloc in blocks %}
@@ -90,7 +92,7 @@
</div>
{% endif %}
{% if (with_display == 'row') %}
{% if (render == 'row') %}
<div class="concerned-groups">
{% for bloc in blocks %}
<div class="group">
@@ -115,7 +117,7 @@
</div>
{% endif %}
{% if (with_display == 'wrap-list') %}
{% if (render == 'wrap-list') %}
<div class="concerned-groups wrap-list">
{% for bloc in blocks %}
<div class="wl-row">
@@ -15,7 +15,7 @@
{% block js %}
{{ parent() }}
{{ encore_entry_link_tags('mod_async_upload') }}
{{ encore_entry_script_tags('mod_async_upload') }}
<script type="text/javascript">
window.addEventListener('DOMContentLoaded', function (e) {
chill.displayAlertWhenLeavingModifiedForm('form[name="{{ edit_form.vars.form.vars.name }}"]',
@@ -30,7 +30,7 @@
{% endblock %}
{% block js %}
{{ encore_entry_link_tags('mod_async_upload') }}
{{ encore_entry_script_tags('mod_async_upload') }}
<script type="text/javascript">
window.addEventListener('DOMContentLoaded', function (e) {
chill.displayAlertWhenLeavingModifiedForm('form[name="{{ edit_form.vars.form.vars.name }}"]',
@@ -1,3 +1,61 @@
{% macro recordAction(activity, context = null, person_id = null, accompanying_course_id = null) %}
{% if no_action is not defined or no_action == false %}
<li>
<a class="btn btn-notify" href="{{ chill_path_add_return_path('chill_main_notification_create', {
'entityClass': 'Chill\\ActivityBundle\\Entity\\Activity',
'entityId': activity.id
}) }}">{{ 'notification.Notify'|trans }}</a>
</li>
{% endif %}
{% if context == 'person' and activity.accompanyingPeriod is not empty %}
{#
Disable person_id in following links, for redirect to accompanyingCourse context
#}
{% set person_id = null %}
{% set accompanying_course_id = activity.accompanyingPeriod.id %}
<li>
<a href="{{ chill_path_add_return_path('chill_activity_activity_list',{
'accompanying_period_id': accompanying_course_id
}) }}"
class="btn btn-primary"
title="{{ 'See activity in accompanying course context'|trans }}">
<i class="fa fa-random fa-fw"></i>
{{ 'Period number %number%'|trans({'%number%': accompanying_course_id}) }}
</a>
</li>
{% endif %}
<li>
<a href="{{ path('chill_activity_activity_show', {'id': activity.id,
'person_id': person_id,
'accompanying_period_id': accompanying_course_id
}) }}"
class="btn btn-show"
title="{{ 'Show'|trans }}"></a>
</li>
{% if no_action is not defined or no_action == false %}
{% if is_granted('CHILL_ACTIVITY_UPDATE', activity) %}
<li>
<a href="{{ path('chill_activity_activity_edit', {'id': activity.id,
'person_id': person_id,
'accompanying_period_id': accompanying_course_id
}) }}"
class="btn btn-update"
title="{{ 'Edit'|trans }}"></a>
</li>
{% endif %}
{% if is_granted('CHILL_ACTIVITY_DELETE', activity) %}
<li>
<a href="{{ path('chill_activity_activity_delete', {'id': activity.id,
'person_id': person_id,
'accompanying_period_id': accompanying_course_id
}) }}"
class="btn btn-delete"
title="{{ 'Delete'|trans }}"></a>
</li>
{% endif %}
{% endif %}
{% endmacro %}
<div class="context-{{ context }}">
{% if activities|length == 0 %}
@@ -8,202 +66,10 @@
{% else %}
<div class="flex-table activity-list">
{% for activity in activities %}
{% set t = activity.type %}
<div class="item-bloc">
<div class="item-row">
<div class="wrap-list">
<div class="wl-row">
<div class="wl-col title">
{% if activity.date %}
<p class="date-label">
{{ activity.date|format_date('short') }}
</p>
{% endif %}
</div>
<div class="wl-col list">
<h2 class="badge-title">
<span class="title_label"></span>
<span class="title_action">
{{ activity.type.name | localize_translatable_string }}
{% if activity.emergency %}
<span class="badge bg-danger rounded-pill fs-6 float-end">{{ 'Emergency'|trans|upper }}</span>
{% endif %}
</span>
</h2>
</div>
</div>
</div>
</div>
<div class="item-row column separator">
<div class="wrap-list">
{% if activity.location and t.locationVisible %}
<div class="wl-row">
<div class="wl-col title"><h3>{{ 'location'|trans }}</h3></div>
<div class="wl-col list">
<p class="wl-item">
<span>{{ activity.location.locationType.title|localize_translatable_string }}</span>
{{ activity.location.name }}
</p>
</div>
</div>
{% endif %}
{% if activity.sentReceived is not empty and t.sentReceivedVisible %}
<div class="wl-row">
<div class="wl-col title"><h3>{{ 'Sent received'|trans }}</h3></div>
<div class="wl-col list">
<p class="wl-item">
{{ activity.sentReceived|capitalize|trans }}
</p>
</div>
</div>
{% endif %}
{% if activity.user and t.userVisible %}
<div class="wl-row">
<div class="wl-col title"><h3>{{ 'Referrer'|trans }}</h3></div>
<div class="wl-col list">
<p class="wl-item">
{{ activity.user.usernameCanonical|chill_entity_render_string|capitalize }}
</p>
</div>
</div>
{% endif %}
</div>
{% include 'ChillActivityBundle:Activity:concernedGroups.html.twig' with {
'context': context,
'with_display': 'wrap-list',
'entity': activity,
'badge_person': true
} %}
<div class="wrap-list">
{%- if activity.reasons is not empty and t.reasonsVisible -%}
<div class="wl-row">
<div class="wl-col title">
<h3>{{ 'Reasons'|trans }}</h3>
</div>
<div class="wl-col list">
{% for r in activity.reasons %}
<p class="wl-item reasons">
{{ r|chill_entity_render_box }}
</p>
{% endfor %}
</div>
</div>
{% endif %}
{%- if activity.socialIssues is not empty and t.socialIssuesVisible -%}
<div class="wl-row">
<div class="wl-col title">
<h3>{{ 'Social issues'|trans }}</h3>
</div>
<div class="wl-col list">
{% for r in activity.socialIssues %}
<p class="wl-item social-issues">
{{ r|chill_entity_render_box }}
</p>
{% endfor %}
</div>
</div>
{% endif %}
{%- if activity.socialActions is not empty and t.socialActionsVisible -%}
<div class="wl-row">
<div class="wl-col title">
<h3>{{ 'Social actions'|trans }}</h3>
</div>
<div class="wl-col list">
{% for r in activity.socialActions %}
<p class="wl-item social-actions">
{{ r|chill_entity_render_box }}
</p>
{% endfor %}
</div>
</div>
{% endif %}
{# Only if ACL SEE_DETAILS AND/OR only on template SHOW ??
durationTime
travelTime
comment
{% if activity.comment.comment is not empty and is_granted('CHILL_ACTIVITY_SEE_DETAILS', activity) %}
<div class="wl-row">
<div class="wl-col title">
<h3>{{ 'Comment'|trans }}</h3>
</div>
<div class="wl-col list">
{{ activity.comment|chill_entity_render_box({
'disable_markdown': false,
'limit_lines': 3,
'metadata': false
}) }}
</div>
</div>
{% endif %}
documents
attendee
#}
</div>
</div>
<div class="item-row separator">
<ul class="record_actions">
{% if context == 'person' and activity.accompanyingPeriod is not empty %}
{#
Disable person_id in following links, for redirect to accompanyingCourse context
#}
{% set person_id = null %}
{% set accompanying_course_id = activity.accompanyingPeriod.id %}
<li>
<a href="{{ chill_path_add_return_path('chill_activity_activity_list',{
'accompanying_period_id': accompanying_course_id
}) }}"
class="btn btn-primary"
title="{{ 'See activity in accompanying course context'|trans }}">
<i class="fa fa-random fa-fw"></i>
{{ 'Period number %number%'|trans({'%number%': accompanying_course_id}) }}
</a>
</li>
{% endif %}
<li>
<a href="{{ path('chill_activity_activity_show', {'id': activity.id,
'person_id': person_id,
'accompanying_period_id': accompanying_course_id
}) }}"
class="btn btn-show"
title="{{ 'Show'|trans }}"></a>
</li>
{% if no_action is not defined or no_action == false %}
{% if is_granted('CHILL_ACTIVITY_UPDATE', activity) %}
<li>
<a href="{{ path('chill_activity_activity_edit', {'id': activity.id,
'person_id': person_id,
'accompanying_period_id': accompanying_course_id
}) }}"
class="btn btn-update"
title="{{ 'Edit'|trans }}"></a>
</li>
{% endif %}
{% if is_granted('CHILL_ACTIVITY_DELETE', activity) %}
<li>
<a href="{{ path('chill_activity_activity_delete', {'id': activity.id,
'person_id': person_id,
'accompanying_period_id': accompanying_course_id
}) }}"
class="btn btn-delete"
title="{{ 'Delete'|trans }}"></a>
</li>
{% endif %}
{% endif %}
</ul>
</div>
</div>
{% include 'ChillActivityBundle:Activity:_list_item.html.twig' with {
'context': context,
'recordAction': _self.recordAction(activity, context, person_id, accompanying_course_id)
} %}
{% endfor %}
</div>
{% endif %}
@@ -4,6 +4,17 @@
{% block title %}{{ 'Activity list' |trans }}{% endblock title %}
{% block js %}
{{ parent() }}
{{ encore_entry_script_tags('mod_notification_toggle_read_status') }}
{% endblock %}
{% block css %}
{{ parent() }}
{{ encore_entry_link_tags('mod_notification_toggle_read_status') }}
{% endblock %}
{% block content %}
{% set person_id = null %}
@@ -20,6 +20,16 @@
{% block title %}{{ 'Activity list' |trans }}{% endblock title %}
{% block js %}
{{ parent() }}
{{ encore_entry_script_tags('mod_notification_toggle_read_status') }}
{% endblock %}
{% block css %}
{{ parent() }}
{{ encore_entry_link_tags('mod_notification_toggle_read_status') }}
{% endblock %}
{% block personcontent %}
{% set person_id = null %}
@@ -14,7 +14,7 @@
{% endblock %}
{% block js %}
{{ encore_entry_link_tags('mod_async_upload') }}
{{ encore_entry_script_tags('mod_async_upload') }}
<script type="text/javascript">
window.addEventListener('DOMContentLoaded', function (e) {
chill.displayAlertWhenLeavingUnsubmittedForm('form[name="{{ form.vars.form.vars.name }}"]',
@@ -25,7 +25,7 @@
'activityData': activityData
}) }}">
<div class="bloc btn btn-primary btn-lg btn-block">
<div class="btn btn-primary">
{{ activityType.name|localize_translatable_string }}
</div>
</a>
@@ -34,7 +34,7 @@
<div class="item-row separator">
<dl class="chill_view_data">
<dt class="inline">{{ 'Referrer'|trans|capitalize }}</dt>
<dd>{{ entity.user }}</dd>
<dd>{{ entity.user|chill_entity_render_box }}</dd>
{%- if entity.scope -%}
<dt class="inline">{{ 'Scope'|trans }}</dt>
@@ -85,7 +85,7 @@
{% include 'ChillActivityBundle:Activity:concernedGroups.html.twig' with {
'context': context,
'with_display': 'bloc',
'render': 'bloc',
'badge_person': 'true'
} %}
@@ -103,8 +103,8 @@
<dd>
{% if entity.location is not null %}
<p>
<span>{{ entity.location.locationType.title|localize_translatable_string }}</span>
{{ entity.location.name }}
<span>({{ entity.location.locationType.title|localize_translatable_string }})</span>
</p>
<div class="ms-3">{{ entity.location.address|chill_entity_render_box }}</div>
{% else %}
@@ -198,8 +198,8 @@
</a>
</li>
{% if is_granted('CHILL_ACTIVITY_UPDATE', entity) %}
<li>
<a class="btn btn-update" href="{{ path('chill_activity_activity_edit', { 'id': entity.id, 'person_id': person_id, 'accompanying_period_id': accompanying_course_id }) }}">
<li>
<a class="btn btn-update" href="{{ path('chill_activity_activity_edit', { 'id': entity.id, 'person_id': person_id, 'accompanying_period_id': accompanying_course_id }) }}">
{{ 'Edit'|trans }}
</a>
</li>
@@ -212,9 +212,3 @@
</li>
{% endif %}
</ul>
<script>
import ShowPane from "../../../../ChillMainBundle/Resources/public/vuejs/Address/components/ShowPane";
export default {
components: {ShowPane}
}
</script>
@@ -4,6 +4,18 @@
{% block title 'Show the activity'|trans %}
{% block js %}
{{ parent() }}
{{ encore_entry_script_tags('mod_notification_toggle_read_status') }}
{{ encore_entry_script_tags('mod_async_upload') }}
{% endblock %}
{% block css %}
{{ parent() }}
{{ encore_entry_link_tags('mod_notification_toggle_read_status') }}
{{ encore_entry_link_tags('mod_async_upload') }}
{% endblock %}
{% import 'ChillActivityBundle:ActivityReason:macro.html.twig' as m %}
{% block content -%}
@@ -11,3 +23,21 @@
{% include 'ChillActivityBundle:Activity:show.html.twig' with {'context': 'accompanyingCourse'} %}
</div>
{% endblock content %}
{% block block_post_menu %}
<div class="post-menu pt-4">
<div class="d-grid gap-2">
<a class="btn btn-primary" href="{{ chill_path_add_return_path('chill_main_notification_create', {'entityClass': 'Chill\\ActivityBundle\\Entity\\Activity', 'entityId': entity.id}) }}">
<i class="fa fa-paper-plane fa-fw"></i>
{{ 'notification.Notify'|trans }}
</a>
</div>
{% set notifications = chill_list_notifications('Chill\\ActivityBundle\\Entity\\Activity', entity.id) %}
{% if notifications is not empty %}
{{ notifications|raw }}
{% endif %}
</div>
{% endblock %}
@@ -1,2 +1,27 @@
{% macro recordAction(activity) %}
<li>
<a href="{{ path('chill_activity_activity_show', {'id': activity.id }) }}"
class="btn btn-show" title="{{ 'Show the activity'|trans }}"></a>
</li>
{% endmacro %}
<a href="{{ path('chill_activity_activity_show', {'id': notification.relatedEntityId }) }}">Go to Activity</a>
{% if activity is not null %}
<div class="flex-table">
{% if is_granted('CHILL_ACTIVITY_SEE', activity) %}
{% include 'ChillActivityBundle:Activity:_list_item.html.twig' with {
'recordAction': _self.recordAction(activity),
'context': 'accompanyingCourse',
'itemBlocClass': 'bg-chill-llight-gray'
} %}
{% else %}
<div class="alert alert-warning border-warning border-1">
{{ 'This is the minimal activity data'|trans ~ ': ' ~ activity.id }}<br>
{{ 'you are not allowed to see it details'|trans }}
</div>
{% endif %}
</div>
{% else %}
<div class="alert alert-warning border-warning border-1">
{{ 'You get notified of an activity which does not exists any more'|trans }}
</div>
{% endif %}
@@ -4,6 +4,18 @@
{% block title 'Show the activity'|trans %}
{% block js %}
{{ parent() }}
{{ encore_entry_script_tags('mod_notification_toggle_read_status') }}
{{ encore_entry_link_tags('mod_async_upload') }}
{% endblock %}
{% block css %}
{{ parent() }}
{{ encore_entry_link_tags('mod_notification_toggle_read_status') }}
{{ encore_entry_link_tags('mod_async_upload') }}
{% endblock %}
{% import 'ChillActivityBundle:ActivityReason:macro.html.twig' as m %}
{% block personcontent -%}
@@ -11,3 +23,21 @@
{% include 'ChillActivityBundle:Activity:show.html.twig' with {'context': 'person'} %}
</div>
{% endblock personcontent %}
{% block block_post_menu %}
<div class="post-menu pt-4">
<div class="d-grid gap-2">
<a class="btn btn-primary" href="{{ chill_path_add_return_path('chill_main_notification_create', {'entityClass': 'Chill\\ActivityBundle\\Entity\\Activity', 'entityId': entity.id}) }}">
<i class="fa fa-paper-plane fa-fw"></i>
{{ 'notification.Notify'|trans }}
</a>
</div>
{% set notifications = chill_list_notifications('Chill\\ActivityBundle\\Entity\\Activity', entity.id) %}
{% if notifications is not empty %}
{{ notifications|raw }}
{% endif %}
</div>
{% endblock %}
@@ -15,6 +15,7 @@ use Chill\MainBundle\Entity\Center;
use Chill\MainBundle\Security\Authorization\AbstractChillVoter;
use Chill\MainBundle\Security\Authorization\AuthorizationHelper;
use Chill\MainBundle\Security\ProvideRoleHierarchyInterface;
use function in_array;
class ActivityStatsVoter extends AbstractChillVoter implements ProvideRoleHierarchyInterface
@@ -64,8 +65,10 @@ class ActivityStatsVoter extends AbstractChillVoter implements ProvideRoleHierar
protected function supports($attribute, $subject)
{
if ($subject instanceof Center
&& in_array($attribute, $this->getAttributes(), true)) {
if (
$subject instanceof Center
&& in_array($attribute, $this->getAttributes(), true)
) {
return true;
}
@@ -24,6 +24,7 @@ use Chill\PersonBundle\Security\Authorization\PersonVoter;
use RuntimeException;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Component\Security\Core\Security;
use function in_array;
class ActivityVoter extends AbstractChillVoter implements ProvideRoleHierarchyInterface
@@ -66,7 +66,7 @@ final class ActivityReasonCategoryControllerTest extends WebTestCase
$crawler = $client->followRedirect();
// Check the entity has been delete on the list
$this->assertNotRegExp('/Foo/', $client->getResponse()->getContent());
$this->assertDoesNotMatchRegularExpression('/Foo/', $client->getResponse()->getContent());
}
*/
@@ -66,7 +66,7 @@ final class ActivityReasonControllerTest extends WebTestCase
$crawler = $client->followRedirect();
// Check the entity has been delete on the list
$this->assertNotRegExp('/Foo/', $client->getResponse()->getContent());
$this->assertDoesNotMatchRegularExpression('/Foo/', $client->getResponse()->getContent());
}
*/
@@ -66,7 +66,7 @@ final class ActivityTypeControllerTest extends WebTestCase
$crawler = $client->followRedirect();
// Check the entity has been delete on the list
$this->assertNotRegExp('/Foo/', $client->getResponse()->getContent());
$this->assertDoesNotMatchRegularExpression('/Foo/', $client->getResponse()->getContent());
}
*/
@@ -26,7 +26,7 @@ final class ActivityReasonAggregatorTest extends AbstractAggregatorTest
*/
private $aggregator;
public function setUp()
protected function setUp(): void
{
self::bootKernel();
@@ -26,7 +26,7 @@ final class ActivityTypeAggregatorTest extends AbstractAggregatorTest
*/
private $aggregator;
public function setUp()
protected function setUp(): void
{
self::bootKernel();
@@ -26,7 +26,7 @@ final class ActivityUserAggregatorTest extends AbstractAggregatorTest
*/
private $aggregator;
public function setUp()
protected function setUp(): void
{
self::bootKernel();
@@ -24,7 +24,7 @@ final class CountActivityTest extends AbstractExportTest
*/
private $export;
public function setUp()
protected function setUp(): void
{
self::bootKernel();
@@ -24,7 +24,7 @@ final class ListActivityTest extends AbstractExportTest
*/
private $export;
public function setUp()
protected function setUp(): void
{
self::bootKernel();
@@ -26,7 +26,7 @@ final class StatActivityDurationSumTest extends AbstractExportTest
*/
private $export;
public function setUp()
protected function setUp(): void
{
self::bootKernel();
@@ -25,7 +25,7 @@ final class ActivityReasonFilterTest extends AbstractFilterTest
*/
private $filter;
public function setUp()
protected function setUp(): void
{
self::bootKernel();
@@ -26,7 +26,7 @@ final class PersonHavingActivityBetweenDateFilterTest extends AbstractFilterTest
*/
private $filter;
public function setUp()
protected function setUp(): void
{
self::bootKernel();
@@ -45,7 +45,7 @@ final class ActivityTypeTest extends KernelTestCase
*/
protected $user;
public function setUp()
protected function setUp(): void
{
self::bootKernel();
@@ -29,7 +29,7 @@ final class TranslatableActivityReasonTest extends TypeTestCase
*/
private static $prophet;
public function setUp()
protected function setUp(): void
{
parent::setUp();
}
@@ -31,7 +31,7 @@ final class TranslatableActivityTypeTest extends KernelTestCase
*/
protected $container;
public function setUp()
protected function setUp(): void
{
self::bootKernel();
@@ -44,7 +44,7 @@ final class ActivityVoterTest extends KernelTestCase
*/
protected $voter;
public function setUp()
protected function setUp(): void
{
self::bootKernel();
$this->voter = self::$kernel->getContainer()
@@ -24,6 +24,7 @@ use RuntimeException;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Component\Security\Core\Role\Role;
use Symfony\Component\Security\Core\User\UserInterface;
use function implode;
use function in_array;
use function strtr;
@@ -17,6 +17,7 @@ use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator;
use Symfony\Component\Validator\Exception\UnexpectedTypeException;
use Symfony\Component\Validator\Exception\UnexpectedValueException;
use function array_merge;
use function count;
@@ -13,6 +13,7 @@ namespace Chill\Migrations\Activity;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;
use function count;
/**
@@ -76,7 +76,7 @@ activity:
Insert a document: Insérer un document
Remove a document: Supprimer le document
comment: Commentaire
No documents: Pas de documents
#timeline
'%user% has done an %activity_type%': '%user% a effectué une activité de type "%activity_type%"'
@@ -224,3 +224,7 @@ Aggregate by activity reason: Aggréger par sujet de l'activité
Last activities: Les dernières activités
See activity in accompanying course context: Voir l'activité dans le contexte du parcours d'accompagnement
You get notified of an activity which does not exists any more: Cette notification ne correspond pas à une activité valide.
you are not allowed to see it details: La notification fait référence à une activité à laquelle vous n'avez pas accès.
This is the minimal activity data: Activité n°
@@ -19,6 +19,7 @@ use DateTimeImmutable;
use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Common\DataFixtures\DependentFixtureInterface;
use Doctrine\Persistence\ObjectManager;
use function random_int;
class LoadAsideActivity extends Fixture implements DependentFixtureInterface
@@ -18,10 +18,12 @@ class LoadAsideActivityCategory extends \Doctrine\Bundle\FixturesBundle\Fixture
{
public function load(ObjectManager $manager)
{
foreach ([
'Appel téléphonique',
'Formation',
] as $key => $label) {
foreach (
[
'Appel téléphonique',
'Formation',
] as $key => $label
) {
$category = new AsideActivityCategory();
$category->setTitle(['fr' => $label]);
$manager->persist($category);
@@ -13,6 +13,7 @@ namespace Chill\AsideActivityBundle\DependencyInjection;
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
use Symfony\Component\Config\Definition\ConfigurationInterface;
use function is_int;
class Configuration implements ConfigurationInterface
@@ -32,6 +32,7 @@ use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use function in_array;
final class AsideActivityFormType extends AbstractType
@@ -13,6 +13,7 @@ namespace Chill\AsideActivityBundle\Menu;
use Knp\Menu\MenuItem;
use Symfony\Component\Security\Core\Security;
use function in_array;
final class AdminMenuBuilder implements \Chill\MainBundle\Routing\LocalMenuBuilderInterface
@@ -26,7 +26,7 @@ final class AsideActivityControllerTest extends WebTestCase
{
use PrepareClientTrait;
public function setUp()
protected function setUp(): void
{
parent::setUp();
self::bootKernel();
@@ -13,6 +13,7 @@ namespace Chill\AMLI\BudgetBundle\Calculator;
use Chill\AMLI\BudgetBundle\Entity\AbstractElement;
use OutOfBoundsException;
use function array_key_exists;
use function array_keys;
use function implode;
@@ -21,6 +21,7 @@ use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Translation\TranslatorInterface;
use function get_class;
abstract class AbstractElementController extends Controller
@@ -22,6 +22,7 @@ use Psr\Log\LoggerInterface;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\Translation\TranslatorInterface;
use function array_merge;
use function count;
@@ -21,6 +21,7 @@ use Symfony\Component\Form\Extension\Core\Type\MoneyType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use function array_flip;
use function asort;
@@ -21,6 +21,7 @@ use Symfony\Component\Form\Extension\Core\Type\MoneyType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use function array_flip;
class ResourceType extends AbstractType
@@ -18,6 +18,7 @@ use Chill\MainBundle\Security\Authorization\AuthorizationHelper;
use Chill\MainBundle\Security\ProvideRoleHierarchyInterface;
use Chill\PersonBundle\Entity\Person;
use Symfony\Component\Security\Core\Role\Role;
use function in_array;
class BudgetElementVoter extends AbstractChillVoter implements ProvideRoleHierarchyInterface
@@ -16,6 +16,7 @@ use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use function count;
class CalendarRangeAPIController extends ApiController
@@ -28,6 +28,7 @@ use Symfony\Component\Serializer\Annotation\Groups;
use Symfony\Component\Validator\Constraints\NotBlank;
use Symfony\Component\Validator\Constraints\Range;
use Symfony\Component\Validator\Mapping\ClassMetadata;
use function in_array;
/**
@@ -14,6 +14,7 @@ namespace Chill\CalendarBundle\Event;
use Chill\ActivityBundle\Entity\Activity;
use Doctrine\Persistence\Event\LifecycleEventArgs;
use Symfony\Component\HttpFoundation\RequestStack;
use function array_key_exists;
class ListenToActivityCreate
@@ -20,7 +20,6 @@ use Chill\MainBundle\Entity\User;
use Chill\MainBundle\Form\Type\CommentType;
use Chill\MainBundle\Templating\TranslatableStringHelper;
use Chill\PersonBundle\Entity\Person;
use Chill\ThirdPartyBundle\Entity\ThirdParty;
use DateTimeImmutable;
use Doctrine\Persistence\ObjectManager;
@@ -1,6 +1,10 @@
import 'es6-promise/auto';
import { createStore } from 'vuex';
import { postLocation } from 'ChillActivityAssets/vuejs/Activity/api';
import {
getLocations, getLocationTypeByDefaultFor,
getUserCurrentLocation
} from "../../../../../ChillActivityBundle/Resources/public/vuejs/Activity/api";
const debug = process.env.NODE_ENV !== 'production';
@@ -82,7 +86,7 @@ const store = createStore({
}
},
mutations: {
// ConcernedGroups
addPersonsInvolved(state, payload) {
//console.log('### mutation addPersonsInvolved', payload.result.type);
@@ -94,7 +98,7 @@ const store = createStore({
state.activity.thirdParties.push(payload.result);
break;
case 'user':
state.activity.users.push(payload.result);
state.activity.users.push(payload.result);
break;
};
},
@@ -108,7 +112,7 @@ const store = createStore({
state.activity.thirdParties = state.activity.thirdParties.filter(thirdparty => thirdparty !== payload);
break;
case 'user':
state.activity.users = state.activity.users.filter(user => user !== payload);
state.activity.users = state.activity.users.filter(user => user !== payload);
break;
};
},
@@ -217,9 +221,7 @@ const store = createStore({
hiddenLocation.value = value.id;
}
commit("updateLocation", value);
}
}
});
@@ -13,6 +13,9 @@
:close-on-select="false"
:allow-empty="true"
:model-value="value"
:select-label="$t('multiselect.select_label')"
:deselect-label="$t('multiselect.deselect_label')"
:selected-label="$t('multiselect.selected_label')"
@select="selectUsers"
@remove="unSelectUsers"
@close="coloriseSelectedValues"
@@ -1,13 +1,17 @@
import { multiSelectMessages } from 'ChillMainAssets/vuejs/_js/i18n'
const calendarUserSelectorMessages = {
fr: {
choose_your_calendar_user: "Afficher les plages de disponibilités",
select_user: "Sélectionnez des calendriers",
show_my_calendar: "Afficher mon calendrier",
show_weekends: "Afficher les week-ends"
}
};
fr: {
choose_your_calendar_user: "Afficher les plages de disponibilités",
select_user: "Sélectionnez des calendriers",
show_my_calendar: "Afficher mon calendrier",
show_weekends: "Afficher les week-ends"
}
};
export {
calendarUserSelectorMessages
};
Object.assign(calendarUserSelectorMessages.fr, multiSelectMessages.fr);
export {
calendarUserSelectorMessages
};
@@ -92,8 +92,11 @@
%}
<div class="item-row details">
<div class="item-col">
{% include 'ChillActivityBundle:Activity:concernedGroups.html.twig' with {'context': accompanyingCourse, 'with_display': 'row', 'entity': calendar } %}
{% include 'ChillActivityBundle:Activity:concernedGroups.html.twig' with {
'context': accompanyingCourse,
'render': 'row',
'entity': calendar
} %}
</div>
{% if calendar.comment.comment is not empty %}
@@ -123,4 +126,4 @@
</li>
</ul>
{% endblock %}
{% endblock %}
@@ -6,7 +6,7 @@
</dl>
<h2 class="chill-red">{{ 'Concerned groups'|trans }}</h2>
{% include 'ChillActivityBundle:Activity:concernedGroups.html.twig' with {'context': context, 'with_display': 'bloc' } %}
{% include 'ChillActivityBundle:Activity:concernedGroups.html.twig' with {'context': context, 'render': 'bloc' } %}
<h2 class="chill-red">{{ 'Calendar data'|trans }}</h2>
@@ -108,13 +108,13 @@
{# TODO
{% if is_granted('CHILL_ACTIVITY_DELETE', entity) %}
#}
<li>
<a href="{{ path('chill_calendar_calendar_delete', { 'id': entity.id, 'accompanying_period_id': accompanying_course_id, 'user_id': user_id } ) }}" class="btn btn-delete">
{{ 'Delete'|trans }}
</a>
</li>
{#
{% endif %}
#}
@@ -26,7 +26,7 @@ final class CalendarControllerTest extends WebTestCase
/**
* Setup before each test method (see phpunit doc).
*/
public function setUp()
protected function setUp(): void
{
self::bootKernel();
$this->client = self::createClient([], [
@@ -25,6 +25,7 @@ use Symfony\Component\Console\Question\Question;
use Symfony\Component\Validator\Validator\ValidatorInterface;
use Symfony\Component\Yaml\Exception\ParseException;
use Symfony\Component\Yaml\Parser;
use function count;
/**
@@ -23,6 +23,7 @@ use Symfony\Bridge\Twig\TwigEngine;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
use function array_key_exists;
use function count;
use function in_array;

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