mirror of
				https://gitlab.com/Chill-Projet/chill-bundles.git
				synced 2025-10-31 01:08:26 +00:00 
			
		
		
		
	Resolve merge with master
This commit is contained in:
		
							
								
								
									
										4
									
								
								.changes/v3.2.3.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								.changes/v3.2.3.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,4 @@ | ||||
| ## 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  | ||||
							
								
								
									
										3
									
								
								.changes/v3.2.4.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								.changes/v3.2.4.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| ## v3.2.4 - 2024-11-06 | ||||
| ### Fixed | ||||
| * Fix compilation of chill assets  | ||||
							
								
								
									
										13
									
								
								.changes/v3.3.0.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								.changes/v3.3.0.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | ||||
| ## 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  | ||||
							
								
								
									
										4
									
								
								.changes/v3.4.0.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								.changes/v3.4.0.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,4 @@ | ||||
| ## 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.  | ||||
							
								
								
									
										3
									
								
								.changes/v3.4.1.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								.changes/v3.4.1.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| ## v3.4.1 - 2024-11-22 | ||||
| ### Fixed | ||||
| * Set the workflow's title to notification content and subject  | ||||
							
								
								
									
										6
									
								
								.changes/v3.4.2.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								.changes/v3.4.2.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | ||||
| ## 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  | ||||
							
								
								
									
										4
									
								
								.changes/v3.4.3.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								.changes/v3.4.3.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,4 @@ | ||||
| ## v3.4.3 - 2024-12-05 | ||||
| ### Fixed | ||||
| * Remove the "not null" constraint on person supplementary phones | ||||
| * Remove doctrine annotation that prevent from adding documents to activities | ||||
							
								
								
									
										6
									
								
								.changes/v3.5.0.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								.changes/v3.5.0.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | ||||
