Compare commits

...

358 Commits

Author SHA1 Message Date
nobohan
db65134743 add person: increase z-index of toast and wait for validation before closing modal 2022-01-17 12:17:22 +01:00
7af4c3434e Merge remote-tracking branch 'origin/master' into issue357_front_end_validation 2022-01-16 22:51:45 +01:00
46c6d0e293 minor fix: } missing in template causing an error 2022-01-14 15:25:17 +01:00
bb0a04b19a Using translations instead of hardcoded 2022-01-14 14:37:50 +01:00
8d3ba314e0 adjustment badges into rounded-pill + red color for urgent 2022-01-14 14:18:37 +01:00
9e48a1db0a badges added in list view for parcours that are urgent and/or confidential 2022-01-14 13:58:56 +01:00
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
11d4450244 fix condition to show comment in on-the-fly 2022-01-13 11:27:36 +01:00
5a79df0e0a fix test 2022-01-12 22:34:32 +01:00
c0c2131be0 fix notification test 2022-01-12 22:22:18 +01:00
e6ea2674c2 comment console.log, remove v-bind before ':' 2022-01-12 22:13:14 +01:00
39b5ce0320 fix access to database in ci 2022-01-12 22:06:47 +01:00
e0ee817421 batch rename twig attribut 2022-01-12 21:36:12 +01:00
8159144f26 fix accesss to database on ci 2022-01-12 20:20:20 +00:00
630115fd3a update changelog 2022-01-12 20:43:17 +01:00
87cf8d737e remove dump 2022-01-12 20:38:09 +01:00
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
c9e3960238 clean commented unused code 2022-01-12 17:55:00 +01:00
782e098e31 Course resume page: hide a masonry bloc if no content (fix) 2022-01-12 17:37:49 +01:00
34ff91979b emit response and commit change in store 2022-01-12 17:06:21 +01:00
nobohan
a09c8ee8af upd CHANGELOG 2022-01-12 15:47:11 +01:00
nobohan
a312a9463d address: display error message if some fields are empty (street & streetnumber) 2022-01-12 15:44:37 +01:00
nobohan
0035128138 address: display error message if some fields are empty 2022-01-12 15:44:37 +01:00
nobohan
49cb154672 address: add field validation (WIP) 2022-01-12 15:44:37 +01:00
nobohan
1a7ec9e396 Activity: fix vuejs warning 2022-01-12 15:44:37 +01:00
nobohan
fa0b9271c2 location: treat 422 error when POSTing new location 2022-01-12 15:44:37 +01:00
nobohan
c7b9a1a3fe location: fix error when creating a new location: a new location could not be added to the availableLocations due to refactoring 2022-01-12 15:44:37 +01:00
nobohan
f1c61a2387 person: treat 422 error in AddPerson for thirdparty 2022-01-12 15:44:37 +01:00
nobohan
8f6a70b240 person: add validation for required fields in on-the-fly person 2022-01-12 15:44:37 +01:00
nobohan
40e4bf953f vuejs: better violations message in 422 error handling 2022-01-12 15:44:37 +01:00
nobohan
378f3a16fc person: on-the-fly person: first implementation of makeFetch for posting person 2022-01-12 15:44:37 +01:00
abcc8557ce resources: add a WriteComment new subcomponent 2022-01-12 15:25:06 +01:00
15342f85d3 only show current participations in parcours resumé 2022-01-12 13:39:53 +01:00
b679d833da display location type between parentheses for actions 2022-01-12 13:37:04 +01:00
f8ca349d9e use renderbox to display referrer in action list item 2022-01-12 12:10:41 +01:00
a8978a52b9 blur effect added on requestor if marked as anonymous 2022-01-12 12:05:45 +01:00
b1bffd875c Undo 'add thirdparty comment in acccourse resources' (commit 62b8b3e6)
-> it was displaying wrong comment !
2022-01-12 11:19:57 +01:00
b23161fa1d Merge branch 'master' into 232_resources_comment 2022-01-12 10:11:39 +01:00
e540baaa4f fix condition when confirming delete action 2022-01-12 10:09:42 +01:00
9fe744f09f thirdparty docgen normalizer: fix return type for telephone 2022-01-12 09:39:15 +01:00
6b1310148f notification: fix test 2022-01-11 11:24:11 +01:00
1650f30a59 upgrade app 2022-01-11 11:22:46 +01:00
f6386a13ac fix cs 2022-01-11 11:05:42 +01:00
e437705714 composer deps symfony/mime, change version 2022-01-11 10:29:00 +01:00
f79225fc2b Merge branch 'master' into notification/completion 2022-01-11 10:18:02 +01:00
7564c2fde1 AccompanyingPeriodResource: add ACL 2022-01-10 23:12:52 +01:00
2c4d06371c AccompanyingPeriodResource: fix deserialization + code style 2022-01-10 23:08:23 +01:00
8e012982f5 Merge remote-tracking branch 'origin/master' into 232_resources_comment 2022-01-10 21:56:36 +01:00
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
b153fc19f6 327 pinned comment 2022-01-10 20:55:37 +00:00
098c2fbaa0 Merge remote-tracking branch 'origin/master' into 232_resources_comment 2022-01-10 21:50:00 +01:00
479e4ffe64 add notification box in context person, page show activity 2022-01-10 17:08:56 +01:00
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
46ca74fc70 Merge branch 'master' into notification/completion 2022-01-10 16:11:06 +01:00
ae931b5869 update changelog 2022-01-10 16:04:04 +01:00
fded08aaaa include Activity in notification (ShowInNotification) 2022-01-10 16:01:22 +01:00
d60938352b notification: add selector on title, move styles 2022-01-10 15:59:36 +01:00
af6f3043ae activity list page: put item bloc in a separate include 2022-01-10 15:58:11 +01:00
8afd1ee275 Activity show page: move notify button and notification-box in post menu area 2022-01-10 15:14:50 +01:00
5a739380cd force ShowInNotification background (for odd gray container) 2022-01-10 14:36:58 +01:00
a1ec2b637d ShownInNotification: put border on alert block 2022-01-10 14:36:27 +01:00
584b77bbf4 accourse resume page: fix masonry block border 2022-01-10 14:36:27 +01:00
e84182cdac translations + alert message position 2022-01-10 13:08:09 +01:00
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
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
afae3b58c2 notification form integration (create/edit) 2022-01-10 12:44:08 +01:00
95027e93c6 fix translations for AddPersons in PickEntity 2022-01-10 12:41:47 +01:00
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
a40077e91b include AccompanyingPeriod in notification (shownInNotification) 2022-01-10 10:52:09 +01:00
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
efc3e3915b Docgen/action add missing goals 2022-01-10 09:35:26 +00:00
98ab3b66ba Accompanying periods list: move item in separate template (to share) 2022-01-10 10:21:31 +01:00
b1cd85971a notification show page: use macro to display thread comments 2022-01-07 15:50:47 +01:00
0a3b50568d Merge branch '327_pinned_comment' into notification/completion 2022-01-07 15:25:54 +01:00
69b5c98d2e inject record_actions buttons inside macro 2022-01-07 15:24:06 +01:00
5c4bef26e8 hotfix typo in NotificationComment 2022-01-07 14:56:17 +01:00
bdf4b71080 Merge branch '327_pinned_comment' into notification/completion 2022-01-07 13:02:59 +01:00
c60d46c68b put macro show_comment in a separate template 2022-01-07 12:51:03 +01:00
be4b8a94f0 AccompanyingCourse comments: move and rename files 2022-01-07 12:37:19 +01:00
a54cc70fd6 temporary disable previous commit 2022-01-07 12:34:14 +01:00
18959f60e2 reuse notification item in show template 2022-01-06 19:42:45 +01:00
7d4ca8d149 remove dropped tests, separate list item in external include 2022-01-06 19:04:24 +01:00
442e2a1ede notification list, item header integration (test 3 ways) 2022-01-06 19:04:24 +01:00
c32b767d9b Notifications list template 2022-01-06 19:04:16 +01:00
140f53b81f setting NotificationReadToggle options for several cases. improve options 2022-01-06 13:34:39 +01:00
b9e5734039 bouton bleu 2022-01-05 21:16:47 +01:00
f5f5d66f3d design notification box in post menu area 2022-01-05 20:58:51 +01:00
1e0c62b09d Merge branch 'master' into notification/completion 2022-01-05 11:15:49 +01:00
78cf817921 docgen: add location to accompanying period 2022-01-04 23:50:22 +01:00
40a457ba69 notificaiton: add mailer component 2022-01-04 22:41:17 +01:00
66aac8908c notification: fix translations 2022-01-04 22:41:04 +01:00
c17fd968be notification: do not show system notification in UI 2022-01-04 22:40:48 +01:00
6f561f57a6 Notification: send an email when a notification is created 2022-01-04 22:35:23 +01:00
4f1540c541 add a patch resource api endpoint (wip) 2022-01-04 19:37:27 +01:00
4ef024516c notificaiton: improve NotificationHandlerInterface + mark notification
as unread if a comment is appended
2022-01-04 19:02:03 +01:00
ebc6d21ba6 notification: order notification by date desc in inbox and sent 2022-01-04 18:38:08 +01:00
d31661ae7a notification: fix NotificationHandlerInterface 2022-01-04 17:55:34 +01:00
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
160d382e07 notification: add notification sent to widget which list notifications
ont an entity
2022-01-04 17:14:09 +01:00
a8fe049ecd notification: add more variable in twig template 2022-01-04 17:00:31 +01:00
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
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
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
68ea0a1086 wip delete comment 2022-01-04 12:07:37 +01:00
5bb5468198 notificaiton: add title to list and forms 2022-01-04 11:32:15 +01:00
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
0edd5667e0 fix cs 2022-01-04 11:09:59 +01:00
862f9aefb0 update changelog 2022-01-04 10:27:28 +01:00
45dd21e02a add component and type to add user dynamically 2022-01-03 15:42:24 +01:00
5bf1b9d8bd send system notification on period confirmation 2021-12-30 02:11:21 +01:00
7bc4ad9779 twig extension for listing notification on a given entity 2021-12-30 01:02:16 +01:00
1576507f7e notification: fix widget toggle read status 2021-12-29 23:09:26 +01:00
9ddfd194be notification: small vue component to toggle read status of a notification 2021-12-29 18:51:25 +01:00
8fe94bd117 notification: update comment and api endpoint for marking as read/unread 2021-12-29 17:36:14 +01:00
9d638fe897 allow to edit notification 2021-12-29 15:24:52 +01:00
478c3b3247 notification: add update information 2021-12-29 15:12:27 +01:00
dc581fcf57 fix details and corrections 2021-12-29 15:06:33 +01:00
bd909b0061 fix details and corrections 2021-12-29 14:57:18 +01:00
58c7560a1c Merge remote-tracking branch 'origin/notification/completion' into notification/completion 2021-12-29 14:46:55 +01:00
9e67d9586d masonry: add origin bloc 2021-12-29 12:32:19 +01:00
982dd78828 put back warnings inside condition 2021-12-29 12:15:21 +01:00
1055fd9398 masonry: raise comment bloc width 2021-12-29 12:13:39 +01:00
5089bba4d7 improve masonry bloc style 2021-12-29 12:11:20 +01:00
433307020a add a new button to send notifications 2021-12-29 10:52:15 +01:00
5a5ff5f54a notification: fix type for id 2021-12-28 23:32:11 +01:00
a0b112e8db notificaiton: handle remove addressee and reset at the end of registering unread 2021-12-28 23:31:33 +01:00
cb88a37885 notification: add comment in show and append comment 2021-12-28 23:25:12 +01:00
9647785d8b notificaton: add comments 2021-12-28 23:03:58 +01:00
1ad6a958e2 notification: add show action 2021-12-28 22:35:15 +01:00
f453dbb543 notification: more check in test 2021-12-28 20:04:30 +01:00
b323ddae05 fix loading of unread addressees in notification 2021-12-28 19:40:38 +01:00
d5d64cdf65 upgrade test app 2021-12-26 01:12:42 +01:00
700bb02374 notification: add test for unread consistency 2021-12-26 01:12:32 +01:00
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
f6f0786d38 notificaiton: load interface automatically 2021-12-25 22:53:35 +01:00
5cebcfddb7 fix cs ? 2021-12-25 22:51:58 +01:00
11824adda4 notification: create 2021-12-25 22:41:25 +01:00
d62893827b create a notification controller 2021-12-25 22:16:34 +01:00
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
793f7724a7 Merge branch 'master' of gitlab.com:Chill-Projet/chill-bundles 2021-12-21 14:44:50 +01:00
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
f117dcd703 objective-result-eval: display as a table in lists and dashboards 2021-12-20 15:46:07 +01:00
67c1760b51 fix bootstrap class 2021-12-20 13:53:49 +01:00
97792fd85f Merge branch 'master' of gitlab.com:Chill-Projet/chill-bundles 2021-12-20 12:58:35 +01:00
ae43e23ec6 Merge branch 'master' into issue321_layout_improvements_actionForm 2021-12-20 12:56:41 +01:00
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
1a0dcfa8d0 Merge branch 'issue265' 2021-12-17 16:20:15 +01:00
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
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
3d16f68f54 accompanyingcourse-work: improve ui 2021-12-17 08:16:39 +01:00
36890a2256 person document: fix use of deprecated role class 2021-12-17 00:33:02 +01:00
395920bd51 suggest-list: picto is managedby css 2021-12-17 00:22:20 +01:00
773aee5534 address reference: add index for refid 2021-12-16 22:41:37 +01:00
a6cc6221d6 restore badge-title appearance 2021-12-16 22:35:47 +01:00
37ed6b7591 revert some scss conflicts with suggest-list 2021-12-16 22:18:17 +01:00
cdc335372f person denormalization: use object to populate if any 2021-12-16 22:02:00 +01:00
e0bed186b8 normalization of date: allow null 2021-12-16 22:01:35 +01:00
d588c36308 Merge branch '327_pinned_comment' into issue321_layout_improvements_actionForm 2021-12-16 21:41:22 +01:00
06cbe8325c fix person validation 2021-12-16 21:39:59 +01:00
400ce3ac82 remove dead code 2021-12-16 21:28:53 +01:00
14aab637eb start to simplify validation groups for person 2021-12-16 21:23:40 +01:00
6296c7a307 household/address: show date validFrom and validTo when moving Household 2021-12-16 21:23:40 +01:00
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
91bee4aad3 wip goal-result on resume page 2021-12-16 18:55:21 +01:00
45b71b207e activity fix: display comment in list 2021-12-16 13:58:43 +01:00
751a418c1f Update changelog 2021-12-16 10:42:02 +01:00
8cf08f66d5 Fix bug in singleTaskController 2021-12-16 10:41:51 +01:00
b7c0548212 Fix style of dropdown menu 2021-12-16 10:41:36 +01:00
408a14926f Merge branch 'docgen/add-base-context' 2021-12-15 23:52:51 +01:00
efdd96b69f docgen: person normalization: fix typing of age 2021-12-15 23:51:41 +01:00
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
d4a5735e15 Docgen/add base context 2021-12-15 22:43:06 +00:00
9453fc2dd5 docgen: add age and base context 2021-12-15 23:42:37 +01:00
f01b87b348 comments: form controller 2021-12-15 23:34:41 +01:00
689f612382 fix cs 2021-12-15 23:05:37 +01:00
17a81d7e66 build base context data 2021-12-15 23:05:25 +01:00
6501a0148e fix downloading document 2021-12-15 22:14:20 +01:00
44d38bcef5 fix typing for email 2021-12-15 22:14:20 +01:00
75dda5b999 userpicker: fix role type: adapt on both allowed types 2021-12-15 22:14:20 +01:00
46ecab24c2 update changelog 2021-12-15 22:14:20 +01:00
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
ecbe30ae53 person create button style changed to full width + update changelog 2021-12-15 14:21:31 +01:00
4e8492db70 Merge branch 'master' of gitlab.com:Chill-Projet/chill-bundles 2021-12-15 00:15:24 +01:00
48f62a2a17 refund template design for person household_history 2021-12-15 00:14:31 +01:00
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
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
3a9fac08c3 Merge remote-tracking branch 'origin/master' into issue332_location_activity 2021-12-14 19:55:16 +01:00
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
264bd76461 Issue336 internal create action fixes 2021-12-14 18:48:31 +00:00
45bcb27b79 Merge branch 'master' into fixes/thirdparty 2021-12-14 18:42:25 +01:00
cf22a49487 Merge branch 'master' into 327_pinned_comment 2021-12-14 18:40:12 +01:00
e71e369f15 temporary disable comment page in menu 2021-12-14 18:39:22 +01:00
1a604ecf65 Merge branch 'master' into divers 2021-12-14 18:32:12 +01:00
da7bfa8a4e thirdparty: fix denormalization of thirdparty 2021-12-14 15:46:55 +01:00
d3127bed6d thirdparty: add address on kind = contact 2021-12-14 14:57:11 +01:00
3c1c07dc64 comments: edit links with anchor and parameter 2021-12-14 10:54:44 +01:00
530267a9b0 commments: add basic form in template 2021-12-14 10:31:51 +01:00
f9dd1c5231 fix cs 2021-12-13 22:57:50 +01:00
f2fd30b690 add ordering to social issue and social action 2021-12-13 22:48:54 +01:00
3d3cc9aeb4 fix import 2021-12-13 22:19:05 +01:00
8b2a8544b8 form type and controller, wip 2021-12-13 21:58:56 +01:00
be5f54c142 comments: build list 2021-12-13 21:49:03 +01:00
1fbe044729 update schema: an evaluation may be linked to multiple actions 2021-12-13 21:42:29 +01:00
60032c96f7 update changelog and cs-fixer 2021-12-13 19:43:07 +01:00
976f2fd41a fix thirdparty renderbox after merge 2021-12-13 19:37:19 +01:00
19741530bf Corrections after merge (double declares) 2021-12-13 19:24:21 +01:00
6e079fa771 Fix bug remove associated party in activity form 2021-12-13 19:24:03 +01:00
8c14232a91 Conflict resolved after rebase 2021-12-13 19:16:53 +01:00
a983b34f0d styling adjusted 2021-12-13 19:06:27 +01:00
4970cf000e behavior and style changed for adding motifs,obectifs, dispositifs 2021-12-13 19:06:27 +01:00
1422ddeb2a restyling and deleting of console.logs 2021-12-13 19:06:27 +01:00
9afc8c64ad stylefix 2021-12-13 19:06:27 +01:00
200f1749f1 patchOnTheFly action added to store, bug in posting thirdparty though 2021-12-13 19:06:27 +01:00
4645ede7d1 social issue added to title 2021-12-13 19:06:27 +01:00
6016038813 add modal to confirm delete action + delete button changed 2021-12-13 19:06:06 +01:00
d40b0e88ed change of masquer message, removal double import 2021-12-13 19:06:06 +01:00
f26863487b fix badge mixin 2021-12-13 19:06:06 +01:00
5b531a0529 improve docgen wip 2021-12-13 19:04:37 +01:00
a25123ee38 add docgen:normalization for relation 2021-12-13 19:03:42 +01:00
2524229941 docgen normalization for relation 2021-12-13 19:03:22 +01:00
119a9981af Using thirdparty renderbox to display intervening thirdparties 2021-12-13 19:02:26 +01:00
decc18596b minor adjustment to allow for action title banner with correct colors 2021-12-13 19:01:36 +01:00
eea72c9bcd fix after rebase 2021-12-13 19:01:36 +01:00
717b71ff54 first commit 2021-12-13 19:01:36 +01:00
64015479b1 improve docgen, trnslations, admin 2021-12-13 19:01:36 +01:00
18fa4eb586 fix tests (wip) 2021-12-13 19:00:13 +01:00
47574f82aa fix code style 2021-12-13 19:00:13 +01:00
12309ca1b5 fix tests (wip) 2021-12-13 18:59:43 +01:00
20c95a179d first commit 2021-12-13 18:58:17 +01:00
d5290e4bdd create comments page, with menu entry, route and template 2021-12-13 17:25:39 +01:00
f4396459a0 comments: add isPinned() method 2021-12-13 16:42:41 +01:00
f8071d32c0 batch replace/rename initialComment by pinnedComment 2021-12-13 16:31:16 +01:00
4dc490beb7 change public function to protected function 2021-12-13 14:57:36 +00:00
52a137ee77 thirdparty: no need to burst the code: complete commit 1efdade38 2021-12-13 15:46:02 +01:00
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
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
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
133e4858dc household_member_editor: fix translation for onthefly and address modal, fix button appearance 2021-12-13 13:54:29 +01:00
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
7f2e3ee8e2 fix filiation error with gender undefined (#331) 2021-12-13 09:45:46 +01:00
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
cc42a4ae51 Merge branch 'divers' of gitlab.com:Chill-Projet/chill-bundles into divers 2021-12-13 09:33:37 +01:00
6c28ff00ab onthefly create thirdparty: use badge-entity for radio buttons label 2021-12-13 09:30:34 +01:00
d7db8400d2 accompanyingCourse list: display badges as clickable onthefly modal 2021-12-13 09:30:34 +01:00
16b3be322a actions list: display badges as clickable onthefly modal 2021-12-13 09:30:34 +01:00
329026e36c restyling and deleting of console.logs 2021-12-10 17:47:16 +01:00
19a53ada88 stylefix 2021-12-10 17:24:38 +01:00
4c31100dc7 patchOnTheFly action added to store, bug in posting thirdparty though 2021-12-10 17:14:18 +01:00
536a1a46da social issue added to title 2021-12-10 17:01:06 +01:00
5ed7572f95 bugfix 2021-12-10 17:00:19 +01:00
f1067661d4 add modal to confirm delete action + delete button changed 2021-12-10 17:00:04 +01:00
3592434623 onthefly create thirdparty: use badge-entity for radio buttons label 2021-12-10 15:37:12 +01:00
94ec165c4c accompanyingCourse list: display badges as clickable onthefly modal 2021-12-10 14:30:16 +01:00
1c3c2be176 actions list: display badges as clickable onthefly modal 2021-12-10 14:10:23 +01:00
edaad844aa Merge branch 'docgen/improve-normalizer' into issue321_layout_improvements_actionForm 2021-12-10 11:47:30 +01:00
2edf36b6c5 change of masquer message, removal double import 2021-12-10 11:47:01 +01:00
95e45a8ad2 fix badge mixin 2021-12-10 10:46:47 +01:00
9004686a13 improve docgen wip 2021-12-10 01:10:55 +01:00
e266fa0e5d show errors from relatorio driver 2021-12-09 21:50:56 +01:00
75ba56fa09 add verification tool for admin 2021-12-09 21:14:12 +01:00
12d6829b98 fix type with phonenumber helper 2021-12-09 14:17:42 +01:00
7b5e96771f Merge remote-tracking branch 'origin/master' into docgen/improve-normalizer 2021-12-09 14:11:14 +01:00
8a9024de13 add docgen:normalization for relation 2021-12-09 13:51:36 +01:00
9387d37746 Resolve merge conflict 2021-12-09 13:49:22 +01:00
24a404964b docgen normalization for relation 2021-12-09 12:44:41 +01:00
534a8bb3af Using thirdparty renderbox to display intervening thirdparties 2021-12-09 12:35:52 +01:00
21e3da0266 minor adjustment to allow for action title banner with correct colors 2021-12-09 12:34:44 +01:00
85a1fcca18 fix after rebase 2021-12-09 11:49:37 +01:00
793f5116ab first commit 2021-12-09 11:39:15 +01:00
5d24bd4d11 Merge branch 'master' into docgen/improve-normalizer 2021-12-08 21:08:30 +01:00
70ab232149 improve docgen, trnslations, admin 2021-12-08 13:58:49 +01:00
027c01fc58 fix css block 2021-12-08 12:23:24 +01:00
fdc5127c74 fix some error in test (wip) 2021-12-08 11:57:16 +01:00
b8d48f04ae fix tests (wip) 2021-12-08 11:47:50 +01:00
f1b1771d6b fix tests (wip) 2021-12-08 11:35:00 +01:00
62dabbe1e7 fix code style 2021-12-08 11:14:46 +01:00
4101392190 fix tests and type hinting 2021-12-08 11:13:49 +01:00
3f1bed0b1c fix tests (wip) 2021-12-08 11:05:41 +01:00
79fbdcdee4 type hint User class 2021-12-08 11:05:29 +01:00
3d8d79323e remove error messages 2021-12-08 10:56:30 +01:00
32178e22fe fix tests (wip) 2021-12-08 10:51:30 +01:00
60a8c20896 update app 2021-12-08 10:29:54 +01:00
9d8011da61 fix loading origin 2021-12-08 10:06:35 +01:00
789eeadb40 fix loading fixtures for doc generator template 2021-12-08 09:52:51 +01:00
f206fdb08c fix code style 2021-12-08 09:52:35 +01:00
9d5409d8d9 fix casting 2021-12-08 09:52:06 +01:00
e297d82533 fixes on tests [WIP] 2021-12-08 09:26:13 +01:00
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
631 changed files with 11424 additions and 2817 deletions

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

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:

View File

@@ -11,9 +11,65 @@ and this project adheres to
## Unreleased
<!-- write down unreleased development here -->
* vuejs: add validation on required fields for AddPerson, Address and Location components
* vuejs: treat 422 validation errors in locations and AddPerson components
## Test releases
### 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 +90,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 +109,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

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.

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",

View File

@@ -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();

View File

@@ -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;
}
}

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/"

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:
"""

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

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
psalm-baseline.xml Normal file

File diff suppressed because it is too large Load Diff

16
psalm.xml Normal file
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>

View File

@@ -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) {

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;
/**

View File

@@ -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;
/**

View File

@@ -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;

View File

@@ -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)) {

View File

@@ -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;

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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' => [

View File

@@ -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

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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
);

View File

@@ -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,

View File

@@ -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
};

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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;

View File

@@ -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>

View File

@@ -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

View File

@@ -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,

View File

@@ -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;

View File

@@ -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;
}
}
}
});
}

View File

@@ -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')
) {

View File

@@ -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>

View File

@@ -3,11 +3,12 @@
{{ 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,
parent: parent
} %}
{% endmacro %}
@@ -59,7 +60,7 @@
}]) %}
{% endif %}
{% if (with_display == 'bloc') %}
{% if (render == 'bloc') %}
<div class="{{ context }} flex-bloc concerned-groups">
{% for bloc in blocks %}
@@ -90,7 +91,7 @@
</div>
{% endif %}
{% if (with_display == 'row') %}
{% if (render == 'row') %}
<div class="concerned-groups">
{% for bloc in blocks %}
<div class="group">
@@ -115,7 +116,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">

View File

@@ -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 %}

View File

@@ -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 %}

View File

@@ -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 %}

View File

@@ -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>

View File

@@ -4,6 +4,16 @@
{% block title 'Show the activity'|trans %}
{% 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 %}
{% import 'ChillActivityBundle:ActivityReason:macro.html.twig' as m %}
{% block content -%}
@@ -11,3 +21,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 %}

View File

@@ -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 %}

View File

@@ -4,6 +4,16 @@
{% block title 'Show the activity'|trans %}
{% 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 %}
{% import 'ChillActivityBundle:ActivityReason:macro.html.twig' as m %}
{% block personcontent -%}
@@ -11,3 +21,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 %}

View File

@@ -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;
}

View File

@@ -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

View File

@@ -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());
}
*/

View File

@@ -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());
}
*/

View File

@@ -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());
}
*/

View File

@@ -26,7 +26,7 @@ final class ActivityReasonAggregatorTest extends AbstractAggregatorTest
*/
private $aggregator;
public function setUp()
protected function setUp(): void
{
self::bootKernel();

View File

@@ -26,7 +26,7 @@ final class ActivityTypeAggregatorTest extends AbstractAggregatorTest
*/
private $aggregator;
public function setUp()
protected function setUp(): void
{
self::bootKernel();

View File

@@ -26,7 +26,7 @@ final class ActivityUserAggregatorTest extends AbstractAggregatorTest
*/
private $aggregator;
public function setUp()
protected function setUp(): void
{
self::bootKernel();

View File

@@ -24,7 +24,7 @@ final class CountActivityTest extends AbstractExportTest
*/
private $export;
public function setUp()
protected function setUp(): void
{
self::bootKernel();

View File

@@ -24,7 +24,7 @@ final class ListActivityTest extends AbstractExportTest
*/
private $export;
public function setUp()
protected function setUp(): void
{
self::bootKernel();

View File

@@ -26,7 +26,7 @@ final class StatActivityDurationSumTest extends AbstractExportTest
*/
private $export;
public function setUp()
protected function setUp(): void
{
self::bootKernel();

View File

@@ -25,7 +25,7 @@ final class ActivityReasonFilterTest extends AbstractFilterTest
*/
private $filter;
public function setUp()
protected function setUp(): void
{
self::bootKernel();

View File

@@ -26,7 +26,7 @@ final class PersonHavingActivityBetweenDateFilterTest extends AbstractFilterTest
*/
private $filter;
public function setUp()
protected function setUp(): void
{
self::bootKernel();

View File

@@ -45,7 +45,7 @@ final class ActivityTypeTest extends KernelTestCase
*/
protected $user;
public function setUp()
protected function setUp(): void
{
self::bootKernel();

View File

@@ -29,7 +29,7 @@ final class TranslatableActivityReasonTest extends TypeTestCase
*/
private static $prophet;
public function setUp()
protected function setUp(): void
{
parent::setUp();
}

View File

@@ -31,7 +31,7 @@ final class TranslatableActivityTypeTest extends KernelTestCase
*/
protected $container;
public function setUp()
protected function setUp(): void
{
self::bootKernel();

View File

@@ -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()

View File

@@ -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;

View File

@@ -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;

View File

@@ -13,6 +13,7 @@ namespace Chill\Migrations\Activity;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;
use function count;
/**

View File

@@ -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°

View File

@@ -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

View File

@@ -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);

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -26,7 +26,7 @@ final class AsideActivityControllerTest extends WebTestCase
{
use PrepareClientTrait;
public function setUp()
protected function setUp(): void
{
parent::setUp();
self::bootKernel();

View File

@@ -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;

View File

@@ -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

View File

@@ -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;

View File

@@ -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;

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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;
/**

View File

@@ -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

View File

@@ -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;

View File

@@ -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);
}
}
});

View File

@@ -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"

View File

@@ -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
};

View File

@@ -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 %}

View File

@@ -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 %}
#}

View File

@@ -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([], [

View File

@@ -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;
/**

View File

@@ -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;

View File

@@ -135,7 +135,7 @@ class CustomFieldDate extends AbstractCustomField
return null;
}
return $date->format('Y-m-d');
return $date->format('Y-m-d');
default:
$template = 'ChillCustomFieldsBundle:CustomFieldsRendering:date.'

View File

@@ -21,6 +21,7 @@ use LogicException;
use Symfony\Bridge\Twig\TwigEngine;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\FormBuilderInterface;
use function get_class;
use function gettype;
use function is_object;

View File

@@ -18,7 +18,6 @@ use Symfony\Component\Form\Extension\Core\Type\IntegerType;
use Symfony\Component\Form\Extension\Core\Type\NumberType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Validator\Constraints\GreaterThanOrEqual;
use Symfony\Component\Validator\Constraints\LessThanOrEqual;

View File

@@ -20,6 +20,7 @@ use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\HttpFoundation\RequestStack;
use function array_key_exists;
class CustomFieldText extends AbstractCustomField
@@ -65,8 +66,10 @@ class CustomFieldText extends AbstractCustomField
$attrArray = [];
if (array_key_exists(self::MULTIPLE_CF_INLINE, $options)
&& $options[self::MULTIPLE_CF_INLINE]) {
if (
array_key_exists(self::MULTIPLE_CF_INLINE, $options)
&& $options[self::MULTIPLE_CF_INLINE]
) {
$attrArray['class'] = 'multiple-cf-inline';
}

View File

@@ -20,6 +20,7 @@ use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Translation\TranslatorInterface;
use function count;
class CustomFieldsGroupType extends AbstractType

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