Compare commits

...

665 Commits

Author SHA1 Message Date
f55dee4f8a Merge branch 'ticket-app-master' into ticket/64-identifiants-person 2025-12-05 17:51:16 +01:00
9261bbadc3 Merge branch '1826-1891-1858-mobile-layout-fix-peloton-display-change-comment-display' into 'ticket-app-master'
Fix mobile layout, update Peloton display, and change comment display

See merge request Chill-Projet/chill-bundles!933
2025-12-05 16:27:12 +00:00
Boris Waaub
df15c2fee7 Fix mobile layout, update Peloton display, and change comment display 2025-12-05 16:27:12 +00:00
e82cee2ce1 convert content to markdown 2025-12-05 17:11:23 +01:00
d16de04d27 Merge branch 'master' into ticket-app-master
# Conflicts:
#	docs/source/development/create-a-new-bundle.md
#	src/Bundle/ChillActivityBundle/Resources/public/vuejs/Activity/components/SocialIssuesAcc/CheckSocialAction.vue
#	src/Bundle/ChillActivityBundle/Resources/public/vuejs/Activity/components/SocialIssuesAcc/CheckSocialIssue.vue
#	src/Bundle/ChillCalendarBundle/Menu/UserMenuBuilder.php
#	src/Bundle/ChillCalendarBundle/Resources/views/Calendar/_list.html.twig
#	src/Bundle/ChillCalendarBundle/Resources/views/Calendar/cancelCalendarByAccompanyingCourse.html.twig
#	src/Bundle/ChillCalendarBundle/Resources/views/Calendar/cancelCalendarByPerson.html.twig
#	src/Bundle/ChillCalendarBundle/translations/messages.fr.yml
#	src/Bundle/ChillDocStoreBundle/Resources/public/types/index.ts
#	src/Bundle/ChillMainBundle/Resources/public/lib/api/apiMethods.ts
#	src/Bundle/ChillMainBundle/translations/messages.fr.yml
#	src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourse/components/Confirm.vue
2025-12-05 17:04:49 +01:00
14b891b33d Release v4.9.0 2025-12-05 16:54:35 +01:00
7d4f541b7d Merge branch 'eslint-fixes-2025-12' into 'master'
Eslint fixes

See merge request Chill-Projet/chill-bundles!939
2025-12-05 15:09:15 +00:00
4919c03660 Eslint fixes 2025-12-05 15:09:15 +00:00
e345170968 Merge branch '462-metadata-project' into 'master'
Add package metadata to ChillZimbrabundle

Closes #462

See merge request Chill-Projet/chill-bundles!937
2025-12-05 15:03:02 +00:00
98e0f51603 Add package metadata to ChillZimbrabundle 2025-12-05 15:03:01 +00:00
56965562ff Merge branch 'fix-user-menu-with-counter' into 'master'
Refactor `UserMenuBuilder` to include `User` type check for better type safety

See merge request Chill-Projet/chill-bundles!938
2025-12-05 14:50:06 +00:00
2f1445a3f3 Refactor UserMenuBuilder to include User type check for better type safety 2025-12-05 14:50:06 +00:00
16c32ed4a9 Merge branch '459-invitation-counter' into 'master'
Add a counter for invitations awaiting reply

Closes #459

See merge request Chill-Projet/chill-bundles!931
2025-12-05 14:24:58 +00:00
e47c23c903 Add a counter for invitations awaiting reply 2025-12-05 14:24:58 +00:00
2ef789a794 fix eslint 2025-12-05 15:01:21 +01:00
a29232410d Merge branch '456-doc-generation-active-status' into 'master'
Show whether doc generation template is active or not + order alphabetically

Closes #456

See merge request Chill-Projet/chill-bundles!914
2025-12-05 12:39:12 +00:00
4cbb4c3ae3 Show whether doc generation template is active or not + order alphabetically 2025-12-05 12:39:12 +00:00
9d398f2cb5 Merge branch 'dutch-translations' into 'master'
Dutch translations

See merge request Chill-Projet/chill-bundles!934
2025-12-05 12:00:56 +00:00
7186fd9fb8 Dutch translations 2025-12-05 12:00:56 +00:00
fb8cacb534 Merge branch '472-zimbra-connector' into 'master'
Create a connector to synchronize with zimbra calendars

Closes #472

See merge request Chill-Projet/chill-bundles!936
2025-12-05 11:59:32 +00:00
92d5fe154e Create a connector to synchronize with zimbra calendars 2025-12-05 11:59:32 +00:00
bcbf18addc Merge branch '474-improve-event-accessibility' into 'master'
Improve accessibility of event form

Closes #474

See merge request Chill-Projet/chill-bundles!932
2025-12-05 11:58:25 +00:00
ec93034802 Improve accessibility of event form 2025-12-05 11:58:24 +00:00
284e737482 Merge branch '475-suggested-users-non-active' into 'master'
Resolve "Les utilisateurs désactivés apparaissent toujours dans les suggestions dans les échanges"

Closes #475

See merge request Chill-Projet/chill-bundles!935
2025-12-05 11:56:29 +00:00
4c1690313b Resolve "Les utilisateurs désactivés apparaissent toujours dans les suggestions dans les échanges" 2025-12-05 11:56:29 +00:00
f32877b5cd Merge branch '460-display-canceled-calendar-info' into 'master'
Resolve "Lors de l'annulation d'un rendez-vous, obtenir des détails sur le rendez-vous annulé"

Closes #460

See merge request Chill-Projet/chill-bundles!929
2025-12-05 11:47:34 +00:00
3aa4c49d00 Resolve "Lors de l'annulation d'un rendez-vous, obtenir des détails sur le rendez-vous annulé" 2025-12-05 11:47:33 +00:00
f13d064a27 Merge branch '280-add-missing-fixtures' into 'master'
Add missing fixtures for proper loading of AccompanyingPeriods

Closes #280

See merge request Chill-Projet/chill-bundles!910
2025-12-05 11:39:09 +00:00
08eb9ff439 Merge branch '424-display-entire-comment-activity' into 'master'
Display entire comment for activities in list overview

Closes #424

See merge request Chill-Projet/chill-bundles!930
2025-12-05 11:38:19 +00:00
77e0911fc9 Display entire comment for activities in list overview 2025-12-05 11:38:19 +00:00
1bed352a37 Merge branch '386-chill-docs-mkdocs' into 'master'
Resolve "Documentation: utiliser mkdocs (avec l'extension mkdocs-material) plutôt que Sphinx"

Closes #386

See merge request Chill-Projet/chill-bundles!923
2025-12-05 11:33:14 +00:00
7ad24bef8a Resolve "Documentation: utiliser mkdocs (avec l'extension mkdocs-material) plutôt que Sphinx" 2025-12-05 11:33:14 +00:00
0ba5cd849c Remove double display of person id in the banner when there is a deathdate 2025-12-03 11:38:39 +01:00
0caad2b7cd Update chill bundles to v4.8.2 2025-11-26 14:17:13 +01:00
7a80307de9 Fix template parameter for update_multiple route on event participations 2025-11-26 14:15:27 +01:00
035028c81c Add missing fixtures for proper loading of AccompanyingPeriods 2025-11-26 05:35:10 +01:00
0d32810d0d Change position and color of confirm parcours button 2025-11-24 15:13:16 +01:00
b221ad1621 Merge branch '466-set-main-user-activity' into 'master'
Associate activity's creator as a participant by default, and retro-actively append the creator to each activity

Closes #466

See merge request Chill-Projet/chill-bundles!924
2025-11-24 09:23:12 +00:00
a96e9d5377 Associate activity's creator as a participant by default, and retro-actively append the creator to each activity 2025-11-24 09:23:12 +00:00
54b73128c3 Merge branch '470-alphabetical-order-admin' into 'master'
Alphabetically order userJobs and mainLocations within user creation form

Closes #470

See merge request Chill-Projet/chill-bundles!926
2025-11-24 09:18:03 +00:00
5c0cb01fdc Alphabetically order userJobs and mainLocations within user creation form 2025-11-24 09:18:03 +00:00
26d9b55c6d Update to v4.8.1 2025-11-20 16:19:52 +01:00
1bbea33c4b Define the slots in the Modal.vue 2025-11-20 08:36:36 +01:00
310dd61870 Simplify the slot organisation to avoid multiple slots declaration 2025-11-20 08:36:22 +01:00
4ddbcf4037 Refactor SCSS and Vue components to standardize "required" labels.
- Moved SCSS rules for `.required` labels to a shared scope in `forms.scss`.
- Updated labels in `PersonEdit.vue` to consistently use the `required` class.
2025-11-19 16:45:15 +01:00
add9249502 Merge branch '471-fix-inactive-user-group-api' into 'master'
Hide inactive user groups in API responses

Closes #471

See merge request Chill-Projet/chill-bundles!927
2025-11-19 15:19:25 +00:00
380d48c43a Hide inactive user groups in API responses 2025-11-19 15:19:25 +00:00
d21d03d407 Merge branch 'ticket/wp-1854-ticket-app-master' into 'ticket-app-master'
Add filtering tickets by person center

See merge request Chill-Projet/chill-bundles!925
2025-11-19 14:45:01 +00:00
2f930ac138 Add filtering tickets by person center 2025-11-19 14:45:01 +00:00
c7d7c3ac6f Add missing 'id' paramater in path 2025-11-19 13:48:35 +01:00
7eb895c0e1 Insert name of file as the document title when uploading 2025-11-19 13:33:51 +01:00
e1b91ebbfd Release v4.8.0 2025-11-17 15:11:14 +01:00
2139b53fb0 Merge branch '449-scope-picker-form-label' into 'master'
Remove the label if there is only one scope and no scope picking field is displayed.

Closes #449

See merge request Chill-Projet/chill-bundles!911
2025-11-17 10:48:16 +00:00
a43181d60d Remove the label if there is only one scope and no scope picking field is displayed. 2025-11-17 10:48:15 +00:00
04bc1c5de8 Merge branch '463-update-calendar-with-accepted-invites' into 'master'
Update calendar with accepted invites

Closes #463

See merge request Chill-Projet/chill-bundles!921
2025-11-14 14:22:59 +00:00
0a07d68b6d Merge branch '461-calendar-items-clickable' into 'master'
Resolve "Rendre le rendez-vous clicable dans la page "mes rendez-vous""

Closes #461

See merge request Chill-Projet/chill-bundles!919
2025-11-14 14:08:04 +00:00
fccd29e3c7 Resolve "Rendre le rendez-vous clicable dans la page "mes rendez-vous"" 2025-11-14 14:08:03 +00:00
274ee94196 Merge branch '420-localisation-variable' into 'master'
Ajouter une variable de localisation aux utilisateurs

Closes #420

See merge request Chill-Projet/chill-bundles!904
2025-11-14 13:52:33 +00:00
799d04142e Ajouter une variable de localisation aux utilisateurs 2025-11-14 13:52:33 +00:00
dfe8d8b0bf Merge branch 'accessibility/improve-login-page' into 'master'
Improve accessibility on the login page

See merge request Chill-Projet/chill-bundles!922
2025-11-14 10:16:08 +00:00
82f347b93a Improve accessibility on the login page 2025-11-14 10:16:08 +00:00
635efd6f1d Update calendar with accepted invites 2025-11-12 17:01:09 +01:00
869880d8f3 Revert "Display calendar items linked to person within search results"
This reverts commit f7ea7e4dbf.
2025-11-12 13:08:54 +01:00
f7ea7e4dbf Display calendar items linked to person within search results 2025-11-12 13:00:52 +01:00
0a58e05230 Update chill bundles to v4.7.0 2025-11-10 16:47:38 +01:00
6d3bcf48b5 Refactor BannerComponent.vue to handle caller data via a computed property and define type-checking utility for Thirdparty.
- Replaced inline caller logic with a reusable `caller` computed property in `BannerComponent.vue`.
- Added `isThirdparty` and `isBaseThirdParty` utility functions to validate `Thirdparty` types in `types.ts`.
2025-11-10 13:49:43 +01:00
68c83223dd Merge branch '455-results-objectives-display-order' into 'master'
Resolve "Action d'accompagnement - afficher les objectifs avant les résultats"

Closes #455

See merge request Chill-Projet/chill-bundles!913
2025-11-07 16:23:53 +00:00
c28bd22560 Resolve "Action d'accompagnement - afficher les objectifs avant les résultats" 2025-11-07 16:23:52 +00:00
7136c682f2 Refactor Person.vue and ThirdParty.vue to enhance data loading and improve conditional rendering.
- Added `loadData` method in `Person.vue` to handle person data fetching based on props.
- Improved `ThirdParty.vue` by refining conditional checks and updating prop types for better maintainability.
2025-11-07 17:21:03 +01:00
625e55056d Add translation keys and update components for accompanying course actions
- Added new translation keys for requestor (`add_requestor`), associated persons, and resources in `messages.fr.yml`.
- Refactored Vue components (`Requestor.vue`, `Resources.vue`, `PersonsAssociated.vue`) to use these new translations dynamically.
- Imported necessary constants and the `trans` method for translation handling.
2025-11-07 17:20:54 +01:00
a5ef2475fb Merge branch 'text-wrapping-badges' into 'master'
Wrap text when it is too long within badges

See merge request Chill-Projet/chill-bundles!918
2025-11-07 14:48:48 +00:00
86dd9bfb80 Wrap text when it is too long within badges 2025-11-07 15:18:02 +01:00
6d617146b8 Merge branch 'ticket-app-master' into ticket/64-identifiants-person 2025-11-07 14:03:10 +01:00
65bbdc283d Merge branch '1828-1829-fix-bugs-empty-motive-list-and-suggestion-caller' into 'ticket-app-master'
FIX: Frontend: La liste des motifs reste vide et Frontend: l'appelant apparait deux fois dans les suggestions

See merge request Chill-Projet/chill-bundles!917
2025-11-07 12:54:30 +00:00
Boris Waaub
f0b3e63d66 FIX: Frontend: La liste des motifs reste vide et Frontend: l'appelant apparait deux fois dans les suggestions 2025-11-07 12:54:29 +00:00
c28670f0fd Merge branch '457-merge-thirdparty-bug' into 'master'
Fix the fusion of thirdparty properties that are located in another schema...

Closes #457

See merge request Chill-Projet/chill-bundles!916
2025-11-07 10:50:03 +00:00
9e2c030224 Fix the fusion of thirdparty properties that are located in another schema... 2025-11-07 10:50:03 +00:00
14e0cba2e8 Merge branch 'ticket-app-master' into ticket/64-identifiants-person 2025-11-07 11:12:48 +01:00
41a31944b3 Merge branch 'create-admin-for-motive' into 'ticket-app-master'
Create admin for motive

See merge request Chill-Projet/chill-bundles!897
2025-11-07 10:11:47 +00:00
51607572de Create admin for motive 2025-11-07 10:11:46 +00:00
a706c6f337 fix: set back to true suggestion of referrer when creating notification for
accompanyingPeriodWorkDocument
2025-11-06 16:18:33 +01:00
bc63b489ee Merge branch '285-cancel-calendar' into 'master'
Permettre d'annuler un rendez-vous

Closes #285

See merge request Chill-Projet/chill-bundles!775
2025-11-06 15:07:11 +00:00
a4cfc6a178 Permettre d'annuler un rendez-vous 2025-11-06 15:07:11 +00:00
f75d1da3b1 Merge branch '385-invitation-list' into 'master'
Add user invitation list page

Closes #385

See merge request Chill-Projet/chill-bundles!866
2025-11-06 12:06:15 +00:00
b8b68e5e5a Rename page title key for invitations list to align with translation standards
- Replaced hardcoded title 'My invitations list' with 'invite.list.title' translation key.
2025-11-06 13:00:38 +01:00
ae5ba67064 Update UserMenuBuilder to adjust menu labels and sort order
- Renamed 'My invitations list' to 'invite.list.title'.
- Updated the sort order for 'My calendar' from 9 to 8, to place "invitation list" just after the calendar list
2025-11-06 13:00:28 +01:00
bfe4dd3aec Merge branch 'master' into 385-invitation-list 2025-11-06 12:14:21 +01:00
627e128977 Merge branch 'ticket-app-master' into ticket/64-identifiants-person
# Conflicts:
#	package.json
#	src/Bundle/ChillMainBundle/Entity/User.php
#	src/Bundle/ChillMainBundle/Resources/public/types.ts
#	src/Bundle/ChillMainBundle/Resources/public/vuejs/_components/Modal.vue
#	src/Bundle/ChillPersonBundle/chill.api.specs.yaml
#	src/Bundle/ChillTicketBundle/src/Messenger/Handler/PostTicketUpdateMessageHandler.php
2025-11-06 11:23:34 +01:00
1fc5530707 Merge branch '1721-1618-enhance-hierachy-motives-display-and-add-check-box-see-only-comment' into 'ticket-app-master'
Améliorer l'affichage de la hiérarchie des motifs et ajouter une checkbox « Afficher uniquement les commentaires ».

See merge request Chill-Projet/chill-bundles!903
2025-11-06 10:10:06 +00:00
Boris Waaub
b31778c068 Améliorer l'affichage de la hiérarchie des motifs et ajouter une checkbox « Afficher uniquement les commentaires ». 2025-11-06 10:10:06 +00:00
305c6deb24 Add vue-tsc to dev dependencies
# Conflicts:
#	.junie/guidelines.md
#	src/Bundle/ChillActivityBundle/Resources/public/vuejs/Activity/components/SocialIssuesAcc.vue
#	src/Bundle/ChillCalendarBundle/Resources/public/vuejs/Calendar/App.vue
#	src/Bundle/ChillCalendarBundle/Resources/public/vuejs/MyCalendarRange/App2.vue
#	src/Bundle/ChillDocStoreBundle/Resources/public/types/generic_doc.ts
#	src/Bundle/ChillDocStoreBundle/Resources/public/vuejs/DropFileWidget/DropFileModal.vue
#	src/Bundle/ChillDocStoreBundle/Resources/public/vuejs/StoredObjectButton/HistoryButton/HistoryButtonListItem.vue
#	src/Bundle/ChillMainBundle/Resources/public/chill/js/date.ts
#	src/Bundle/ChillMainBundle/Resources/public/vuejs/DownloadExport/App.vue
#	src/Bundle/ChillMainBundle/Resources/public/vuejs/WorkflowAttachment/App.vue
#	src/Bundle/ChillMainBundle/Resources/public/vuejs/WorkflowAttachment/Component/AttachmentList.vue
#	src/Bundle/ChillMainBundle/Resources/public/vuejs/WorkflowAttachment/Component/GenericDocItemBox.vue
#	src/Bundle/ChillMainBundle/Resources/public/vuejs/WorkflowAttachment/Component/PickGenericDoc.vue
#	src/Bundle/ChillMainBundle/Resources/public/vuejs/WorkflowAttachment/Component/PickGenericDocModal.vue
#	src/Bundle/ChillMainBundle/Resources/public/vuejs/_components/EntityWorkflow/EntityWorkflowVueSubscriber.vue
#	src/Bundle/ChillMainBundle/Resources/public/vuejs/_components/Modal.vue
#	src/Bundle/ChillMainBundle/Resources/views/layout.html.twig
#	src/Bundle/ChillMainBundle/translations/messages+intl-icu.fr.yaml
#	src/Bundle/ChillPersonBundle/Resources/public/mod/DuplicateSelector/AccompanyingPeriodWorkSelector.ts
#	src/Bundle/ChillPersonBundle/Resources/public/types.ts
#	src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourseWorkEdit/App.vue
#	src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourseWorkEdit/components/FormEvaluation.vue
#	src/Bundle/ChillPersonBundle/Resources/public/vuejs/_components/AccompanyingPeriodWorkSelector/AccompanyingPeriodWorkList.vue
#	src/Bundle/ChillPersonBundle/Resources/public/vuejs/_components/AccompanyingPeriodWorkSelector/AccompanyingPeriodWorkSelectorModal.vue
#	src/Bundle/ChillPersonBundle/Resources/public/vuejs/_js/i18n.ts
#	src/Bundle/ChillPersonBundle/translations/messages.fr.yml
2025-11-06 10:16:36 +01:00
d691098a21 Merge branch 'master' into ticket-app-master
# Conflicts:
#	.junie/guidelines.md
#	src/Bundle/ChillActivityBundle/Resources/public/vuejs/Activity/components/SocialIssuesAcc.vue
#	src/Bundle/ChillCalendarBundle/Resources/public/vuejs/Calendar/App.vue
#	src/Bundle/ChillCalendarBundle/Resources/public/vuejs/MyCalendarRange/App2.vue
#	src/Bundle/ChillDocStoreBundle/Resources/public/types/generic_doc.ts
#	src/Bundle/ChillDocStoreBundle/Resources/public/vuejs/DropFileWidget/DropFileModal.vue
#	src/Bundle/ChillDocStoreBundle/Resources/public/vuejs/StoredObjectButton/HistoryButton/HistoryButtonListItem.vue
#	src/Bundle/ChillMainBundle/Resources/public/chill/js/date.ts
#	src/Bundle/ChillMainBundle/Resources/public/vuejs/DownloadExport/App.vue
#	src/Bundle/ChillMainBundle/Resources/public/vuejs/WorkflowAttachment/App.vue
#	src/Bundle/ChillMainBundle/Resources/public/vuejs/WorkflowAttachment/Component/AttachmentList.vue
#	src/Bundle/ChillMainBundle/Resources/public/vuejs/WorkflowAttachment/Component/GenericDocItemBox.vue
#	src/Bundle/ChillMainBundle/Resources/public/vuejs/WorkflowAttachment/Component/PickGenericDoc.vue
#	src/Bundle/ChillMainBundle/Resources/public/vuejs/WorkflowAttachment/Component/PickGenericDocModal.vue
#	src/Bundle/ChillMainBundle/Resources/public/vuejs/_components/EntityWorkflow/EntityWorkflowVueSubscriber.vue
#	src/Bundle/ChillMainBundle/Resources/public/vuejs/_components/Modal.vue
#	src/Bundle/ChillMainBundle/Resources/views/layout.html.twig
#	src/Bundle/ChillMainBundle/translations/messages+intl-icu.fr.yaml
#	src/Bundle/ChillPersonBundle/Resources/public/mod/DuplicateSelector/AccompanyingPeriodWorkSelector.ts
#	src/Bundle/ChillPersonBundle/Resources/public/types.ts
#	src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourseWorkEdit/App.vue
#	src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourseWorkEdit/components/FormEvaluation.vue
#	src/Bundle/ChillPersonBundle/Resources/public/vuejs/_components/AccompanyingPeriodWorkSelector/AccompanyingPeriodWorkList.vue
#	src/Bundle/ChillPersonBundle/Resources/public/vuejs/_components/AccompanyingPeriodWorkSelector/AccompanyingPeriodWorkSelectorModal.vue
#	src/Bundle/ChillPersonBundle/Resources/public/vuejs/_js/i18n.ts
#	src/Bundle/ChillPersonBundle/translations/messages.fr.yml
2025-11-06 10:16:15 +01:00
3a4c20b53d Merge branch '405-aside-activity-associated-persons' into 'master'
Resolve "Activités annexes: ajouter le nombre d'usagers concernés pour chaque activité annexe"

Closes #405

See merge request Chill-Projet/chill-bundles!895
2025-11-05 09:48:50 +00:00
b0c86e238d Resolve "Activités annexes: ajouter le nombre d'usagers concernés pour chaque activité annexe" 2025-11-05 09:48:50 +00:00
d7614aeab2 Merge branch '454-evaluation-time-spent-choices' into 'master'
Expand timeSpent choices for evaluation document and translate them to user locale or fallback 'fr'

Closes #454

See merge request Chill-Projet/chill-bundles!912
2025-11-05 09:29:51 +00:00
671ed21d59 Expand timeSpent choices for evaluation document and translate them to user locale or fallback 'fr' 2025-11-05 09:29:50 +00:00
4b9db6ceb6 Merge branch '451-activity-social-actions-list' into 'master'
Fix: display also social actions linked to parents of the selected social issue

Closes #451

See merge request Chill-Projet/chill-bundles!907
2025-11-05 08:51:47 +00:00
c79c39b562 Fix: display also social actions linked to parents of the selected social issue 2025-11-05 08:51:47 +00:00
bf768b8e99 Merge branch '404-action-list-add-comments' into 'master'
Feature: add columns for comments linked to an activity (comment, user, date)

Closes #404

See merge request Chill-Projet/chill-bundles!909
2025-11-05 08:50:16 +00:00
2df01833ad Merge branch '453-bug-csv-social-actions' into 'master'
Fix: export actions and their results in csv even when action does not have...

Closes #453

See merge request Chill-Projet/chill-bundles!908
2025-11-05 08:47:50 +00:00
ffb8183d4d Fix: export actions and their results in csv even when action does not have... 2025-11-05 08:47:49 +00:00
5d45339bf7 Merge branch 'fix/loading-wopi-bundle' into 'master'
Fix loading of wopi-bundle

See merge request Chill-Projet/chill-bundles!915
2025-11-05 08:32:55 +00:00
e87e5cbbaf Fix loading of wopi-bundle 2025-11-05 08:32:54 +00:00
fa8e92ebf5 Merge branch '425-rename-cercle-and-centre' into 'master'
Resolve "Partout, renommer "cercle" en "service" et "centre" en "territoire""

Closes #425

See merge request Chill-Projet/chill-bundles!894
2025-11-04 15:25:11 +00:00
b7a92bf656 Resolve "Partout, renommer "cercle" en "service" et "centre" en "territoire"" 2025-11-04 15:25:10 +00:00
3dbbda7b64 Merge branch '452-workflow-suivi-ux' into 'master'
Redo ux for selceting follow-up preferences for workflow

Closes #452

See merge request Chill-Projet/chill-bundles!906
2025-11-04 15:00:51 +00:00
769d76a0cc Fix the possibility to delete a workflow when it is on hold 2025-11-04 13:52:54 +01:00
722b37fbcc Set wopi-bundle dependency back to original 2025-11-04 09:28:23 +01:00
bf38ec22c9 Add missing import in FormEvaluation.vue and temporarily set wopi-bundle requirement to specific commit (until bundles is fully upgraded to sf7) 2025-10-30 11:40:20 +01:00
3f6bbbc1b3 Display a message when no results are found in PersonChooseModal and refine search state handling.
- Added a "no results" message with dynamic translation when no suggestions are available.
- Introduced `hasPreviousQuery` state and `hasNoResult` computed property for improved search state management.
- Updated styles for "no results" display and adjusted button margin in the modal.
2025-10-29 16:52:40 +01:00
31e57d7507 Display a message when no results are found in PersonChooseModal and refine search state handling.
- Added a "no results" message with dynamic translation when no suggestions are available.
- Introduced `hasPreviousQuery` state and `hasNoResult` computed property for improved search state management.
- Updated styles for "no results" display and adjusted button margin in the modal.
2025-10-29 16:47:28 +01:00
5c098a336d Add edit functionality for ThirdParty in OnTheFly.vue and refactor ThirdPartyEdit for consistency.
- Implemented dynamic component rendering in `OnTheFly.vue` for `thirdparty` type based on the `action` (`show`, `edit`, etc.).
- Added `ThirdPartyEdit` component with API integration for editing third parties.
- Introduced `thirdpartyToWriteThirdParty` function in the API for mapping `Thirdparty` to `ThirdPartyWrite` structure.
- Centralized validation handling in `ThirdPartyEdit.vue` using `useViolationList` composable and enhanced template conditions.
- Updated and extended API functions (`patchThirdparty`, etc.) and types to support third-party editing.
2025-10-29 16:29:44 +01:00
3d99c0f561 Feature: add columns for comments linked to an activity (comment, user, date) 2025-10-29 15:26:06 +01:00
e107d20bea Introduce edit functionality for PersonEdit and refactor OnTheFly components for improved modularity.
- Added support for editing a person entity in `PersonEdit.vue` with proper data initialization and API integration.
- Refactored `OnTheFly.vue` to dynamically render components based on the action (`show`, `edit`, etc.).
- Introduced `personToWritePerson` conversion logic for mapping `Person` to `PersonWrite` structure.
- Enhanced template conditions and loading states for `PersonEdit`.
- Updated API with `editPerson` function and adjusted related types for consistency.
2025-10-29 15:05:08 +01:00
491fd81f9b Fix PersonIdentifier lookup in PersonJsonDenormalizer to use Definition ID comparison.
- Updated lambda function to compare `personIdentifier`'s `Definition` ID instead of its own ID for correct matching.
2025-10-29 15:04:58 +01:00
8c2acbd166 Add support for serializing identifiers in PersonJsonNormalizer and improve PersonIdentifier entity serialization.
- Extended `PersonJsonNormalizer` to include `identifiers` field normalization.
- Added `Serializer` annotations to `PersonIdentifier` and `PersonIdentifierDefinition` for enhanced serialization support.
- Updated `PersonIdentifier` and `PersonIdentifierDefinition` to define serialization groups and discriminator maps.
2025-10-29 15:04:50 +01:00
e291c7abec Refactor ThirdPartyEdit.vue to improve validation handling and streamline input components.
- Replaced individual validation logic with `useViolationList` composable for centralization and consistency.
- Enhanced input components with floating labels, validation error feedback, and improved class binding for better UX.
- Updated API to include `WriteThirdPartyViolationMap` interface for structured validation error mapping.
- Refactored imports and adjusted spacing for better readability and adherence to coding standards.
2025-10-29 12:35:30 +01:00
1e186fab58 Document validation update guidelines for ThirdParty entity to align with associated Vue component logic.
- Added documentation to ensure updates in validations reflect in `ThirdPartyEdit.vue` and violation lists for consistency.
- Clarified the relationship between validation logic and UI component updates.
2025-10-29 12:35:30 +01:00
83a2c04537 Refactor violation handling in PersonEdit.vue by introducing useViolationList composable.
- Centralized violation handling logic with `useViolationList` for improved reusability and maintainability.
- Replaced local violation functions with composable methods in `PersonEdit.vue`.
- Streamlined UI binding for validation errors across multiple inputs.
2025-10-29 12:35:30 +01:00
2221d17930 Redo ux for selceting follow-up preferences for workflow 2025-10-29 11:17:47 +01:00
e89b33bc1a Refactor AddPersons and related components for improved state management and prop handling.
- Replaced array-based `selected` state with `Map` for better key-based selection handling.
- Simplified `PersonSuggestion.vue` and `PersonChooseModal.vue` to align with updated state structure.
- Removed debug logs and legacy code for cleaner and more maintainable codebase.
2025-10-28 15:50:40 +01:00
6b208e9962 Refactor PersonSuggestion and PersonChooseModal for streamlined state management and improved prop handling.
- Replaced `search.suggested` and `search.selected` with dedicated reactive `suggested` and `selected` states.
- Updated `PersonSuggestion.vue` to handle selection via `onUpdateValue` and removed `v-model` usage.
- Simplified `PersonChooseModal.vue` to compute `selectedAndSuggested` directly using props.
- Adjusted `types.ts` to refine `Search.results` and standardize `Suggestion` structure.
2025-10-28 14:32:12 +01:00
b0c63fab91 Refactor AddPersons and related components for consistent state management and improved handling of selected suggestions.
- Replaced `search.selected` with a dedicated `selected` state and implemented explicit methods for adding, removing, and clearing selections.
- Updated event handling and props (`addNewPersons`, `selected`, `updateSelected`, `cleanSelected`) for better separation of concerns and type safety.
- Introduced `isSelected` utility for streamlined selection checks and replaced deprecated event usages.
- Adjusted modal behaviors in `PersonChooseModal.vue` and `AddPersons.vue` for improved integration and alignment with new state logic.
2025-10-28 12:41:52 +01:00
9c2abb2dfa Merge branch 'send-notification-log-to-channel' into 'master'
Send notifications log to dedicated `notifierLogger` channel if available

See merge request Chill-Projet/chill-bundles!905
2025-10-27 15:58:48 +00:00
94744b9542 Send notifications log to dedicated notifierLogger channel if available 2025-10-27 15:58:48 +00:00
f42bb498e4 Fix deprecation notice League/csv for createFromStream and createFromPath replaced by new from() method 2025-10-27 13:21:04 +01:00
01889ac671 Upgrade to v4.6.1 2025-10-27 12:59:11 +01:00
62e5842311 Fix case where no 'reason' is picked within the PersonHavingActivityBetweenDateFilter.php 2025-10-27 12:50:34 +01:00
6d4c4d2c74 Refactor entity handling in TypeUser.vue and PickEntity.vue for improved consistency and type safety.
- Adjusted `TypeUser.vue` to correctly reference `props.item.result` and removed unused `hasParent` logic.
- Updated `PickEntity.vue` to include handling for households with new `isEntityHousehold` utility.
- Added `isEntityHousehold` function to `types.ts` for reusable type checks.
2025-10-25 01:06:29 +02:00
df6087d468 Refactor Gender and ResidentialAddress types and update associated components for improved consistency and type safety.
- Replaced `gender` string union with `Gender` type in `Person` interfaces.
- Added `ResidentialAddress` type to standardize address handling within `Person`.
- Updated `PersonRenderBox.vue` to utilize new properties and improve null safety with optional chaining.
- Corrected prop defaults and fixed typo in
2025-10-25 00:58:17 +02:00
ffac143ab9 Update address handling in third-party components and types for consistency.
- Replaced `address_id` with `id` in `ThirdPartyEdit.vue` and associated logic.
- Introduced `SetAddress` type to standardize address references in write operations.
- Updated `SetThirdParty` and related types to use `SetAddress` for better type safety.
2025-10-24 17:03:27 +02:00
f1bf6023ff Refactor third-party handling for consistency and improved data flow.
- Renamed `categories` to `category` in `Thirdparty` and related types for clarity and type safety.
- Updated `ThirdPartyRenderBox.vue` and `CreateModal.vue` to align with new type definitions.
- Enhanced `AddPersons.vue` to handle `onThirdPartyCreated` event properly and extend functionality for third-party creation.
2025-10-24 16:41:08 +02:00
71e146e4f0 fix for ThirdParty create flow.
- Added `parent` property handling in `ThirdPartyEdit.vue`, `Create.vue`, and related components for better association with parent entities.
- Updated `Thirdparty` and `ThirdPartyWrite` types to include `parent` property and ensure type safety.
- Adjusted translations and messages to reflect the new parent entity association concept.
2025-10-24 16:22:09 +02:00
4234377b7e Replace OnTheFly.js with OnTheFly.ts and introduce ThirdPartyEdit.vue for enhanced third-party entity management
- Migrated API functions in `OnTheFly.js` to `OnTheFly.ts` for improved type safety using TypeScript.
- Added `ThirdPartyEdit.vue` to streamline third-party creation and editing with a Vue component structure.
- Updated third-party-related types in `types.ts` to improve consistency and explicitly distinguish `company`, `contact`, and `child` entities.
- Enhanced `AddPersons.vue` and dependent components to support adding third-party contacts.
- Adjusted styles and removed `.btn-tpchild` for consistency in button definitions across SCSS.
2025-10-24 14:21:39 +02:00
1be82b3049 Update PersonIdentifierWorkerNormalizerTest to include presence attribute in expected normalized data
- Replaced `id` with `definition_id` in expected output for consistency.
- Ensured `presence` attribute is validated in test cases.
2025-10-21 15:29:17 +02:00
808954df42 fix implementation of PersonIdentifierEngineInterface in test 2025-10-21 15:18:50 +02:00
3f8bb6c5c0 cs fixes 2025-10-21 15:01:34 +02:00
23e1a0d36a rector fixes 2025-10-21 15:01:21 +02:00
a594d86346 fix cs and missing methods 2025-10-21 14:38:05 +02:00
870907804b Refactor PersonCreate flow to introduce PersonCreateDTO
- Replaced `Person` entity binding with `PersonCreateDTO` in `CreationPersonType` to enable better data handling.
- Added `PersonCreateDTOFactory` for creating and mapping `PersonCreateDTO` instances.
- Extracted `newAction` logic into `PersonCreateController` for clearer separation of responsibilities.
- Updated `PersonIdentifiersDataMapper` and `PersonIdentifierWorker` to support default identifier values.
- Adjusted related services, configurations, and templates accordingly.
2025-10-21 14:24:43 +02:00
e9e6c05e3d Refactor PersonEdit flow to introduce PersonEditDTO
- Replaced `Person` entity binding with `PersonEditDTO` in `PersonType` to decouple data transfer and entity manipulation.
- Added `PersonEditDTOFactory` for creating and mapping `PersonEditDTO` instances.
- Simplified `PersonAltNameDataMapper` and `PersonIdentifiersDataMapper`.
- Updated `PersonEditController` to use `PersonEditDTO` for better separation of concerns.
- Adjusted related tests, configurations, and templates accordingly.
2025-10-21 13:22:04 +02:00
532f2dd842 Add message handler definition on PostTicketUPdateMessageHandler 2025-10-17 00:09:51 +02:00
d14d4d4d8f Merge branch 'ticket-app-master' into ticket/64-identifiants-person 2025-10-16 14:34:34 +02:00
a22cbe0239 Merge branch 'ticket/add-events-on-change' into 'ticket-app-master'
Add Events when a ticket is updated, and trigger asynchronously post update events

See merge request Chill-Projet/chill-bundles!902
2025-10-16 12:34:12 +00:00
98902bdeb8 Add Events when a ticket is updated, and trigger asynchronously post update events 2025-10-16 12:34:12 +00:00
592a0f3698 Remove FindCallerController 2025-10-16 12:36:44 +02:00
d469eb19ad Merge branch 'ticket-app-master' into ticket/64-identifiants-person 2025-10-16 10:48:59 +02:00
4765d4fe28 Merge branch '1677-create-ticket-list-for-user-file' into 'ticket-app-master'
Créer la page et la liste des tickets dans le dossier d'usager

See merge request Chill-Projet/chill-bundles!891
2025-10-15 11:06:04 +00:00
Boris Waaub
30bcb85549 Créer la page et la liste des tickets dans le dossier d'usager 2025-10-15 11:06:02 +00:00
8ad6f397a8 Release v4.6.0 2025-10-15 12:40:22 +02:00
d713704633 Merge branch '394-page-workflow-subscribed-only-finalize' into 'master'
Only show active workflow on the page "my tracked workflows"

Closes #394

See merge request Chill-Projet/chill-bundles!901
2025-10-15 10:13:38 +00:00
b1fa9242a0 Only show active workflow on the page "my tracked workflows" 2025-10-15 10:13:38 +00:00
6ac554f93a Merge branch '448-fix-daily-cronjob-digest' into 'master'
Fix sending of daily notification, when the previous last_execution parameter is not a valid last_execution date format

Closes #448

See merge request Chill-Projet/chill-bundles!900
2025-10-15 10:12:10 +00:00
372d8e5825 Fix sending of daily notification, when the previous last_execution parameter is not a valid last_execution date format 2025-10-15 10:12:10 +00:00
10f05e5559 Merge branch 'fix/fix-deletion-attachments' into 'master'
Take permissions into account for deletion of WorkflowAttachment (+ type safety)

See merge request Chill-Projet/chill-bundles!899
2025-10-13 14:12:06 +00:00
ddb2a65419 Take permissions into account for deletion of WorkflowAttachment (+ type safety) 2025-10-13 14:12:06 +00:00
8d40a8089f Merge branch '446-fix-duplicated-filename-stored-object-version' into 'master'
Enforce filename uniqueness in `StoredObjectVersion` with partial unique index...

Closes #446

See merge request Chill-Projet/chill-bundles!898
2025-10-13 10:47:47 +00:00
e1bf4a24d2 Enforce filename uniqueness in StoredObjectVersion with partial unique index... 2025-10-13 10:47:47 +00:00
208a378185 Merge branch 'fix_mado_to_validate' into 'master'
Fix loading of classlists in SocialIssuesAcc.vue

See merge request Chill-Projet/chill-bundles!833
2025-10-08 11:44:49 +00:00
9089c8959b remove ux/translator package in error 2025-10-08 11:35:47 +00:00
1b9b581c31 Hide top_banner by default 2025-10-08 13:10:26 +02:00
aa1abe4c88 Merge branch '423-environment-banner' into 'master'
Resolve "Ajouter un bandeau qui permet de distinguer les différents environnements"

Closes #423

See merge request Chill-Projet/chill-bundles!896
2025-10-08 11:05:22 +00:00
d82c9cc9a7 Resolve "Ajouter un bandeau qui permet de distinguer les différents environnements" 2025-10-08 11:05:22 +00:00
a7e3b1c5d2 Use an object (instead of string) for dynamic classList in SocialIssuesAcc.vue component 2025-10-08 11:37:02 +02:00
84cf11933d Fix loading of classlists in SocialIssuesAcc.vue 2025-10-08 11:21:09 +02:00
189a9337b4 Search person by phonenumber: allow searching though identifier and phonenumber 2025-10-07 18:28:59 +02:00
c030232a73 Temporarily desactivate the search by phonenumber 2025-10-07 11:53:24 +02:00
d4f9726f90 Fix ExtractPhonenumberFromPattern to retain original subject in SearchExtractionResult
- Updated logic in `ExtractPhonenumberFromPattern` to ensure the original subject is preserved in the resulting extraction.
- Adjusted test cases in `ExtractPhonenumberFromPatternTest` to reflect the updated behavior.
2025-10-07 11:40:14 +02:00
8740025dbd Handle case where form is null in PersonIdentifiersDataMapper
- Added a null check for forms in `PersonIdentifiersDataMapper` to prevent potential errors: a form is not present at all steps (on creation / on edit)
- Skips processing if the form is not found.
2025-10-07 11:40:01 +02:00
6d8ef035ea Merge branch 'ticket-app-master' into ticket/64-identifiants-person 2025-10-07 11:28:04 +02:00
60eab628ee Clarify documentation in PersonIdentifierManagerInterface and fix formatting in SQL query
- Updated PHPDoc in `getWorkers` method to explicitly state that only active definitions are returned.
- Standardized number formatting in SQL query for better readability and consistency.
2025-10-07 11:24:17 +02:00
1fd559b722 Refactor validation of PersonIdentifier 2025-10-07 09:59:52 +02:00
b526e802d7 Add validation logic and tests for StringIdentifier
- Implemented `validate` method in `StringIdentifier` to enforce `only_numbers` and `fixed_length` constraints.
- Created `StringIdentifierValidationTest` to cover validation rules.
2025-10-06 15:16:20 +02:00
60937152c3 Add validate method to PersonIdentifierEngineInterface and related classes
- Introduced `validate` method in `PersonIdentifierEngineInterface`.
- Added `ValidIdentifierConstraint` to `PersonIdentifier` entity.
- Updated `PersonIdentifierWorker` to implement the new `validate` method.
2025-10-06 15:16:12 +02:00
bc2fbee5c6 Fix: notification edit template
form field addressesEmail removed
2025-10-06 12:14:00 +02:00
ebd10ca522 Merge branch 'fix/history-of-versions-stored-object' into 'master'
Fix the rendering of storedObject's history

See merge request Chill-Projet/chill-bundles!893
2025-10-03 20:47:06 +00:00
d3a31be412 Fix re-ordering of StoredObjectVersion in the list of versions
As some intermediate versions are remove, this may lead to situation where the indexes are not continous. In that case, the array is not a list, and is rendered as an array with numeric indexes, instead of a list of elements. The HistoryListItem component fails to render.

- Ensured proper handling of removed versions by using `array_values` to reindex items.
- Added test case to validate the result after removing a version.
- Asserted the results are a proper list in the API response.
2025-10-03 22:40:59 +02:00
d159a82f88 Update import paths in HistoryButtonListItem.vue to use aliases
- Changed types import to use `ChillDocStoreAssets/types`.
- Updated `ISOToDatetime` import to use `ChillMainAssets/chill/js/date`.
2025-10-03 22:20:51 +02:00
c2d9c73fd4 Release v4.5.1 2025-10-03 14:11:41 +02:00
0d6d15fcf7 Merge branch 'fix/conversion-exception' into 'master'
Introduce `ConversionWithSameMimeTypeException` for improved error handling in document conversion.

See merge request Chill-Projet/chill-bundles!892
2025-10-03 12:10:24 +00:00
f9ad96c78b Introduce ConversionWithSameMimeTypeException for improved error handling in document conversion.
- Added the `ConversionWithSameMimeTypeException` to handle cases where document conversion is requested for the same MIME type.
- Updated `StoredObjectToPdfConverter` to throw the new exception when encountering such cases.
- Enhanced error logging in `PostSendExternalMessageHandler` to capture these specific conversion errors.
2025-10-03 13:57:06 +02:00
fcc9529a20 Add missing javascript dependency in package.json 2025-10-03 13:56:20 +02:00
955cb817c4 Release v4.5.0 2025-10-03 12:09:17 +02:00
6d2e78ce55 Fix parameter handling in MenuComposer and MenuTwig
- Corrected `routeParameters` assignment in `MenuComposer` for proper parameter usage.
- Adjusted `menus` and `routes` assignment order in `MenuTwig` for consistent handling.
2025-10-03 12:00:51 +02:00
823f9546b9 Merge branch '421-signature-fixes' into 'master'
Signature fixes

Closes #421

See merge request Chill-Projet/chill-bundles!887
2025-10-03 09:49:34 +00:00
be39fa16e7 Signature fixes 2025-10-03 09:49:33 +00:00
e566f60a4a Apply minor UI update to PersonChooseModal.vue create button
- Added `btn btn-submit` CSS classes to the create button for improved styling.
- Removed outdated and commented-out `on-the-fly` implementation.
2025-10-01 10:51:58 +02:00
74c9eb5585 Rector corrections 2025-09-30 16:23:27 +02:00
c06531cddb Merge branch 'ticket-app-master' into ticket/64-identifiants-person 2025-09-30 16:01:33 +02:00
61ca700bbe Merge branch '1682-1683-1684-fix-bug-mr-884' into 'ticket-app-master'
FIX des bugs du merge request 884

See merge request Chill-Projet/chill-bundles!885
2025-09-30 13:49:04 +00:00
Boris Waaub
b43aeebc3c FIX des bugs du merge request 884 2025-09-30 13:49:04 +00:00
f93c7e014f Add test for MyInvitationsController.php 2025-09-30 15:45:26 +02:00
e6a799abc4 Add translation for invitation list page title 2025-09-30 15:30:38 +02:00
68a0ef7115 Reorganize templates to allow re-use of _list.html.twig within listByUser.html.twig template 2025-09-30 15:30:20 +02:00
1675c56f3d Fix order of paginator parameters passed to findBy method 2025-09-30 15:29:41 +02:00
056e2dcc5f Merge branch 'ticket/WP1617-motifs-hierarchiques' into 'ticket-app-master'
Support for parent/children motives

See merge request Chill-Projet/chill-bundles!886
2025-09-30 13:12:06 +00:00
e57d1ac696 Support for parent/children motives 2025-09-30 13:12:06 +00:00
675e8450fc WIP: switch from ACLAware to normal repository usage 2025-09-30 14:34:47 +02:00
4ffd7034d0 feat: add invitation list
- Introduced `MyInvitationsController` for managing user invitations
- Added `InviteACLAwareRepository` and its interface for handling invite data operations
- Created views for listing and displaying user-specific invitations
- Updated user menu to include "My invitations list" option
2025-09-30 14:34:47 +02:00
4a1da25fee Merge branch 'ticket-app-master' into ticket/64-identifiants-person 2025-09-30 10:08:56 +02:00
0eff1d2e79 Merge branch 'ticket/improve-local-menu-builder' into 'ticket-app-master'
Refactor `MenuComposer` to improve type safety and simplify local menu builder integration

See merge request Chill-Projet/chill-bundles!890
2025-09-29 15:03:05 +00:00
3928b2cc7a Refactor MenuComposer to improve type safety and simplify local menu builder integration 2025-09-29 15:03:05 +00:00
02783e5391 Merge branch 'ticket-app-master' into ticket/64-identifiants-person 2025-09-29 13:21:06 +02:00
4f51ef81ad Add resources and examples for chill:main:ticket_motives_import command
- Added a `README.md` file in `resources/ticket_motives_import/` to explain the command's usage.
- Included a sample `motives.yaml` file with predefined ticket motives for importing.
2025-09-29 13:05:42 +02:00
4637dc692c Add OverrideTranslationCommand for generating customized translation catalogues
- Introduced a Symfony console command `chill:main:override_translation` to apply YAML-defined translation overrides.
- Added an example configuration file in `resources/translation_override/` to illustrate usage.
- Updated service definitions to register the new command.
2025-09-29 13:05:32 +02:00
be3b9f0f56 Fix issue in PersonIdentifierDataMapper: find the PersonIdentifier against his definition 2025-09-26 15:03:02 +02:00
ee006f55d6 Add unique constraint for definition_id and person_id in PersonIdentifier
- Update entity to include the new database-level unique constraint.
- Add migration script to apply the unique constraint and handle rollback.
2025-09-26 14:44:31 +02:00
13b1c45271 Simplify and modernize entity components and translations for better performance and consistency
- Replace fragmented name rendering with unified `person.text` in Vue components.
- Migrate `GenderIconRenderBox` to use Bootstrap icons and TypeScript.
- Introduce `GenderTranslation` type and helper for gender rendering.
- Refactor `PersonRenderBox` to streamline rendering logic and improve maintainability. Migrate to typescript
- Update French translations for consistency with new gender rendering.
2025-09-26 14:25:38 +02:00
ad2b6d63ac Handle identifier uniqueness validation for same Person in UniqueIdentifierConstraintValidator
- Add logic to skip validation errors for duplicate identifiers belonging to the same Person.
- Update test case to verify no violation is raised for such duplicates.
- Refactor repository query logic to support the new validation scenario.
2025-09-26 13:55:40 +02:00
bfbde078b7 Add personId serialization to PersonJsonNormalizer
- Inject `PersonIdRenderingInterface` into `PersonJsonNormalizer` for generating `personId`.
- Update `PersonJsonNormalizer` to include `personId` in serialized output.
- Extend TypeScript definitions to support `personId` property.
- Enhance unit tests to cover `personId` serialization.
2025-09-25 15:00:11 +02:00
d42a1296c4 Add integration and unit tests for PersonJsonNormalizer to verify normalization behavior
- Introduce `PersonJsonNormalizerIntegrationTest` to test database-driven normalization scenarios.
- Expand `PersonJsonNormalizerTest` with cases covering minimal group normalization and extended keys.
- Refactor test setup to use mock objects and improve coverage of normalization logic.
2025-09-25 14:51:39 +02:00
4b7e3c1601 Restrict deletion of identifier_definition to prevent errors and ensure data integrity
- Updated foreign key constraint on `chill_person_identifier.definition_id` to use `ON DELETE RESTRICT` instead of `ON DELETE CASCADE`.
- Adjusted migration script to handle both the upgrade and downgrade paths for the new restriction.
2025-09-24 12:40:37 +02:00
6ea9af588b Replace value with canonical in PersonIdentifier unique constraint, repository logic, and tests
- Update unique constraint on `PersonIdentifier` to use `canonical` instead of `value`.
- Refactor repository method `findByDefinitionAndValue` to `findByDefinitionAndCanonical`, updating logic accordingly.
- Adjust validation logic in `UniqueIdentifierConstraintValidator` to align with the new canonical-based approach.
- Modify related integration and unit tests to support the changes.
- Inject `PersonIdentifierManagerInterface` into the repository to handle canonical value generation.
2025-09-24 12:40:16 +02:00
0fd76d3fa8 Add PersonIdentifierManagerInterface to PersonACLAwareRepository and enhance search logic for identifiers
- Inject `PersonIdentifierManagerInterface` into `PersonACLAwareRepository` for improved identifier handling.
- Update search queries to include logic for filtering and matching `PersonIdentifier` values.
- Modify test cases to support the new dependency and ensure proper coverage.
2025-09-24 00:01:28 +02:00
34af53130b Refactor and enhance ValidationException handling across types and components
- Simplify and extend type definitions in `types.ts` for dynamic and normalized keys.
- Update `ValidationExceptionInterface` to include new methods for filtering violations.
- Refactor `apiMethods.ts` to leverage updated exception types and key parsing.
- Adjust `WritePersonViolationMap` for stricter type definitions.
- Enhance `PersonEdit.vue` to use refined violation methods, improving validation error handling.
2025-09-23 21:26:12 +02:00
a1fd395868 Add unique constraint for PersonIdentifier, implement UniqueIdentifierConstraint with validation logic, and include supporting tests
- Introduce `UniqueIdentifierConstraint` and its validator for ensuring identifier uniqueness.
- Add a database-level unique constraint on `PersonIdentifier` (`definition_id`, `value`).
- Implement repository method to fetch identifiers by definition and value.
- Include integration and unit tests for validation and repository functionality.
- Update `Person` entity with `Assert\Valid` annotation for `identifiers`.
2025-09-23 12:36:30 +02:00
b8a7cbb321 Add identifiers field in CreationPersonType and handle on_create logic in PersonIdentifiersType
- Introduce `identifiers` field to `CreationPersonType` with a dedicated form type.
- Update `PersonIdentifiersType` to support `step` option (`on_create` and `on_edit`).
- Skip certain identifiers in `on_create` step based on presence configuration.
- Adjust Twig template to display `identifiers` conditionally.
2025-09-22 14:03:59 +02:00
6124eb9e34 Fix isEmpty logic in StringIdentifier: Correct boolean comparison for trimmed content. 2025-09-22 14:03:58 +02:00
a5b06de92a Refactor validation handling in PersonEdit.vue: Replace hasValidationError and validationError with hasViolation and violationTitles. Introduce hasViolationWithParameter and violationTitlesWithParameter for enhanced field validation. Update RequiredIdentifierConstraint messages, improve API error mapping, and refine ValidationException structure with violationsList. Add tests and translations for identifier validation. 2025-09-22 14:03:58 +02:00
52404956d2 Trim PersonIdentifier values during denormalization, implement RequiredIdentifierConstraint and validator, and add tests for empty value validation. 2025-09-22 14:03:57 +02:00
4207efd6bf Remove empty PersonIdentifier values during denormalization and add isEmpty logic to PersonIdentifierWorker. Include tests for empty value handling. 2025-09-22 14:03:57 +02:00
840fde4ad4 Filter PersonIdentifierWorker by presence during initialization and update type definitions. Add presence field to PersonIdentifierWorkerNormalizer. 2025-09-22 14:03:56 +02:00
3611ea2518 Refactor PersonIdentifierDefinition: Replace fully qualified \Doctrine\DBAL\Types\Types references with simplified Types aliases. 2025-09-22 14:03:55 +02:00
bbd4292cb9 Enhance PersonEdit form: Add birthdate input with validation, improve field error handling using hasValidationError, refactor birthDate to respect timezone offsets, and update translations for better user feedback. Replace DateTimeCreate with DateTimeWrite across types and components. 2025-09-22 14:03:55 +02:00
54f8c92240 Update DateNormalizer: Add return type hints for denormalize and normalize methods 2025-09-22 14:03:54 +02:00
5330befc8f eslint fixes 2025-09-22 14:03:54 +02:00
c19206be0c Enhance validation in PersonEdit: Introduce hasValidationError and validationError helpers for form inputs. Improve error feedback for fields such as firstName, lastName, gender, and others. Refactor postPerson to handle validation exceptions and map errors to specific fields. Update related methods, styles, and API error type definitions. 2025-09-22 14:03:53 +02:00
5ff374d2fa Refactor validation handling in apiMethods: Introduce strongly-typed ValidationException and ViolationFromMap. Replace generic validation logic with stricter, type-safe mappings. Update makeFetch to handle Symfony validation problems with enhanced error taxonomy. 2025-09-22 14:03:53 +02:00
4a73aaae94 Replace PhonenumberConstraint with MisdPhoneNumberConstraint across entities, deprecate outdated validation logic, and remove unused methods for improved phone number validation. 2025-09-22 14:03:53 +02:00
ff2c567d05 Update default center type fallback in PersonEdit.vue to "center" for consistency. 2025-09-22 14:03:52 +02:00
a734e84f28 Remove unused Person.vue import from types.ts for cleanup and improved code maintainability. 2025-09-22 14:03:51 +02:00
4367ed086e Enhance person creation workflow: Add onPersonCreated event handling in Create, CreateModal, and AddPersons. Update type definitions and integrate event emission for streamlined person management. 2025-09-22 14:03:51 +02:00
3227bfcd3a Remove serializer.yaml configuration, update PersonJsonNormalizer and PersonJsonDenormalizer for improved logic handling, adjust type hints in closures, and rename id to definition_id in PersonIdentifierWorkerNormalizer. 2025-09-22 14:03:50 +02:00
8d29fb260a Add validation and support for identifiers in PersonJsonDenormalizer, enhance altNames handling, and update tests for improved coverage. Adjust PersonIdentifierManager to handle identifier definitions by ID. 2025-09-22 14:03:50 +02:00
bda0743c63 Update test run guidelines to use the symfony command for executing PHPUnit tests 2025-09-22 14:03:49 +02:00
d9b730627f Introduce PersonJsonReadDenormalizer and PersonJsonDenormalizer to separate responsibilities for handling person denormalization. Add corresponding test classes for improved coverage. Refactor PersonJsonNormalizer to remove denormalization logic. 2025-09-22 14:03:49 +02:00
27548ad654 Add support for person identifiers workflow: update PersonEdit component, API methods, and modals for identifier handling during person creation. Adjust related types for improved consistency. 2025-09-22 14:03:48 +02:00
bec7297039 Add an api list of available person identifiers 2025-09-22 14:03:48 +02:00
852523e644 Refactor person management workflow: Introduce SetGender, SetCivility, and SetCenter lightweight interfaces. Replace PersonState with PersonEdit for streamlined type usage. Enhance queryItems logic and API methods for better consistency. Adjust AddPersons modal to handle query input. 2025-09-22 14:03:47 +02:00
c05d0aad47 Refactor person creation workflow: Introduce PersonEdit component and integrate it across Create, Person.vue, and modals for improved modularity. Update type definitions and API methods for consistency. 2025-09-22 14:03:47 +02:00
1c0ed9abc8 Enhance entity creation: Add CreateModal and integrate with AddPersons workflow. 2025-09-22 14:03:42 +02:00
9aed5cc216 Fix type hinting in PickEntity.vue for addNewEntity function 2025-09-22 14:03:25 +02:00
e4fe5bff68 Allow creating new entities directly from AddPersons modal 2025-09-22 14:03:25 +02:00
4c73c4d9d0 Refactor AddPersons modal into a separate PersonChooseModal component for improved modularity and reusability. 2025-09-22 14:03:24 +02:00
38935edb93 Merge branch '71-fix-bug-add-urgent-on-init-modal-add-config-homepage' into 'ticket-app-master'
Correction de bugs, ajout champs urgents dans la modal d'initialisation du ticket et ajout d'un configuration pour l'affichage des tabs dans la homepage

See merge request Chill-Projet/chill-bundles!884
2025-09-22 09:23:30 +00:00
Boris Waaub
e1ef65d4ca Correction de bugs, ajout champs urgents dans la modal d'initialisation du ticket et ajout d'un configuration pour l'affichage des tabs dans la homepage 2025-09-22 09:23:30 +00:00
c8bb7575e7 Merge branch '426-increase_nb_chars_to_14_chill_password' into 'master'
#426 Increased the number of required characters when setting a new password in Chill

Closes #426

See merge request Chill-Projet/chill-bundles!883
2025-09-19 07:03:51 +00:00
juminet
80a3734171 #426 Increased the number of required characters when setting a new password in Chill 2025-09-19 07:03:51 +00:00
ec9d0be70b Merge branch '71-task-feature-and-bug-by-status-for-boris' into 'ticket-app-master'
Misc: homepage widget with tickets, and improvements in ticket list

See merge request Chill-Projet/chill-bundles!879
2025-09-16 11:16:57 +00:00
Boris Waaub
0ba2cbc1e8 Misc: homepage widget with tickets, and improvements in ticket list 2025-09-16 11:16:57 +00:00
e87429933a Merge branch 'ticket/filter-ticket-by-id' into 'ticket-app-master'
Add ticket filtering "byTicketId"

See merge request Chill-Projet/chill-bundles!882
2025-09-15 09:17:23 +00:00
8e2e676e3d Add ticket filtering "byTicketId" 2025-09-15 11:11:40 +02:00
ab98f3a102 Release v4.4.2 2025-09-12 12:47:06 +02:00
7516e68d77 Merge branch 'fix/docgen-after-accp-work-refacto' into 'master'
Fix document generation and workflow generation do not work on accompanying period work documents

See merge request Chill-Projet/chill-bundles!880
2025-09-12 10:42:34 +00:00
7b60b7a8af Fix document generation and workflow generation do not work on accompanying period work documents 2025-09-12 10:42:34 +00:00
d984dec7db Release v4.4.1 2025-09-11 16:26:51 +02:00
46a4dedab8 Merge branch 'missing_commit_duplicate_evaluation' into 'master'
Fix translations and close button modal for duplicate evaluation document

See merge request Chill-Projet/chill-bundles!878
2025-09-11 14:21:05 +00:00
db98519e65 Fix translations and close button modal for duplicate evaluation document 2025-09-11 14:21:05 +00:00
c39637180a Release v4.4.0 2025-09-11 13:04:50 +02:00
15f9409bc8 Merge branch '369-duplicate-evaluation-document' into 'master'
Resolve "Dupliquer une document d'une évaluation vers une autre" + "Déplacer un document vers une autre évaluation"

Closes #369

See merge request Chill-Projet/chill-bundles!813
2025-09-11 11:01:16 +00:00
5b90d23367 Resolve "Dupliquer une document d'une évaluation vers une autre" + "Déplacer un document vers une autre évaluation" 2025-09-11 11:01:16 +00:00
c48625d1cd Merge branch 'bug/1607-the-user-preferences-for-notification-in-profile-are-not-shown-correctly' into 'master'
Resolve "user notification preferences are not displayed correctly"

See merge request Chill-Projet/chill-bundles!877
2025-09-10 16:28:45 +00:00
1195b54a68 Resolve "user notification preferences are not displayed correctly" 2025-09-10 16:28:45 +00:00
2a280b814f Refactor view templates: relocate 'merge' action block and standardize 'duplicate link' block handling 2025-09-09 17:36:46 +02:00
e12ad563a3 Merge branch '1604-by-creator-and-by-user-assign-selector-for-ticket-list' into 'ticket-app-master'
[Frontend] Ajouter les sélecteur "par créateur", et "par utilisateur assigné"

See merge request Chill-Projet/chill-bundles!876
2025-09-09 08:24:08 +00:00
Boris Waaub
711aa8db9b [Frontend] Ajouter les sélecteur "par créateur", et "par utilisateur assigné" 2025-09-09 08:24:08 +00:00
e78d44953f Merge branch 'ticket/improve-ticket-list' into 'ticket-app-master'
Fix bugs in api endpoint to filter tickets, and add parameters byAddresseeGroup and byCreator

See merge request Chill-Projet/chill-bundles!875
2025-09-08 14:18:02 +00:00
18f67801c7 Fix bugs in api endpoint to filter tickets, and add parameters byAddresseeGroup and byCreator 2025-09-08 14:18:02 +00:00
c815e6bc69 Merge branch 'master' into ticket-app-master 2025-09-08 16:13:02 +02:00
230c758255 Update bundles to v4.3.0 2025-09-08 16:05:09 +02:00
eafda987ae Merge branch '412-absence-enddate' into 'master'
Resolve "Absence user: add end date"

Closes #412

See merge request Chill-Projet/chill-bundles!865
2025-09-08 13:47:14 +00:00
7db8a371fc Resolve "Absence user: add end date" 2025-09-08 13:47:14 +00:00
0d0649dd31 Change route URL to avoid clash with person duplicate controller method 2025-09-08 14:51:54 +02:00
807f2711fe Merge branch 'fix-and-change-from-board-78' into 'ticket-app-master'
Améliorations liées au board 78

See merge request Chill-Projet/chill-bundles!873
2025-09-08 12:19:49 +00:00
Boris Waaub
cd594cd580 Améliorations liées au board 78 2025-09-08 12:19:49 +00:00
ac12b8cdcf Merge branch 'add-permission-list-command' into 'master'
Add `RoleDumper` and `DumpListPermissionsCommand` to generate a markdown list of permissions

See merge request Chill-Projet/chill-bundles!874
2025-09-05 16:55:45 +00:00
9c1611d052 Add RoleDumper and DumpListPermissionsCommand to generate a markdown list of permissions 2025-09-05 16:55:45 +00:00
fb6b26bfb5 fix type hinting 2025-09-05 18:37:36 +02:00
c5cedb8bd6 fix cs 2025-09-05 18:34:37 +02:00
2665e43a61 Merge branch 'master' into ticket-app-master
# Conflicts:
#	.eslint-baseline.json
#	src/Bundle/ChillMainBundle/Entity/User.php
#	src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress.vue
#	src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressMore.vue
#	src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressSelection.vue
#	src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue
#	src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CountrySelection.vue
#	src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/EditPane.vue
#	src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/ShowPane.vue
#	src/Bundle/ChillThirdPartyBundle/translations/messages.fr.yml
2025-09-05 18:32:01 +02:00
90e3043c3d Junie guidelines: fix grammar and typos in development guidelines 2025-09-04 17:26:55 +02:00
af13bf9088 Update chill bundles to v4.2.1 2025-09-03 21:12:21 +02:00
4aa65d69c7 Merge branch 'master' of gitlab.com:Chill-Projet/chill-bundles 2025-09-03 21:11:06 +02:00
9e33aec594 Handle different export types in ExportConfigNormalizer and allow null/array checks for dataFormatter in ExportController 2025-09-03 21:10:58 +02:00
f88bc7e9f0 Merge branch 'improve-local-storage' into 'master'
Improve error handling when saving objects to local disk

See merge request Chill-Projet/chill-bundles!872
2025-09-02 19:59:26 +00:00
8e78c41549 Improve error handling when saving objects to local disk by using dumpFile with detailed exception logging. 2025-09-02 21:53:40 +02:00
6e36771349 fix changelog 2025-09-02 17:52:20 +02:00
7a82cae155 Release v4.2.0 2025-09-02 17:13:28 +02:00
dfab223391 Merge branch 'master' of gitlab.com:Chill-Projet/chill-bundles 2025-09-02 16:14:13 +02:00
539752485c Allow null values for alias and dataFormatter in buildExportDataForNormalization method 2025-09-02 16:13:48 +02:00
d204df0316 Merge branch '422-password-recover-layout' into 'master'
Resolve "Fix layout of password recover pages"

Closes #422

See merge request Chill-Projet/chill-bundles!869
2025-09-02 08:29:27 +00:00
juminet
82c02f442b Resolve "Fix layout of password recover pages" 2025-09-02 08:29:26 +00:00
25561cdf63 Add an importer for motives 2025-09-02 10:16:54 +02:00
10b73e06e1 Merge branch 'enhance-multiple-tasks-from-board-78' into 'ticket-app-master'
Améliorations du dernier MR multiple-tasks-from-board-78

See merge request Chill-Projet/chill-bundles!870
2025-09-01 13:35:15 +00:00
Boris Waaub
e7c04e34a9 Améliorations du dernier MR multiple-tasks-from-board-78 2025-09-01 13:35:15 +00:00
f32a9dc7bc Merge branch '64-identifiant-personne' into 'master'
Add external identifiers for person, editable in edit form, with minimal features associated

See merge request Chill-Projet/chill-bundles!871
2025-09-01 08:05:11 +00:00
ea06a96f91 Add external identifiers for person, editable in edit form, with minimal features associated 2025-09-01 08:05:11 +00:00
76433e2512 Fix incorrect parameter name in event details link 2025-08-28 13:49:45 +02:00
1fa464b87a Fix typo in 'uncheckAll' script for centers selection 2025-08-28 13:32:43 +02:00
3b75f43e80 Update chill bundles to v4.1.0 2025-08-26 15:43:21 +02:00
a40eb95c43 Add changie for new event bundle features 2025-08-26 15:41:58 +02:00
8429c6e693 Merge branch 'improvements_event_module' into 'master'
Improvements event module

See merge request Chill-Projet/chill-bundles!825
2025-08-26 13:35:36 +00:00
6db7f6827c Update eslint baseline 2025-08-26 15:24:44 +02:00
3c60c57985 Adapt export list events to new export features 2025-08-26 15:18:08 +02:00
10aa36aae0 Set required to false for entitychoice filter field 2025-08-26 15:18:08 +02:00
eed9913a49 Allow select2 option for entityChoice filterOrderHelper 2025-08-26 15:18:08 +02:00
1a847d36a0 Fixes in template parameters + remove budget elements when removing event 2025-08-26 15:18:08 +02:00
d916962d9b Phpstan fix import Serializer instead of SerializerInterface 2025-08-26 15:18:08 +02:00
1092fc64ae Fix voter for the create event permission 2025-08-26 15:18:08 +02:00
4e99b6ecbd Allow filtering of event list by center and responsable 2025-08-26 15:18:08 +02:00
60d107b541 Create internal and external animators 2025-08-26 15:18:08 +02:00
4c3befe489 WIP change animator field to animator intern and animator extern 2025-08-26 15:18:08 +02:00
e176319775 WIP change animator field 2025-08-26 15:18:08 +02:00
5d810b4230 Add center to the show page of an event 2025-08-26 15:18:08 +02:00
52b8eea069 Fix passing of id parameter to route 2025-08-26 15:18:08 +02:00
4bebeaeaaa Fix wrong import of serializer 2025-08-26 15:18:08 +02:00
3969e12633 Fix cs and phpstan issues 2025-08-26 15:18:08 +02:00
d60312d4a2 Move styling to scss file and fix styling of participation list 2025-08-26 15:18:08 +02:00
d2454ae134 use key for column names in export 2025-08-26 15:18:08 +02:00
17c2cb1fdc Add missing translations 2025-08-26 15:18:08 +02:00
94d7a2a0bb Reverse deleting of organizationCost property on event entity to keep db data 2025-08-26 15:18:08 +02:00
aef1efc6cd Add missing translations and add eventThemeType missing config 2025-08-26 15:18:08 +02:00
dd0c662c9e Add missing description to migration 2025-08-26 15:18:08 +02:00
6b1696b62e phpstan, rector, phpcs fixes 2025-08-26 15:18:08 +02:00
c4b760c452 eslint fixes and new baseline 2025-08-26 15:18:08 +02:00
69fe2a8256 Add translations 2025-08-26 15:18:08 +02:00
8c98242896 Split budget elements in charges and resources column 2025-08-26 15:18:08 +02:00
7eecfd3882 Add new columns to export list event 2025-08-26 15:18:08 +02:00
6713658569 Add animators property to event 2025-08-26 15:18:08 +02:00
342b786106 Create export list of events 2025-08-26 15:18:08 +02:00
80a7437769 Update twig templates for display budget elements 2025-08-26 15:18:08 +02:00
8a38ce1a5c Add event budget element entity, forms and event property 2025-08-26 15:18:08 +02:00
5d94bf0556 Create an event budget kind admin entity 2025-08-26 15:18:08 +02:00
bb71e084b8 Create address on the fly field in event form 2025-08-26 15:18:08 +02:00
27f0bf28e9 Adjust templates and translations 2025-08-26 15:18:08 +02:00
383f588795 Add field in event for themes 2025-08-26 15:18:08 +02:00
e7a1ff1ac8 Add event theme property to event entity 2025-08-26 15:18:08 +02:00
adc9c47d0a Add event theme color for badge 2025-08-26 15:18:08 +02:00
e594b65d1e Create event theme admin entity 2025-08-26 15:18:08 +02:00
c0826bc65c Merge branch '400-add-filter-mes-actions' into 'master'
Add a filter to list for acpw where current user intervenes

Closes #400

See merge request Chill-Projet/chill-bundles!859
2025-08-18 16:26:20 +00:00
904f4e5ed9 Add a filter to list for acpw where current user intervenes 2025-08-18 16:26:20 +00:00
481f82b4c7 Merge branch '355-fusion-thirdparty' into 'master'
Resolve "Fusion des tiers"

Closes #355

See merge request Chill-Projet/chill-bundles!795
2025-08-18 15:34:48 +00:00
f5668592ca Resolve "Fusion des tiers" 2025-08-18 15:34:48 +00:00
164beee7c6 Merge branch 'multiple-tasks-from-board-78' into 'ticket-app-master'
Merge request contenant différentes tâches provenant du board 78

See merge request Chill-Projet/chill-bundles!864
2025-08-18 15:32:00 +00:00
Boris Waaub
4d96eb9457 Merge request contenant différentes tâches provenant du board 78 2025-08-18 15:31:59 +00:00
aa085a1562 **fix:** add min and step attributes to integer field in DateIntervalType 2025-08-06 17:35:45 +02:00
2754251fdc Merge branch 'master' of https://gitlab.com/Chill-Projet/chill-bundles 2025-08-06 14:20:29 +02:00
2f6cef4238 - **fix:** move closing motive up to be coherent with display elsewhere 2025-08-06 14:20:09 +02:00
2309636eae - **fix:** adjust display logic for accompanying period dates, include closing date if period is closed. 2025-08-06 13:47:29 +02:00
56ec8fb516 Remove 'to_validate' as default for task filter 2025-08-06 09:05:39 +02:00
fe6e6e54c1 Show filters on list pages unfolded by default 2025-07-22 15:50:49 +02:00
2a09594b4a UI improvement: limit display of particapations in event list page 2025-07-22 13:26:44 +02:00
7c798e1f63 Merge branch '387-notification-user-group' into 'master'
Resolve "Notification: envoi à des groupes utilisateurs"

Closes #387

See merge request Chill-Projet/chill-bundles!842
2025-07-20 20:18:49 +00:00
ab8da4ab7a Resolve "Notification: envoi à des groupes utilisateurs" 2025-07-20 20:18:49 +00:00
5bdb2df929 Merge branch 'revert-5f016734' into 'master'
Revert "Merge branch 'ticket/supplementary-comments-on-motive' into 'master'"

See merge request Chill-Projet/chill-bundles!863
2025-07-20 18:51:51 +00:00
e3a6b60fa2 Revert "Merge branch 'ticket/supplementary-comments-on-motive' into 'master'"
This reverts merge request !855
2025-07-20 18:50:33 +00:00
fe2eba3b29 Merge branch '1249-implement-app-vue-with-tickets-list' into 'ticket-app-master'
Implémenter une app vue avec la liste des tickets attribués

See merge request Chill-Projet/chill-bundles!858
2025-07-18 16:06:17 +00:00
Boris Waaub
61d1232e31 Implémenter une app vue avec la liste des tickets attribués 2025-07-18 16:06:16 +00:00
6594d4f6a6 Merge branch 'ticket/add-files-to-motives' into 'ticket-app-master'
[Ticket]  Add documents to Motive

See merge request Chill-Projet/chill-bundles!862
2025-07-18 14:55:12 +00:00
1a66a9e864 [Ticket] Add documents to Motive 2025-07-18 14:55:12 +00:00
1b74c119dc Merge branch 'ticket/supplementary-comments-on-motive' into 'ticket-app-master'
Add `supplementaryComments` property to Motive entity, update fixtures and types

See merge request Chill-Projet/chill-bundles!861
2025-07-18 13:18:44 +00:00
14d88810f3 Merge branch 'ticket/add-filter-by-addressee-on-ticket-api' into 'ticket-app-master'
[Ticket] add filter by addressee on ticket list api

See merge request Chill-Projet/chill-bundles!860
2025-07-18 11:40:48 +00:00
445a2c9358 [Ticket] add filter by addressee on ticket list api 2025-07-18 11:40:48 +00:00
c8baf0a8aa Merge branch 'ticket/add-filters-to-list' into 'ticket-app-master'
Ticket: ajout de paramètres à la requête de liste de tickets

See merge request Chill-Projet/chill-bundles!857
2025-07-16 13:39:27 +00:00
faed443a96 Ticket: ajout de paramètres à la requête de liste de tickets 2025-07-16 13:39:27 +00:00
bbf387d96f Merge branch '1243-display-ticket-list' into 'ticket-app-master'
Créer un composant pour afficher une liste des tickets

See merge request Chill-Projet/chill-bundles!849
2025-07-16 09:04:58 +00:00
Boris Waaub
b7c9b60744 Créer un composant pour afficher une liste des tickets 2025-07-16 09:04:57 +00:00
5f01673404 Merge branch 'ticket/supplementary-comments-on-motive' into 'master'
Ajout de commentaires supplémentaires aux motifs

See merge request Chill-Projet/chill-bundles!855
2025-07-11 14:06:40 +00:00
63d0a52ea1 Ajout de commentaires supplémentaires aux motifs 2025-07-11 14:06:40 +00:00
2bd303bbbe Add supplementaryComments property to Motive entity, update fixtures and types 2025-07-11 16:00:58 +02:00
c5e6122d2c Add deleted boolean property to Ticket type definition 2025-07-11 14:59:34 +02:00
088b876e20 Merge branch 'ticket/alter-comments-on-ticket' into 'ticket-app-master'
Tickets: edit comments and mark them as deleted

See merge request Chill-Projet/chill-bundles!854
2025-07-11 12:56:19 +00:00
3400656d7c Tickets: edit comments and mark them as deleted 2025-07-11 12:56:19 +00:00
837089ff5d Fix testMerge method in AccompanyingPeriodWorkMergeServiceTest.php 2025-07-10 11:33:23 +02:00
568c8be7fd Update baseline for eslint 2025-07-09 21:57:56 +02:00
538ecc42ea Update .editorconfig for correct formatting rules in file patterns 2025-07-09 21:57:38 +02:00
15d26d4b06 Refactor selectItsMe and removeEntity to improve type annotations and code readability in PickEntity.vue 2025-07-09 21:57:28 +02:00
d8bd9bd7cd Restore defaults and behaviour with pick entity on PickEntity.vue 2025-07-09 18:08:04 +02:00
dcdfba5ccd eslint fixes 2025-07-09 17:46:36 +02:00
0204bdd38d Restore features after merging 2025-07-09 17:46:16 +02:00
f383fab578 Fix styling 2025-07-09 15:30:39 +02:00
f3cc4a89af Update chill bundles to v4.0.2 2025-07-09 15:23:59 +02:00
703f5dc32d Transfer evaluations (and related documents) during merge 2025-07-09 15:21:42 +02:00
b870e71f77 Add translation for validation message in social action merger 2025-07-09 15:21:24 +02:00
392fd01b56 Merge branch 'master' into ticket-app-master
# Conflicts:
#	src/Bundle/ChillMainBundle/Export/Formatter/CSVFormatter.php
#	src/Bundle/ChillMainBundle/Export/Formatter/CSVListFormatter.php
#	src/Bundle/ChillMainBundle/Export/Formatter/SpreadsheetListFormatter.php
#	src/Bundle/ChillMainBundle/Resources/public/vuejs/PickEntity/PickEntity.vue
#	src/Bundle/ChillPersonBundle/Export/Aggregator/AccompanyingCourseAggregators/GeographicalUnitStatAggregator.php
#	src/Bundle/ChillPersonBundle/Resources/public/types.ts
#	src/Bundle/ChillPersonBundle/Resources/public/vuejs/_components/AddPersons.vue
2025-07-09 13:44:23 +02:00
a7e278204f fix changelog 2025-07-09 09:22:28 +02:00
4cfdcb2f02 Release v4.0.1 with fix in package.json file 2025-07-08 17:00:24 +02:00
3b82ab0e7f Release v4.0.0 2025-07-08 15:59:04 +02:00
ccfae1dc75 Merge branch '339-partage-d'export-enregistré' into 'master'
Partage d'export enregistré et génération asynchrone des exports

Closes #339 and #338

See merge request Chill-Projet/chill-bundles!800
2025-07-08 13:53:38 +00:00
8bc16dadb0 Partage d'export enregistré et génération asynchrone des exports 2025-07-08 13:53:25 +00:00
35844f3b73 Merge branch 'ticket/list-add-opening-state' into 'ticket-app-master'
Ajout du statut opening / closed pour la liste des tickets

See merge request Chill-Projet/chill-bundles!850
2025-07-08 13:48:53 +00:00
7506b918d7 Ajout du statut opening / closed pour la liste des tickets 2025-07-08 13:48:43 +00:00
c4cc0baa8e Merge branch 'eslint-fix-issues-2025-07' into 'master'
Fix Eslint issues

See merge request Chill-Projet/chill-bundles!853
2025-07-08 13:38:51 +00:00
aed114c75c Fix Eslint issues 2025-07-08 13:38:51 +00:00
cfba291f2c Merge branch 'ticket-app-master' into 'ticket-app-master'
Fixes réunion 7/7

See merge request Chill-Projet/chill-bundles!852
2025-07-07 15:35:20 +00:00
borisw
04438c09d3 FIX: 1403 - Ajout de la gestion du pluriel pour l'état des usagers dans l'historique des tickets et mise à jour des traductions associées. 2025-07-07 17:14:31 +02:00
2a54d1b909 Merge branch '1405-refactor-to-get-thirdparty' into 'ticket-app-master'
Refactor third-party type imports and update related components

See merge request Chill-Projet/chill-bundles!851
2025-07-07 14:56:35 +00:00
borisw
628eeac5e0 Merge branch 'ticket-app-master' into 1405-refactor-to-get-thirdparty 2025-07-07 16:54:54 +02:00
a2263b3fa1 Fix incorrect alias in ThirdPartyRepository query builder expressions 2025-07-07 16:49:56 +02:00
74796d0fb0 Remove unused @symfony/ux-translator dependency and adjust specs-build script. 2025-07-07 16:49:56 +02:00
c19481e40a Fix incorrect alias in ThirdPartyRepository query builder expressions 2025-07-07 16:37:46 +02:00
borisw
6eeb717b1a Refactor third-party type imports and update related components
- Changed import path for ThirdParty type in TypeThirdParty.vue and updated its usage.
- Refactored PersonText.vue to import Person and AltName types from ChillPersonAssets.
- Updated types.ts in ChillThirdPartyBundle to include a new 'type' field in the Thirdparty interface.
- Modified TicketBundle types to accommodate Thirdparty type in CallerState.
- Adjusted AddresseeSelectorComponent.vue to use 'thirdparty' instead of 'third_party'.
- Refined BannerComponent.vue to improve readability and maintainability.
- Updated CallerSelectorComponent.vue to reflect changes in entity types.
- Enhanced TicketHistoryListComponent.vue to handle both Person and Thirdparty types.
- Refactored TicketHistoryPersonComponent.vue to accept both Person and Thirdparty entities.
2025-07-07 16:35:31 +02:00
beb7c462da Remove unused @symfony/ux-translator dependency and adjust specs-build script. 2025-07-07 16:03:01 +02:00
borisw
dbf363a9e8 Ajouter le fichier de configuration Prettier avec des paramètres de formatage 2025-07-07 15:27:40 +02:00
64a2f7c9ed Fix definition for Ticket and SimpleTicket 2025-07-07 14:05:26 +02:00
e592b89c94 remove ux-translator from dependencies 2025-07-07 12:36:49 +02:00
f26d9739c8 Merge branch 'ticket/option-one-multi-person-entity-per-ticket' into 'ticket-app-master'
Add phone number parsing functionality

See merge request Chill-Projet/chill-bundles!848
2025-07-04 13:36:55 +00:00
afa5edc1d8 Inject personPerTicket parameter into EditTicketController and expose it to the frontend via edit.html.twig. Refactor related type definitions. 2025-07-04 15:33:03 +02:00
42d6c9e672 Add SetPersonCommandConstraint and its validator with test coverage for ChillTicketBundle 2025-07-04 15:33:02 +02:00
2b22d4cb7c Add configuration for ChillTicketBundle parameters: add an option to set one / multi Person entities per ticket 2025-07-04 15:33:02 +02:00
c8e5d0eb37 fix rector 2025-07-04 14:35:46 +02:00
2bf8ad5d6c Merge branch 'ticket/list-tickets' into 'ticket-app-master'
Ajout d'une liste de tickets

See merge request Chill-Projet/chill-bundles!847
2025-07-04 09:00:12 +00:00
11698a52e3 Ajout d'une liste de tickets 2025-07-04 09:00:12 +00:00
70955573e8 Merge branch '1344-1246-1257-afficher-patient-suggérés-et-selecteur-urgent' into 'ticket-app-master'
Afficher les patients suggérés et ajouter un sélecteur urgent/non urgent

See merge request Chill-Projet/chill-bundles!841
2025-07-04 07:45:34 +00:00
Boris Waaub
3df4043eb9 Afficher les patients suggérés et ajouter un sélecteur urgent/non urgent 2025-07-04 07:45:33 +00:00
06e8264dde Merge branch 'refs/heads/master' into ticket-app-master
# Conflicts:
#	src/Bundle/ChillPersonBundle/Resources/public/types.ts
#	src/Bundle/ChillPersonBundle/Resources/public/vuejs/_components/AccompanyingPeriod/SetReferrer.vue
2025-07-02 17:28:59 +02:00
70e75adb7d Merge branch 'master' of https://gitlab.com/Chill-Projet/chill-bundles 2025-07-02 13:57:20 +02:00
6f7015b152 Fix translations of form fields in admin for social actions 2025-07-02 13:56:41 +02:00
65dde1e6a0 Merge branch '390-fix-search-results' into 'master'
Fix participant condition in list_with_period.html.twig

Closes #390

See merge request Chill-Projet/chill-bundles!832
2025-07-02 10:59:17 +00:00
d193c50922 Merge branch '359-fusion-accompanying-period-work' into 'master'
Resolve "Fusion actions d'accompagnement"

Closes #359

See merge request Chill-Projet/chill-bundles!804
2025-07-02 10:53:17 +00:00
840ef6eed8 Resolve "Fusion actions d'accompagnement" 2025-07-02 10:53:16 +00:00
b4bbb1a456 Merge branch 'improve_person_resource_form' into 'master'
Improve person resource form

See merge request Chill-Projet/chill-bundles!846
2025-07-01 14:01:44 +00:00
606435a6b3 Pipeline corrections 2025-07-01 14:47:36 +02:00
b451d2c4a3 Merge branch 'task/1245-backend-cr-er-un-point-d-api-de-suggestion-des-usagers-person-pour-un-ticket' into 'ticket-app-master'
Créer un point d'api de suggestion des usagers pour un ticket

See merge request Chill-Projet/chill-bundles!845
2025-07-01 12:38:03 +00:00
4f93150874 Créer un point d'api de suggestion des usagers pour un ticket 2025-07-01 12:38:02 +00:00
404143f8a6 Merge branch 'improve_person_resource_form' of https://gitlab.com/Chill-Projet/chill-bundles into improve_person_resource_form 2025-07-01 14:34:39 +02:00
ec957a2fe3 Improve UX with better labeling in person resource form 2025-07-01 14:34:19 +02:00
8ed5e35f1a Merge branch 'master' of https://gitlab.com/Chill-Projet/chill-bundles 2025-07-01 14:33:27 +02:00
ec37676dab release v3.12.1 2025-06-30 20:35:00 +02:00
2d8cda30b9 Add localizeString method to PickTemplate component for string localization 2025-06-30 20:32:17 +02:00
27d344c97d Release v3.12.0 2025-06-30 11:00:42 +02:00
088e5692e2 Merge branch 'improve_person_resource_form' into 'master'
Improve admin templates for event admin entities + activity reason (category)...

See merge request Chill-Projet/chill-bundles!838
2025-06-30 08:44:24 +00:00
298044bc82 Improve admin templates for event admin entities + activity reason (category)... 2025-06-30 08:44:24 +00:00
ee4e223043 Merge branch '393-fix-dump-only-document-generator' into 'master'
Send data dumps as email attachments instead of links, update translations,...

Closes #393

See merge request Chill-Projet/chill-bundles!843
2025-06-30 08:41:09 +00:00
c53377ce8d Merge branch 'workflow-do-not-remove-workflow-canceled-automatically' into 'master'
Remove unnecessary workflow deletion logic when in the initial position

See merge request Chill-Projet/chill-bundles!844
2025-06-30 08:40:46 +00:00
0b580658de Remove unnecessary workflow deletion logic when in the initial position 2025-06-26 14:38:12 +02:00
786c60a50d Send data dumps as email attachments instead of links, update translations, and add unit tests for the handler. 2025-06-26 12:21:19 +02:00
456f00566d update juni guidelines 2025-06-26 12:19:49 +02:00
0566ab0910 Merge branch '1241-add-feature-close-open-ticket' into 'ticket-app-master'
Add feature open and close ticket

See merge request Chill-Projet/chill-bundles!835
2025-06-24 10:44:04 +00:00
Boris Waaub
f4eeee1598 Add feature open and close ticket 2025-06-24 10:44:03 +00:00
33cf16fc13 Merge branch 'task/1255-backend-cr-er-un-point-d-api-pour-enregistrer-le-fait-que-le-ticket-est-urgent-ou-non' into 'ticket-app-master'
Record that a ticket can be in emergency, or not

See merge request Chill-Projet/chill-bundles!840
2025-06-24 10:42:51 +00:00
0a331aab37 Record that a ticket can be in emergency, or not 2025-06-24 10:42:51 +00:00
d43b739654 Merge branch 'task/1240-impl-menter-un-backend-pour-cloturer-puis-r-ouvrir-le-ticket' into 'ticket-app-master'
Add api endpoint to open and close ticket

See merge request Chill-Projet/chill-bundles!839
2025-06-20 15:42:44 +00:00
c72432efae Add api endpoint to open and close ticket 2025-06-20 15:42:43 +00:00
95975fae55 fix cs 2025-06-20 17:35:19 +02:00
95a7efa138 Merge branch 'master' into ticket-app-master 2025-06-20 17:35:06 +02:00
a38116cca4 fix cs 2025-06-20 17:31:13 +02:00
45e193ff6d Merge remote-tracking branch 'origin/master' into ticket-app-master 2025-06-20 12:53:20 +02:00
dfc146ff3f Merge remote-tracking branch 'origin/ticket-app-master' into ticket-app-master 2025-06-20 12:45:33 +02:00
nobohan
9158e33854 #392 php cs-fixer 2025-06-19 21:29:43 +02:00
nobohan
af74f7860b Fixed nullable content for NewsItem in setContent signature #392 2025-06-19 17:53:33 +02:00
c2842148c6 Improve UX with better labeling in person resource form 2025-06-17 19:27:06 +02:00
10e4c7da23 Merge branch 'master' of https://gitlab.com/Chill-Projet/chill-bundles 2025-06-17 18:45:25 +02:00
bdf1cf71ba Fix argument usage in localizeString method for UserRenderBoxBadge component
Adjusted `localizeString` method to accept a `label` parameter, ensuring proper localization of `user_job.label` and `main_scope.name`. Also made minor syntax adjustments to improve readability.
2025-06-17 10:55:30 +02:00
b41fcf66a9 Merge branch '1277-refacto-use-symfony-translation' into 'ticket-app-master'
1277 refacto use symfony translation

See merge request Chill-Projet/chill-bundles!836
2025-06-16 10:59:42 +00:00
Boris Waaub
a8dd1b3548 1277 refacto use symfony translation 2025-06-16 10:59:42 +00:00
f680a35f49 Improve admin templates for event admin entities + activity reason (category) entities and remove delete and show actions for coherence 2025-06-11 17:13:19 +02:00
7d0fe06651 Fix admin entity edit actions for event admin entities and activity reason (category) entities 2025-06-11 16:46:04 +02:00
5ee8a6bc82 Merge branch 'upgrade-ci-image' into 'master'
Update CI configuration to use `chill/base-image:8.3-edge` instead of the old PHP 8.2 base image

See merge request Chill-Projet/chill-bundles!834
2025-06-05 10:10:41 +00:00
47cf83ef93 Update CI configuration to use chill/base-image:8.3-edge instead of the old PHP 8.2 base image 2025-06-05 11:30:01 +02:00
fca10ada71 Fix translation keys and participant pluralization in list_with_period.html.twig
Updated French translations for "Participants" and improved pluralization handling in accompanying_period keys. Modified list_with_period.html.twig to dynamically translate "Participants" based on the count of current participations.
2025-06-04 16:55:56 +02:00
a35d456308 Fix participant condition in list_with_period.html.twig
Updated the condition to properly handle cases where the first participation's person is not the current person.
2025-06-04 16:54:44 +02:00
67c1dfa42b Merge branch 'prepare-junie' into 'master'
Clean skeleton (and add Junie guidelines)

See merge request Chill-Projet/chill-bundles!830
2025-06-04 08:13:36 +00:00
49cbb6a002 Clean skeleton (and add Junie guidelines) 2025-06-04 08:13:35 +00:00
2b99a480ac Add StateHistory and StateEnum entities to track ticket state changes
Integrated the `StateHistory` entity to manage state transitions in tickets and the `StateEnum` for defining state values (`open`, `closed`). Updated `Ticket` to handle associations with state histories and provide state management methods. Added migration for `state_history` table and extended `TicketTest` for state-related tests.
2025-06-03 12:19:52 +02:00
7633e587bb Expand and refine development guidelines
Added detailed setup instructions, including Docker and asset management steps. Updated guidelines on testing structure, code quality tools, debugging, and deployment processes. Enhanced clarity and streamlined processes for developers. Updated `TicketTest` with additional tests for `externalRef`.
2025-06-02 16:02:33 +02:00
fc61dfdf3a Fix CS and add more comments within ticket bundle 2025-06-02 15:51:11 +02:00
f1a5b5c49e add info for junie 2025-06-02 15:32:52 +02:00
ec685dcd47 Merge branch 'prepare-junie' into ticket-app-master 2025-06-02 15:27:38 +02:00
631ae3eedd first impl for junie guildelines 2025-06-02 15:26:58 +02:00
440a7837ac clean phpstan baseline 2025-06-02 15:26:58 +02:00
e0abf34784 Remove unnecessary files 2025-06-02 11:24:59 +02:00
4c0c66bdb4 Add installation dependencies and improve setup instructions
Expanded the installation guide to include required dependencies such as `jq`, `php`, `composer`, and `symfony-cli`, among others. Updated setup commands to include `-W` flag for better dependency handling and added a cache clear step to ensure proper asset compilation. These changes enhance clarity and streamline the installation process.
2025-05-30 15:30:19 +02:00
377ae9a9dc Merge remote-tracking branch 'origin/master' into ticket-app-master 2025-05-30 14:53:44 +02:00
880a164793 Remove @symfony/ux-translator from dependencies
The @symfony/ux-translator package was removed from package.json as it is no longer required. This helps streamline the dependency list and reduce unnecessary maintenance overhead.
2025-05-30 14:02:47 +02:00
034dc30e30 Merge branch 'master' into ticket-app-master 2025-05-30 13:58:45 +02:00
d615111a0f Merge remote-tracking branch 'origin/ticket-app-master' into ticket-app-master 2025-05-30 13:58:28 +02:00
ffb756c712 Merge remote-tracking branch 'origin/master' into ticket-app-master 2025-05-30 13:36:20 +02:00
29c1ba3c2b Fix compilation of app for calendar 2025-05-30 13:29:56 +02:00
69daccb860 Merge remote-tracking branch 'origin/master' into ticket-app-master 2025-05-30 12:47:37 +02:00
397267f4b9 Merge branch 'replace-node-sass' into 'master'
Replace node-sass with sass and update bootstrap to version 5.3

See merge request Chill-Projet/chill-bundles!828
2025-05-28 15:04:59 +00:00
df88c31c40 Replace node-sass with sass and update bootstrap to version 5.3 2025-05-28 15:04:59 +00:00
6f1fe1c118 Merge branch '379-translation-localization-vue' into 'master'
Resolve "Finish handling of internationalization in vuejs: handling translation of "translatable string""

Closes #379

See merge request Chill-Projet/chill-bundles!822
2025-05-28 14:40:27 +00:00
649ad26721 Resolve "Finish handling of internationalization in vuejs: handling translation of "translatable string"" 2025-05-28 14:40:26 +00:00
a8c41141e8 Enhance note rendering with Markdown to HTML conversion in AccompanyingCourseWork/show.html.twig
Updated the note display logic to use the `chill_markdown_to_html` filter for better formatting and presentation. This change ensures that Markdown syntax in notes is properly rendered as HTML.
2025-05-28 16:36:03 +02:00
d82727f831 Update CommentEditor styles for responsiveness
Imported Bootstrap variables and updated styling to use responsive media breakpoints. Adjusted positioning of toggle buttons to ensure proper alignment on different screen sizes.
2025-05-28 16:36:03 +02:00
66bd63403b Update event binding in CKEditor5 component template
Replaces the deprecated `@input` event with the `@update:modelValue` event to ensure compatibility with Vue 3. This improves handling of two-way binding for the `v-model` directive.
2025-05-28 16:31:59 +02:00
16435423cf Replace node-sass with sass in package.json
Updated the dependency from node-sass to sass to ensure compatibility with modern tooling and resolve deprecation warnings. This change aligns with recommended practices for Sass-related workflows.
2025-05-27 15:40:00 +02:00
697b4ab436 fix compilation errors 2025-05-27 15:39:48 +02:00
67d804e28e fix compilation errors 2025-05-27 12:00:49 +02:00
cf41fa9574 fix compilation errors 2025-05-27 11:59:52 +02:00
b8b325f7d7 Add path mapping for ChillPersonAssets in tsconfig.json
This update introduces a new path alias, "ChillPersonAssets/*", to the tsconfig.json file. It allows TypeScript to resolve imports for assets within the ChillPersonBundle more efficiently.
2025-05-27 11:59:36 +02:00
e97bd8c4ef doc for creating a new bundle: add route 2025-05-27 11:59:29 +02:00
e28d7df533 Add routing to ticket bundle 2025-05-27 11:56:35 +02:00
4b20b1bc01 Merge remote-tracking branch 'refs/remotes/origin/master' into ticket-app-master 2025-05-27 11:33:22 +02:00
992e6d29d0 Merge branch '321-text-editor-fallback' into 'master'
Text editor: Add a toggle button to switch to simple text editor and add emoji and fullscreen to ckeditor toolbar

Closes #321

See merge request Chill-Projet/chill-bundles!827
2025-05-27 09:16:31 +00:00
b15733076c Add TicketBundle to the build of open api specs 2025-05-27 10:25:10 +02:00
25be5c9ea3 Automatic eslint fixes 2025-05-27 10:21:25 +02:00
b035020c6f Clarify and expand "create a new bundle" documentation
Rewrote the "create a new bundle" guide for clarity and completeness. Added detailed steps for creating a bundle class, registering namespaces in `composer.json`, updating configuration files, and dumping autoload. These changes aim to make the instructions easier to follow for new developers.
2025-05-27 10:20:55 +02:00
128101dc46 Add ChillTicketBundle to project configuration
ChillTicketBundle is now registered in `composer.json`, `bundles.php`, and `doctrine_migrations_chill.yaml`. This integration ensures its autoloading, enables its functionality across environments, and sets up its migration paths.
2025-05-27 09:59:51 +02:00
5f2711023e Merge branch 'refs/heads/master' into ticket-app-master
# Conflicts:
#	composer.json
#	config/bundles.php
#	config/packages/doctrine_migrations_chill.yaml
#	package.json
#	src/Bundle/ChillMainBundle/DataFixtures/ORM/LoadUserGroup.php
#	src/Bundle/ChillMainBundle/DependencyInjection/ChillMainExtension.php
#	src/Bundle/ChillMainBundle/Entity/UserGroup.php
#	src/Bundle/ChillMainBundle/Resources/public/chill/js/date.ts
#	src/Bundle/ChillMainBundle/Resources/public/lib/download-report/download-report.js
#	src/Bundle/ChillMainBundle/Resources/public/module/ckeditor5/editor_config.ts
#	src/Bundle/ChillMainBundle/Resources/public/module/ckeditor5/index.ts
#	src/Bundle/ChillMainBundle/Resources/public/page/export/download-export.js
#	src/Bundle/ChillMainBundle/Resources/public/types.ts
#	src/Bundle/ChillMainBundle/Resources/views/Dev/dev.assets.html.twig
#	src/Bundle/ChillMainBundle/Templating/Entity/UserGroupRender.php
#	src/Bundle/ChillMainBundle/chill.api.specs.yaml
#	src/Bundle/ChillMainBundle/chill.webpack.config.js
#	src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourse/components/Comment.vue
#	src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourse/components/PersonsAssociated.vue
#	src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourse/components/Resources.vue
#	src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourse/components/Resources/WriteComment.vue
#	src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourseWorkEdit/App.vue
#	src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourseWorkEdit/components/FormEvaluation.vue
#	src/Bundle/ChillPersonBundle/Resources/public/vuejs/HouseholdMembersEditor/components/Household.vue
#	src/Bundle/ChillPersonBundle/Resources/public/vuejs/HouseholdMembersEditor/components/MemberDetails.vue
#	src/Bundle/ChillPersonBundle/Resources/public/vuejs/HouseholdMembersEditor/components/PersonComment.vue
#	src/Bundle/ChillPersonBundle/Resources/public/vuejs/_components/AddPersons.vue
#	src/Bundle/ChillPersonBundle/Resources/public/vuejs/_components/Entity/PersonRenderBox.vue
#	src/Bundle/ChillPersonBundle/Resources/public/vuejs/_components/Entity/PersonText.vue
#	src/Bundle/ChillPersonBundle/Resources/public/vuejs/_js/i18n.ts
#	tests/app/config/bootstrap.php
2025-05-27 09:37:04 +02:00
bdf2ed4bbd Fix typo 2025-05-27 09:35:49 +02:00
bb41af4ed2 replace ck-editor by new CommentEditor on every vuejs components 2025-05-23 13:51:44 +02:00
19dd4667f2 Integrate Vue-based editor with rich and simple mode toggle
Replaced CKEditor initialization with a Vue-based editor component. Introduced a toggle to switch between rich and simple editing modes, persisting the state in local storage. Updated CKEditor dependency to version 45.1.0.
2025-05-23 13:34:50 +02:00
976f293f28 Add Emoji and Fullscreen features to CKEditor configuration
Integrated Emoji, Mention (required for Emoji), and Fullscreen plugins into the CKEditor setup. Updated the toolbar to include respective buttons, enhancing functionality and user interaction.
2025-05-23 13:33:47 +02:00
5c9396077d remove "faked" entity and simplify template string in Activity index.js
Replaced multi-line template string with a cleaner single-line backtick template. This improves readability and maintains consistent formatting in the code.
2025-05-23 13:22:56 +02:00
713c50309b Merge branch '367-page-mes-parcours' into 'master'
Resolve "Reorganise page 'Mes parcours'"

Closes #367

See merge request Chill-Projet/chill-bundles!807
2025-05-21 16:13:43 +00:00
44a8ddeba4 Resolve "Reorganise page 'Mes parcours'" 2025-05-21 16:13:43 +00:00
8b2af35e97 Fix typo 2025-05-21 17:57:35 +02:00
dc44c46667 Fix SocialActionCSVExporterTest.php 2025-05-21 09:29:25 +02:00
ba571c1a69 Merge branch 'master' of https://gitlab.com/Chill-Projet/chill-bundles 2025-05-20 10:04:53 +02:00
6a364705f2 Git add desactivation date for social issue csv export 2025-05-20 09:57:07 +02:00
b6d454691a Git add desactivation date for social action csv export 2025-05-20 09:38:39 +02:00
6d7a6932a9 Merge branch '365-correct-activities-works-counters' into 'master'
#365 correct works counter in acc course summary

Closes #365

See merge request Chill-Projet/chill-bundles!826
2025-05-16 14:40:20 +00:00
juminet
2faf194b15 #365 correct works counter in acc course summary 2025-05-16 14:40:19 +00:00
f207599d86 Merge branch '352-remove-wopi-link-module' into 'master'
Resolve "Code mort: module wopi-link semble inutilisé"

Closes #352

See merge request Chill-Projet/chill-bundles!824
2025-05-16 08:33:57 +00:00
b0959f8cc5 Resolve "Code mort: module wopi-link semble inutilisé" 2025-05-16 08:33:56 +00:00
4c5dee5f0a Fix pipeline 2025-05-14 17:31:48 +02:00
f6c98aa0d5 Add missing translation for user_group.no_user_groups 2025-05-14 14:53:50 +02:00
6d13d184d5 Merge branch 'master' of https://gitlab.com/Chill-Projet/chill-bundles 2025-05-14 13:57:22 +02:00
af36eccfaf Allow more characters for maritalstatus id 2025-05-14 13:56:36 +02:00
483a20a43f Merge branch '374-task-default-filters' into 'master'
Resolve "Module tâche: enlever les filtres par défaut"

Closes #374

See merge request Chill-Projet/chill-bundles!819
2025-05-13 08:59:01 +00:00
6d8e2ad825 Resolve "Module tâche: enlever les filtres par défaut" 2025-05-13 08:59:01 +00:00
86388a63a8 Merge branch '381-uncoherent-display-persons-acc-course-works' into 'master'
381 display previous person participation in acc course work

Closes #381

See merge request Chill-Projet/chill-bundles!823
2025-05-13 08:45:38 +00:00
juminet
5ea55ebfe5 381 display previous person participation in acc course work 2025-05-13 08:45:38 +00:00
f97dc8f931 Merge branch '377-document-file-name' into 'master'
377 - add the document filename to document title when uploading a new document

Closes #377

See merge request Chill-Projet/chill-bundles!821
2025-05-13 08:30:31 +00:00
juminet
a9c3aab528 377 - add the document filename to document title when uploading a new document 2025-05-13 08:30:30 +00:00
1181377bd6 Merge branch '376-typeerror-doc-history' into 'master'
#376 prevent typerror in doc-history + improve display of document history

Closes #376

See merge request Chill-Projet/chill-bundles!820
2025-05-13 07:50:53 +00:00
juminet
2275b7c560 #376 prevent typerror in doc-history + improve display of document history 2025-05-13 07:50:52 +00:00
4a8d298ae5 Fix typing error for the display of text in calendar events 2025-05-05 10:42:04 +02:00
3e7f03d331 Add possibility to cancel a workflow if there is a pending signature [ci-skip] 2025-04-17 14:23:32 +02:00
b830952b9e Release v3.11.0 2025-04-17 14:22:35 +02:00
ad17313c61 Merge branch '380-remove-not-null-constraint-household-composition' into 'master'
Remove "not null" validation on HouseholdComposition properties

Closes #380

See merge request Chill-Projet/chill-bundles!818
2025-04-17 09:03:15 +00:00
620515ad15 Remove "not null" validation on HouseholdComposition properties
This change removes the "not null" constraint on specific properties in the HouseholdComposition entity to allow null values. The adjustment addresses Issue #380 and ensures better flexibility without impacting the schema.
2025-04-17 10:56:45 +02:00
50c377ee22 Merge branch 'fix/fix-stored-object-version-not-delete-when-not-exists-on-disk' into 'master'
Fix error when cleaning non-existent stored object versions

See merge request Chill-Projet/chill-bundles!816
2025-04-17 08:36:36 +00:00
cc7e7a90ee Merge branch 'fix/cancel-stale-workflow-handle-fails-silently' into 'master'
Add consistent LOG_PREFIX and key to CancelStaleWorkflowHandler logs

See merge request Chill-Projet/chill-bundles!817
2025-04-16 19:10:37 +00:00
1d4ef19051 Add key to log messages context and add log prefix to enhance CancelStaleWorkflowHandler messages
Introduced a consistent LOG_PREFIX to all log messages in CancelStaleWorkflowHandler. This ensures clearer contextual identification in logs and improves traceability when debugging or monitoring workflow actions.
2025-04-16 21:03:29 +02:00
8337a724d1 Fix error when cleaning non-existent stored object versions
Prevent the `RemoveOldVersionMessageHandler` from throwing errors when the stored object version is missing on disk. Introduced a check to log a notice instead of attempting deletion in such cases and added corresponding test coverage.
2025-04-16 16:26:02 +02:00
8ca377d5d4 Merge branch 'button-signature-zone' into 'master'
Add button unique signature zone

See merge request Chill-Projet/chill-bundles!812
2025-04-15 13:09:54 +00:00
224e0bae43 Add button unique signature zone 2025-04-15 13:09:54 +00:00
3aa4fac80d Merge branch '364-tel2-third-party' into 'master'
Adding a second phone number to thirdparty entity

Closes #364

See merge request Chill-Projet/chill-bundles!810
2025-04-15 12:59:58 +00:00
juminet
a7517eb647 Adding a second phone number to thirdparty entity 2025-04-15 12:59:57 +00:00
e278e636e0 Merge branch '365-add-activities-works-counter' into 'master'
#365 Add works and activities counter

Closes #365

See merge request Chill-Projet/chill-bundles!809
2025-04-14 09:34:02 +00:00
juminet
40e373a9c7 #365 Add works and activities counter 2025-04-14 09:34:02 +00:00
1c1f418b18 Merge branch 'fix/acc-period-step-change-shorten-elapsed' into 'master'
Adjust cronjob interval to ensure daily execution

See merge request Chill-Projet/chill-bundles!814
2025-04-10 13:49:11 +00:00
bf0e14b43a Merge branch '102-liste-des-document-titre-long' into 'master'
Fix graphical bug in document list with title overflowing the frame, and add new classes to display title and aside in flex-table (DX + Fix)

Closes #102 and #22

See merge request Chill-Projet/chill-bundles!815
2025-04-10 13:47:40 +00:00
203a098054 Refactor document row layouts to use CSS grid
Replaced the old 'item-col' structure with a 'item-two-col-grid' layout across multiple templates, improving consistency and responsiveness. Introduced CSS grid styles ensuring proper alignment and wrapping of titles and aside elements in different viewport sizes. This enhances the overall readability and maintainability of the views.
2025-04-10 15:41:06 +02:00
d58acff541 Add css layout for badges for accompanying period work, activity and calendar 2025-04-10 15:41:06 +02:00
5858e05a42 Replace grid in person_list document to fit the whole width of the page 2025-04-10 15:31:06 +02:00
b9b4fafe14 Adjust cronjob interval to ensure daily execution
The interval for `AccompanyingPeriodStepChangeCronjob` was reduced from 24 hours to 23 hours and 45 minutes. This change guarantees at least one execution per day, addressing potential issues with timing overlaps.
2025-04-09 21:30:41 +02:00
1df542603e Refactor export download script to use ES6 and webpack
The export download script was refactored to use ES6 syntax and webpack's modular system. This included separating out the download script into its own file for better organization, removing globally-scoped JavaScript, and adding the new download script as a webpack entry point. Also, the import method for the 'mime' library was adjusted to use ES6 syntax.
2024-06-04 21:51:42 +02:00
80bcc68ce5 WIP temporarily force extension to xlsx 2024-06-04 15:40:05 +02:00
154fc3e2f6 Increase size between user-groups in AddresseeSelectorComponent.vue 2024-06-04 11:59:26 +02:00
e45af94c78 Update ticket history interface and functionality
Reworked the ticket history interface and added new functionalities. The history interface now supports multiple patients and shows changes in patients' state. Additionally, new ticket creation is now displayed in the history line, along with the creator information. Some minor textual changes were made to reflect support for multiple patients. Implemented code cleanup and removed debug statements for a cleaner codebase.
2024-06-03 23:25:53 +02:00
166a6fde20 Add feature to set concerned persons in a ticket
This commit adds the functionality to set and change the concerned persons in a ticket within the ChillTicketBundle. New vuejs components, serializers, and store modules have been introduced to achieve this. Moreover, necessary changes have been made in existing components and store index to support this functionality.
2024-06-03 22:30:12 +02:00
631f047338 Manage the persons' assocation with ticket through SetPersonsCommand and dedicated handler 2024-06-03 13:53:28 +02:00
a777588bb8 fixup! Add TicketListController test 2024-06-03 13:26:01 +02:00
ca78d112c2 Add chill_ticket.yaml to configure routes
This commit adds a new file, chill_ticket.yaml, under the tests/app/config/routes directory in the ChillTicketBundle. This file is used to define the routes for the ChillTicket application.
2024-06-03 13:23:21 +02:00
bcfd317d83 Remove ChillEventBundle and refactor framework.yaml configurations
This commit involves the deletion of ChillEventBundle from the bundles configuration. Additionally, test framework configurations are handled in a consolidated manner by moving assets configurations (json_manifest_path) from test/framework.yaml to framework.yaml. The obsolete test/framework.yaml has been deleted as it is no longer needed.
2024-06-03 13:23:09 +02:00
348740f073 Add TicketListController test
A new file, TicketListControllerTest.php, has been added to the test suite. This file includes tests to ensure that the TicketList controller is working as expected, including checking the successful response of the 'GET' request.
2024-06-03 13:22:46 +02:00
0d74f0980f Multiple fixes and improvements 2024-06-03 12:50:29 +02:00
be19dc00db Replace person-render-box with on-the-fly in BannerComponent
This change replaces the usage of person-render-box component with the on-the-fly component in the BannerComponent.vue file of ChillTicketBundle. Also, OnTheFly component is now being imported. This update simplifies the structure and improves the readability of the code.
2024-06-03 11:20:50 +02:00
643028ffd6 Update styles and markup for badges and ticket events
Updated the SCSS for badge components, including the introduction of a margin and specific font-weight for user-group badges. Additionally, changes have been made to the TicketApp store to comment out a specific condition. A few updates were made to the twig files in the ChillTicketBundle and ChillMainBundle to reflect these style changes.
2024-06-03 11:13:49 +02:00
ac4e2e5bf2 Update time calculations in BannerComponent and TicketNormalizer
Refactored BannerComponent to use an imported date function, improved time calculation logic, and enhanced code readability. Also, updated TicketNormalizer to properly normalize various datetime and user-related fields. A new date validation check has been added in the date utility file.
2024-06-01 00:31:39 +02:00
498572b96e Refactor addressee history management
This commit refactors the management of addressees history in the ticketing system. Instead of individual addition and removal events for addressees, a new event 'addressees_state' is introduced to capture the state of addressees at any given point in the history. The structure and logic of normalized tickets have been adjusted accordingly.
2024-05-31 23:43:32 +02:00
d2a61ce69b Add return path support for ticket creation and editing
This commit introduces support for a return path query parameter during ticket creation and editing operations. This enables a more user-friendly redirection after a form submission operation where the return path provides more context on the next page. The return path is now also considered in the Vue.js components, with necessary checks and validations. A 'Cancel' button has been added to the ActionToolbarComponent.vue where the return path exists.
2024-05-31 22:23:13 +02:00
a9c0567ee1 add script to run php-cs-fixer 2024-05-31 22:22:49 +02:00
76cec5b5a8 fix indentation 2024-05-31 22:22:34 +02:00
efe8a67697 Upgrade CKEditor and refactor configuration with use of typescript 2024-05-31 21:46:19 +02:00
26dfa9b028 Add ticket listing and related enhancements
Added a new functionality for listing tickets with the ability for the user to order the list. A method was added to the User class to identify if an object is an instance of User. Similarly, a method was added to the UserGroup class. User.php, UserGroup.php, TicketRepository.php, and TicketRepositoryInterface.php were updated. A new TicketListController, MotiveRepository, and SectionMenuBuilder were created. Translations were included, and services.yaml was updated.
2024-05-31 12:32:01 +02:00
50025044d3 Add UserGroupRender and Interface for UserGroup templating
A new UserGroupRender class was added to manage the templating logic for UserGroup entities. The UserGroupRenderInterface was also created, extending the ChillEntityRenderInterface. Additionally, a Twig template for rendering user groups was added.
2024-05-31 12:31:44 +02:00
e6202a2e34 Remove unnecessary fields and methods from Ticket entity
The "updatedAt" field and "getUpdatedAt" method, as well as the "createdBy" field and the "getCreatedBy" method have been removed from the Ticket entity. These fields and related methods were not necessary and their removal simplifies the entity structure.
2024-05-30 16:06:34 +02:00
b863bd967d Update address list import to latest compiled addresses
The import of the address list has been upgraded to use the latest version of the compiled addresses from Belgian-best-address. In the AddressReferenceBEFromBestAddress class, the RELEASE constant has been updated to point to the v1.1.1 tag.
2024-05-30 16:01:34 +02:00
e65bcf7275 Restore feature to see chill assets style preview in dev environment
This commit introduces a new dev.assets.html.twig file and updates the chill.yaml file to add new paths for the SASS Assets tests.
2024-05-28 16:33:13 +02:00
e00ece4200 Update form builder parameter in SearchController
Changed the first argument in the `createNamedBuilder` method from `null` to an empty string. This adjustment ensures the form factory correctly creates the builder in the SearchController.
2024-05-28 15:58:17 +02:00
640fd71402 merge ticket-app-master and fix rector / cs 2024-05-28 15:54:52 +02:00
aae50ca290 Merge branch 'ticket-app-master' into chill-bundles-ticket-app-adaptations 2024-05-28 15:08:59 +02:00
1fa483598b Merge branch 'upgrade-sf5' into ticket-app-master 2024-05-28 14:59:25 +02:00
e4b6a468f8 adding fixtures for ticket in every environment 2024-05-28 13:47:58 +02:00
Boris Waaub
66c7758023 Adapt module name 2024-05-22 11:17:07 +02:00
Boris Waaub
4750d2c24e Adapt module name 2024-05-22 11:16:18 +02:00
Boris Waaub
ca05e3d979 Layout adaptation 2024-05-22 11:12:22 +02:00
Boris Waaub
a20f9b4f86 Generalize ticket actions 2024-05-22 00:38:47 +02:00
Boris Waaub
c73c1eb8d5 Rename "appelant" by "patient" 2024-05-21 22:24:30 +02:00
Boris Waaub
8778bb0731 Use colors and badges for history and banner 2024-05-21 22:22:33 +02:00
Boris Waaub
c7d20eebc5 chore: Remove unused code in AddresseeSelectorComponent.vue 2024-05-21 20:53:15 +02:00
Boris Waaub
b9e130c159 Use suggestion for user asignee 2024-05-21 20:44:23 +02:00
Boris Waaub
3e8bc94af3 Remove user object display 2024-05-21 18:14:11 +02:00
Boris Waaub
0c914c9f9f Remove "remove_addressee" history line 2024-05-21 17:32:40 +02:00
Boris Waaub
580a60c939 Add user_group for returning type 2024-05-21 17:32:05 +02:00
Boris Waaub
4996ac3b7c Adapt layout action toolbar 2024-05-21 15:22:13 +02:00
Boris Waaub
2a23bf19cb use record_actions sticky-form-buttons 2024-05-21 10:53:25 +02:00
Boris Waaub
650d2596d9 Update ticket display to use ticket ID instead of external reference 2024-05-21 09:54:06 +02:00
Boris Waaub
2bdd5a329e Merge branch 'ticket-app-master' of gitlab.com:boriswa/chill-bundles into ticket-app-master 2024-05-21 09:53:32 +02:00
78d1776733 Add functionality to find a caller by phone number
Added a new method in PersonRepository to allow querying people by phone number. Also, a new REST API endpoint "/public/api/1.0/ticket/find-caller" was introduced and it can find a caller by their phone number. Accompanied this feature addition with corresponding test cases.
2024-05-17 13:14:26 +02:00
66dc603c85 fix cs with new version of php-cs-fixer 2024-05-17 12:20:33 +02:00
3a8154ecce Replace PhoneNumberUtil with PhonenumberHelper
The PhoneNumberUtil has been replaced with PhonenumberHelper in AssociateByPhonenumberCommandHandler and its test class. The purpose of this change is to improve phone number parsing which is now delegated to the PhonenumberHelper class in the Chill\MainBundle\Phonenumber namespace. As a consequence, the related dependencies in both the service and the test class have been updated accordingly.
2024-05-17 12:17:00 +02:00
c81828e04f Add phone number parsing functionality
Added a new method 'parse' in the PhonenumberHelper class in ChillMainBundle to sanitize and parse phone numbers. This method specifically handles phone numbers that start with '00', '+' or '0'. Associated unit tests for this new method were also added in PhonenumberHelperTest.php.
2024-05-17 12:16:28 +02:00
Boris Waaub
ec17dd7de2 Merge branch 'master' of https://gitlab.com/Chill-Projet/chill-bundles into ticket-app-master 2024-05-13 16:08:19 +02:00
76c076a5f3 Merge branch 'ticket-app-create-template' into 'ticket-app-master'
Mise à jour des messages de l'interface utilisateur pour inclure les...

See merge request Chill-Projet/chill-bundles!689
2024-05-13 13:34:43 +00:00
Boris Waaub
f0045edd6c FIX: Ouvert depuis 2024-05-13 12:33:11 +02:00
Boris Waaub
d00b76ffcd $tc n'est plus supporté pour i18n composition api, il faut utiliser $t.
FIX: Person PersonRenderBox
2024-05-13 12:16:07 +02:00
Boris Waaub
8991f0ef3f Modification i18n 2024-05-13 12:00:11 +02:00
Boris Waaub
d6f5eae0c9 Rendre les commentaire markdown 2024-05-13 11:59:50 +02:00
Boris Waaub
821fce3dd8 $tc n'est plus supporté pour i18n composiontion api, il faut utiliser $t.
Source : https://github.com/intlify/vue-cli-plugin-i18n/issues/214
i18n composion api : https://vue-i18n.intlify.dev/api/composition
2024-05-13 11:38:28 +02:00
Boris Waaub
1d33ae1e39 use ckeditor 2024-05-08 18:03:50 +02:00
Boris Waaub
19af0feb57 Use PersonRenderBox 2024-05-08 17:54:03 +02:00
Boris Waaub
1c09e9a692 Merge branch 'ticket-app-master' into ticket-app-create-template 2024-05-08 16:05:35 +02:00
Boris Waaub
d72e748388 Merge branch 'ticket-app-master' of https://gitlab.com/boriswa/chill-bundles into ticket-app-master 2024-05-08 16:02:09 +02:00
Boris Waaub
ab850b7b70 Fusionner les utilisateurs/goupes en une "Card" 2024-05-06 20:07:15 +02:00
Boris Waaub
3f9745d8cf Use teleport for banner 2024-05-06 18:03:04 +02:00
Boris Waaub
473765366a Add tranfert with AddPerson 2024-05-06 16:38:56 +02:00
Boris Waaub
6500c24a7f Déplacer le répertoire translation dans source 2024-05-02 14:10:22 +02:00
Boris Waaub
1d00457141 Ajouter les propriétés createdAt et updatedBy à l'interface Ticket 2024-05-02 14:09:52 +02:00
Boris Waaub
eb0bf56cff Add user group addressee 2024-05-02 13:18:45 +02:00
Boris Waaub
7b8cd90cf1 Add user store 2024-05-02 12:03:10 +02:00
Boris Waaub
a27d92aba0 Add comment and motive 2024-05-02 00:50:33 +02:00
Boris Waaub
85bdfb9e21 Remove banner component 2024-05-01 22:04:07 +02:00
Boris Waaub
4cffcf4de1 Use translate in setup 2024-05-01 22:03:36 +02:00
Boris Waaub
b2587a688f Déplacer le composant banner dans twig 2024-05-01 15:51:12 +02:00
Boris Waaub
c9f0e9843b Déplacer le composant banner dans twig 2024-05-01 15:49:32 +02:00
Boris Waaub
b40ad9e445 Mise à jour des messages de l'interface utilisateur pour inclure les fonctionnalités de commentaire, de motif et de transfert 2024-04-25 11:16:08 +02:00
Boris Waaub
3e10e47e29 Merge branch 'ticket-app-master' into ticket-app-create-template 2024-04-25 10:37:42 +02:00
Boris Waaub
2a1963e993 Mise à jour de l'interface utilisateur pour le composant ActionToolbarComponent 2024-04-25 10:36:45 +02:00
34c171659b Merge branch 'ticket-app/backend-3' into 'ticket-app-master'
Add functionality to set addressees for a ticket

See merge request Chill-Projet/chill-bundles!683
2024-04-24 16:50:29 +00:00
2d8b960d9e Re-open the same ticket if a ticket already exists with the same externalRef, instead of creating a new one 2024-04-24 18:48:00 +02:00
831ae03431 Merge branch 'ticket-app/backend-2' into 'ticket-app-master'
Add functionality to add comments to tickets

See merge request Chill-Projet/chill-bundles!681
2024-04-23 21:42:07 +00:00
45828174d1 Add addressee history to ticket serialization
This update extends the tickets serialization and normalisation process to include addressee history. With the changes, AddresseeHistory class now also keeps track of who removed an addressee. Additional types, tests and interfaces have been introduced to support this change.
2024-04-23 23:39:01 +02:00
ed45f14a45 Add tracking of addressee history in ticket system
The updates introduce tracking for the history of addressees in the ticket system, both when added and when removed. The user who removed an addressee is now recorded. The changes also ensure these updated aspects are correctly normalized and users can see them in the ticket history. A new database migration file was created for the changes.
2024-04-23 23:38:34 +02:00
fa67835690 Add functionality to add single addressee to tickets
This update introduces a new feature allowing end-users to add a single addressee to a ticket without removing the existing ones. This was achieved by adding a new API endpoint and updating the SetAddresseesController to handle the addition of a single addressee. Accompanying tests have also been provided to ensure the new feature works as expected.
2024-04-23 23:00:12 +02:00
b434d38091 Add functionality to set addressees for a ticket
This update includes the implementation of methods to add and retrieve addressee history in the Ticket entity, a handler for addressee setting command, denormalizer for transforming request data to SetAddresseesCommand, and corresponding tests. Additionally, it adds a SetAddresseesController for handling addressee related requests and updates the API specifications.
2024-04-23 22:50:51 +02:00
Boris Waaub
800a952532 Add base template 2024-04-23 20:41:32 +02:00
9f355032a8 Create a "do not exclude" validation constraint for user groups 2024-04-22 12:41:43 +02:00
0bc6e62d4d Add fixtures for UserGroup 2024-04-22 12:01:49 +02:00
46fb1c04b5 Add color and exclusion fields to UserGroup
This commit introduces new fields to the UserGroup entity, specifically background color, foreground color, and an exclusion key. These have been implemented both in the PHP entity and TypeScript interface definitions. Additionally, a Doctrine migration has been created to reflect these changes on the database side.
2024-04-22 12:01:28 +02:00
3b2c3d1464 Merge branch 'ticket-app-create-store' into 'ticket-app-master'
Create vuex store

See merge request Chill-Projet/chill-bundles!678
2024-04-22 08:29:56 +00:00
Boris Waaub
0bd6038160 Merge branch chill-bundles:master into ticket-app-master 2024-04-19 15:54:24 +00:00
Boris Waaub
baab8e94ce Add ticket to storeand catch error with toast in component 2024-04-19 17:46:12 +02:00
e2deb55fdb Create api endpoint for listing user-group 2024-04-19 15:34:43 +02:00
Boris Waaub
2cdfb50058 Mise en œuvre de la fonctionnalité de remplacement du motif du ticket
La validation introduit plusieurs fonctionnalités liées à la gestion du motif du ticket dans le bundle Chill-TicketBundle :
- Ajoute la possibilité de remplacer le motif d'un ticket par un nouveau.
- Fournit des fonctionnalités de gestion de l'historique des motifs du ticket.
- Implémente les modifications pertinentes au niveau du contrôleur, du gestionnaire d'actions et de l'entité.
- Intègre de nouvelles points d'API et met à jour le fichier de spécification de l'API pour la nouvelle fonctionnalité.
- Inclut des tests pour garantir le bon fonctionnement de la nouvelle fonctionnalité.
2024-04-19 14:12:09 +02:00
39d701feb2 Serialize ticket's Comment 2024-04-18 22:10:56 +02:00
613ee8b186 Add functionality to add comments to tickets
A new controller, 'AddCommentController', has been added. This controller implements the 'AddCommentCommandHandler', allowing users to add comments to tickets. Additionally, corresponding test cases were implemented. The Ticket entity was also updated to accept and manage comments. API endpoint specs were updated to reflect these changes.
2024-04-18 21:57:55 +02:00
56a1a488de Return the content of the ticket on replace motive POST request 2024-04-18 15:44:05 +02:00
3f789ad0f4 Merge branch 'ticket-app/create-entities' into 'ticket-app-master'
Add phone number search function to PersonACLAwareRepository

See merge request Chill-Projet/chill-bundles!677
2024-04-18 11:21:46 +00:00
467bea7cde Serialization of tickets with history 2024-04-18 13:13:09 +02:00
670b8eb82b Implement functionality to replace ticket's motive
The commit introduces several features related to ticket motive management in the Chill-TicketBundle:
- Adds capability to replace a ticket's motive with a new one.
- Provides ticket motive history management features.
- Implements relevant changes in Controller, Action Handler, and Entity levels.
- Incorporates new API endpoints and updates the API specification file for the new feature.
- Includes tests to ensure the new functionality works as expected.
2024-04-18 13:13:08 +02:00
a9760b323f Add ChillTicketBundle to configuration and autoload-dev
The commit includes the ChillTicketBundle in the bundles configuration file for testing. Additionally, the autoload-dev directive in the composer.json file was updated to include the "App" namespace for testing purposes. This ensures that the tests related to the "App" namespace are correctly autoloaded.
2024-04-18 13:13:08 +02:00
71a3a1924a Add Motive API and related fixtures to ChillTicketBundle
This update introduces the Motive API Controller to the ChillTicket bundle with its corresponding service configuration. Also included are related data fixtures for loading motive information. The motive entity has been updated to improve its serialization properties and new types were added to the TypeScript definitions of the bundle.
2024-04-18 13:13:07 +02:00
ecdc1e25bf Layout of banner for ticket 2024-04-18 13:13:07 +02:00
dd37427be1 Bootstrap ticket layout and vue app to edit ticket 2024-04-18 13:13:07 +02:00
c8467df1b1 fixup! Rename Command directory to Action to avoid confusion with symfony commands 2024-04-18 13:13:06 +02:00
4c89a954fa Refactor test, fixing the constructor 2024-04-18 13:13:05 +02:00
7c1f3b114d Rename Command directory to Action to avoid confusion with symfony commands 2024-04-18 13:13:05 +02:00
36bc4dab24 Configure a testsuite for TicketBundle 2024-04-18 13:13:04 +02:00
4b30d92282 Add ticket creation and associating by phone number functionality
This update introduces new features allowing the creation of tickets and associating them with a phone number. Specifically, relevant commands and their handlers have been created along with corresponding tests. An endpoint for ticket creation has also been set up, and the ViewTicketController has been renamed and refactored to EditTicketController to better reflect its function.
2024-04-18 13:13:04 +02:00
75fbec5489 Create entities and doctrine mapping for ticket 2024-04-18 13:13:03 +02:00
912fdd6349 Add phone number search function to PersonACLAwareRepository
A new function, findByPhone, has been added to the PersonACLAwareRepository. This function allows searching for people based on their phone numbers. Changes also reflect in the PersonACLAwareRepositoryInterface, and new test cases have been added to the PersonACLAwareRepositoryTest.
2024-04-16 14:41:55 +02:00
5832542978 load also tests for ticket bundle 2024-04-16 14:41:39 +02:00
5c3585a1ed Fix loading of environment variable in bootstrap process 2024-04-16 14:41:29 +02:00
a2f1e20ddf Fix cs 2024-04-15 15:49:47 +02:00
4d67702a76 Bootstrap loading of controllers and routes for ticket bundle 2024-04-15 15:48:25 +02:00
18e442db29 Merge branch 'ticket-app-init' into 'ticket-app-master'
Add ChillTicketBundle webpack configuration

See merge request Chill-Projet/chill-bundles!673
2024-04-15 12:44:21 +00:00
Boris Waaub
deb3d92189 Add ChillTicketBundle webpack configuration 2024-04-15 14:34:09 +02:00
a59ea7db31 Compiles with ticket bundle 2024-04-15 13:48:49 +02:00
a738b0cac9 Initialize ChillTicketBundle 2024-04-15 13:22:36 +02:00
1715 changed files with 88564 additions and 51544 deletions

View File

@@ -0,0 +1,6 @@
kind: Feature
body: |
Upgrade import of address list to the last version of compiled addresses of belgian-best-address
time: 2024-05-30T16:00:03.440767606+02:00
custom:
Issue: ""

View File

@@ -0,0 +1,6 @@
kind: Feature
body: |
Upgrade CKEditor and refactor configuration with use of typescript
time: 2024-05-31T19:02:42.776662753+02:00
custom:
Issue: ""

View File

@@ -0,0 +1,6 @@
kind: Feature
body: Create invitation list in user menu
time: 2025-08-08T12:08:02.446361367+02:00
custom:
Issue: "385"
SchemaChange: No schema change

View File

@@ -0,0 +1,6 @@
kind: Feature
body: Admin interface for Motive entity
time: 2025-10-07T15:59:45.597029709+02:00
custom:
Issue: ""
SchemaChange: No schema change

View File

@@ -0,0 +1,6 @@
kind: Feature
body: Add an admin interface for Motive entity
time: 2025-10-22T11:15:52.13937955+02:00
custom:
Issue: ""
SchemaChange: Add columns or tables

View File

@@ -0,0 +1,6 @@
kind: Fixed
body: Fix suggestion of referrer when creating notification for accompanyingPeriodWorkDocument
time: 2025-11-06T16:16:05.861813041+01:00
custom:
Issue: "428"
SchemaChange: No schema change

19
.changes/v3.11.0.md Normal file
View File

@@ -0,0 +1,19 @@
## v3.11.0 - 2025-04-17
### Feature
* ([#365](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/365)) Add counters of actions and activities, with 2 boxes to (1) show the number of active actions on total actions and (2) show the number of activities in a accompanying period, and pills in menus for showing the number of active actions and the number of activities.
* ([#364](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/364)) Added a second phone number "telephone2" to the thirdParty entity. Adapted twig templates and vuejs apps to handle this phone number
**Schema Change**: Add columns or tables
* Signature: add a button to go directly to the signature zone, even if there is only one
### Fixed
* Fixed wrong translations in the on-the-fly for creation of thirdParty
* Fixed update of phone number in on-the-fly edition of thirdParty
* Fixed closing of modal when editing thirdParty in accompanying course works
* Shorten the delay between two execution of AccompanyingPeriodStepChangeCronjob, to ensure at least one execution in a day
* ([#102](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/102)) Fix display of title in document list
* When cleaning the old stored object versions, do not throw an error if the stored object is not found on disk
* Add consistent log prefix and key to logs when stale workflows are automatically canceled
* ([#380](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/380)) Remove the "not null" validation constraint on recently added properties on HouseholdComposition
### DX
* Add new chill-col style for displaying title and aside in a flex table

22
.changes/v3.12.0.md Normal file
View File

@@ -0,0 +1,22 @@
## v3.12.0 - 2025-06-30
### Feature
* ([#377](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/377)) Add the document file name to the document title when a user upload a document, unless there is already a document title.
* Add desactivation date for social action and issue csv export
* Add Emoji and Fullscreen feature to ckeditor configuration
* ([#321](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/321)) Create editor which allow us to toggle between rich and simple text editor
* Do not remove workflow which are automatically canceled after staling for more than 30 days
### Fixed
* ([#376](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/376)) trying to prevent bug of typeerror in doc-history + improved display of document history
* ([#381](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/381)) Display previous participation in acc course work even if the person has left the acc course
* ([#372](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/372)) Fix display of text in calendar events
* Add missing translation for user_group.no_user_groups
* Fix admin entity edit actions for event admin entities and activity reason (category) entities
* ([#392](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/392)) Allow null and cast as string to setContent method for NewsItem
* ([#393](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/393)) Doc Generation: the "dump only" method send the document as an email attachment.
### DX
* ([#352](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/352)) Remove dead code for wopi-link module
* Replace library node-sass by sass, and upgrade bootstrap to version 5.3 (yarn upgrade / install is required)
### UX
* ([#374](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/374)) Remove default filter in_progress for the page 'my tasks'; Allows for new tasks to be displayed upon opening of the page
* Improve labeling of fields in person resource creation form

3
.changes/v3.12.1.md Normal file
View File

@@ -0,0 +1,3 @@
## v3.12.1 - 2025-06-30
### Fixed
* Fix loading of the list of documents

74
.changes/v4.0.0.md Normal file
View File

@@ -0,0 +1,74 @@
## v4.0.0 - 2025-07-08
### Feature
* ([#359](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/359)) Allow the merge of two accompanying period works
### Fixed
* ([#390](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/390)) Display the list of participant in the results, even if there is only one participant and that the search result display the requestor
* Fix admin entity edit actions for event admin entities and activity reason (category) entities
* Fix translations for social action fields in admin form: results, goals, evaluations
### DX
* Rewrite exports to run them asynchronously
**Schema Change**: Add columns or tables
* Allow TranslatableMessage in flash messages
### UX
* Improve labeling of fields in person resource creation form
**Release notes**
- Add new methods to serialize data using the rector rule
- Remove all references to the Request in filters, aggregators, filters. Actually, the most frequent occurence is `$security->getUser()`.
- Refactor manually the initializeQuery method
- Remove the injection of ExportManager into the constructor of each export element:
```diff
- class MyFormatter implements FormatterInterface
+ class MyFormatter implements FormatterInterface, \Chill\MainBundle\Export\ExportManagerAwareInterface
{
+ use \Chill\MainBundle\Export\Helper\ExportManagerAwareTrait;
- public function __construct(private ExportManager $exportmanager) {}
public function MyMethod(): void
{
- $this->exportManager->getFilter('alias');
+ $this->getExportManager()->getFilter('alias');
}
}
```
- configure messenger to handle export in a queue:
```diff
# config/packages/messenger.yaml
framework:
messenger:
routing:
+ 'Chill\MainBundle\Export\Messenger\ExportRequestGenerationMessage': priority
```
- add missing methods to exports, aggregators, filters, formatter:
```php
public function normalizeFormData(array $formData): array;
public function denormalizeFormData(array $formData, int $fromVersion): array;
```
There are rector rules to generate those methods:
- `Chill\Utils\Rector\Rector\ChillBundleAddNormalizationMethodsOnExportRector`
See:
```php
// upgrade chill exports
$rectorConfig->rules([\Chill\Utils\Rector\Rector\ChillBundleAddNormalizationMethodsOnExportRector::class]);
```
This rule will create most of the work necessary, but some manuals changes are still necessary:
- we must set manually the correct repository for method `denormalizeDoctrineEntity`;
- when the form data contains some entities, and the form type is not one of EntityType::class, PickUserDynamicType::class, PickUserLocationType::class, PickThirdpartyDynamicType::class, Select2CountryType::class, then we must handle the normalization manually (using the `\Chill\MainBundle\Export\ExportDataNormalizerTrait`)

4
.changes/v4.0.1.md Normal file
View File

@@ -0,0 +1,4 @@
## v4.0.1 - 2025-07-08
### Fixed
* Fix package.json for compilation

4
.changes/v4.0.2.md Normal file
View File

@@ -0,0 +1,4 @@
## v4.0.2 - 2025-07-09
### Fixed
* Fix add missing translation
* Fix the transfer of evaluations and documents during of accompanyingperiodwork

12
.changes/v4.1.0.md Normal file
View File

@@ -0,0 +1,12 @@
## v4.1.0 - 2025-08-26
### Feature
* ([#400](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/400)) Add filter to social actions list to filter out actions where current user intervenes
* ([#399](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/399)) Show filters on list pages unfolded by default
* Expansion of event module with new fields in the creation form: thematic, internal/external animator, responsable, and budget elements. Filtering options in the event list + adapted exports
**Schema Change**: Add columns or tables
### Fixed
* ([#382](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/382)) adjust display logic for accompanying period dates, include closing date if period is closed.
* ([#384](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/384)) add min and step attributes to integer field in DateIntervalType
### UX
* Limit display of participations in event list

10
.changes/v4.2.0.md Normal file
View File

@@ -0,0 +1,10 @@
## v4.2.0 - 2025-09-02
### Feature
* ([#64](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/64)) Add external identifier for a Person
**Schema Change**: Add columns or tables
* ([#330](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/330) Allow users to choose for which notifications they want to receive an email
### Fixed
* ([#422](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/422)) Fixed html layout of pages for recovering password
* Fix typo in 'uncheckAll' script for centers selection
* Fix incorrect parameter name in event details link

6
.changes/v4.2.1.md Normal file
View File

@@ -0,0 +1,6 @@
## v4.2.1 - 2025-09-03
### Fixed
* Fix exports to work with DirectExportInterface
### DX
* Improve error message when a stored object cannot be written on local disk

10
.changes/v4.3.0.md Normal file
View File

@@ -0,0 +1,10 @@
## v4.3.0 - 2025-09-08
### Feature
* ([#409](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/409)) Add 45 and 60 min calendar ranges
* Add a command to generate a list of permissions
* ([#412](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/412)) Add an absence end date
**Schema Change**: Add columns or tables
### Fixed
* fix date formatting in calendar range display
* Change route URL to avoid clash with person duplicate controller method

8
.changes/v4.4.0.md Normal file
View File

@@ -0,0 +1,8 @@
## v4.4.0 - 2025-09-11
### Feature
* ([#359](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/359)) Allow the merge of two accompanying period works
* ([#369](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/369)) Duplication of a document to another accompanying period work evaluation
* ([#359](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/359)) Fusion of two accompanying period works
### Fixed
* Fix display of 'duplicate' and 'merge' buttons in CRUD templates
* Fix saving notification preferences in user's profile

3
.changes/v4.4.1.md Normal file
View File

@@ -0,0 +1,3 @@
## v4.4.1 - 2025-09-11
### Fixed
* fix translations in duplicate evaluation document modal and realign close modal button

3
.changes/v4.4.2.md Normal file
View File

@@ -0,0 +1,3 @@
## v4.4.2 - 2025-09-12
### Fixed
* Fix document generation and workflow generation do not work on accompanying period work documents

13
.changes/v4.5.0.md Normal file
View File

@@ -0,0 +1,13 @@
## v4.5.0 - 2025-10-03
### Feature
* Only allow delete of attachment on workflows that are not final
* Move up signature buttons on index workflow page for easier access
* Filter out document from attachment list if it is the same as the workflow document
* Block edition on attached document on workflow, if the workflow is finalized or sent external
* Convert workflow's attached document to pdf while sending them external
* After a signature is canceled or rejected, going to a waiting page until the post-process routines apply a workflow transition
### Fixed
* ([#426](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/426)) Increased the number of required characters when setting a new password in Chill from 9 to 14 - GDPR compliance
* Fix permissions on storedObject which are subject by a workflow
### DX
* Introduce a WaitingScreen component to display a waiting screen

4
.changes/v4.5.1.md Normal file
View File

@@ -0,0 +1,4 @@
## v4.5.1 - 2025-10-03
### Fixed
* Add missing javascript dependency
* Add exception handling for conversion of attachment on sending external, when documens are already in pdf

14
.changes/v4.6.0.md Normal file
View File

@@ -0,0 +1,14 @@
## v4.6.0 - 2025-10-15
### Feature
* ([#423](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/423)) Create environment banner that can be activated and configured depending on the image deployed
* ([#394](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/394)) Only show active workflow on the page "my tracked workflow"
### Fixed
* Fix loading of classLists in SocialIssuesAcc.vue, ensure elements are present
* Fix the rendering of list of StoredObjectVersions, where there are kept version (before converting to pdf) and intermediate versions deleted
* ([#434](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/434)) Notification: fix editing of sent notification by removing form.addressesEmails, a field that no longer exists
* Fix loading of social issues and social actions within vue component
* ([#446](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/446)) Add unique condition on stored object filename, with cleaning step on existing duplicate filenames
**Schema Change**: Drop or rename table or columns, or enforce new constraint that must be manually fixed
* [workflow] take permissions into account to delete the workflow attachment
* ([#448](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/448)) Fix the execution of daily cronjob notification, when the previous last execution storage was invalid

3
.changes/v4.6.1.md Normal file
View File

@@ -0,0 +1,3 @@
## v4.6.1 - 2025-10-27
### Fixed
* Fix export case where no 'reason' is picked within the PersonHavingActivityBetweenDateFilter.php

21
.changes/v4.7.0.md Normal file
View File

@@ -0,0 +1,21 @@
## v4.7.0 - 2025-11-10
### Feature
* ([#385](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/385)) Create invitation list in user menu
* ([#404](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/404)) Add columns for comments linked to an activity in the activity list export
### Fixed
* ([#451](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/451)) Fix: display also social actions linked to parents of the selected social issue
* ([#453](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/453)) Fix: export actions and their results in csv even when action does not have any goals attached to it.
* Fix the possibility to delete a workflow
**Schema Change**: Drop or rename table or columns, or enforce new constraint that must be manually fixed
* ([#457](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/457)) Fix the fusion of thirdparty properties that are located in another schema than public for TO_ONE relations + add extra loop for MANY_TO_MANY relations where thirdparty is the source instead of the target
* ([#428](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/428)) Fix suggestion of referrer when creating notification for accompanyingPeriodWorkDocument
### DX
* Send notifications log to dedicated channel, if it exists
### UX
* ([#425](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/425)) Change the terms 'cercle' and 'centre' to 'service', and 'territoire' respectively.
* ([#542](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/542)) Improve the ux for selecting whether user wants to be notified of the final step of a workflow or all steps
* Expand timeSpent choices for evaluation document and translate them to user locale or fallback 'fr'
* ([#455](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/455)) Change the order of display for results and objectives in the social work/action form
* Wrap text when it is too long within badges

9
.changes/v4.8.0.md Normal file
View File

@@ -0,0 +1,9 @@
## v4.8.0 - 2025-11-17
### Feature
* ([#461](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/461)) Make a calendar item on the 'mes rendez-vous' page clickable. Clicking will navigate to the edit page of the calendar item.
### Fixed
* ([#463](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/463)) Display calendar items for which an invite was accepted on the mes rendez-vous page
* Improve accessibility on login page
### UX
* ([#449](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/449)) Remove the label if there is only one scope and no scope picking field is displayed.

6
.changes/v4.8.1.md Normal file
View File

@@ -0,0 +1,6 @@
## v4.8.1 - 2025-11-20
### Fixed
* Insert name of file as the document title when uploading
* Add missing path paramater 'id' for editing multiple participations
* ([#471](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/471)) Hide the display of inactive user groups in the api

10
.changes/v4.8.2.md Normal file
View File

@@ -0,0 +1,10 @@
## v4.8.2 - 2025-11-26
### Fixed
* ([#466](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/466)) Associate activity's creator as a participant by default, and retro-actively append the creator to each activity
**Schema Change**: Add columns or tables
* Fix template parameter for update_multiple route on event participations
### UX
* ([#470](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/470)) Alphabetically order userJobs and mainLocations within user creation form
* ([#437](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/437)) Change position and color of confirm parcours button

14
.changes/v4.9.0.md Normal file
View File

@@ -0,0 +1,14 @@
## v4.9.0 - 2025-12-05
### Feature
* ([#459](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/459)) Add a counter for invitations awaiting reply
### Fixed
* ([#475](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/475)) Do not suggest a user that is no longer active in the activity form.
* ([#441](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/441)) Remove double display of person id in the banner when there is a deathdate
### DX
* ([#280](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/280)) Add missing fixtures for proper loading of AccompanyingPeriods
* ([#386](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/386)) Use mkdocs with mkdocs-material instead of sphinx to build chill developer documentation
### UX
* ([#456](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/456)) Display whether doc generation template is active or not in admin and order templates alphabetically
* ([#460](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/460)) Display calendar item info on cancel page
* ([#424](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/424)) Display entire comment for activity item within list
* ([#474](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/474)) Improve accessibility of event form

View File

@@ -19,11 +19,11 @@ max_line_length = 80
[COMMIT_EDITMSG]
max_line_length = 0
[*.{js, vue, ts}]
[*.{js,vue,ts}]
indent_size = 2
indent_style = space
[.rst]
ident_size = 3
ident_style = space
[*.rst]
indent_size = 3
indent_style = space

4
.env
View File

@@ -92,3 +92,7 @@ REDIS_URL=redis://${REDIS_HOST}:${REDIS_PORT}
###> symfony/ovh-cloud-notifier ###
# OVHCLOUD_DSN=ovhcloud://APPLICATION_KEY:APPLICATION_SECRET@default?consumer_key=CONSUMER_KEY&service_name=SERVICE_NAME
###< symfony/ovh-cloud-notifier ###
###> symfony/loco-translation-provider ###
#LOCO_DSN=loco://API_KEY@default
###< symfony/loco-translation-provider ###

File diff suppressed because it is too large Load Diff

3
.gitignore vendored
View File

@@ -18,6 +18,9 @@ migrations/*
templates/*
translations/*
# we allow developers to add customization on their installation, without commiting it
config/packages/dev/*
###> symfony/framework-bundle ###
/.env.local
/.env.local.php

View File

@@ -38,15 +38,67 @@ variables:
TZ: Europe/Brussels
# avoid direct deprecations (using symfony phpunit bridge: https://symfony.com/doc/4.x/components/phpunit_bridge.html#internal-deprecations
SYMFONY_DEPRECATIONS_HELPER: max[total]=99999999&max[self]=0&max[direct]=45&verbose=0
# consider the root package at the dev-master version
# this is required to work with packages
# see https://getcomposer.org/doc/articles/troubleshooting.md#dependencies-on-the-root-package
COMPOSER_ROOT_VERSION: dev-master
stages:
- mirror
- Composer install
- Tests
- Deploy
mirror_chill_zimbra_bundle:
stage: mirror
image: alpine:latest
variables:
GIT_DEPTH: 0 # <-- access to the full git history
rules:
# 1) Allow manual run from GitLab UI, whatever the branch
- if: '$CI_PIPELINE_SOURCE == "web"'
# 2) Auto-run on commits to master or 472-zimbra-connector
# but only if relevant files changed
- if: '$CI_COMMIT_BRANCH == "master" || $CI_COMMIT_BRANCH == "472-zimbra-connector"'
changes:
- packages/ChillZimbraBundle/**/*
- .gitlab-ci.yml
# 3) Otherwise: never run
- when: never
before_script:
- apk add --no-cache git git-subtree openssh
# Config git
- git config --global user.email "ci@gitlab.com"
- git config --global user.name "GitLab CI"
# Préparation SSH
- mkdir -p ~/.ssh
- cp "$DEPLOY_KEY" ~/.ssh/id_ed25519
- printf '\n' >> ~/.ssh/id_ed25519
- chmod 600 ~/.ssh/id_ed25519
- ssh-keyscan gitlab.com >> ~/.ssh/known_hosts
# Ajout du remote vers le repo dédié
- git remote add chill-zimbra-connector git@gitlab.com:Chill-Projet/chill-zimbra-connector.git || true
script:
# On s'assure d'être sur la bonne branche (celle qui a déclenché le job, master)
- git checkout "$CI_COMMIT_REF_NAME"
# Crée une branche temporaire qui contient uniquement l'historique de packages/ChillZimbraBundle
- git subtree split --prefix=packages/ChillZimbraBundle -b chill_zimbra_temp
# Push vers le repo cible, branche master du repo chill-zimbra-connector
- git push chill-zimbra-connector chill_zimbra_temp:main
build:
stage: Composer install
image: gitea.champs-libres.be/chill-project/chill-skeleton-basic/base-image:php82
image: chill/base-image:8.3-edge
variables:
before_script:
- composer config -g cache-dir "$(pwd)/.cache"
script:
@@ -61,7 +113,7 @@ build:
code_style:
stage: Tests
image: gitea.champs-libres.be/chill-project/chill-skeleton-basic/base-image:php82
image: chill/base-image:8.3-edge
script:
- php-cs-fixer fix --dry-run -v --show-progress=none
cache:
@@ -74,7 +126,7 @@ code_style:
phpstan_tests:
stage: Tests
image: gitea.champs-libres.be/chill-project/chill-skeleton-basic/base-image:php82
image: chill/base-image:8.3-edge
variables:
COMPOSER_MEMORY_LIMIT: 3G
before_script:
@@ -91,7 +143,7 @@ phpstan_tests:
rector_tests:
stage: Tests
image: gitea.champs-libres.be/chill-project/chill-skeleton-basic/base-image:php82
image: chill/base-image:8.3-edge
before_script:
- bin/console cache:clear --env=dev
script:
@@ -132,7 +184,7 @@ lint:
unit_tests:
stage: Tests
image: gitea.champs-libres.be/chill-project/chill-skeleton-basic/base-image:php82
image: chill/base-image:8.3-edge
variables:
COMPOSER_MEMORY_LIMIT: 3G
before_script:

391
.junie/guidelines.md Normal file
View File

@@ -0,0 +1,391 @@
# Project Guidelines for Junie
## Project Overview
Chill is a comprehensive web application built as a set of Symfony bundles. It is a case management system, for social work. The project consists of multiple specialized bundles that provide different functionalities:
- **ChillMainBundle**: Core bundles that provide the foundation of the application
- **ChillPersonBundle**: Core bundles that provide the foundation of the bundles associated to person (which is the case for all other bundles)
- **ChillCalendarBundle**: Calendar and scheduling functionality
- **ChillDocStoreBundle** and **ChillDocGeneratorBundle**: Document management and generation
- **ChillActivityBundle**, **ChillEventBundle**, **ChillTaskBundle**: Activity and task tracking
- **ChillBudgetBundle**: Financial management
- **ChillThirdPartyBundle**: Integration with external systems
- **ChillCustomFieldsBundle**: Extensibility through custom fields
- **ChillReportBundle**: Save arbitrary reports about persons
- **ChillTicketBundle**: Record and track issues about persons
- And several other specialized bundles
## Technology Stack
- **Backend**: PHP 8.3+, Symfony 5.4
- **Frontend**: JavaScript/TypeScript, Vue.js 3, Bootstrap 5
- **Build Tools**: Webpack Encore, Yarn
- **Database**: PostgreSQL with materialized views. We do not support other databases.
- **Other Services**: Redis, AMQP (RabbitMQ), SMTP
## Project Structure
Note: This is a project that's existed for a long time, and throughout the years we've used multiple structures inside each bundle. When having the choice, the developers should choose the new structure.
The project follows a standard Symfony bundle structure:
- `/src/Bundle/`: Contains all the Chill bundles. The code is either at the root of the bundle directory, or within a `src/` directory (preferred). See psr4 mapping at the root's `composer.json`.
- each bundle comes with its own tests, either in the `Tests` directory (when the code is directly within the bundle directory (for instance `src/Bundle/ChillMainBundle/Tests`, `src/Bundle/ChillPersonBundle/Tests`)), or inside the `tests` directory, alongside the `src/` sub-directory (example: `src/Bundle/ChillWopiBundle/tests`) (this is the preferred way).
- `/docs/`: Contains project documentation
Each bundle typically has the following structure:
- `Controller/`: Contains controllers
- `Entity/`: Contains Doctrine entities
- `Repository/`: Contains Doctrine repositories
- `Resources/`: Contains views, translations, and public assets
- `DependencyInjection/`: Contains service configuration
- `Export/`: Contains services related to exports
- `Security/`: Contains services related to security. Most of the time, those are new voters, and so on.
### A special word about TicketBundle
The ticket bundle is developed using a kind of "Command" pattern. The controller fills a "Command," and a "CommandHandler" handles this command. They are saved in the `src/Bundle/ChillTicketBundle/src/Action` directory.
## Development Guidelines
### Building and Configuration Instructions
All the commands should be run through the `symfony` command, which will configure the required variables.
For assets, we must ensure that we use node at version `^20.0.0`. This is done using `nvm use 20`.
#### Initial Setup
1. **Clone the Repository**:
```bash
git clone <repository-url>
cd chill-bundles
```
2. **Install PHP Dependencies**:
```bash
composer install
```
3. **Install JavaScript Dependencies**:
```bash
nvm use 20
yarn install
```
4. **Configure Environment Variables**:
- Create a `.env.local` file with minimal configuration
```bash
echo "APP_ENV=dev" >> .env.local
```
5. Start the associated services (database, and so on):
```bash
docker compose up -d
```
6. **Set Up the Database**:
```bash
# Create the database
symfony console doctrine:database:create
# Run migrations
symfony console doctrine:migrations:migrate
# Load fixtures (optional)
symfony console doctrine:fixtures:load
```
7. **Build Assets**:
```bash
nvm use 20
yarn run encore dev
```
8. **Start the Development Server**:
```bash
symfony server:start -d
```
#### Docker Setup
The project includes a Docker configuration for easier development:
1. **Start Docker Services**:
```bash
docker-compose up -d
```
2. **Access the Application**:
- The application will be available at `http://localhost:8000`
- PostgreSQL will be available at `localhost:5432`
- Redis will be available at `localhost:6379`
#### Building Assets
Before submitting any changes, you should build the project to ensure that all assets are properly compiled:
```bash
# For production
yarn run encore production
# For development with hot-reloading
yarn run encore dev --watch
# for development
yarn run encore dev
```
#### Configuration Files
Key configuration files:
- `config/packages/*.yaml`: Symfony bundle configurations
- `webpack.config.js`: Webpack Encore configuration
- `composer.json`: PHP dependencies and scripts
- `package.json`: JavaScript dependencies and scripts
- `.env`: Default environment variables. Must usually not be updated: use `.env.local` instead.
### Database migrations
Each time a doctrine entity is created, we generate migration to adapt the database.
The migration is created using the command `symfony console doctrine:migrations:diff --no-interaction --namespace <namespace>`, where the namespace is the relevant namespace for migration. As this is a bash script, remember to quote the `\` (`\` must become `\\` in your command).
Each bundle has his own namespace for migration (always ask me to confirm that command with a list of updated / created entities so that I can confirm to you that it is ok):
- `Chill\Bundle\ActivityBundle` writes migrations to `Chill\Migrations\Activity`;
- `Chill\Bundle\BudgetBundle` writes migrations to `Chill\Migrations\Budget`;
- `Chill\Bundle\CustomFieldsBundle` writes migrations to `Chill\Migrations\CustomFields`;
- `Chill\Bundle\DocGeneratorBundle` writes migrations to `Chill\Migrations\DocGenerator`;
- `Chill\Bundle\DocStoreBundle` writes migrations to `Chill\Migrations\DocStore`;
- `Chill\Bundle\EventBundle` writes migrations to `Chill\Migrations\Event`;
- `Chill\Bundle\CalendarBundle` writes migrations to `Chill\Migrations\Calendar`;
- `Chill\Bundle\FamilyMembersBundle` writes migrations to `Chill\Migrations\FamilyMembers`;
- `Chill\Bundle\FranceTravailApiBundle` writes migrations to `Chill\Migrations\FranceTravailApi`;
- `Chill\Bundle\JobBundle` writes migrations to `Chill\Migrations\Job`;
- `Chill\Bundle\MainBundle` writes migrations to `Chill\Migrations\Main`;
- `Chill\Bundle\PersonBundle` writes migrations to `Chill\Migrations\Person`;
- `Chill\Bundle\ReportBundle` writes migrations to `Chill\Migrations\Report`;
- `Chill\Bundle\TaskBundle` writes migrations to `Chill\Migrations\Task`;
- `Chill\Bundle\ThirdPartyBundle` writes migrations to `Chill\Migrations\ThirdParty`;
- `Chill\Bundle\TicketBundle` writes migrations to `Chill\Migrations\Ticket`;
- `Chill\Bundle\WopiBundle` writes migrations to `Chill\Migrations\Wopi`;
Once created the, comment's classes should be removed and a description of the changes made to the entities should be added to the migrations, using the `getDescription` method. The migration should not be cleaned by any artificial intelligence, as modifying this migration is error prone.
### Guidelines related to code structure and requirements
#### Usage of clock
When we need to use a DateTime or DateTimeImmutable that need to express "now", we prefer the usage of
`Symfony\Component\Clock\ClockInterface`, where possible. This is usually not possible in doctrine entities,
where injection does not work when restoring an entity from a database, but usually possible in services.
In test, we use `\Symfony\Component\Clock\MockClock` which is an implementation of `Symfony\Component\Clock\ClockInterface`
where we have full and easy control of the date.
### Testing Information
The project uses PHPUnit for testing. Each bundle has its own test suite, and there's also a global test suite at the root level.
#### Use of mock in tests
##### General mocking
For creating mock, we prefer using prophecy (library phpspec/prophecy).
##### Useful helpers and tips that avoid creating a mock
Some notable implementations that are test helpers and avoid creating a mock:
- `\Psr\Log\NullLogger`, an implementation of `\Psr\Log\LoggerInterface`;
- `\Symfony\Component\Clock\MockClock`, an implementation of `Symfony\Component\Clock\ClockInterface` (already mentioned above);
- `\Symfony\Component\HttpClient\MockHttpClient`, an implementation of `\Symfony\Contracts\HttpClient\HttpClientInterface`;
- When using `\Symfony\Component\Mailer\MailerInterface`, we can create the mock with "InMemoryTransport":
```php
use Symfony\Component\Mailer\Transport\InMemoryTransport;
use \Symfony\Component\Mailer\Mailer;
$transport = new InMemoryTransport();
$mailer = new Mailer($transport);
// After sending:
$messages = $transport->getSent(); // array of SentMessage
```
- When using `\Symfony\Contracts\EventDispatcher\EventDispatcherInterface`, we can use directly an instance of `\Symfony\Component\EventDispatcher\EventDispatcher`;
##### When we prefer not creating a mock
- When we use Doctrine Entities related to the project, we prefer not to use a mock: we instantiate them directly (unless it requires too much code to write);
##### Mocking final and readonly classes
Classes marked as final can't be mocked. To avoid that, either:
- we remove the `final` keyword from the class;
- we extract an interface from the final class.
This must be a decision made by a human, not by an AI. Every AI task must abort with an explicit message in that case.
#### Running Tests
The tests are run from the project's root (not from the bundle's root: so, do not change the directory to any bundle directory before running tests).
Tests must be run using the `symfony` command:
```bash
# Run a specific test file
symfony composer exec phpunit -- path/to/TestFile.php
# Run a specific test method
symfony composer exec phpunit -- --filter methodName path/to/TestFile.php
```
When writing tests, only test specific files. Do not run all tests or the full
test suite.
#### Test Structure
Tests are organized by bundle and follow the same structure as the bundle itself:
- Unit tests: Test individual components in isolation
- Integration tests: Test components working together
- Functional tests: Test the application from the user's perspective
#### Writing Tests
Tests should be placed in the appropriate bundle's test directory. For example, tests for the TicketBundle should be placed in `src/Bundle/ChillTicketBundle/tests/`.
Here's an example of a simple entity test:
```php
<?php
namespace Chill\TicketBundle\Tests\Entity;
use Chill\TicketBundle\Entity\Ticket;
use PHPUnit\Framework\TestCase;
class TicketTest extends TestCase
{
public function testGetAndSetExternalRef(): void
{
$ticket = new Ticket();
$externalRef = 'REF-123';
// Set the external reference
$ticket->setExternalRef($externalRef);
// Verify that getExternalRef returns the correct value
self::assertSame($externalRef, $ticket->getExternalRef());
// Change the external reference
$newExternalRef = 'REF-456';
$ticket->setExternalRef($newExternalRef);
// Verify that getExternalRef returns the updated value
self::assertSame($newExternalRef, $ticket->getExternalRef());
}
}
```
#### Test Database
For tests that require a database, the project uses a postgresql database filled with fixtures (usage of doctrine-fixtures). You can configure a different database for testing in the `.env.test` file.
### Code Quality Tools
The project uses several tools to maintain code quality:
#### PHP Code Style
The project uses PHP-CS-Fixer for code style. You can run it with:
```bash
# Using the composer script
composer php-cs-fixer
# Or directly
php-cs-fixer fix --config=./.php-cs-fixer.dist.php
```
#### Static Analysis
The project uses PHPStan for static analysis. You can run it with:
```bash
# Using the composer script
composer phpstan
# Or directly
vendor/bin/phpstan analyse
```
#### Automated Refactoring
The project uses Rector for automated refactoring. You can run it with:
```bash
# Using the composer script
composer rector
# Or directly
vendor/bin/rector
```
#### JavaScript/TypeScript Linting
The project uses ESLint for JavaScript/TypeScript code quality. You can run it with:
```bash
yarn run eslint
```
## Deployment
The project can be deployed in a production environment following Symfony's deployment guidelines. The documentation provides detailed instructions for setting up a production environment.
### Production Deployment Checklist
1. Set environment variables for production
2. Optimize Composer autoloader: `composer install --no-dev --optimize-autoloader`
3. Compile assets for production: `yarn run encore production`
4. Clear and warm up the cache: `php bin/console cache:clear --env=prod`
5. Run database migrations: `php bin/console doctrine:migrations:migrate --env=prod`
## Documentation
Comprehensive documentation is available in the `/docs/` directory, including installation instructions, configuration guides, and operational procedures.
## Development Workflow
1. **Create a Feature Branch**: Always create a new branch for your feature or bugfix
2. **Write Tests**: Write tests for your changes before implementing them
3. **Implement Changes**: Implement your changes following the project's coding standards
4. **Run Tests**: Make sure all tests pass
5. **Run Code Quality Tools**: Make sure your code passes all code quality checks
6. **Submit a Pull Request**: Submit a pull request for review
## Debugging
The project includes several tools for debugging:
- **Symfony Profiler**: Available in development mode at `/_profiler`
- **Xdebug**: Configure your IDE to use Xdebug for step-by-step debugging
- **Symfony Debug Toolbar**: Available at the bottom of the page in development mode
## Conclusion
When working with this project, Junie should:
1. Understand the modular bundle structure and how the different components interact
2. Build the project before submitting changes to ensure assets are properly compiled
3. Run relevant tests to ensure changes don't break existing functionality
4. Follow the established code style and patterns
5. Use the provided tools for debugging and code quality

View File

@@ -14,6 +14,7 @@ $finder = PhpCsFixer\Finder::create();
$finder
->in(__DIR__.'/src')
->in(__DIR__.'/utils')
->in(__DIR__.'/packages')
->append([__FILE__])
->exclude(['docs/', 'tests/app'])
->notPath('tests/app')

4
.prettierrc Normal file
View File

@@ -0,0 +1,4 @@
{
"tabWidth": 2,
"useTabs": false
}

View File

@@ -4,11 +4,11 @@ version: 2
build:
os: ubuntu-22.04
tools:
python: "3.7"
python: "3.11"
sphinx:
configuration: docs/source/conf.py
mkdocs:
configuration: docs/mkdocs.yml
python:
install:
- requirements: docs/requirements.txt
- requirements: docs/requirements.txt

30
.vscode/launch.json vendored Normal file
View File

@@ -0,0 +1,30 @@
{
// Use IntelliSense to learn about possible attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Chill Debug",
"type": "php",
"request": "launch",
"port": 9000,
"pathMappings": {
"/var/www/html": "${workspaceFolder}"
},
"preLaunchTask": "symfony"
},
{
"name": "Yarn Encore Dev (Watch)",
"type": "node-terminal",
"request": "launch",
"command": "yarn encore dev --watch",
"cwd": "${workspaceFolder}"
}
],
"compounds": [
{
"name": "Chill Debug + Yarn Encore Dev (Watch)",
"configurations": ["Chill Debug", "Yarn Encore Dev (Watch)"]
}
]
}

23
.vscode/tasks.json vendored Normal file
View File

@@ -0,0 +1,23 @@
{
"tasks": [
{
"type": "shell",
"command": "symfony",
"args": [
"server:start",
"--allow-http",
"--no-tls",
"--port=8000",
"--allow-all-ip",
"-d"
],
"label": "symfony"
},
{
"type": "shell",
"command": "yarn",
"args": ["encore", "dev", "--watch"],
"label": "webpack"
}
]
}

View File

@@ -6,6 +6,300 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html),
and is generated by [Changie](https://github.com/miniscruff/changie).
## v4.9.0 - 2025-12-05
### Feature
* ([#459](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/459)) Add a counter for invitations awaiting reply
### Fixed
* ([#475](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/475)) Do not suggest a user that is no longer active in the activity form.
* ([#441](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/441)) Remove double display of person id in the banner when there is a deathdate
### DX
* ([#280](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/280)) Add missing fixtures for proper loading of AccompanyingPeriods
* ([#386](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/386)) Use mkdocs with mkdocs-material instead of sphinx to build chill developer documentation
### UX
* ([#456](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/456)) Display whether doc generation template is active or not in admin and order templates alphabetically
* ([#460](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/460)) Display calendar item info on cancel page
* ([#424](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/424)) Display entire comment for activity item within list
* ([#474](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/474)) Improve accessibility of event form
## v4.8.2 - 2025-11-26
### Fixed
* ([#466](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/466)) Associate activity's creator as a participant by default, and retro-actively append the creator to each activity
**Schema Change**: Add columns or tables
* Fix template parameter for update_multiple route on event participations
### UX
* ([#470](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/470)) Alphabetically order userJobs and mainLocations within user creation form
* ([#437](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/437)) Change position and color of confirm parcours button
## v4.8.1 - 2025-11-20
### Fixed
* Insert name of file as the document title when uploading
* Add missing path paramater 'id' for editing multiple participations
* ([#471](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/471)) Hide the display of inactive user groups in the api
## v4.8.0 - 2025-11-17
### Feature
* ([#461](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/461)) Make a calendar item on the 'mes rendez-vous' page clickable. Clicking will navigate to the edit page of the calendar item.
### Fixed
* ([#463](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/463)) Display calendar items for which an invite was accepted on the mes rendez-vous page
* Improve accessibility on login page
### UX
* ([#449](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/449)) Remove the label if there is only one scope and no scope picking field is displayed.
## v4.7.0 - 2025-11-10
### Feature
* ([#385](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/385)) Create invitation list in user menu
* ([#404](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/404)) Add columns for comments linked to an activity in the activity list export
### Fixed
* ([#451](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/451)) Fix: display also social actions linked to parents of the selected social issue
* ([#453](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/453)) Fix: export actions and their results in csv even when action does not have any goals attached to it.
* Fix the possibility to delete a workflow
**Schema Change**: Drop or rename table or columns, or enforce new constraint that must be manually fixed
* ([#457](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/457)) Fix the fusion of thirdparty properties that are located in another schema than public for TO_ONE relations + add extra loop for MANY_TO_MANY relations where thirdparty is the source instead of the target
* ([#428](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/428)) Fix suggestion of referrer when creating notification for accompanyingPeriodWorkDocument
### DX
* Send notifications log to dedicated channel, if it exists
### UX
* ([#425](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/425)) Change the terms 'cercle' and 'centre' to 'service', and 'territoire' respectively.
* ([#542](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/542)) Improve the ux for selecting whether user wants to be notified of the final step of a workflow or all steps
* Expand timeSpent choices for evaluation document and translate them to user locale or fallback 'fr'
* ([#455](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/455)) Change the order of display for results and objectives in the social work/action form
* Wrap text when it is too long within badges
## v4.6.1 - 2025-10-27
### Fixed
* Fix export case where no 'reason' is picked within the PersonHavingActivityBetweenDateFilter.php
## v4.6.0 - 2025-10-15
### Feature
* ([#423](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/423)) Create environment banner that can be activated and configured depending on the image deployed
* ([#394](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/394)) Only show active workflow on the page "my tracked workflow"
### Fixed
* Fix loading of classLists in SocialIssuesAcc.vue, ensure elements are present
* Fix the rendering of list of StoredObjectVersions, where there are kept version (before converting to pdf) and intermediate versions deleted
* ([#434](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/434)) Notification: fix editing of sent notification by removing form.addressesEmails, a field that no longer exists
* Fix loading of social issues and social actions within vue component
* ([#446](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/446)) Add unique condition on stored object filename, with cleaning step on existing duplicate filenames
**Schema Change**: Drop or rename table or columns, or enforce new constraint that must be manually fixed
* [workflow] take permissions into account to delete the workflow attachment
* ([#448](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/448)) Fix the execution of daily cronjob notification, when the previous last execution storage was invalid
## v4.5.1 - 2025-10-03
### Fixed
* Add missing javascript dependency
* Add exception handling for conversion of attachment on sending external, when documens are already in pdf
## v4.5.0 - 2025-10-03
### Feature
* Only allow delete of attachment on workflows that are not final
* Move up signature buttons on index workflow page for easier access
* Filter out document from attachment list if it is the same as the workflow document
* Block edition on attached document on workflow, if the workflow is finalized or sent external
* Convert workflow's attached document to pdf while sending them external
* After a signature is canceled or rejected, going to a waiting page until the post-process routines apply a workflow transition
### Fixed
* ([#426](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/426)) Increased the number of required characters when setting a new password in Chill from 9 to 14 - GDPR compliance
* Fix permissions on storedObject which are subject by a workflow
### DX
* Introduce a WaitingScreen component to display a waiting screen
## v4.4.2 - 2025-09-12
### Fixed
* Fix document generation and workflow generation do not work on accompanying period work documents
## v4.4.1 - 2025-09-11
### Fixed
* fix translations in duplicate evaluation document modal and realign close modal button
## v4.4.0 - 2025-09-11
### Feature
* ([#359](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/359)) Allow the merge of two accompanying period works
* ([#369](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/369)) Duplication of a document to another accompanying period work evaluation
* ([#359](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/359)) Fusion of two accompanying period works
### Fixed
* Fix display of 'duplicate' and 'merge' buttons in CRUD templates
* Fix saving notification preferences in user's profile
## v4.3.0 - 2025-09-08
### Feature
* ([#409](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/409)) Add 45 and 60 min calendar ranges
* Add a command to generate a list of permissions
* ([#412](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/412)) Add an absence end date
**Schema Change**: Add columns or tables
### Fixed
* fix date formatting in calendar range display
* Change route URL to avoid clash with person duplicate controller method
## v4.2.1 - 2025-09-03
### Fixed
* Fix exports to work with DirectExportInterface
### DX
* Improve error message when a stored object cannot be written on local disk
## v4.2.0 - 2025-09-02
### Feature
* ([#64](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/64)) Add external identifier for a Person
**Schema Change**: Add columns or tables
* ([#330](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/330) Allow users to choose for which notifications they want to receive an email
### Fixed
* ([#422](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/422)) Fixed html layout of pages for recovering password
* Fix typo in 'uncheckAll' script for centers selection
* Fix incorrect parameter name in event details link
## v4.1.0 - 2025-08-26
### Feature
* ([#400](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/400)) Add filter to social actions list to filter out actions where current user intervenes
* ([#399](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/399)) Show filters on list pages unfolded by default
* Expansion of event module with new fields in the creation form: thematic, internal/external animator, responsable, and budget elements. Filtering options in the event list + adapted exports
**Schema Change**: Add columns or tables
### Fixed
* ([#382](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/382)) adjust display logic for accompanying period dates, include closing date if period is closed.
* ([#384](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/384)) add min and step attributes to integer field in DateIntervalType
### UX
* Limit display of participations in event list
## v4.0.2 - 2025-07-09
### Fixed
* Fix add missing translation
* Fix the transfer of evaluations and documents during of accompanyingperiodwork
## v4.0.1 - 2025-07-08
### Fixed
* Fix package.json for compilation
## v4.0.0 - 2025-07-08
### Feature
* ([#359](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/359)) Allow the merge of two accompanying period works
### Fixed
* ([#390](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/390)) Display the list of participant in the results, even if there is only one participant and that the search result display the requestor
* Fix admin entity edit actions for event admin entities and activity reason (category) entities
* Fix translations for social action fields in admin form: results, goals, evaluations
### DX
* Rewrite exports to run them asynchronously
**Schema Change**: Add columns or tables
* Allow TranslatableMessage in flash messages
### UX
* Improve labeling of fields in person resource creation form
**Release notes**
- Add new methods to serialize data using the rector rule
- Remove all references to the Request in filters, aggregators, filters. Actually, the most frequent occurence is `$security->getUser()`.
- Refactor manually the initializeQuery method
- Remove the injection of ExportManager into the constructor of each export element:
```diff
- class MyFormatter implements FormatterInterface
+ class MyFormatter implements FormatterInterface, \Chill\MainBundle\Export\ExportManagerAwareInterface
{
+ use \Chill\MainBundle\Export\Helper\ExportManagerAwareTrait;
- public function __construct(private ExportManager $exportmanager) {}
public function MyMethod(): void
{
- $this->exportManager->getFilter('alias');
+ $this->getExportManager()->getFilter('alias');
}
}
```
- configure messenger to handle export in a queue:
```diff
# config/packages/messenger.yaml
framework:
messenger:
routing:
+ 'Chill\MainBundle\Export\Messenger\ExportRequestGenerationMessage': priority
```
- add missing methods to exports, aggregators, filters, formatter:
```php
public function normalizeFormData(array $formData): array;
public function denormalizeFormData(array $formData, int $fromVersion): array;
```
There are rector rules to generate those methods:
- `Chill\Utils\Rector\Rector\ChillBundleAddNormalizationMethodsOnExportRector`
See:
```php
// upgrade chill exports
$rectorConfig->rules([\Chill\Utils\Rector\Rector\ChillBundleAddNormalizationMethodsOnExportRector::class]);
```
This rule will create most of the work necessary, but some manuals changes are still necessary:
- we must set manually the correct repository for method `denormalizeDoctrineEntity`;
- when the form data contains some entities, and the form type is not one of EntityType::class, PickUserDynamicType::class, PickUserLocationType::class, PickThirdpartyDynamicType::class, Select2CountryType::class, then we must handle the normalization manually (using the `\Chill\MainBundle\Export\ExportDataNormalizerTrait`)
## v3.12.1 - 2025-06-30
### Fixed
* Fix loading of the list of documents
## v3.12.0 - 2025-06-30
### Feature
* ([#377](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/377)) Add the document file name to the document title when a user upload a document, unless there is already a document title.
* Add desactivation date for social action and issue csv export
* Add Emoji and Fullscreen feature to ckeditor configuration
* ([#321](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/321)) Create editor which allow us to toggle between rich and simple text editor
* Do not remove workflow which are automatically canceled after staling for more than 30 days
### Fixed
* ([#376](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/376)) trying to prevent bug of typeerror in doc-history + improved display of document history
* ([#381](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/381)) Display previous participation in acc course work even if the person has left the acc course
* ([#372](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/372)) Fix display of text in calendar events
* Add missing translation for user_group.no_user_groups
* Fix admin entity edit actions for event admin entities and activity reason (category) entities
* ([#392](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/392)) Allow null and cast as string to setContent method for NewsItem
* ([#393](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/393)) Doc Generation: the "dump only" method send the document as an email attachment.
### DX
* ([#352](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/352)) Remove dead code for wopi-link module
* Replace library node-sass by sass, and upgrade bootstrap to version 5.3 (yarn upgrade / install is required)
### UX
* ([#374](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/374)) Remove default filter in_progress for the page 'my tasks'; Allows for new tasks to be displayed upon opening of the page
* Improve labeling of fields in person resource creation form
## v3.11.0 - 2025-04-17
### Feature
* ([#365](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/365)) Add counters of actions and activities, with 2 boxes to (1) show the number of active actions on total actions and (2) show the number of activities in a accompanying period, and pills in menus for showing the number of active actions and the number of activities.
* ([#364](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/364)) Added a second phone number "telephone2" to the thirdParty entity. Adapted twig templates and vuejs apps to handle this phone number
**Schema Change**: Add columns or tables
* Signature: add a button to go directly to the signature zone, even if there is only one
### Fixed
* Fixed wrong translations in the on-the-fly for creation of thirdParty
* Fixed update of phone number in on-the-fly edition of thirdParty
* Fixed closing of modal when editing thirdParty in accompanying course works
* Shorten the delay between two execution of AccompanyingPeriodStepChangeCronjob, to ensure at least one execution in a day
* ([#102](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/102)) Fix display of title in document list
* When cleaning the old stored object versions, do not throw an error if the stored object is not found on disk
* Add consistent log prefix and key to logs when stale workflows are automatically canceled
* ([#380](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/380)) Remove the "not null" validation constraint on recently added properties on HouseholdComposition
### DX
* Add new chill-col style for displaying title and aside in a flex table
## v3.10.3 - 2025-03-18
### DX
* Eslint fixes

View File

@@ -54,7 +54,7 @@ Arborescence:
- person
- personvendee
- household_edit_metadata
- index.js
- index.ts
```
## Organisation des feuilles de styles

View File

@@ -1,7 +1,12 @@
import { trans, setLocale, setLocaleFallbacks } from "./ux-translator";
import {
trans,
setLocale,
getLocale,
setLocaleFallbacks,
} from "./ux-translator";
setLocaleFallbacks({"en": "fr", "nl": "fr", "fr": "en"});
setLocale('fr');
setLocaleFallbacks({ en: "fr", nl: "fr", fr: "en" });
setLocale("fr");
export { trans };
export * from '../var/translations';
export { trans, getLocale };
export * from "../var/translations";

View File

@@ -7,6 +7,13 @@
"chill",
"social worker"
],
"repositories": [{
"type": "path",
"url": "./packages/ChillZimbraBundle",
"options": {
"symlink": true
}
}],
"require": {
"php": "^8.2",
"ext-dom": "*",
@@ -14,7 +21,8 @@
"ext-openssl": "*",
"ext-redis": "*",
"ext-zlib": "*",
"champs-libres/wopi-bundle": "dev-master@dev",
"chill-project/chill-zimbra-bundle": "@dev",
"champs-libres/wopi-bundle": "dev-symfony-v5@dev",
"champs-libres/wopi-lib": "dev-master@dev",
"doctrine/data-fixtures": "^1.8",
"doctrine/doctrine-bundle": "^2.1",
@@ -54,6 +62,7 @@
"symfony/http-client": "^5.4",
"symfony/http-foundation": "^5.4",
"symfony/intl": "^5.4",
"symfony/loco-translation-provider": "^6.0",
"symfony/mailer": "^5.4",
"symfony/messenger": "^5.4",
"symfony/mime": "^5.4",
@@ -133,6 +142,7 @@
"Chill\\TaskBundle\\": "src/Bundle/ChillTaskBundle",
"Chill\\ThirdPartyBundle\\": "src/Bundle/ChillThirdPartyBundle",
"Chill\\WopiBundle\\": "src/Bundle/ChillWopiBundle/src",
"Chill\\TicketBundle\\": "src/Bundle/ChillTicketBundle/src",
"Chill\\Utils\\Rector\\": "utils/rector/src"
}
},

View File

@@ -2,7 +2,6 @@
return [
Symfony\Bundle\FrameworkBundle\FrameworkBundle::class => ['all' => true],
loophp\PsrHttpMessageBridgeBundle\PsrHttpMessageBridgeBundle::class => ['all' => true],
ChampsLibres\WopiBundle\WopiBundle::class => ['all' => true],
Doctrine\Bundle\DoctrineBundle\DoctrineBundle::class => ['all' => true],
Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle::class => ['dev' => true, 'test' => true],
@@ -35,6 +34,9 @@ return [
Chill\ThirdPartyBundle\ChillThirdPartyBundle::class => ['all' => true],
Chill\BudgetBundle\ChillBudgetBundle::class => ['all' => true],
Chill\WopiBundle\ChillWopiBundle::class => ['all' => true],
Chill\TicketBundle\ChillTicketBundle::class => ['all' => true],
Symfony\Bundle\WebProfilerBundle\WebProfilerBundle::class => ['dev' => true, 'test' => true],
Symfony\UX\Translator\UxTranslatorBundle::class => ['all' => true],
loophp\PsrHttpMessageBridgeBundle\PsrHttpMessageBridgeBundle::class => ['all' => true],
Chill\ZimbraBundle\ChillZimbraBundle::class => ['all' => true],
];

View File

@@ -1,6 +1,13 @@
chill_main:
available_languages: [ '%env(resolve:LOCALE)%', 'en' ]
available_languages: [ '%env(resolve:LOCALE)%', 'en', 'nl' ]
available_countries: ['BE', 'FR']
top_banner:
visible: false
text:
fr: 'Vous travaillez actuellement avec la version de PRÉ-PRODUCTION.'
nl: 'Je werkt momenteel in de PRE-PRODUCTIE versie'
color: '#353535'
background_color: '#d8bb48'
notifications:
from_email: '%env(resolve:NOTIFICATION_FROM_EMAIL)%'
from_name: '%env(resolve:NOTIFICATION_FROM_NAME)%'
@@ -17,6 +24,7 @@ chill_main:
acl:
form_show_scopes: true
form_show_centers: true
filter_stats_by_center: true
access_global_history: false
access_user_change_password: true
access_permissions_group_list: true

View File

@@ -0,0 +1,2 @@
chill_aside_activity:
show_concerned_persons_count: hidden

View File

@@ -1,5 +1,5 @@
chill_doc_store:
use_driver: openstack
use_driver: local_storage
local_storage:
storage_path: '%kernel.project_dir%/var/storage'
openstack:

View File

@@ -0,0 +1,5 @@
chill_ticket:
ticket:
person_per_ticket: one # One of "one"; "many"
response_time_exceeded_delay: PT12H

View File

@@ -14,6 +14,7 @@ doctrine_migrations:
'Chill\Migrations\Calendar': '@ChillCalendarBundle/migrations'
'Chill\Migrations\Budget': '@ChillBudgetBundle/migrations'
'Chill\Migrations\Report': '@ChillReportBundle/migrations'
'Chill\Migrations\Ticket': '@ChillTicketBundle/migrations'
all_or_nothing:
true

View File

@@ -5,7 +5,6 @@ framework:
# Uncomment this (and the failed transport below) to send failed messages to this transport for later handling.
failure_transport: failed
transports:
# those transports are added by chill-bundles recipes
sync: sync://
@@ -19,7 +18,9 @@ framework:
async: ~
auto_setup: true
priority: '%env(MESSENGER_TRANSPORT_DSN)%/priority'
priority:
dsn: '%env(MESSENGER_TRANSPORT_DSN)%/priority'
# end of transports added by chill-bundles recipes
# https://symfony.com/doc/current/messenger.html#transport-configuration
failed: 'doctrine://default?queue_name=failed'
@@ -61,6 +62,11 @@ framework:
'Chill\MainBundle\Workflow\Messenger\PostSignatureStateChangeMessage': priority
'Chill\MainBundle\Workflow\Messenger\PostPublicViewMessage': async
'Chill\MainBundle\Service\Workflow\CancelStaleWorkflowMessage': async
'Chill\MainBundle\Notification\Email\NotificationEmailMessages\SendImmediateNotificationEmailMessage': async
'Chill\MainBundle\Export\Messenger\ExportRequestGenerationMessage': priority
'Chill\MainBundle\Export\Messenger\RemoveExportGenerationMessage': async
'Chill\MainBundle\Notification\Email\NotificationEmailMessages\ScheduleDailyNotificationDigestMessage': async
'Chill\TicketBundle\Messenger\PostTicketUpdateMessage': async
# end of routes added by chill-bundles recipes
# Route your messages to the transports
# 'App\Message\YourMessage': async

View File

@@ -1,7 +1,12 @@
# config/packages/translation.yaml
framework:
default_locale: en
default_locale: '%env(resolve:LOCALE)%' # LOCALE=fr in .env
translator:
default_path: '%kernel.project_dir%/translations'
fallbacks:
- en
- '%env(resolve:LOCALE)%' # fr
providers:
loco:
dsn: '%env(LOCO_DSN)%'
domains: [ 'messages' ]
locales: [ 'fr', 'nl' ]

View File

@@ -1,4 +0,0 @@
framework:
default_locale: '%env(resolve:LOCALE)%'
translator:
fallbacks: [ '%env(resolve:LOCALE)%' ]

View File

@@ -220,6 +220,7 @@ framework:
- attenteModification
- attenteMiseEnForme
- attenteValidationMiseEnForme
- attenteSignature
- attenteVisa
- postSignature
- attenteTraitement

View File

@@ -0,0 +1,2 @@
chill_ticket_bundle:
resource: '@ChillTicketBundle/config/routes.yaml'

View File

@@ -1,177 +1,34 @@
# Makefile for Sphinx documentation
# Makefile for MkDocs documentation
#
# You can set these variables from the command line.
SPHINXOPTS =
SPHINXBUILD = sphinx-build
PAPER =
BUILDDIR = build
MKDOCS = mkdocs
BUILDDIR = site
# User-friendly check for sphinx-build
ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1)
$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/)
# User-friendly check for mkdocs
ifeq ($(shell which $(MKDOCS) >/dev/null 2>&1; echo $$?), 1)
$(error The '$(MKDOCS)' command was not found. Make sure you have MkDocs installed with 'pip install mkdocs mkdocs-material', then make sure the mkdocs executable is in your PATH.)
endif
# Internal variables.
PAPEROPT_a4 = -D latex_paper_size=a4
PAPEROPT_letter = -D latex_paper_size=letter
ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source
# the i18n builder cannot share the environment and doctrees with the others
I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source
.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext
.PHONY: help clean html build serve
help:
@echo "Please use \`make <target>' where <target> is one of"
@echo " html to make standalone HTML files"
@echo " dirhtml to make HTML files named index.html in directories"
@echo " singlehtml to make a single large HTML file"
@echo " pickle to make pickle files"
@echo " json to make JSON files"
@echo " htmlhelp to make HTML files and a HTML help project"
@echo " qthelp to make HTML files and a qthelp project"
@echo " devhelp to make HTML files and a Devhelp project"
@echo " epub to make an epub"
@echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
@echo " latexpdf to make LaTeX files and run them through pdflatex"
@echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx"
@echo " text to make text files"
@echo " man to make manual pages"
@echo " texinfo to make Texinfo files"
@echo " info to make Texinfo files and run them through makeinfo"
@echo " gettext to make PO message catalogs"
@echo " changes to make an overview of all changed/added/deprecated items"
@echo " xml to make Docutils-native XML files"
@echo " pseudoxml to make pseudoxml-XML files for display purposes"
@echo " linkcheck to check all external links for integrity"
@echo " doctest to run all doctests embedded in the documentation (if enabled)"
@echo " html to build the documentation (same as build)"
@echo " build to build the documentation"
@echo " serve to start the development server"
@echo " clean to clean the build directory"
clean:
rm -rf $(BUILDDIR)/*
html:
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
html: build
build:
$(MKDOCS) build
@echo
@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
@echo "Build finished. The HTML pages are in $(BUILDDIR)/."
dirhtml:
$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
@echo
@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
singlehtml:
$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
@echo
@echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
pickle:
$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
@echo
@echo "Build finished; now you can process the pickle files."
json:
$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
@echo
@echo "Build finished; now you can process the JSON files."
htmlhelp:
$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
@echo
@echo "Build finished; now you can run HTML Help Workshop with the" \
".hhp project file in $(BUILDDIR)/htmlhelp."
qthelp:
$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
@echo
@echo "Build finished; now you can run "qcollectiongenerator" with the" \
".qhcp project file in $(BUILDDIR)/qthelp, like this:"
@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/chill-doc.qhcp"
@echo "To view the help file:"
@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/chill-doc.qhc"
devhelp:
$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
@echo
@echo "Build finished."
@echo "To view the help file:"
@echo "# mkdir -p $$HOME/.local/share/devhelp/chill-doc"
@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/chill-doc"
@echo "# devhelp"
epub:
$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
@echo
@echo "Build finished. The epub file is in $(BUILDDIR)/epub."
latex:
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
@echo
@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
@echo "Run \`make' in that directory to run these through (pdf)latex" \
"(use \`make latexpdf' here to do that automatically)."
latexpdf:
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
@echo "Running LaTeX files through pdflatex..."
$(MAKE) -C $(BUILDDIR)/latex all-pdf
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
latexpdfja:
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
@echo "Running LaTeX files through platex and dvipdfmx..."
$(MAKE) -C $(BUILDDIR)/latex all-pdf-ja
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
text:
$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
@echo
@echo "Build finished. The text files are in $(BUILDDIR)/text."
man:
$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
@echo
@echo "Build finished. The manual pages are in $(BUILDDIR)/man."
texinfo:
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
@echo
@echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
@echo "Run \`make' in that directory to run these through makeinfo" \
"(use \`make info' here to do that automatically)."
info:
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
@echo "Running Texinfo files through makeinfo..."
make -C $(BUILDDIR)/texinfo info
@echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
gettext:
$(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
@echo
@echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
changes:
$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
@echo
@echo "The overview file is in $(BUILDDIR)/changes."
linkcheck:
$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
@echo
@echo "Link check complete; look for any errors in the above output " \
"or in $(BUILDDIR)/linkcheck/output.txt."
doctest:
$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
@echo "Testing of doctests in the sources finished, look at the " \
"results in $(BUILDDIR)/doctest/output.txt."
xml:
$(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml
@echo
@echo "Build finished. The XML files are in $(BUILDDIR)/xml."
pseudoxml:
$(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml
@echo
@echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml."
serve:
$(MKDOCS) serve
@echo "Development server started at http://127.0.0.1:8000/"

View File

@@ -10,20 +10,26 @@ Compilation into HTML
To compile this documentation :
1. Install [sphinx-doc](http://sphinx-doc.org)
1. Install [MkDocs](https://www.mkdocs.org/) and MkDocs Material
``` bash
$ virtualenv .venv # creation of the virtual env (only the first time)
$ source .venv/bin/activate # activate the virtual env
(.venv) $ pip install -r requirements.txt
```
2. Install submodules : $ git submodule update --init;
3. run `make html` from the root directory
4. The base file is located on build/html/index.html
3. run `make html` or `mkdocs build` from the root directory
4. The base file is located on site/index.html
``` bash
$ cd build/html
$ cd site
$ python -m http.server 8888 # will serve the site on the port 8888
```
Alternatively, you can use the built-in development server:
``` bash
(.venv) $ mkdocs serve
```
This will start a development server at http://127.0.0.1:8000/ with live reload.
Contribute
===========

137
docs/mkdocs.yml Normal file
View File

@@ -0,0 +1,137 @@
site_name: Chill Documentation
site_description: Documentation for Chill - A free software for social workers
site_url: https://docs.chill.social
repo_url: https://gitlab.com/Chill-project/chill-bundles
repo_name: Chill-project/chill-bundles
docs_dir: source
copyright: Copyright &copy; 2014-2024 Champs-Libres Cooperative SCRLFS - GNU Free Documentation License v1.3
theme:
name: material
language: en
features:
- navigation.tabs
- navigation.tabs.sticky
- navigation.sections
- navigation.expand
- navigation.path
- navigation.top
- search.highlight
- search.share
- search.suggest
- toc.follow
- content.code.copy
- content.code.annotate
palette:
# Palette toggle for light mode
- scheme: default
primary: blue
accent: blue
toggle:
icon: material/brightness-7
name: Switch to dark mode
# Palette toggle for dark mode
- scheme: slate
primary: blue
accent: blue
toggle:
icon: material/brightness-4
name: Switch to light mode
font:
text: Roboto
code: Roboto Mono
plugins:
- search
- autorefs
markdown_extensions:
- admonition
- pymdownx.details
- pymdownx.superfences
- pymdownx.highlight:
anchor_linenums: true
line_spans: __span
pygments_lang_class: true
- pymdownx.inlinehilite
- pymdownx.snippets
- pymdownx.tabbed:
alternate_style: true
- pymdownx.tasklist:
custom_checkbox: true
- toc:
permalink: true
- tables
- attr_list
- md_in_html
nav:
- Home: index.md
- Installation:
- installation/index.md
- Development: installation/installation-development.md
- Production: installation/installation-production.md
- Document Storage: installation/document-storage.md
- Load Addresses: installation/load-addresses.md
- Production Setup: installation/prod.md
- Calendar SMS: installation/prod-calendar-sms-sending.md
- MS Graph Configuration: installation/msgraph-configure.md
- Enable Collabora: installation/enable-collabora-for-dev.md
- Development:
- development/index.md
- Access Control: development/access_control_model.md
- API: development/api.md
- Assets: development/assets.md
- Code Quality: development/code-quality.md
- Create Bundle: development/create-a-new-bundle.md
- Cronjobs: development/cronjob.md
- CRUD: development/crud.md
- Database Principles: development/database-principles.md
- Embeddable Comments: development/embeddable-comments.md
- Entity Info: development/entity-info.md
- ESLint: development/es-lint.md
- Exports: development/exports.md
- FAQ: development/FAQ.md
- Forms: development/forms.md
- Localisation: development/localisation.md
- Logging: development/logging.md
- Manual:
- development/manual/index.md
- Routing and Menus: development/manual/routing-and-menus.md
- Menus: development/menus.md
- Messages to Users: development/messages-to-users.md
- Migrations: development/migrations.md
- Pagination: development/pagination.md
- Render Entity: development/render-entity.md
- Routing: development/routing.md
- Run Tests: development/run-tests.md
- Searching: development/searching.md
- Timelines: development/timelines.md
- Useful Snippets: development/useful-snippets.md
- User Interface:
- CSS Classes: development/user-interface/css-classes.md
- JS Functions: development/user-interface/js-functions.md
- Layout Template: development/user-interface/layout-template-usage.md
- Widgets: development/user-interface/widgets.md
- Bundles:
- bundles/index.md
- Activity: bundles/activity.md
- Custom Fields: bundles/custom-fields.md
- Event: bundles/event.md
- Group: bundles/group.md
- LDAP: bundles/ldap.md
- Main: bundles/main.md
- Person: bundles/person.md
- Report: bundles/report.md
extra:
social:
- icon: fontawesome/brands/gitlab
link: https://gitlab.com/Chill-project
- icon: fontawesome/solid/comments
link: https://app.element.io/#/room/#chill-social-admin:matrix.org

View File

@@ -1,7 +1,4 @@
docutils==0.13.1
Pygments==2.2.0
sphinx==1.8.5
Jinja2<3.1
git+https://github.com/fabpot/sphinx-php.git@v2.0.2#egg_name=sphinx-php
jsx-lexer===0.0.8
sphinx_rtd_theme==0.5.0
mkdocs>=1.5.3
mkdocs-material>=9.4.0
pymdown-extensions>=10.3.0
mkdocs-autorefs>=0.5.0

View File

@@ -23,8 +23,8 @@ class "Document" {
- text description
- ArrayCollection_DocumentCategory categories
- varchar_150 content #link to openstack
- Center center
- Cercle cercle
- Territoire territoire
- Service service
- User user
- DateTime date # Creation date
}

View File

@@ -12,6 +12,7 @@ declare(strict_types=1);
namespace Chill\PersonBundle\Export\Filter;
use Chill\MainBundle\Export\ExportElementValidatedInterface;
use Chill\MainBundle\Export\ExportGenerationContext;
use Chill\MainBundle\Export\FilterInterface;
use DateTime;
use Doctrine\ORM\Query\Expr;
@@ -20,6 +21,7 @@ use Symfony\Component\Validator\Context\ExecutionContextInterface;
class BirthdateFilter implements ExportElementValidatedInterface, FilterInterface
{
use \Chill\MainBundle\Export\ExportDataNormalizerTrait;
// add specific role for this filter
public function addRole(): ?string
{
@@ -28,7 +30,7 @@ class BirthdateFilter implements ExportElementValidatedInterface, FilterInterfac
}
// here, we alter the query created by Export
public function alterQuery(\Doctrine\ORM\QueryBuilder $qb, $data)
public function alterQuery(\Doctrine\ORM\QueryBuilder $qb, $data, \Chill\MainBundle\Export\ExportGenerationContext $exportGenerationContext): void
{
$where = $qb->getDQLPart('where');
// we create the clause here
@@ -52,13 +54,13 @@ class BirthdateFilter implements ExportElementValidatedInterface, FilterInterfac
}
// we give information on which type of export this filter applies
public function applyOn()
public function applyOn(): string
{
return 'person';
}
// we build a form to collect some parameters from the users
public function buildForm(\Symfony\Component\Form\FormBuilderInterface $builder)
public function buildForm(\Symfony\Component\Form\FormBuilderInterface $builder): void
{
$builder->add('date_from', DateType::class, [
'label' => 'Born after this date',
@@ -74,6 +76,18 @@ class BirthdateFilter implements ExportElementValidatedInterface, FilterInterfac
'format' => 'dd-MM-yyyy',
]);
}
public function getNormalizationVersion(): int
{
return 1;
}
public function normalizeFormData(array $formData): array
{
return ['date_from' => $this->normalizeDate($formData['date_from']), 'date_to' => $this->normalizeDate($formData['date_to'])];
}
public function denormalizeFormData(array $formData, int $fromVersion): array
{
return ['date_from' => $this->denormalizeDate($formData['date_from']), 'date_to' => $this->denormalizeDate($formData['date_to'])];
}
public function getFormDefaultData(): array
{
return ['date_from' => new DateTime(), 'date_to' => new DateTime()];
@@ -81,7 +95,7 @@ class BirthdateFilter implements ExportElementValidatedInterface, FilterInterfac
// here, we create a simple string which will describe the action of
// the filter in the Response
public function describeAction($data, $format = 'string')
public function describeAction($data, ExportGenerationContext $context): string|\Symfony\Contracts\Translation\TranslatableInterface|array
{
return ['Filtered by person\'s birtdate: '
. 'between %date_from% and %date_to%', [
@@ -90,7 +104,7 @@ class BirthdateFilter implements ExportElementValidatedInterface, FilterInterfac
], ];
}
public function getTitle()
public function getTitle(): string|\Symfony\Contracts\Translation\TranslatableInterface
{
return 'Filter by person\'s birthdate';
}
@@ -99,7 +113,7 @@ class BirthdateFilter implements ExportElementValidatedInterface, FilterInterfac
// is executed here. This function is added by the interface
// `ExportElementValidatedInterface`, and can be ignore if there is
// no need for a validation
public function validateForm($data, ExecutionContextInterface $context)
public function validateForm($data, ExecutionContextInterface $context): void
{
$date_from = $data['date_from'];
$date_to = $data['date_to'];

View File

@@ -36,6 +36,18 @@ class CountPerson implements ExportInterface
{
// this export does not add any form
}
public function getNormalizationVersion(): int
{
return 1;
}
public function normalizeFormData(array $formData): array
{
return [];
}
public function denormalizeFormData(array $formData, int $fromVersion): array
{
return [];
}
public function getFormDefaultData(): array
{
return [];
@@ -60,29 +72,29 @@ class CountPerson implements ExportInterface
};
}
public function getQueryKeys($data)
public function getQueryKeys($data): array
{
// this array match the result keys in the query. We have only
// one column.
return ['export_result'];
}
public function getResult($query, $data)
public function getResult($query, $data, \Chill\MainBundle\Export\ExportGenerationContext $context): array
{
return $query->getQuery()->getResult(Query::HYDRATE_SCALAR);
}
public function getTitle()
public function getTitle(): string|\Symfony\Contracts\Translation\TranslatableInterface
{
return 'Count peoples';
}
public function getType()
public function getType(): string
{
return Declarations::PERSON_TYPE;
}
public function initiateQuery(array $requiredModifiers, array $acl, array $data = [])
public function initiateQuery(array $requiredModifiers, array $acl, array $data, \Chill\MainBundle\Export\ExportGenerationContext $context): \Doctrine\ORM\QueryBuilder
{
// we gather all center the user choose.
$centers = array_map(static fn ($el) => $el['center'], $acl);

View File

@@ -0,0 +1,49 @@
# Activity bundle
This bundle provides the ability to record people in the software. This bundle is required by other bundle.
###### Entities provided
Describe the entities provided.
###### Configuration options
Those options are available under `chill_activity` key.
Example of configuration:
```yaml
chill_activity:
form:
time_duration:
- { label: '12 minutes', seconds: 720 }
- { label: '30 minutes', seconds: 1800 }
```
form.time_duration *array*
The duration which might be suggested when the user create or update an activity. The value must be an array of object, where each object must have a `label` and a `seconds` key. The label provide which is shown to user (the label will be translated, if possible) and the seconds the duration.
Example: see the example above
Default value: the values available are 5, 10, 15, 20, 25, 30, 45 minutes, and 1 hour, 1 hour 15, 1 hour 30, 1 hour 45 and 2 hours.
###### Macros
## Activity reason sticker
Macro file
`ChillActivityBundle:ActivityReason:macro.html.twig`
Macro envelope
`reason(r)`
`p` is an instance of :class:`Chill\ActivityBundle\Entity\ActivityReason`
When to use this macro ?
When you want to represent an activity reason.
Example usage :
```jinja
{% import 'ChillActivityBundle:ActivityReason:macro.html.twig' as m %}
{{ m.reason(r) }}
```

View File

@@ -1,71 +0,0 @@
.. Copyright (C) 2014 Champs Libres Cooperative SCRLFS
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
or any later version published by the Free Software Foundation;
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
A copy of the license is included in the section entitled "GNU
Free Documentation License".
.. _activity-bundle:
Activity bundle
###############
This bundle provides the ability to record people in the software. This bundle is required by other bundle.
.. contents:: Table of content
:local:
Entities provided
*****************
.. todo::
Describe the entities provided.
Configuration options
*********************
Those options are available under `chill_activity` key.
Example of configuration:
.. code-block:: yaml
chill_activity:
form:
time_duration:
- { label: '12 minutes', seconds: 720 }
- { label: '30 minutes', seconds: 1800 }
form.time_duration *array*
The duration which might be suggested when the user create or update an activity. The value must be an array of object, where each object must have a :code:`label` and a :code:`seconds` key. The label provide which is shown to user (the label will be translated, if possible) and the seconds the duration.
Example: see the example above
Default value: the values available are 5, 10, 15, 20, 25, 30, 45 minutes, and 1 hour, 1 hour 15, 1 hour 30, 1 hour 45 and 2 hours.
.. _activity-bundle-macros:
Macros
******
Activity reason sticker
=======================
Macro file
`ChillActivityBundle:ActivityReason:macro.html.twig`
Macro envelope
:code:`reason(r)`
:code:`p` is an instance of :class:`Chill\ActivityBundle\Entity\ActivityReason`
When to use this macro ?
When you want to represent an activity reason.
Example usage :
.. code-block:: html+jinja
{% import 'ChillActivityBundle:ActivityReason:macro.html.twig' as m %}
{{ m.reason(r) }}

View File

@@ -1,15 +1,4 @@
.. Copyright (C) 2014 Champs Libres Cooperative SCRLFS
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
or any later version published by the Free Software Foundation;
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
A copy of the license is included in the section entitled "GNU
Free Documentation License".
.. _custom-fields-bundle:
Custom fields bundle
====================
## Custom fields bundle
This bundle provides the ability to add custom fields to existing entities.
@@ -17,79 +6,63 @@ Those custom fields contains extra data and will be stored in the DB, along with
In the database, custom fields are stored in json format.
.. seealso::
The full specification discussed [here](https://redmine.champs-libres.coop/issues/239)
The full specification discussed `here. <https://redmine.champs-libres.coop/issues/239>`_
`JSON Type on postgresql documentation <http://www.postgresql.org/docs/9.3/static/datatype-json.html>`_
[JSON Type on postgresql documentation](http://www.postgresql.org/docs/9.3/static/datatype-json.html)
The documentation of json type, which is used to store data in the database.
.. contents:: Table of contents
:depth: 4
:local:
Custom Fields concepts
----------------------
### Custom Fields concepts
Custom fields are extra data which may be added to entities by user. If a developer implements custom fields on a entity, users will be able to add more fields on this entity.
Example: the `person bundle` allows to record `firstname`, `lastname`, `date of birth` fields. But users need to store information about the kind of house he has (if he owns his house, if he rents it, ...). Custom fields allows to create those fields.
Example: the [person bundle` allows to record `firstname`, `lastname`, `date of birth` fields. But users need to store information about the kind of house he has (if he owns his house, if he rents it, ...). Custom fields allows to create those fields.
Automatically, those fields are added at the person form. They are also printed in the person view and in exports.
Custom fields and custom fields group
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
##### Custom fields and custom fields group
Custom fields are associated to a custom fields group. When a user want to add custom fields on an entity, he must first create a custom fields group and associate this field with an entity. Then he may add add custom fields to this groups.
Custom fields are associated to a custom fields group. When a user want to add custom fields on an entity, he must first create a custom fields group and associate this field with an entity. Then he may add add custom fields to this groups.
Some entities needs a **default** custom fields group. For instance, the default custom fields group will be printed on the main form for person, and will be appended on the main person view. Some bundle does not use this feature (i.e. the `report` bundle).
.. note::
In the future of the `person bundle`, other custom fields group will be added in forms accessible from the menu, allowing users to completely customize and separate their entities.
Allow custom fields on an entity
--------------------------------
### Allow custom fields on an entity
As a developer, you must allow your users to add custom fields on your entities.
.. warning::
For having custom fields, the class of the entity must contain a variable for storing the custom data. **By convention this variable must be called $cFData**
Create a json field on your entity
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
##### Create a json field on your entity
Declare a json field in your database :
.. code-block:: yaml
```bash
Chill\CustomFieldsBundle\Entity\BlopEntity:
type: entity
# ...
fields:
cFData:
type: json_array
```
Create the field accordingly in the class logic :
.. code-block:: php
```bash
namespace Chill\CustomFieldsBundle\Entity;
/**
* BlopEntity
*/
class BlopEntity
{
/**
* @var array
*/
private $cFData;
/**
* You must set a setter in order to save automatically custom
* You must set a setter in order to save automatically custom
* fields from forms, using Form Component
*
* @param array $cFData
@@ -100,9 +73,9 @@ Create the field accordingly in the class logic :
$this->cFData = $cFData;
return $this;
}
/**
* You also must create a getter in order to let Form
* You also must create a getter in order to let Form
* component populate form fields
*
* @return array
@@ -111,9 +84,9 @@ Create the field accordingly in the class logic :
{
return $this->cFData;
}
Declare your customizable entity in configuration
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
```
##### Declare your customizable entity in configuration
This step is necessary to allow user to create custom fields group associated with this entity.
@@ -130,26 +103,25 @@ This method is discouraged but explained first as it helps to undersand the reco
Add those file under `chill_custom_fields` section :
.. code-block:: yaml
```yaml
chill_custom_fields:
customizables_entities:
- { class: Chill\YourBundleBundle\Entity\BlopEntity, name: blop_entity }
```
* The `name` allow you to define a string which is translatable. This string will appears when chill's admin will add/retrieve new customFieldsGroup.
* The class, which is a full FQDN class path
Automatically, in DependencyInjection/Extension class (recommended)
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
This is the recommended way for declaring customizable classes.
This is the recommended way for declaring customizable classes.
You can prepend configuration of `custom fields bundle` from the class `YourBundle\DependencyInjection\YourBundleExtension`. **Note** that you also have to implements `Symfony\Component\DependencyInjection\Extension\PrependExtensionInterface` on this class to make the `prepend` function being taken into account.
Example here :
.. code-block:: php
Example here :
```php
class ChillYourBundleExtension extends Extension implements PrependExtensionInterface
{
/**
@@ -163,48 +135,44 @@ Example here :
}
$container->prependExtensionConfig('chill_custom_fields',
array('customizables_entities' =>
array('customizables_entities' =>
array(
array(
'class' => 'Chill\YourBundleBundle\Entity\BlopEntity',
'class' => 'Chill\YourBundleBundle\Entity\BlopEntity',
'name' => 'blop_entity',)
)
)
);
}
}
```
* The `name` allow you to define a string which is translatable. This string will appears when chill's admin will add/retrieve new customFieldsGroup.
* The class, which is a full FQDN class path
.. seealso::
`How to simplify configuration of multiple bundles <http://symfony.com/doc/current/cookbook/bundles/prepend_extension.html>`_
`How to simplify configuration of multiple bundles ](http://symfony.com/doc/current/cookbook/bundles/prepend_extension.html)
A cookbook page about prepending configuration.
Adding options to your custom fields groups
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
##### Adding options to your custom fields groups
You may add options to the groups associated with an entity.
In `config.yml` the declaration should be :
.. code-block:: yaml
In `config.yml` the declaration should be :
```yaml
chill_custom_fields:
customizables_entities:
-
-
class: Chill\YourBundleBundle\Entity\BlopEntity
name: BlopEntity
options:
# this will create a "myFieldKey" field as text, with a maxlength attribute to 150 (see http://symfony.com/doc/master/reference/forms/types/text.html)
myFieldKey: {form_type: text, form_options: {attr: [maxlength: 150]}}
myFieldKey: {form_type: text, form_options: {attr: [maxlength: 150]}}
```
In the `PrependExtensionInterface::prepend` function, the options key will be added in the configuration definition :
.. code-block:: php
In the `PrependExtensionInterface::prepend` function, the options key will be added in the configuration definition :
```php
class ChillYourBundleExtension extends Extension implements PrependExtensionInterface
{
/**
@@ -218,10 +186,10 @@ In the `PrependExtensionInterface::prepend` function, the options key will be ad
}
$container->prependExtensionConfig('chill_custom_fields',
array('customizables_entities' =>
array('customizables_entities' =>
array(
array(
'class' => 'Chill\YourBundleBundle\Entity\BlopEntity',
'class' => 'Chill\YourBundleBundle\Entity\BlopEntity',
'name' => 'BlopEntity',
'options' => array(
'myFieldKey' => [ 'form_type' => 'text', 'form_options' => [ 'attr' => [ 'maxlength' => 150 ] ]
@@ -231,16 +199,15 @@ In the `PrependExtensionInterface::prepend` function, the options key will be ad
);
}
}
**Example :** the entity `Report` from **ReportBundle** has to pick some custom fields belonging to a group to print them in *summaries* the timeline page. The definition will use the special type `custom_fields_group_linked_custom_field` which will add a select input with all fields associated with the current custom fields group :
```
.. code-block:: php
**Example :** the entity `Report` from **ReportBundle** has to pick some custom fields belonging to a group to print them in *summaries* the timeline page. The definition will use the special type `custom_fields_group_linked_custom_field` which will add a select input with all fields associated with the current custom fields group :
```php
class ChillReportExtension extends Extension implements PrependExtensionInterface
{
/**
*
*
###### *
* @param ContainerBuilder $container
*/
public function prepend(ContainerBuilder $container)
@@ -251,15 +218,15 @@ In the `PrependExtensionInterface::prepend` function, the options key will be ad
}
$container->prependExtensionConfig('chill_custom_fields',
array('customizables_entities' =>
array('customizables_entities' =>
array(
array(
'class' => 'Chill\ReportBundle\Entity\Report',
'class' => 'Chill\ReportBundle\Entity\Report',
'name' => 'ReportEntity',
'options' => array(
'summary_fields' => array(
'form_type' => 'custom_fields_group_linked_custom_fields',
'form_options' =>
'form_options' =>
[
'multiple' => true,
'expanded' => false
@@ -271,14 +238,13 @@ In the `PrependExtensionInterface::prepend` function, the options key will be ad
);
}
}
```
Note that `custom_fields_group_linked_custom_fields` does not create any input on `CustomFieldsGroup` creation : there aren't any fields associated with the custom fields just after the group creation... You have to add custom fields and associate them with the newly created group to see them appears.
Rendering custom fields and custom fields group in a template
-------------------------------------------------------------
### Rendering custom fields and custom fields group in a template
.. warning::
Each custom field can be `active` or not. Only `active` custom fields has to be dislayed.
Each custom field can be `active` or not. Only `active` custom fields has to be dislayed.
For rendering custom fields, two function are available :
@@ -290,8 +256,7 @@ For rendering custom fields group, a function is available :
* `chill_custom_fields_group_widget` to render the widget. It will display the custom fields of the group in a dd / dt structure.
chill_custom_field_label
^^^^^^^^^^^^^^^^^^^^^^^^
##### chill_custom_field_label
The signature is :
@@ -300,29 +265,23 @@ The signature is :
Examples
.. code-block:: jinja
{{ chill_custom_field_label(customField) }}
chill_custom_field_widget
^^^^^^^^^^^^^^^^^^^^^^^^^
##### chill_custom_field_widget
The signature is :
* array **$fields** the array raw, as stored in the db
* CustomField **$customField** a customField instance
* CustomField **$customField** a customField instance
* string **$documentType** the type of document. Default to `html`.
Examples:
.. code-block:: jinja
```bash
{{ chill_custom_field_widget(entity.customFields, customField) }}
```
chill_custom_field_is_empty
^^^^^^^^^^^^^^^^^^^^^^^^^^^
##### chill_custom_field_is_empty
The signature is :
@@ -331,13 +290,9 @@ The signature is :
Examples :
.. code-block:: jinja
{%- if chill_custom_field_is_empty(cFData, customField) == false -%}
chill_custom_fields_group_widget
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
##### chill_custom_fields_group_widget
This function only display custom fields that are `active`.
@@ -346,19 +301,17 @@ The signature is :
* array **$fields** the array raw, as stored in the db
* CustomFieldsGroup **$customFieldsGroup** the custom field group to render
.. code-block:: jinja
```bash
{{ chill_custom_fields_group_widget(entity.cFData, entity.customFieldsGroup) }}
```
Custom Fields's form
--------------------
### Custom Fields's form
You should simply use the 'custom_field' type in a template, with the group you would like to render in the `group` option's type.
Example :
.. code-block:: php
Example :
```php
namespace Chill\ReportBundle\Form;
use Symfony\Component\Form\AbstractType;
@@ -377,14 +330,14 @@ Example :
$builder
->add('user')
->add('date', 'date',
->add('date', 'date',
array('required' => true, 'widget' => 'single_text', 'format' => 'dd-MM-yyyy'))
#add the custom fields :
->add('cFData', 'custom_field',
->add('cFData', 'custom_field',
array('attr' => array('class' => 'cf-fields'), 'group' => $options['cFGroup']))
;
}
/**
* @param OptionsResolverInterface $resolver
*/
@@ -413,29 +366,25 @@ Example :
return 'chill_reportbundle_report';
}
}
```
Available configuration
------------------------
### Available configuration
Those options are available in the configuration, under the `chill_custom_field` key.
Example :
.. code-block:: yaml
```yaml
chill_custom_field:
show_empty_values_in_views: false
```
show_empty_values_in_views *boolean*:
Allow to hide / show empty values in views. The aim of this configuration parameter is to hide (or show) empty values when :term:`custom fields group` are rendered.
Default value : `true`
Glossary
--------
.. glossary::
### Glossary
custom fields group
A group of custom fields

View File

@@ -1,24 +1,18 @@
.. Copyright (C) 2016 Champs Libres Cooperative SCRLFS
Permission is granted to copy, distribute and/or modify this document
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
or any later version published by the Free Software Foundation;
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
A copy of the license is included in the section entitled "GNU
Free Documentation License".
.. _event-bundle:
# Event bundle
Event bundle
############
Template & Menu
===============
## Template & Menu
The event bundle has a special template with a specific menu for actions on
events. This menu is called `event`.
ChillEventBundle::layout.html.twig
----------------------------------
### ChillEventBundle::layout.html.twig
This layout extends `ChillMainBundle::layoutWithVerticalMenu.html.twig` and add the menu `event`
@@ -26,4 +20,4 @@ It proposes a new block :
* event_content
* where to display content relative to the event.
* where to display content relative to the event.

View File

@@ -0,0 +1,33 @@
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
or any later version published by the Free Software Foundation;
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
A copy of the license is included in the section entitled "GNU
Free Documentation License".
# Group bundle
Allow to group people in a group. This group may be a family, an activity group, ...
###### Entities
###### Macros
## Group sticker
Macro file
`ChillGroupBundle:Group:macro.html.twig`
Macro name
`_render`
Macro envelope
`group`, instance of :class:`Chill\GroupBundle\Entity\CGroup`
When to use this macro ?
When you want to represent group.
Example usage :
```jinja
{% import 'ChillGroupBundle:Group:macro.html.twig' as m %}
{{ m._render(g) }}
```

View File

@@ -1,49 +0,0 @@
.. Copyright (C) 2016 Champs Libres Cooperative SCRLFS
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
or any later version published by the Free Software Foundation;
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
A copy of the license is included in the section entitled "GNU
Free Documentation License".
.. _group-bundle:
Group bundle
############
Allow to group people in a group. This group may be a family, an activity group, ...
.. contents:: Table of content
:local:
Entities
********
.. figure:: /_static/bundles/group/group_classes_uml.png
.. _group-bundle-macros:
Macros
******
Group sticker
==============
Macro file
`ChillGroupBundle:Group:macro.html.twig`
Macro name
:code:`_render`
Macro envelope
:code:`group`, instance of :class:`Chill\GroupBundle\Entity\CGroup`
When to use this macro ?
When you want to represent group.
Example usage :
.. code-block:: html+jinja
{% import 'ChillGroupBundle:Group:macro.html.twig' as m %}
{{ m._render(g) }}

View File

@@ -0,0 +1,23 @@
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
or any later version published by the Free Software Foundation;
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
A copy of the license is included in the section entitled "GNU
Free Documentation License".
# Bundles documentation
You will find here documentation about bundles working with Chill.
- [Main bundle](main.md)
- [Custom Fields bundle](custom-fields.md)
- [Person bundle](person.md)
- [Report bundle](report.md)
- [Activity bundle](activity.md)
- [Group bundle](group.md)
- [Event bundle](event.md)
- [Ldap bundle (synchronisation between ldap and database)](ldap.md)
### Your bundle here ?
The contributors still do not have a policy about those bundle integration, but we would like to be very open on this subject. Please write to us [or open an issue ](https://redmine.champs-libres.coop/projects/chill/issues).

View File

@@ -1,29 +0,0 @@
.. Copyright (C) 2014 Champs Libres Cooperative SCRLFS
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
or any later version published by the Free Software Foundation;
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
A copy of the license is included in the section entitled "GNU
Free Documentation License".
Bundles documentation
###############################
You will find here documentation about bundles working with Chill.
.. toctree::
:maxdepth: 2
Main bundle <main.rst>
Custom Fields bundle <custom-fields.rst>
Person bundle <person.rst>
Report bundle <report.rst>
Activity bundle <activity.rst>
Group bundle <group.rst>
Event bundle <event.rst>
Ldap bundle (synchronisation between ldap and database) <ldap.rst>
Your bundle here ?
-------------------
The contributors still do not have a policy about those bundle integration, but we would like to be very open on this subject. Please write to us `or open an issue <https://redmine.champs-libres.coop/projects/chill/issues>`_.

View File

@@ -1,94 +1,70 @@
.. Copyright (C) 2014 Champs Libres Cooperative SCRLFS
Permission is granted to copy, distribute and/or modify this document
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
or any later version published by the Free Software Foundation;
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
A copy of the license is included in the section entitled "GNU
Free Documentation License".
.. _ldap-bundle:
LDAP bundle
###########
# LDAP bundle
This bundle binds the database with an ldap directory.
The bundle synchronize the ldap directory with users in the database. It also
provides a way to check user credentials against the ldap directory.
.. contents:: Table of content
:local:
Current limitations
*******************
###### Current limitations
- The length of the ldap dn must be < 255 characters
- if the username extracted from the ldap is updated, the changes are not reflected in the database and remains the same
###### Entities provided
Entities provided
*****************
This bundle provides only one entity : :class:[Chill\\LdapBundle\\Entity\\UserLdapBinding`
This bundle provides only one entity : :class:`Chill\\LdapBundle\\Entity\\UserLdapBinding`
###### How the synchronizer works ?
How the synchronizer works ?
****************************
#. The synchronizer performs a query on :code:`dn` and :code:`query` defined in the :ref:`configuration <configuration>`.
#. For each entry returned by the query, it looks if the :code:`dn` exists in the database
#. The synchronizer performs a query on `dn` and `query` defined in the [configuration ](configuration.md).
#. For each entry returned by the query, it looks if the `dn` exists in the database
#. If the entry does not exists :
#. the synchronizer looks for user with same username as defined by :code:`username_attr`, and bind it with the :code:`dn` if it exists.
#. else, a user is created with username defined by :code:`username_attr` (if the ldap contains more than one attribute, the first attribute returned is used)
#. the synchronizer looks for user with same username as defined by `username_attr`, and bind it with the `dn` if it exists.
#. else, a user is created with username defined by `username_attr` (if the ldap contains more than one attribute, the first attribute returned is used)
#. if a user exists which is already binded with the :code:`dn`, the entry is ignored.
#. if a user exists which is already binded with the `dn`, the entry is ignored.
#. The synchronizer looks for dn existing in database and which were not returned by the query performed in 1.
#. The synchronizer looks for dn existing in database and which were not returned by the query performed in 1.
#. If they exists, those user are set to :code:`enabled=false`: they are not allowed to login.
#. If they exists, those user are set to `enabled=false`: they are not allowed to login.
Installation
************
###### Installation
This bundle requires :
This bundle requires :
- PHP LDAP ext
- :code:`symfony/ldap` with minimal version 3.1. Note that, currently, Chill uses Symfony 2.8: you should add the dependency on this single package manually
- `symfony/ldap` with minimal version 3.1. Note that, currently, Chill uses Symfony 2.8: you should add the dependency on this single package manually
In your composer.json, for stable version :
.. code-block:: json
In your composer.json, for stable version :
"require": {
// .. other dependencies
// .. other dependencies
"symfony/ldap" : "~3.1",
"chill-project/ldap": "~1.0"
}
And for dev version :
.. code-block:: json
"require": {
// .. other dependencies
// .. other dependencies
"symfony/ldap" : "~3.1",
"chill-project/ldap": "dev-master@dev"
}
###### Configuration
.. _configuration:
Configuration
**************
Configuration of the bundle
============================
.. code-block:: yaml
## Configuration of the bundle
# Default configuration for extension with alias: "chill_ldap"
chill_ldap:
@@ -125,10 +101,7 @@ Configuration of the bundle
# The attribute which will provide username (=login)
username_attr: cn
Example :
.. code-block:: yaml
Example :
chill_ldap:
server:
@@ -140,16 +113,12 @@ Example :
dn: dc=champs-libres,dc=coop
query: "(&(objectClass=inetOrgPerson)(userPassword=*))"
Configuration of the security part of chill
============================================
## Configuration of the security part of chill
Simply add the following config in the firewall of the security bundle :
`chill_ldap_form_login: ~`. This config is located in `app/config/security.yml`
Example of a configuration :
.. code-block:: yaml
Example of a configuration :
# in app/config/security.yml
@@ -168,37 +137,23 @@ Example of a configuration :
# enable the login check by a form, against the ldap
chill_ldap_form_login: ~ # this is the line you should add
Note that, if you enable the login check by form **and** by the ldap,
Note that, if you enable the login check by form **and** by the ldap,
the password will be checked against the database **and** against the ldap.
If one of them match, the login will succeed.
If you want to completely disable login check against the database,
simply remove the :code:`form_login` entry and all his options.
If you want to completely disable login check against the database,
simply remove the `form_login` entry and all his options.
.. _command-and-crontab:
## Command and crontab
Command and crontab
===================
Synchronize the database :
.. code-block:: bash
Synchronize the database :
php app/console chill:ldap:synchronize
For getting more debug message :
.. code-block:: bash
For getting more debug message :
php app/console chill:ldap:synchronize -vvv
You should run this command regularly (using crontab or
`systemd timer <https://www.freedesktop.org/software/systemd/man/systemd.timer.html#>`_)
You should run this command regularly (using crontab or
`systemd timer ](https://www.freedesktop.org/software/systemd/man/systemd.timer.html#))
to synchronize ldap and database automatically.

View File

@@ -1,15 +1,12 @@
.. Copyright (C) 2014 Champs Libres Cooperative SCRLFS
Permission is granted to copy, distribute and/or modify this document
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
or any later version published by the Free Software Foundation;
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
A copy of the license is included in the section entitled "GNU
Free Documentation License".
.. _main-bundle:
Main bundle
###########
# Main bundle
This bundle is **required** for running Chill.
@@ -18,32 +15,24 @@ This bundle provide :
* Access control model (users, groups, and all concepts)
* ...
.. warning::
this section is incomplete.
.. _main-bundle-macros:
###### Macros
Macros
******
Address sticker
===============
## Address sticker
Macro file
`ChillMainBundle:Address:macro.html.twig`
Macro name
:code:`_render`
`_render`
Macro envelope
:code:`address`, instance of :class:`Chill\MainBundle\Entity\Address`
`address`, instance of :class:`Chill\MainBundle\Entity\Address`
When to use this macro ?
When you want to represent an address.
Example usage :
.. code-block:: html+jinja
{% import 'ChillMainBundle:Address:macro.html.twig' as m %}
{{ m._render(address) }}
```jinja
{% import 'ChillMainBundle:Address:macro.html.twig' as m %}
{{ m._render(address) }}
```

View File

@@ -1,65 +1,41 @@
.. Copyright (C) 2014 Champs Libres Cooperative SCRLFS
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
or any later version published by the Free Software Foundation;
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
A copy of the license is included in the section entitled "GNU
Free Documentation License".
.. _person-bundle:
Person bundle
#############
# Person bundle
This bundle provides the ability to record people in the software. This bundle is required by other bundle.
.. contents:: Table of content
:local:
Entities provided
*****************
.. todo::
###### Entities provided
describe entities provided by person bundle
Search terms
************
The class `Chill\PersonBundle\Search\PersonSearch` provide the search module.
Domain
======
###### Search terms
The class [Chill\PersonBundle\Search\PersonSearch` provide the search module.
## Domain
The search upon "person" is provided by default. The `@person` domain search may be omitted.
* `@person` is the domain search for people.
Arguments
=========
## Arguments
* `firstname` : provide the search on firstname. Example : `firstname:Depardieu`. May match part of the firstname (`firsname:dep` will match Depardieu)
* `lastname` : provide the search on lastname. May match part of the lastname.
* `birthdate` : provide the search on the birthdate. Example : `birthdate:1996-01-19`
* `gender`: performs search on man/woman. The accepted values are `man` or `woman`.
* `nationality` : performs search on nationality. Value must be a country code `as described in ISO 3166 <http://www.iso.org/iso/fr/home/standards/country_codes.htm>`_. Example : `nationality:FR`.
* `nationality` : performs search on nationality. Value must be a country code `as described in ISO 3166 ](http://www.iso.org/iso/fr/home/standards/country_codes.htm). Example : [nationality:FR`.
Default
=======
## Default
The default search is performed on firstname and/or lastname. Both are concatened before search. If values are separated by spaces, the clause `AND` is used : the search `dep ge` will match 'Gérard Depardieu` or 'Jean Depagelles', but not 'Charline Depardieu' (missing 'Ge' in word).
Configuration options
*********************
###### Configuration options
Those options are available under `chill_person` key.
Example of configuration:
.. code-block:: yaml
```yaml
chill_person:
validation:
birthdate_not_after: P15Y
@@ -73,17 +49,18 @@ Example of configuration:
marital_status: visible
spoken_languages: hidden
address: visible
```
birthdate_not_after *string*
The period duration before today during which encoding birthdate is not possible. The period is a string matching the format of `ISO_8601`, which is also use to build `DateInterval classes <http://php.net/manual/en/dateinterval.construct.php>`_.
The period duration before today during which encoding birthdate is not possible. The period is a string matching the format of `ISO_8601`, which is also use to build `DateInterval classes ](http://php.net/manual/en/dateinterval.construct.php).
Example: `P1D`, `P18Y`
Example: [P1D`, `P18Y`
Default value: `P1D` which means that birthdate before the current day (= yesterday) are allowed.
person_fields *array*
This define the visibility of some fields. By default, all fields are visible, but you can choose to hide some of them. Available keys are :
This define the visibility of some fields. By default, all fields are visible, but you can choose to hide some of them. Available keys are :
* `nationality`
* `country_of_birth`
* `place_of_birth`
@@ -97,73 +74,62 @@ person_fields *array*
Default value : `visible`, which means that all fields are visible.
Example:
.. code-block:: yaml
Example:
```yaml
chill_person:
person_fields:
nationality: hidden
email: hidden
phonenumber: hidden
```
.. note::
If all the field of a "box" are hidden, the whole box does not appears. Example: if the fields `phonenumber` and `email` are hidden, the title `Contact information` will be hidden in the UI.
.. note::
If you hide multiple fields, for a better integration you may want to override the template, for a better appeareance. See `the symfony documentation <http://symfony.com/doc/current/book/templating.html#overriding-bundle-templates>`_ about this feature.
If you hide multiple fields, for a better integration you may want to override the template, for a better appeareance. See `the symfony documentation ](http://symfony.com/doc/current/book/templating.html#overriding-bundle-templates) about this feature.
.. _person-bundle-macros:
###### Macros
Macros
******
Sticker for a person
=====================
## Sticker for a person
Macro file
`ChillPersonBundle:Person:macro.html.twig`
Macro envelope
:code:`render(p, withLink=false)`
`render(p, withLink=false)`
:code:`p` is an instance of :class:`Chill\PersonBundle\Entity\Person`
`p` is an instance of `Chill\PersonBundle\Entity\Person`
:code:`withLink` :class:`boolean`
`withLink`: `boolean`
When to use this macro ?
When you want to represent a person.
Example usage :
.. code-block:: html+jinja
```jinja
{% import "ChillPersonBundle:Person:macro.html.twig" as person_ %}
{% import "ChillPersonBundle:Person:macro.html.twig" as person_ %}
{{ person_.render(person, true) }}
```
{{ person_.render(person, true) }}
###### Layout events and delegated blocks
Layout events and delegated blocks
***********************************
:code:`chill_block.person_post_vertical_menu` event
====================================================
## `chill_block.person_post_vertical_menu` event
This event is available to add content below of the vertical menu (on the right).
The context is :
The context is :
- :code:`person` : the current person which is rendered. Instance of :class:`Chill\PersonBundle\Entity\Person`
- `person` : the current person which is rendered. Instance of `Chill\PersonBundle\Entity\Person`
Widgets
*******
###### Widgets
Add a list of person on homepage
================================
## Add a list of person on homepage
The bundle provide a way to add a list of accompanyied person on the homepage:
.. code-block:: yaml
```yaml
chill_main:
widgets:
homepage:
-
homepage:
-
order: 10
widget_alias: person_list
person_list:
@@ -180,15 +146,11 @@ The bundle provide a way to add a list of accompanyied person on the homepage:
# when the view is overriden, you can add some custom fields
# to the view
custom_fields: [school-2fb5440e-192c-11e6-b2fd-74d02b0c9b55]
Commands
********
```
###### Commands
:code:`chill:person:move`
=========================
.. code-block:: txt
## `chill:person:move`
Usage:
chill:person:move [options]
@@ -213,21 +175,17 @@ Commands
Move all the entities associated to a person onto another one, and remove the old person.
.. warning::
Some entities are ignored and will be deleted:
Some entities are ignored and will be deleted:
- the accompanying periods ;
- the data attached to a person entity: name, address, date of birth, etc. Thos should be merge before the move.
It is advised to run first the command with the :code:`dump-sql` option and, then, use the :code:`force` option.
It is advised to run first the command with the `dump-sql` option and, then, use the `force` option.
The moving and suppression is executed inside a transaction, ensuring no data loss if the migration fails.
.. note::
Using bash and awk, it is easy to use a TSV file (values separated by a tab, not a comma) to create move commands. Assuming our file is named `twins.tsv` and contains two columns: the first one with `from` ids, and the second one with `to` ids:
Using bash and awk, it is easy to use a TSV file (values separated by a tab, not a comma) to create move commands. Assuming our file is named :code:`twins.tsv` and contains two columns: the first one with :code:`from` ids, and the second one with :code:`to` ids:
.. code-block:: bash
awk '{ print "php app/console chill:person:move --dump-sql --from " $1 " --to " $2;}' twins.tsv
```bash
awk '{ print "php app/console chill:person:move --dump-sql --from " $1 " --to " $2;}' twins.tsv
```

View File

@@ -0,0 +1,23 @@
# Report bundle
This bundle provides the ability to record report about people. We use custom fields to let user add fields to reports.
The documentation about report is not written
## Concepts
## Search
### Domain
* `@report` is the domain search for reports.
### Arguments
* `date` : The date of the report
### Default
The report's date is the default value.
An error is thrown if an argument `date` and a default is used.

View File

@@ -1,46 +0,0 @@
.. Copyright (C) 2014 Champs Libres Cooperative SCRLFS
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
or any later version published by the Free Software Foundation;
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
A copy of the license is included in the section entitled "GNU
Free Documentation License".
.. _report-bundle:
Report bundle
#############
This bundle provides the ability to record report about people. We use custom fields to let user add fields to reports.
.. contents:: Table of content
:local:
.. todo::
The documentation about report is not writtend
Concepts
========
Search
======
Domain
------
* `@report` is the domain search for reports.
Arguments
---------
* `date` : The date of the report
Default
-------
The report's date is the default value.
An error is thrown if an argument `date` and a default is used.

View File

@@ -0,0 +1,23 @@
# Frequently asked questions
## Continuous integration
Pipeline fails, but php-cs-fixer doesn't alert me when running it locally?
========================================
It is possible that you run php-cs-fixer on your local instance of chill and no fixes are made.
Everything seems fine, so you push. However, once the pipeline is run in gitlab, you're notified that it failed due to php
cs errors.
In this case it's likely that you have to update your version of php-cs-fixer.
php-cs-fixer is installed when building the docker image: https://gitea.champs-libres.be/Chill-project/chill-skeleton-basic/src/branch/main/Dockerfile#L50
Consequently, to update php-cs-fixer, we have to update the image by building it again.
For this the following commands can be used.
```
docker compose build --pull php
# replace existing containers
docker compose up -d --force-recreate php
```

View File

@@ -1,36 +0,0 @@
.. Copyright (C) 2014 Champs Libres Cooperative SCRLFS
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
or any later version published by the Free Software Foundation;
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
A copy of the license is included in the section entitled "GNU
Free Documentation License".
.. _faq:
Frequently asked questions
####################
Continuous integration
***********
Pipeline fails, but php-cs-fixer doesn't alert me when running it locally ?
========================================
It is possible that you run php-cs-fixer on your local instance of chill and no fixes are made.
Everything seems fine, so you push. However once the pipeline is run in gitlab, you're notified that it failed due to php
cs errors.
In this case it's likely that you have to update your version of php-cs-fixer.
php-cs-fixer is installed when building the docker image: https://gitea.champs-libres.be/Chill-project/chill-skeleton-basic/src/branch/main/Dockerfile#L50
Consequently, to update php-cs-fixer we have to update the image by building it again.
For this the following commands can be used,
.. code-block:: php
docker compose build --pull php
# replace existing containers
docker compose up -d --force-recreate php

View File

@@ -1,19 +1,15 @@
.. Copyright (C) 2015 Champs Libres Cooperative SCRLFS
Permission is granted to copy, distribute and/or modify this document
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
or any later version published by the Free Software Foundation;
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
A copy of the license is included in the section entitled "GNU
Free Documentation License".
Access controle model
**********************
###### Access controle model
.. contents:: Table of content
:local:
Concepts
========
## Concepts
Every time an entity is created, viewed or updated, the software check if the user has the permission to make this action. The decision is made with three parameters :
@@ -23,20 +19,15 @@ Every time an entity is created, viewed or updated, the software check if the us
The user must be granted access to the action on this particular entity, with this scope and center.
TL;DR
=====
## TL;DR
Resolve scope and center
------------------------
### Resolve scope and center
In a service, resolve the center and scope of an entity
.. code-block:: php
use Chill\MainBundle\Security\Resolver\CenterResolverDispatcher;
use Chill\MainBundle\Security\Resolver\ScopeResolverDispatcher;
class MyService {
private ScopeResolverDispatcher $scopeResolverDispatcher;
private CenterResolverDispatcher $centerResolverDispatcher;
@@ -58,8 +49,6 @@ In a service, resolve the center and scope of an entity
In twig template, resolve the center:
.. code-block:: twig
{# resolve a center #}
{% if person|chill_resolve_center is not null%}
@@ -81,8 +70,6 @@ In twig template, resolve the center:
In twig template, resolve the scope:
.. code-block:: twig
{% if entity|chill_is_scope_concerned %}
{% if entity|chill_resolve_scope is iterable %}
@@ -98,10 +85,7 @@ In twig template, resolve the scope:
{% endfor %}
{%- endif -%}
Build a ``Voter``
-----------------
.. code-block:: php
### Build a ``Voter``
<?php
@@ -151,7 +135,6 @@ Build a ``Voter``
->build();
}
protected function supports($attribute, $subject)
{
return $this->voterHelper->supports($attribute, $subject);
@@ -194,25 +177,19 @@ Build a ``Voter``
return array();
}
public function getRolesWithHierarchy()
{
return ['PersonDocument' => $this->getRoles() ];
}
}
From an user point of view
==========================
## From an user point of view
The software is design to allow fine tuned access rights for complicated installation and team structure. The administrators may also decide that every user has the right to see all resources, where team have a more simple structure.
Here is an overview of the model.
Chill can be multi-center
-------------------------
### Chill can be multi-center
Chill is designed to be installed once for social center who work with multiple teams separated, or for social services's federation who would like to share the same installation of the software for all their members.
@@ -222,8 +199,7 @@ Otherwise, it is not required to create multiple center: Chill can also work for
Obviously, users working in the different centers are not allowed to see the entities (_persons_, _reports_, _activities_) of other centers. But users may be attached to multiple centers: consequently they will be able to see the entities of the multiple centers they are attached to.
Inside center, scope divide team
--------------------------------
### Inside center, scope divide team
Users are attached to one or more center and, inside to those center, there may exists differents scopes. The aim of those _scopes_ is to divide the whole team of social worker amongst different departement, for instance: the social team, the psychologist team, the nurse team, the administrative team, ... Each team is granted of different rights amongst scope. For instance, the social team may not see the _activities_ of the psychologist team. The administrative team may see the date & time's activities, but is not allowed to see the detail of those entities (the personal notes, ...).
@@ -233,9 +209,7 @@ As entities have only one scopes, if some entities must be shared across two dif
Example: if some activities must be seen and updated between nurses and psychologists, the administrator will create a scope "nurse and psy" and add the ability for both team "nurse" and "psychologist" to "create", "see", and "update" the activities belonging to scope "nurse and psy".
Where does the ``scope`` and ``center`` comes from ?
====================================================
## Where does the [`scope`` and ``center`` comes from ?
Most often, scope and center comes from user's input:
@@ -256,30 +230,23 @@ But sometimes, this implementation does not fits the needs:
For this reasons, associated center and scopes must be resolved programmatically. The default implementation rely on the model association, as described above. But it becomes possible to change the behaviour on different implementations.
Is my entity "concerned" by scopes ?
------------------------------------
### Is my entity "concerned" by scopes ?
Some entities are concerned by scope, some not.
This is also programmatically resolved.
The concepts translated into code
===================================
## The concepts translated into code
.. figure:: /_static/access_control_model.png
Schema of the access control model
Chill handle **entities**, like *persons*, *reports* (associated to *persons*), *activities* (also associated to *_persons*), ... On creation, those entities are linked to one center and, eventually, to one scope. They implements the interface `HasCenterInterface`.
.. note::
Somes entities are linked to a center through the entity they are associated with. For instance, *activities* or *reports* are associated to a *person*, and the person is associated to a *center*. The *report*'s *center* is always the *person*'s *center*.
Entities may be associated with a scope. In this case, they implement the `HasScopeInterface`.
.. note::
Currently, only the *person* entity is not associated with a scope.
At each step of his lifetime (creation, view of the entity and eventually of his details, update and, eventually, deletion), the right of the user are checked. To decide wether the user is granted right to execute the action, the software must decide with those elements :
@@ -291,13 +258,10 @@ At each step of his lifetime (creation, view of the entity and eventually of his
All those action are executed through symfony voters and helpers.
How to check authorization ?
============================
## How to check authorization ?
Just use the symfony way-of-doing, but do not forget to associate the entity you want to check access. For instance, in controller :
.. code-block:: php
class MyController extends Controller
{
@@ -311,12 +275,9 @@ Just use the symfony way-of-doing, but do not forget to associate the entity you
And in template :
.. code-block:: twig
{{ if is_granted('CHILL_ENTITY_SEE', entity) %}print something{% endif %}
Retrieving reachable scopes and centers for a user
--------------------------------------------------
### Retrieving reachable scopes and centers for a user
The class :class:`Chill\\MainBundle\\Security\\Authorization\\AuthorizationHelperInterface` helps you to get centers and scope reachable by a user.
@@ -325,9 +286,7 @@ Those methods are intentionnaly build to give information about user rights:
- getReachableCenters: to get reachable centers for a user
- getReachableScopes : to get reachable scopes for a user
Adding your own roles
---------------------
### Adding your own roles
Extending Chill will requires you to define your own roles and rules for your entities. You will have to define your own voter to do so.
@@ -336,28 +295,20 @@ To create your own roles, you should:
* implement your own voter. This voter will have to extends the :class:`Chill\\MainBundle\\Security\\AbstractChillVoter`. As defined by Symfony, this voter must be declared as a service and tagged with `security.voter`;
* declare the role through implementing a service tagged with `chill.role` and implementing :class:`Chill\\MainBundle\\Security\\ProvideRoleInterface`.
.. note::
Both operation may be done through a simple class: you can implements :class:`Chill\\MainBundle\\Security\\ProvideRoleInterface` and :class:`Chill\\MainBundle\\Security\\AbstractChillVoter` on the same class. See live example: :class:`Chill\\ActivityBundle\\Security\\Authorization\\ActivityVoter`, and similar examples in the `PersonBundle` and `ReportBundle`.
.. seealso::
`How to Use Voters to Check User Permissions <http://symfony.com/doc/current/cookbook/security/voters_data_permission.html>`_
`How to Use Voters to Check User Permissions ](http://symfony.com/doc/current/cookbook/security/voters_data_permission.html)
From the symfony cookbook
`New in Symfony 2.6: Simpler Security Voters <http://symfony.com/blog/new-in-symfony-2-6-simpler-security-voters>`_
[New in Symfony 2.6: Simpler Security Voters ](http://symfony.com/blog/new-in-symfony-2-6-simpler-security-voters)
From the symfony blog
Declare your role
^^^^^^^^^^^^^^^^^^
##### Declare your role
To declare new role, implement the class :class:`Chill\\MainBundle\\Security\\ProvideRoleInterface`.
.. code-block:: php
interface ProvideRoleInterface
{
/**
@@ -375,21 +326,15 @@ To declare new role, implement the class :class:`Chill\\MainBundle\\Security\\Pr
public function getRolesWithoutScope();
}
Then declare your service with a tag `chill.role`. Example :
.. code-block:: yaml
your_service:
class: Chill\YourBundle\Security\Authorization\YourVoter
tags:
- { name: chill.role }
Example of an implementation of :class:`Chill\\MainBundle\\Security\\ProvideRoleInterface`:
.. code-block:: php
namespace Chill\PersonBundle\Security\Authorization;
use Chill\MainBundle\Security\ProvideRoleInterface;
@@ -412,13 +357,10 @@ Example of an implementation of :class:`Chill\\MainBundle\\Security\\ProvideRole
}
Adding role hierarchy
^^^^^^^^^^^^^^^^^^^^^
##### Adding role hierarchy
You should prepend Symfony's security component directly from your code.
.. code-block:: php
namespace Chill\ReportBundle\DependencyInjection;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\Config\FileLocator;
@@ -450,10 +392,7 @@ You should prepend Symfony's security component directly from your code.
}
}
Implement your voter
^^^^^^^^^^^^^^^^^^^^
##### Implement your voter
Most of the time, Voter will check that:
@@ -464,7 +403,6 @@ Most of the time, Voter will check that:
Thats what we call the "autorization logic". But this logic may be replace by a new one, and developers should take care of it.
Then voter implementation should take care of:
* check the access to associated entities. For instance, if an ``Activity`` is associated to a ``Person``, the voter should first check that the user can show the associated ``Person``;
@@ -472,9 +410,6 @@ Then voter implementation should take care of:
This is an example of implementation:
.. code-block:: php
<?php
namespace Chill\DocStoreBundle\Security\Authorization;
@@ -513,7 +448,6 @@ This is an example of implementation:
->build();
}
protected function supports($attribute, $subject)
{
return $this->voterHelper->supports($attribute, $subject);
@@ -553,7 +487,6 @@ This is an example of implementation:
// ...
}
public function getRolesWithHierarchy()
{
// ...
@@ -562,8 +495,6 @@ This is an example of implementation:
Then, you will have to declare the service and tag it as a voter :
.. code-block:: yaml
services:
chill.report.security.authorization.report_voter:
class: Chill\ReportBundle\Security\Authorization\ReportVoter
@@ -572,18 +503,13 @@ Then, you will have to declare the service and tag it as a voter :
tags:
- { name: security.voter }
How to resolve scope and center programmatically ?
==================================================
## How to resolve scope and center programmatically ?
In a service, resolve the center and scope of an entity
.. code-block:: php
use Chill\MainBundle\Security\Resolver\CenterResolverDispatcher;
use Chill\MainBundle\Security\Resolver\ScopeResolverDispatcher;
class MyService {
private ScopeResolverDispatcher $scopeResolverDispatcher;
private CenterResolverDispatcher $centerResolverDispatcher;
@@ -605,8 +531,6 @@ In a service, resolve the center and scope of an entity
In twig template, resolve the center:
.. code-block:: twig
{# resolve a center #}
{% if person|chill_resolve_center is not null%}
@@ -628,8 +552,6 @@ In twig template, resolve the center:
In twig template, resolve the scope:
.. code-block:: twig
{% if entity|chill_is_scope_concerned %}
{% if entity|chill_resolve_scope is iterable %}
@@ -645,8 +567,7 @@ In twig template, resolve the scope:
{% endfor %}
{%- endif -%}
What is the default implementation of Scope and Center resolver ?
-----------------------------------------------------------------
### What is the default implementation of Scope and Center resolver ?
By default, the implementation rely on association into entities.
@@ -657,16 +578,14 @@ By default, the implementation rely on association into entities.
Then, the default implementation will resolve the center and scope based on the implementation in your model.
How to change the default behaviour ?
-------------------------------------
### How to change the default behaviour ?
Implements those interface into services:
* ``Chill\MainBundle\Security\Resolver\CenterResolverInterface``;
* ``Chill\MainBundle\Security\Resolver\ScopeResolverInterface``;
Authorization into lists and index pages
========================================
## Authorization into lists and index pages
Due to the fact that authorization model may be overriden, "list" and "index" pages should not rely on center and scope from controller. This must be delegated to dedicated service, which will be aware of the authorization model. We call them ``ACLAwareRepository``. This service must implements an interface, in order to allow to change the implementation.
@@ -674,14 +593,11 @@ The controller **must not** performs any DQL or SQL query.
Example in a controller:
.. code-block:: php
namespace Chill\TaskBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Chill\TaskBundle\Repository\SingleTaskAclAwareRepositoryInterface;
final class SingleTaskController extends AbstractController
{
@@ -729,11 +645,9 @@ Example in a controller:
}
}
Writing ``ACLAwareRepository``
------------------------------
### Writing ``ACLAwareRepository``
The ACLAwareRepository should rely on interfaces
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
##### The ACLAwareRepository should rely on interfaces
As described above, the ACLAwareRepository will perform the query for listing entities, and take care of authorization.
@@ -743,9 +657,6 @@ The service must rely on this interface, and not on the default implementation.
Example: at first, we design an interface for listing ``SingleTask`` entities:
.. code-block:: php
<?php
namespace Chill\TaskBundle\Repository;
@@ -782,8 +693,6 @@ Example: at first, we design an interface for listing ``SingleTask`` entities:
Implements this interface and register the interface as an alias for the implementation.
.. code-block:: yaml
services:
Chill\TaskBundle\Repository\SingleTaskAclAwareRepository:
autowire: true
@@ -791,8 +700,7 @@ Implements this interface and register the interface as an alias for the impleme
Chill\TaskBundle\Repository\SingleTaskAclAwareRepositoryInterface: '@Chill\TaskBundle\Repository\SingleTaskAclAwareRepository'
Write the basic implementation for re-use: separate authorization logic and search logic
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
##### Write the basic implementation for re-use: separate authorization logic and search logic
The logic of such repository may be separated into two logic:
@@ -803,8 +711,6 @@ This logic should be separated into your implementation.
Considering this simple interface:
.. code-block:: php
interface MyEntityACLAwareRepositoryInterface {
public function countByAuthorized(array $criterias): int;
@@ -815,15 +721,11 @@ Considering this simple interface:
The base implementation should separate the logic to allow an easy reuse. Here, the method ``buildQuery`` build a basic query without authorization logic, which can be re-used. The authorization logic is dedicated to a private method. For ease of user, the logic of adding ordering criterias and pagination parameters (``$start`` and ``$limit``) are also delegated to a public method.
.. code-block:: php
namespace Chill\MyBundle\Repository;
use Doctrine\ORM\EntityManagerInterface;
use Doctrine\ORM\QueryBuilder;
final class MyEntityACLAwareRepository implements MyEntityACLAwareRepositoryInterface {
private EntityManagerInterface $em;
@@ -875,15 +777,12 @@ The base implementation should separate the logic to allow an easy reuse. Here,
Once this logic is executed, it becomes easy to make a new implementation of the repository:
.. code-block:: php
namespace Chill\MyOtherBundle\Repository;
use Doctrine\ORM\EntityManagerInterface;
use Doctrine\ORM\QueryBuilder;
use Chill\MyBundle\Repository\MyEntityACLAwareRepository
final class AnotherEntityACLAwareRepository implements MyEntityACLAwareRepositoryInterface {
private EntityManagerInterface $em;
@@ -921,14 +820,8 @@ Once this logic is executed, it becomes easy to make a new implementation of the
Then, register this service and decorates the old one:
.. code-block:: yaml
services:
Chill\MyOtherBundle\Repository\AnotherEntityACLAwareRepository:
autowire: true
autoconfigure: true
decorates: Chill\MyBundle\Repository\MyEntityACLAwareRepositoryInterface:
decorates: Chill\MyBundle\Repository\MyEntityACLAwareRepositoryInterface:

View File

@@ -1,23 +1,10 @@
.. Copyright (C) 2014 Champs Libres Cooperative SCRLFS
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
or any later version published by the Free Software Foundation;
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
A copy of the license is included in the section entitled "GNU
Free Documentation License".
.. _api:
API
###
# API
Chill provides a basic framework to build REST api.
Basic configuration
*******************
###### Basic configuration
Configure a route
=================
## Configure a route
Follow those steps to build a REST api:
@@ -27,36 +14,29 @@ Follow those steps to build a REST api:
You can also:
* hook into the controller to customize some steps;
* add more route and steps
.. note::
* add more routes and steps
Useful links:
* `How to use annotation to configure serialization <https://symfony.com/doc/current/serializer.html>`_
* `How to create your custom normalizer <https://symfony.com/doc/current/serializer/custom_normalizer.html>`_
* [How to use annotation to configure serialization ](https://symfony.com/doc/current/serializer.html)
* [How to create your custom normalizer ](https://symfony.com/doc/current/serializer/custom_normalizer.html)
Auto-loading the routes
=======================
## Autoloading the routes
Ensure that those lines are present in your file `app/config/routing.yml`:
.. code-block:: yaml
```yaml
chill_cruds:
resource: 'chill_main_crud_route_loader:load'
type: service
```
## Create your model
Create your model
=================
Create your model in the usual way:
Create your model on the usual way:
.. code-block:: php
namespace Chill\PersonBundle\Entity\AccompanyingPeriod;
```php
namespace Chill\PersonBundle\Entity\AccompanyingPeriod;
use Chill\PersonBundle\Entity\AccompanyingPeriod\OriginRepository;
use Doctrine\ORM\Mapping as ORM;
@@ -87,16 +67,14 @@ Create your model on the usual way:
// .. getters and setters
}
```
## Configure api
Configure api
=============
Configure the api using YAML (see the full configuration: [api_full_configuration](api_full_configuration.md)):
Configure the api using Yaml (see the full configuration: :ref:`api_full_configuration`):
.. code-block:: yaml
# config/packages/chill_main.yaml
```yaml
# config/packages/chill_main.yaml
chill_main:
apis:
accompanying_period_origin:
@@ -113,15 +91,13 @@ Configure the api using Yaml (see the full configuration: :ref:`api_full_configu
methods:
GET: true
HEAD: true
```
If you are working on a shared bundle (aka "The chill bundles"), you should define your configuration inside the class `ChillXXXXBundleExtension`, using the "prependConfig" feature:
.. note::
If you are working on a shared bundle (aka "The chill bundles"), you should define your configuration inside the class :code:`ChillXXXXBundleExtension`, using the "prependConfig" feature:
.. code-block:: php
```php
namespace Chill\PersonBundle\DependencyInjection;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Extension\PrependExtensionInterface;
use Symfony\Component\HttpFoundation\Request;
@@ -155,13 +131,13 @@ Configure the api using Yaml (see the full configuration: :ref:`api_full_configu
'base_role' => 'ROLE_USER',
'actions' => [
'_index' => [
'methods' => [
'methods' => [
Request::METHOD_GET => true,
Request::METHOD_HEAD => true
],
],
'_entity' => [
'methods' => [
'methods' => [
Request::METHOD_GET => true,
Request::METHOD_HEAD => true
]
@@ -172,37 +148,35 @@ Configure the api using Yaml (see the full configuration: :ref:`api_full_configu
]);
}
}
```
The :code:`_index` and :code:`_entity` action
*********************************************
###### The `_index` and `_entity` action
The :code:`_index` and :code:`_entity` action are default actions:
The `_index` and `_entity` action are default actions:
* they will call a specific method in the default controller;
* they will generate defined routes:
Index:
Name: :code:`chill_api_single_accompanying_period_origin__index`
Name: `chill_api_single_accompanying_period_origin__index`
Path: :code:`/api/1.0/person/accompanying-period/origin.{_format}`
Path: `/api/1.0/person/accompanying-period/origin.{_format}`
Entity:
Name: :code:`chill_api_single_accompanying_period_origin__entity`
Name: `chill_api_single_accompanying_period_origin__entity`
Path: :code:`/api/1.0/person/accompanying-period/origin/{id}.{_format}`
Path: `/api/1.0/person/accompanying-period/origin/{id}.{_format}`
Role
****
###### Role
By default, the key `base_role` is used to check ACL. Take care of creating the :code:`Voter` required to take that into account.
By default, the key `base_role` is used to check ACL. Take care of creating the `Voter` required to take that into account.
For index action, the role will be called with :code:`NULL` as :code:`$subject`. The retrieved entity will be the subject for single queries.
For index action, the role will be called with `NULL` as `$subject`. The retrieved entity will be the subject for single queries.
You can also define a role for each method. In this case, this role is used for the given method, and, if any, the base role is taken into account.
.. code-block:: yaml
# config/packages/chill_main.yaml
```yaml
# config/packages/chill_main.yaml
chill_main:
apis:
accompanying_period_origin:
@@ -217,16 +191,13 @@ You can also define a role for each method. In this case, this role is used for
roles:
GET: MY_ROLE_SEE
HEAD: MY ROLE_SEE
```
Customize the controller
************************
You can customize the controller by hooking into the default actions. Take care of extending :code:`Chill\MainBundle\CRUD\Controller\ApiController`.
.. code-block:: php
###### Customize the controller
You can customize the controller by hooking into the default actions. Take care of extending `Chill\MainBundle\CRUD\Controller\ApiController`.
```php
namespace Chill\PersonBundle\Controller;
use Chill\MainBundle\CRUD\Controller\ApiController;
@@ -240,14 +211,14 @@ You can customize the controller by hooking into the default actions. Take care
$qb->where($qb->expr()->gt('e.noActiveAfter', ':now'))
->orWhere($qb->expr()->isNull('e.noActiveAfter'));
$qb->setParameter('now', new \DateTime('now'));
}
}
}
```
And set your controller in configuration:
.. code-block:: yaml
chill_main:
```yaml
chill_main:
apis:
accompanying_period_origin:
base_path: '/api/1.0/person/accompanying-period/origin'
@@ -265,15 +236,15 @@ And set your controller in configuration:
methods:
GET: true
HEAD: true
```
Create your own actions
***********************
###### Create your own actions
You can add your own actions:
.. code-block:: yaml
```yaml
chill_main:
chill_main:
apis:
-
class: Chill\PersonBundle\Entity\AccompanyingPeriod
@@ -281,7 +252,7 @@ You can add your own actions:
base_path: /api/1.0/person/accompanying-course
controller: Chill\PersonBundle\Controller\AccompanyingCourseApiController
actions:
# add a custom participation:
# add custom participation:
participation:
methods:
POST: true
@@ -296,13 +267,13 @@ You can add your own actions:
HEAD: null
PUT: null
single-collection: single
```
The key :code:`single-collection` with value :code:`single` will add a :code:`/{id}/ + "action name"` (in this example, :code:`/{id}/participation`) into the path, after the base path. If the value is :code:`collection`, no id will be set, but the action name will be append to the path.
The key `single-collection` with value `single` will add a `/{id}/ + "action name"` (in this example, `/{id}/participation`) into the path, after the base path. If the value is `collection`, no id will be set, but the action name will be append to the path.
Then, create the corresponding action into your controller:
.. code-block:: php
```php
namespace Chill\PersonBundle\Controller;
use Chill\MainBundle\CRUD\Controller\ApiController;
@@ -326,10 +297,10 @@ Then, create the corresponding action into your controller:
$this->eventDispatcher = $eventDispatcher;
$this->validator = $validator;
}
public function participationApi($id, Request $request, $_format)
{
/** @var AccompanyingPeriod $accompanyingPeriod */
/** @var AccompanyingPeriod $accompanyingPeriod */
$accompanyingPeriod = $this->getEntity('participation', $id, $request);
$person = $this->getSerializer()
->deserialize($request->getContent(), Person::class, $_format, []);
@@ -363,20 +334,18 @@ Then, create the corresponding action into your controller:
return $this->json($participation);
}
}
```
Managing association
********************
###### Managing association
ManyToOne association
=====================
## ManyToOne association
In ManyToOne association, you can add associated entities using the :code:`PATCH` request. By default, the serializer deserialize entities only with their id and discriminator type, if any.
In ManyToOne association, you can add associated entities using the `PATCH` request. By default, the serializer deserialize entities only with their id and discriminator type, if any.
Example:
.. code-block:: bash
curl -X 'PATCH' \
```
curl -X 'PATCH' \
'http://localhost:8001/api/1.0/person/accompanying-course/2668.json' \
-H 'accept: */*' \
-H 'Content-Type: application/json' \
@@ -386,16 +355,15 @@ Example:
"id": 2668,
"origin": { "id": 11 }
}'
```
ManyToMany associations
=======================
## ManyToMany associations
In OneToMany association, you can easily create route for adding and removing entities, using :code:`POST` and :code:`DELETE` requests.
In OneToMany association, you can easily create route for adding and removing entities, using `POST` and `DELETE` requests.
Prepare your entity, creating the methods :code:`addYourEntity` and :code:`removeYourEntity`:
.. code-block:: php
Prepare your entity, creating the methods `addYourEntity` and `removeYourEntity`:
```php
namespace Chill\PersonBundle\Entity;
use Chill\MainBundle\Entity\Scope;
@@ -437,12 +405,12 @@ Prepare your entity, creating the methods :code:`addYourEntity` and :code:`remov
{
$this->scopes->removeElement($scope);
}
```
Create your route into the configuration:
.. code-block:: yaml
```yaml
# config/packages/chill_main.yaml`
chill_main:
apis:
-
@@ -469,14 +437,12 @@ Create your route into the configuration:
controller_action: null
path: null
single-collection: single
```
This will create a new route, which will accept two methods: DELETE and POST:
.. code-block:: raw
+--------------+---------------------------------------------------------------------------------------+
| Property | Value |
+--------------+---------------------------------------------------------------------------------------+
| Route Name | chill_api_single_accompanying_course_scope |
| Path | /api/1.0/person/accompanying-course/{id}/scope.{_format} |
| Path Regex | {^/api/1\.0/person/accompanying\-course/(?P<id>[^/]++)/scope\.(?P<_format>[^/]++)$}sD |
@@ -488,14 +454,10 @@ This will create a new route, which will accept two methods: DELETE and POST:
| Class | Symfony\Component\Routing\Route |
| Defaults | _controller: csapi_accompanying_course_controller:scopeApi |
| Options | compiler_class: Symfony\Component\Routing\RouteCompiler |
+--------------+---------------------------------------------------------------------------------------+
Then, create the controller action. Call the method:
.. code-block:: php
```php
namespace Chill\PersonBundle\Controller;
use Chill\MainBundle\CRUD\Controller\ApiController;
@@ -510,14 +472,14 @@ Then, create the controller action. Call the method:
return $this->addRemoveSomething('scope', $id, $request, $_format, 'scope', Scope::class, [ 'groups' => [ 'read' ] ]);
}
}
```
This will allow to add a scope by his id, and delete them.
This will allow adding a scope by his id and deleting them.
Curl requests:
.. code-block:: bash
# add a scope with id 5
```
# add a scope with id 5
curl -X 'POST' \
'http://localhost:8001/api/1.0/person/accompanying-course/2868/scope.json' \
-H 'accept: */*' \
@@ -536,14 +498,13 @@ Curl requests:
"id": 5,
"type": "scope"
}'
```
Deserializing an association where multiple types are allowed
=============================================================
## Deserializing an association where multiple types are allowed
Sometimes, multiples types are allowed as association to one entity:
.. code-block:: php
Sometimes, multiple types are allowed as association to one entity:
```php
namespace Chill\PersonBundle\Entity\AccompanyingPeriod;
use Chill\PersonBundle\Entity\Person;
@@ -553,7 +514,6 @@ Sometimes, multiples types are allowed as association to one entity:
class Resource
{
/**
* @ORM\ManyToOne(targetEntity=ThirdParty::class)
* @ORM\JoinColumn(nullable=true)
@@ -566,7 +526,6 @@ Sometimes, multiples types are allowed as association to one entity:
*/
private $person;
/**
*
* @param $resource Person|ThirdParty
@@ -575,8 +534,8 @@ Sometimes, multiples types are allowed as association to one entity:
{
// ...
}
/**
* @return ThirdParty|Person
* @Groups({"read", "write"})
@@ -586,13 +545,13 @@ Sometimes, multiples types are allowed as association to one entity:
return $this->person ?? $this->thirdParty;
}
}
```
This is not well taken into account by the Symfony serializer natively.
You must, then, create your own CustomNormalizer. You can help yourself using this:
.. code-block:: php
```php
namespace Chill\PersonBundle\Serializer\Normalizer;
use Chill\PersonBundle\Entity\Person;
@@ -606,7 +565,6 @@ You must, then, create your own CustomNormalizer. You can help yourself using th
use Symfony\Component\Serializer\Exception;
use Chill\MainBundle\Serializer\Normalizer\DiscriminatedObjectDenormalizer;
class AccompanyingPeriodResourceNormalizer implements DenormalizerInterface, DenormalizerAwareInterface
{
use DenormalizerAwareTrait;
@@ -632,35 +590,34 @@ You must, then, create your own CustomNormalizer. You can help yourself using th
DiscriminatedObjectDenormalizer::TYPE,
$format,
// into the context, we add the list of allowed types:
[
DiscriminatedObjectDenormalizer::ALLOWED_TYPES =>
[
[
DiscriminatedObjectDenormalizer::ALLOWED_TYPES =>
[
Person::class, ThirdParty::class
]
]
);
$resource->setResource($res);
}
}
return $resource;
}
public function supportsDenormalization($data, string $type, string $format = null)
{
return $type === Resource::class;
}
}
}
```
Serialization for collection
****************************
###### Serialization for collection
A specific model has been defined for returning collection:
.. code-block:: json
{
```
{
"count": 49,
"results": [
],
@@ -672,13 +629,13 @@ A specific model has been defined for returning collection:
"items_per_page": 1
}
}
```
Where this is relevant, this model should be re-used in custom controller actions.
In custom actions, this can be achieved quickly by assembling results into a :code:`Chill\MainBundle\Serializer\Model\Collection`. The pagination information is given by using :code:`Paginator` (see :ref:`Pagination <pagination-ref>`).
.. code-block:: php
In custom actions, this can be achieved quickly by assembling results into a `Chill\MainBundle\Serializer\Model\Collection`. The pagination information is given by using `Paginator` (see [Pagination ](pagination-ref.md)).
```php
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Chill\MainBundle\Pagination\PaginatorInterface;
@@ -692,15 +649,11 @@ In custom actions, this can be achieved quickly by assembling results into a :co
return $this->json($model, Response::HTTP_OK, [], $context);
}
}
```
###### Full configuration example
.. _api_full_configuration:
Full configuration example
**************************
.. code-block:: yaml
```yaml
apis:
-
class: Chill\PersonBundle\Entity\AccompanyingPeriod
@@ -743,5 +696,4 @@ Full configuration example
path: null
single-collection: single
base_role: null
```

View File

@@ -1,91 +1,61 @@
.. Copyright (C) 2014 Champs Libres Cooperative SCRLFS
Permission is granted to copy, distribute and/or modify this document
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
or any later version published by the Free Software Foundation;
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
A copy of the license is included in the section entitled "GNU
Free Documentation License".
.. _forms:
Assets
#######
# Assets
The Chill assets (js, css, images, …) can be managed by `Webpack Encore`_, which is a thin wrapper for `Webpack`_ in Symfony applications.
Installation
************
###### Installation
Webpack Encore needs to be run in a Node.js environment, using the Yarn package manager. This Node.js environment can be set up using a node docker image. The bash script `docker-node.sh` set up a Node.js environment with an adequate configuration. Launch this container by typing:
.. code-block:: bash
$ bash docker-node.sh
In this NodeJS environment, install all the assets required by Chill with:
.. code-block:: bash
node@b91cab4f7cfc:/app$ yarn install
This command will install all the packages that are listed in `package.json`.
Any further required dependencies can be installed using the Yarn package. For instance, jQuery is installed by:
.. code-block:: bash
node@b91cab4f7cfc:/app$ yarn add jquery --dev
###### Usage
Usage
*****
Organize your assets
--------------------
### Organize your assets
Chill assets usually lives under the `/Resources/public` folder of each Chill bundle. The Webpack configuration set up in `webpack.config.js` automatically loads the required assets from the Chill bundles that are used.
For adding your own assets to Webpack, you must add an entry in the `webpack.config.js` file. For instance, the following entry will output a file `main.js` collecting the js code (and possibly css, image, etc.) from `./assets/main.js`.
.. code-block:: js
.addEntry('main', './assets/main.js')
To gather the css files, simply connect them to your js file, using `require`. The css file is seen as a dependency of your js file. :
.. code-block:: js
// assets/js/main.js
require('../css/app.css');
For finer configuration of webpack encore, we refer to the above-linked documentation.
Compile the assets
------------------
### Compile the assets
To compile the assets, run this line in the NodeJS container:
.. code-block:: bash
node@b91cab4f7cfc:/app$ yarn run encore dev
While developing, you can tell Webpack Encore to continuously watch the files you are modifying:
.. code-block:: bash
node@b91cab4f7cfc:/app$ yarn run encore dev --watch
Use the assets in the templates
--------------------------------
### Use the assets in the templates
Any entry defined in the webpack.config.js file can be linked to your application using the symfony `asset` helper:
.. code-block:: html
<head>
...
<link rel="stylesheet" href="{{ asset('build/app.css') }}">
@@ -93,12 +63,4 @@ Any entry defined in the webpack.config.js file can be linked to your applicatio
<body>
...
<script src="{{ asset('build/app.js') }}"></script>
</body>
.. _Webpack Encore: https://www.npmjs.com/package/@symfony/webpack-encore
.. _Webpack: https://webpack.js.org/
</body>

View File

@@ -0,0 +1,23 @@
# Code style, code quality and other tools
## PHP-cs-fixer
For development, you will also have to install:
- [php-cs-fixer ](https://cs.symfony.com/)
We also encourage you to use tools like [phpstan ](https://phpstan.org) and [rector ](https://getrector.com).
For running php-cs-fixer:
symfony composer php-cs-fixer
## Execute tests
symfony composer exec phpunit -- /path/to_your_test.php
Note that IDE like PhpStorm should be able to run tests, even KernelTestcase or WebTestCase, [from within their interfaces ](https://www.jetbrains.com/help/phpstorm/using-phpunit-framework.html#run_phpunit_tests).
## Execute rector
symfony composer exec rector -- process

View File

@@ -1,34 +0,0 @@
Code style, code quality and other tools
########################################
PHP-cs-fixer
============
For development, you will also have to install:
- `php-cs-fixer <https://cs.symfony.com/>`_
We also encourage you to use tools like `phpstan <https://phpstan.org>`_ and `rector <https://getrector.com>`_.
For running php-cs-fixer:
.. code-block:: bash
symfony composer php-cs-fixer
Execute tests
=============
.. code-block:: bash
symfony composer exec phpunit -- /path/to_your_test.php
Note that IDE like PhpStorm should be able to run tests, even KernelTestcase or WebTestCase, `from within their interfaces <https://www.jetbrains.com/help/phpstorm/using-phpunit-framework.html#run_phpunit_tests>`_.
Execute rector
==============
.. code-block:: bash
symfony composer exec rector -- process

View File

@@ -0,0 +1,90 @@
# Create a new bundle {#create-new-bundle}
:::: warning
::: title
Warning
:::
This part of the doc is not yet tested
::::
## Create a new directory with Bundle class
``` bash
mkdir -p src/Bundle/ChillSomeBundle/src/config
mkdir -p src/Bundle/ChillSomeBundle/src/Controller
```
Add a bundle file
``` php
<?php
declare(strict_types=1);
/*
* 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.
*/
namespace Chill\SomeBundle;
use Symfony\Component\HttpKernel\Bundle\Bundle;
class ChillSomeBundle extends Bundle {}
```
And a route file:
``` yaml
chill_ticket_controller:
resource: '@ChillTicketBundle/Controller/'
type: annotation
```
## Register the new psr-4 namespace
In composer.json, add the new psr4 namespace
``` diff
{
"autoload": {
"psr-4": {
+ "Chill\\SomeBundle\\": "src/Bundle/ChillSomeBundle/src",
}
}
}
```
## Register the bundle
Register in the file `config/bundles.php`:
``` php
Vendor\Bundle\YourBundle\YourBundle::class => ['all' => true],
```
And import routes in `config/routes/chill_some_bundle.yaml`:
``` yaml
chill_ticket_bundle:
resource: '@ChillSomeBundle/config/routes.yaml'
```
## Add the doctrine_migration namespace
Add the namespace to `config/packages/doctrine_migrations_chill.yaml`
``` diff
doctrine_migrations:
migrations_paths:
+ 'Chill\Some\Ticket': '@ChillSomeBundle/migrations'
```
## Dump autoloading
``` bash
symfony composer dump-autoload
```

View File

@@ -1,34 +0,0 @@
.. Copyright (C) 2014 Champs Libres Cooperative SCRLFS
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
or any later version published by the Free Software Foundation;
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
A copy of the license is included in the section entitled "GNU
Free Documentation License".
.. _create-new-bundle:
Create a new bundle
*******************
Create your own bundle is not a trivial task.
The easiest way to achieve this is seems to be :
1. Prepare a fresh installation of the chill project, in a new directory
2. Create a new bundle in this project, in the src directory
3. Initialize a git repository **at the root bundle**, and create your initial commit.
4. Register the bundle with composer/packagist. If you do not plan to distribute your bundle with packagist, you may use a custom repository for achieve this [#f1]_
5. Move to a development installation, made as described in the :ref:`installation-for-development` section, and add your new repository to the composer.json file
6. Work as :ref:`usual <editing-code-and-commiting>`
.. warning::
This part of the doc is not yet tested
TODO
.. rubric:: Footnotes
.. [#f1] Be aware that we use the Affero GPL Licence, which ensure that all users must have access to derivative works done with this software.

View File

@@ -1,37 +1,26 @@
.. Copyright (C) 2014-2023 Champs Libres Cooperative SCRLFS
Permission is granted to copy, distribute and/or modify this document
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
or any later version published by the Free Software Foundation;
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
A copy of the license is included in the section entitled "GNU
Free Documentation License".
.. _cronjob:
Cron jobs
*********
###### Cron jobs
Some tasks must be executed regularly: refresh some materialized views, remove old data, ...
For this purpose, one can programmatically implements a "cron job", which will be scheduled by a specific command.
The command :code:`chill:cron-job:execute`
==========================================
## The command `chill:cron-job:execute`
The command :code:`chill:cron-job:execute` will schedule a task, one by one. In a classical implementation, it should
The command `chill:cron-job:execute` will schedule a task, one by one. In a classical implementation, it should
be executed every 15 minutes (more or less), to ensure that every task can be executed.
.. warning::
This command should not be executed in parallel. The installer should ensure that two job are executed concurrently.
How to implements a cron job ?
==============================
## How to implements a cron job ?
Implements a :code:`Chill\MainBundle\Cron\CronJobInterface`. Here is an example:
.. code-block:: php
Implements a `Chill\MainBundle\Cron\CronJobInterface`. Here is an example:
namespace Chill\MainBundle\Service\Something;
@@ -83,19 +72,15 @@ Implements a :code:`Chill\MainBundle\Cron\CronJobInterface`. Here is an example:
}
}
How are cron job scheduled ?
============================
## How are cron job scheduled ?
If the command :code:`chill:cron-job:execute` is run with one or more :code:`job` argument, those jobs are run, **without checking that the job can run** (the method :code:`canRun` is not executed).
If the command `chill:cron-job:execute` is run with one or more `job` argument, those jobs are run, **without checking that the job can run** (the method `canRun` is not executed).
If any :code:`job` argument is given, the :code:`CronManager` schedule job with those steps:
If any `job` argument is given, the `CronManager` schedule job with those steps:
* the tasks are ordered, with:
* a priority is given for tasks that weren't never executed;
* then, the tasks are ordered, the last executed are the first in the list
* then, for each tasks, and in the given order, the first task where :code:`canRun` return :code:`TRUE` will be executed.
The command :code:`chill:cron-job:execute` execute **only one** task.
* then, for each tasks, and in the given order, the first task where `canRun` return `TRUE` will be executed.
The command `chill:cron-job:execute` execute **only one** task.

View File

@@ -1,15 +1,11 @@
.. Copyright (C) 2014 Champs Libres Cooperative SCRLFS
Permission is granted to copy, distribute and/or modify this document
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
or any later version published by the Free Software Foundation;
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
A copy of the license is included in the section entitled "GNU
Free Documentation License".
.. _crud:
CRUD
####
# CRUD
Chill provide an API to create a basic CRUD.
@@ -20,30 +16,21 @@ One can follow those steps to create a CRUD for one entity:
3. customize the templates if required ;
4. customize some steps of the controller if required ;
An example with the [`ClosingMotive`` (PersonBundle) in the admin part of Chill:
An example with the ``ClosingMotive`` (PersonBundle) in the admin part of Chill:
Auto-loading the routes
***********************
###### Auto-loading the routes
Ensure that those lines are present in your file `app/config/routing.yml`:
.. code-block:: yaml
chill_cruds:
resource: 'chill_main_crud_route_loader:load'
type: service
Create your model
*****************
###### Create your model
Create your model on the usual way (in this example, ORM informations are stored in yaml file):
.. code-block:: php
```php
namespace Chill\PersonBundle\Entity\AccompanyingPeriod;
use Doctrine\Common\Collections\Collection;
@@ -62,41 +49,40 @@ Create your model on the usual way (in this example, ORM informations are stored
* @var array
*/
private $name;
/**
*
* @var boolean
*/
private $active = true;
/**
*
* @var self
*/
private $parent = null;
/**
* child Accompanying periods
*
* @var Collection
*/
private $children;
/**
*
* @var float
*/
private $ordering = 0.0;
// getters and setters come here
}
```
The form:
.. code-block:: php
```php
namespace Chill\PersonBundle\Form;
use Symfony\Component\Form\AbstractType;
@@ -108,7 +94,6 @@ The form:
use Symfony\Component\Form\Extension\Core\Type\NumberType;
/**
*
*
*/
class ClosingMotiveType extends AbstractType
@@ -145,22 +130,21 @@ The form:
;
}
}
```
Configure the crud
******************
###### Configure the crud
The crud is configured using the key ``crud`` under ``chill_main``
.. code-block:: yaml
```yaml
chill_main:
cruds:
-
-
# the class which is concerned by the CRUD
class: '\Chill\PersonBundle\Entity\AccompanyingPeriod\ClosingMotive::class'
# give a name for the crud. This will be used internally
name: closing_motive
# add a base path for the
# add a base path for the
base_path: /admin/closing-motive
# this is the form class
form_class: 'Chill\PersonBundle\Form\ClosingMotiveType::class'
@@ -170,8 +154,8 @@ The crud is configured using the key ``crud`` under ``chill_main``
# this is a list of action you can configure
# by default, the actions `index`, `view`, `new` and `edit` are automatically create
# you can add more actions or configure some details about them
actions:
index:
actions:
index:
# the default template for index is very poor,
# you will need to override it
template: '@ChillPerson/ClosingMotive/index.html.twig'
@@ -180,16 +164,16 @@ The crud is configured using the key ``crud`` under ``chill_main``
new:
role: ROLE_ADMIN
# by default, the template will only show the form
# you can override it
# you can override it
template: '@ChillPerson/ClosingMotive/new.html.twig'
edit:
role: ROLE_ADMIN
template: '@ChillPerson/ClosingMotive/edit.html.twig'
```
To leave the bundle auto-configure the ``chill_main`` bundle, you can `prepend the configuration of the ChillMain Bundle <https://symfony.com/doc/current/bundles/prepend_extension.html>`_:
.. code-block:: php
To leave the bundle autoconfigure the ``chill_main`` bundle, you can `prepend the configuration of the ChillMain Bundle ](https://symfony.com/doc/current/bundles/prepend_extension.html):
```php
namespace Chill\PersonBundle\DependencyInjection;
use Symfony\Component\DependencyInjection\ContainerBuilder;
@@ -204,13 +188,13 @@ To leave the bundle auto-configure the ``chill_main`` bundle, you can `prepend t
{
// skipped here
}
public function prepend(ContainerBuilder $container)
public function prepend(ContainerBuilder $container)
{
$this->prependCruds($container);
}
protected function prependCruds(ContainerBuilder $container)
{
$container->prependExtensionConfig('chill_main', [
@@ -240,20 +224,17 @@ To leave the bundle auto-configure the ``chill_main`` bundle, you can `prepend t
]);
}
}
```
###### Customize templates
Customize templates
*******************
The current template are quite basic. You can override and extends them.
The current template is quite basic. You can override and extends them.
For a better inclusion, you can embed them instead of extending them.
For index. Note that we extend here the `admin` layout, not the default one:
.. code-block:: html+jinja
```php
{% extends '@ChillMain/Admin/layout.html.twig' %}
{% block admin_content %}
@@ -288,11 +269,11 @@ For index. Note that we extend here the `admin` layout, not the default one:
{% endblock %}
{% endembed %}
{% endblock %}
```
For edit template:
.. code-block:: html+jinja
```php
{% extends '@ChillMain/Admin/layout.html.twig' %}
{% block title %}
@@ -309,8 +290,6 @@ For edit template:
For new template:
.. code-block:: html+jinja
{% extends '@ChillMain/Admin/layout.html.twig' %}
{% block title %}
@@ -322,17 +301,16 @@ For new template:
{% block content_form_actions_save_and_show %}{% endblock %}
{% endembed %}
{% endblock %}
```
Customize some steps in the controller
**************************************
###### Customize some steps in the controller
Some steps may be customized by overriding the default controller and some methods. Here, we will override the way the entity is created, and the ordering of the "index" page:
* we will associate a parent ClosingMotive to the element if a parameter `parent_id` is found ;
* we will order the ClosingMotive by the ``ordering`` property
.. code-block:: php
```php
namespace Chill\PersonBundle\Controller;
use Chill\MainBundle\CRUD\Controller\CRUDController;
@@ -376,14 +354,13 @@ Some steps may be customized by overriding the default controller and some metho
return $query->orderBy('e.ordering', 'ASC');
}
}
```
How-to and questions
********************
###### How-to and questions
Which role is required for each action ?
========================================
## Which role is required for each action ?
By default, each action will use:
By default, each action will use:
1. the role defined under the action key ;
2. the base role as upper, with the action name appended:
@@ -396,22 +373,21 @@ By default, each action will use:
The entity will be passed to the role:
* for the ``view`` and ``edit`` action: the entity fetched from database
* for the ``new`` action: the entity which is created (you can override default values using
* for index action (or if you re-use the ``indexAction`` method: ``null``
How to add some route and actions ?
===================================
* for the ``new`` action: the entity which is created (you can override default values using
* for index action (or if you re-use the ``indexAction`` method: ``null``
## How to add some route and actions ?
Add them under the action key:
.. code-block:: yaml
```yaml
chill_main:
cruds:
-
-
# snipped
actions:
myaction: ~
```
The method `myactionAction` will be called by the parameter.
@@ -419,13 +395,12 @@ Inside this action, you can eventually call another internal method:
* ``indexAction`` for a list of items ;
* ``viewAction`` for a view
* ``editFormAction`` for an edition
* ``editFormAction`` for an edition
* ``createFormAction`` for a creation
Example:
.. code-block:: php
```php
namespace CSConnectes\SPBundle\Controller;
use Chill\PersonBundle\CRUD\Controller\OneToOneEntityPersonCRUDController;
@@ -456,34 +431,29 @@ Example:
}
}
```
How to create a CRUD for entities associated to persons
=======================================================
## How to create a CRUD for entities associated to persons
The bundle person provide some controller and template you can override, instead of the ones present in the mainbundle:
* :code:`Chill\PersonBundle\CRUD\Controller\EntityPersonCRUDController` for entities linked with a one-to-may association to :code:`Person` class ;
* :code:`Chill\PersonBundle\CRUD\Controller\OneToOneEntityPersonCRUDController` for entities linked with a one-to-one association to :code:`Person` class.
* `Chill\PersonBundle\CRUD\Controller\EntityPersonCRUDController` for entities linked with a one-to-may association to `Person` class ;
* `Chill\PersonBundle\CRUD\Controller\OneToOneEntityPersonCRUDController` for entities linked with a one-to-one association to `Person` class.
There are also template defined under ``@ChillPerson/CRUD/`` namespace.
Those controller assume that:
Those controllers assume that:
* the entity provide the method :code:`getPerson` and :code:`setPerson` ;
* the entity provide the method `getPerson` and `setPerson` ;
* the `index`'s id path will be the id of the person, and the ids in `view` and `edit` path will be the id of the entity ;
This bundle also use by default the templates inside ``@ChillPerson/CRUD/``.
This bundle also uses by default the templates inside ``@ChillPerson/CRUD/``.
###### Reference
Reference
*********
Configuration reference
=======================
.. code-block:: txt
## Configuration reference
```yaml
chill_main:
cruds:
@@ -514,9 +484,8 @@ Configuration reference
# the template to render the view
template: null
```
Twig default block
==================
## Twig default block
This part should be documented.

View File

@@ -0,0 +1,70 @@
# Database Principles
This page provides a global understanding of the Chill database and explains some implementation details that help accelerate processing from the database or exploit it more easily.
!!! warning "Database Schema Stability"
The stability of the database schema is not guaranteed.
However, it evolves relatively little. It is rare for tables or columns to be deleted or renamed, but it is not guaranteed that this cannot happen.
## Overview
A commented list of all tables is available in CSV format at `./database/table_list.csv`.
### Schema and naming conventions
At the beginning of Chill's history, PostgreSQL schemas were not used. Data was stored in the `public` schema.
Later, new bundles appeared, and tables were classified into dedicated schemas.
Currently:
- for older bundles, those that already have tables in the public schema, new tables are added to this schema. They are prefixed with `chill_<bundle_name>_`;
- for more recent bundles, tables are created in the dedicated schema
### Historical data
Some data is historized:
- the referents of an accompanying period;
- the statuses of an accompanying period;
- the link between territories and users;
- etc.
In these cases, Chill generally creates two columns, which are usually named `startDate` and `endDate`. When the `endDate` column is `NULL`, it means that the period is not "closed". The `startDate` column is not nullable.
In some cases, the current data (referent of an accompanying period, for example) is also repeated at the table level itself. For example, the accompanying periods table `chill_person_accompanying_period` has a `step` column (the status of the period) and `user_id` (referent id) in addition to the history. Although redundant, this simplifies processing.
## Special relationships
### Users, households, addresses
Users have an address through households: in the interface, the address is recorded in the household file, and it is "given" to users who are members of the household, **and** who share the address of this household. Indeed, it is possible that users "belong" to a household without being domiciled there: this is the case, for example, for children in shared custody.
The history of users' membership in the household is preserved, as well as the history of addresses for the same household.
The tables involved are as follows:
- the `chill_person_person` table lists the users;
- the `chill_person_household_members` table lists household memberships: this is the junction between users and households:
- the `startDate` and `endDate` columns indicate the start and end date of membership;
- the `shareHousehold` column indicates whether the user shares the household address (if yes, its value is `TRUE`)
- the `chill_person_household` table lists households
- the `chill_person_household_to_addresses` table associates households with addresses;
- the `chill_main_address` table contains addresses, indicating the validity start date (`validFrom`) and the validity end date (`validTo`).
To simplify the resolution of addresses and users, two views have been implemented:
- the `view_chill_person_household_address` view takes up, for each user, the history of household memberships broken down by the address history of a household.
In other words, a line is created each time a user changes household, or a household changes address. It is therefore possible to find the complete address history for a given user via this table.
- the `view_chill_person_current_address` view takes up the current address of users.
### Addresses and geographical units
Chill provides statistics on the location of addresses relative to geographical zones (`chill_main_geographical_unit`).
Since the geographical resolution of addresses is costly in CPU and processing time, a materialized view has been created: `view_chill_main_address_geographical_unit`. It is refreshed daily in the production database.
## Table list and comments
A commented list of all tables is available in CSV format at `./database/table_list.csv`.

View File

@@ -1,84 +0,0 @@
.. database-principles:
Principes de la base de données
###############################
Cette page donne une compréhension globale de la base de donnée de Chill, et explique quelques détails d'implémentations qui permettent d'accélérer les traitements à partir de la base de donnée, ou de l'exploiter plus aisément.
Cette page est rédigée en français.
.. note::
La stabilité du schéma de la base de donnée n'est pas garantie.
Toutefois, ce dernier évolue relativement peu. Il est rare que des tables ou des colonnes soient supprimées ou renommées. Mais il n'est pas garanti que cela puisse arriver.
Généralités
===========
Une liste commentée de toutes les tables :download:`est disponible au format CSV <./database/table_list.csv`.
Schéma et conventions de nommage
--------------------------------
Au début de l'histoire de Chill, les schémas postgresql n'étaient pas exploités. Les données étaient stockées dans le schéma :code:`public`.
Par la suite, des nouveaux bundles sont apparus, et les tables ont été classées dans des schémas dédiés.
A l'heure actuelle:
- pour les anciens bundle, ceux qui ont déjà des tables dans le schéma public, les nouvelles tables sont ajoutées à ce schéma. Elles sont préfixées par :code:`chill_<nom du bundle>_`;
- pour les bundles plus récents, les tables sont créées dans le schéma dédié
Données avec de l'historicité
-----------------------------
Certaines données sont historisées:
- les référents d'un parcours;
- les statuts d'un parcours;
- la liaison entre les centres et les usagers;
- etc.
Dans ces cas-là, Chill crée généralement deux colonnes, qui sont habituellement nommées :code:`startDate` et :code:`endDate`. Lorsque la colonne :code:`endDate` est à :code:`NULL`, cela signifie que la période n'est pas "fermée". La colonne :code:`startDate` n'est pas nullable.
Dans certains cas, la donnée actuelle (référent d'un parcours, par exemple) est également répétée au niveau de la table en elle-même. Par exemple, la table des parcours :code:`chill_person_accompanying_period` comporte une colonne :code:`step` (le statut du parcours) et :code:`user_id` (id du référent) en plus de l'historique. Bien que redondant, cela simplifie les traitements.
Relations particulières
=======================
Usagers, ménages, adresses
--------------------------
Les usagers ont une adresse au travers des ménages: dans l'interface, l'adresse est inscrite dans le dossier du ménage, et elle est "donnée" aux usagers membres du ménage, **et** qui partagent l'adresse de ce ménage. En effet, il est possible que des usagers "appartiennent" à un ménage sans y être domicilié: c'est le cas, par exemple, des enfants en garde alternée.
L'historique de l'appartenance des usagers au ménage est conservée, de même que l'historique des adresses pour un même ménage.
Les tables en jeu sont les suivantes:
- la table :code:`chill_person_person` liste les usagers;
- la table :code:`chill_person_household_members` liste les appartenances au ménage: il s'agit de la jointure entre les usagers et les ménages:
- les colonnes :code:`startDate` et :code:`endDate` indiquent la date de début et la date de fin de l'appartenance;
- la colonne :code:`shareHousehold` indique si l'utilisateur partage l'adresse du ménage (si oui, sa valeur est :code:`TRUE`)
- la table :code:`chill_person_household` liste les ménages
- la table :code:`chill_person_household_to_addresses` associe les ménages aux adresses;
- la table :code:`chill_main_address` contient les adresses, en indiquant la date de début de validité (:code:`validFrom`) et la fin de validité (:code:`validTo`).
Pour simplifier la résolution des adresses et des usagers, deux vues ont été mises en œuvre:
- la vue :code:`view_chill_person_household_address` reprend, pour chaque usager, l'historique des appartenances au ménage découpée par l'historique des adresses d'un ménage.
Autrement dit, une ligne est créée à chaque fois qu'un usager change de ménage, ou qu'un ménage change d'adresse. Il est donc possible de retrouver l'historique complet des adresses pour un usager donné via cette table.
- la vue :code:`view_chill_person_current_address` reprend l'adresse actuelle des usagers.
Adresses et unités géographiques
--------------------------------
Chill propose des statistiques sur la localisation des adresses par rapport à des zones géographiques (:code:`chill_main_geographical_unit`).
Comme la résolution géographique des adresses est coûteuse en CPU et en temps de traitement, une vue matérialisée a été créée: :code:`view_chill_main_address_geographical_unit`. Elle est rafraichie quotidiennement dans la base de donnée de production.
Liste des tables et commentaires
================================
Une liste commentée de toutes les tables :download:`est disponible au format CSV <./database/table_list.csv`.

View File

@@ -1,6 +1,6 @@
order,table_schema,table_name,commentaire
1,chill_3party,party_category,Catégorie de tiers
2,chill_3party,party_center,Association entre les tiers et les centres (déprécié)
2,chill_3party,party_center,Association entre les tiers et les territoires (déprécié)
3,chill_3party,party_profession,Profession du tiers (déprécié)
4,chill_3party,third_party,Tiers
5,chill_3party,thirdparty_category,association tiers - catégories
@@ -54,7 +54,7 @@ order,table_schema,table_name,commentaire
53,public,activitytpresence,Présence aux échanges
54,public,activitytype,Types d'échanges
55,public,activitytypecategory,Catégories de types d'échanges
56,public,centers,"Centres (territoires, agences, etc.)"
56,public,centers,"Territoires (territoires, agences, etc.)"
57,public,chill_activity_activity_chill_person_socialaction,
58,public,chill_activity_activity_chill_person_socialissue
59,public,chill_docgen_template,Gabarits de documents
@@ -111,7 +111,7 @@ order,table_schema,table_name,commentaire
110,public,chill_person_marital_status,Etats civils
111,public,chill_person_not_duplicate,
112,public,chill_person_person,Usagers
113,public,chill_person_person_center_history,Historique des centres d'un usagers
113,public,chill_person_person_center_history,Historique des territoires d'un usagers
114,public,chill_person_persons_to_addresses,Déprécié
115,public,chill_person_phone,Numéros d etéléphone supplémentaires d'un usager
116,public,chill_person_relations,Types de relations de filiation
@@ -142,7 +142,7 @@ order,table_schema,table_name,commentaire
141,public,permission_groups
142,public,permissionsgroup_rolescope
143,public,persons_spoken_languages
144,public,regroupment,Regroupement de centres
144,public,regroupment,Regroupement de territoires
145,public,regroupment_center,
146,public,role_scopes,
147,public,scopes,Services
1 order table_schema table_name commentaire
2 1 chill_3party party_category Catégorie de tiers
3 2 chill_3party party_center Association entre les tiers et les centres (déprécié) Association entre les tiers et les territoires (déprécié)
4 3 chill_3party party_profession Profession du tiers (déprécié)
5 4 chill_3party third_party Tiers
6 5 chill_3party thirdparty_category association tiers - catégories
54 53 public activitytpresence Présence aux échanges
55 54 public activitytype Types d'échanges
56 55 public activitytypecategory Catégories de types d'échanges
57 56 public centers Centres (territoires, agences, etc.) Territoires (territoires, agences, etc.)
58 57 public chill_activity_activity_chill_person_socialaction
59 58 public chill_activity_activity_chill_person_socialissue
60 59 public chill_docgen_template Gabarits de documents
111 110 public chill_person_marital_status Etats civils
112 111 public chill_person_not_duplicate
113 112 public chill_person_person Usagers
114 113 public chill_person_person_center_history Historique des centres d'un usagers Historique des territoires d'un usagers
115 114 public chill_person_persons_to_addresses Déprécié
116 115 public chill_person_phone Numéros d etéléphone supplémentaires d'un usager
117 116 public chill_person_relations Types de relations de filiation
142 141 public permission_groups
143 142 public permissionsgroup_rolescope
144 143 public persons_spoken_languages
145 144 public regroupment Regroupement de centres Regroupement de territoires
146 145 public regroupment_center
147 146 public role_scopes
148 147 public scopes Services

View File

@@ -1,30 +1,17 @@
.. Copyright (C) 2016 Champs Libres Cooperative SCRLFS
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
or any later version published by the Free Software Foundation;
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
A copy of the license is included in the section entitled "GNU
Free Documentation License".
Embeddable comments
###################
# Embeddable comments
Those embeddable comments is a comment with some metadata:
* the one who updated the comment (the comment itself, and not the whole entity);
* the date and time for the last update (again, the comment itself, and not the whole entity).
We make usage of `embeddables <https://www.doctrine-project.org/projects/doctrine-orm/en/2.8/tutorials/embeddables.html>`_.
We make usage of [embeddable ](https://www.doctrine-project.org/projects/doctrine-orm/en/2.8/tutorials/embeddables.html).
Embed the comment
=================
## Embed the comment
The comment may be embedded into the entity:
.. code-block:: php
```php
namespace Chill\ActivityBundle\Entity;
use Chill\MainBundle\Entity\Embeddable\CommentEmbeddable;
@@ -51,7 +38,6 @@ The comment may be embedded into the entity:
*/
private $comment;
/**
* @return \Chill\MainBundle\Entity\Embeddalbe\CommentEmbeddable
*/
@@ -68,27 +54,21 @@ The comment may be embedded into the entity:
$this->comment = $comment;
}
}
```
Note on relation to :class:`User`
=================================
## Note on relation to :class:`User`
The embeddable proposed by Doctrine does not support relationship to other entities. The entity Comment is able to render a user's id, but not an User object.
`$activity->getComment()->getUserId(); // return user id of the last author`
.. code-block:: php
`$activity->getComment()->getUser(); // does not work !`
$activity->getComment()->getUserId(); // return user id of the last author
## Usage into form
$activity->getComment()->getUser(); // does not work !
Usage into form
===============
Use the :class:`Chill\MainBundle\Form\Type\CommentType` to load the form widget:
.. code-block:: php
Use the `Chill\MainBundle\Form\Type\CommentType` to load the form widget:
```php
namespace Chill\ActivityBundle\Form;
use Chill\MainBundle\Form\Type\CommentType;
@@ -110,12 +90,8 @@ Use the :class:`Chill\MainBundle\Form\Type\CommentType` to load the form widget:
;
}
}
```
Render the comment
==================
.. code-block:: twig
{{ activity.comment|chill_entity_render_box }}
## Render the comment
`{{ activity.comment|chill_entity_render_box }}`

View File

@@ -1,16 +1,4 @@
.. Copyright (C) 2014 Champs Libres Cooperative SCRLFS
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
or any later version published by the Free Software Foundation;
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
A copy of the license is included in the section entitled "GNU
Free Documentation License".
.. _entity-info:
Stats about event on entity in php world
########################################
# Stats about event on entity in php world
It is necessary to be able to gather information about events for some entities:
@@ -18,11 +6,9 @@ It is necessary to be able to gather information about events for some entities:
- who did it;
- ...
Those "infos" are not linked with right management, like describe in :ref:`timelines`.
Those "infos" are not linked with right management, like describe in [timelines`.
“infos” for some stats and info about an entity
-----------------------------------------------
### “infos” for some stats and info about an entity
Building an info means:
@@ -32,10 +18,10 @@ Building an info means:
A framework api is built to be able to build multiple “infos” entities
through “union” views:
- use a command ``bin/console chill:db:sync-views`` to synchronize view (create view if it does not exists, or update
- use a command ``bin/console chill:db:sync-views`` to synchronize view (create view if it does not exist, or update
views when new SQL parts are added in the UNION query. Internally, this command call a new ``ViewEntityInfoManager``,
which iterate over available views to build the SQL;
- one can create a new “view entity info” by implementing a
- one can create new “view entity info” by implementing a
``ViewEntityInfoProviderInterface``
- this implementation of the interface is free to create another
interface for building each part of the UNION query. This interface
@@ -45,14 +31,13 @@ through “union” views:
So, converting new “events” into rows for ``AccompanyingPeriodInfo`` is
just implementing this interface!
Implementation for AccompanyingPeriod (``AccompanyingPeriod/AccompanyingPeriodInfo``)
-------------------------------------------------------------------------------------
### Implementation for AccompanyingPeriod (``AccompanyingPeriod/AccompanyingPeriodInfo``)
A class is created for computing some statistical info for an
AccompanyingPeriod: ``AccompanyingPeriod/AccompanyingPeriodInfo``. This
contains information about “something happens”, who did it and when.
Having those info in table answer some questions like:
Having that info in the table answers some questions like:
- when is the last and the first action (AccompanyingPeriodWork,
Activity, AccompanyingPeriodWorkEvaluation, …) on the period;
@@ -60,46 +45,43 @@ Having those info in table answer some questions like:
user.
The AccompanyingPeriod info is mapped to a SQL view, not a table. The
sql view is built dynamically (see below), and gather infos from
SQL view is built dynamically (see below), and gathers info from
ActivityBundle, PersonBundle, CalendarBundle, … It is possible to create
custom bundle and add info on this view.
.. code:: php
a custom bundle and add info on this view.
```php
/**
*
* @ORM\Entity()
* @ORM\Table(name="view_chill_person_accompanying_period_info") <==== THIS IS A VIEW, NOT A TABLE
* @ORM\Table(name="view_chill_person_accompanying_period_info") ](==== THIS IS A VIEW, NOT A TABLE
*/
class AccompanyingPeriodInfo
{
// ...
}
```
Why do we need this ?
~~~~~~~~~~~~~~~~~~~~~
#### Why do we need this?
For multiple jobs in PHP world:
For multiple jobs in a PHP world:
- moving the accompanying period to another steps when inactive,
- moving the accompanying period to another step when inactive,
automatically;
- listing all the users which are intervening on the action on a new
“Liste des intervenants” page;
- filtering on exports
Later, we will launch automatic anonymise for accompanying period and
Later we will launch automatic anonymize for an accompanying period and
all related entities through this information.
How is built the SQL views which is mapped to “info” entities ?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#### How are the SQL views built that are mapped to “info” entities?
The AccompanyingPeriodInfo entity is mapped by a SQL view (not a regular
table).
The sql view is built dynamically, it is a SQL view like this, for now (April 2023):
.. code:: sql
The SQL view is built dynamically; it is a SQL view like this, for now (April 2023):
```sql
create view view_chill_person_accompanying_period_info
(accompanyingperiod_id, relatedentity, relatedentityid, user_id, infodate, discriminator, metadata) as
SELECT w.accompanyingperiod_id,
@@ -191,13 +173,14 @@ The sql view is built dynamically, it is a SQL view like this, for now (April 20
FROM activity
LEFT JOIN activity_user au ON activity.id = au.activity_id
WHERE activity.accompanyingperiod_id IS NOT NULL;
```
As you can see, the view gather multiple SELECT queries and bind them
As you can see, the view gathers multiple SELECT queries and binds them
with UNION.
Each SELECT query is built dynamically, through a class implementing an
interface: ``Chill\PersonBundle\Service\EntityInfo\AccompanyingPeriodInfoUnionQueryPartInterface``, `like
here <https://gitlab.com/Chill-Projet/chill-bundles/-/blob/master/src/Bundle/ChillPersonBundle/Service/EntityInfo/AccompanyingPeriodInfoQueryPart/AccompanyingPeriodWorkEndQueryPartForAccompanyingPeriodInfo.php>`__
here <https://gitlab.com/Chill-Projet/chill-bundles/-/blob/master/src/Bundle/ChillPersonBundle/Service/EntityInfo/AccompanyingPeriodInfoQueryPart/AccompanyingPeriodWorkEndQueryPartForAccompanyingPeriodInfo.php.md)__
To add new `SELECT` query in different `UNION` parts in the sql view, create a
To add new `SELECT` query in different `UNION` parts in the SQL view, create a
service and implements this interface: ``Chill\PersonBundle\Service\EntityInfo\AccompanyingPeriodInfoUnionQueryPartInterface``.

View File

@@ -1,12 +1,10 @@
ESLint
======
## ESLint
To improve the quality of our JS and VueJS code, ESLint and eslint-plugin-vue are implemented within the chill-bundles project.
Commands
--------
### Commands
To run ESLint, you can simply use the ``eslint`` command within the chill-bundles directory.
To run ESLint, you can simply use the [`eslint`` command within the chill-bundles directory.
This runs eslint **not** taking the baseline into account, thus showing all existing errors in the project.
A script was also added to package.json allowing you to execute ``yarn run eslint``.
@@ -19,20 +17,18 @@ Interesting options that can be used in combination with eslint are:
- ``--quiet`` to only get errors and silence the warnings
- ``--fix`` to have ESLint fix what it can, automatically. This will not fix everything.
Baseline
--------
### Baseline
To allow us the time to fix linting errors/warnings a baseline has been created using the following command
To allow us the time to fix linting errors/warnings, a baseline has been created using the following command
- ``npx eslint-baseline "**/*.{js,vue}"``
The baseline has been commited and the gitlab CI setup to only fail upon new errors/warnings being created.
The baseline has been committed and the gitlab CI setup to only fail upon new errors/warnings being created.
When fixing errors/warnings manually, please update the baseline.
1. Delete the current baseline file
2. Run the above command locally, this will automatically create a new baseline that should be commited
Rules
-----
### Rules
We use Vue 3, so the rules can be configured as follows within the ``eslint.config.mjs`` file:
@@ -45,17 +41,14 @@ Configurations for using Vue.js 3.x:
- ``.configs["flat/recommended"]`` ... Above, plus rules to enforce subjective community defaults to ensure consistency.
Detailed information about which rules each set includes can be found here:
`https://eslint.vuejs.org/rules/ <https://eslint.vuejs.org/rules/>`_
`https://eslint.vuejs.org/rules/ ](https://eslint.vuejs.org/rules/)
Manual Rule Configuration
-------------------------
### Manual Rule Configuration
We can also manually configure certain rules or override rules that are part of the ruleset specified above.
For example, if we want to turn off a certain rule, we can do so as follows:
.. code-block:: javascript
rules: {
'vue/multi-word-component': 'off'
}
@@ -64,8 +57,6 @@ We could also change the severity of a certain rule from 'error' to 'warning', f
Within specific ``.js`` or ``.vue`` files, we can also override a certain rule only for that specific file by adding a comment:
.. code-block:: javascript
/* eslint multi-word-component: "off", no-child-content: "error"
--------
Here's a description about why this configuration is necessary. */

View File

@@ -1,66 +1,49 @@
.. Copyright (C) 2014 Champs Libres Cooperative SCRLFS
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
or any later version published by the Free Software Foundation;
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
A copy of the license is included in the section entitled "GNU
Free Documentation License".
Exports
*******
###### Exports
Export is an important issue within the Chill software : users should be able to :
- compute statistics about their activity ;
- list "things" which are a part of their activities.
The `main bundle`_ provides a powerful framework to build custom queries with re-usable parts across differents bundles.
The [main bundle`_ provides a powerful framework to build custom queries with re-usable parts across differents bundles.
.. contents:: Table of content
:local:
.. seealso::
`The issue where this framework was discussed <https://git.framasoft.org/Chill-project/Chill-Main/issues/9>`_
`The issue where this framework was [discussed](https://git.framasoft.org/Chill-project/Chill-Main/issues/9)
Provides some information about the pursued features and architecture.
Concepts
========
## Concepts
Some vocabulary: 3 "Export elements"
------------------------------------
### Some vocabulary: 3 "Export elements"
Four terms are used for this framework :
Exports
provide some basic operation on the data. Two kinds of exports are available :
- computed data : it may be "the number of people", "the number of activities", "the duration of activities", ...
- list data : it may be "the list of people", "the list of activities", ...
- computed data: it may be "the number of people," "the number of activities," "the duration of activities," ...
- list data: it may be "the list of people," "the list of activities," ...
Filters
The filters create a filter on the data: it removes some information the user doesn't want to introduce in the computation done by the export.
Example of a filter: "people under 18 years olds", "activities between the 1st of June and the 31st December", ...
Example of a filter: "people under 18-year-olds," "activities between the 1st of June and the 31st December," ...
Aggregators
The aggregator aggregates the data into some group (some software use the term 'bucket').
Example of an aggregator : "group people by gender", "group people by nationality", "group activity by type", ...
Example of an aggregator: "group people by gender," "group people by nationality," "group activity by type," ...
Formatters
The formatters format the data into a :class:`Symfony\Component\HttpFoundation\Response`, which will be returned "as is" by the controller to the web client.
Example of a formatter: "format data as CSV", "format data as an ods spreadsheet", ...
Example of a formatter: "format data as CSV", "format data as an ods spreadsheet," ...
Anatomy of an export
---------------------
### Anatomy of an export
An export can be thought of as a sentence where each part of this sentence refers to one or multiple export elements. Examples :
**Example 1**: Count the number of people having at least one activity in the last 12 month, and group them by nationality and gender, and format them in a CSV spreadsheet.
**Example 1**: Count the number of people having at least one activity in the last month 12, and group them by nationality and gender, and format them in a CSV spreadsheet.
Here :
@@ -73,21 +56,16 @@ Here :
Note that :
- Aggregators, filters, exports and formatters are cross-bundle. Here the bundle *activity* provides a filter which is applied on an export provided by the person bundle ;
- Multiple aggregator or filter for one export may exist. Currently, only one export is allowed.
- Multiple aggregators or filters for one export may exist. Currently, only one export is allowed.
The result might be :
+-----------------------+----------------+---------------------------+
| Nationality | Gender | Number of people |
+=======================+================+===========================+
| Russian | Male | 12 |
+-----------------------+----------------+---------------------------+
| Russian | Female | 24 |
+-----------------------+----------------+---------------------------+
| France | Male | 110 |
+-----------------------+----------------+---------------------------+
| France | Female | 150 |
+-----------------------+----------------+---------------------------+
+-------------+--------+------------------+
| Nationality | Gender | Number of people |
| Russian | Male | 12 |
| Russian | Female | 24 |
| France | Male | 110 |
| France | Female| 150 |
**Example 2**: Count the average duration of an activity with type "meeting", which occurs between the 1st of June and the 31st of December, group them by week, and format the data in an OpenDocument spreadsheet.
@@ -103,122 +81,97 @@ The result might be :
+-----------------------+----------------------+
| Week | Number of activities |
+=======================+======================+
| 2015-10 | 10 |
+-----------------------+----------------------+
| 2015-11 | 12 |
+-----------------------+----------------------+
| 2015-12 | 10 |
+-----------------------+----------------------+
| 2015-13 | 9 |
+-----------------------+----------------------+
Authorization and exports
-------------------------
### Authorization and exports
Exports, filters and aggregators should not show data the user is not allowed to see within the application.
Exports, filters, and aggregators should not show data the user is not allowed to see within the application.
In other words, developers are required to take care of user authorization for each export.
There should be a specific role that grants permission to users who are allowed to build exports. For more simplicity, this role should apply on a center, and should not require special circles.
How does the magic work ?
===========================
## How does the magic work?
To build an export, we rely on the capacity of the database to execute queries with aggregate (i.e. GROUP BY) and filter (i.e. WHERE) instructions.
An export is an SQL query which is initiated by an export, and modified by aggregators and filters.
An export is an SQL query that is initiated by an export and modified by aggregators and filters.
.. note::
**Example**: Count the number of people having at least one activity in the last 12 month, and group them by nationality and gender
**Example**: Count the number of people having at least one activity in the last month 12, and group them by nationality and gender
1. The report initiates the query
.. code-block:: SQL
```SQL
SELECT count(people.*) FROM people
```
2. The filter adds a where and join clause :
.. code-block:: SQL
```SQL
SELECT count(people.*) FROM people
RIGHT JOIN activity
WHERE activity.date IS BETWEEN now AND 6 month ago
```
3. The aggregator "nationality" adds a GROUP BY clause and a column in the SELECT statement:
.. code-block:: sql
```sql
SELECT people.nationality, count(people.*) FROM people
RIGHT JOIN activity
WHERE activity.date IS BETWEEN now AND 6 month ago
GROUP BY nationality
```
4. The aggregator "gender" does the same job as the nationality aggregator : it adds a GROUP BY clause and a column in the SELECT statement :
.. code-block:: sql
```sql
SELECT people.nationality, people.gender, count(people.*)
FROM people RIGHT JOIN activity
WHERE activity.date IS BETWEEN now AND 6 month ago
GROUP BY nationality, gender
```
Each filter, aggregator and filter may collect parameters from the user through a form. This form is appended to the export form. Here is an example.
.. figure:: /_static/screenshots/development/export_form-fullpage.png
Each filter, aggregator, and filter may collect parameters from the user through a form. This form is appended to the export form. Here is an example.
The screenshot shows the export form for ``CountPeople`` (Nombre de personnes). The filter by date of birth is checked (*Filtrer par date de naissance de la personne*), which triggers a subform, which is provided by the :class:`Chill\PersonBundle\Export\Filter\BirthdateFilter`. The other unchecked filter does not show the subform.
Two aggregators are also checked : by Country of birth (*Aggréger les personnes par pays de naissance*, the corresponding class is :class:`Chill\PersonBundle\Export\Aggregator\CountryOfBirthAggregator`, which also triggers a subform. The aggregator by gender (*Aggréger les personnes par genre*) is also checked, but there is no corresponding subform.
Two aggregators are also checked: by Country of birth (*Aggréger les personnes par pays de naissance*, the corresponding class is :class:`Chill\PersonBundle\Export\Aggregator\CountryOfBirthAggregator`, which also triggers a subform. The aggregator by gender (*Aggréger les personnes par genre*) is also checked, but there is no corresponding subform.
The Export Manager
------------------
### The Export Manager
The Export manager (:class:`Chill\MainBundle\Export\ExportManager` is the central class which registers all exports, aggregators, filters and formatters.
The Export manager (:class:`Chill\MainBundle\Export\ExportManager` is the central class which registers all exports, aggregators, filters, and formatters.
The export manager is also responsible for orchestrating the whole export process, producing a :class:`Symfony\FrameworkBundle\HttpFoundation\Request` for each export request.
The export form step
--------------------
### The export form step
The form step allows you to build a form, combining different parts of the module.
The building of forms is split into different subforms, where each one is responsible for rendering their part of the form (aggregators, filters, and export).
.. figure:: /_static/puml/exports/form_steps.png
:scale: 40%
The formatter form step
-----------------------
### The formatter form step
The formatter form is processed *after* the user filled the export form. It is built the same way, but receives the data entered by the user on the previous step as parameters (i.e. export form). It may then adapt it accordingly (example: show a list of columns selected in aggregators).
Processing the export
---------------------
### Processing the export
The export process can be explained by this schema :
This schema can explain the export process :
.. figure:: /_static/puml/exports/processing_export.png
:scale: 40%
(Click to enlarge)
## Export, formatters, and filters explained
Export, formatters and filters explained
========================================
Exports
-------
### Exports
This is an example of the ``CountPerson`` export :
.. literalinclude:: /_static/code/exports/CountPerson.php
:language: php
:linenos:
* **Line 36**: the ``getType`` function returns a string. This string will be used to find the aggregtors and filters which will apply to this export.
* **Line 41**: a simple description to help users understand what your export does.
* **Line 46**: The title of the export. A summary of what your export does.
@@ -226,26 +179,17 @@ This is an example of the ``CountPerson`` export :
* **Line 56**: We initiate the query here...
* **Line 59**: We have to filter the query with centers the users checked in the form. We process the $acl variable to get all ``Center`` objects in one array
* **Line 63**: We create the query with a query builder.
* **Line 74**: We return the result, but make sure to hydrate the results as an array.
* **Line 74**: We return the result but make sure to hydrate the results as an array.
* **Line 103**: return the list of formatter types which are allowed to be applied on this filter
Filters
-------
### Filters
This is an example of the *filter by birthdate*. This filter asks some information through a form (`buildForm` is not empty), and this form must be validated. To perform this validation, we implement a new Interface: :class:`Chill\MainBundle\Export\ExportElementValidatedInterface`:
.. literalinclude:: /_static/code/exports/BirthdateFilter.php
:language: php
.. todo::
This is an example of the *filter by birthdate*. This filter asks some information through a form (`buildForm` is not empty), and this form must be validated. To perform this validation, we implement a new Interface: `Chill\MainBundle\Export\ExportElementValidatedInterface`:
Continue to explain the export framework
.. _main bundle: https://git.framasoft.org/Chill-project/Chill-Main
With many-to-* relationship, why should we set WHERE clauses in an EXISTS subquery instead of a JOIN ?
``````````````````````````````````````````````````````````````````````````````````````````````````````
With many-to-* relationship, why should we set WHERE clauses in an EXISTS subquery instead of a JOIN?
-----------------------------------------------------------------------------------------------------
As we described above, the doctrine builder is converted into a sql query. Let's see how to compute the "number of course
which count at least one activity type with the id 7". For the purpose of this demonstration, we will restrict this on
@@ -253,79 +197,65 @@ two accompanying period only: the ones with id 329 and 334.
Let's see the list of activities associated with those accompanying period:
.. code-block:: sql
SELECT id, accompanyingperiod_id, type_id FROM activity WHERE accompanyingperiod_id IN (329, 334) AND type_id = 7
ORDER BY accompanyingperiod_id;
We see that we have 6 activities for the accompanying period with id 329, and only one for the 334's one.
.. csv-table::
:header: id, accompanyingperiod_id, type_id
990,329,7
986,329,7
987,329,7
993,329,7
991,329,7
992,329,7
1000,334,7
| id | accompanyingperiod_id | type_id |
|------|----------------------|---------|
| 990 | 329 | 7 |
| 986 | 329 | 7 |
| 987 | 329 | 7 |
| 993 | 329 | 7 |
| 991 | 329 | 7 |
| 992 | 329 | 7 |
| 1000 | 334 | 7 |
Let's calculate the average duration for those accompanying periods, and the number of period:
.. code-block:: sql
SELECT AVG(age(COALESCE(closingdate, CURRENT_DATE), openingdate)), COUNT(id) from chill_person_accompanying_period WHERE id IN (329, 334);
The result of this query is:
.. csv-table::
:header: AVG, COUNT
| AVG | COUNT |
|--------------------------------------------------|-------|
| 2 years 2 mons 21 days 12 hours 0 mins 0.0 secs | 2 |
2 years 2 mons 21 days 12 hours 0 mins 0.0 secs,2
Now, we count the number of accompanying period, adding a :code:`JOIN` clause which make a link to the :code:`activity` table, and add a :code:`WHERE` clause to keep
Now, we count the number of accompanying period, adding a `JOIN` clause which make a link to the `activity` table, and add a `WHERE` clause to keep
only the accompanying period which contains the given activity type:
.. code-block:: sql
SELECT COUNT(chill_person_accompanying_period.id) from chill_person_accompanying_period
JOIN activity ON chill_person_accompanying_period.id = activity.accompanyingperiod_id
WHERE chill_person_accompanying_period.id IN (329, 334) AND activity.type_id = 7;
What are the results here ?
What are the results here?
.. csv-table::
:header: COUNT
| COUNT |
|-------|
| 7 |
7
:code:`7` ! Why this result ? Because the number of lines is duplicated for each activity. Let's see the list of rows which
`7` ! Why this result? Because the number of lines is duplicated for each activity. Let's see the list of rows which
are taken into account for the computation:
.. code-block:: sql
SELECT chill_person_accompanying_period.id, activity.id from chill_person_accompanying_period
JOIN activity ON chill_person_accompanying_period.id = activity.accompanyingperiod_id
WHERE chill_person_accompanying_period.id IN (329, 334) AND activity.type_id = 7;
.. csv-table::
:header: accompanyingperiod.id, activity.id
| accompanyingperiod.id | activity.id |
|----------------------|-------------|
| 329 | 993 |
| 334 | 1000 |
| 329 | 987 |
| 329 | 990 |
| 329 | 991 |
| 329 | 992 |
| 329 | 986 |
329,993
334,1000
329,987
329,990
329,991
329,992
329,986
For each activity, a row is created and, as we count the number of non-null :code:`accompanyingperiod.id` columns, we
For each activity, a row is created and, as we count the number of non-null `accompanyingperiod.id` columns, we
count one entry for each activity (actually, we count the number of activities).
So, let's use the :code:`DISTINCT` keyword to count only once the equal ids:
.. code-block::
So, let's use the `DISTINCT` keyword to count only once the equal ids:
SELECT COUNT(DISTINCT chill_person_accompanying_period.id) from chill_person_accompanying_period
JOIN activity ON chill_person_accompanying_period.id = activity.accompanyingperiod_id
@@ -333,38 +263,31 @@ So, let's use the :code:`DISTINCT` keyword to count only once the equal ids:
Now, it works again...
.. csv-table::
:header: COUNT
| COUNT |
|-------|
| 2 |
2
But, for the average duration, this won't work: the duration which are equals (because the `openingdate` is the same and
`closingdate` is still `NULL`, for instance) will be counted only once, which will give unexpected result.
But, for the average duration, this won't work: the duration which are equals (because the :code:`openingdate` is the same and
:code:`closingdate` is still :code:`NULL`, for instance) will be counted only once, which will give unexpected result.
The solution is to move the condition "having an activity with activity type with id 7" in a :code:`EXISTS` clause:
.. code-block:: sql
The solution is to move the condition "having an activity with activity type with id 7" in a `EXISTS` clause:
SELECT COUNT(chill_person_accompanying_period.id) from chill_person_accompanying_period
WHERE chill_person_accompanying_period.id IN (329, 334) AND EXISTS (SELECT 1 FROM activity WHERE type_id = 7 AND accompanyingperiod_id = chill_person_accompanying_period.id);
The result is correct without :code:`DISTINCT` keyword:
The result is correct without `DISTINCT` keyword:
.. csv-table::
:header: COUNT
2
| COUNT |
|-------|
| 2 |
And we can now compute the average duration without fear:
.. code-block:: sql
SELECT AVG(age(COALESCE(closingdate, CURRENT_DATE), openingdate)) from chill_person_accompanying_period
WHERE chill_person_accompanying_period.id IN (329, 334) AND EXISTS (SELECT 1 FROM activity WHERE type_id = 7 AND accompanyingperiod_id = chill_person_accompanying_period.id);
Give the result:
.. csv-table::
:header: AVG
2 years 2 mons 21 days 12 hours 0 mins 0.0 secs
| AVG |
|--------------------------------------------------|
| 2 years 2 mons 21 days 12 hours 0 mins 0.0 secs |

View File

@@ -0,0 +1,25 @@
# Forms and form types
###### Date picker
Class
`Chill\MainBundle\Form\Type\ChillDateType`
Extend
`Symfony\Component\Form\Extension\Core\Type\DateType`
Usage :
```
use Chill\MainBundle\Form\Type\ChillDateType;
$builder->add('date' ChillDateType::class);
```
###### Text editor
Add a text editor (by default).
Class
`Chill\MainBundle\Form\Type\ChillTextareaType`
Options
* `disable_editor` to disable text editor

View File

@@ -1,42 +0,0 @@
.. Copyright (C) 2014 Champs Libres Cooperative SCRLFS
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
or any later version published by the Free Software Foundation;
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
A copy of the license is included in the section entitled "GNU
Free Documentation License".
.. _forms:
Forms and form types
####################
Date picker
***********
Class
:class:`Chill\MainBundle\Form\Type\ChillDateType`
Extend
:class:`Symfony\Component\Form\Extension\Core\Type\DateType`
Usage :
.. code-block:: php
use Chill\MainBundle\Form\Type\ChillDateType;
$builder->add('date' ChillDateType::class);
Text editor
***********
Add a text editor (by default).
Class
:class:`Chill\MainBundle\Form\Type\ChillTextareaType`
Options
* :code:`disable_editor` to disable text editor

View File

@@ -0,0 +1,41 @@
# Development
As Chill relies on the [symfony ](http://symfony.com) framework, reading the framework's documentation should answer most of your questions. We are explaining here some tips to work with Chill, and help with things we've encountered.
- [Instructions to create a new bundle](create-a-new-bundle.md)
- [CRUD (Create - Update - Delete) for one entity](crud.md)
- [Helpers for building a REST API](api.md)
- [Routing](routing.md)
- [Menus](menus.md)
- [Forms](forms.md)
- [Access control model](access_control_model.md)
- [Messages to users](messages-to-users.md)
- [Pagination](pagination.md)
- [Localisation](localisation.md)
- [Logging](logging.md)
- [Database migrations](migrations.md)
- [Searching](searching.md)
- [Timelines](timelines.md)
- [Exports](exports.md)
- [Embeddable comments](embeddable-comments.md)
- [Run tests](run-tests.md)
- [ESLint](es-lint.md)
- [Useful snippets](useful-snippets.md)
- [Manual](manual/index.md)
- [Assets](assets.md)
- [Cron Jobs](cronjob.md)
- [Info about entities](entity-info.md)
- [Info about database (in French)](database-principles.md)
- [Developer FAQ](FAQ.md)
###### Layout and UI
- [Render entities automatically](render-entity.md)
- [Layout / Template usage](user-interface/layout-template-usage.md)
- [Classes and mixins](user-interface/css-classes.md)
- [Widgets](user-interface/widgets.md)
- [Javascript function](user-interface/js-functions.md)
###### Help, I am lost!
Write an email at info@champs-libres.coop, and we will help you!

View File

@@ -1,59 +0,0 @@
.. Copyright (C) 2014 Champs Libres Cooperative SCRLFS
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
or any later version published by the Free Software Foundation;
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
A copy of the license is included in the section entitled "GNU
Free Documentation License".
Development
###########
As Chill relies on the `symfony <http://symfony.com>`_ framework, reading the framework's documentation should answer most of your questions. We are explaining here some tips to work with Chill, and help with things we've encountered.
.. toctree::
:maxdepth: 2
Instructions to create a new bundle <create-a-new-bundle.rst>
CRUD (Create - Update - Delete) for one entity <crud.rst>
Helpers for building a REST API <api.rst>
Routing <routing.rst>
Menus <menus.rst>
Forms <forms.rst>
Access control model <access_control_model.rst>
Messages to users <messages-to-users.rst>
Pagination <pagination.rst>
Localisation <localisation.rst>
Logging <logging.rst>
Database migrations <migrations.rst>
Searching <searching.rst>
Timelines <timelines.rst>
Exports <exports.rst>
Embeddable comments <embeddable-comments.rst>
Run tests <run-tests.rst>
ESLint <es-lint.rst>
Useful snippets <useful-snippets.rst>
manual/index.rst
Assets <assets.rst>
Cron Jobs <cronjob.rst>
Info about entities <entity-info.rst>
Info about database (in French) <database-principles.rst>
Developer FAQ <FAQ.rst>
Layout and UI
**************
.. toctree::
:maxdepth: 2
Render entities automatically <render-entity.rst>
Layout / Template usage <user-interface/layout-template-usage.rst>
Classes and mixins <user-interface/css-classes.rst>
Widgets <user-interface/widgets.rst>
Javascript function <user-interface/js-functions.rst>
Help, I am lost !
*****************
Write an email at info@champs-libres.coop, and we will help you !

View File

@@ -0,0 +1,30 @@
###### Localisation
## Language in url
Language should be present in URL, conventionally as the first argument.
`/fr/your/url/here`
This allows users to change from one language to another one on each page, which may be useful in multilanguages teams. If the installation is single-language, the language switcher will not appears.
This is an example of routing defined in YAML :
```yaml
chill_person_general_edit:
pattern: /{_locale}/person/{person_id}/general/edit
defaults: {_controller: ChillPersonBundle:Person:edit }
```
## Date and time
The [Intl extension ](http://twig.sensiolabs.org/doc/extensions/intl.html) is enabled on the Chill application.
You may format date and time using the [localizeddate` function :
`date|localizeddate('long', 'none')`
By default, we prefer using the `long` format for date formatting.
[Documentation for Intl Extension](http://twig.sensiolabs.org/doc/extensions/intl.html)
Read the complete doc for the Intl extension.

View File

@@ -1,49 +0,0 @@
.. Copyright (C) 2014 Champs Libres Cooperative SCRLFS
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
or any later version published by the Free Software Foundation;
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
A copy of the license is included in the section entitled "GNU
Free Documentation License".
Localisation
*************
Language in url
===============
Language should be present in URL, conventionnaly as first argument.
.. code-block:: none
/fr/your/url/here
This allow users to change from one language to another one on each page, which may be useful in multilanguages teams. If the installation is single-language, the language switcher will not appears.
This is an example of routing defined in yaml :
.. code-block:: yaml
chill_person_general_edit:
pattern: /{_locale}/person/{person_id}/general/edit
defaults: {_controller: ChillPersonBundle:Person:edit }
Date and time
==============
The `Intl extension <http://twig.sensiolabs.org/doc/extensions/intl.html>`_ is enabled on the Chill application.
You may format date and time using the `localizeddate` function :
.. code-block:: jinja
date|localizeddate('long', 'none')
By default, we prefer using the `long` format for date formatting.
.. seealso::
`Documentation for Intl Extension <http://twig.sensiolabs.org/doc/extensions/intl.html>`_
Read the complete doc for the Intl extension.

View File

@@ -1,50 +1,41 @@
.. Copyright (C) 2016 Champs Libres Cooperative SCRLFS
Permission is granted to copy, distribute and/or modify this document
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
or any later version published by the Free Software Foundation;
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
A copy of the license is included in the section entitled "GNU
Free Documentation License".
###### Logging
Logging
*******
.. seealso::
Symfony documentation: `How to user Monolog to write logs <http://symfony.com/doc/current/cookbook/logging/monolog.html>`_
Symfony documentation: [How to user Monolog to write logs ](http://symfony.com/doc/current/cookbook/logging/monolog.html)
The symfony cookbook page about logging.
A channel for custom logging has been created to store sensitive data.
A channel for custom logging has been created to store sensitive data.
The channel is named ``chill``.
The channel is named ``chill``.
The installer of chill should be aware that this channel may contains sensitive data and encrypted during backup.
Logging to channel `chill`
============================
## Logging to channel `chill`
You should use the service named ``chill.main.logger``, as this :
You should use the service named ``chill.main.logger``, as this :
.. code-block:: php
`$logger = $this->get('chill.main.logger');`
$logger = $this->get('chill.main.logger');
You should store data into context, not in the log himself, which should remains the same for the action.
You should store data into context, not in the log himself, which should remains the same for the action.
Example of usage :
.. code-block:: php
Example of usage :
```php
$logger->info("An action has been performed about a person", array(
'person_lastname' => $person->getLastName(),
'person_firstname' => $person->getFirstName(),
'person_id' => $person->getId(),
'by_user' => $user->getUsername()
));
```
For further processing, it is a good idea to separate all fields (like firstname, lastname, ...) into different context keys.
By convention, you should store the username of the user performing the action under the ``by_user`` key.

View File

@@ -1,17 +1,10 @@
.. Copyright (C) 2014 Champs Libres Cooperative SCRLFS
Permission is granted to copy, distribute and/or modify this document
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
or any later version published by the Free Software Foundation;
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
A copy of the license is included in the section entitled "GNU
Free Documentation License".
Developer manual
*****************
.. toctree::
:maxdepth: 2
routing-and-menus.rst
###### Developer manual
- [Routing and Menus](routing-and-menus.md)

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