| ## v3.5.0 - 2024-12-09 | ||||
| ### Feature | ||||
| * ([#318](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/318)) Show all the pages of the documents in the signature app  | ||||
| ### Fixed | ||||
| * Wrap the signature's change state into a transaction, to avoid race conditions  | ||||
| * Fix display of gender label  | ||||
							
								
								
									
										94
									
								
								.env
									
									
									
									
									
								
							
							
						
						
									
										94
									
								
								.env
									
									
									
									
									
								
							| @@ -11,19 +11,13 @@ | ||||
| # 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=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)$' | ||||
| APP_SECRET=!ChangeMeInAppEnv! | ||||
| ###< symfony/framework-bundle ### | ||||
|  | ||||
| ## Wopi server for editing documents online | ||||
| WOPI_SERVER=http://collabora:9980 | ||||
| EDITOR_SERVER=http://collabora:9980 | ||||
|  | ||||
| # must be manually set in .env.local | ||||
| # ADMIN_PASSWORD= | ||||
| @@ -32,52 +26,14 @@ WOPI_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=sync:// | ||||
| # MESSENGER_TRANSPORT_DSN=doctrine://default?auto_setup=0 | ||||
| MESSENGER_TRANSPORT_DSN=${RABBITMQ_URL}/%2f | ||||
| ###< symfony/messenger ### | ||||
|  | ||||
| ###> doctrine/doctrine-bundle ### | ||||
| @@ -92,3 +48,43 @@ 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,15 +4,8 @@ | ||||
| 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 | ||||
| @@ -22,22 +15,25 @@ 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://postgres:postgres@db:5432/test?serverVersion=14&charset=utf8" | ||||
| DATABASE_URL="postgresql://app:!ChangeMe!@127.0.0.1:5454/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,10 +3,18 @@ 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 | ||||
| @@ -15,7 +23,6 @@ node_modules/* | ||||
| /public/bundles/ | ||||
| /var/ | ||||
| /vendor/ | ||||
| /bin/ | ||||
| ###< symfony/framework-bundle ### | ||||
|  | ||||
| ###> phpunit/phpunit ### | ||||
| @@ -27,4 +34,20 @@ node_modules/* | ||||
| /.idea/ | ||||
| /.psalm/ | ||||
|  | ||||
| node_modules/* | ||||
| ###> 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 ### | ||||
|   | ||||
| @@ -10,7 +10,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:14-3.3-alpine | ||||
|     - name: postgis/postgis:17-3.5-alpine | ||||
|       alias: db | ||||
|       command: | ||||
|           - postgres | ||||
| @@ -27,7 +27,7 @@ variables: | ||||
|     POSTGRES_USER: postgres | ||||
|     POSTGRES_PASSWORD: postgres | ||||
|     # configure database access | ||||
|     DATABASE_URL: postgresql://postgres:postgres@db:5432/postgres?serverVersion=14&charset=utf8 | ||||
|     DATABASE_URL: postgresql://postgres:postgres@db:5432/postgres?serverVersion=17&charset=utf8 | ||||
|     # fetch the chill-app using git submodules | ||||
|     # GIT_SUBMODULE_STRATEGY: recursive | ||||
|     REDIS_HOST: redis | ||||
| @@ -57,7 +57,6 @@ build: | ||||
|     artifacts: | ||||
|         expire_in: 1 day | ||||
|         paths: | ||||
|             - bin | ||||
|             - vendor/ | ||||
|  | ||||
| code_style: | ||||
| @@ -71,36 +70,38 @@ 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: | ||||
|         - bin/phpstan analyze --memory-limit=2G | ||||
|         - composer exec phpstan -- analyze --memory-limit=3G | ||||
|     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: | ||||
|         - tests/console cache:clear | ||||
|         - bin/rector process --dry-run | ||||
|         - composer exec rector -- process --dry-run | ||||
|     cache: | ||||
|         paths: | ||||
|             - .cache/ | ||||
|     artifacts: | ||||
|         expire_in: 1 day | ||||
|         paths: | ||||
|             - bin | ||||
|             - vendor/ | ||||
|  | ||||
| lint: | ||||
| @@ -132,16 +133,19 @@ lint: | ||||
| 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: | ||||
|         - 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 | ||||
|         - composer exec phpunit -- --colors=never --exclude-group dbIntensive,openstack-integration | ||||
|     artifacts: | ||||
|         expire_in: 1 day | ||||
|         paths: | ||||
|             - bin | ||||
|             - vendor/ | ||||
|  | ||||
| release: | ||||
|   | ||||
| @@ -120,6 +120,6 @@ $rules = array_merge( | ||||
|     $untilFullSwitchToPhp8, | ||||
| ); | ||||
|  | ||||
| $rules['header_comment']['header'] = trim(file_get_contents(__DIR__.'/resource/header.txt')); | ||||
| $rules['header_comment']['header'] = trim(file_get_contents(__DIR__.'/resources/header.txt')); | ||||
|  | ||||
| return $config->setRules($rules); | ||||
|   | ||||
							
								
								
									
										2
									
								
								.symfony.local.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								.symfony.local.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,2 @@ | ||||
| workers: | ||||
|     docker_compose: ~ | ||||
							
								
								
									
										51
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										51
									
								
								CHANGELOG.md
									
									
									
									
									
								
							| @@ -6,6 +6,57 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html), | ||||
| and is generated by [Changie](https://github.com/miniscruff/changie). | ||||
|  | ||||
|  | ||||
| ## v3.5.0 - 2024-12-09 | ||||
| ### Feature | ||||
| * ([#318](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/318)) Show all the pages of the documents in the signature app  | ||||
| ### Fixed | ||||
| * Wrap the signature's change state into a transaction, to avoid race conditions  | ||||
| * Fix display of gender label  | ||||
|  | ||||
| ## v3.4.3 - 2024-12-05 | ||||
| ### Fixed | ||||
| * Remove the "not null" constraint on person supplementary phones | ||||
| * Remove doctrine annotation that prevent from adding documents to activities | ||||
|  | ||||
| ## 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  | ||||
|   | ||||
							
								
								
									
										16
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								README.md
									
									
									
									
									
								
							| @@ -1,9 +1,15 @@ | ||||
| # Chill framework | ||||
| # Main Chill Bundles and Chill framework | ||||
|  | ||||
| Documentation of the Chill software. | ||||
| Chill is a software for social workers. It allows them to keep track of the social work they do. | ||||
|  | ||||
| The online documentation can be found at http://docs.chill.social | ||||
| See our website for more information https://www.chill.social | ||||
|  | ||||
| See the [`docs`][1] directory for more. | ||||
| ## Installation | ||||
|  | ||||
| [1]: docs/README.md | ||||
| 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). | ||||
|   | ||||
| @@ -4,6 +4,10 @@ | ||||
| use App\Kernel; | ||||
| use Symfony\Bundle\FrameworkBundle\Console\Application; | ||||
| 
 | ||||
| if (!is_dir(dirname(__DIR__).'/vendor')) { | ||||
|     throw new LogicException('Dependencies are missing. Try running "composer install".'); | ||||
| } | ||||
| 
 | ||||
| if (!is_file(dirname(__DIR__).'/vendor/autoload_runtime.php')) { | ||||
|     throw new LogicException('Symfony Runtime is missing. Try running "composer require symfony/runtime".'); | ||||
| } | ||||
							
								
								
									
										34
									
								
								compose.override.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								compose.override.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,34 @@ | ||||
| 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
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								compose.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,56 @@ | ||||
| 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 ### | ||||
| @@ -31,6 +31,7 @@ | ||||
|         "phpoffice/phpspreadsheet": "^1.16", | ||||
|         "ramsey/uuid-doctrine": "^1.7", | ||||
|         "sensio/framework-extra-bundle": "^5.5", | ||||
|         "smalot/pdfparser": "^2.10", | ||||
|         "spomky-labs/base64url": "^2.0", | ||||
|         "symfony/asset": "^5.4", | ||||
|         "symfony/browser-kit": "^5.4", | ||||
| @@ -94,13 +95,16 @@ | ||||
|         "phpstan/phpstan-strict-rules": "^1.0", | ||||
|         "phpunit/phpunit": "^10.5.24", | ||||
|         "rector/rector": "^1.1.0", | ||||
|         "symfony/amqp-messenger": "^5.4.45", | ||||
|         "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/var-dumper": "^5.4", | ||||
|         "symfony/web-profiler-bundle": "^5.4" | ||||
|     }, | ||||
|     "conflict": { | ||||
|         "symfony/symfony": "*" | ||||
| @@ -128,7 +132,7 @@ | ||||
|     }, | ||||
|     "autoload-dev": { | ||||
|         "psr-4": { | ||||
|             "App\\": "tests/", | ||||
|             "App\\": "src/app", | ||||
|             "Chill\\DocGeneratorBundle\\Tests\\": "src/Bundle/ChillDocGeneratorBundle/tests", | ||||
|             "Chill\\WopiBundle\\Tests\\": "src/Bundle/ChillDocGeneratorBundle/tests", | ||||
|             "Chill\\Utils\\Rector\\Tests\\": "utils/rector/tests" | ||||
| @@ -142,16 +146,22 @@ | ||||
|             "phpro/grumphp": true, | ||||
|             "phpstan/extension-installer": true, | ||||
|             "roave/you-are-using-it-wrong": true, | ||||
|             "symfony/runtime": true | ||||
|             "symfony/runtime": true, | ||||
|             "symfony/flex": true | ||||
|         }, | ||||
|         "bin-dir": "bin", | ||||
|         "optimize-autoloader": true, | ||||
|         "sort-packages": true | ||||
|     }, | ||||
|     "scripts": { | ||||
|         "auto-scripts": { | ||||
|             "cache:clear": "symfony-cmd" | ||||
|             "cache:clear": "symfony-cmd", | ||||
|             "assets:install %PUBLIC_DIR%": "symfony-cmd" | ||||
|         }, | ||||
|         "php-cs-fixer": "php-cs-fixer fix --config=./.php-cs-fixer.dist.php --show-progress=none" | ||||
|     }, | ||||
|     "extra": { | ||||
|         "symfony": { | ||||
|             "docker": true | ||||
|         } | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -1,15 +1,26 @@ | ||||
| <?php | ||||
| 
 | ||||
| declare(strict_types=1); | ||||
| 
 | ||||
| /* | ||||
|  * Chill is a software for social workers | ||||
|  * | ||||
|  * For the full copyright and license information, please view | ||||
|  * the LICENSE file that was distributed with this source code. | ||||
|  */ | ||||
| 
 | ||||
| return [ | ||||
|     Symfony\Bundle\FrameworkBundle\FrameworkBundle::class => ['all' => true], | ||||
|     loophp\PsrHttpMessageBridgeBundle\PsrHttpMessageBridgeBundle::class => ['all' => true], | ||||
|     ChampsLibres\WopiBundle\WopiBundle::class => ['all' => true], | ||||
|     Doctrine\Bundle\DoctrineBundle\DoctrineBundle::class => ['all' => true], | ||||
|     Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle::class => ['dev' => true, 'test' => true], | ||||
|     Doctrine\Bundle\MigrationsBundle\DoctrineMigrationsBundle::class => ['all' => true], | ||||
|     Knp\Bundle\MenuBundle\KnpMenuBundle::class => ['all' => true], | ||||
|     Knp\Bundle\TimeBundle\KnpTimeBundle::class => ['all' => true], | ||||
|     KnpU\OAuth2ClientBundle\KnpUOAuth2ClientBundle::class => ['all' => true], | ||||
|     Symfony\Bundle\SecurityBundle\SecurityBundle::class => ['all' => true], | ||||
|     Lexik\Bundle\JWTAuthenticationBundle\LexikJWTAuthenticationBundle::class => ['all' => true], | ||||
|     Nelmio\Alice\Bridge\Symfony\NelmioAliceBundle::class => ['dev' => true, 'test' => true], | ||||
|     Misd\PhoneNumberBundle\MisdPhoneNumberBundle::class => ['all' => true], | ||||
|     Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle::class => ['all' => true], | ||||
|     Symfony\Bundle\DebugBundle\DebugBundle::class => ['dev' => true], | ||||
|     Symfony\Bundle\MakerBundle\MakerBundle::class => ['dev' => true], | ||||
|     Symfony\Bundle\MonologBundle\MonologBundle::class => ['all' => true], | ||||
|     Symfony\WebpackEncoreBundle\WebpackEncoreBundle::class => ['all' => true], | ||||
|     Symfony\Bundle\TwigBundle\TwigBundle::class => ['all' => true], | ||||
|     Twig\Extra\TwigExtraBundle\TwigExtraBundle::class => ['all' => true], | ||||
|     Chill\ActivityBundle\ChillActivityBundle::class => ['all' => true], | ||||
|     Chill\AsideActivityBundle\ChillAsideActivityBundle::class => ['all' => true], | ||||
|     Chill\CalendarBundle\ChillCalendarBundle::class => ['all' => true], | ||||
| @@ -23,24 +34,6 @@ return [ | ||||
|     Chill\TaskBundle\ChillTaskBundle::class => ['all' => true], | ||||
|     Chill\ThirdPartyBundle\ChillThirdPartyBundle::class => ['all' => true], | ||||
|     Chill\BudgetBundle\ChillBudgetBundle::class => ['all' => true], | ||||
|     Doctrine\Bundle\DoctrineBundle\DoctrineBundle::class => ['all' => true], | ||||
|     Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle::class => ['dev' => true, 'test' => true], | ||||
|     Doctrine\Bundle\MigrationsBundle\DoctrineMigrationsBundle::class => ['all' => true], | ||||
|     Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle::class => ['all' => true], | ||||
|     Symfony\Bundle\DebugBundle\DebugBundle::class => ['dev' => true, 'test' => true], | ||||
|     Symfony\Bundle\FrameworkBundle\FrameworkBundle::class => ['all' => true], | ||||
|     Symfony\Bundle\MakerBundle\MakerBundle::class => ['dev' => true], | ||||
|     Symfony\Bundle\MonologBundle\MonologBundle::class => ['all' => true], | ||||
|     Symfony\Bundle\SecurityBundle\SecurityBundle::class => ['all' => true], | ||||
|     Symfony\Bundle\TwigBundle\TwigBundle::class => ['all' => true], | ||||
|     //Symfony\Bundle\WebProfilerBundle\WebProfilerBundle::class => ['dev' => true, 'test' => true],
 | ||||
|     Symfony\WebpackEncoreBundle\WebpackEncoreBundle::class => ['all' => true], | ||||
|     Knp\Bundle\MenuBundle\KnpMenuBundle::class => ['all' => true], | ||||
|     Knp\Bundle\TimeBundle\KnpTimeBundle::class => ['all' => true], | ||||
|     Twig\Extra\TwigExtraBundle\TwigExtraBundle::class => ['all' => true], | ||||
|     loophp\PsrHttpMessageBridgeBundle\PsrHttpMessageBridgeBundle::class => ['all' => true], | ||||
|     \Misd\PhoneNumberBundle\MisdPhoneNumberBundle::class => ['all' => true], | ||||
|     ChampsLibres\WopiBundle\WopiBundle::class => ['all' => true], | ||||
|     Chill\WopiBundle\ChillWopiBundle::class => ['all' => true], | ||||
|     \Lexik\Bundle\JWTAuthenticationBundle\LexikJWTAuthenticationBundle::class => ['all' => true], | ||||
|     Symfony\Bundle\WebProfilerBundle\WebProfilerBundle::class => ['dev' => true, 'test' => true], | ||||
| ]; | ||||
| @@ -17,17 +17,3 @@ framework: | ||||
|         # Namespaced pools use the above "app" backend by default | ||||
|         #pools: | ||||
|             #my.dedicated.cache: null | ||||
| 
 | ||||
|         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 | ||||
							
								
								
									
										14
									
								
								config/packages/cache_chill.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								config/packages/cache_chill.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,14 @@ | ||||
| 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 | ||||
							
								
								
									
										121
									
								
								config/packages/chill.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										121
									
								
								config/packages/chill.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,121 @@ | ||||
| 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 | ||||
							
								
								
									
										85
									
								
								config/packages/chill_budget.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										85
									
								
								config/packages/chill_budget.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,85 @@ | ||||
| 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"}]} | ||||
|  | ||||
							
								
								
									
										3
									
								
								config/packages/chill_calendar.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								config/packages/chill_calendar.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| chill_calendar: | ||||
|     remote_calendars_sync: | ||||
|         enabled: false | ||||
							
								
								
									
										5
									
								
								config/packages/chill_doc_generator.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								config/packages/chill_doc_generator.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | ||||
| chill_doc_generator: | ||||
|     driver: | ||||
|         type: relatorio | ||||
|         relatorio: | ||||
|             url: 'http://%env(RELATORIO_HOST)%:%env(RELATORIO_PORT)%/' | ||||
							
								
								
									
										11
									
								
								config/packages/chill_workflow_signature_documents.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								config/packages/chill_workflow_signature_documents.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | ||||
| chill_main: | ||||
|     workflow_signature: | ||||
|         base_signer: | ||||
|             document_kinds: | ||||
|                 - { key: id_card, labels: [ { lang: fr, label: "Carte d'identité" } ] } | ||||
|                 - { key: passport, labels: [ { lang: fr, label: "Passeport" } ] } | ||||
|                 - { key: drivers_license, labels: [ { lang: fr, label: "Permis de conduire" } ] } | ||||
|                 - { key: visa_long_stay, labels: [ { lang: fr, label: "Visa de long séjour" } ] } | ||||
|                 - { key: resident_permit, labels: [ { lang: fr, label: "Carte de séjour" } ] } | ||||
|                 - { key: residency_card, labels: [ { lang: fr, label: "Carte de résident" } ] } | ||||
|                 - { key: provisionary_residency_permit, labels: [ { lang: fr, label: "Autorisation provisoire de séjour" } ] } | ||||
							
								
								
									
										5
									
								
								config/packages/debug.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								config/packages/debug.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | ||||
| 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)%" | ||||
							
								
								
									
										38
									
								
								config/packages/doctrine.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								config/packages/doctrine.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,38 @@ | ||||
| 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 | ||||
							
								
								
									
										2
									
								
								config/packages/doctrine_migrations.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								config/packages/doctrine_migrations.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,2 @@ | ||||
| doctrine_migrations: | ||||
|     enable_profiler: false | ||||
| @@ -7,24 +7,15 @@ doctrine_migrations: | ||||
|         'Chill\Migrations\CustomFields': '@ChillCustomFieldsBundle/migrations' | ||||
|         'Chill\Migrations\Event': '@ChillEventBundle/migrations' | ||||
|         'Chill\Migrations\Person': '@ChillPersonBundle/migrations' | ||||
|         'Chill\Migrations\Report': '@ChillReportBundle/migrations' | ||||
|         'Chill\Migrations\Task': '@ChillTaskBundle/migrations' | ||||
|         'Chill\Migrations\ThirdParty': '@ChillThirdPartyBundle/migrations' | ||||
|         'Chill\Migrations\AsideActivity': '@ChillAsideActivityBundle/migrations' | ||||
|         'Chill\Migrations\DocGenerator': '@ChillDocGeneratorBundle/migrations' | ||||
|         'Chill\Migrations\AsideActivity': '@ChillAsideActivityBundle/migrations' | ||||
|         'Chill\Migrations\Calendar': '@ChillCalendarBundle/migrations' | ||||
|         'Chill\Migrations\Budget': '@ChillBudgetBundle/migrations' | ||||
| 
 | ||||
|         'Chill\Migrations\Report': '@ChillReportBundle/migrations' | ||||
|     all_or_nothing: | ||||
|         true | ||||
| 
 | ||||
|     services: | ||||
|         'Doctrine\Migrations\Version\Comparator': 'Chill\MainBundle\Doctrine\Migrations\VersionComparator' | ||||
| 
 | ||||
|     storage: | ||||
|         table_storage: | ||||
|             table_name: 'migration_versions' | ||||
|             version_column_name: 'version' | ||||
|             version_column_length: 1024 | ||||
|             executed_at_column_name: 'executed_at' | ||||
|             execution_time_column_name: 'execution_time' | ||||
| @@ -1,16 +1,6 @@ | ||||
| # see https://symfony.com/doc/current/reference/configuration/framework.html | ||||
| framework: | ||||
|     secret: '%env(APP_SECRET)%' | ||||
| 
 | ||||
|     http_client: | ||||
|         default_options: | ||||
|             verify_peer: false | ||||
|             verify_host: false | ||||
| 
 | ||||
|     trusted_hosts: | ||||
|         - '^(localhost|127.0.0.1|web)$' | ||||
|         - '%env(resolve:TRUSTED_HOSTS)%' | ||||
| 
 | ||||
|     #csrf_protection: true | ||||
|     http_method_override: false | ||||
| 
 | ||||
| @@ -27,12 +17,6 @@ framework: | ||||
|     php_errors: | ||||
|         log: true | ||||
| 
 | ||||
|     #error_controller: App\Controller\ErrorController::show | ||||
| 
 | ||||
|     ## sf4 check: ou à déplacer dans un chill.yaml | ||||
|     assets: | ||||
|         json_manifest_path: '%kernel.project_dir%/public/build/manifest.json' | ||||
| 
 | ||||
| when@test: | ||||
|     framework: | ||||
|         test: true | ||||
| @@ -1,3 +1,8 @@ | ||||
| framework: | ||||
|     assets: | ||||
|         json_manifest_path: '%kernel.project_dir%/public/build/manifest.json' | ||||
| 
 | ||||
| when@test: | ||||
|     framework: | ||||
|         assets: | ||||
|             json_manifest_path: null | ||||
							
								
								
									
										3
									
								
								config/packages/knpu_oauth2_client.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								config/packages/knpu_oauth2_client.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| knpu_oauth2_client: | ||||
|     clients: | ||||
|         # configure your clients as described here: https://github.com/knpuniversity/oauth2-client-bundle#configuration | ||||
							
								
								
									
										4
									
								
								config/packages/lexik_jwt_authentication.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								config/packages/lexik_jwt_authentication.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,4 @@ | ||||
| lexik_jwt_authentication: | ||||
|     secret_key: '%env(resolve:JWT_SECRET_KEY)%' | ||||
|     public_key: '%env(resolve:JWT_PUBLIC_KEY)%' | ||||
|     pass_phrase: '%env(JWT_PASSPHRASE)%' | ||||
							
								
								
									
										9
									
								
								config/packages/lexik_jwt_authentication_chill.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								config/packages/lexik_jwt_authentication_chill.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | ||||
| 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 | ||||
							
								
								
									
										3
									
								
								config/packages/mailer.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								config/packages/mailer.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| framework: | ||||
|     mailer: | ||||
|         dsn: '%env(MAILER_DSN)%' | ||||
							
								
								
									
										4
									
								
								config/packages/mailer_chill.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								config/packages/mailer_chill.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,4 @@ | ||||
| framework: | ||||
|     mailer: | ||||
|         envelope: | ||||
|             sender: '%env(NOTIFICATION_FROM_EMAIL)%' | ||||
							
								
								
									
										75
									
								
								config/packages/messenger.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										75
									
								
								config/packages/messenger.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,75 @@ | ||||
| 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://' | ||||
							
								
								
									
										13
									
								
								config/packages/misd_phone_number.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								config/packages/misd_phone_number.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | ||||
| # 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 | ||||
							
								
								
									
										62
									
								
								config/packages/monolog.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								config/packages/monolog.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,62 @@ | ||||
| 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 | ||||
							
								
								
									
										12
									
								
								config/packages/nelmio_alice.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								config/packages/nelmio_alice.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,12 @@ | ||||
| when@dev: &dev | ||||
|     nelmio_alice: | ||||
|         functions_blacklist: | ||||
|             - 'current' | ||||
|             - 'shuffle' | ||||
|             - 'date' | ||||
|             - 'time' | ||||
|             - 'file' | ||||
|             - 'md5' | ||||
|             - 'sha1' | ||||
|  | ||||
| when@test: *dev | ||||
| @@ -7,15 +7,5 @@ services: | ||||
|     Psr\Http\Message\UploadedFileFactoryInterface: '@nyholm.psr7.psr17_factory' | ||||
|     Psr\Http\Message\UriFactoryInterface: '@nyholm.psr7.psr17_factory' | ||||
| 
 | ||||
|     # Register nyholm/psr7 services for autowiring with HTTPlug factories | ||||
|     Http\Message\MessageFactory: '@nyholm.psr7.httplug_factory' | ||||
|     Http\Message\RequestFactory: '@nyholm.psr7.httplug_factory' | ||||
|     Http\Message\ResponseFactory: '@nyholm.psr7.httplug_factory' | ||||
|     Http\Message\StreamFactory: '@nyholm.psr7.httplug_factory' | ||||
|     Http\Message\UriFactory: '@nyholm.psr7.httplug_factory' | ||||
| 
 | ||||
|     nyholm.psr7.psr17_factory: | ||||
|         class: Nyholm\Psr7\Factory\Psr17Factory | ||||
| 
 | ||||
|     nyholm.psr7.httplug_factory: | ||||
|         class: Nyholm\Psr7\Factory\HttplugFactory | ||||
| @@ -5,3 +5,8 @@ framework: | ||||
|         # 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: http://localhost | ||||
| 
 | ||||
| when@prod: | ||||
|     framework: | ||||
|         router: | ||||
|             strict_requirements: null | ||||
							
								
								
									
										8
									
								
								config/packages/routing_chill.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								config/packages/routing_chill.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | ||||
| 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,68 +1,68 @@ | ||||
| security: | ||||
| 
 | ||||
|     access_decision_manager: | ||||
|         strategy: unanimous | ||||
|         allow_if_all_abstain: false | ||||
| 
 | ||||
|     enable_authenticator_manager: true | ||||
|     # https://symfony.com/doc/current/security.html#registering-the-user-hashing-passwords | ||||
|     password_hashers: | ||||
|         Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface: 'auto' | ||||
|     # https://symfony.com/doc/current/security.html#loading-the-user-the-user-provider | ||||
|     providers: | ||||
| 
 | ||||
|         chain_provider: | ||||
|             chain : | ||||
|                 providers: [in_memory, users] | ||||
|         in_memory: | ||||
|         # providers added by chill-bundles recipes\n | ||||
|         # those providers are required to make chill working | ||||
|         chill_chain_provider: | ||||
|             chain: | ||||
|                 providers: [chill_in_memory, chill_users] | ||||
|         chill_in_memory: | ||||
|             memory: | ||||
|                 users: | ||||
|                     admin: { password: '%env(resolve:ADMIN_PASSWORD)%', roles: ['ROLE_ADMIN', 'ROLE_ALLOWED_TO_SWITCH', 'ROLE_USER'] } | ||||
|         users: | ||||
|         chill_users: | ||||
|             id: chill.main.user_provider | ||||
| 
 | ||||
|     encoders: | ||||
|         Chill\MainBundle\Entity\User: | ||||
|             algorithm: bcrypt | ||||
|         Symfony\Component\Security\Core\User\User: plaintext | ||||
| 
 | ||||
|         # end of providers added by chill-bundles recipes\n | ||||
|         # all other providers might be removed, unless you have specific needs\n | ||||
|     firewalls: | ||||
| 
 | ||||
|         dev: | ||||
|             pattern: ^/(_(profiler|wdt)|css|images|js)/ | ||||
|             security: false | ||||
| 
 | ||||
|         # those lines are added by chill-bundles recipe, and are requires to make chill-bundles working | ||||
|         # this firewall is in use for wopi endpoint, which requires | ||||
|         wopi: | ||||
|             pattern: ^/wopi | ||||
|             provider: chain_provider | ||||
|             provider: chill_chain_provider | ||||
|             stateless: true | ||||
|             guard: | ||||
|                 authenticators: | ||||
|                     - lexik_jwt_authentication.jwt_token_authenticator | ||||
| 
 | ||||
|         main: | ||||
|             # remove during upgrade from symfony 4 to symfony 5 TODO check this | ||||
|             #anonymous: ~ | ||||
|             provider: chain_provider | ||||
|         dav: | ||||
|             pattern: ^/dav | ||||
|             provider: chill_chain_provider | ||||
|             stateless: true | ||||
|             guard: | ||||
|                 authenticators: | ||||
|                     - Chill\DocStoreBundle\Security\Guard\JWTOnDavUrlAuthenticator | ||||
|         # this firewall is the main firewall for chill. It should be the last one in the stack, | ||||
|         # unless you have specific needs | ||||
|         chill_main: | ||||
|             provider: chill_chain_provider | ||||
|             entry_point: form_login | ||||
|             form_login: | ||||
|                 csrf_parameter: _csrf_token | ||||
|                 csrf_token_id: authenticate | ||||
|                 #csrf_provider: security.csrf.token_manager | ||||
|             # remove during upgrade from symfony 4 to symfony 5 TODO check this | ||||
|             # logout_on_user_change: true | ||||
|             logout: | ||||
|                 path: /logout | ||||
| 
 | ||||
|             # uncomment to enable impersonate mode in Chill | ||||
|             # https://symfony.com/doc/current/security/impersonating_user.html | ||||
|             switch_user: true | ||||
| 
 | ||||
|             # end of lines added by chill-bundles recipe | ||||
|             # activate different ways to authenticate | ||||
|             # https://symfony.com/doc/current/security.html#firewalls-authentication | ||||
|             # https://symfony.com/doc/current/security.html#the-firewall | ||||
| 
 | ||||
|             # https://symfony.com/doc/current/security/impersonating_user.html | ||||
|             # switch_user: true | ||||
| 
 | ||||
|     # Easy way to control access for large sections of your site | ||||
|     # Note: Only the *first* access control that matches will be used | ||||
|     access_control: | ||||
|         # those lines are added by chill-bundles recipes, and are requires to make chill-bundles working | ||||
|         - { path: ^/(login|logout), roles: IS_AUTHENTICATED_ANONYMOUSLY } | ||||
|         - { path: ^/public, roles: IS_AUTHENTICATED_ANONYMOUSLY } | ||||
|         - { path: ^/wopi, roles: IS_AUTHENTICATED_FULLY } | ||||
| @@ -75,6 +75,7 @@ security: | ||||
|         - { path: ^/([a-z]+/)?admin, roles: ROLE_ADMIN } | ||||
|         # other pages, only for regular user (no admin) | ||||
|         - { path: ^/, roles: ROLE_USER } | ||||
|         # this is the end of line added by chill-project/chill-bundles recipes | ||||
| 
 | ||||
| when@test: | ||||
|     security: | ||||
							
								
								
									
										9
									
								
								config/packages/security_chill.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								config/packages/security_chill.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | ||||
| security: | ||||
|     access_decision_manager: | ||||
|         strategy: unanimous | ||||
|         allow_if_all_abstain: false | ||||
|  | ||||
| when@test: | ||||
|     security: | ||||
|         role_hierarchy: | ||||
|             CHILL_MASTER_ROLE: [ CHILL_INHERITED_ROLE_1 ] | ||||
							
								
								
									
										7
									
								
								config/packages/translation.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								config/packages/translation.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | ||||
| framework: | ||||
|     default_locale: en | ||||
|     translator: | ||||
|         default_path: '%kernel.project_dir%/translations' | ||||
|         fallbacks: | ||||
|             - en | ||||
|         providers: | ||||
							
								
								
									
										4
									
								
								config/packages/translation_chill.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								config/packages/translation_chill.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,4 @@ | ||||
| framework: | ||||
|     default_locale:  '%env(resolve:LOCALE)%' | ||||
|     translator: | ||||
|         fallbacks: [ '%env(resolve:LOCALE)%' ] | ||||
							
								
								
									
										6
									
								
								config/packages/twig.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								config/packages/twig.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | ||||
| twig: | ||||
|     default_path: '%kernel.project_dir%/templates' | ||||
|  | ||||
| when@test: | ||||
|     twig: | ||||
|         strict_variables: true | ||||
| @@ -1,9 +1,4 @@ | ||||
| twig: | ||||
|     default_path: '%kernel.project_dir%/templates' | ||||
|     debug: '%kernel.debug%' | ||||
|     strict_variables: '%kernel.debug%' | ||||
|     exception_controller: null | ||||
| 
 | ||||
|     ## In Symfony 5, bootstrap_5 theme is supported. But not yet in sf4 !! | ||||
|     # see sf5 https://symfony.com/doc/current/form/form_themes.html | ||||
|     # see sf4 https://symfony.com/doc/4.4/form/form_themes.html | ||||
| @@ -14,4 +9,8 @@ twig: | ||||
|     # and adapt it lightly. | ||||
|     # | ||||
|     form_themes: ['@ChillMain/Form/bootstrap5/bootstrap_5_horizontal_layout.html.twig'] | ||||
|     #form_themes: ['bootstrap_5_horizontal_layout.html.twig'] | ||||
| 
 | ||||
| when@dev: | ||||
|     twig: | ||||
|         globals: | ||||
|             responsive_debug: false | ||||
| @@ -6,3 +6,8 @@ framework: | ||||
|         # For instance, basic validation constraints will be inferred from Doctrine's metadata. | ||||
|         #auto_mapping: | ||||
|         #    App\Entity\: [] | ||||
| 
 | ||||
| when@test: | ||||
|     framework: | ||||
|         validation: | ||||
|             not_compromised_password: false | ||||
							
								
								
									
										15
									
								
								config/packages/web_profiler.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								config/packages/web_profiler.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,15 @@ | ||||
| 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,16 +1,18 @@ | ||||
| --- | ||||
| webpack_encore: | ||||
|     # The path where Encore is building the assets - i.e. Encore.setOutputPath() | ||||
|     output_path: '%kernel.project_dir%/public/build' | ||||
| 
 | ||||
|     # If multiple builds are defined (as shown below), you can disable the default build: | ||||
|     # output_path: false | ||||
| 
 | ||||
|     # Set attributes that will be rendered on all script and link tags | ||||
|     script_attributes: | ||||
|         defer: true | ||||
|         # Uncomment (also under link_attributes) if using Turbo Drive | ||||
|         # https://turbo.hotwired.dev/handbook/drive#reloading-when-assets-change | ||||
|         # 'data-turbo-track': reload | ||||
|     # link_attributes: | ||||
|     # | ||||
|         # Uncomment if using Turbo Drive | ||||
|         # 'data-turbo-track': reload | ||||
| 
 | ||||
|     # If using Encore.enableIntegrityHashes() and need the crossorigin attribute (default: false, or use 'anonymous' or 'use-credentials') | ||||
|     # crossorigin: 'anonymous' | ||||
| @@ -23,11 +25,17 @@ webpack_encore: | ||||
| 
 | ||||
|     # If you have multiple builds: | ||||
|     # builds: | ||||
|         # pass "frontend" as the 3rg arg to the Twig functions | ||||
|         # {{ encore_entry_script_tags('entry1', null, 'frontend') }} | ||||
| 
 | ||||
|         # frontend: '%kernel.project_dir%/public/frontend/build' | ||||
| 
 | ||||
|     # Cache the entrypoints.json (rebuild Symfony's cache when entrypoints.json changes) | ||||
|     # Put in config/packages/prod/webpack_encore.yaml | ||||
|     # cache: true | ||||
|         # pass the build name as the 3rd argument to the Twig functions | ||||
|         # {{ encore_entry_script_tags('entry1', null, 'frontend') }} | ||||
| 
 | ||||
| #when@prod: | ||||
| #    webpack_encore: | ||||
| #        # Cache the entrypoints.json (rebuild Symfony's cache when entrypoints.json changes) | ||||
| #        # Available in version 1.2 | ||||
| #        cache: true | ||||
| 
 | ||||
| when@test: | ||||
|     webpack_encore: | ||||
|         strict_mode: false | ||||
							
								
								
									
										2
									
								
								config/packages/wopi.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								config/packages/wopi.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,2 @@ | ||||
| wopi: | ||||
|     server: "%env(resolve:EDITOR_SERVER)%" | ||||
							
								
								
									
										346
									
								
								config/packages/workflow_chill.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										346
									
								
								config/packages/workflow_chill.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,346 @@ | ||||
| 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 | ||||
							
								
								
									
										5
									
								
								config/preload.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								config/preload.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | ||||
| <?php | ||||
|  | ||||
| if (file_exists(dirname(__DIR__).'/var/cache/prod/App_KernelProdContainer.preload.php')) { | ||||
|     require dirname(__DIR__).'/var/cache/prod/App_KernelProdContainer.preload.php'; | ||||
| } | ||||
| @@ -4,5 +4,5 @@ | ||||
| 
 | ||||
| #load routes for chill bundles | ||||
| chill_routes: | ||||
|    resource: . | ||||
|    type: chill_routes | ||||
|     resource: . | ||||
|     type: chill_routes | ||||
							
								
								
									
										3
									
								
								config/routes/annotations.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								config/routes/annotations.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| kernel: | ||||
|     resource: ../../src/app/Kernel.php | ||||
|     type: annotation | ||||
							
								
								
									
										3
									
								
								config/routes/chill_wopi.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								config/routes/chill_wopi.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| chill_wopi_bundle: | ||||
|   resource: '@ChillWopiBundle/Resources/config/routes/routes.php' | ||||
|   prefix: /chill/wopi | ||||
							
								
								
									
										4
									
								
								config/routes/framework.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								config/routes/framework.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,4 @@ | ||||
| when@dev: | ||||
|     _errors: | ||||
|         resource: '@FrameworkBundle/Resources/config/routing/errors.xml' | ||||
|         prefix: /_error | ||||
							
								
								
									
										8
									
								
								config/routes/web_profiler.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								config/routes/web_profiler.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | ||||
| 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 | ||||
							
								
								
									
										3
									
								
								config/routes/wopi.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								config/routes/wopi.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| wopi_bundle: | ||||
|   resource: '@WopiBundle/Resources/config/routes/routes.php' | ||||
|   prefix: /wopi | ||||
| @@ -2,7 +2,7 @@ | ||||
| # Files in the packages/ subdirectory configure your dependencies. | ||||
| 
 | ||||
| # Put parameters here that don't need to change on each machine where the app is deployed | ||||
| # https://symfony.com/doc/current/best_practices/configuration.html#application-related-configuration | ||||
| # https://symfony.com/doc/current/best_practices.html#use-parameters-for-application-configuration | ||||
| parameters: | ||||
| 
 | ||||
| services: | ||||
| @@ -11,5 +11,3 @@ services: | ||||
|         autowire: true      # Automatically injects dependencies in your services. | ||||
|         autoconfigure: true # Automatically registers your services as commands, event subscribers, etc. | ||||
| 
 | ||||
|     # add more service definitions when explicit configuration is needed | ||||
|     # please note that last definitions always *replace* previous ones | ||||
							
								
								
									
										34
									
								
								docs/source/development/code-quality.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								docs/source/development/code-quality.rst
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,34 @@ | ||||
| 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 | ||||
|  | ||||
							
								
								
									
										125
									
								
								docs/source/installation/enable-collabora-for-dev.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										125
									
								
								docs/source/installation/enable-collabora-for-dev.rst
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,125 @@ | ||||
|  | ||||
| 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,6 +17,27 @@ 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 | ||||
| ============ | ||||
|  | ||||
| @@ -36,341 +57,11 @@ 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. | ||||
|  | ||||
|  | ||||
| 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-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! | ||||
|  | ||||
| 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 | ||||
| ============= | ||||
| Instructions | ||||
| ============ | ||||
|  | ||||
| .. toctree:: | ||||
|    :maxdepth: 2 | ||||
|  | ||||
|    prod.rst | ||||
|    load-addresses.rst | ||||
|    prod-calendar-sms-sending.rst | ||||
|    msgraph-configure.rst | ||||
|    installation-development.rst | ||||
|    installation-production.rst | ||||
|   | ||||
							
								
								
									
										101
									
								
								docs/source/installation/installation-development.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										101
									
								
								docs/source/installation/installation-development.rst
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,101 @@ | ||||
| .. _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 | ||||
							
								
								
									
										328
									
								
								docs/source/installation/installation-production.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										328
									
								
								docs/source/installation/installation-production.rst
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,328 @@ | ||||
| .. _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 | ||||
| @@ -64,9 +64,9 @@ | ||||
|     "marked": "^12.0.2", | ||||
|     "masonry-layout": "^4.2.2", | ||||
|     "mime": "^4.0.0", | ||||
|     "swagger-ui": "^4.15.5", | ||||
|     "pdfjs-dist": "^4.3.136", | ||||
|     "vis-network": "^9.1.0", | ||||
|     "vue": "^3.2.37", | ||||
|     "vue": "^3.5.6", | ||||
|     "vue-i18n": "^9.1.6", | ||||
|     "vue-multiselect": "3.0.0-alpha.2", | ||||
|     "vue-toast-notification": "^3.1.2", | ||||
|   | ||||
| @@ -1,12 +1,21 @@ | ||||
| <?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="https://schema.phpunit.de/10.5/phpunit.xsd" backupGlobals="false" colors="true" bootstrap="tests/bootstrap.php"> | ||||
| <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" | ||||
| > | ||||
|   <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"/> | ||||
|     <env name="KERNEL_CLASS" value="\App\Kernel"/> | ||||
|       <server name="SYMFONY_PHPUNIT_REMOVE" value="" /> | ||||
|       <server name="SYMFONY_PHPUNIT_VERSION" value="9.5" /> | ||||
|       <ini name="date.timezone" value="Europe/Brussels" /> | ||||
|   </php> | ||||
|   <testsuites> | ||||
|     <!-- | ||||
|   | ||||
							
								
								
									
										9
									
								
								public/index.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								public/index.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | ||||
| <?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']); | ||||
| }; | ||||
							
								
								
									
										
											BIN
										
									
								
								resources/dev-certificate/dummy.p12
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								resources/dev-certificate/dummy.p12
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										51
									
								
								resources/dev-certificate/rootca.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								resources/dev-certificate/rootca.conf
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,51 @@ | ||||
| # | ||||
| # 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 | ||||
							
								
								
									
										30
									
								
								resources/dev-certificate/tsa/private/tsa.key
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								resources/dev-certificate/tsa/private/tsa.key
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,30 @@ | ||||
| -----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----- | ||||
							
								
								
									
										42
									
								
								resources/dev-certificate/tsa/tsa-chain.pem
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								resources/dev-certificate/tsa/tsa-chain.pem
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,42 @@ | ||||
| -----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----- | ||||
							
								
								
									
										84
									
								
								resources/dev-certificate/tsa/tsa.crt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										84
									
								
								resources/dev-certificate/tsa/tsa.crt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,84 @@ | ||||
| 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
									
								
								resources/dev-certificate/tsa_serial
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								resources/dev-certificate/tsa_serial
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| 08 | ||||
| @@ -12,8 +12,12 @@ 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; | ||||
| @@ -32,12 +36,12 @@ class LoadActivity extends AbstractFixture implements OrderedFixtureInterface | ||||
|         $this->faker = FakerFactory::create('fr_FR'); | ||||
|     } | ||||
|  | ||||
|     public function getOrder() | ||||
|     public function getOrder(): int | ||||
|     { | ||||
|         return 16400; | ||||
|     } | ||||
|  | ||||
|     public function load(ObjectManager $manager) | ||||
|     public function load(ObjectManager $manager): void | ||||
|     { | ||||
|         $persons = $this->em | ||||
|             ->getRepository(Person::class) | ||||
| @@ -84,49 +88,41 @@ class LoadActivity extends AbstractFixture implements OrderedFixtureInterface | ||||
|  | ||||
|     /** | ||||
|      * Return a random activityReason. | ||||
|      * | ||||
|      * @return \Chill\ActivityBundle\Entity\ActivityReason | ||||
|      */ | ||||
|     private function getRandomActivityReason() | ||||
|     private function getRandomActivityReason(): ActivityReason | ||||
|     { | ||||
|         $reasonRef = LoadActivityReason::$references[array_rand(LoadActivityReason::$references)]; | ||||
|  | ||||
|         return $this->getReference($reasonRef); | ||||
|         return $this->getReference($reasonRef, ActivityReason::class); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Return a random activityType. | ||||
|      * | ||||
|      * @return \Chill\ActivityBundle\Entity\ActivityType | ||||
|      */ | ||||
|     private function getRandomActivityType() | ||||
|     private function getRandomActivityType(): ActivityType | ||||
|     { | ||||
|         $typeRef = LoadActivityType::$references[array_rand(LoadActivityType::$references)]; | ||||
|  | ||||
|         return $this->getReference($typeRef); | ||||
|         return $this->getReference($typeRef, ActivityType::class); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Return a random scope. | ||||
|      * | ||||
|      * @return \Chill\MainBundle\Entity\Scope | ||||
|      */ | ||||
|     private function getRandomScope() | ||||
|     private function getRandomScope(): Scope | ||||
|     { | ||||
|         $scopeRef = LoadScopes::$references[array_rand(LoadScopes::$references)]; | ||||
|  | ||||
|         return $this->getReference($scopeRef); | ||||
|         return $this->getReference($scopeRef, Scope::class); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Return a random user. | ||||
|      * | ||||
|      * @return \Chill\MainBundle\Entity\User | ||||
|      */ | ||||
|     private function getRandomUser() | ||||
|     private function getRandomUser(): User | ||||
|     { | ||||
|         $userRef = array_rand(LoadUsers::$refs); | ||||
|  | ||||
|         return $this->getReference($userRef); | ||||
|         return $this->getReference($userRef, User::class); | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -38,7 +38,7 @@ class LoadActivityNotifications extends AbstractFixture implements DependentFixt | ||||
|         ], | ||||
|     ]; | ||||
|  | ||||
|     public function getDependencies() | ||||
|     public function getDependencies(): array | ||||
|     { | ||||
|         return [ | ||||
|             LoadActivity::class, | ||||
|   | ||||
| @@ -12,6 +12,7 @@ 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; | ||||
| @@ -23,12 +24,12 @@ class LoadActivityReason extends AbstractFixture implements OrderedFixtureInterf | ||||
| { | ||||
|     public static $references = []; | ||||
|  | ||||
|     public function getOrder() | ||||
|     public function getOrder(): int | ||||
|     { | ||||
|         return 16300; | ||||
|     } | ||||
|  | ||||
|     public function load(ObjectManager $manager) | ||||
|     public function load(ObjectManager $manager): void | ||||
|     { | ||||
|         $reasons = [ | ||||
|             [ | ||||
| @@ -56,7 +57,7 @@ class LoadActivityReason extends AbstractFixture implements OrderedFixtureInterf | ||||
|             $activityReason = (new ActivityReason()) | ||||
|                 ->setName($r['name']) | ||||
|                 ->setActive(true) | ||||
|                 ->setCategory($this->getReference($r['category'])); | ||||
|                 ->setCategory($this->getReference($r['category'], ActivityReasonCategory::class)); | ||||
|             $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() | ||||
|     public function getOrder(): int | ||||
|     { | ||||
|         return 16200; | ||||
|     } | ||||
|  | ||||
|     public function load(ObjectManager $manager) | ||||
|     public function load(ObjectManager $manager): void | ||||
|     { | ||||
|         $categs = [ | ||||
|             ['name' => ['fr' => 'Logement', 'en' => 'Housing', 'nl' => 'Woning']], | ||||
|   | ||||
| @@ -12,6 +12,7 @@ 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; | ||||
| @@ -23,12 +24,12 @@ class LoadActivityType extends Fixture implements OrderedFixtureInterface | ||||
| { | ||||
|     public static $references = []; | ||||
|  | ||||
|     public function getOrder() | ||||
|     public function getOrder(): int | ||||
|     { | ||||
|         return 16100; | ||||
|     } | ||||
|  | ||||
|     public function load(ObjectManager $manager) | ||||
|     public function load(ObjectManager $manager): void | ||||
|     { | ||||
|         $types = [ | ||||
|             // Exange | ||||
| @@ -57,7 +58,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'])) | ||||
|                 ->setCategory($this->getReference('activity_type_cat_'.$t['category'], ActivityTypeCategory::class)) | ||||
|                 ->setSocialIssuesVisible(1) | ||||
|                 ->setSocialActionsVisible(1); | ||||
|             $manager->persist($activityType); | ||||
|   | ||||
| @@ -23,12 +23,12 @@ class LoadActivityTypeCategory extends Fixture implements OrderedFixtureInterfac | ||||
| { | ||||
|     public static $references = []; | ||||
|  | ||||
|     public function getOrder() | ||||
|     public function getOrder(): int | ||||
|     { | ||||
|         return 16050; | ||||
|     } | ||||
|  | ||||
|     public function load(ObjectManager $manager) | ||||
|     public function load(ObjectManager $manager): void | ||||
|     { | ||||
|         $categories = [ | ||||
|             [ | ||||
|   | ||||
| @@ -15,7 +15,9 @@ 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; | ||||
| @@ -26,18 +28,18 @@ use Doctrine\Persistence\ObjectManager; | ||||
|  */ | ||||
| class LoadActivitytACL extends AbstractFixture implements OrderedFixtureInterface | ||||
| { | ||||
|     public function getOrder() | ||||
|     public function getOrder(): int | ||||
|     { | ||||
|         return 16000; | ||||
|     } | ||||
|  | ||||
|     public function load(ObjectManager $manager) | ||||
|     public function load(ObjectManager $manager): void | ||||
|     { | ||||
|         foreach (LoadPermissionsGroup::$refs as $permissionsGroupRef) { | ||||
|             $permissionsGroup = $this->getReference($permissionsGroupRef); | ||||
|             $permissionsGroup = $this->getReference($permissionsGroupRef, PermissionsGroup::class); | ||||
|  | ||||
|             foreach (LoadScopes::$references as $scopeRef) { | ||||
|                 $scope = $this->getReference($scopeRef); | ||||
|                 $scope = $this->getReference($scopeRef, Scope::class); | ||||
|                 // create permission group | ||||
|                 switch ($permissionsGroup->getName()) { | ||||
|                     case 'social': | ||||
|   | ||||
| @@ -107,7 +107,7 @@ class Activity implements AccompanyingPeriodLinkedWithSocialIssuesEntityInterfac | ||||
|     private ?Person $person = null; | ||||
|  | ||||
|     /** | ||||
|      * @var Collection<int, \Chill\PersonBundle\Entity\Person> | ||||
|      * @var Collection<int, Person> | ||||
|      */ | ||||
|     #[Groups(['read', 'docgen:read'])] | ||||
|     #[ORM\ManyToMany(targetEntity: Person::class)] | ||||
| @@ -132,7 +132,7 @@ class Activity implements AccompanyingPeriodLinkedWithSocialIssuesEntityInterfac | ||||
|     private string $sentReceived = ''; | ||||
|  | ||||
|     /** | ||||
|      * @var Collection<int, \Chill\PersonBundle\Entity\SocialWork\SocialAction> | ||||
|      * @var Collection<int, SocialAction> | ||||
|      */ | ||||
|     #[Groups(['read', 'docgen:read'])] | ||||
|     #[ORM\ManyToMany(targetEntity: SocialAction::class)] | ||||
|   | ||||
| @@ -32,8 +32,8 @@ class ActivityReason | ||||
|     #[ORM\GeneratedValue(strategy: 'AUTO')] | ||||
|     private ?int $id = null; | ||||
|  | ||||
|     #[ORM\Column(type: \Doctrine\DBAL\Types\Types::JSON)] | ||||
|     private array $name; | ||||
|     #[ORM\Column(type: \Doctrine\DBAL\Types\Types::JSON, options: ['default' => '{}', 'jsonb' => true])] | ||||
|     private array $name = []; | ||||
|  | ||||
|     /** | ||||
|      * Get active. | ||||
|   | ||||
| @@ -31,11 +31,9 @@ class ActivityReasonCategory implements \Stringable | ||||
|     #[ORM\GeneratedValue(strategy: 'AUTO')] | ||||
|     private ?int $id = null; | ||||
|  | ||||
|     /** | ||||
|      * @var string | ||||
|      */ | ||||
|     #[ORM\Column(type: \Doctrine\DBAL\Types\Types::JSON)] | ||||
|     private $name; | ||||
|  | ||||
|     #[ORM\Column(type: \Doctrine\DBAL\Types\Types::JSON, options: ['default' => '{}', 'jsonb' => true])] | ||||
|     private array $name = []; | ||||
|  | ||||
|     /** | ||||
|      * Array of ActivityReason. | ||||
| @@ -127,11 +125,9 @@ class ActivityReasonCategory implements \Stringable | ||||
|     /** | ||||
|      * Set name. | ||||
|      * | ||||
|      * @param array $name | ||||
|      * | ||||
|      * @return ActivityReasonCategory | ||||
|      */ | ||||
|     public function setName($name) | ||||
|     public function setName(array $name) | ||||
|     { | ||||
|         $this->name = $name; | ||||
|  | ||||
|   | ||||
| @@ -12,6 +12,8 @@ declare(strict_types=1); | ||||
| namespace Chill\ActivityBundle\Repository; | ||||
|  | ||||
| use Chill\ActivityBundle\Entity\Activity; | ||||
| use Chill\DocStoreBundle\Entity\StoredObject; | ||||
| use Chill\DocStoreBundle\Repository\AssociatedEntityToStoredObjectInterface; | ||||
| use Chill\PersonBundle\Entity\AccompanyingPeriod; | ||||
| use Chill\PersonBundle\Entity\Person; | ||||
| use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; | ||||
| @@ -23,7 +25,7 @@ use Doctrine\Persistence\ManagerRegistry; | ||||
|  * @method Activity[]    findAll() | ||||
|  * @method Activity[]    findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) | ||||
|  */ | ||||
| class ActivityRepository extends ServiceEntityRepository | ||||
| class ActivityRepository extends ServiceEntityRepository implements AssociatedEntityToStoredObjectInterface | ||||
| { | ||||
|     public function __construct(ManagerRegistry $registry) | ||||
|     { | ||||
| @@ -97,4 +99,16 @@ class ActivityRepository extends ServiceEntityRepository | ||||
|  | ||||
|         return $qb->getQuery()->getResult(); | ||||
|     } | ||||
|  | ||||
|     public function findAssociatedEntityToStoredObject(StoredObject $storedObject): ?Activity | ||||
|     { | ||||
|         $qb = $this->createQueryBuilder('a'); | ||||
|         $query = $qb | ||||
|             ->leftJoin('a.documents', 'ad') | ||||
|             ->where('ad.id = :storedObjectId') | ||||
|             ->setParameter('storedObjectId', $storedObject->getId()) | ||||
|             ->getQuery(); | ||||
|  | ||||
|         return $query->getOneOrNullResult(); | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -0,0 +1,54 @@ | ||||
| <?php | ||||
|  | ||||
| declare(strict_types=1); | ||||
|  | ||||
| /* | ||||
|  * Chill is a software for social workers | ||||
|  * | ||||
|  * For the full copyright and license information, please view | ||||
|  * the LICENSE file that was distributed with this source code. | ||||
|  */ | ||||
|  | ||||
| namespace Chill\ActivityBundle\Security\Authorization; | ||||
|  | ||||
| use Chill\ActivityBundle\Entity\Activity; | ||||
| use Chill\ActivityBundle\Repository\ActivityRepository; | ||||
| use Chill\DocStoreBundle\Repository\AssociatedEntityToStoredObjectInterface; | ||||
| use Chill\DocStoreBundle\Security\Authorization\StoredObjectRoleEnum; | ||||
| use Chill\DocStoreBundle\Security\Authorization\StoredObjectVoter\AbstractStoredObjectVoter; | ||||
| use Chill\MainBundle\Workflow\Helper\WorkflowRelatedEntityPermissionHelper; | ||||
| use Symfony\Component\Security\Core\Security; | ||||
|  | ||||
| class ActivityStoredObjectVoter extends AbstractStoredObjectVoter | ||||
| { | ||||
|     public function __construct( | ||||
|         private readonly ActivityRepository $repository, | ||||
|         Security $security, | ||||
|         WorkflowRelatedEntityPermissionHelper $workflowDocumentService, | ||||
|     ) { | ||||
|         parent::__construct($security, $workflowDocumentService); | ||||
|     } | ||||
|  | ||||
|     protected function getRepository(): AssociatedEntityToStoredObjectInterface | ||||
|     { | ||||
|         return $this->repository; | ||||
|     } | ||||
|  | ||||
|     protected function getClass(): string | ||||
|     { | ||||
|         return Activity::class; | ||||
|     } | ||||
|  | ||||
|     protected function attributeToRole(StoredObjectRoleEnum $attribute): string | ||||
|     { | ||||
|         return match ($attribute) { | ||||
|             StoredObjectRoleEnum::EDIT => ActivityVoter::UPDATE, | ||||
|             StoredObjectRoleEnum::SEE => ActivityVoter::SEE_DETAILS, | ||||
|         }; | ||||
|     } | ||||
|  | ||||
|     protected function canBeAssociatedWithWorkflow(): bool | ||||
|     { | ||||
|         return false; | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,41 @@ | ||||
| <?php | ||||
|  | ||||
| declare(strict_types=1); | ||||
|  | ||||
| /* | ||||
|  * Chill is a software for social workers | ||||
|  * | ||||
|  * For the full copyright and license information, please view | ||||
|  * the LICENSE file that was distributed with this source code. | ||||
|  */ | ||||
|  | ||||
| namespace Chill\Migrations\Activity; | ||||
|  | ||||
| use Doctrine\DBAL\Schema\Schema; | ||||
| use Doctrine\Migrations\AbstractMigration; | ||||
|  | ||||
| final class Version20240918142723 extends AbstractMigration | ||||
| { | ||||
|     public function getDescription(): string | ||||
|     { | ||||
|         return 'Fix not null and default values for activityreason, activityreasoncategory, comments on activity'; | ||||
|     } | ||||
|  | ||||
|     public function up(Schema $schema): void | ||||
|     { | ||||
|         $this->addSql('ALTER TABLE activity ALTER privatecomment_comments SET NOT NULL'); | ||||
|         $this->addSql('ALTER TABLE activityreason ALTER name SET DEFAULT \'{}\''); | ||||
|         $this->addSql('ALTER TABLE activityreason ALTER name SET NOT NULL'); | ||||
|         $this->addSql('ALTER INDEX idx_654a2fcd12469de2 RENAME TO IDX_AF82522312469DE2'); | ||||
|         $this->addSql('ALTER TABLE activityreasoncategory ALTER name SET DEFAULT \'{}\''); | ||||
|         $this->addSql('ALTER TABLE activityreasoncategory ALTER name SET NOT NULL'); | ||||
|     } | ||||
|  | ||||
|     public function down(Schema $schema): void | ||||
|     { | ||||
|         $this->addSql('ALTER TABLE activityreason ALTER name DROP DEFAULT'); | ||||
|         $this->addSql('ALTER TABLE activityreason ALTER name DROP NOT NULL'); | ||||
|         $this->addSql('ALTER TABLE activityreasoncategory ALTER name DROP DEFAULT'); | ||||
|         $this->addSql('ALTER TABLE activityreasoncategory ALTER name DROP NOT NULL'); | ||||
|     } | ||||
| } | ||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user