mirror of
				https://gitlab.com/Chill-Projet/chill-bundles.git
				synced 2025-11-04 03:08:25 +00:00 
			
		
		
		
	Compare commits
	
		
			19 Commits
		
	
	
		
			v3.4.3
			...
			288-signat
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| d33dcacc46 | |||
| 8d97df9f96 | |||
| 2822800c76 | |||
| 8973b7c20b | |||
| 7f144da1a7 | |||
| ab4193938d | |||
| e2426ba1d8 | |||
| 8209990437 | |||
| b1885de3e2 | |||
| 218280304c | |||
| 8a7b48b201 | |||
| 52a9aab73f | |||
| 8f358112b1 | |||
| 57a07af3db | |||
| fd216ff66e | |||
| 689c2c574a | |||
| a8de18beac | |||
| babca5fc0f | |||
| f2c5663b05 | 
							
								
								
									
										5
									
								
								.changes/unreleased/Feature-20231212-154841.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								.changes/unreleased/Feature-20231212-154841.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
			
		||||
kind: Feature
 | 
			
		||||
body: '[DX] move async-upload-bundle features into chill-bundles'
 | 
			
		||||
time: 2023-12-12T15:48:41.954970271+01:00
 | 
			
		||||
custom:
 | 
			
		||||
  Issue: "221"
 | 
			
		||||
							
								
								
									
										6
									
								
								.changes/unreleased/Feature-20240530-160003.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								.changes/unreleased/Feature-20240530-160003.yaml
									
									
									
									
									
										Normal 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: ""
 | 
			
		||||
							
								
								
									
										6
									
								
								.changes/unreleased/Feature-20240531-190242.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								.changes/unreleased/Feature-20240531-190242.yaml
									
									
									
									
									
										Normal 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: ""
 | 
			
		||||
							
								
								
									
										8
									
								
								.changes/unreleased/Feature-20240614-153236.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								.changes/unreleased/Feature-20240614-153236.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,8 @@
 | 
			
		||||
kind: Feature
 | 
			
		||||
body: |-
 | 
			
		||||
  Electronic signature
 | 
			
		||||
 | 
			
		||||
  Implementation of the electronic signature for documents within chill.
 | 
			
		||||
time: 2024-06-14T15:32:36.875891692+02:00
 | 
			
		||||
custom:
 | 
			
		||||
  Issue: ""
 | 
			
		||||
							
								
								
									
										5
									
								
								.changes/unreleased/Feature-20240718-151233.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								.changes/unreleased/Feature-20240718-151233.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
			
		||||
kind: Feature
 | 
			
		||||
body: Metadata form added for person signatures
 | 
			
		||||
time: 2024-07-18T15:12:33.8134266+02:00
 | 
			
		||||
custom:
 | 
			
		||||
  Issue: "288"
 | 
			
		||||
							
								
								
									
										6
									
								
								.changes/unreleased/Fixed-20240410-103736.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								.changes/unreleased/Fixed-20240410-103736.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
kind: Fixed
 | 
			
		||||
body: Fix resolving of centers for an household, which will fix in turn the access
 | 
			
		||||
  control
 | 
			
		||||
time: 2024-04-10T10:37:36.462484988+02:00
 | 
			
		||||
custom:
 | 
			
		||||
  Issue: ""
 | 
			
		||||
@@ -1,6 +0,0 @@
 | 
			
		||||
## v2.22.0 - 2024-06-25
 | 
			
		||||
### Feature
 | 
			
		||||
* ([#216](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/216)) [event bundle] exports  added for the event module
 | 
			
		||||
 | 
			
		||||
### Traduction francophone
 | 
			
		||||
* Exports sont ajoutés pour la module événement.
 | 
			
		||||
@@ -1,5 +0,0 @@
 | 
			
		||||
## v2.22.1 - 2024-07-01
 | 
			
		||||
### Fixed
 | 
			
		||||
* Remove debug word 
 | 
			
		||||
### DX
 | 
			
		||||
* Add a command for reading official address DB from Luxembourg and update chill addresses 
 | 
			
		||||
@@ -1,3 +0,0 @@
 | 
			
		||||
## v2.22.2 - 2024-07-03
 | 
			
		||||
### Fixed
 | 
			
		||||
* Remove scope required for event participation stats 
 | 
			
		||||
@@ -1,30 +0,0 @@
 | 
			
		||||
## v2.23.0 - 2024-07-23 & 2024-07-19
 | 
			
		||||
### Feature
 | 
			
		||||
* ([#221](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/221)) [DX] move async-upload-bundle features into chill-bundles
 | 
			
		||||
* Add job bundle (module emploi)
 | 
			
		||||
* Upgrade import of address list to the last version of compiled addresses of belgian-best-address
 | 
			
		||||
 | 
			
		||||
* Upgrade CKEditor and refactor configuration with use of typescript
 | 
			
		||||
 | 
			
		||||
* ([#123](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/123)) Add a button to duplicate calendar ranges from a week to another one
 | 
			
		||||
* [admin] filter users by active / inactive in the admin user's list
 | 
			
		||||
* ([#273](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/273)) Add the possibility to mark all notifications as read
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* Handle duplicate reference id in the import of reference addresses
 | 
			
		||||
* Do not update the "createdAt" column when importing postal code which does not change
 | 
			
		||||
* Display filename on file upload within the UI interface
 | 
			
		||||
### Fixed
 | 
			
		||||
* Fix resolving of centers for an household, which will fix in turn the access control
 | 
			
		||||
* Resolved type hinting error in activity list export
 | 
			
		||||
* ([#271](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/271)) Take into account the acp closing date in the acp works date filter
 | 
			
		||||
 | 
			
		||||
### Traduction française des principaux changements
 | 
			
		||||
- Ajout d'un bouton pour dupliquer les périodes de disponibilités d'une semaine à une autre;
 | 
			
		||||
- dans l'interface d'administration, filtre sur les utilisateurs actifs. Par défaut, seul les utilisateurs
 | 
			
		||||
  actifs sont affichés;
 | 
			
		||||
- Nouveau bouton pour indiquer toutes les notifications comme lues;
 | 
			
		||||
- Améliorations sur l'import des adresses et des codes postaux;
 | 
			
		||||
- Affiche le nom du fichier déposé quand on téléverse un fichier depuis le poste de travail local;
 | 
			
		||||
- Agrandit l'icône du type de fichier dans l'interface de dépôt de fichier;
 | 
			
		||||
- correction: tient compte de la date de fermeture du parcours dans les filtres sur les actions d'accompagnement.
 | 
			
		||||
@@ -1,3 +0,0 @@
 | 
			
		||||
## v2.24.0 - 2024-09-11
 | 
			
		||||
### Feature
 | 
			
		||||
* ([#306](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/306)) When a document is converted or downloaded in the browser, this document is removed from the browser memory after 45s. Future click on the button re-download the document. 
 | 
			
		||||
@@ -1,5 +0,0 @@
 | 
			
		||||
## v3.0.0 - 2024-08-26
 | 
			
		||||
### Fixed
 | 
			
		||||
* Fix delete action for accompanying periods in draft state 
 | 
			
		||||
* Fix connection to azure when making an calendar event in chill 
 | 
			
		||||
* CollectionType js fixes for remove button and adding multiple entries 
 | 
			
		||||
@@ -1,3 +0,0 @@
 | 
			
		||||
## v3.1.0 - 2024-08-30
 | 
			
		||||
### Feature
 | 
			
		||||
* Add export aggregator to aggregate activities by household + filter persons that are not part of an accompanyingperiod during a certain timeframe. 
 | 
			
		||||
@@ -1,6 +0,0 @@
 | 
			
		||||
## v3.1.1 - 2024-10-01
 | 
			
		||||
### Fixed
 | 
			
		||||
* ([#308](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/308)) Show only the current referrer in the page "show" for an accompanying period workf 
 | 
			
		||||
* ([#309](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/309)) Correctly compute the grouping by referrer aggregator
 | 
			
		||||
 
 | 
			
		||||
* Fixed typing of custom field long choice and custom field group 
 | 
			
		||||
@@ -1,3 +0,0 @@
 | 
			
		||||
## v3.2.0 - 2024-10-30
 | 
			
		||||
### Feature
 | 
			
		||||
* Introduce a gender entity 
 | 
			
		||||
@@ -1,4 +0,0 @@
 | 
			
		||||
## v3.2.1 - 2024-10-31
 | 
			
		||||
### Fixed
 | 
			
		||||
* Add the possibility of unknown to the gender entity 
 | 
			
		||||
* Fix the fusion of person doubles by excluding accompanyingPeriod work entities to be deleted. They are moved instead. 
 | 
			
		||||
@@ -1,3 +0,0 @@
 | 
			
		||||
## v3.2.2 - 2024-10-31
 | 
			
		||||
### Fixed
 | 
			
		||||
* Fix gender translation for unknown 
 | 
			
		||||
@@ -1,4 +0,0 @@
 | 
			
		||||
## v3.2.3 - 2024-11-05
 | 
			
		||||
### Fixed
 | 
			
		||||
* ([#315](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/315)) Fix display of accompanying period work referrers. Only current referrers should be displayed.
 | 
			
		||||
Fix color of Chill footer 
 | 
			
		||||
@@ -1,3 +0,0 @@
 | 
			
		||||
## v3.2.4 - 2024-11-06
 | 
			
		||||
### Fixed
 | 
			
		||||
* Fix compilation of chill assets 
 | 
			
		||||
@@ -1,13 +0,0 @@
 | 
			
		||||
## v3.3.0 - 2024-11-20
 | 
			
		||||
### Feature
 | 
			
		||||
* Electronic signature
 | 
			
		||||
 | 
			
		||||
Implementation of the electronic signature for documents within chill. 
 | 
			
		||||
* ([#286](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/286)) The behavoir of the voters for stored objects is adjusted so as to limit edit and delete possibilities to users related to the activity, social action or workflow entity. 
 | 
			
		||||
* ([#288](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/288)) Metadata form added for person signatures 
 | 
			
		||||
* Add a signature step in workflow, which allow to apply an electronic signature on documents 
 | 
			
		||||
* Keep an history of each version of a stored object. 
 | 
			
		||||
* Add a "send external" step in workflow, which allow to send stored objects and other elements to remote people, by sending them a public url 
 | 
			
		||||
### Fixed
 | 
			
		||||
* Adjust household list export to include households even if their address is NULL 
 | 
			
		||||
* Remove validation of date string on deathDate 
 | 
			
		||||
@@ -1,4 +0,0 @@
 | 
			
		||||
## v3.4.0 - 2024-11-20
 | 
			
		||||
### Feature
 | 
			
		||||
* ([#314](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/314)) Admin: improve document type admin form with a select field for related class.
 | 
			
		||||
Admin: Allow administrator to assign multiple group centers in one go to a user. 
 | 
			
		||||
@@ -1,3 +0,0 @@
 | 
			
		||||
## v3.4.1 - 2024-11-22
 | 
			
		||||
### Fixed
 | 
			
		||||
* Set the workflow's title to notification content and subject 
 | 
			
		||||
@@ -1,6 +0,0 @@
 | 
			
		||||
## v3.4.2 - 2024-12-05
 | 
			
		||||
### Fixed
 | 
			
		||||
* ([#329](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/329)) Fix the serialization of gender for the generation of documents 
 | 
			
		||||
* ([#337](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/337)) Enforce unique contraint on activity storedobject 
 | 
			
		||||
### DX
 | 
			
		||||
* ([#310](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/310)) Clean migrations, to reduce the number of bloated migration when running diff on schema 
 | 
			
		||||
							
								
								
									
										94
									
								
								.env
									
									
									
									
									
								
							
							
						
						
									
										94
									
								
								.env
									
									
									
									
									
								
							@@ -11,13 +11,19 @@
 | 
			
		||||
# Run "composer dump-env prod" to compile .env files for production use (requires symfony/flex >=1.2).
 | 
			
		||||
# https://symfony.com/doc/current/best_practices.html#use-environment-variables-for-infrastructure-configuration
 | 
			
		||||
 | 
			
		||||
## Locale
 | 
			
		||||
LOCALE=fr
 | 
			
		||||
 | 
			
		||||
###> symfony/framework-bundle ###
 | 
			
		||||
# this should be set in docker-compose.yml file
 | 
			
		||||
APP_ENV=prod
 | 
			
		||||
APP_SECRET=!ChangeMeInAppEnv!
 | 
			
		||||
APP_SECRET=ChangeItf2b58287ef7f9976409d3f6c72529e99ChangeIt
 | 
			
		||||
TRUSTED_PROXIES=127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16
 | 
			
		||||
TRUSTED_HOSTS='^(localhost|example\.com|nginx)$'
 | 
			
		||||
###< symfony/framework-bundle ###
 | 
			
		||||
 | 
			
		||||
## Wopi server for editing documents online
 | 
			
		||||
EDITOR_SERVER=http://collabora:9980
 | 
			
		||||
WOPI_SERVER=http://collabora:9980
 | 
			
		||||
 | 
			
		||||
# must be manually set in .env.local
 | 
			
		||||
# ADMIN_PASSWORD=
 | 
			
		||||
@@ -26,14 +32,52 @@ EDITOR_SERVER=http://collabora:9980
 | 
			
		||||
# MAILER_DSN=null://null
 | 
			
		||||
###< symfony/mailer ###
 | 
			
		||||
 | 
			
		||||
## Notifications
 | 
			
		||||
NOTIFICATION_HOST=localhost:8001
 | 
			
		||||
NOTIFICATION_FROM_EMAIL=admin@chill.social
 | 
			
		||||
NOTIFICATION_FROM_NAME="Chill <admin@chill.social>"
 | 
			
		||||
 | 
			
		||||
## Pgadmin credential
 | 
			
		||||
PGADMIN_DEFAULT_EMAIL=
 | 
			
		||||
PGADMIN_DEFAULT_PASSWORD=
 | 
			
		||||
 | 
			
		||||
## OVH OpenStack Storage Container
 | 
			
		||||
ASYNC_UPLOAD_TEMP_URL_KEY=
 | 
			
		||||
ASYNC_UPLOAD_TEMP_URL_BASE_PATH=
 | 
			
		||||
ASYNC_UPLOAD_TEMP_URL_CONTAINER=
 | 
			
		||||
 | 
			
		||||
## Redis Cache
 | 
			
		||||
REDIS_HOST=redis
 | 
			
		||||
REDIS_PORT=6379
 | 
			
		||||
REDIS_URL=redis://${REDIS_HOST}:${REDIS_PORT}
 | 
			
		||||
 | 
			
		||||
## Twilio
 | 
			
		||||
TWILIO_SID=~
 | 
			
		||||
TWILIO_SECRET=~
 | 
			
		||||
DEFAULT_CARRIER_CODE=BE
 | 
			
		||||
 | 
			
		||||
ADD_ADDRESS_DEFAULT_COUNTRY=BE
 | 
			
		||||
 | 
			
		||||
ADD_ADDRESS_MAP_CENTER_X=50.8443
 | 
			
		||||
ADD_ADDRESS_MAP_CENTER_Y=4.3523
 | 
			
		||||
ADD_ADDRESS_MAP_CENTER_Z=15
 | 
			
		||||
 | 
			
		||||
SHORT_MESSAGE_DSN=null://null
 | 
			
		||||
 | 
			
		||||
## DOCKER IMAGES REGISTRY
 | 
			
		||||
#IMAGE_PHP=
 | 
			
		||||
#IMAGE_NGINX=
 | 
			
		||||
 | 
			
		||||
## DOCKER IMAGES TAG
 | 
			
		||||
#VERSION=test
 | 
			
		||||
#VERSION=prod
 | 
			
		||||
 | 
			
		||||
###> symfony/messenger ###
 | 
			
		||||
# Choose one of the transports below
 | 
			
		||||
# MESSENGER_TRANSPORT_DSN=amqp://guest:guest@localhost:5672/%2f/messages
 | 
			
		||||
# MESSENGER_TRANSPORT_DSN=redis://localhost:6379/messages
 | 
			
		||||
# MESSENGER_TRANSPORT_DSN=sync://
 | 
			
		||||
# MESSENGER_TRANSPORT_DSN=doctrine://default?auto_setup=0
 | 
			
		||||
MESSENGER_TRANSPORT_DSN=${RABBITMQ_URL}/%2f
 | 
			
		||||
MESSENGER_TRANSPORT_DSN=sync://
 | 
			
		||||
MESSENGER_TRANSPORT_DSN=doctrine://default?auto_setup=0
 | 
			
		||||
###< symfony/messenger ###
 | 
			
		||||
 | 
			
		||||
###> doctrine/doctrine-bundle ###
 | 
			
		||||
@@ -48,43 +92,3 @@ JWT_SECRET_KEY=%kernel.project_dir%/config/jwt/private.pem
 | 
			
		||||
JWT_PUBLIC_KEY=%kernel.project_dir%/config/jwt/public.pem
 | 
			
		||||
JWT_PASSPHRASE=2a30f6ba26521a2613821da35f28386e
 | 
			
		||||
###< lexik/jwt-authentication-bundle ###
 | 
			
		||||
 | 
			
		||||
###> chill-project/chill-bundles ###
 | 
			
		||||
# Generate a password using `symfony console security:hash-password --empty-salt <password> 'Symfony\Component\Security\Core\User\User'` and paste it into .env.local file
 | 
			
		||||
# ADMIN_PASSWORD=
 | 
			
		||||
# Add a configuration for sending SMS (before calendar appointments, aka "Rendez-vous"). See https://symfony.com/doc/current/notifier.html#sms-channel
 | 
			
		||||
# Configuration for using ovh custom notifier
 | 
			
		||||
# SHORT_MESSAGE_DSN="ovh://user:password@ovh-eu?consumer_key=123456&sender=%2B32475123456&service_name=sms-xx123456-1"
 | 
			
		||||
SHORT_MESSAGE_DSN=null://null
 | 
			
		||||
# Default locale for the project
 | 
			
		||||
LOCALE=fr
 | 
			
		||||
# Those keys are required to configure the access to store documents
 | 
			
		||||
ASYNC_UPLOAD_TEMP_URL_KEY=
 | 
			
		||||
ASYNC_UPLOAD_TEMP_URL_BASE_PATH=
 | 
			
		||||
ASYNC_UPLOAD_TEMP_URL_CONTAINER=
 | 
			
		||||
# Twilio configuration, to check for the existence of phonenumber in a directory (may be deprecated in a near future)
 | 
			
		||||
TWILIO_SID=
 | 
			
		||||
TWILIO_SECRET=
 | 
			
		||||
# Default carrier code will replace all leading zero by an international code. Set here the country as two letters
 | 
			
		||||
DEFAULT_CARRIER_CODE=FR
 | 
			
		||||
# Configuration for the notification emails
 | 
			
		||||
NOTIFICATION_FROM_EMAIL=chill@instance.com
 | 
			
		||||
NOTIFICATION_FROM_NAME=Chill
 | 
			
		||||
# Will set the default host when sending email from command or services (see https://symfony.com/doc/5.x/routing.html#generating-urls-in-commands)
 | 
			
		||||
NOTIFICATION_HOST=my.chill.social
 | 
			
		||||
# Variables for relatorio host, which generates documents
 | 
			
		||||
RELATORIO_HOST=
 | 
			
		||||
RELATORIO_PORT=
 | 
			
		||||
# Address for your collabora server
 | 
			
		||||
#EDITOR_SERVER=https://code.example.com
 | 
			
		||||
EDITOR_SERVER=https://collabora.champs-libres.be
 | 
			
		||||
# center address widget when empty
 | 
			
		||||
ADD_ADDRESS_DEFAULT_COUNTRY=BE
 | 
			
		||||
ADD_ADDRESS_MAP_CENTER_X=50.8443
 | 
			
		||||
ADD_ADDRESS_MAP_CENTER_Y=4.3523
 | 
			
		||||
ADD_ADDRESS_MAP_CENTER_Z=15
 | 
			
		||||
## Redis Cache & redis database
 | 
			
		||||
REDIS_HOST=redis
 | 
			
		||||
REDIS_PORT=6379
 | 
			
		||||
REDIS_URL=redis://${REDIS_HOST}:${REDIS_PORT}
 | 
			
		||||
###< chill-project/chill-bundles ###
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										16
									
								
								.env.test
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								.env.test
									
									
									
									
									
								
							@@ -4,8 +4,15 @@
 | 
			
		||||
KERNEL_CLASS='App\Kernel'
 | 
			
		||||
APP_SECRET='$ecretf0rt3st'
 | 
			
		||||
 | 
			
		||||
TRUSTED_HOSTS=
 | 
			
		||||
 | 
			
		||||
ADMIN_PASSWORD=password
 | 
			
		||||
 | 
			
		||||
LOCALE=fr
 | 
			
		||||
REDIS_URL=redis
 | 
			
		||||
REDIS_PORT=6379
 | 
			
		||||
REDIS_URL=redis://${REDIS_HOST}:${REDIS_PORT}
 | 
			
		||||
 | 
			
		||||
JWT_SECRET_KEY=%kernel.project_dir%/config/jwt/private.pem
 | 
			
		||||
JWT_PUBLIC_KEY=%kernel.project_dir%/config/jwt/public.pem
 | 
			
		||||
JWT_PASSPHRASE=2a30f6ba26521a2613821da35f28386e
 | 
			
		||||
@@ -15,25 +22,22 @@ TWILIO_SECRET=~
 | 
			
		||||
DEFAULT_CARRIER_CODE=BE
 | 
			
		||||
 | 
			
		||||
ADD_ADDRESS_DEFAULT_COUNTRY=BE
 | 
			
		||||
 | 
			
		||||
ADD_ADDRESS_MAP_CENTER_X=50.8443
 | 
			
		||||
ADD_ADDRESS_MAP_CENTER_Y=4.3523
 | 
			
		||||
ADD_ADDRESS_MAP_CENTER_Z=15
 | 
			
		||||
 | 
			
		||||
SHORT_MESSAGE_DSN=null://null
 | 
			
		||||
MESSENGER_TRANSPORT_DSN=sync://
 | 
			
		||||
###< symfony/messenger ###
 | 
			
		||||
 | 
			
		||||
###> doctrine/doctrine-bundle ###
 | 
			
		||||
# Format described at https://www.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/configuration.html#connecting-using-a-url
 | 
			
		||||
# IMPORTANT: You MUST configure your server version, either here or in config/packages/doctrine.yaml
 | 
			
		||||
#
 | 
			
		||||
DATABASE_URL="postgresql://app:!ChangeMe!@127.0.0.1:5454/test?serverVersion=14&charset=utf8"
 | 
			
		||||
DATABASE_URL="postgresql://postgres:postgres@db:5432/test?serverVersion=14&charset=utf8"
 | 
			
		||||
###< doctrine/doctrine-bundle ###
 | 
			
		||||
 | 
			
		||||
ASYNC_UPLOAD_TEMP_URL_KEY=
 | 
			
		||||
ASYNC_UPLOAD_TEMP_URL_BASE_PATH=
 | 
			
		||||
ASYNC_UPLOAD_TEMP_URL_CONTAINER=
 | 
			
		||||
 | 
			
		||||
MAILER_DSN=null://null
 | 
			
		||||
 | 
			
		||||
REDIS_HOST=127.0.0.1
 | 
			
		||||
REDIS_PORT=6363
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										29
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										29
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -3,18 +3,10 @@ composer
 | 
			
		||||
composer.phar
 | 
			
		||||
composer.lock
 | 
			
		||||
docs/build/
 | 
			
		||||
node_modules/*
 | 
			
		||||
.php_cs.cache
 | 
			
		||||
.cache/*
 | 
			
		||||
 | 
			
		||||
docker/db/data
 | 
			
		||||
docker/rabbitmq/data
 | 
			
		||||
 | 
			
		||||
# in this development bundle, we want to ignore directories related to a real app
 | 
			
		||||
assets/*
 | 
			
		||||
migrations/*
 | 
			
		||||
templates/*
 | 
			
		||||
translations/*
 | 
			
		||||
 | 
			
		||||
###> symfony/framework-bundle ###
 | 
			
		||||
/.env.local
 | 
			
		||||
/.env.local.php
 | 
			
		||||
@@ -23,6 +15,7 @@ translations/*
 | 
			
		||||
/public/bundles/
 | 
			
		||||
/var/
 | 
			
		||||
/vendor/
 | 
			
		||||
/bin/
 | 
			
		||||
###< symfony/framework-bundle ###
 | 
			
		||||
 | 
			
		||||
###> phpunit/phpunit ###
 | 
			
		||||
@@ -34,20 +27,4 @@ translations/*
 | 
			
		||||
/.idea/
 | 
			
		||||
/.psalm/
 | 
			
		||||
 | 
			
		||||
###> phpstan/phpstan ###
 | 
			
		||||
phpstan.neon
 | 
			
		||||
###< phpstan/phpstan ###
 | 
			
		||||
 | 
			
		||||
###> lexik/jwt-authentication-bundle ###
 | 
			
		||||
/config/jwt/*.pem
 | 
			
		||||
###< lexik/jwt-authentication-bundle ###
 | 
			
		||||
 | 
			
		||||
###> symfony/phpunit-bridge ###
 | 
			
		||||
###< symfony/phpunit-bridge ###
 | 
			
		||||
 | 
			
		||||
###> symfony/webpack-encore-bundle ###
 | 
			
		||||
/node_modules/
 | 
			
		||||
/public/build/
 | 
			
		||||
npm-debug.log
 | 
			
		||||
yarn-error.log
 | 
			
		||||
###< symfony/webpack-encore-bundle ###
 | 
			
		||||
node_modules/*
 | 
			
		||||
 
 | 
			
		||||
@@ -9,7 +9,7 @@ cache:
 | 
			
		||||
# Bring in any services we need http://docs.gitlab.com/ee/ci/docker/using_docker_images.html#what-is-a-service
 | 
			
		||||
# See http://docs.gitlab.com/ee/ci/services/README.html for examples.
 | 
			
		||||
services:
 | 
			
		||||
    - name: postgis/postgis:17-3.5-alpine
 | 
			
		||||
    - name: postgis/postgis:14-3.3-alpine
 | 
			
		||||
      alias: db
 | 
			
		||||
      command:
 | 
			
		||||
          - postgres
 | 
			
		||||
@@ -26,7 +26,7 @@ variables:
 | 
			
		||||
    POSTGRES_USER: postgres
 | 
			
		||||
    POSTGRES_PASSWORD: postgres
 | 
			
		||||
    # configure database access
 | 
			
		||||
    DATABASE_URL: postgresql://postgres:postgres@db:5432/postgres?serverVersion=17&charset=utf8
 | 
			
		||||
    DATABASE_URL: postgresql://postgres:postgres@db:5432/postgres?serverVersion=14&charset=utf8
 | 
			
		||||
    # fetch the chill-app using git submodules
 | 
			
		||||
    # GIT_SUBMODULE_STRATEGY: recursive
 | 
			
		||||
    REDIS_HOST: redis
 | 
			
		||||
@@ -56,6 +56,7 @@ build:
 | 
			
		||||
    artifacts:
 | 
			
		||||
        expire_in: 1 day
 | 
			
		||||
        paths:
 | 
			
		||||
            - bin
 | 
			
		||||
            - vendor/
 | 
			
		||||
 | 
			
		||||
code_style:
 | 
			
		||||
@@ -69,56 +70,63 @@ code_style:
 | 
			
		||||
    artifacts:
 | 
			
		||||
        expire_in: 1 day
 | 
			
		||||
        paths:
 | 
			
		||||
            - bin
 | 
			
		||||
            - vendor/
 | 
			
		||||
 | 
			
		||||
phpstan_tests:
 | 
			
		||||
    stage: Tests
 | 
			
		||||
    image: gitea.champs-libres.be/chill-project/chill-skeleton-basic/base-image:php82
 | 
			
		||||
    variables:
 | 
			
		||||
        COMPOSER_MEMORY_LIMIT: 3G
 | 
			
		||||
    before_script:
 | 
			
		||||
        - bin/console cache:clear --env=dev
 | 
			
		||||
    script:
 | 
			
		||||
        - composer exec phpstan -- analyze --memory-limit=3G
 | 
			
		||||
        - bin/phpstan analyze --memory-limit=2G
 | 
			
		||||
    cache:
 | 
			
		||||
        paths:
 | 
			
		||||
            - .cache/
 | 
			
		||||
    artifacts:
 | 
			
		||||
        expire_in: 1 day
 | 
			
		||||
        paths:
 | 
			
		||||
            - bin
 | 
			
		||||
            - vendor/
 | 
			
		||||
 | 
			
		||||
rector_tests:
 | 
			
		||||
    stage: Tests
 | 
			
		||||
    image: gitea.champs-libres.be/chill-project/chill-skeleton-basic/base-image:php82
 | 
			
		||||
    before_script:
 | 
			
		||||
        - bin/console cache:clear --env=dev
 | 
			
		||||
    script:
 | 
			
		||||
        - composer exec rector -- process --dry-run
 | 
			
		||||
        - tests/console cache:clear
 | 
			
		||||
        - bin/rector process --dry-run
 | 
			
		||||
    cache:
 | 
			
		||||
        paths:
 | 
			
		||||
            - .cache/
 | 
			
		||||
    artifacts:
 | 
			
		||||
        expire_in: 1 day
 | 
			
		||||
        paths:
 | 
			
		||||
            - bin
 | 
			
		||||
            - vendor/
 | 
			
		||||
 | 
			
		||||
# psalm_tests:
 | 
			
		||||
#     stage: Tests
 | 
			
		||||
#     image: gitea.champs-libres.be/chill-project/chill-skeleton-basic/base-image:php82
 | 
			
		||||
#     script:
 | 
			
		||||
#         - bin/psalm
 | 
			
		||||
#     allow_failure: true
 | 
			
		||||
#     artifacts:
 | 
			
		||||
#         expire_in: 30 min
 | 
			
		||||
#         paths:
 | 
			
		||||
#             - bin
 | 
			
		||||
#             - tests/app/vendor/
 | 
			
		||||
 | 
			
		||||
unit_tests:
 | 
			
		||||
    stage: Tests
 | 
			
		||||
    image: gitea.champs-libres.be/chill-project/chill-skeleton-basic/base-image:php82
 | 
			
		||||
    variables:
 | 
			
		||||
        COMPOSER_MEMORY_LIMIT: 3G
 | 
			
		||||
    before_script:
 | 
			
		||||
        - php bin/console doctrine:database:create -n --env=test
 | 
			
		||||
        - php bin/console doctrine:migrations:migrate -n --env=test
 | 
			
		||||
        - php bin/console chill:db:sync-views --env=test
 | 
			
		||||
        - php bin/console cache:clear --env=test
 | 
			
		||||
        - php bin/console doctrine:fixtures:load -n --env=test
 | 
			
		||||
    script:
 | 
			
		||||
        - composer exec phpunit -- --colors=never --exclude-group dbIntensive,openstack-integration
 | 
			
		||||
        - php tests/console doctrine:migrations:migrate -n --env=test
 | 
			
		||||
        - php tests/console chill:db:sync-views --env=test
 | 
			
		||||
        - php -d memory_limit=2G tests/console cache:clear --env=test
 | 
			
		||||
        - php -d memory_limit=3G tests/console doctrine:fixtures:load -n --env=test
 | 
			
		||||
        - php -d memory_limit=4G bin/phpunit --colors=never --exclude-group dbIntensive
 | 
			
		||||
    artifacts:
 | 
			
		||||
        expire_in: 1 day
 | 
			
		||||
        paths:
 | 
			
		||||
            - bin
 | 
			
		||||
            - vendor/
 | 
			
		||||
 | 
			
		||||
release:
 | 
			
		||||
@@ -130,4 +138,4 @@ release:
 | 
			
		||||
        - echo "running release_job"
 | 
			
		||||
    release:
 | 
			
		||||
        tag_name: '$CI_COMMIT_TAG'
 | 
			
		||||
        description: "./.changes/$CI_COMMIT_TAG.md"
 | 
			
		||||
        description: "./.changes/v$CI_COMMIT_TAG.md"
 | 
			
		||||
 
 | 
			
		||||
@@ -120,6 +120,6 @@ $rules = array_merge(
 | 
			
		||||
    $untilFullSwitchToPhp8,
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
$rules['header_comment']['header'] = trim(file_get_contents(__DIR__.'/resources/header.txt'));
 | 
			
		||||
$rules['header_comment']['header'] = trim(file_get_contents(__DIR__.'/resource/header.txt'));
 | 
			
		||||
 | 
			
		||||
return $config->setRules($rules);
 | 
			
		||||
 
 | 
			
		||||
@@ -1,2 +0,0 @@
 | 
			
		||||
workers:
 | 
			
		||||
    docker_compose: ~
 | 
			
		||||
							
								
								
									
										125
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										125
									
								
								CHANGELOG.md
									
									
									
									
									
								
							@@ -6,131 +6,6 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html),
 | 
			
		||||
and is generated by [Changie](https://github.com/miniscruff/changie).
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## v3.4.3 - 2024-12-05
 | 
			
		||||
### Fixed
 | 
			
		||||
* Remove the "not null" constraint on person supplementary phones 
 | 
			
		||||
 | 
			
		||||
## v3.4.2 - 2024-12-05
 | 
			
		||||
### Fixed
 | 
			
		||||
* ([#329](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/329)) Fix the serialization of gender for the generation of documents 
 | 
			
		||||
* ([#337](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/337)) Enforce unique contraint on activity storedobject 
 | 
			
		||||
### DX
 | 
			
		||||
* ([#310](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/310)) Clean migrations, to reduce the number of bloated migration when running diff on schema 
 | 
			
		||||
 | 
			
		||||
## v3.4.1 - 2024-11-22
 | 
			
		||||
### Fixed
 | 
			
		||||
* Set the workflow's title to notification content and subject 
 | 
			
		||||
 | 
			
		||||
## v3.4.0 - 2024-11-20
 | 
			
		||||
### Feature
 | 
			
		||||
* ([#314](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/314)) Admin: improve document type admin form with a select field for related class.
 | 
			
		||||
Admin: Allow administrator to assign multiple group centers in one go to a user. 
 | 
			
		||||
 | 
			
		||||
## v3.3.0 - 2024-11-20
 | 
			
		||||
### Feature
 | 
			
		||||
* Electronic signature
 | 
			
		||||
 | 
			
		||||
Implementation of the electronic signature for documents within chill. 
 | 
			
		||||
* ([#286](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/286)) The behavoir of the voters for stored objects is adjusted so as to limit edit and delete possibilities to users related to the activity, social action or workflow entity. 
 | 
			
		||||
* ([#288](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/288)) Metadata form added for person signatures 
 | 
			
		||||
* Add a signature step in workflow, which allow to apply an electronic signature on documents 
 | 
			
		||||
* Keep an history of each version of a stored object. 
 | 
			
		||||
* Add a "send external" step in workflow, which allow to send stored objects and other elements to remote people, by sending them a public url 
 | 
			
		||||
### Fixed
 | 
			
		||||
* Adjust household list export to include households even if their address is NULL 
 | 
			
		||||
* Remove validation of date string on deathDate 
 | 
			
		||||
 | 
			
		||||
## v3.2.4 - 2024-11-06
 | 
			
		||||
### Fixed
 | 
			
		||||
* Fix compilation of chill assets 
 | 
			
		||||
 | 
			
		||||
## v3.2.3 - 2024-11-05
 | 
			
		||||
### Fixed
 | 
			
		||||
* ([#315](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/315)) Fix display of accompanying period work referrers. Only current referrers should be displayed.
 | 
			
		||||
Fix color of Chill footer 
 | 
			
		||||
 | 
			
		||||
## v3.2.2 - 2024-10-31
 | 
			
		||||
### Fixed
 | 
			
		||||
* Fix gender translation for unknown 
 | 
			
		||||
 | 
			
		||||
## v3.2.1 - 2024-10-31
 | 
			
		||||
### Fixed
 | 
			
		||||
* Add the possibility of unknown to the gender entity 
 | 
			
		||||
* Fix the fusion of person doubles by excluding accompanyingPeriod work entities to be deleted. They are moved instead. 
 | 
			
		||||
 | 
			
		||||
## v3.2.0 - 2024-10-30
 | 
			
		||||
### Feature
 | 
			
		||||
* Introduce a gender entity 
 | 
			
		||||
 | 
			
		||||
## v3.1.1 - 2024-10-01
 | 
			
		||||
### Fixed
 | 
			
		||||
* ([#308](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/308)) Show only the current referrer in the page "show" for an accompanying period workf 
 | 
			
		||||
* ([#309](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/309)) Correctly compute the grouping by referrer aggregator
 | 
			
		||||
 
 | 
			
		||||
* Fixed typing of custom field long choice and custom field group 
 | 
			
		||||
 | 
			
		||||
## v3.1.0 - 2024-08-30
 | 
			
		||||
### Feature
 | 
			
		||||
* Add export aggregator to aggregate activities by household + filter persons that are not part of an accompanyingperiod during a certain timeframe. 
 | 
			
		||||
 | 
			
		||||
## v3.0.0 - 2024-08-26
 | 
			
		||||
### Fixed
 | 
			
		||||
* Fix delete action for accompanying periods in draft state 
 | 
			
		||||
* Fix connection to azure when making an calendar event in chill 
 | 
			
		||||
* CollectionType js fixes for remove button and adding multiple entries 
 | 
			
		||||
 | 
			
		||||
## v2.24.0 - 2024-09-11
 | 
			
		||||
### Feature
 | 
			
		||||
* ([#306](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/306)) When a document is converted or downloaded in the browser, this document is removed from the browser memory after 45s. Future click on the button re-download the document. 
 | 
			
		||||
 | 
			
		||||
## v2.23.0 - 2024-07-23 & 2024-07-19
 | 
			
		||||
### Feature
 | 
			
		||||
* ([#221](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/221)) [DX] move async-upload-bundle features into chill-bundles
 | 
			
		||||
* Add job bundle (module emploi)
 | 
			
		||||
* Upgrade import of address list to the last version of compiled addresses of belgian-best-address
 | 
			
		||||
 | 
			
		||||
* Upgrade CKEditor and refactor configuration with use of typescript
 | 
			
		||||
 | 
			
		||||
* ([#123](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/123)) Add a button to duplicate calendar ranges from a week to another one
 | 
			
		||||
* [admin] filter users by active / inactive in the admin user's list
 | 
			
		||||
* ([#273](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/273)) Add the possibility to mark all notifications as read
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* Handle duplicate reference id in the import of reference addresses
 | 
			
		||||
* Do not update the "createdAt" column when importing postal code which does not change
 | 
			
		||||
* Display filename on file upload within the UI interface
 | 
			
		||||
### Fixed
 | 
			
		||||
* Fix resolving of centers for an household, which will fix in turn the access control
 | 
			
		||||
* Resolved type hinting error in activity list export
 | 
			
		||||
* ([#271](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/271)) Take into account the acp closing date in the acp works date filter
 | 
			
		||||
 | 
			
		||||
### Traduction française des principaux changements
 | 
			
		||||
- Ajout d'un bouton pour dupliquer les périodes de disponibilités d'une semaine à une autre;
 | 
			
		||||
- dans l'interface d'administration, filtre sur les utilisateurs actifs. Par défaut, seul les utilisateurs
 | 
			
		||||
  actifs sont affichés;
 | 
			
		||||
- Nouveau bouton pour indiquer toutes les notifications comme lues;
 | 
			
		||||
- Améliorations sur l'import des adresses et des codes postaux;
 | 
			
		||||
- Affiche le nom du fichier déposé quand on téléverse un fichier depuis le poste de travail local;
 | 
			
		||||
- Agrandit l'icône du type de fichier dans l'interface de dépôt de fichier;
 | 
			
		||||
- correction: tient compte de la date de fermeture du parcours dans les filtres sur les actions d'accompagnement.
 | 
			
		||||
 | 
			
		||||
## v2.22.2 - 2024-07-03
 | 
			
		||||
### Fixed
 | 
			
		||||
* Remove scope required for event participation stats 
 | 
			
		||||
 | 
			
		||||
## v2.22.1 - 2024-07-01
 | 
			
		||||
### Fixed
 | 
			
		||||
* Remove debug word 
 | 
			
		||||
### DX
 | 
			
		||||
* Add a command for reading official address DB from Luxembourg and update chill addresses 
 | 
			
		||||
 | 
			
		||||
## v2.22.0 - 2024-06-25
 | 
			
		||||
### Feature
 | 
			
		||||
* ([#216](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/216)) [event bundle] exports  added for the event module
 | 
			
		||||
 | 
			
		||||
### Traduction francophone
 | 
			
		||||
* Exports sont ajoutés pour la module événement.
 | 
			
		||||
 | 
			
		||||
## v2.21.0 - 2024-06-18
 | 
			
		||||
### Feature
 | 
			
		||||
* Add flash menu buttons in search results, to open directly a new calendar, or a new activity in an accompanying period
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										16
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								README.md
									
									
									
									
									
								
							@@ -1,15 +1,9 @@
 | 
			
		||||
# Main Chill Bundles and Chill framework
 | 
			
		||||
# Chill framework
 | 
			
		||||
 | 
			
		||||
Chill is a software for social workers. It allows them to keep track of the social work they do.
 | 
			
		||||
Documentation of the Chill software.
 | 
			
		||||
 | 
			
		||||
See our website for more information https://www.chill.social
 | 
			
		||||
The online documentation can be found at http://docs.chill.social
 | 
			
		||||
 | 
			
		||||
## Installation
 | 
			
		||||
See the [`docs`][1] directory for more.
 | 
			
		||||
 | 
			
		||||
Chill-bundles is a set of bundles that should be used within a Symfony application.
 | 
			
		||||
 | 
			
		||||
A symfony application will help you to customize all the configuration options, change the behaviour of some parts of the usual-way that chill works, … without to have to fork this repository !
 | 
			
		||||
 | 
			
		||||
See [the instructions in the docs](./docs/source/installation/index.rst).
 | 
			
		||||
 | 
			
		||||
Those instructions are also built [online](https://docs.chill.social).
 | 
			
		||||
[1]: docs/README.md
 | 
			
		||||
 
 | 
			
		||||
@@ -1,34 +0,0 @@
 | 
			
		||||
services:
 | 
			
		||||
    ###> doctrine/doctrine-bundle ###
 | 
			
		||||
    database:
 | 
			
		||||
        ports:
 | 
			
		||||
            - "127.0.0.1:5454:5432"
 | 
			
		||||
    ###< doctrine/doctrine-bundle ###
 | 
			
		||||
 | 
			
		||||
    ###> symfony/mailer ###
 | 
			
		||||
    mailer:
 | 
			
		||||
        image: axllent/mailpit
 | 
			
		||||
        ports:
 | 
			
		||||
            - "1025"
 | 
			
		||||
            - "8025"
 | 
			
		||||
        environment:
 | 
			
		||||
            MP_SMTP_AUTH_ACCEPT_ANY: 1
 | 
			
		||||
            MP_SMTP_AUTH_ALLOW_INSECURE: 1
 | 
			
		||||
        ###< symfony/mailer ###
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    redis:
 | 
			
		||||
        ports:
 | 
			
		||||
            - 127.0.0.1:6363:6379
 | 
			
		||||
    relatorio:
 | 
			
		||||
        ports:
 | 
			
		||||
            - 8888
 | 
			
		||||
 | 
			
		||||
    rabbitmq:
 | 
			
		||||
        ports:
 | 
			
		||||
            - 127.0.0.1:5689:5672
 | 
			
		||||
            - 127.0.0.1:15689:15672
 | 
			
		||||
        # required to make data persistent
 | 
			
		||||
        hostname: my-rabbit
 | 
			
		||||
        volumes:
 | 
			
		||||
            - ./docker/rabbitmq/data:/var/lib/rabbitmq
 | 
			
		||||
							
								
								
									
										56
									
								
								compose.yaml
									
									
									
									
									
								
							
							
						
						
									
										56
									
								
								compose.yaml
									
									
									
									
									
								
							@@ -1,56 +0,0 @@
 | 
			
		||||
services:
 | 
			
		||||
    ###> doctrine/doctrine-bundle ###
 | 
			
		||||
    database:
 | 
			
		||||
        image: postgis/postgis:${POSTGRES_VERSION:-16}-3.4-alpine
 | 
			
		||||
        environment:
 | 
			
		||||
            POSTGRES_DB: ${POSTGRES_DB:-app}
 | 
			
		||||
            # You should definitely change the password in production
 | 
			
		||||
            POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-!ChangeMe!}
 | 
			
		||||
            POSTGRES_USER: ${POSTGRES_USER:-app}
 | 
			
		||||
        volumes:
 | 
			
		||||
            # - database_data:/var/lib/postgresql/data:rw
 | 
			
		||||
            # You may use a bind-mounted host directory instead, so that it is harder to accidentally remove the volume and lose all your data!
 | 
			
		||||
            - ./docker/db/data:/var/lib/postgresql/data:rw
 | 
			
		||||
    ###< doctrine/doctrine-bundle ###
 | 
			
		||||
 | 
			
		||||
    redis:
 | 
			
		||||
        image: redis
 | 
			
		||||
    relatorio:
 | 
			
		||||
        image: registry.gitlab.com/champs-libres/public/relatorio-tornado/app:latest
 | 
			
		||||
 | 
			
		||||
    sign-worker:
 | 
			
		||||
        image: h3m6q87t.gra7.container-registry.ovh.net/sign-pdf-worker/worker:latest
 | 
			
		||||
        environment:
 | 
			
		||||
            AMQP_URL: amqp://guest:guest@rabbitmq:5672/%2f/to_python_sign
 | 
			
		||||
            LOG_LEVEL: INFO
 | 
			
		||||
            PKCS12_PATH: /etc/sign-pdf/dummy.p12
 | 
			
		||||
            TIMESTAMP_URL: http://freetsa.org/tsr
 | 
			
		||||
            QUEUE_IN: to_python_sign
 | 
			
		||||
            EXCHANGE_OUT: signed_docs
 | 
			
		||||
            OUT_ROUTING_KEY: signed_doc
 | 
			
		||||
            TSA_CERT_CHAIN: /etc/sign-pdf/tsa/tsa-chain.pem
 | 
			
		||||
            TSA_CONFIG_PATH: /etc/sign-pdf/rootca.conf
 | 
			
		||||
            TSA_KEY_PASSWORD: "5678"
 | 
			
		||||
        volumes:
 | 
			
		||||
            - "./resources/dev-certificate/dummy.p12:/etc/sign-pdf/dummy.p12:ro"
 | 
			
		||||
            - "./resources/dev-certificate/rootca.conf:/etc/sign-pdf/rootca.conf:ro"
 | 
			
		||||
            - "./resources/dev-certificate/tsa:/etc/sign-pdf/tsa:ro"
 | 
			
		||||
            - "./resources/dev-certificate/tsa_serial:/var/lib/tsa/tsa_serial:rw"
 | 
			
		||||
        links:
 | 
			
		||||
            - rabbitmq
 | 
			
		||||
        depends_on:
 | 
			
		||||
            rabbitmq:
 | 
			
		||||
                condition: service_healthy
 | 
			
		||||
 | 
			
		||||
    rabbitmq:
 | 
			
		||||
        image: rabbitmq:3-management-alpine
 | 
			
		||||
        healthcheck:
 | 
			
		||||
            test: rabbitmq-diagnostics -q ping
 | 
			
		||||
            interval: 30s
 | 
			
		||||
            timeout: 30s
 | 
			
		||||
            retries: 3
 | 
			
		||||
 | 
			
		||||
volumes:
 | 
			
		||||
    ###> doctrine/doctrine-bundle ###
 | 
			
		||||
    database_data:
 | 
			
		||||
###< doctrine/doctrine-bundle ###
 | 
			
		||||
@@ -43,7 +43,6 @@
 | 
			
		||||
        "symfony/dom-crawler": "^5.4",
 | 
			
		||||
        "symfony/error-handler": "^5.4",
 | 
			
		||||
        "symfony/event-dispatcher": "^5.4",
 | 
			
		||||
        "symfony/event-dispatcher-contracts": "^2.4",
 | 
			
		||||
        "symfony/expression-language": "^5.4",
 | 
			
		||||
        "symfony/filesystem": "^5.4",
 | 
			
		||||
        "symfony/finder": "^5.4",
 | 
			
		||||
@@ -97,13 +96,11 @@
 | 
			
		||||
        "rector/rector": "^1.1.0",
 | 
			
		||||
        "symfony/debug-bundle": "^5.4",
 | 
			
		||||
        "symfony/dotenv": "^5.4",
 | 
			
		||||
        "symfony/flex": "^2.4",
 | 
			
		||||
        "symfony/maker-bundle": "^1.20",
 | 
			
		||||
        "symfony/phpunit-bridge": "^7.1",
 | 
			
		||||
        "symfony/runtime": "^5.4",
 | 
			
		||||
        "symfony/stopwatch": "^5.4",
 | 
			
		||||
        "symfony/var-dumper": "^5.4",
 | 
			
		||||
        "symfony/web-profiler-bundle": "^5.4"
 | 
			
		||||
        "symfony/var-dumper": "^5.4"
 | 
			
		||||
    },
 | 
			
		||||
    "conflict": {
 | 
			
		||||
        "symfony/symfony": "*"
 | 
			
		||||
@@ -118,8 +115,6 @@
 | 
			
		||||
            "Chill\\DocGeneratorBundle\\": "src/Bundle/ChillDocGeneratorBundle",
 | 
			
		||||
            "Chill\\DocStoreBundle\\": "src/Bundle/ChillDocStoreBundle",
 | 
			
		||||
            "Chill\\EventBundle\\": "src/Bundle/ChillEventBundle",
 | 
			
		||||
            "Chill\\FranceTravailApiBundle\\": "src/Bundle/ChillFranceTravailApiBundle/src",
 | 
			
		||||
            "Chill\\JobBundle\\": "src/Bundle/ChillJobBundle/src",
 | 
			
		||||
            "Chill\\MainBundle\\": "src/Bundle/ChillMainBundle",
 | 
			
		||||
            "Chill\\PersonBundle\\": "src/Bundle/ChillPersonBundle",
 | 
			
		||||
            "Chill\\ReportBundle\\": "src/Bundle/ChillReportBundle",
 | 
			
		||||
@@ -131,7 +126,7 @@
 | 
			
		||||
    },
 | 
			
		||||
    "autoload-dev": {
 | 
			
		||||
        "psr-4": {
 | 
			
		||||
            "App\\": "src/app",
 | 
			
		||||
            "App\\": "tests/",
 | 
			
		||||
            "Chill\\DocGeneratorBundle\\Tests\\": "src/Bundle/ChillDocGeneratorBundle/tests",
 | 
			
		||||
            "Chill\\WopiBundle\\Tests\\": "src/Bundle/ChillDocGeneratorBundle/tests",
 | 
			
		||||
            "Chill\\Utils\\Rector\\Tests\\": "utils/rector/tests"
 | 
			
		||||
@@ -145,22 +140,16 @@
 | 
			
		||||
            "phpro/grumphp": true,
 | 
			
		||||
            "phpstan/extension-installer": true,
 | 
			
		||||
            "roave/you-are-using-it-wrong": true,
 | 
			
		||||
            "symfony/runtime": true,
 | 
			
		||||
            "symfony/flex": true
 | 
			
		||||
            "symfony/runtime": true
 | 
			
		||||
        },
 | 
			
		||||
        "bin-dir": "bin",
 | 
			
		||||
        "optimize-autoloader": true,
 | 
			
		||||
        "sort-packages": true
 | 
			
		||||
    },
 | 
			
		||||
    "scripts": {
 | 
			
		||||
        "auto-scripts": {
 | 
			
		||||
            "cache:clear": "symfony-cmd",
 | 
			
		||||
            "assets:install %PUBLIC_DIR%": "symfony-cmd"
 | 
			
		||||
            "cache:clear": "symfony-cmd"
 | 
			
		||||
        },
 | 
			
		||||
        "php-cs-fixer": "php-cs-fixer fix --config=./.php-cs-fixer.dist.php --show-progress=none"
 | 
			
		||||
    },
 | 
			
		||||
    "extra": {
 | 
			
		||||
        "symfony": {
 | 
			
		||||
            "docker": true
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,14 +0,0 @@
 | 
			
		||||
framework:
 | 
			
		||||
    cache:
 | 
			
		||||
        default_redis_provider: '%env(resolve:REDIS_URL)%'
 | 
			
		||||
        pools:
 | 
			
		||||
            cache.user_data:
 | 
			
		||||
                adapter: cache.adapter.redis
 | 
			
		||||
                public: true
 | 
			
		||||
                default_lifetime: 300  # 5 minutes
 | 
			
		||||
 | 
			
		||||
            # will be used in chill_main.tag_aware_cache service
 | 
			
		||||
            cache.tags:
 | 
			
		||||
                adapter: cache.adapter.redis
 | 
			
		||||
                public: false
 | 
			
		||||
                default_lifetime: 300
 | 
			
		||||
@@ -1,121 +0,0 @@
 | 
			
		||||
chill_main:
 | 
			
		||||
    available_languages: [ '%env(resolve:LOCALE)%', 'en' ]
 | 
			
		||||
    available_countries: ['BE', 'FR']
 | 
			
		||||
    notifications:
 | 
			
		||||
        from_email: '%env(resolve:NOTIFICATION_FROM_EMAIL)%'
 | 
			
		||||
        from_name: '%env(resolve:NOTIFICATION_FROM_NAME)%'
 | 
			
		||||
        host: '%env(resolve:NOTIFICATION_HOST)%'
 | 
			
		||||
    redis:
 | 
			
		||||
        host: '%env(resolve:REDIS_HOST)%'
 | 
			
		||||
        port: '%env(resolve:REDIS_PORT)%'
 | 
			
		||||
    phone_helper:
 | 
			
		||||
        twilio_sid: '%env(resolve:TWILIO_SID)%'
 | 
			
		||||
        twilio_secret: '%env(resolve:TWILIO_SECRET)%'
 | 
			
		||||
        default_carrier_code: '%env(resolve:DEFAULT_CARRIER_CODE)%'
 | 
			
		||||
    short_messages:
 | 
			
		||||
        dsn: '%env(string:SHORT_MESSAGE_DSN)%'
 | 
			
		||||
    acl:
 | 
			
		||||
        form_show_scopes: true
 | 
			
		||||
        form_show_centers: true
 | 
			
		||||
    access_global_history: false
 | 
			
		||||
    access_user_change_password: true
 | 
			
		||||
    access_permissions_group_list: true
 | 
			
		||||
    add_address:
 | 
			
		||||
        default_country: '%env(string:ADD_ADDRESS_DEFAULT_COUNTRY)%'
 | 
			
		||||
        map_center:
 | 
			
		||||
            x: '%env(float:ADD_ADDRESS_MAP_CENTER_X)%'
 | 
			
		||||
            y: '%env(float:ADD_ADDRESS_MAP_CENTER_Y)%'
 | 
			
		||||
            z: '%env(float:ADD_ADDRESS_MAP_CENTER_Z)%'
 | 
			
		||||
 | 
			
		||||
when@test:
 | 
			
		||||
    chill_main:
 | 
			
		||||
        available_languages:
 | 
			
		||||
            - 'fr'
 | 
			
		||||
            - 'en'
 | 
			
		||||
 | 
			
		||||
chill_custom_fields:
 | 
			
		||||
    show_empty_values_in_views: false
 | 
			
		||||
 | 
			
		||||
chill_person:
 | 
			
		||||
    create_person_allowed: false
 | 
			
		||||
    create_parcours_allowed: false
 | 
			
		||||
    allow_multiple_simultaneous_accompanying_periods: true
 | 
			
		||||
    accompanying_periods_fields:
 | 
			
		||||
        user: visible
 | 
			
		||||
        # createdBy, step, origin, intensity, scopes, requestor, anonymous, emergency, confidential : visible(default) | hidden
 | 
			
		||||
    person_fields:
 | 
			
		||||
        acceptEmail: hidden
 | 
			
		||||
        alt_names:
 | 
			
		||||
            -   key: jeune_fille
 | 
			
		||||
                labels:
 | 
			
		||||
                    lang: fr
 | 
			
		||||
                    label: Nom de naissance
 | 
			
		||||
        marital_status: visible
 | 
			
		||||
        civility: visible
 | 
			
		||||
        deathdate: visible
 | 
			
		||||
    validation:
 | 
			
		||||
        center_required: true
 | 
			
		||||
 | 
			
		||||
chill_activity:
 | 
			
		||||
    form:
 | 
			
		||||
        time_duration:
 | 
			
		||||
            -
 | 
			
		||||
                label: '5 minutes'
 | 
			
		||||
                seconds: 300
 | 
			
		||||
            -
 | 
			
		||||
                label: '10 minutes'
 | 
			
		||||
                seconds: 600
 | 
			
		||||
            -
 | 
			
		||||
                label: '15 minutes'
 | 
			
		||||
                seconds: 900
 | 
			
		||||
            -
 | 
			
		||||
                label: '20 minutes'
 | 
			
		||||
                seconds: 1200
 | 
			
		||||
            -
 | 
			
		||||
                label: '25 minutes'
 | 
			
		||||
                seconds: 1500
 | 
			
		||||
            -
 | 
			
		||||
                label: '30 minutes'
 | 
			
		||||
                seconds: 1800
 | 
			
		||||
            -
 | 
			
		||||
                label: '45 minutes'
 | 
			
		||||
                seconds: 2700
 | 
			
		||||
            -
 | 
			
		||||
                label: '1 hour'
 | 
			
		||||
                seconds: 3600
 | 
			
		||||
            -
 | 
			
		||||
                label: '1 hour 15'
 | 
			
		||||
                seconds: 4500
 | 
			
		||||
            -
 | 
			
		||||
                label: '1 hour 30'
 | 
			
		||||
                seconds: 5400
 | 
			
		||||
            -
 | 
			
		||||
                label: '1 hour 45'
 | 
			
		||||
                seconds: 6300
 | 
			
		||||
            -
 | 
			
		||||
                label: '2 hours'
 | 
			
		||||
                seconds: 7200
 | 
			
		||||
            -
 | 
			
		||||
                label: '2 hours 15'
 | 
			
		||||
                seconds: 8100
 | 
			
		||||
            -
 | 
			
		||||
                label: '2 hours 30'
 | 
			
		||||
                seconds: 9000
 | 
			
		||||
            -
 | 
			
		||||
                label: '2 hours 45'
 | 
			
		||||
                seconds: 9900
 | 
			
		||||
            -
 | 
			
		||||
                label: '3 hours'
 | 
			
		||||
                seconds: 10800
 | 
			
		||||
            -
 | 
			
		||||
                label: '3 hours 30'
 | 
			
		||||
                seconds: 12600
 | 
			
		||||
            -
 | 
			
		||||
                label: '4 hours'
 | 
			
		||||
                seconds: 14400
 | 
			
		||||
            -
 | 
			
		||||
                label: '4 hours 30'
 | 
			
		||||
                seconds: 16200
 | 
			
		||||
            -
 | 
			
		||||
                label: '5 hours'
 | 
			
		||||
                seconds: 18000
 | 
			
		||||
@@ -1,85 +0,0 @@
 | 
			
		||||
chill_budget:
 | 
			
		||||
      resources:
 | 
			
		||||
            - { key: fixed_contract, labels: [{ lang: fr, label: "Salarié en CDI" }]}
 | 
			
		||||
            - { key: temporary_contract, labels: [{ lang: fr, label: "Salarié en CDD"}]}
 | 
			
		||||
            - { key: interim, labels: [{ lang: fr, label: "Salarié en intérim"}]}
 | 
			
		||||
            - { key: other_revenues, labels: [{ lang: fr, label: "Revenus non salariés, commerçant, artisan,..."}]}
 | 
			
		||||
            - { key: agricultural_activity, labels: [{ lang: fr, label: "Exploitant agricole"}]}
 | 
			
		||||
            - { key: chomage_ass, labels: [{ lang: fr, label: "Allocations chômage ASS"}]}
 | 
			
		||||
            - { key: chomage_are, labels: [{ lang: fr, label: "Allocations chômage ARE"}]}
 | 
			
		||||
            - { key: remuneration_stage, labels: [{ lang: fr, label: "Rémunération de stage, d’apprentissage,..."}]}
 | 
			
		||||
            - { key: daily_allowences, labels: [{ lang: fr, label: "Indemnités journalières"}]}
 | 
			
		||||
            - { key: others, labels: [{ lang: fr, label: "Autres"}]}
 | 
			
		||||
            - { key: pension, labels: [{ lang: fr, label: "Pension de retraite"}]}
 | 
			
		||||
            - { key: invalidity, labels: [{ lang: fr, label: "Pension d'invalidité"}]}
 | 
			
		||||
            - { key: reversion, labels: [{ lang: fr, label: "Pension de réversion"}]}
 | 
			
		||||
            - { key: widowhood, labels: [{ lang: fr, label: "Pension de veuvage"}]}
 | 
			
		||||
            - { key: military, labels: [{ lang: fr, label: "Pension militaire"}]}
 | 
			
		||||
            - { key: food, labels: [{ lang: fr, label: "Pension alimentaire"}]}
 | 
			
		||||
            - { key: compensation, labels: [{ lang: fr, label: "Pension de prestation compensatoire"}]}
 | 
			
		||||
            - { key: allocation_handicap_adult, labels: [{ lang: fr, label: "Allocation aux adultes handicapés"}]}
 | 
			
		||||
            - { key: rsa, labels: [{ lang: fr, label: "RSA"}]}
 | 
			
		||||
            - { key: annuity_accident, labels: [{ lang: fr, label: "Rente accident"}]}
 | 
			
		||||
            - { key: premium_al_pl, labels: [{ lang: fr, label: "Prime d’activité AL/APL au bénéficiaire"}]}
 | 
			
		||||
            - { key: premium_thirdparty, labels: [{ lang: fr, label: "Prime d’activité versé au tiers"}]}
 | 
			
		||||
            - { key: other_income, labels: [{ lang: fr, label: "Autres ressources (ARS, ...)"}]}
 | 
			
		||||
            - { key: allocation_family, labels: [{ lang: fr, label: "Allocations familiales"}]}
 | 
			
		||||
            - { key: allocation_basic, labels: [{ lang: fr, label: "Allocation de base"}]}
 | 
			
		||||
            - { key: free_choice_saving, labels: [{ lang: fr, label: "Complément de libre choix du mode de garde"}]}
 | 
			
		||||
            - { key: shared_benefits_child, labels: [{ lang: fr, label: "Prestation partagée éducation de l’enfant"}]}
 | 
			
		||||
            - { key: complimentary_family, labels: [{ lang: fr, label: "Complément familial"}]}
 | 
			
		||||
            - { key: allocation_family_support, labels: [{ lang: fr, label: "Allocation de soutien familial"}]}
 | 
			
		||||
            - { key: allocation_education_child_handicap, labels: [{ lang: fr, label: "Allocation d’éducation de l’enfant handicapé"}]}
 | 
			
		||||
 | 
			
		||||
      charges:
 | 
			
		||||
            - { key: rent, labels: [{ lang: fr, label: "Loyer" }]}
 | 
			
		||||
            - { key: home_ownership, labels: [{ lang: fr, label: "Accession à la propriété" }]}
 | 
			
		||||
            - { key: costs_accomodation, labels: [{ lang: fr, label: "Frais d’hébergement" }]}
 | 
			
		||||
            - { key: home_insurance, labels: [{ lang: fr, label: "Assurance habitation" }]}
 | 
			
		||||
            - { key: taxes, labels: [{ lang: fr, label: "Impôts (taxe habitation, taxe foncière, ordures ménagères, redevances incitatives)" }]}
 | 
			
		||||
            - { key: impots, labels: [{lang: fr, label: "Impôts"}]}
 | 
			
		||||
            - { key: electricity, labels: [{ lang: fr, label: "Electricité" }]}
 | 
			
		||||
            - { key: gas, labels: [{ lang: fr, label: "Gaz en bouteille" }]}
 | 
			
		||||
            - { key: heating, labels: [{ lang: fr, label: "Autre moyen de chauffage" }]}
 | 
			
		||||
            - { key: water, labels: [{ lang: fr, label: "Eau" }]}
 | 
			
		||||
            - { key: school_fees, labels: [ { lang: fr, label: "Frais de scolarité"}]}
 | 
			
		||||
            - { key: alimony, labels: [ { lang: fr, label: "Pension alimentaire à reverser"}]}
 | 
			
		||||
            - { key: child_care, labels: [ { lang: fr, label: "Frais de garde (en totalité)"}]}
 | 
			
		||||
            - { key: telecom, labels: [ { lang: fr, label: "Frais de communication fixe"}]}
 | 
			
		||||
            - { key: mobilephone, labels: [ { lang: fr, label: "Frais de communication mobile"}]}
 | 
			
		||||
            - { key: internet, labels: [ { lang: fr, label: "Frais de communication internet"}]}
 | 
			
		||||
            - { key: insurance, labels: [{ lang: fr, label: "Assurances"}]}
 | 
			
		||||
            - { key: debt_commission, labels: [{ lang: fr, label: "Saisine de la commission surendettement"}]}
 | 
			
		||||
            - { key: recovery_plan, labels: [{ lang: fr, label: "Plan de redressement"}]}
 | 
			
		||||
            - { key: rpr, labels: [{ lang: fr, label: "PRP"}]}
 | 
			
		||||
            - { key: moratoire, labels: [{lang: fr, label: "Moratoire"}]}
 | 
			
		||||
            - { key: mutuelle, labels: [{lang: fr, label: "Mutuelle"}]}
 | 
			
		||||
            - { key: transport, labels: [{lang: fr, label: "Frais de transport"}]}
 | 
			
		||||
            - { key: decouvbank, labels: [{lang: fr, label: "Découvert bancaire utilisé"}]}
 | 
			
		||||
            - { key: procsaisie, labels: [{lang: fr, label: "Procédure de saisie"}]}
 | 
			
		||||
            - { key: indus, labels: [{lang: fr, label: "Indus"}]}
 | 
			
		||||
            - { key: apurement, labels: [{lang: fr, label: "Plan d'apurement"}]}
 | 
			
		||||
            - { key: debt_rent, labels: [{lang: fr, label: "Dette de loyer (hors APL)"}]}
 | 
			
		||||
            - { key: debt_property, labels: [{lang: fr, label: "Dette d'accession à la propriété"}]}
 | 
			
		||||
            - { key: debt_lodging, labels: [{lang: fr, label: "Dette de frais d’hébergement"}]}
 | 
			
		||||
            - { key: debt_electricity, labels: [{lang: fr, label: "Dette d'électricité"}]}
 | 
			
		||||
            - { key: debt_water, labels: [{lang: fr, label: "Dette d'eau"}]}
 | 
			
		||||
            - { key: debt_heating, labels: [{lang: fr, label: "Dette d'autre moyen de chauffage"}]}
 | 
			
		||||
            - { key: debt_gas, labels: [{lang: fr, label: "Dette de gaz en bouteille"}]}
 | 
			
		||||
            - { key: debt_house_insurance, labels: [{lang: fr, label: "Dette d'assurance habitation"}]}
 | 
			
		||||
            - { key: debt_housing_taxes, labels: [{lang: fr, label: "Dette d'impôts liées au logement"}]}
 | 
			
		||||
            - { key: debt_taxes, labels: [{lang: fr, label: "Dette d'impôts autres"}]}
 | 
			
		||||
            - { key: debt_school, labels: [{lang: fr, label: "Dette de frais de scolarité (cantine, transport, frais de scolarité, frais de garde)"}]}
 | 
			
		||||
            - { key: debt_alimentation, labels: [{lang: fr, label: "Dette de pension alimentaire à reverser"}]}
 | 
			
		||||
            - { key: debt_childcare, labels: [{lang: fr, label: "Dette de frais de garde (en totalité)"}]}
 | 
			
		||||
            - { key: debt_phone, labels: [{lang: fr, label: "Dette de communication fixe"}]}
 | 
			
		||||
            - { key: debt_mobile, labels: [{lang: fr, label: "Dette de communication portable"}]}
 | 
			
		||||
            - { key: debt_internet, labels: [{lang: fr, label: "Dette de communication internet"}]}
 | 
			
		||||
            - { key: debt_car_insurance, labels: [{lang: fr, label: "Dette d'assurance auto"}]}
 | 
			
		||||
            - { key: debt_mutual, labels: [{lang: fr, label: "Dette de mutuelle"}]}
 | 
			
		||||
            - { key: debt_transport, labels: [{lang: fr, label: "Dette de frais de transport"}]}
 | 
			
		||||
            - { key: debt_bank, labels: [{lang: fr, label: "Dette de découvert bancaire utilisé"}]}
 | 
			
		||||
            - { key: debt_garbage, labels: [{lang: fr, label: "Dette de taxe d’ordures ménagère"}]}
 | 
			
		||||
            - { key: debt_other, labels: [{lang: fr, label: "Dette autre"}]}
 | 
			
		||||
            - { key: autre, labels: [{lang: fr, label: "Autre"}]}
 | 
			
		||||
 | 
			
		||||
@@ -1,3 +0,0 @@
 | 
			
		||||
chill_calendar:
 | 
			
		||||
    remote_calendars_sync:
 | 
			
		||||
        enabled: false
 | 
			
		||||
@@ -1,5 +0,0 @@
 | 
			
		||||
chill_doc_generator:
 | 
			
		||||
    driver:
 | 
			
		||||
        type: relatorio
 | 
			
		||||
        relatorio:
 | 
			
		||||
            url: 'http://%env(RELATORIO_HOST)%:%env(RELATORIO_PORT)%/'
 | 
			
		||||
@@ -1,5 +0,0 @@
 | 
			
		||||
when@dev:
 | 
			
		||||
    debug:
 | 
			
		||||
        # Forwards VarDumper Data clones to a centralized server allowing to inspect dumps on CLI or in your browser.
 | 
			
		||||
        # See the "server:dump" command to start a new server.
 | 
			
		||||
        dump_destination: "tcp://%env(VAR_DUMPER_SERVER)%"
 | 
			
		||||
@@ -1,38 +0,0 @@
 | 
			
		||||
doctrine:
 | 
			
		||||
    dbal:
 | 
			
		||||
        url: '%env(resolve:DATABASE_URL)%'
 | 
			
		||||
 | 
			
		||||
        # IMPORTANT: You MUST configure your server version,
 | 
			
		||||
        # either here or in the DATABASE_URL env var (see .env file)
 | 
			
		||||
        #server_version: '16'
 | 
			
		||||
        use_savepoints: true
 | 
			
		||||
    orm:
 | 
			
		||||
        auto_generate_proxy_classes: true
 | 
			
		||||
        naming_strategy: doctrine.orm.naming_strategy.default
 | 
			
		||||
        auto_mapping: true
 | 
			
		||||
 | 
			
		||||
when@test:
 | 
			
		||||
    doctrine:
 | 
			
		||||
        dbal:
 | 
			
		||||
            # "TEST_TOKEN" is typically set by ParaTest
 | 
			
		||||
            dbname_suffix: '_test%env(default::TEST_TOKEN)%'
 | 
			
		||||
 | 
			
		||||
when@prod:
 | 
			
		||||
    doctrine:
 | 
			
		||||
        orm:
 | 
			
		||||
            auto_generate_proxy_classes: false
 | 
			
		||||
            proxy_dir: '%kernel.build_dir%/doctrine/orm/Proxies'
 | 
			
		||||
            query_cache_driver:
 | 
			
		||||
                type: pool
 | 
			
		||||
                pool: doctrine.system_cache_pool
 | 
			
		||||
            result_cache_driver:
 | 
			
		||||
                type: pool
 | 
			
		||||
                pool: doctrine.result_cache_pool
 | 
			
		||||
 | 
			
		||||
    framework:
 | 
			
		||||
        cache:
 | 
			
		||||
            pools:
 | 
			
		||||
                doctrine.result_cache_pool:
 | 
			
		||||
                    adapter: cache.app
 | 
			
		||||
                doctrine.system_cache_pool:
 | 
			
		||||
                    adapter: cache.system
 | 
			
		||||
@@ -1,2 +0,0 @@
 | 
			
		||||
doctrine_migrations:
 | 
			
		||||
    enable_profiler: false
 | 
			
		||||
@@ -1,3 +0,0 @@
 | 
			
		||||
knpu_oauth2_client:
 | 
			
		||||
    clients:
 | 
			
		||||
        # configure your clients as described here: https://github.com/knpuniversity/oauth2-client-bundle#configuration
 | 
			
		||||
@@ -1,4 +0,0 @@
 | 
			
		||||
lexik_jwt_authentication:
 | 
			
		||||
    secret_key: '%env(resolve:JWT_SECRET_KEY)%'
 | 
			
		||||
    public_key: '%env(resolve:JWT_PUBLIC_KEY)%'
 | 
			
		||||
    pass_phrase: '%env(JWT_PASSPHRASE)%'
 | 
			
		||||
@@ -1,9 +0,0 @@
 | 
			
		||||
lexik_jwt_authentication:
 | 
			
		||||
    # required for wopi - recommended duration
 | 
			
		||||
    token_ttl: 36000
 | 
			
		||||
 | 
			
		||||
    # required for wopi - token in parameter access_token
 | 
			
		||||
    token_extractors:
 | 
			
		||||
        query_parameter:
 | 
			
		||||
            enabled: true
 | 
			
		||||
            name: access_token
 | 
			
		||||
@@ -1,3 +0,0 @@
 | 
			
		||||
framework:
 | 
			
		||||
    mailer:
 | 
			
		||||
        dsn: '%env(MAILER_DSN)%'
 | 
			
		||||
@@ -1,4 +0,0 @@
 | 
			
		||||
framework:
 | 
			
		||||
    mailer:
 | 
			
		||||
        envelope:
 | 
			
		||||
            sender: '%env(NOTIFICATION_FROM_EMAIL)%'
 | 
			
		||||
@@ -1,75 +0,0 @@
 | 
			
		||||
framework:
 | 
			
		||||
    messenger:
 | 
			
		||||
        # reset services after consuming messages
 | 
			
		||||
        reset_on_message: true
 | 
			
		||||
 | 
			
		||||
        # 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://
 | 
			
		||||
            async:
 | 
			
		||||
                dsn: '%env(MESSENGER_TRANSPORT_DSN)%/async'
 | 
			
		||||
                options:
 | 
			
		||||
                    exchange:
 | 
			
		||||
                        name: async
 | 
			
		||||
                        type: fanout
 | 
			
		||||
                    queues:
 | 
			
		||||
                        async: ~
 | 
			
		||||
                    auto_setup: true
 | 
			
		||||
 | 
			
		||||
            priority: '%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'
 | 
			
		||||
            to_sign_worker:
 | 
			
		||||
                dsn: '%env(MESSENGER_TRANSPORT_DSN)%/to_python_sign'
 | 
			
		||||
                serializer: Chill\DocStoreBundle\Service\Signature\Driver\BaseSigner\RequestPdfSignMessageSerializer
 | 
			
		||||
                options:
 | 
			
		||||
                    exchange:
 | 
			
		||||
                        name: to_python_sign
 | 
			
		||||
                        type: direct
 | 
			
		||||
                    queues:
 | 
			
		||||
                        to_python_sign: ~
 | 
			
		||||
            signed_docs:
 | 
			
		||||
                dsn: '%env(MESSENGER_TRANSPORT_DSN)%/signed_docs'
 | 
			
		||||
                serializer: Chill\DocStoreBundle\Service\Signature\Driver\BaseSigner\PdfSignedMessageSerializer
 | 
			
		||||
                options:
 | 
			
		||||
                    exchange:
 | 
			
		||||
                        name: signed_docs
 | 
			
		||||
                        type: direct
 | 
			
		||||
                    queues:
 | 
			
		||||
                        signed_docs:
 | 
			
		||||
                            binding_keys: [signed_doc]
 | 
			
		||||
 | 
			
		||||
                    auto_setup: false
 | 
			
		||||
 | 
			
		||||
        routing:
 | 
			
		||||
            # routes added by chill-bundles recipes
 | 
			
		||||
            'Chill\CalendarBundle\Messenger\Message\CalendarRangeMessage': async
 | 
			
		||||
            'Chill\CalendarBundle\Messenger\Message\CalendarRangeRemovedMessage': async
 | 
			
		||||
            'Chill\CalendarBundle\Messenger\Message\CalendarRemovedMessage': async
 | 
			
		||||
            'Chill\CalendarBundle\Messenger\Message\CalendarMessage': async
 | 
			
		||||
            'Chill\CalendarBundle\Messenger\Message\InviteUpdateMessage': async
 | 
			
		||||
            'Chill\CalendarBundle\Messenger\Message\MSGraphChangeNotificationMessage': async
 | 
			
		||||
            'Chill\MainBundle\Service\ShortMessage\ShortMessage': async
 | 
			
		||||
            'Chill\DocGeneratorBundle\Service\Messenger\RequestGenerationMessage': priority
 | 
			
		||||
            'Chill\PersonBundle\AccompanyingPeriod\Lifecycle\AccompanyingPeriodStepChangeRequestMessage': async
 | 
			
		||||
            'Chill\DocStoreBundle\Service\Signature\Driver\BaseSigner\RequestPdfSignMessage': to_sign_worker
 | 
			
		||||
            'Chill\DocStoreBundle\Service\StoredObjectCleaner\RemoveOldVersionMessage': async
 | 
			
		||||
            'Chill\MainBundle\Workflow\Messenger\PostSignatureStateChangeMessage': priority
 | 
			
		||||
            'Chill\MainBundle\Workflow\Messenger\PostPublicViewMessage': async
 | 
			
		||||
            'Chill\MainBundle\Service\Workflow\CancelStaleWorkflowMessage': async
 | 
			
		||||
            # end of routes added by chill-bundles recipes
 | 
			
		||||
            # Route your messages to the transports
 | 
			
		||||
            # 'App\Message\YourMessage': async
 | 
			
		||||
            # 'Symfony\Component\Mailer\Messenger\SendEmailMessage': async
 | 
			
		||||
 | 
			
		||||
when@test:
 | 
			
		||||
    framework:
 | 
			
		||||
        messenger:
 | 
			
		||||
            transports:
 | 
			
		||||
                async: 'in-memory://'
 | 
			
		||||
                priority: 'in-memory://'
 | 
			
		||||
                signed_docs: 'in-memory://'
 | 
			
		||||
@@ -1,13 +0,0 @@
 | 
			
		||||
# To persist libphonenumber\PhoneNumber objects, add the Misd\PhoneNumberBundle\Doctrine\DBAL\Types\PhoneNumberType mapping to your application's config.
 | 
			
		||||
# This requires: doctrine/doctrine-bundle
 | 
			
		||||
#doctrine:
 | 
			
		||||
#    dbal:
 | 
			
		||||
#        types:
 | 
			
		||||
#            phone_number: Misd\PhoneNumberBundle\Doctrine\DBAL\Types\PhoneNumberType
 | 
			
		||||
 | 
			
		||||
#misd_phone_number:
 | 
			
		||||
#    twig: false
 | 
			
		||||
#    form: false
 | 
			
		||||
#    serializer: false
 | 
			
		||||
#    validator:
 | 
			
		||||
#        default_region: GB
 | 
			
		||||
@@ -1,62 +0,0 @@
 | 
			
		||||
monolog:
 | 
			
		||||
    channels:
 | 
			
		||||
        - deprecation # Deprecations are logged in the dedicated "deprecation" channel when it exists
 | 
			
		||||
 | 
			
		||||
when@dev:
 | 
			
		||||
    monolog:
 | 
			
		||||
        handlers:
 | 
			
		||||
            main:
 | 
			
		||||
                type: stream
 | 
			
		||||
                path: "%kernel.logs_dir%/%kernel.environment%.log"
 | 
			
		||||
                level: debug
 | 
			
		||||
                channels: ["!event"]
 | 
			
		||||
            # uncomment to get logging in your browser
 | 
			
		||||
            # you may have to allow bigger header sizes in your Web server configuration
 | 
			
		||||
            #firephp:
 | 
			
		||||
            #    type: firephp
 | 
			
		||||
            #    level: info
 | 
			
		||||
            #chromephp:
 | 
			
		||||
            #    type: chromephp
 | 
			
		||||
            #    level: info
 | 
			
		||||
            console:
 | 
			
		||||
                type: console
 | 
			
		||||
                process_psr_3_messages: false
 | 
			
		||||
                channels: ["!event", "!doctrine", "!console"]
 | 
			
		||||
 | 
			
		||||
when@test:
 | 
			
		||||
    monolog:
 | 
			
		||||
        handlers:
 | 
			
		||||
            main:
 | 
			
		||||
                type: fingers_crossed
 | 
			
		||||
                action_level: error
 | 
			
		||||
                handler: nested
 | 
			
		||||
                excluded_http_codes: [404, 405]
 | 
			
		||||
                channels: ["!event"]
 | 
			
		||||
            nested:
 | 
			
		||||
                type: stream
 | 
			
		||||
                path: "%kernel.logs_dir%/%kernel.environment%.log"
 | 
			
		||||
                level: debug
 | 
			
		||||
 | 
			
		||||
when@prod:
 | 
			
		||||
    monolog:
 | 
			
		||||
        handlers:
 | 
			
		||||
            main:
 | 
			
		||||
                type: fingers_crossed
 | 
			
		||||
                action_level: error
 | 
			
		||||
                handler: nested
 | 
			
		||||
                excluded_http_codes: [404, 405]
 | 
			
		||||
                buffer_size: 50 # How many messages should be saved? Prevent memory leaks
 | 
			
		||||
            nested:
 | 
			
		||||
                type: stream
 | 
			
		||||
                path: php://stderr
 | 
			
		||||
                level: debug
 | 
			
		||||
                formatter: monolog.formatter.json
 | 
			
		||||
            console:
 | 
			
		||||
                type: console
 | 
			
		||||
                process_psr_3_messages: false
 | 
			
		||||
                channels: ["!event", "!doctrine"]
 | 
			
		||||
            deprecation:
 | 
			
		||||
                type: stream
 | 
			
		||||
                channels: [deprecation]
 | 
			
		||||
                path: php://stderr
 | 
			
		||||
                formatter: monolog.formatter.json
 | 
			
		||||
@@ -1,12 +0,0 @@
 | 
			
		||||
when@dev: &dev
 | 
			
		||||
    nelmio_alice:
 | 
			
		||||
        functions_blacklist:
 | 
			
		||||
            - 'current'
 | 
			
		||||
            - 'shuffle'
 | 
			
		||||
            - 'date'
 | 
			
		||||
            - 'time'
 | 
			
		||||
            - 'file'
 | 
			
		||||
            - 'md5'
 | 
			
		||||
            - 'sha1'
 | 
			
		||||
 | 
			
		||||
when@test: *dev
 | 
			
		||||
@@ -1,8 +0,0 @@
 | 
			
		||||
parameters:
 | 
			
		||||
    composed_uri: 'https://%env(resolve:NOTIFICATION_HOST)%'
 | 
			
		||||
    
 | 
			
		||||
framework:
 | 
			
		||||
    router:
 | 
			
		||||
        # Configure how to generate URLs in non-HTTP contexts, such as CLI commands.
 | 
			
		||||
        # See https://symfony.com/doc/current/routing.html#generating-urls-in-commands
 | 
			
		||||
        default_uri: '%composed_uri%'
 | 
			
		||||
@@ -1,9 +0,0 @@
 | 
			
		||||
security:
 | 
			
		||||
    access_decision_manager:
 | 
			
		||||
        strategy: unanimous
 | 
			
		||||
        allow_if_all_abstain: false
 | 
			
		||||
 | 
			
		||||
when@test:
 | 
			
		||||
    security:
 | 
			
		||||
        role_hierarchy:
 | 
			
		||||
            CHILL_MASTER_ROLE: [ CHILL_INHERITED_ROLE_1 ]
 | 
			
		||||
@@ -1,7 +0,0 @@
 | 
			
		||||
framework:
 | 
			
		||||
    default_locale: en
 | 
			
		||||
    translator:
 | 
			
		||||
        default_path: '%kernel.project_dir%/translations'
 | 
			
		||||
        fallbacks:
 | 
			
		||||
            - en
 | 
			
		||||
        providers:
 | 
			
		||||
@@ -1,4 +0,0 @@
 | 
			
		||||
framework:
 | 
			
		||||
    default_locale:  '%env(resolve:LOCALE)%'
 | 
			
		||||
    translator:
 | 
			
		||||
        fallbacks: [ '%env(resolve:LOCALE)%' ]
 | 
			
		||||
@@ -1,6 +0,0 @@
 | 
			
		||||
twig:
 | 
			
		||||
    default_path: '%kernel.project_dir%/templates'
 | 
			
		||||
 | 
			
		||||
when@test:
 | 
			
		||||
    twig:
 | 
			
		||||
        strict_variables: true
 | 
			
		||||
@@ -1,15 +0,0 @@
 | 
			
		||||
when@dev:
 | 
			
		||||
    web_profiler:
 | 
			
		||||
        toolbar: true
 | 
			
		||||
        intercept_redirects: false
 | 
			
		||||
 | 
			
		||||
    framework:
 | 
			
		||||
        profiler: { only_exceptions: false }
 | 
			
		||||
 | 
			
		||||
when@test:
 | 
			
		||||
    web_profiler:
 | 
			
		||||
        toolbar: false
 | 
			
		||||
        intercept_redirects: false
 | 
			
		||||
 | 
			
		||||
    framework:
 | 
			
		||||
        profiler: { collect: false }
 | 
			
		||||
@@ -1,2 +0,0 @@
 | 
			
		||||
wopi:
 | 
			
		||||
    server: "%env(resolve:EDITOR_SERVER)%"
 | 
			
		||||
@@ -1,346 +0,0 @@
 | 
			
		||||
framework:
 | 
			
		||||
    workflows:
 | 
			
		||||
        vendee_internal:
 | 
			
		||||
            type: state_machine
 | 
			
		||||
            metadata:
 | 
			
		||||
                related_entity:
 | 
			
		||||
                        - Chill\PersonBundle\Entity\AccompanyingPeriod\AccompanyingPeriodWorkEvaluationDocument
 | 
			
		||||
                        - Chill\PersonBundle\Entity\AccompanyingPeriod\AccompanyingPeriodWork
 | 
			
		||||
                        - Chill\DocStoreBundle\Entity\AccompanyingCourseDocument
 | 
			
		||||
                label:
 | 
			
		||||
                    fr: 'Suivi'
 | 
			
		||||
            support_strategy: Chill\MainBundle\Workflow\RelatedEntityWorkflowSupportsStrategy
 | 
			
		||||
            marking_store:
 | 
			
		||||
                service: Chill\MainBundle\Workflow\EntityWorkflowMarkingStore
 | 
			
		||||
            initial_marking: 'initial'
 | 
			
		||||
            places:
 | 
			
		||||
                initial:
 | 
			
		||||
                    metadata:
 | 
			
		||||
                        label:
 | 
			
		||||
                            fr: Étape initiale
 | 
			
		||||
                attenteModification:
 | 
			
		||||
                    metadata:
 | 
			
		||||
                        label:
 | 
			
		||||
                            fr: En attente de modification du document
 | 
			
		||||
                        validationFilterInputLabels:
 | 
			
		||||
                            forward: {fr: Modification effectuée}
 | 
			
		||||
                            backward: {fr: Pas de modification effectuée}
 | 
			
		||||
                            neutral: {fr: Autre}
 | 
			
		||||
                attenteMiseEnForme:
 | 
			
		||||
                    metadata:
 | 
			
		||||
                        label:
 | 
			
		||||
                            fr: En attente de mise en forme
 | 
			
		||||
                        validationFilterInputLabels:
 | 
			
		||||
                            forward: {fr: Mise en forme terminée}
 | 
			
		||||
                            backward: {fr: Pas de mise en forme effectuée}
 | 
			
		||||
                            neutral: {fr: Autre}
 | 
			
		||||
                attenteVisa:
 | 
			
		||||
                    metadata:
 | 
			
		||||
                        label:
 | 
			
		||||
                            fr: En attente de visa
 | 
			
		||||
                        validationFilterInputLabels:
 | 
			
		||||
                            forward: {fr: Visa accordé}
 | 
			
		||||
                            backward: {fr: Visa refusé}
 | 
			
		||||
                            neutral: {fr: Autre}
 | 
			
		||||
                attenteSignature:
 | 
			
		||||
                    metadata:
 | 
			
		||||
                        isSignature: ['user', 'person']
 | 
			
		||||
                        onSignatureCompleted:
 | 
			
		||||
                            transitionName: signatureApplied
 | 
			
		||||
                        label:
 | 
			
		||||
                            fr: En attente de signature
 | 
			
		||||
                        validationFilterInputLabels:
 | 
			
		||||
                            forward: {fr: Signature accordée}
 | 
			
		||||
                            backward: {fr: Signature refusée}
 | 
			
		||||
                            neutral: {fr: Autre}
 | 
			
		||||
                postSignature:
 | 
			
		||||
                    metadata:
 | 
			
		||||
                        label:
 | 
			
		||||
                            fr: Signatures traitées
 | 
			
		||||
                        validationFilterInputLabels:
 | 
			
		||||
                            forward: {fr: Poursuite du traitement}
 | 
			
		||||
                            backward: {fr: Annulation ou refus de signature}
 | 
			
		||||
                            neutral: {fr: Autre}
 | 
			
		||||
                attenteTraitement:
 | 
			
		||||
                    metadata:
 | 
			
		||||
                        label:
 | 
			
		||||
                            fr: En attente de traitement
 | 
			
		||||
                        validationFilterInputLabels:
 | 
			
		||||
                            forward: {fr: Traitement terminé favorablement}
 | 
			
		||||
                            backward: {fr: Traitement terminé défavorablement}
 | 
			
		||||
                            neutral: {fr: Autre}
 | 
			
		||||
                attenteEnvoi:
 | 
			
		||||
                    metadata:
 | 
			
		||||
                        label:
 | 
			
		||||
                            fr: En attente d'envoi
 | 
			
		||||
                        validationFilterInputLabels:
 | 
			
		||||
                            forward: {fr: Document envoyé}
 | 
			
		||||
                            backward: {fr: Document non envoyé}
 | 
			
		||||
                            neutral: {fr: Autre}
 | 
			
		||||
                attenteValidationMiseEnForme:
 | 
			
		||||
                    metadata:
 | 
			
		||||
                        label:
 | 
			
		||||
                            fr: En attente de validation de la mise en forme
 | 
			
		||||
                        validationFilterInputLabels:
 | 
			
		||||
                            forward: {fr: Validation de la mise en forme}
 | 
			
		||||
                            backward: {fr: Refus de validation de la mise en forme}
 | 
			
		||||
                            neutral: {fr: Autre}
 | 
			
		||||
                attenteReceptionExternal:
 | 
			
		||||
                    metadata:
 | 
			
		||||
                        isSentExternal: true
 | 
			
		||||
                        onExternalView: clotureApresLectureEnvoiExterne
 | 
			
		||||
                        label:
 | 
			
		||||
                            fr: En attente d'ouverture par un destinataire externe
 | 
			
		||||
                        validationFilterInputLabels:
 | 
			
		||||
                            forward: {fr: Document reçu par un destinataire externe}
 | 
			
		||||
                            backward: {fr: Document non reçu par un destinataire externe}
 | 
			
		||||
                            neutral: {fr: Autre}
 | 
			
		||||
                annule:
 | 
			
		||||
                    metadata:
 | 
			
		||||
                        isFinal: true
 | 
			
		||||
                        isFinalPositive: false
 | 
			
		||||
                        label:
 | 
			
		||||
                            fr: Annulé
 | 
			
		||||
                final:
 | 
			
		||||
                    metadata:
 | 
			
		||||
                        isFinal: true
 | 
			
		||||
                        isFinalPositive: true
 | 
			
		||||
                        label:
 | 
			
		||||
                            fr: Finalisé
 | 
			
		||||
            transitions:
 | 
			
		||||
                # transition qui avancent
 | 
			
		||||
                demandeModificationDocument:
 | 
			
		||||
                    from:
 | 
			
		||||
                        - initial
 | 
			
		||||
                    to: attenteModification
 | 
			
		||||
                    metadata:
 | 
			
		||||
                        label:
 | 
			
		||||
                            fr: Demande de modification du document
 | 
			
		||||
                        isForward: true
 | 
			
		||||
                demandeMiseEnForme:
 | 
			
		||||
                    from:
 | 
			
		||||
                        - initial
 | 
			
		||||
                        - attenteModification
 | 
			
		||||
                    to: attenteMiseEnForme
 | 
			
		||||
                    metadata:
 | 
			
		||||
                        label:
 | 
			
		||||
                            fr: Demande de mise en forme
 | 
			
		||||
                        isForward: true
 | 
			
		||||
                demandeValidationMiseEnForme:
 | 
			
		||||
                    from:
 | 
			
		||||
                        - attenteMiseEnForme
 | 
			
		||||
                    to: attenteValidationMiseEnForme
 | 
			
		||||
                    metadata:
 | 
			
		||||
                        label:
 | 
			
		||||
                            fr: Demande de validation de la mise en forme
 | 
			
		||||
                        isForward: true
 | 
			
		||||
                demandeVisa:
 | 
			
		||||
                    from:
 | 
			
		||||
                        - initial
 | 
			
		||||
                        - attenteModification
 | 
			
		||||
                        - attenteMiseEnForme
 | 
			
		||||
                        - attenteValidationMiseEnForme
 | 
			
		||||
                        - postSignature
 | 
			
		||||
                        - attenteTraitement
 | 
			
		||||
                    to: attenteVisa
 | 
			
		||||
                    metadata:
 | 
			
		||||
                        label:
 | 
			
		||||
                            fr: Demande de visa
 | 
			
		||||
                        isForward: true
 | 
			
		||||
                demandeSignature:
 | 
			
		||||
                    from:
 | 
			
		||||
                        - initial
 | 
			
		||||
                        - attenteModification
 | 
			
		||||
                        - attenteMiseEnForme
 | 
			
		||||
                        - attenteValidationMiseEnForme
 | 
			
		||||
                        - attenteVisa
 | 
			
		||||
                        - attenteTraitement
 | 
			
		||||
                    to: attenteSignature
 | 
			
		||||
                    metadata:
 | 
			
		||||
                        label: {fr: Demande de signature}
 | 
			
		||||
                        isForward: true
 | 
			
		||||
                signatureApplied:
 | 
			
		||||
                    from:
 | 
			
		||||
                        - attenteSignature
 | 
			
		||||
                    to: postSignature
 | 
			
		||||
                    metadata:
 | 
			
		||||
                        label: {fr: Signatures appliquées}
 | 
			
		||||
                        isForward: true
 | 
			
		||||
                        transitionGuard: 'system' # can be 'system+only-dest' or 'only-dest' (only-dest is default)
 | 
			
		||||
                demandeTraitement:
 | 
			
		||||
                    from:
 | 
			
		||||
                        - initial
 | 
			
		||||
                        - attenteModification
 | 
			
		||||
                        - attenteMiseEnForme
 | 
			
		||||
                        - attenteValidationMiseEnForme
 | 
			
		||||
                        - attenteVisa
 | 
			
		||||
                        - postSignature
 | 
			
		||||
                    to: attenteTraitement
 | 
			
		||||
                    metadata:
 | 
			
		||||
                        label: {fr: Demande de traitement}
 | 
			
		||||
                        isForward: true
 | 
			
		||||
                demandeEnvoi:
 | 
			
		||||
                    from:
 | 
			
		||||
                        - initial
 | 
			
		||||
                        - attenteModification
 | 
			
		||||
                        - attenteMiseEnForme
 | 
			
		||||
                        - attenteValidationMiseEnForme
 | 
			
		||||
                        - attenteVisa
 | 
			
		||||
                        - postSignature
 | 
			
		||||
                        - attenteTraitement
 | 
			
		||||
                    to: attenteEnvoi
 | 
			
		||||
                    metadata:
 | 
			
		||||
                        label: {fr: Demande d'envoi}
 | 
			
		||||
                        isForward: true
 | 
			
		||||
                demandeEnvoiExterne:
 | 
			
		||||
                    from:
 | 
			
		||||
                        - initial
 | 
			
		||||
                        - attenteModification
 | 
			
		||||
                        - attenteMiseEnForme
 | 
			
		||||
                        - attenteValidationMiseEnForme
 | 
			
		||||
                        - attenteVisa
 | 
			
		||||
                        - postSignature
 | 
			
		||||
                        - attenteTraitement
 | 
			
		||||
                    to: attenteReceptionExternal
 | 
			
		||||
                    metadata:
 | 
			
		||||
                        label: {fr: Envoi sécurisé par courrier électronique}
 | 
			
		||||
                        isForward: true
 | 
			
		||||
                clotureApresLectureEnvoiExterne:
 | 
			
		||||
                    from:
 | 
			
		||||
                        - attenteReceptionExternal
 | 
			
		||||
                    to:
 | 
			
		||||
                        - final
 | 
			
		||||
                    metadata:
 | 
			
		||||
                        transitionGuard: system
 | 
			
		||||
                        isForward:  true
 | 
			
		||||
                        label: {fr: Consultation de l'envoi sécurisé}
 | 
			
		||||
                annulation:
 | 
			
		||||
                    from:
 | 
			
		||||
                        - initial
 | 
			
		||||
                        - attenteModification
 | 
			
		||||
                        - attenteMiseEnForme
 | 
			
		||||
                        - attenteValidationMiseEnForme
 | 
			
		||||
                        - attenteVisa
 | 
			
		||||
                        - postSignature
 | 
			
		||||
                        - attenteTraitement
 | 
			
		||||
                        - attenteEnvoi
 | 
			
		||||
                    to: annule
 | 
			
		||||
                    metadata:
 | 
			
		||||
                        label: {fr: Annulation}
 | 
			
		||||
                        isForward: false
 | 
			
		||||
                        transitionGuard: 'system+only-dest' # can be 'system+only-dest' or 'only-dest' (only-dest is default)
 | 
			
		||||
                # transitions qui répètent l'étape
 | 
			
		||||
                demandeMiseEnFormeSupplementaire:
 | 
			
		||||
                    from:
 | 
			
		||||
                        - attenteMiseEnForme
 | 
			
		||||
                        - attenteValidationMiseEnForme
 | 
			
		||||
                    to: attenteMiseEnForme
 | 
			
		||||
                    metadata:
 | 
			
		||||
                        label: {fr: Demande de mise en forme supplémentaire}
 | 
			
		||||
                demandeVisaSupplementaire:
 | 
			
		||||
                    from:
 | 
			
		||||
                        - attenteVisa
 | 
			
		||||
                    to: attenteVisa
 | 
			
		||||
                    metadata:
 | 
			
		||||
                        label: {fr: Demande de visa supplémentaire}
 | 
			
		||||
                        isForward: true
 | 
			
		||||
                demandeSignatureSupplementaire:
 | 
			
		||||
                    from:
 | 
			
		||||
                        - postSignature
 | 
			
		||||
                    to: attenteSignature
 | 
			
		||||
                    metadata:
 | 
			
		||||
                        label: {fr: Demande de signature supplémentaire}
 | 
			
		||||
                        isForward: true
 | 
			
		||||
                demandeTraitementSupplementaire:
 | 
			
		||||
                    from:
 | 
			
		||||
                        - attenteTraitement
 | 
			
		||||
                    to: attenteTraitement
 | 
			
		||||
                    metadata:
 | 
			
		||||
                        label: {fr: Demande de traitement supplémentaire}
 | 
			
		||||
                # transitions qui renvoient vers une étape précédente
 | 
			
		||||
                refusEtModificationDocument:
 | 
			
		||||
                    from:
 | 
			
		||||
                        - attenteVisa
 | 
			
		||||
                        - postSignature
 | 
			
		||||
                        - attenteTraitement
 | 
			
		||||
                        - attenteEnvoi
 | 
			
		||||
                    to: attenteModification
 | 
			
		||||
                    metadata:
 | 
			
		||||
                        label:
 | 
			
		||||
                            fr: Refus et demande de modification du document
 | 
			
		||||
                        isForward: false
 | 
			
		||||
                refusEtDemandeMiseEnForme:
 | 
			
		||||
                    from:
 | 
			
		||||
                        - attenteVisa
 | 
			
		||||
                        - attenteTraitement
 | 
			
		||||
                        - attenteEnvoi
 | 
			
		||||
                    to: attenteMiseEnForme
 | 
			
		||||
                    metadata:
 | 
			
		||||
                        label: {fr: Refus et demande de mise en forme}
 | 
			
		||||
                        isForward: false
 | 
			
		||||
                refusEtDemandeVisa:
 | 
			
		||||
                    from:
 | 
			
		||||
                        - postSignature
 | 
			
		||||
                        - attenteEnvoi
 | 
			
		||||
                    to: attenteVisa
 | 
			
		||||
                    metadata:
 | 
			
		||||
                        label: {fr: Refus et demande de visa}
 | 
			
		||||
                        isForward: false
 | 
			
		||||
                refusEtDemandeSignature:
 | 
			
		||||
                    from:
 | 
			
		||||
                        - attenteEnvoi
 | 
			
		||||
                    to: attenteSignature
 | 
			
		||||
                    metadata:
 | 
			
		||||
                        label: {fr: Refus et demande de signature}
 | 
			
		||||
                        isForward: false
 | 
			
		||||
                refusEtDemandeTraitement:
 | 
			
		||||
                    from:
 | 
			
		||||
                        - attenteEnvoi
 | 
			
		||||
                    to: attenteTraitement
 | 
			
		||||
                    metadata:
 | 
			
		||||
                        label: {fr: Refus et demande de traitement}
 | 
			
		||||
                        isForward: false
 | 
			
		||||
                # transition vers final
 | 
			
		||||
                initialToFinal:
 | 
			
		||||
                    from:
 | 
			
		||||
                        - initial
 | 
			
		||||
                    to: final
 | 
			
		||||
                    metadata:
 | 
			
		||||
                        label: {fr: Clotûre immédiate et cloture positive}
 | 
			
		||||
                        isForward: true
 | 
			
		||||
                attenteMiseEnFormeToFinal:
 | 
			
		||||
                    from:
 | 
			
		||||
                        - attenteMiseEnForme
 | 
			
		||||
                        - attenteValidationMiseEnForme
 | 
			
		||||
                    to: final
 | 
			
		||||
                    metadata:
 | 
			
		||||
                        label: {fr: Mise en forme terminée et cloture positive}
 | 
			
		||||
                        isForward: true
 | 
			
		||||
                attenteVisaToFinal:
 | 
			
		||||
                    from:
 | 
			
		||||
                        - attenteVisa
 | 
			
		||||
                    to: final
 | 
			
		||||
                    metadata:
 | 
			
		||||
                        label: {fr: Accorde le visa et cloture positive}
 | 
			
		||||
                        isForward: true
 | 
			
		||||
                postSignatureToFinal:
 | 
			
		||||
                    from:
 | 
			
		||||
                        - postSignature
 | 
			
		||||
                    to: final
 | 
			
		||||
                    metadata:
 | 
			
		||||
                        label: {fr: Cloture positive}
 | 
			
		||||
                        isForward: true
 | 
			
		||||
                attenteTraitementToFinal:
 | 
			
		||||
                    from:
 | 
			
		||||
                        - attenteTraitement
 | 
			
		||||
                    to: final
 | 
			
		||||
                    metadata:
 | 
			
		||||
                        label: {fr: Traitement terminé et cloture positive}
 | 
			
		||||
                        isForward: true
 | 
			
		||||
                attenteEnvoiToFinal:
 | 
			
		||||
                    from:
 | 
			
		||||
                        - attenteEnvoi
 | 
			
		||||
                    to: final
 | 
			
		||||
                    metadata:
 | 
			
		||||
                        label: {fr: Envoyé et cloture positive}
 | 
			
		||||
                        isForward: true
 | 
			
		||||
@@ -1,5 +0,0 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
if (file_exists(dirname(__DIR__).'/var/cache/prod/App_KernelProdContainer.preload.php')) {
 | 
			
		||||
    require dirname(__DIR__).'/var/cache/prod/App_KernelProdContainer.preload.php';
 | 
			
		||||
}
 | 
			
		||||
@@ -1,3 +0,0 @@
 | 
			
		||||
kernel:
 | 
			
		||||
    resource: ../../src/app/Kernel.php
 | 
			
		||||
    type: annotation
 | 
			
		||||
@@ -1,3 +0,0 @@
 | 
			
		||||
chill_wopi_bundle:
 | 
			
		||||
  resource: '@ChillWopiBundle/Resources/config/routes/routes.php'
 | 
			
		||||
  prefix: /chill/wopi
 | 
			
		||||
@@ -1,4 +0,0 @@
 | 
			
		||||
when@dev:
 | 
			
		||||
    _errors:
 | 
			
		||||
        resource: '@FrameworkBundle/Resources/config/routing/errors.xml'
 | 
			
		||||
        prefix: /_error
 | 
			
		||||
@@ -1,8 +0,0 @@
 | 
			
		||||
when@dev:
 | 
			
		||||
    web_profiler_wdt:
 | 
			
		||||
        resource: '@WebProfilerBundle/Resources/config/routing/wdt.xml'
 | 
			
		||||
        prefix: /_wdt
 | 
			
		||||
 | 
			
		||||
    web_profiler_profiler:
 | 
			
		||||
        resource: '@WebProfilerBundle/Resources/config/routing/profiler.xml'
 | 
			
		||||
        prefix: /_profiler
 | 
			
		||||
@@ -1,3 +0,0 @@
 | 
			
		||||
wopi_bundle:
 | 
			
		||||
  resource: '@WopiBundle/Resources/config/routes/routes.php'
 | 
			
		||||
  prefix: /wopi
 | 
			
		||||
@@ -21,7 +21,7 @@ use Symfony\Component\Validator\Context\ExecutionContextInterface;
 | 
			
		||||
class BirthdateFilter implements ExportElementValidatedInterface, FilterInterface
 | 
			
		||||
{
 | 
			
		||||
    // add specific role for this filter
 | 
			
		||||
    public function addRole(): ?string
 | 
			
		||||
    public function addRole()
 | 
			
		||||
    {
 | 
			
		||||
        // we do not need any new role for this filter, so we return null
 | 
			
		||||
        return null;
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
 | 
			
		||||
@@ -39,12 +39,9 @@ Implements a :code:`Chill\MainBundle\Cron\CronJobInterface`. Here is an example:
 | 
			
		||||
    use Chill\MainBundle\Entity\CronJobExecution;
 | 
			
		||||
    use DateInterval;
 | 
			
		||||
    use DateTimeImmutable;
 | 
			
		||||
    use Symfony\Component\Clock\ClockInterface;
 | 
			
		||||
 | 
			
		||||
    class MyCronJob implements CronJobInterface
 | 
			
		||||
    {
 | 
			
		||||
        function __construct(private ClockInterface $clock) {}
 | 
			
		||||
 | 
			
		||||
        public function canRun(?CronJobExecution $cronJobExecution): bool
 | 
			
		||||
        {
 | 
			
		||||
            // the parameter $cronJobExecution contains data about the last execution of the cronjob
 | 
			
		||||
@@ -59,7 +56,7 @@ Implements a :code:`Chill\MainBundle\Cron\CronJobInterface`. Here is an example:
 | 
			
		||||
 | 
			
		||||
            // this cron job should be executed if the last execution is greater than one day, but only during the night
 | 
			
		||||
 | 
			
		||||
            $now = $clock->now();
 | 
			
		||||
            $now = new DateTimeImmutable('now');
 | 
			
		||||
 | 
			
		||||
            return $cronJobExecution->getLastStart() < $now->sub(new DateInterval('P1D'))
 | 
			
		||||
                && in_array($now->format('H'), self::ACCEPTED_HOURS, true)
 | 
			
		||||
@@ -72,15 +69,10 @@ Implements a :code:`Chill\MainBundle\Cron\CronJobInterface`. Here is an example:
 | 
			
		||||
            return 'arbitrary-and-unique-key';
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public function run(array $lastExecutionData): void
 | 
			
		||||
        public function run(): void
 | 
			
		||||
        {
 | 
			
		||||
            // here, we execute the command
 | 
			
		||||
 | 
			
		||||
            // we return execution data, which will be served for next execution
 | 
			
		||||
            // this data should be easily serializable in a json column: it should contains
 | 
			
		||||
            // only int, string, etc. Avoid storing object
 | 
			
		||||
            return ['last-execution-id' => 0];
 | 
			
		||||
       }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
How are cron job scheduled ?
 | 
			
		||||
 
 | 
			
		||||
@@ -1,125 +0,0 @@
 | 
			
		||||
 | 
			
		||||
Enable CODE for development
 | 
			
		||||
===========================
 | 
			
		||||
 | 
			
		||||
For editing a document, there must be a way to communicate between the collabora server and the symfony server, in
 | 
			
		||||
both direction. The domain name should also be the same for collabora server and for the browser which access to the
 | 
			
		||||
online editor.
 | 
			
		||||
 | 
			
		||||
Using ngrok (or other http tunnel)
 | 
			
		||||
----------------------------------
 | 
			
		||||
 | 
			
		||||
One can configure a tunnel server to expose your local install to the web, and access to your local server using the
 | 
			
		||||
tunnel url.
 | 
			
		||||
 | 
			
		||||
Start ngrok
 | 
			
		||||
^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
This can be achieve using `ngrok <https://ngrok.com/>`_.
 | 
			
		||||
 | 
			
		||||
.. note::
 | 
			
		||||
 | 
			
		||||
   The configuration of ngrok is outside of the scope of this document. Refers to the ngrok's documentation.
 | 
			
		||||
 | 
			
		||||
.. code-block:: bash
 | 
			
		||||
 | 
			
		||||
   # ensuring that your server is running through http and port 8000
 | 
			
		||||
   ngrok http 8000
 | 
			
		||||
   # then open the link given by the ngrok utility and you should reach your app
 | 
			
		||||
 | 
			
		||||
At this step, ensure that you can reach your local app using the ngrok url.
 | 
			
		||||
 | 
			
		||||
Configure Collabora
 | 
			
		||||
^^^^^^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
The collabora server must be executed online and configure to access to your ngrok installation. Ensure that the aliasgroup
 | 
			
		||||
exists for your ngrok application (`See the CODE documentation: <https://sdk.collaboraonline.com/docs/installation/Configuration.html#multihost-configuration>`_).
 | 
			
		||||
 | 
			
		||||
Configure your app
 | 
			
		||||
^^^^^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
Set the :code:`EDITOR_SERVER` variable to point to your collabora server, this should be done in your :code:`.env.local` file.
 | 
			
		||||
 | 
			
		||||
At this point, everything must be fine. In case of errors, watch the log from your collabora server, use the `profiler <https://symfony.com/doc/current/profiler.html>`_
 | 
			
		||||
to debug the requests.
 | 
			
		||||
 | 
			
		||||
.. note::
 | 
			
		||||
 | 
			
		||||
   In case of error while validating proof (you'll see those message in the collabora's logs), you can temporarily disable
 | 
			
		||||
   the proof validation adding this code snippet in `config/services.yaml`:
 | 
			
		||||
 | 
			
		||||
   .. code-block:: yaml
 | 
			
		||||
 | 
			
		||||
      when@dev:
 | 
			
		||||
          # add only in dev environment, to avoid security problems
 | 
			
		||||
          services:
 | 
			
		||||
              ChampsLibres\WopiLib\Contract\Service\ProofValidatorInterface:
 | 
			
		||||
                  # this class will always validate proof
 | 
			
		||||
                  alias: Chill\WopiBundle\Service\Wopi\NullProofValidator
 | 
			
		||||
 | 
			
		||||
With a local CODE image
 | 
			
		||||
-----------------------
 | 
			
		||||
 | 
			
		||||
.. warning::
 | 
			
		||||
 | 
			
		||||
   This configuration is not sure, and must be refined. The documentation does not seems to be entirely valid.
 | 
			
		||||
 | 
			
		||||
Use a local domain name and https for your app
 | 
			
		||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
Use the proxy feature from embedded symfony server to run your app. `See the dedicated doc <https://symfony.com/doc/current/setup/symfony_server.html#local-domain-names>`
 | 
			
		||||
 | 
			
		||||
Configure also the `https certificate <https://symfony.com/doc/current/setup/symfony_server.html#enabling-tls>`_
 | 
			
		||||
 | 
			
		||||
In this example, your local domain name will be :code:`my-domain` and the url will be :code:`https://my-domain.wip`.
 | 
			
		||||
 | 
			
		||||
Ensure that the proxy is running.
 | 
			
		||||
 | 
			
		||||
Create a certificate database for collabora
 | 
			
		||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
Collabora must validate your certificate generated by symfony console. For that, you need `to create a NSS database <https://sdk.collaboraonline.com/docs/installation/Configuration.html#validating-digital-signatures>`
 | 
			
		||||
and configure collabora to use it.
 | 
			
		||||
 | 
			
		||||
At first, export the certificate for symfony development. Use the graphical interface from your browser to get the
 | 
			
		||||
certificate as a PEM file.
 | 
			
		||||
 | 
			
		||||
.. code-block:: bash
 | 
			
		||||
 | 
			
		||||
   # create your database in a custom directory
 | 
			
		||||
   mkdir /path/to/your/directory
 | 
			
		||||
   certutil -N -d /path/to/your/directory
 | 
			
		||||
   cat /path/to/your/ca.crt | certutil -d . -A symfony -t -t C,P,C,u,w -a
 | 
			
		||||
 | 
			
		||||
Launch CODE properly configured
 | 
			
		||||
 | 
			
		||||
.. code-block:: yaml
 | 
			
		||||
 | 
			
		||||
     collabora:
 | 
			
		||||
         image: collabora/code:latest
 | 
			
		||||
         environment:
 | 
			
		||||
             - SLEEPFORDEBUGGER=0
 | 
			
		||||
             - DONT_GEN_SSL_CERT="True"
 | 
			
		||||
             # add path to the database
 | 
			
		||||
             - extra_params=--o:ssl.enable=false --o:ssl.termination=false --o:logging.level=7 -o:certificates.database_path=/etc/custom-certificates/nss-database
 | 
			
		||||
             - username=admin
 | 
			
		||||
             - password=admin
 | 
			
		||||
             - dictionaries=en_US
 | 
			
		||||
             - aliasgroup1=https://my-domain.wip
 | 
			
		||||
         ports:
 | 
			
		||||
             - "127.0.0.1:9980:9980"
 | 
			
		||||
         volumes:
 | 
			
		||||
             - "/path/to/your/directory/nss-database:/etc/custom-certificates/nss-database"
 | 
			
		||||
         extra_hosts:
 | 
			
		||||
             - "my-domain.wip:host-gateway"
 | 
			
		||||
 | 
			
		||||
Configure your app
 | 
			
		||||
^^^^^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
Into your :code:`.env.local` file:
 | 
			
		||||
 | 
			
		||||
.. code-block:: env
 | 
			
		||||
 | 
			
		||||
   EDITOR_SERVER=http://${COLLABORA_HOST}:${COLLABORA_PORT}
 | 
			
		||||
 | 
			
		||||
At this step, you should be able to edit a document through collabora.
 | 
			
		||||
@@ -17,27 +17,6 @@ Installation & Usage
 | 
			
		||||
 | 
			
		||||
You will learn here how to install a new symfony project with chill, and configure it.
 | 
			
		||||
 | 
			
		||||
Which can of installation do I need ?
 | 
			
		||||
=====================================
 | 
			
		||||
 | 
			
		||||
I want to run chill in production
 | 
			
		||||
---------------------------------
 | 
			
		||||
 | 
			
		||||
See the :ref:`instructions about installing Chill for production <installation-production>`.
 | 
			
		||||
 | 
			
		||||
I want to add features to the main chill bundles
 | 
			
		||||
------------------------------------------------
 | 
			
		||||
 | 
			
		||||
If you want to add features to chill bundles itself, **and** you want those features to be merged into the chill bundles,
 | 
			
		||||
you can use the "development" installation mode.
 | 
			
		||||
 | 
			
		||||
See the :ref:`instruction for installation for development <installation-for-dev>`.
 | 
			
		||||
 | 
			
		||||
I want to add features to Chill, but keep those features for my instance
 | 
			
		||||
-------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
Follow the same instruction than for production, until the end.
 | 
			
		||||
 | 
			
		||||
Requirements
 | 
			
		||||
============
 | 
			
		||||
 | 
			
		||||
@@ -57,11 +36,340 @@ Chill needs a redis server and a postgresql database, and a few other things lik
 | 
			
		||||
generate documents from templates. **All these things are available through docker using the plugin compose**. We do not provide
 | 
			
		||||
information on how to run this without docker compose.
 | 
			
		||||
 | 
			
		||||
Instructions
 | 
			
		||||
============
 | 
			
		||||
 | 
			
		||||
Install a new project
 | 
			
		||||
=====================
 | 
			
		||||
 | 
			
		||||
Initialize project and dependencies
 | 
			
		||||
***********************************
 | 
			
		||||
 | 
			
		||||
.. code-block:: bash
 | 
			
		||||
 | 
			
		||||
   symfony new --version=5.4 my_chill_project
 | 
			
		||||
   cd my_chill_project
 | 
			
		||||
 | 
			
		||||
We strongly encourage you to initialize a git repository at this step, to track further changes.
 | 
			
		||||
 | 
			
		||||
.. code-block:: bash
 | 
			
		||||
 | 
			
		||||
   # add the flex endpoints required for custom recipes
 | 
			
		||||
   cat <<< "$(jq '.extra.symfony += {"endpoint": ["flex://defaults", "https://gitlab.com/api/v4/projects/57371968/repository/files/index.json/raw?ref=main"]}' composer.json)" > composer.json
 | 
			
		||||
   # install chill and some dependencies
 | 
			
		||||
   # TODO fix the suffix "alpha1" and replace by ^3.0.0 when version 3.0.0 will be released
 | 
			
		||||
   symfony composer require chill-project/chill-bundles v3.0.0-alpha1 champs-libres/wopi-lib dev-master@dev champs-libres/wopi-bundle dev-master@dev
 | 
			
		||||
 | 
			
		||||
We encourage you to accept the inclusion of the "Docker configuration from recipes": this is the documented way to run the database.
 | 
			
		||||
You must also accept to configure recipes from the contrib repository, unless you want to configure the bundles manually).
 | 
			
		||||
 | 
			
		||||
.. code-block:: bash
 | 
			
		||||
 | 
			
		||||
   # fix some configuration
 | 
			
		||||
   ./post-install-chill.sh
 | 
			
		||||
   # install node dependencies
 | 
			
		||||
   yarn install
 | 
			
		||||
   # and compile assets
 | 
			
		||||
   yarn run encore production
 | 
			
		||||
 | 
			
		||||
.. note::
 | 
			
		||||
 | 
			
		||||
   If you encounter this error during assets compilation (:code:`yarn run encore production`) (repeated multiple times):
 | 
			
		||||
 | 
			
		||||
   .. code-block:: txt
 | 
			
		||||
 | 
			
		||||
      [tsl] ERROR in /tmp/chill/v1/public/bundles/chillcalendar/types.ts(2,65)
 | 
			
		||||
            TS2307: Cannot find module '../../../ChillMainBundle/Resources/public/types' or its corresponding type declarations.
 | 
			
		||||
 | 
			
		||||
   run:
 | 
			
		||||
 | 
			
		||||
   .. code-block:: bash
 | 
			
		||||
 | 
			
		||||
      rm -rf public/bundles/*
 | 
			
		||||
 | 
			
		||||
   Then restart the compilation of assets (:code:```yarn run encore production```)
 | 
			
		||||
 | 
			
		||||
Configure your project
 | 
			
		||||
**********************
 | 
			
		||||
 | 
			
		||||
You should read the configuration files in :code:`chill/config/packages` carefully, especially if you have
 | 
			
		||||
custom developments. But most of the time, this should be fine.
 | 
			
		||||
 | 
			
		||||
You have to configure some local variables, which are described in the :code:`.env` file. The secrets should not be stored
 | 
			
		||||
in this :code:`.env` file, but instead using the `secrets management tool <https://symfony.com/doc/current/configuration/secrets.html>`_
 | 
			
		||||
or in the :code:`.env.local` file, which should not be committed to the git repository.
 | 
			
		||||
 | 
			
		||||
You do not need to set variables for the smtp server, redis server and relatorio server, as they are generated automatically
 | 
			
		||||
by the symfony server, from the docker compose services.
 | 
			
		||||
 | 
			
		||||
The only required variable is the :code:`ADMIN_PASSWORD`. You can generate a hashed and salted admin password using the command
 | 
			
		||||
:code:`symfony console security:hash-password <your password> 'Symfony\Component\Security\Core\User\User'`. Then,
 | 
			
		||||
you can either:
 | 
			
		||||
 | 
			
		||||
- add this password to the :code:`.env.local` file, you must escape the character :code:`$`: if the generated password
 | 
			
		||||
  is :code:`$2y$13$iyvJLuT4YEa6iWXyQV4/N.hNHpNG8kXlYDkkt5MkYy4FXcSwYAwmm`, your :code:`.env.local` file will be:
 | 
			
		||||
 | 
			
		||||
  .. code-block:: env
 | 
			
		||||
 | 
			
		||||
     ADMIN_PASSWORD=\$2y\$13\$iyvJLuT4YEa6iWXyQV4/N.hNHpNG8kXlYDkkt5MkYy4FXcSwYAwmm
 | 
			
		||||
 | 
			
		||||
- add the generated password to the secrets manager (**note**: you must add the generated hashed password to the secrets env,
 | 
			
		||||
  not the password in clear text).
 | 
			
		||||
 | 
			
		||||
- set up the jwt authentication bundle
 | 
			
		||||
 | 
			
		||||
Some environment variables are available for the JWT authentication bundle in the :code:`.env` file. You must also run the command
 | 
			
		||||
:code:`symfony console lexik:jwt:generate-keypair` to generate some keys that will be stored in the paths set up in the :code:`JWT_SECRET_KEY`
 | 
			
		||||
and the :code:`JWT_PUBLIC_KEY` env variables. This is only required for using the stored documents in Chill.
 | 
			
		||||
 | 
			
		||||
Prepare migrations and other tools
 | 
			
		||||
**********************************
 | 
			
		||||
 | 
			
		||||
To continue the installation process, you will have to run migrations:
 | 
			
		||||
 | 
			
		||||
.. code-block:: bash
 | 
			
		||||
 | 
			
		||||
   # start databases and other services
 | 
			
		||||
   docker compose up -d
 | 
			
		||||
   # the first start, it may last some seconds, you can check with docker compose ps
 | 
			
		||||
   # run migrations
 | 
			
		||||
   symfony console doctrine:migrations:migrate
 | 
			
		||||
   # setup messenger
 | 
			
		||||
   symfony console messenger:setup-transports
 | 
			
		||||
   # prepare some views
 | 
			
		||||
   symfony console chill:db:sync-views
 | 
			
		||||
 | 
			
		||||
.. warning::
 | 
			
		||||
 | 
			
		||||
   If you encounter an error while running :code:`symfony console messenger:setup-transports`, you can set up the messenger
 | 
			
		||||
   transport to redis, by adding this in the :code:`.env.local` or :code:`.env` file:
 | 
			
		||||
 | 
			
		||||
   .. code-block:: env
 | 
			
		||||
 | 
			
		||||
      MESSENGER_TRANSPORT_DSN=redis://${REDIS_HOST}:${REDIS_PORT}/messages
 | 
			
		||||
 | 
			
		||||
Start your web server locally
 | 
			
		||||
*****************************
 | 
			
		||||
 | 
			
		||||
At this step, Chill will be ready to be served locally, but without any configuration. You can run the project
 | 
			
		||||
locally using the `local symfony server <https://symfony.com/doc/current/setup/symfony_server.html>`_:
 | 
			
		||||
 | 
			
		||||
.. code-block:: bash
 | 
			
		||||
 | 
			
		||||
   # see the whole possibilities at https://symfony.com/doc/current/setup/symfony_server.html
 | 
			
		||||
   symfony server:start -d
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
If you need to test the instance with accounts and some basic configuration, please install the fixtures (see below).
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Add capabilities for dev
 | 
			
		||||
========================
 | 
			
		||||
 | 
			
		||||
If you need to add custom bundles, you can develop them in the `src/` directory, like for any other symfony project. You
 | 
			
		||||
can rely on the whole chill framework, meaning there is no need to add them to the original `chill-bundles`.
 | 
			
		||||
 | 
			
		||||
You will require some bundles to have the following development tools:
 | 
			
		||||
 | 
			
		||||
- add fixtures
 | 
			
		||||
- add profiler and debug bundle
 | 
			
		||||
 | 
			
		||||
Install fixtures
 | 
			
		||||
****************
 | 
			
		||||
 | 
			
		||||
.. code-block:: bash
 | 
			
		||||
 | 
			
		||||
   # generate fixtures for chill
 | 
			
		||||
   symfony composer require --dev doctrine/doctrine-fixtures-bundle nelmio/alice
 | 
			
		||||
   # now, you can generate fixtures (this will reset your database)
 | 
			
		||||
   symfony console doctrine:fixtures:load
 | 
			
		||||
 | 
			
		||||
This will generate user accounts, centers, and some basic configuration.
 | 
			
		||||
 | 
			
		||||
The accounts created are: :code:`center a_social`, :code:`center b_social`, :code:`center a_direction`, ...  The full list is
 | 
			
		||||
visible in the "users" table: :code:`docker compose exec database psql -U app -c "SELECT username FROM users"`.
 | 
			
		||||
 | 
			
		||||
The password is always :code:`password`.
 | 
			
		||||
 | 
			
		||||
.. warning::
 | 
			
		||||
 | 
			
		||||
   The fixtures are not fully functional. See the `corresponding issue <https://gitlab.com/Chill-Projet/chill-bundles/-/issues/280>`_.
 | 
			
		||||
 | 
			
		||||
Add web profiler and debugger
 | 
			
		||||
*****************************
 | 
			
		||||
 | 
			
		||||
.. code-block:: bash
 | 
			
		||||
 | 
			
		||||
   symfony composer require --dev symfony/web-profiler-bundle symfony/debug-bundle
 | 
			
		||||
 | 
			
		||||
Working on chill bundles
 | 
			
		||||
************************
 | 
			
		||||
 | 
			
		||||
If you plan to improve the chill-bundles repository, that's great!
 | 
			
		||||
 | 
			
		||||
You will have to download chill-bundles as a git repository (and not as an archive, which is barely editable).
 | 
			
		||||
 | 
			
		||||
In your :code:`composer.json` file, add these lines:
 | 
			
		||||
 | 
			
		||||
.. code-block:: diff
 | 
			
		||||
 | 
			
		||||
    {
 | 
			
		||||
        "config": {
 | 
			
		||||
   +        "preferred-install": {
 | 
			
		||||
   +            "chill-project/chill-bundles": "source",
 | 
			
		||||
                "*": "dist"
 | 
			
		||||
   +         }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
Then, run :code:`symfony composer reinstall chill-project/chill-bundles` to re-install the package from source.
 | 
			
		||||
 | 
			
		||||
Code style, code quality and other tools
 | 
			
		||||
****************************************
 | 
			
		||||
 | 
			
		||||
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>`_.
 | 
			
		||||
 | 
			
		||||
Commit and share your project
 | 
			
		||||
=============================
 | 
			
		||||
 | 
			
		||||
If multiple developers work on a project, you can commit your symfony project and share it with other people.
 | 
			
		||||
 | 
			
		||||
When another developer clones your project, they will have to:
 | 
			
		||||
 | 
			
		||||
- run :code:`symfony composer install` and :code:`yarn install` to install the same dependencies as the initial developer;
 | 
			
		||||
- run :code:`yarn run encore production` to compile assets;
 | 
			
		||||
- copy any possible variables from the :code:`.env.local` files;
 | 
			
		||||
- start the docker compose stack, using :code:`docker compose`, and run migrations, set up transports, and prepare chill db views
 | 
			
		||||
  (see the corresponding command above)
 | 
			
		||||
 | 
			
		||||
Update
 | 
			
		||||
======
 | 
			
		||||
 | 
			
		||||
In order to update your app, you must update dependencies:
 | 
			
		||||
 | 
			
		||||
- for chill-bundles, you can `set the last version <https://gitlab.com/Chill-Projet/chill-bundles/-/releases>`_ manually
 | 
			
		||||
  in the :code:`composer.json` file, or set the version to `^3.0.0` and run :code:`symfony composer update` regularly
 | 
			
		||||
- run :code:`composer update` and :code:`yarn update` to maintain your dependencies up-to-date.
 | 
			
		||||
 | 
			
		||||
After each update, you must update your database schema:
 | 
			
		||||
 | 
			
		||||
.. code-block:: bash
 | 
			
		||||
 | 
			
		||||
   symfony console doctrine:migrations:migrate
 | 
			
		||||
   symfony console chill:db:sync-views
 | 
			
		||||
 | 
			
		||||
Operations
 | 
			
		||||
==========
 | 
			
		||||
 | 
			
		||||
Build assets
 | 
			
		||||
************
 | 
			
		||||
 | 
			
		||||
run those commands:
 | 
			
		||||
 | 
			
		||||
.. code-block:: bash
 | 
			
		||||
 | 
			
		||||
   # for production (or in dev, when you don't need to work on your assets and need some speed)
 | 
			
		||||
   yarn run encore production
 | 
			
		||||
   # in dev, when you wan't to reload the assets on each changes
 | 
			
		||||
   yarn run encore dev --watch
 | 
			
		||||
 | 
			
		||||
How to execute the console ?
 | 
			
		||||
****************************
 | 
			
		||||
 | 
			
		||||
.. code-block:: bash
 | 
			
		||||
 | 
			
		||||
   # start the console with all required variables
 | 
			
		||||
   symfony console
 | 
			
		||||
   # you can add your command after that:
 | 
			
		||||
   symfony console list
 | 
			
		||||
 | 
			
		||||
How to generate documents
 | 
			
		||||
*************************
 | 
			
		||||
 | 
			
		||||
Documents are generated asynchronously by `"consuming messages" <https://symfony.com/doc/current/messenger.html#consuming-messages-running-the-worker>`_.
 | 
			
		||||
 | 
			
		||||
You must generate them using a dedicated process:
 | 
			
		||||
 | 
			
		||||
.. code-block:: bash
 | 
			
		||||
 | 
			
		||||
   symfony console messenger:consume async priority
 | 
			
		||||
 | 
			
		||||
To avoid memory issues, we encourage you to also use the :code:`--limit` parameter of the command.
 | 
			
		||||
 | 
			
		||||
How to read emails sent by the program ?
 | 
			
		||||
*******************************************
 | 
			
		||||
 | 
			
		||||
In development, there is a built-in "mail catcher". Open it with :code:`symfony open:local:webmail`
 | 
			
		||||
 | 
			
		||||
How to run cron-jobs ?
 | 
			
		||||
**********************
 | 
			
		||||
 | 
			
		||||
Some commands must be executed in :ref:`cron jobs <cronjob>`. To execute them:
 | 
			
		||||
 | 
			
		||||
.. code-block:: bash
 | 
			
		||||
 | 
			
		||||
   symfony console chill:cron-job:execute
 | 
			
		||||
 | 
			
		||||
What about materialized views ?
 | 
			
		||||
*******************************
 | 
			
		||||
 | 
			
		||||
There are some materialized views in chill, to speed up some complex computations in the database.
 | 
			
		||||
 | 
			
		||||
In order to refresh them, run a cron job or refresh them manually in your database.
 | 
			
		||||
 | 
			
		||||
How to run tests for chill-bundles
 | 
			
		||||
**********************************
 | 
			
		||||
 | 
			
		||||
Tests reside inside the installed bundles. You must `cd` into that directory, download the required packages, and execute them from this place.
 | 
			
		||||
 | 
			
		||||
**Note**: some bundles require the fixtures to be executed. See the dedicated _how-tos_.
 | 
			
		||||
 | 
			
		||||
Example, for running a unit test inside `main` bundle:
 | 
			
		||||
 | 
			
		||||
.. code-block:: bash
 | 
			
		||||
 | 
			
		||||
   # cd into main directory
 | 
			
		||||
   cd vendor/chill-project/chill-bundles
 | 
			
		||||
   composer install
 | 
			
		||||
   # run tests
 | 
			
		||||
   bin/phpunit src/Bundle/path/to/your/test
 | 
			
		||||
 | 
			
		||||
Or for running tests to check code style and php conventions with csfixer and phpstan:
 | 
			
		||||
 | 
			
		||||
Troubleshooting
 | 
			
		||||
===============
 | 
			
		||||
 | 
			
		||||
Error `An exception has been thrown during the rendering of a template ("Asset manifest file "/var/www/app/web/build/manifest.json" does not exist.").` on first run
 | 
			
		||||
********************************************************************************************************************************************************************
 | 
			
		||||
 | 
			
		||||
Build assets, see above.
 | 
			
		||||
 | 
			
		||||
Running in production
 | 
			
		||||
=====================
 | 
			
		||||
 | 
			
		||||
Currently, to run this software in production, the *state of the art* is the following :
 | 
			
		||||
 | 
			
		||||
1. Run the software locally and tweak the configuration to your needs ;
 | 
			
		||||
2. Build the image and store it in a private container registry.
 | 
			
		||||
 | 
			
		||||
.. warning::
 | 
			
		||||
 | 
			
		||||
   In production, you **must** set these variables:
 | 
			
		||||
 | 
			
		||||
   * ``APP_ENV`` to ``prod``
 | 
			
		||||
   * ``APP_DEBUG`` to ``false``
 | 
			
		||||
 | 
			
		||||
   There are security issues if you keep the same variables as for production.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Going further
 | 
			
		||||
=============
 | 
			
		||||
 | 
			
		||||
.. toctree::
 | 
			
		||||
   :maxdepth: 2
 | 
			
		||||
 | 
			
		||||
   installation-development.rst
 | 
			
		||||
   installation-production.rst
 | 
			
		||||
   prod.rst
 | 
			
		||||
   load-addresses.rst
 | 
			
		||||
   prod-calendar-sms-sending.rst
 | 
			
		||||
   msgraph-configure.rst
 | 
			
		||||
 
 | 
			
		||||
@@ -1,101 +0,0 @@
 | 
			
		||||
.. _installation-for-dev:
 | 
			
		||||
 | 
			
		||||
Installation for development or testing purpose only
 | 
			
		||||
====================================================
 | 
			
		||||
 | 
			
		||||
⚠️ Use this method for development only. ⚠️
 | 
			
		||||
 | 
			
		||||
You will need:
 | 
			
		||||
 | 
			
		||||
- `Composer <https://getcomposer.org>`__;
 | 
			
		||||
- `Symfony-cli tool <https://symfony.com/download>`__;
 | 
			
		||||
- `docker <https://docs.docker.com/engine/install/>`__ and
 | 
			
		||||
  `docker-compose <https://docs.docker.com/compose/>`__
 | 
			
		||||
- node > 20 and yarn 1.22
 | 
			
		||||
 | 
			
		||||
First initialization
 | 
			
		||||
--------------------
 | 
			
		||||
 | 
			
		||||
1. clone the repository and move to the cloned directory:
 | 
			
		||||
 | 
			
		||||
.. code:: bash
 | 
			
		||||
 | 
			
		||||
   git clone https://gitlab.com/Chill-Projet/chill-bundles.git
 | 
			
		||||
   cd chill-bundles
 | 
			
		||||
 | 
			
		||||
2. install dependencies using composer
 | 
			
		||||
 | 
			
		||||
.. code:: bash
 | 
			
		||||
 | 
			
		||||
   composer install
 | 
			
		||||
 | 
			
		||||
3. Install and compile assets:
 | 
			
		||||
 | 
			
		||||
.. code:: bash
 | 
			
		||||
 | 
			
		||||
   yarn install
 | 
			
		||||
   yarn run encore production
 | 
			
		||||
 | 
			
		||||
**note** double check that you have the node version > 20 using the
 | 
			
		||||
``node --version`` command.
 | 
			
		||||
 | 
			
		||||
4. configure your project: create a ``.env.local`` file at the root, and
 | 
			
		||||
   add the admin password:
 | 
			
		||||
 | 
			
		||||
.. code:: dotenv
 | 
			
		||||
 | 
			
		||||
   # for this installation mode, the environment should always be "dev"
 | 
			
		||||
   APP_ENV=dev
 | 
			
		||||
   ADMIN_PASSWORD=\$2y\$13\$iyvJLuT4YEa6iWXyQV4/N.hNHpNG8kXlYDkkt5MkYy4FXcSwYAwmm
 | 
			
		||||
   # note: if you copy-paste the line above, the password will be "admin".
 | 
			
		||||
 | 
			
		||||
5. start the stack using ``docker compose up -d``, check the status of
 | 
			
		||||
   the start with ``docker compose ps``
 | 
			
		||||
 | 
			
		||||
6. configure all the needed third-party tools
 | 
			
		||||
 | 
			
		||||
   .. code:: bash
 | 
			
		||||
 | 
			
		||||
      # the first start, it may last some seconds, you can check with docker compose ps
 | 
			
		||||
      # run migrations
 | 
			
		||||
      symfony console doctrine:migrations:migrate
 | 
			
		||||
      # setup messenger
 | 
			
		||||
      symfony console messenger:setup-transports
 | 
			
		||||
      # prepare some views
 | 
			
		||||
      symfony console chill:db:sync-views
 | 
			
		||||
      # generate jwt token, required for some api features (webdav access, ...)
 | 
			
		||||
      symfony console lexik:jwt:generate-keypair
 | 
			
		||||
 | 
			
		||||
7. add some fixtures
 | 
			
		||||
 | 
			
		||||
This will truncate all the existing data of the database. But remember,
 | 
			
		||||
we are in dev mode !
 | 
			
		||||
 | 
			
		||||
.. code:: bash
 | 
			
		||||
 | 
			
		||||
   symfony console doctrine:fixtures:load
 | 
			
		||||
 | 
			
		||||
8. launch symfony dev-server
 | 
			
		||||
 | 
			
		||||
.. code:: bash
 | 
			
		||||
 | 
			
		||||
   symfony server:start -d
 | 
			
		||||
 | 
			
		||||
And visit the web page it suggest. You can login with user
 | 
			
		||||
``center a_social`` and password ``password``, or login ``admin`` with
 | 
			
		||||
the password you set.
 | 
			
		||||
 | 
			
		||||
Stopping the server
 | 
			
		||||
-------------------
 | 
			
		||||
 | 
			
		||||
.. code:: bash
 | 
			
		||||
 | 
			
		||||
   symfony server:stop
 | 
			
		||||
 | 
			
		||||
Restart the webserver for subsequent start
 | 
			
		||||
------------------------------------------
 | 
			
		||||
 | 
			
		||||
.. code:: bash
 | 
			
		||||
 | 
			
		||||
   symfony server:start -d
 | 
			
		||||
   # this will automatically starts the full docker compose services
 | 
			
		||||
@@ -1,328 +0,0 @@
 | 
			
		||||
.. _installation-production:
 | 
			
		||||
 | 
			
		||||
Install Chill for production with or without adding personal features
 | 
			
		||||
#####################################################################
 | 
			
		||||
 | 
			
		||||
Chill is a set of "bundles" for a symfony app.
 | 
			
		||||
 | 
			
		||||
To run Chill in production or add new features to it (without merging those features to the chill core), you must create
 | 
			
		||||
a symfony app, and eventually add those features into your app.
 | 
			
		||||
 | 
			
		||||
Once you are happy with the configuration, `you should follow the dedicated instructions of how to go into production for
 | 
			
		||||
Symfony apps <https://symfony.com/doc/current/deployment.html>`_.
 | 
			
		||||
 | 
			
		||||
Install a new app
 | 
			
		||||
=================
 | 
			
		||||
 | 
			
		||||
Initialize project and dependencies
 | 
			
		||||
-----------------------------------
 | 
			
		||||
 | 
			
		||||
.. code-block:: bash
 | 
			
		||||
 | 
			
		||||
   symfony new --version=5.4 my_chill_project
 | 
			
		||||
   cd my_chill_project
 | 
			
		||||
 | 
			
		||||
We strongly encourage you to initialize a git repository at this step, to track further changes.
 | 
			
		||||
 | 
			
		||||
.. code-block:: bash
 | 
			
		||||
 | 
			
		||||
   # add the flex endpoints required for custom recipes
 | 
			
		||||
   cat <<< "$(jq '.extra.symfony += {"endpoint": ["flex://defaults", "https://gitlab.com/api/v4/projects/57371968/repository/files/index.json/raw?ref=main"]}' composer.json)" > composer.json
 | 
			
		||||
   # install chill and some dependencies
 | 
			
		||||
   # TODO fix the suffix "alpha1" and replace by ^3.0.0 when version 3.0.0 will be released
 | 
			
		||||
   symfony composer require chill-project/chill-bundles v3.0.0-RC3 champs-libres/wopi-lib dev-master@dev champs-libres/wopi-bundle dev-master@dev
 | 
			
		||||
 | 
			
		||||
We encourage you to accept the inclusion of the "Docker configuration from recipes": this is the documented way to run the database.
 | 
			
		||||
You must also accept to configure recipes from the contrib repository, unless you want to configure the bundles manually).
 | 
			
		||||
 | 
			
		||||
.. code-block:: bash
 | 
			
		||||
 | 
			
		||||
   # fix some configuration
 | 
			
		||||
   ./post-install-chill.sh
 | 
			
		||||
   # install node dependencies
 | 
			
		||||
   yarn install
 | 
			
		||||
   # and compile assets
 | 
			
		||||
   yarn run encore production
 | 
			
		||||
 | 
			
		||||
.. note::
 | 
			
		||||
 | 
			
		||||
   If you encounter this error during assets compilation (:code:`yarn run encore production`) (repeated multiple times):
 | 
			
		||||
 | 
			
		||||
   .. code-block:: txt
 | 
			
		||||
 | 
			
		||||
      [tsl] ERROR in /tmp/chill/v1/public/bundles/chillcalendar/types.ts(2,65)
 | 
			
		||||
            TS2307: Cannot find module '../../../ChillMainBundle/Resources/public/types' or its corresponding type declarations.
 | 
			
		||||
 | 
			
		||||
   run:
 | 
			
		||||
 | 
			
		||||
   .. code-block:: bash
 | 
			
		||||
 | 
			
		||||
      rm -rf public/bundles/*
 | 
			
		||||
 | 
			
		||||
   Then restart the compilation of assets (:code:```yarn run encore production```)
 | 
			
		||||
 | 
			
		||||
Configure your project
 | 
			
		||||
----------------------
 | 
			
		||||
 | 
			
		||||
You should read the configuration files in :code:`chill/config/packages` carefully, especially if you have
 | 
			
		||||
custom developments. But most of the time, this should be fine.
 | 
			
		||||
 | 
			
		||||
You have to configure some local variables, which are described in the :code:`.env` file. The secrets should not be stored
 | 
			
		||||
in this :code:`.env` file, but instead using the `secrets management tool <https://symfony.com/doc/current/configuration/secrets.html>`_
 | 
			
		||||
or in the :code:`.env.local` file, which should not be committed to the git repository.
 | 
			
		||||
 | 
			
		||||
You do not need to set variables for the smtp server, redis server and relatorio server, as they are generated automatically
 | 
			
		||||
by the symfony server, from the docker compose services.
 | 
			
		||||
 | 
			
		||||
The only required variable is the :code:`ADMIN_PASSWORD`. You can generate a hashed and salted admin password using the command
 | 
			
		||||
:code:`symfony console security:hash-password <your password> 'Symfony\Component\Security\Core\User\User'`. Then,
 | 
			
		||||
you can either:
 | 
			
		||||
 | 
			
		||||
- add this password to the :code:`.env.local` file, you must escape the character :code:`$`: if the generated password
 | 
			
		||||
  is :code:`$2y$13$iyvJLuT4YEa6iWXyQV4/N.hNHpNG8kXlYDkkt5MkYy4FXcSwYAwmm`, your :code:`.env.local` file will be:
 | 
			
		||||
 | 
			
		||||
  .. code-block:: env
 | 
			
		||||
 | 
			
		||||
     ADMIN_PASSWORD=\$2y\$13\$iyvJLuT4YEa6iWXyQV4/N.hNHpNG8kXlYDkkt5MkYy4FXcSwYAwmm
 | 
			
		||||
     # note: if you copy-paste the line above, the password will be "admin".
 | 
			
		||||
 | 
			
		||||
- add the generated password to the secrets manager (**note**: you must add the generated hashed password to the secrets env,
 | 
			
		||||
  not the password in clear text).
 | 
			
		||||
 | 
			
		||||
- set up the jwt authentication bundle
 | 
			
		||||
 | 
			
		||||
Some environment variables are available for the JWT authentication bundle in the :code:`.env` file.
 | 
			
		||||
 | 
			
		||||
Prepare migrations and other tools
 | 
			
		||||
----------------------------------
 | 
			
		||||
 | 
			
		||||
To continue the installation process, you will have to run migrations:
 | 
			
		||||
 | 
			
		||||
.. code-block:: bash
 | 
			
		||||
 | 
			
		||||
   # start databases and other services
 | 
			
		||||
   docker compose up -d
 | 
			
		||||
   # the first start, it may last some seconds, you can check with docker compose ps
 | 
			
		||||
   # run migrations
 | 
			
		||||
   symfony console doctrine:migrations:migrate
 | 
			
		||||
   # setup messenger
 | 
			
		||||
   symfony console messenger:setup-transports
 | 
			
		||||
   # prepare some views
 | 
			
		||||
   symfony console chill:db:sync-views
 | 
			
		||||
   # generate jwt token, required for some api features (webdav access, ...)
 | 
			
		||||
   symfony console lexik:jwt:generate-keypair
 | 
			
		||||
 | 
			
		||||
.. warning::
 | 
			
		||||
 | 
			
		||||
   If you encounter an error while running :code:`symfony console messenger:setup-transports`, you can set up the messenger
 | 
			
		||||
   transport to redis, by adding this in the :code:`.env.local` or :code:`.env` file:
 | 
			
		||||
 | 
			
		||||
   .. code-block:: env
 | 
			
		||||
 | 
			
		||||
      MESSENGER_TRANSPORT_DSN=redis://${REDIS_HOST}:${REDIS_PORT}/messages
 | 
			
		||||
 | 
			
		||||
Start your web server locally
 | 
			
		||||
-----------------------------
 | 
			
		||||
 | 
			
		||||
At this step, Chill will be ready to be served locally, but without any configuration. You can run the project
 | 
			
		||||
locally using the `local symfony server <https://symfony.com/doc/current/setup/symfony_server.html>`_:
 | 
			
		||||
 | 
			
		||||
.. code-block:: bash
 | 
			
		||||
 | 
			
		||||
   # see the whole possibilities at https://symfony.com/doc/current/setup/symfony_server.html
 | 
			
		||||
   symfony server:start -d
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
If you need to test the instance with accounts and some basic configuration, please install the fixtures (see below).
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Add capabilities for dev
 | 
			
		||||
========================
 | 
			
		||||
 | 
			
		||||
If you need to add custom bundles, you can develop them in the `src/` directory, like for any other symfony project. You
 | 
			
		||||
can rely on the whole chill framework, meaning there is no need to add them to the original `chill-bundles`.
 | 
			
		||||
 | 
			
		||||
You will require some bundles to have the following development tools:
 | 
			
		||||
 | 
			
		||||
- add fixtures
 | 
			
		||||
- add profiler and debug bundle
 | 
			
		||||
 | 
			
		||||
Install fixtures
 | 
			
		||||
----------------
 | 
			
		||||
 | 
			
		||||
.. code-block:: bash
 | 
			
		||||
 | 
			
		||||
   # generate fixtures for chill
 | 
			
		||||
   symfony composer require --dev doctrine/doctrine-fixtures-bundle nelmio/alice
 | 
			
		||||
   # now, you can generate fixtures (this will reset your database)
 | 
			
		||||
   symfony console doctrine:fixtures:load
 | 
			
		||||
 | 
			
		||||
This will generate user accounts, centers, and some basic configuration.
 | 
			
		||||
 | 
			
		||||
The accounts created are: :code:`center a_social`, :code:`center b_social`, :code:`center a_direction`, ...  The full list is
 | 
			
		||||
visible in the "users" table: :code:`docker compose exec database psql -U app -c "SELECT username FROM users"`.
 | 
			
		||||
 | 
			
		||||
The password is always :code:`password`.
 | 
			
		||||
 | 
			
		||||
.. warning::
 | 
			
		||||
 | 
			
		||||
   The fixtures are not fully functional. See the `corresponding issue <https://gitlab.com/Chill-Projet/chill-bundles/-/issues/280>`_.
 | 
			
		||||
 | 
			
		||||
Add web profiler and debugger
 | 
			
		||||
-----------------------------
 | 
			
		||||
 | 
			
		||||
.. code-block:: bash
 | 
			
		||||
 | 
			
		||||
   symfony composer require --dev symfony/web-profiler-bundle symfony/debug-bundle
 | 
			
		||||
 | 
			
		||||
Working on chill bundles
 | 
			
		||||
------------------------
 | 
			
		||||
 | 
			
		||||
If you plan to improve the chill-bundles repository, that's great!
 | 
			
		||||
 | 
			
		||||
It would be better :ref:`to follow the instruction about development <installation-for-dev>`. But if those features are
 | 
			
		||||
deeply linked to some dev you made in the app, it can be easier to develop within the :code:`vendor/` directory.
 | 
			
		||||
 | 
			
		||||
You will have to download chill-bundles as a git repository (and not as an archive, which is barely editable).
 | 
			
		||||
 | 
			
		||||
In your :code:`composer.json` file, add these lines:
 | 
			
		||||
 | 
			
		||||
.. code-block:: diff
 | 
			
		||||
 | 
			
		||||
    {
 | 
			
		||||
        "config": {
 | 
			
		||||
   +        "preferred-install": {
 | 
			
		||||
   +            "chill-project/chill-bundles": "source",
 | 
			
		||||
                "*": "dist"
 | 
			
		||||
   +         }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
Then, run :code:`symfony composer reinstall chill-project/chill-bundles` to re-install the package from source.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Update
 | 
			
		||||
======
 | 
			
		||||
 | 
			
		||||
In order to update your app, you must update dependencies:
 | 
			
		||||
 | 
			
		||||
- for chill-bundles, you can `set the last version <https://gitlab.com/Chill-Projet/chill-bundles/-/releases>`_ manually
 | 
			
		||||
  in the :code:`composer.json` file, or set the version to `^3.0.0` and run :code:`symfony composer update` regularly
 | 
			
		||||
- run :code:`composer update` and :code:`yarn update` to maintain your dependencies up-to-date.
 | 
			
		||||
 | 
			
		||||
After each update, you must update your database schema:
 | 
			
		||||
 | 
			
		||||
.. code-block:: bash
 | 
			
		||||
 | 
			
		||||
   symfony console doctrine:migrations:migrate
 | 
			
		||||
   symfony console chill:db:sync-views
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Commit and share your project
 | 
			
		||||
=============================
 | 
			
		||||
 | 
			
		||||
If multiple developers work on a project, you can commit your symfony project and share it with other people.
 | 
			
		||||
 | 
			
		||||
When another developer clones your project, they will have to:
 | 
			
		||||
 | 
			
		||||
- run :code:`symfony composer install` and :code:`yarn install` to install the same dependencies as the initial developer;
 | 
			
		||||
- run :code:`yarn run encore production` to compile assets;
 | 
			
		||||
- copy any possible variables from the :code:`.env.local` files;
 | 
			
		||||
- start the docker compose stack, using :code:`docker compose`, and run migrations, set up transports, and prepare chill db views
 | 
			
		||||
  (see the corresponding command above)
 | 
			
		||||
 | 
			
		||||
Operations
 | 
			
		||||
==========
 | 
			
		||||
 | 
			
		||||
Build assets
 | 
			
		||||
------------
 | 
			
		||||
 | 
			
		||||
run those commands:
 | 
			
		||||
 | 
			
		||||
.. code-block:: bash
 | 
			
		||||
 | 
			
		||||
   # for production (or in dev, when you don't need to work on your assets and need some speed)
 | 
			
		||||
   yarn run encore production
 | 
			
		||||
   # in dev, when you wan't to reload the assets on each changes
 | 
			
		||||
   yarn run encore dev --watch
 | 
			
		||||
 | 
			
		||||
How to execute the console ?
 | 
			
		||||
----------------------------
 | 
			
		||||
 | 
			
		||||
.. code-block:: bash
 | 
			
		||||
 | 
			
		||||
   # start the console with all required variables
 | 
			
		||||
   symfony console
 | 
			
		||||
   # you can add your command after that:
 | 
			
		||||
   symfony console list
 | 
			
		||||
 | 
			
		||||
How to generate documents
 | 
			
		||||
-------------------------
 | 
			
		||||
 | 
			
		||||
Documents are generated asynchronously by `"consuming messages" <https://symfony.com/doc/current/messenger.html#consuming-messages-running-the-worker>`_.
 | 
			
		||||
 | 
			
		||||
You must generate them using a dedicated process:
 | 
			
		||||
 | 
			
		||||
.. code-block:: bash
 | 
			
		||||
 | 
			
		||||
   symfony console messenger:consume async priority
 | 
			
		||||
 | 
			
		||||
To avoid memory issues, we encourage you to also use the :code:`--limit` parameter of the command.
 | 
			
		||||
 | 
			
		||||
How to read emails sent by the program ?
 | 
			
		||||
-------------------------------------------
 | 
			
		||||
 | 
			
		||||
In development, there is a built-in "mail catcher". Open it with :code:`symfony open:local:webmail`
 | 
			
		||||
 | 
			
		||||
How to run cron-jobs ?
 | 
			
		||||
----------------------
 | 
			
		||||
 | 
			
		||||
Some commands must be executed in :ref:`cron jobs <cronjob>`. To execute them:
 | 
			
		||||
 | 
			
		||||
.. code-block:: bash
 | 
			
		||||
 | 
			
		||||
   symfony console chill:cron-job:execute
 | 
			
		||||
 | 
			
		||||
What about materialized views ?
 | 
			
		||||
-------------------------------
 | 
			
		||||
 | 
			
		||||
There are some materialized views in chill, to speed up some complex computations in the database.
 | 
			
		||||
 | 
			
		||||
In order to refresh them, run a cron job or refresh them manually in your database.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Troubleshooting
 | 
			
		||||
===============
 | 
			
		||||
 | 
			
		||||
Error `An exception has been thrown during the rendering of a template ("Asset manifest file "/var/www/app/web/build/manifest.json" does not exist.").` on first run
 | 
			
		||||
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
Build assets, see above.
 | 
			
		||||
 | 
			
		||||
Go to production
 | 
			
		||||
================
 | 
			
		||||
 | 
			
		||||
Currently, to run this software in production, the *state of the art* is the following :
 | 
			
		||||
 | 
			
		||||
1. Run the software locally and tweak the configuration to your needs ;
 | 
			
		||||
2. Build the image and store it in a private container registry.
 | 
			
		||||
 | 
			
		||||
.. warning::
 | 
			
		||||
 | 
			
		||||
   In production, you **must** set these variables:
 | 
			
		||||
 | 
			
		||||
   * ``APP_ENV`` to ``prod``
 | 
			
		||||
   * ``APP_DEBUG`` to ``false``
 | 
			
		||||
 | 
			
		||||
   There are security issues if you keep the same variables as for production.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Going further
 | 
			
		||||
=============
 | 
			
		||||
 | 
			
		||||
.. toctree::
 | 
			
		||||
   :maxdepth: 2
 | 
			
		||||
 | 
			
		||||
   prod.rst
 | 
			
		||||
   load-addresses.rst
 | 
			
		||||
   prod-calendar-sms-sending.rst
 | 
			
		||||
   msgraph-configure.rst
 | 
			
		||||
							
								
								
									
										15
									
								
								package.json
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								package.json
									
									
									
									
									
								
							@@ -7,9 +7,9 @@
 | 
			
		||||
    "@babel/core": "^7.20.5",
 | 
			
		||||
    "@babel/preset-env": "^7.20.2",
 | 
			
		||||
    "@ckeditor/ckeditor5-build-classic": "^41.4.2",
 | 
			
		||||
    "@ckeditor/ckeditor5-dev-translations": "^40.2.0",
 | 
			
		||||
    "@ckeditor/ckeditor5-dev-utils": "^40.2.0",
 | 
			
		||||
    "@ckeditor/ckeditor5-dev-webpack-plugin": "^31.1.13",
 | 
			
		||||
    "@ckeditor/ckeditor5-dev-translations": "^40.2.0",
 | 
			
		||||
    "@ckeditor/ckeditor5-markdown-gfm": "^41.4.2",
 | 
			
		||||
    "@ckeditor/ckeditor5-theme-lark": "^41.4.2",
 | 
			
		||||
    "@ckeditor/ckeditor5-vue": "^5.1.0",
 | 
			
		||||
@@ -22,12 +22,12 @@
 | 
			
		||||
    "dompurify": "^3.1.0",
 | 
			
		||||
    "fork-awesome": "^1.1.7",
 | 
			
		||||
    "jquery": "^3.6.0",
 | 
			
		||||
    "marked": "^12.0.1",
 | 
			
		||||
    "node-sass": "^8.0.0",
 | 
			
		||||
    "marked": "^12.0.1",
 | 
			
		||||
    "popper.js": "^1.16.1",
 | 
			
		||||
    "postcss-loader": "^7.0.2",
 | 
			
		||||
    "raw-loader": "^4.0.2",
 | 
			
		||||
    "sass-loader": "^14.0.0",
 | 
			
		||||
    "sass-loader": "^13.0.0",
 | 
			
		||||
    "select2": "^4.0.13",
 | 
			
		||||
    "select2-bootstrap-theme": "0.1.0-beta.10",
 | 
			
		||||
    "style-loader": "^3.3.1",
 | 
			
		||||
@@ -45,21 +45,20 @@
 | 
			
		||||
    "@fullcalendar/timegrid": "^6.1.4",
 | 
			
		||||
    "@fullcalendar/vue3": "^6.1.4",
 | 
			
		||||
    "@popperjs/core": "^2.9.2",
 | 
			
		||||
    "@types/dompurify": "^3.0.5",
 | 
			
		||||
    "@types/leaflet": "^1.9.3",
 | 
			
		||||
    "bootstrap-icons": "^1.11.3",
 | 
			
		||||
    "@types/dompurify": "^3.0.5",
 | 
			
		||||
    "dropzone": "^5.7.6",
 | 
			
		||||
    "es6-promise": "^4.2.8",
 | 
			
		||||
    "leaflet": "^1.7.1",
 | 
			
		||||
    "marked": "^12.0.2",
 | 
			
		||||
    "masonry-layout": "^4.2.2",
 | 
			
		||||
    "mime": "^4.0.0",
 | 
			
		||||
    "pdfjs-dist": "^4.3.136",
 | 
			
		||||
    "swagger-ui": "^4.15.5",
 | 
			
		||||
    "vis-network": "^9.1.0",
 | 
			
		||||
    "vue": "^3.5.6",
 | 
			
		||||
    "vue": "^3.2.37",
 | 
			
		||||
    "vue-i18n": "^9.1.6",
 | 
			
		||||
    "vue-multiselect": "3.0.0-alpha.2",
 | 
			
		||||
    "vue-toast-notification": "^3.1.2",
 | 
			
		||||
    "vue-toast-notification": "^2.0",
 | 
			
		||||
    "vuex": "^4.0.0"
 | 
			
		||||
  },
 | 
			
		||||
  "browserslist": [
 | 
			
		||||
 
 | 
			
		||||
@@ -1,29 +1,34 @@
 | 
			
		||||
parameters:
 | 
			
		||||
	ignoreErrors:
 | 
			
		||||
		-
 | 
			
		||||
			message: "#^Foreach overwrites \\$key with its key variable\\.$#"
 | 
			
		||||
			count: 1
 | 
			
		||||
			path: src/Bundle/ChillCustomFieldsBundle/Controller/CustomFieldsGroupController.php
 | 
			
		||||
 | 
			
		||||
		-
 | 
			
		||||
			message: "#^Only booleans are allowed in an if condition, mixed given\\.$#"
 | 
			
		||||
			count: 1
 | 
			
		||||
			path: src/Bundle/ChillCustomFieldsBundle/Entity/CustomField.php
 | 
			
		||||
 | 
			
		||||
		-
 | 
			
		||||
			message: "#^Property Chill\\\\CustomFieldsBundle\\\\Entity\\\\CustomField\\:\\:\\$required \\(false\\) does not accept bool\\.$#"
 | 
			
		||||
			message: "#^Only booleans are allowed in an if condition, mixed given\\.$#"
 | 
			
		||||
			count: 1
 | 
			
		||||
			path: src/Bundle/ChillCustomFieldsBundle/Entity/CustomField.php
 | 
			
		||||
			path: src/Bundle/ChillPersonBundle/Form/PersonType.php
 | 
			
		||||
 | 
			
		||||
		-
 | 
			
		||||
			message: "#^Parameter \\#1 \\$user of method Chill\\\\DocStoreBundle\\\\Entity\\\\Document\\:\\:setUser\\(\\) expects Chill\\\\MainBundle\\\\Entity\\\\User\\|null, Symfony\\\\Component\\\\Security\\\\Core\\\\User\\\\UserInterface\\|null given\\.$#"
 | 
			
		||||
			count: 2
 | 
			
		||||
			path: src/Bundle/ChillDocStoreBundle/Controller/DocumentAccompanyingCourseController.php
 | 
			
		||||
			message: "#^Only booleans are allowed in an if condition, mixed given\\.$#"
 | 
			
		||||
			count: 1
 | 
			
		||||
			path: src/Bundle/ChillMainBundle/Templating/ChillTwigRoutingHelper.php
 | 
			
		||||
 | 
			
		||||
		-
 | 
			
		||||
			message: "#^Parameter \\#1 \\$user of method Chill\\\\DocStoreBundle\\\\Entity\\\\Document\\:\\:setUser\\(\\) expects Chill\\\\MainBundle\\\\Entity\\\\User\\|null, Symfony\\\\Component\\\\Security\\\\Core\\\\User\\\\UserInterface\\|null given\\.$#"
 | 
			
		||||
			message: "#^Only booleans are allowed in an if condition, mixed given\\.$#"
 | 
			
		||||
			count: 1
 | 
			
		||||
			path: src/Bundle/ChillCustomFieldsBundle/Entity/CustomFieldsGroup.php
 | 
			
		||||
 | 
			
		||||
		-
 | 
			
		||||
			message: "#^Only booleans are allowed in an if condition, mixed given\\.$#"
 | 
			
		||||
			count: 2
 | 
			
		||||
			path: src/Bundle/ChillDocStoreBundle/Controller/DocumentPersonController.php
 | 
			
		||||
			path: src/Bundle/ChillMainBundle/Repository/NotificationRepository.php
 | 
			
		||||
 | 
			
		||||
		-
 | 
			
		||||
			message: "#^Foreach overwrites \\$key with its key variable\\.$#"
 | 
			
		||||
			count: 1
 | 
			
		||||
			path: src/Bundle/ChillCustomFieldsBundle/Controller/CustomFieldsGroupController.php
 | 
			
		||||
 | 
			
		||||
		-
 | 
			
		||||
			message: "#^Variable \\$participation might not be defined\\.$#"
 | 
			
		||||
@@ -35,106 +40,6 @@ parameters:
 | 
			
		||||
			count: 1
 | 
			
		||||
			path: src/Bundle/ChillEventBundle/Form/ChoiceLoader/EventChoiceLoader.php
 | 
			
		||||
 | 
			
		||||
		-
 | 
			
		||||
			message: "#^Comparison operation \"\\>\" between \\(bool\\|int\\|Redis\\) and 0 results in an error\\.$#"
 | 
			
		||||
			count: 1
 | 
			
		||||
			path: src/Bundle/ChillFranceTravailApiBundle/src/ApiHelper/ApiWrapper.php
 | 
			
		||||
 | 
			
		||||
		-
 | 
			
		||||
			message: "#^Variable \\$response might not be defined\\.$#"
 | 
			
		||||
			count: 1
 | 
			
		||||
			path: src/Bundle/ChillFranceTravailApiBundle/src/ApiHelper/ApiWrapper.php
 | 
			
		||||
 | 
			
		||||
		-
 | 
			
		||||
			message: "#^Function GuzzleHttp\\\\Psr7\\\\get not found\\.$#"
 | 
			
		||||
			count: 1
 | 
			
		||||
			path: src/Bundle/ChillFranceTravailApiBundle/src/ApiHelper/PartenaireRomeAppellation.php
 | 
			
		||||
 | 
			
		||||
		-
 | 
			
		||||
			message: "#^Function GuzzleHttp\\\\Psr7\\\\str not found\\.$#"
 | 
			
		||||
			count: 2
 | 
			
		||||
			path: src/Bundle/ChillFranceTravailApiBundle/src/ApiHelper/PartenaireRomeAppellation.php
 | 
			
		||||
 | 
			
		||||
		-
 | 
			
		||||
			message: "#^Parameter \\#1 \\$seconds of function sleep expects int, string given\\.$#"
 | 
			
		||||
			count: 1
 | 
			
		||||
			path: src/Bundle/ChillFranceTravailApiBundle/src/ApiHelper/PartenaireRomeAppellation.php
 | 
			
		||||
 | 
			
		||||
		-
 | 
			
		||||
			message: "#^Unreachable statement \\- code above always terminates\\.$#"
 | 
			
		||||
			count: 1
 | 
			
		||||
			path: src/Bundle/ChillJobBundle/src/Controller/CSPersonController.php
 | 
			
		||||
 | 
			
		||||
		-
 | 
			
		||||
			message: "#^Parameter \\#1 \\$interval of method DateTimeImmutable\\:\\:add\\(\\) expects DateInterval, string\\|null given\\.$#"
 | 
			
		||||
			count: 1
 | 
			
		||||
			path: src/Bundle/ChillJobBundle/src/Entity/Immersion.php
 | 
			
		||||
 | 
			
		||||
		-
 | 
			
		||||
			message: "#^Parameter \\#1 \\$object of static method DateTimeImmutable\\:\\:createFromMutable\\(\\) expects DateTime, DateTimeInterface given\\.$#"
 | 
			
		||||
			count: 1
 | 
			
		||||
			path: src/Bundle/ChillJobBundle/src/Entity/Immersion.php
 | 
			
		||||
 | 
			
		||||
		-
 | 
			
		||||
			message: "#^Property Chill\\\\JobBundle\\\\Entity\\\\Rome\\\\Metier\\:\\:\\$appellations is never read, only written\\.$#"
 | 
			
		||||
			count: 1
 | 
			
		||||
			path: src/Bundle/ChillJobBundle/src/Entity/Rome/Metier.php
 | 
			
		||||
 | 
			
		||||
		-
 | 
			
		||||
			message: "#^Method Chill\\\\JobBundle\\\\Export\\\\ListCSPerson\\:\\:splitArrayToColumns\\(\\) never returns Closure so it can be removed from the return type\\.$#"
 | 
			
		||||
			count: 1
 | 
			
		||||
			path: src/Bundle/ChillJobBundle/src/Export/ListCSPerson.php
 | 
			
		||||
 | 
			
		||||
		-
 | 
			
		||||
			message: "#^Variable \\$f might not be defined\\.$#"
 | 
			
		||||
			count: 1
 | 
			
		||||
			path: src/Bundle/ChillJobBundle/src/Export/ListCSPerson.php
 | 
			
		||||
 | 
			
		||||
		-
 | 
			
		||||
			message: "#^Method Chill\\\\JobBundle\\\\Export\\\\ListFrein\\:\\:splitArrayToColumns\\(\\) never returns Closure so it can be removed from the return type\\.$#"
 | 
			
		||||
			count: 1
 | 
			
		||||
			path: src/Bundle/ChillJobBundle/src/Export/ListFrein.php
 | 
			
		||||
 | 
			
		||||
		-
 | 
			
		||||
			message: "#^Method Chill\\\\JobBundle\\\\Export\\\\ListProjetProfessionnel\\:\\:splitArrayToColumns\\(\\) never returns Closure so it can be removed from the return type\\.$#"
 | 
			
		||||
			count: 1
 | 
			
		||||
			path: src/Bundle/ChillJobBundle/src/Export/ListProjetProfessionnel.php
 | 
			
		||||
 | 
			
		||||
		-
 | 
			
		||||
			message: "#^Property Chill\\\\JobBundle\\\\Form\\\\ChoiceLoader\\\\RomeAppellationChoiceLoader\\:\\:\\$appellationRepository \\(Chill\\\\JobBundle\\\\Repository\\\\Rome\\\\AppellationRepository\\) does not accept Doctrine\\\\ORM\\\\EntityRepository\\<Chill\\\\JobBundle\\\\Entity\\\\Rome\\\\Appellation\\>\\.$#"
 | 
			
		||||
			count: 1
 | 
			
		||||
			path: src/Bundle/ChillJobBundle/src/Form/ChoiceLoader/RomeAppellationChoiceLoader.php
 | 
			
		||||
 | 
			
		||||
		-
 | 
			
		||||
			message: "#^Result of && is always false\\.$#"
 | 
			
		||||
			count: 1
 | 
			
		||||
			path: src/Bundle/ChillJobBundle/src/Form/ChoiceLoader/RomeAppellationChoiceLoader.php
 | 
			
		||||
 | 
			
		||||
		-
 | 
			
		||||
			message: "#^Strict comparison using \\=\\=\\= between array\\{\\} and Symfony\\\\Component\\\\Validator\\\\ConstraintViolationListInterface will always evaluate to false\\.$#"
 | 
			
		||||
			count: 2
 | 
			
		||||
			path: src/Bundle/ChillJobBundle/src/Form/ChoiceLoader/RomeAppellationChoiceLoader.php
 | 
			
		||||
 | 
			
		||||
		-
 | 
			
		||||
			message: "#^Strict comparison using \\=\\=\\= between null and string will always evaluate to false\\.$#"
 | 
			
		||||
			count: 1
 | 
			
		||||
			path: src/Bundle/ChillJobBundle/src/Form/ChoiceLoader/RomeAppellationChoiceLoader.php
 | 
			
		||||
 | 
			
		||||
		-
 | 
			
		||||
			message: "#^Variable \\$metier might not be defined\\.$#"
 | 
			
		||||
			count: 1
 | 
			
		||||
			path: src/Bundle/ChillJobBundle/src/Form/ChoiceLoader/RomeAppellationChoiceLoader.php
 | 
			
		||||
 | 
			
		||||
		-
 | 
			
		||||
			message: "#^Parameter \\#1 \\$interval of method DateTimeImmutable\\:\\:add\\(\\) expects DateInterval, string\\|null given\\.$#"
 | 
			
		||||
			count: 1
 | 
			
		||||
			path: src/Bundle/ChillJobBundle/src/Security/Authorization/CSConnectesVoter.php
 | 
			
		||||
 | 
			
		||||
		-
 | 
			
		||||
			message: "#^Parameter \\#1 \\$object of static method DateTimeImmutable\\:\\:createFromMutable\\(\\) expects DateTime, DateTimeInterface given\\.$#"
 | 
			
		||||
			count: 1
 | 
			
		||||
			path: src/Bundle/ChillJobBundle/src/Security/Authorization/CSConnectesVoter.php
 | 
			
		||||
 | 
			
		||||
		-
 | 
			
		||||
			message: "#^Cannot unset offset '_token' on array\\{formatter\\: mixed, export\\: mixed, centers\\: mixed, alias\\: string\\}\\.$#"
 | 
			
		||||
			count: 1
 | 
			
		||||
@@ -160,31 +65,11 @@ parameters:
 | 
			
		||||
			count: 1
 | 
			
		||||
			path: src/Bundle/ChillMainBundle/Form/ChoiceLoader/PostalCodeChoiceLoader.php
 | 
			
		||||
 | 
			
		||||
		-
 | 
			
		||||
			message: "#^Only booleans are allowed in an if condition, mixed given\\.$#"
 | 
			
		||||
			count: 2
 | 
			
		||||
			path: src/Bundle/ChillMainBundle/Repository/NotificationRepository.php
 | 
			
		||||
 | 
			
		||||
		-
 | 
			
		||||
			message: "#^Parameter \\#1 \\$user of method Chill\\\\MainBundle\\\\Security\\\\Authorization\\\\AuthorizationHelper\\:\\:userHasAccessForCenter\\(\\) expects Chill\\\\MainBundle\\\\Entity\\\\User, Symfony\\\\Component\\\\Security\\\\Core\\\\User\\\\UserInterface given\\.$#"
 | 
			
		||||
			count: 1
 | 
			
		||||
			path: src/Bundle/ChillMainBundle/Security/Authorization/AuthorizationHelper.php
 | 
			
		||||
 | 
			
		||||
		-
 | 
			
		||||
			message: "#^Only booleans are allowed in an if condition, mixed given\\.$#"
 | 
			
		||||
			count: 1
 | 
			
		||||
			path: src/Bundle/ChillMainBundle/Templating/ChillTwigRoutingHelper.php
 | 
			
		||||
 | 
			
		||||
		-
 | 
			
		||||
			message: "#^Foreach overwrites \\$value with its value variable\\.$#"
 | 
			
		||||
			count: 1
 | 
			
		||||
			path: src/Bundle/ChillPersonBundle/Form/ChoiceLoader/PersonChoiceLoader.php
 | 
			
		||||
 | 
			
		||||
		-
 | 
			
		||||
			message: "#^Only booleans are allowed in an if condition, mixed given\\.$#"
 | 
			
		||||
			count: 1
 | 
			
		||||
			path: src/Bundle/ChillPersonBundle/Form/PersonType.php
 | 
			
		||||
 | 
			
		||||
		-
 | 
			
		||||
			message: "#^Foreach overwrites \\$value with its value variable\\.$#"
 | 
			
		||||
			count: 1
 | 
			
		||||
 
 | 
			
		||||
@@ -1,21 +1,12 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
<!-- https://phpunit.readthedocs.io/en/latest/configuration.html -->
 | 
			
		||||
<phpunit
 | 
			
		||||
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 | 
			
		||||
    xsi:noNamespaceSchemaLocation="vendor/phpunit/phpunit/phpunit.xsd"
 | 
			
		||||
    backupGlobals="false"
 | 
			
		||||
    colors="true"
 | 
			
		||||
    bootstrap="tests/bootstrap.php"
 | 
			
		||||
>
 | 
			
		||||
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/10.5/phpunit.xsd" backupGlobals="false" colors="true" bootstrap="tests/bootstrap.php">
 | 
			
		||||
  <php>
 | 
			
		||||
    <ini name="display_errors" value="1" />
 | 
			
		||||
    <ini name="error_reporting" value="-1"/>
 | 
			
		||||
    <server name="APP_ENV" value="test" force="true"/>
 | 
			
		||||
    <env name="SYMFONY_DEPRECATIONS_HELPER" value="max[direct]=93&max[indirect]=999999"/>
 | 
			
		||||
    <server name="SHELL_VERBOSITY" value="-1"/>
 | 
			
		||||
      <server name="SYMFONY_PHPUNIT_REMOVE" value="" />
 | 
			
		||||
      <server name="SYMFONY_PHPUNIT_VERSION" value="9.5" />
 | 
			
		||||
      <ini name="date.timezone" value="Europe/Brussels" />
 | 
			
		||||
    <env name="KERNEL_CLASS" value="\App\Kernel"/>
 | 
			
		||||
  </php>
 | 
			
		||||
  <testsuites>
 | 
			
		||||
    <!--
 | 
			
		||||
 
 | 
			
		||||
@@ -1,9 +0,0 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
use App\Kernel;
 | 
			
		||||
 | 
			
		||||
require_once dirname(__DIR__).'/vendor/autoload_runtime.php';
 | 
			
		||||
 | 
			
		||||
return function (array $context) {
 | 
			
		||||
    return new Kernel($context['APP_ENV'], (bool) $context['APP_DEBUG']);
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										22
									
								
								rector.php
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								rector.php
									
									
									
									
									
								
							@@ -28,9 +28,6 @@ return static function (RectorConfig $rectorConfig): void {
 | 
			
		||||
 | 
			
		||||
    // register a single rule
 | 
			
		||||
    $rectorConfig->rule(InlineConstructorDefaultToPropertyRector::class);
 | 
			
		||||
    $rectorConfig->rule(Rector\TypeDeclaration\Rector\ClassMethod\AddParamTypeFromPropertyTypeRector::class);
 | 
			
		||||
    $rectorConfig->rule(Rector\TypeDeclaration\Rector\Class_\MergeDateTimePropertyTypeDeclarationRector::class);
 | 
			
		||||
    $rectorConfig->rule(Rector\TypeDeclaration\Rector\ClassMethod\AddReturnTypeDeclarationBasedOnParentClassMethodRector::class);
 | 
			
		||||
 | 
			
		||||
    // part of the symfony 54 rules
 | 
			
		||||
    $rectorConfig->rule(\Rector\Symfony\Symfony53\Rector\StaticPropertyFetch\KernelTestCaseContainerPropertyDeprecationRector::class);
 | 
			
		||||
@@ -39,14 +36,14 @@ return static function (RectorConfig $rectorConfig): void {
 | 
			
		||||
 | 
			
		||||
    //define sets of rules
 | 
			
		||||
    $rectorConfig->sets([
 | 
			
		||||
        LevelSetList::UP_TO_PHP_82,
 | 
			
		||||
        \Rector\Symfony\Set\SymfonySetList::SYMFONY_40,
 | 
			
		||||
        \Rector\Symfony\Set\SymfonySetList::SYMFONY_41,
 | 
			
		||||
        \Rector\Symfony\Set\SymfonySetList::SYMFONY_42,
 | 
			
		||||
        \Rector\Symfony\Set\SymfonySetList::SYMFONY_43,
 | 
			
		||||
        \Rector\Symfony\Set\SymfonySetList::SYMFONY_44,
 | 
			
		||||
        \Rector\Symfony\Set\SymfonySetList::SYMFONY_50,
 | 
			
		||||
        \Rector\Symfony\Set\SymfonySetList::SYMFONY_50_TYPES,
 | 
			
		||||
        \Rector\Symfony\Set\SymfonySetList::SYMFONY_51,
 | 
			
		||||
        \Rector\Symfony\Set\SymfonySetList::SYMFONY_52,
 | 
			
		||||
        \Rector\Symfony\Set\SymfonySetList::SYMFONY_53,
 | 
			
		||||
        \Rector\Symfony\Set\SymfonySetList::SYMFONY_54,
 | 
			
		||||
        \Rector\Doctrine\Set\DoctrineSetList::DOCTRINE_CODE_QUALITY,
 | 
			
		||||
        \Rector\PHPUnit\Set\PHPUnitSetList::PHPUNIT_90,
 | 
			
		||||
        \Rector\Doctrine\Set\DoctrineSetList::ANNOTATIONS_TO_ATTRIBUTES,
 | 
			
		||||
    ]);
 | 
			
		||||
 | 
			
		||||
    $rectorConfig->ruleWithConfiguration(\Rector\Php80\Rector\Class_\AnnotationToAttributeRector::class, [
 | 
			
		||||
@@ -69,8 +66,9 @@ return static function (RectorConfig $rectorConfig): void {
 | 
			
		||||
 | 
			
		||||
    // skip some path...
 | 
			
		||||
    $rectorConfig->skip([
 | 
			
		||||
        // waiting for fixing this bug: https://github.com/rectorphp/rector-doctrine/issues/342
 | 
			
		||||
        \Rector\Doctrine\CodeQuality\Rector\Property\ImproveDoctrineCollectionDocTypeInEntityRector::class,
 | 
			
		||||
        // we must adapt service definition
 | 
			
		||||
        \Rector\Symfony\Symfony28\Rector\MethodCall\GetToConstructorInjectionRector::class,
 | 
			
		||||
        \Rector\Symfony\Symfony34\Rector\Closure\ContainerGetNameToTypeInTestsRector::class,
 | 
			
		||||
    ]);
 | 
			
		||||
 | 
			
		||||
    $rectorConfig->ruleWithConfiguration(AnnotationToAttributeRector::class, [
 | 
			
		||||
 
 | 
			
		||||
										
											Binary file not shown.
										
									
								
							@@ -1,51 +0,0 @@
 | 
			
		||||
#
 | 
			
		||||
# rootca.conf
 | 
			
		||||
#
 | 
			
		||||
# See Ristic OpenSSL Cookbook URL above.
 | 
			
		||||
 | 
			
		||||
oid_section                     = new_oids
 | 
			
		||||
 | 
			
		||||
[ new_oids ]
 | 
			
		||||
tsa_policy1                     = 1.2.3.4.1
 | 
			
		||||
tsa_policy2                     = 1.2.3.4.5.6
 | 
			
		||||
tsa_policy3                     = 1.2.3.4.5.7
 | 
			
		||||
 | 
			
		||||
###########  TSA extension   ##############
 | 
			
		||||
#
 | 
			
		||||
# Copied from the OpenSSL CAtsa.cnf test configuration and modified for use as a TSA extension.
 | 
			
		||||
#
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
[ tsa ]
 | 
			
		||||
 | 
			
		||||
default_tsa             = tsa_config1
 | 
			
		||||
 | 
			
		||||
[ tsa_config1 ]
 | 
			
		||||
dir                     = /etc/sign-pdf                     # TSA root directory
 | 
			
		||||
serial                  = /var/lib/tsa/tsa_serial       # current serial number (mandatory)
 | 
			
		||||
signer_cert             = $dir/tsa/tsa.crt     # signing certificate (optional)
 | 
			
		||||
certs                   = $dir/tsa/tsa-chain.pem # certification chain (optional)
 | 
			
		||||
signer_key              = $dir/tsa/private/tsa.key # tsa private key (optional)
 | 
			
		||||
default_policy          = tsa_policy1
 | 
			
		||||
signer_digest           = sha256                # digest to use for signing (optional)
 | 
			
		||||
other_policies          = tsa_policy2,tsa_policy3 # other policies (optional)
 | 
			
		||||
digests                 = sha256,sha384,sha512    # acceptable digests (mandatory)
 | 
			
		||||
accuracy                = secs:1,millisecs:500,microsecs:100 # accuracy optional
 | 
			
		||||
ordering                = yes                   # is ordering defined? (optional, default: no)
 | 
			
		||||
tsa_name                = yes                   # must tsa name be included in reply? (opt., default: no)
 | 
			
		||||
ess_cert_id_chain       = yes                   # must ess cert id change be incl? (opt., default: no)
 | 
			
		||||
ess_cert_id_alg         = sha256                # alg to compute cert. id (optional, default: sha1)
 | 
			
		||||
 | 
			
		||||
# added, was missing in the blog post
 | 
			
		||||
crypto_device           = builtin
 | 
			
		||||
 | 
			
		||||
# The tsa_ext extension is
 | 
			
		||||
# used to create the tsa cert tsa.crt
 | 
			
		||||
 | 
			
		||||
[ tsa_ext ]
 | 
			
		||||
 | 
			
		||||
authorityKeyIdentifier  = keyid:always
 | 
			
		||||
basicConstraints        = critical,CA:false
 | 
			
		||||
extendedKeyUsage        = critical,timeStamping
 | 
			
		||||
keyUsage                = critical,nonRepudiation
 | 
			
		||||
subjectKeyIdentifier    = hash
 | 
			
		||||
@@ -1,30 +0,0 @@
 | 
			
		||||
-----BEGIN ENCRYPTED PRIVATE KEY-----
 | 
			
		||||
MIIFHDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQIJKTwMigNoUMCAggA
 | 
			
		||||
MAwGCCqGSIb3DQIJBQAwFAYIKoZIhvcNAwcECEZP8zY4qrUIBIIEyGUWpexwnxFi
 | 
			
		||||
8q/Flw0Y9sL2Z7rLOriVHPhjtgt17e3rTUYaV788D/YZu/of15CnvJLj4BupcH0M
 | 
			
		||||
9i/Tqd7x6iwteIl3VJ8gIQLr44qCHdsGMoqKA7JrZmrr5uZkBBBblo1wwZOuEZSp
 | 
			
		||||
wXvZEBWV7H/vfdHZcc/und1bmXzn6NmBwIvyYvVD3yWuT+49n7JWshmBJj27fd2V
 | 
			
		||||
lOo7nrF25fdwgHve0E5gBZO1RFjhYH5EwyRg5DtUrAt6xvpmTHfDoXo8JcfgD+RR
 | 
			
		||||
Rkg1aRdty4uc8tHph+QI47hgxpCp6mvgHajn23C725F89qYF7EsSZr/eqyOxzYYr
 | 
			
		||||
L9cgKJMRlQC0Lc0y9rBj6gLGCMOqkpy0fsSZ1Wdr7EpfgvjW84oGW/4slNML3zFk
 | 
			
		||||
D93qPfry8LpLQZlxNTvGZHbG/EHj41RjluBkhnqCcdPueaz1zs55BMAjP3vb9Hfy
 | 
			
		||||
BfMRnK7tSgLCtFn1Vu3sWT02SVMa33WYMtuFHK7jBzp6IinA8RbKRoMcMdDtmCFC
 | 
			
		||||
bMTjkiC7MQ0dPFCMdn8aRAjXtnIQfQKQt5fTVeha8lWi9DAdE9iBmy1mwksCnneL
 | 
			
		||||
QTiSCs9+tMRBfKsgd5eND1/KhbHlUtjq/W/tsX/cVw+mBsz7s/VePSbfqkAr3ShI
 | 
			
		||||
o2KcoQHjreGzvckTAaZ0r6IaStrT+i+zjHSZChwaJClq1eE/fIld6/cr//+cS4Hn
 | 
			
		||||
BdNzjBpsfSJ+mXGrR63ZxF/iqYb5Y5vUxdpHiEOWQJmS3PbvD8soPYO+IxVdXO6h
 | 
			
		||||
b+CL9uune5Fznrcm3OA3QfDE64b4bif1qV4govNcnd2LxTmJ8UjdvpNgaMjwNPNI
 | 
			
		||||
JhaxGzAr0BsR8Wn+A/xvhtFtfX9s2jPDhn1diNZwklGSlakaHUsU8ZQNC8sy3sJ+
 | 
			
		||||
38fIQ50624P0lKx5E1L8npUytNCodg/ewSxJFANui8OpLck/DbYhvzYFhUd0F+4m
 | 
			
		||||
wmXSDNrp7bWvtT/b2MYW74RF9pt+R0AipYj3z1kCmZIECc0GpaL8PLuyWvEmEmfd
 | 
			
		||||
mwEz4hJ5d7JkqLSVtmYWi6U/hRr12bt5ggn9GH0M6R2Q8RV4SlKhW2jgiDC1OOUP
 | 
			
		||||
iQZvVCBuL2+wpx0Xn7l3Ef6Onr/Gfa9n0JEKqrKzDl1R0GxIh3w+XTVlPmEjOMfx
 | 
			
		||||
XOwn/UzMMEybo7BD/t6/9Fp6UMrqcoj9sgWyFg6UQsVlMjRva7TUPCDVxxqD53yS
 | 
			
		||||
iMqDVdSwcP6Py7FtSX2D42n6m8E7GlI68qs+a/7jSBrpKWyTye8kOP5uADFHjwCy
 | 
			
		||||
AZpLnfGFUG7OpfUgyVhBZSNoA4HGwSkiEdoh09uyFWcTj32DNcDqqRoN6W6azqKP
 | 
			
		||||
+IlGmUrOMMnzB1jhiphYqBJQc196qRmYaRMi0oXWQx91Y+PXkXdv0E1x9+5E5SzK
 | 
			
		||||
VQ3R3PlRx2uGLGxVQkXiwtNwcU++dnRPl+XIdyGzIxM2f2Ziwdi5srCxQpBMW+kK
 | 
			
		||||
6Sumitx+xfcsgA32hWLlF7NJVqKqSpXSen5O8mI8H81qlNJmdWbP2kzpZyMZaK2R
 | 
			
		||||
i+V1IMZyTSvNw+K7fM+apmq1DtvT4v7+6FYJ8l7AvAG/7qqpqqF+vbJzsVcz3aMw
 | 
			
		||||
M/yg+z/tJtjUH4WyvZdHjw==
 | 
			
		||||
-----END ENCRYPTED PRIVATE KEY-----
 | 
			
		||||
@@ -1,42 +0,0 @@
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIIDmDCCAoCgAwIBAgIRALBI/r9Su2VPe3I1YD91PrwwDQYJKoZIhvcNAQELBQAw
 | 
			
		||||
NjELMAkGA1UEBhMCVVMxFTATBgNVBAoMDEV4YW1wbGUgSW5jLjEQMA4GA1UEAwwH
 | 
			
		||||
Um9vdCBDQTAeFw0yNDEwMTEwNzE3NTFaFw0yNTEwMTEwNzE3NTFaMF8xCzAJBgNV
 | 
			
		||||
BAYTAlVTMRUwEwYDVQQKDAxFeGFtcGxlIEluYy4xFDASBgNVBAsMC0VuZ2luZWVy
 | 
			
		||||
aW5nMSMwIQYDVQQDDBpFeGFtcGxlIEluYy4gVFNBIFJlc3BvbmRlcjCCASIwDQYJ
 | 
			
		||||
KoZIhvcNAQEBBQADggEPADCCAQoCggEBAOGcX2IkZmoa2ShecFL8Qr0WTq5xjWey
 | 
			
		||||
fO+8/e5/F01eFL+eXoogo/mGyIcqavhb7a3lVzwmrBEp7iTfuFQ9mIt4kddFEJqb
 | 
			
		||||
lV5SC+WOJm0KX83TOnDkdyDGLRoOUpkC3ZQKQ+/G7p0DUaF94q6rYyHGNn35lb9F
 | 
			
		||||
ebqz/kGl3KOwGI+dCESDH1RSdPU1aRo/x06pYJhap6yNrJtX/7YmWQkPKGAGNavo
 | 
			
		||||
R4iTr9GE6NlHhNQ4Fg0hc4F9+IU3kXmxA8TWSAhmzOcKdGUbz2ac/g6+Lgw4Am7u
 | 
			
		||||
yqs78n176da3U0Eu9Obb03wCN3Yhsf1dqjsBLAD8Bn4iG44iTGrZI98CAwEAAaN4
 | 
			
		||||
MHYwHwYDVR0jBBgwFoAUHD5JsO28Mf8S9jAWY+3jAlYs3eAwDAYDVR0TAQH/BAIw
 | 
			
		||||
ADAWBgNVHSUBAf8EDDAKBggrBgEFBQcDCDAOBgNVHQ8BAf8EBAMCBkAwHQYDVR0O
 | 
			
		||||
BBYEFAOm2MbXTrFPmDV2rgH4J7xSJ5KuMA0GCSqGSIb3DQEBCwUAA4IBAQBX9Zx0
 | 
			
		||||
u2EfWRuP21RfO1uuaArbKS6qozG+1umXqPCpvf4EnZX1fielI35LLAZ/w2b+PXDZ
 | 
			
		||||
y2i6vJVDLMpQwaXHpyT4wsxXtVocE/AqT6Y0dgMV4ebw8UP+o4dSWMWsaOn71TjI
 | 
			
		||||
3TvSNrkCE8jgS+4Z5Tci0mBFgdnB24OL6cKaIgUcuJhHtdMQdJd/lu9kJ/nrsDsr
 | 
			
		||||
7xE1iK0b8JPhNq35Gwbqq9PnOvQN1DKUWXggIlI4t+MtKVP2A+Ci6ssAWLk+rj3m
 | 
			
		||||
SUAwNimBHp3l0uAVnFjp0Rg/4gdOSSNU4S+TXlcMxA1Ce8VGQR2Urb21Ebit5bS8
 | 
			
		||||
tOcbGzdJkJFBo22C
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIIDOTCCAiGgAwIBAgIRALBI/r9Su2VPe3I1YD91PrswDQYJKoZIhvcNAQELBQAw
 | 
			
		||||
NjELMAkGA1UEBhMCVVMxFTATBgNVBAoMDEV4YW1wbGUgSW5jLjEQMA4GA1UEAwwH
 | 
			
		||||
Um9vdCBDQTAeFw0yNDEwMTEwNjU4NTRaFw0zNDEwMDkwNjU4NTRaMDYxCzAJBgNV
 | 
			
		||||
BAYTAlVTMRUwEwYDVQQKDAxFeGFtcGxlIEluYy4xEDAOBgNVBAMMB1Jvb3QgQ0Ew
 | 
			
		||||
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCfVsoNWcVbT85bbjT5GLaN
 | 
			
		||||
P8PI9pDgKvHJxqY9Des1osGrCV0q5gym9Z5RIAqMW1LSGUqzzfoNVOuOtS0EOWmx
 | 
			
		||||
Go0drTCHt/uFFbSGXO5ghRXldFnuZglDrj6kTfVshxrMCAn+63PL6trxLNGMsyJn
 | 
			
		||||
FdmFwr1h+XKzWTI151cpr45D+08oa7PwpPfQdy3E5O7ihAMu0DcebEHqE3aeUsO2
 | 
			
		||||
yqauErFi3uAB9I9ormi5KLPEi6VdGc7WyDvI2x+L2bdsK2bJuA3JZVx8jqfgx6oc
 | 
			
		||||
NdVkrJ4q5xa6G3z0sfFjdnFuBnaDppRDmcEFmrQUNcXNGFCuC06D2RSjxOvpwMiR
 | 
			
		||||
AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1Ud
 | 
			
		||||
DgQWBBQcPkmw7bwx/xL2MBZj7eMCVizd4DANBgkqhkiG9w0BAQsFAAOCAQEAWT1T
 | 
			
		||||
1179iZl0DsAh+auKOwa36YKiZyjhnSjYeUgSp776DKc8AA5VquLxfcHSBEnJzxYN
 | 
			
		||||
7tlNob21XtFDAEbYNzU2siFxYRp3cbzY8HrOTgFo/npiYgHfAnYtAv3pwOb8AvrG
 | 
			
		||||
J7+KBOlXG4RXk10CiwhR63c0QPtnQxe93I4R2m5FCq7hDw1tMzoImPHeHi/xEXNb
 | 
			
		||||
3uMQV5esrIwJlZ/eihCWQ0Hu47RDzb0ooAj6pKEdKBj5ZPy7h5p3/cdCZmtvcfSc
 | 
			
		||||
s5iRF/c2rcyAfssFpJs2/KWl77pQBsJl7oxdlwJjSQ7/Hsv51yYjs0Cj0oLt8tS9
 | 
			
		||||
W+afHq4oRaAXFKgRBA==
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
@@ -1,84 +0,0 @@
 | 
			
		||||
Certificate:
 | 
			
		||||
    Data:
 | 
			
		||||
        Version: 3 (0x2)
 | 
			
		||||
        Serial Number:
 | 
			
		||||
            b0:48:fe:bf:52:bb:65:4f:7b:72:35:60:3f:75:3e:bc
 | 
			
		||||
        Signature Algorithm: sha256WithRSAEncryption
 | 
			
		||||
        Issuer: C=US, O=Example Inc., CN=Root CA
 | 
			
		||||
        Validity
 | 
			
		||||
            Not Before: Oct 11 07:17:51 2024 GMT
 | 
			
		||||
            Not After : Oct 11 07:17:51 2025 GMT
 | 
			
		||||
        Subject: C=US, O=Example Inc., OU=Engineering, CN=Example Inc. TSA Responder
 | 
			
		||||
        Subject Public Key Info:
 | 
			
		||||
            Public Key Algorithm: rsaEncryption
 | 
			
		||||
                Public-Key: (2048 bit)
 | 
			
		||||
                Modulus:
 | 
			
		||||
                    00:e1:9c:5f:62:24:66:6a:1a:d9:28:5e:70:52:fc:
 | 
			
		||||
                    42:bd:16:4e:ae:71:8d:67:b2:7c:ef:bc:fd:ee:7f:
 | 
			
		||||
                    17:4d:5e:14:bf:9e:5e:8a:20:a3:f9:86:c8:87:2a:
 | 
			
		||||
                    6a:f8:5b:ed:ad:e5:57:3c:26:ac:11:29:ee:24:df:
 | 
			
		||||
                    b8:54:3d:98:8b:78:91:d7:45:10:9a:9b:95:5e:52:
 | 
			
		||||
                    0b:e5:8e:26:6d:0a:5f:cd:d3:3a:70:e4:77:20:c6:
 | 
			
		||||
                    2d:1a:0e:52:99:02:dd:94:0a:43:ef:c6:ee:9d:03:
 | 
			
		||||
                    51:a1:7d:e2:ae:ab:63:21:c6:36:7d:f9:95:bf:45:
 | 
			
		||||
                    79:ba:b3:fe:41:a5:dc:a3:b0:18:8f:9d:08:44:83:
 | 
			
		||||
                    1f:54:52:74:f5:35:69:1a:3f:c7:4e:a9:60:98:5a:
 | 
			
		||||
                    a7:ac:8d:ac:9b:57:ff:b6:26:59:09:0f:28:60:06:
 | 
			
		||||
                    35:ab:e8:47:88:93:af:d1:84:e8:d9:47:84:d4:38:
 | 
			
		||||
                    16:0d:21:73:81:7d:f8:85:37:91:79:b1:03:c4:d6:
 | 
			
		||||
                    48:08:66:cc:e7:0a:74:65:1b:cf:66:9c:fe:0e:be:
 | 
			
		||||
                    2e:0c:38:02:6e:ee:ca:ab:3b:f2:7d:7b:e9:d6:b7:
 | 
			
		||||
                    53:41:2e:f4:e6:db:d3:7c:02:37:76:21:b1:fd:5d:
 | 
			
		||||
                    aa:3b:01:2c:00:fc:06:7e:22:1b:8e:22:4c:6a:d9:
 | 
			
		||||
                    23:df
 | 
			
		||||
                Exponent: 65537 (0x10001)
 | 
			
		||||
        X509v3 extensions:
 | 
			
		||||
            X509v3 Authority Key Identifier: 
 | 
			
		||||
                1C:3E:49:B0:ED:BC:31:FF:12:F6:30:16:63:ED:E3:02:56:2C:DD:E0
 | 
			
		||||
            X509v3 Basic Constraints: critical
 | 
			
		||||
                CA:FALSE
 | 
			
		||||
            X509v3 Extended Key Usage: critical
 | 
			
		||||
                Time Stamping
 | 
			
		||||
            X509v3 Key Usage: critical
 | 
			
		||||
                Non Repudiation
 | 
			
		||||
            X509v3 Subject Key Identifier: 
 | 
			
		||||
                03:A6:D8:C6:D7:4E:B1:4F:98:35:76:AE:01:F8:27:BC:52:27:92:AE
 | 
			
		||||
    Signature Algorithm: sha256WithRSAEncryption
 | 
			
		||||
    Signature Value:
 | 
			
		||||
        57:f5:9c:74:bb:61:1f:59:1b:8f:db:54:5f:3b:5b:ae:68:0a:
 | 
			
		||||
        db:29:2e:aa:a3:31:be:d6:e9:97:a8:f0:a9:bd:fe:04:9d:95:
 | 
			
		||||
        f5:7e:27:a5:23:7e:4b:2c:06:7f:c3:66:fe:3d:70:d9:cb:68:
 | 
			
		||||
        ba:bc:95:43:2c:ca:50:c1:a5:c7:a7:24:f8:c2:cc:57:b5:5a:
 | 
			
		||||
        1c:13:f0:2a:4f:a6:34:76:03:15:e1:e6:f0:f1:43:fe:a3:87:
 | 
			
		||||
        52:58:c5:ac:68:e9:fb:d5:38:c8:dd:3b:d2:36:b9:02:13:c8:
 | 
			
		||||
        e0:4b:ee:19:e5:37:22:d2:60:45:81:d9:c1:db:83:8b:e9:c2:
 | 
			
		||||
        9a:22:05:1c:b8:98:47:b5:d3:10:74:97:7f:96:ef:64:27:f9:
 | 
			
		||||
        eb:b0:3b:2b:ef:11:35:88:ad:1b:f0:93:e1:36:ad:f9:1b:06:
 | 
			
		||||
        ea:ab:d3:e7:3a:f4:0d:d4:32:94:59:78:20:22:52:38:b7:e3:
 | 
			
		||||
        2d:29:53:f6:03:e0:a2:ea:cb:00:58:b9:3e:ae:3d:e6:49:40:
 | 
			
		||||
        30:36:29:81:1e:9d:e5:d2:e0:15:9c:58:e9:d1:18:3f:e2:07:
 | 
			
		||||
        4e:49:23:54:e1:2f:93:5e:57:0c:c4:0d:42:7b:c5:46:41:1d:
 | 
			
		||||
        94:ad:bd:b5:11:b8:ad:e5:b4:bc:b4:e7:1b:1b:37:49:90:91:
 | 
			
		||||
        41:a3:6d:82
 | 
			
		||||
-----BEGIN CERTIFICATE-----
 | 
			
		||||
MIIDmDCCAoCgAwIBAgIRALBI/r9Su2VPe3I1YD91PrwwDQYJKoZIhvcNAQELBQAw
 | 
			
		||||
NjELMAkGA1UEBhMCVVMxFTATBgNVBAoMDEV4YW1wbGUgSW5jLjEQMA4GA1UEAwwH
 | 
			
		||||
Um9vdCBDQTAeFw0yNDEwMTEwNzE3NTFaFw0yNTEwMTEwNzE3NTFaMF8xCzAJBgNV
 | 
			
		||||
BAYTAlVTMRUwEwYDVQQKDAxFeGFtcGxlIEluYy4xFDASBgNVBAsMC0VuZ2luZWVy
 | 
			
		||||
aW5nMSMwIQYDVQQDDBpFeGFtcGxlIEluYy4gVFNBIFJlc3BvbmRlcjCCASIwDQYJ
 | 
			
		||||
KoZIhvcNAQEBBQADggEPADCCAQoCggEBAOGcX2IkZmoa2ShecFL8Qr0WTq5xjWey
 | 
			
		||||
fO+8/e5/F01eFL+eXoogo/mGyIcqavhb7a3lVzwmrBEp7iTfuFQ9mIt4kddFEJqb
 | 
			
		||||
lV5SC+WOJm0KX83TOnDkdyDGLRoOUpkC3ZQKQ+/G7p0DUaF94q6rYyHGNn35lb9F
 | 
			
		||||
ebqz/kGl3KOwGI+dCESDH1RSdPU1aRo/x06pYJhap6yNrJtX/7YmWQkPKGAGNavo
 | 
			
		||||
R4iTr9GE6NlHhNQ4Fg0hc4F9+IU3kXmxA8TWSAhmzOcKdGUbz2ac/g6+Lgw4Am7u
 | 
			
		||||
yqs78n176da3U0Eu9Obb03wCN3Yhsf1dqjsBLAD8Bn4iG44iTGrZI98CAwEAAaN4
 | 
			
		||||
MHYwHwYDVR0jBBgwFoAUHD5JsO28Mf8S9jAWY+3jAlYs3eAwDAYDVR0TAQH/BAIw
 | 
			
		||||
ADAWBgNVHSUBAf8EDDAKBggrBgEFBQcDCDAOBgNVHQ8BAf8EBAMCBkAwHQYDVR0O
 | 
			
		||||
BBYEFAOm2MbXTrFPmDV2rgH4J7xSJ5KuMA0GCSqGSIb3DQEBCwUAA4IBAQBX9Zx0
 | 
			
		||||
u2EfWRuP21RfO1uuaArbKS6qozG+1umXqPCpvf4EnZX1fielI35LLAZ/w2b+PXDZ
 | 
			
		||||
y2i6vJVDLMpQwaXHpyT4wsxXtVocE/AqT6Y0dgMV4ebw8UP+o4dSWMWsaOn71TjI
 | 
			
		||||
3TvSNrkCE8jgS+4Z5Tci0mBFgdnB24OL6cKaIgUcuJhHtdMQdJd/lu9kJ/nrsDsr
 | 
			
		||||
7xE1iK0b8JPhNq35Gwbqq9PnOvQN1DKUWXggIlI4t+MtKVP2A+Ci6ssAWLk+rj3m
 | 
			
		||||
SUAwNimBHp3l0uAVnFjp0Rg/4gdOSSNU4S+TXlcMxA1Ce8VGQR2Urb21Ebit5bS8
 | 
			
		||||
tOcbGzdJkJFBo22C
 | 
			
		||||
-----END CERTIFICATE-----
 | 
			
		||||
@@ -1 +0,0 @@
 | 
			
		||||
08
 | 
			
		||||
@@ -68,7 +68,7 @@ final class ActivityController extends AbstractController
 | 
			
		||||
        private readonly FilterOrderHelperFactoryInterface $filterOrderHelperFactory,
 | 
			
		||||
        private readonly TranslatableStringHelperInterface $translatableStringHelper,
 | 
			
		||||
        private readonly PaginatorFactory $paginatorFactory,
 | 
			
		||||
        private readonly ChillSecurity $security,
 | 
			
		||||
        private readonly ChillSecurity $security
 | 
			
		||||
    ) {}
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
@@ -99,10 +99,10 @@ final class ActivityController extends AbstractController
 | 
			
		||||
 | 
			
		||||
        $form = $this->createDeleteForm($activity->getId(), $person, $accompanyingPeriod);
 | 
			
		||||
 | 
			
		||||
        if (Request::METHOD_POST === $request->getMethod()) {
 | 
			
		||||
        if (Request::METHOD_DELETE === $request->getMethod()) {
 | 
			
		||||
            $form->handleRequest($request);
 | 
			
		||||
 | 
			
		||||
            if ($form->isSubmitted() && $form->isValid()) {
 | 
			
		||||
            if ($form->isValid()) {
 | 
			
		||||
                $this->logger->notice('An activity has been removed', [
 | 
			
		||||
                    'by_user' => $this->getUser()->getUsername(),
 | 
			
		||||
                    'activity_id' => $activity->getId(),
 | 
			
		||||
@@ -640,6 +640,7 @@ final class ActivityController extends AbstractController
 | 
			
		||||
 | 
			
		||||
        return $this->createFormBuilder()
 | 
			
		||||
            ->setAction($this->generateUrl('chill_activity_activity_delete', $params))
 | 
			
		||||
            ->setMethod('DELETE')
 | 
			
		||||
            ->add('submit', SubmitType::class, ['label' => 'Delete'])
 | 
			
		||||
            ->getForm();
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -12,12 +12,8 @@ declare(strict_types=1);
 | 
			
		||||
namespace Chill\ActivityBundle\DataFixtures\ORM;
 | 
			
		||||
 | 
			
		||||
use Chill\ActivityBundle\Entity\Activity;
 | 
			
		||||
use Chill\ActivityBundle\Entity\ActivityReason;
 | 
			
		||||
use Chill\ActivityBundle\Entity\ActivityType;
 | 
			
		||||
use Chill\MainBundle\DataFixtures\ORM\LoadScopes;
 | 
			
		||||
use Chill\MainBundle\DataFixtures\ORM\LoadUsers;
 | 
			
		||||
use Chill\MainBundle\Entity\Scope;
 | 
			
		||||
use Chill\MainBundle\Entity\User;
 | 
			
		||||
use Chill\PersonBundle\Entity\Person;
 | 
			
		||||
use Doctrine\Common\DataFixtures\AbstractFixture;
 | 
			
		||||
use Doctrine\Common\DataFixtures\OrderedFixtureInterface;
 | 
			
		||||
@@ -36,12 +32,12 @@ class LoadActivity extends AbstractFixture implements OrderedFixtureInterface
 | 
			
		||||
        $this->faker = FakerFactory::create('fr_FR');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getOrder(): int
 | 
			
		||||
    public function getOrder()
 | 
			
		||||
    {
 | 
			
		||||
        return 16400;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function load(ObjectManager $manager): void
 | 
			
		||||
    public function load(ObjectManager $manager)
 | 
			
		||||
    {
 | 
			
		||||
        $persons = $this->em
 | 
			
		||||
            ->getRepository(Person::class)
 | 
			
		||||
@@ -88,41 +84,49 @@ class LoadActivity extends AbstractFixture implements OrderedFixtureInterface
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Return a random activityReason.
 | 
			
		||||
     *
 | 
			
		||||
     * @return \Chill\ActivityBundle\Entity\ActivityReason
 | 
			
		||||
     */
 | 
			
		||||
    private function getRandomActivityReason(): ActivityReason
 | 
			
		||||
    private function getRandomActivityReason()
 | 
			
		||||
    {
 | 
			
		||||
        $reasonRef = LoadActivityReason::$references[array_rand(LoadActivityReason::$references)];
 | 
			
		||||
 | 
			
		||||
        return $this->getReference($reasonRef, ActivityReason::class);
 | 
			
		||||
        return $this->getReference($reasonRef);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Return a random activityType.
 | 
			
		||||
     *
 | 
			
		||||
     * @return \Chill\ActivityBundle\Entity\ActivityType
 | 
			
		||||
     */
 | 
			
		||||
    private function getRandomActivityType(): ActivityType
 | 
			
		||||
    private function getRandomActivityType()
 | 
			
		||||
    {
 | 
			
		||||
        $typeRef = LoadActivityType::$references[array_rand(LoadActivityType::$references)];
 | 
			
		||||
 | 
			
		||||
        return $this->getReference($typeRef, ActivityType::class);
 | 
			
		||||
        return $this->getReference($typeRef);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Return a random scope.
 | 
			
		||||
     *
 | 
			
		||||
     * @return \Chill\MainBundle\Entity\Scope
 | 
			
		||||
     */
 | 
			
		||||
    private function getRandomScope(): Scope
 | 
			
		||||
    private function getRandomScope()
 | 
			
		||||
    {
 | 
			
		||||
        $scopeRef = LoadScopes::$references[array_rand(LoadScopes::$references)];
 | 
			
		||||
 | 
			
		||||
        return $this->getReference($scopeRef, Scope::class);
 | 
			
		||||
        return $this->getReference($scopeRef);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Return a random user.
 | 
			
		||||
     *
 | 
			
		||||
     * @return \Chill\MainBundle\Entity\User
 | 
			
		||||
     */
 | 
			
		||||
    private function getRandomUser(): User
 | 
			
		||||
    private function getRandomUser()
 | 
			
		||||
    {
 | 
			
		||||
        $userRef = array_rand(LoadUsers::$refs);
 | 
			
		||||
 | 
			
		||||
        return $this->getReference($userRef, User::class);
 | 
			
		||||
        return $this->getReference($userRef);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -38,7 +38,7 @@ class LoadActivityNotifications extends AbstractFixture implements DependentFixt
 | 
			
		||||
        ],
 | 
			
		||||
    ];
 | 
			
		||||
 | 
			
		||||
    public function getDependencies(): array
 | 
			
		||||
    public function getDependencies()
 | 
			
		||||
    {
 | 
			
		||||
        return [
 | 
			
		||||
            LoadActivity::class,
 | 
			
		||||
 
 | 
			
		||||
@@ -12,7 +12,6 @@ declare(strict_types=1);
 | 
			
		||||
namespace Chill\ActivityBundle\DataFixtures\ORM;
 | 
			
		||||
 | 
			
		||||
use Chill\ActivityBundle\Entity\ActivityReason;
 | 
			
		||||
use Chill\ActivityBundle\Entity\ActivityReasonCategory;
 | 
			
		||||
use Doctrine\Common\DataFixtures\AbstractFixture;
 | 
			
		||||
use Doctrine\Common\DataFixtures\OrderedFixtureInterface;
 | 
			
		||||
use Doctrine\Persistence\ObjectManager;
 | 
			
		||||
@@ -24,12 +23,12 @@ class LoadActivityReason extends AbstractFixture implements OrderedFixtureInterf
 | 
			
		||||
{
 | 
			
		||||
    public static $references = [];
 | 
			
		||||
 | 
			
		||||
    public function getOrder(): int
 | 
			
		||||
    public function getOrder()
 | 
			
		||||
    {
 | 
			
		||||
        return 16300;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function load(ObjectManager $manager): void
 | 
			
		||||
    public function load(ObjectManager $manager)
 | 
			
		||||
    {
 | 
			
		||||
        $reasons = [
 | 
			
		||||
            [
 | 
			
		||||
@@ -57,7 +56,7 @@ class LoadActivityReason extends AbstractFixture implements OrderedFixtureInterf
 | 
			
		||||
            $activityReason = (new ActivityReason())
 | 
			
		||||
                ->setName($r['name'])
 | 
			
		||||
                ->setActive(true)
 | 
			
		||||
                ->setCategory($this->getReference($r['category'], ActivityReasonCategory::class));
 | 
			
		||||
                ->setCategory($this->getReference($r['category']));
 | 
			
		||||
            $manager->persist($activityReason);
 | 
			
		||||
            $reference = 'activity_reason_'.$r['name']['en'];
 | 
			
		||||
            $this->addReference($reference, $activityReason);
 | 
			
		||||
 
 | 
			
		||||
@@ -21,12 +21,12 @@ use Doctrine\Persistence\ObjectManager;
 | 
			
		||||
 */
 | 
			
		||||
class LoadActivityReasonCategory extends AbstractFixture implements OrderedFixtureInterface
 | 
			
		||||
{
 | 
			
		||||
    public function getOrder(): int
 | 
			
		||||
    public function getOrder()
 | 
			
		||||
    {
 | 
			
		||||
        return 16200;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function load(ObjectManager $manager): void
 | 
			
		||||
    public function load(ObjectManager $manager)
 | 
			
		||||
    {
 | 
			
		||||
        $categs = [
 | 
			
		||||
            ['name' => ['fr' => 'Logement', 'en' => 'Housing', 'nl' => 'Woning']],
 | 
			
		||||
 
 | 
			
		||||
@@ -12,7 +12,6 @@ declare(strict_types=1);
 | 
			
		||||
namespace Chill\ActivityBundle\DataFixtures\ORM;
 | 
			
		||||
 | 
			
		||||
use Chill\ActivityBundle\Entity\ActivityType;
 | 
			
		||||
use Chill\ActivityBundle\Entity\ActivityTypeCategory;
 | 
			
		||||
use Doctrine\Bundle\FixturesBundle\Fixture;
 | 
			
		||||
use Doctrine\Common\DataFixtures\OrderedFixtureInterface;
 | 
			
		||||
use Doctrine\Persistence\ObjectManager;
 | 
			
		||||
@@ -24,12 +23,12 @@ class LoadActivityType extends Fixture implements OrderedFixtureInterface
 | 
			
		||||
{
 | 
			
		||||
    public static $references = [];
 | 
			
		||||
 | 
			
		||||
    public function getOrder(): int
 | 
			
		||||
    public function getOrder()
 | 
			
		||||
    {
 | 
			
		||||
        return 16100;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function load(ObjectManager $manager): void
 | 
			
		||||
    public function load(ObjectManager $manager)
 | 
			
		||||
    {
 | 
			
		||||
        $types = [
 | 
			
		||||
            // Exange
 | 
			
		||||
@@ -58,7 +57,7 @@ class LoadActivityType extends Fixture implements OrderedFixtureInterface
 | 
			
		||||
            echo 'Creating activity type : '.$t['name']['fr'].' (cat:'.$t['category']." \n";
 | 
			
		||||
            $activityType = (new ActivityType())
 | 
			
		||||
                ->setName($t['name'])
 | 
			
		||||
                ->setCategory($this->getReference('activity_type_cat_'.$t['category'], ActivityTypeCategory::class))
 | 
			
		||||
                ->setCategory($this->getReference('activity_type_cat_'.$t['category']))
 | 
			
		||||
                ->setSocialIssuesVisible(1)
 | 
			
		||||
                ->setSocialActionsVisible(1);
 | 
			
		||||
            $manager->persist($activityType);
 | 
			
		||||
 
 | 
			
		||||
@@ -23,12 +23,12 @@ class LoadActivityTypeCategory extends Fixture implements OrderedFixtureInterfac
 | 
			
		||||
{
 | 
			
		||||
    public static $references = [];
 | 
			
		||||
 | 
			
		||||
    public function getOrder(): int
 | 
			
		||||
    public function getOrder()
 | 
			
		||||
    {
 | 
			
		||||
        return 16050;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function load(ObjectManager $manager): void
 | 
			
		||||
    public function load(ObjectManager $manager)
 | 
			
		||||
    {
 | 
			
		||||
        $categories = [
 | 
			
		||||
            [
 | 
			
		||||
 
 | 
			
		||||
@@ -15,9 +15,7 @@ use Chill\ActivityBundle\Security\Authorization\ActivityStatsVoter;
 | 
			
		||||
use Chill\ActivityBundle\Security\Authorization\ActivityVoter;
 | 
			
		||||
use Chill\MainBundle\DataFixtures\ORM\LoadPermissionsGroup;
 | 
			
		||||
use Chill\MainBundle\DataFixtures\ORM\LoadScopes;
 | 
			
		||||
use Chill\MainBundle\Entity\PermissionsGroup;
 | 
			
		||||
use Chill\MainBundle\Entity\RoleScope;
 | 
			
		||||
use Chill\MainBundle\Entity\Scope;
 | 
			
		||||
use Doctrine\Common\DataFixtures\AbstractFixture;
 | 
			
		||||
use Doctrine\Common\DataFixtures\OrderedFixtureInterface;
 | 
			
		||||
use Doctrine\Persistence\ObjectManager;
 | 
			
		||||
@@ -28,18 +26,18 @@ use Doctrine\Persistence\ObjectManager;
 | 
			
		||||
 */
 | 
			
		||||
class LoadActivitytACL extends AbstractFixture implements OrderedFixtureInterface
 | 
			
		||||
{
 | 
			
		||||
    public function getOrder(): int
 | 
			
		||||
    public function getOrder()
 | 
			
		||||
    {
 | 
			
		||||
        return 16000;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function load(ObjectManager $manager): void
 | 
			
		||||
    public function load(ObjectManager $manager)
 | 
			
		||||
    {
 | 
			
		||||
        foreach (LoadPermissionsGroup::$refs as $permissionsGroupRef) {
 | 
			
		||||
            $permissionsGroup = $this->getReference($permissionsGroupRef, PermissionsGroup::class);
 | 
			
		||||
            $permissionsGroup = $this->getReference($permissionsGroupRef);
 | 
			
		||||
 | 
			
		||||
            foreach (LoadScopes::$references as $scopeRef) {
 | 
			
		||||
                $scope = $this->getReference($scopeRef, Scope::class);
 | 
			
		||||
                $scope = $this->getReference($scopeRef);
 | 
			
		||||
                // create permission group
 | 
			
		||||
                switch ($permissionsGroup->getName()) {
 | 
			
		||||
                    case 'social':
 | 
			
		||||
 
 | 
			
		||||
@@ -80,7 +80,7 @@ class Activity implements AccompanyingPeriodLinkedWithSocialIssuesEntityInterfac
 | 
			
		||||
    private \DateTime $date;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @var Collection<int, StoredObject>
 | 
			
		||||
     * @var Collection<StoredObject>
 | 
			
		||||
     */
 | 
			
		||||
    #[Assert\Valid(traverse: true)]
 | 
			
		||||
    #[ORM\ManyToMany(targetEntity: StoredObject::class, cascade: ['persist'])]
 | 
			
		||||
@@ -107,7 +107,7 @@ class Activity implements AccompanyingPeriodLinkedWithSocialIssuesEntityInterfac
 | 
			
		||||
    private ?Person $person = null;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @var Collection<int, Person>
 | 
			
		||||
     * @var Collection<Person>
 | 
			
		||||
     */
 | 
			
		||||
    #[Groups(['read', 'docgen:read'])]
 | 
			
		||||
    #[ORM\ManyToMany(targetEntity: Person::class)]
 | 
			
		||||
@@ -117,7 +117,7 @@ class Activity implements AccompanyingPeriodLinkedWithSocialIssuesEntityInterfac
 | 
			
		||||
    private PrivateCommentEmbeddable $privateComment;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @var Collection<int, ActivityReason>
 | 
			
		||||
     * @var Collection<ActivityReason>
 | 
			
		||||
     */
 | 
			
		||||
    #[Groups(['docgen:read'])]
 | 
			
		||||
    #[ORM\ManyToMany(targetEntity: ActivityReason::class)]
 | 
			
		||||
@@ -132,7 +132,7 @@ class Activity implements AccompanyingPeriodLinkedWithSocialIssuesEntityInterfac
 | 
			
		||||
    private string $sentReceived = '';
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @var Collection<int, SocialAction>
 | 
			
		||||
     * @var Collection<SocialAction>
 | 
			
		||||
     */
 | 
			
		||||
    #[Groups(['read', 'docgen:read'])]
 | 
			
		||||
    #[ORM\ManyToMany(targetEntity: SocialAction::class)]
 | 
			
		||||
@@ -140,7 +140,7 @@ class Activity implements AccompanyingPeriodLinkedWithSocialIssuesEntityInterfac
 | 
			
		||||
    private Collection $socialActions;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @var Collection<int, SocialIssue>
 | 
			
		||||
     * @var Collection<SocialIssue>
 | 
			
		||||
     */
 | 
			
		||||
    #[Groups(['read', 'docgen:read'])]
 | 
			
		||||
    #[ORM\ManyToMany(targetEntity: SocialIssue::class)]
 | 
			
		||||
@@ -148,7 +148,7 @@ class Activity implements AccompanyingPeriodLinkedWithSocialIssuesEntityInterfac
 | 
			
		||||
    private Collection $socialIssues;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @var Collection<int, ThirdParty>
 | 
			
		||||
     * @var Collection<ThirdParty>
 | 
			
		||||
     */
 | 
			
		||||
    #[Groups(['read', 'docgen:read'])]
 | 
			
		||||
    #[ORM\ManyToMany(targetEntity: ThirdParty::class)]
 | 
			
		||||
@@ -162,7 +162,7 @@ class Activity implements AccompanyingPeriodLinkedWithSocialIssuesEntityInterfac
 | 
			
		||||
    private ?User $user = null;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @var Collection<int, User>
 | 
			
		||||
     * @var Collection<User>
 | 
			
		||||
     */
 | 
			
		||||
    #[Groups(['read', 'docgen:read'])]
 | 
			
		||||
    #[ORM\ManyToMany(targetEntity: User::class)]
 | 
			
		||||
 
 | 
			
		||||
@@ -32,8 +32,8 @@ class ActivityReason
 | 
			
		||||
    #[ORM\GeneratedValue(strategy: 'AUTO')]
 | 
			
		||||
    private ?int $id = null;
 | 
			
		||||
 | 
			
		||||
    #[ORM\Column(type: \Doctrine\DBAL\Types\Types::JSON, options: ['default' => '{}', 'jsonb' => true])]
 | 
			
		||||
    private array $name = [];
 | 
			
		||||
    #[ORM\Column(type: \Doctrine\DBAL\Types\Types::JSON)]
 | 
			
		||||
    private array $name;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get active.
 | 
			
		||||
@@ -79,9 +79,11 @@ class ActivityReason
 | 
			
		||||
    /**
 | 
			
		||||
     * Set active.
 | 
			
		||||
     *
 | 
			
		||||
     * @param bool $active
 | 
			
		||||
     *
 | 
			
		||||
     * @return ActivityReason
 | 
			
		||||
     */
 | 
			
		||||
    public function setActive(bool $active)
 | 
			
		||||
    public function setActive($active)
 | 
			
		||||
    {
 | 
			
		||||
        $this->active = $active;
 | 
			
		||||
 | 
			
		||||
@@ -108,9 +110,11 @@ class ActivityReason
 | 
			
		||||
    /**
 | 
			
		||||
     * Set name.
 | 
			
		||||
     *
 | 
			
		||||
     * @param array $name
 | 
			
		||||
     *
 | 
			
		||||
     * @return ActivityReason
 | 
			
		||||
     */
 | 
			
		||||
    public function setName(array $name)
 | 
			
		||||
    public function setName($name)
 | 
			
		||||
    {
 | 
			
		||||
        $this->name = $name;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -31,16 +31,18 @@ class ActivityReasonCategory implements \Stringable
 | 
			
		||||
    #[ORM\GeneratedValue(strategy: 'AUTO')]
 | 
			
		||||
    private ?int $id = null;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    #[ORM\Column(type: \Doctrine\DBAL\Types\Types::JSON, options: ['default' => '{}', 'jsonb' => true])]
 | 
			
		||||
    private array $name = [];
 | 
			
		||||
    /**
 | 
			
		||||
     * @var string
 | 
			
		||||
     */
 | 
			
		||||
    #[ORM\Column(type: \Doctrine\DBAL\Types\Types::JSON)]
 | 
			
		||||
    private $name;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Array of ActivityReason.
 | 
			
		||||
     *
 | 
			
		||||
     * @var Collection<int, ActivityReason>
 | 
			
		||||
     * @var Collection<ActivityReason>
 | 
			
		||||
     */
 | 
			
		||||
    #[ORM\OneToMany(mappedBy: 'category', targetEntity: ActivityReason::class)]
 | 
			
		||||
    #[ORM\OneToMany(targetEntity: ActivityReason::class, mappedBy: 'category')]
 | 
			
		||||
    private Collection $reasons;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
@@ -125,9 +127,11 @@ class ActivityReasonCategory implements \Stringable
 | 
			
		||||
    /**
 | 
			
		||||
     * Set name.
 | 
			
		||||
     *
 | 
			
		||||
     * @param array $name
 | 
			
		||||
     *
 | 
			
		||||
     * @return ActivityReasonCategory
 | 
			
		||||
     */
 | 
			
		||||
    public function setName(array $name)
 | 
			
		||||
    public function setName($name)
 | 
			
		||||
    {
 | 
			
		||||
        $this->name = $name;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -28,7 +28,7 @@ class ActivityReasonAggregator implements AggregatorInterface, ExportElementVali
 | 
			
		||||
    public function __construct(
 | 
			
		||||
        protected ActivityReasonCategoryRepository $activityReasonCategoryRepository,
 | 
			
		||||
        protected ActivityReasonRepository $activityReasonRepository,
 | 
			
		||||
        protected TranslatableStringHelper $translatableStringHelper,
 | 
			
		||||
        protected TranslatableStringHelper $translatableStringHelper
 | 
			
		||||
    ) {}
 | 
			
		||||
 | 
			
		||||
    public function addRole(): ?string
 | 
			
		||||
 
 | 
			
		||||
@@ -26,7 +26,7 @@ class ActivityUsersJobAggregator implements AggregatorInterface
 | 
			
		||||
 | 
			
		||||
    public function __construct(
 | 
			
		||||
        private readonly UserJobRepositoryInterface $userJobRepository,
 | 
			
		||||
        private readonly TranslatableStringHelperInterface $translatableStringHelper,
 | 
			
		||||
        private readonly TranslatableStringHelperInterface $translatableStringHelper
 | 
			
		||||
    ) {}
 | 
			
		||||
 | 
			
		||||
    public function addRole(): ?string
 | 
			
		||||
 
 | 
			
		||||
@@ -26,7 +26,7 @@ class ActivityUsersScopeAggregator implements AggregatorInterface
 | 
			
		||||
 | 
			
		||||
    public function __construct(
 | 
			
		||||
        private readonly ScopeRepositoryInterface $scopeRepository,
 | 
			
		||||
        private readonly TranslatableStringHelperInterface $translatableStringHelper,
 | 
			
		||||
        private readonly TranslatableStringHelperInterface $translatableStringHelper
 | 
			
		||||
    ) {}
 | 
			
		||||
 | 
			
		||||
    public function addRole(): ?string
 | 
			
		||||
 
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user