mirror of
				https://gitlab.com/Chill-Projet/chill-bundles.git
				synced 2025-11-03 18:58:24 +00:00 
			
		
		
		
	Compare commits
	
		
			2 Commits
		
	
	
		
			migrate_to
			...
			389-displa
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						
						
							
						
						a1d01b8998
	
				 | 
					
					
						|||
| 
						
						
							
						
						3fb8b688a5
	
				 | 
					
					
						
							
								
								
									
										6
									
								
								.changes/unreleased/DX-20250430-144550.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								.changes/unreleased/DX-20250430-144550.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
kind: DX
 | 
			
		||||
body: Remove dead code for wopi-link module
 | 
			
		||||
time: 2025-04-30T14:45:50.406111606+02:00
 | 
			
		||||
custom:
 | 
			
		||||
    Issue: "352"
 | 
			
		||||
    SchemaChange: No schema change
 | 
			
		||||
							
								
								
									
										6
									
								
								.changes/unreleased/DX-20250528-165813.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								.changes/unreleased/DX-20250528-165813.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
kind: DX
 | 
			
		||||
body: Replace library node-sass by sass, and upgrade bootstrap to version 5.3 (yarn upgrade / install is required)
 | 
			
		||||
time: 2025-05-28T16:58:13.226870341+02:00
 | 
			
		||||
custom:
 | 
			
		||||
    Issue: ""
 | 
			
		||||
    SchemaChange: No schema change
 | 
			
		||||
							
								
								
									
										7
									
								
								.changes/unreleased/Feature-20250424-142211.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								.changes/unreleased/Feature-20250424-142211.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,7 @@
 | 
			
		||||
kind: Feature
 | 
			
		||||
body: Add the document file name to the document title when a user upload a document,
 | 
			
		||||
  unless there is already a document title.
 | 
			
		||||
time: 2025-04-24T14:22:11.800975422+02:00
 | 
			
		||||
custom:
 | 
			
		||||
  Issue: "377"
 | 
			
		||||
  SchemaChange: No schema change
 | 
			
		||||
							
								
								
									
										6
									
								
								.changes/unreleased/Feature-20250520-095628.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								.changes/unreleased/Feature-20250520-095628.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
kind: Feature
 | 
			
		||||
body: Add desactivation date for social action and issue csv export
 | 
			
		||||
time: 2025-05-20T09:56:28.108941934+02:00
 | 
			
		||||
custom:
 | 
			
		||||
    Issue: ""
 | 
			
		||||
    SchemaChange: No schema change
 | 
			
		||||
							
								
								
									
										6
									
								
								.changes/unreleased/Feature-20250523-133341.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								.changes/unreleased/Feature-20250523-133341.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
kind: Feature
 | 
			
		||||
body: Add Emoji and Fullscreen feature to ckeditor configuration
 | 
			
		||||
time: 2025-05-23T13:33:41.645095128+02:00
 | 
			
		||||
custom:
 | 
			
		||||
    Issue: ""
 | 
			
		||||
    SchemaChange: No schema change
 | 
			
		||||
							
								
								
									
										6
									
								
								.changes/unreleased/Feature-20250523-133434.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								.changes/unreleased/Feature-20250523-133434.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
kind: Feature
 | 
			
		||||
body: Create editor which allow us to toggle between rich and simple text editor
 | 
			
		||||
time: 2025-05-23T13:34:34.56795603+02:00
 | 
			
		||||
custom:
 | 
			
		||||
    Issue: "321"
 | 
			
		||||
    SchemaChange: No schema change
 | 
			
		||||
							
								
								
									
										7
									
								
								.changes/unreleased/Fixed-20250424-133943.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								.changes/unreleased/Fixed-20250424-133943.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,7 @@
 | 
			
		||||
kind: Fixed
 | 
			
		||||
body: trying to prevent bug of typeerror in doc-history + improved display of document
 | 
			
		||||
  history
 | 
			
		||||
time: 2025-04-24T13:39:43.878468232+02:00
 | 
			
		||||
custom:
 | 
			
		||||
  Issue: "376"
 | 
			
		||||
  SchemaChange: No schema change
 | 
			
		||||
							
								
								
									
										7
									
								
								.changes/unreleased/Fixed-20250424-163746.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								.changes/unreleased/Fixed-20250424-163746.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,7 @@
 | 
			
		||||
kind: Fixed
 | 
			
		||||
body: Display previous participation in acc course work even if the person has left
 | 
			
		||||
  the acc course
 | 
			
		||||
time: 2025-04-24T16:37:46.970203594+02:00
 | 
			
		||||
custom:
 | 
			
		||||
  Issue: "381"
 | 
			
		||||
  SchemaChange: No schema change
 | 
			
		||||
							
								
								
									
										6
									
								
								.changes/unreleased/Fixed-20250505-102715.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								.changes/unreleased/Fixed-20250505-102715.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
kind: Fixed
 | 
			
		||||
body: Fix display of text in calendar events
 | 
			
		||||
time: 2025-05-05T10:27:15.461493066+02:00
 | 
			
		||||
custom:
 | 
			
		||||
    Issue: "372"
 | 
			
		||||
    SchemaChange: No schema change
 | 
			
		||||
							
								
								
									
										6
									
								
								.changes/unreleased/Fixed-20250514-145339.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								.changes/unreleased/Fixed-20250514-145339.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
kind: Fixed
 | 
			
		||||
body: Add missing translation for user_group.no_user_groups
 | 
			
		||||
time: 2025-05-14T14:53:39.53927329+02:00
 | 
			
		||||
custom:
 | 
			
		||||
    Issue: ""
 | 
			
		||||
    SchemaChange: No schema change
 | 
			
		||||
@@ -1,6 +0,0 @@
 | 
			
		||||
kind: Fixed
 | 
			
		||||
body: Fix the rendering of list of StoredObjectVersions, where there are kept version (before converting to pdf) and intermediate versions deleted
 | 
			
		||||
time: 2025-10-03T22:40:44.685474863+02:00
 | 
			
		||||
custom:
 | 
			
		||||
    Issue: ""
 | 
			
		||||
    SchemaChange: No schema change
 | 
			
		||||
							
								
								
									
										6
									
								
								.changes/unreleased/UX-20250423-172624.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								.changes/unreleased/UX-20250423-172624.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
kind: UX
 | 
			
		||||
body: Remove default filter in_progress for the page 'my tasks'; Allows for new tasks to be displayed upon opening of the page
 | 
			
		||||
time: 2025-04-23T17:26:24.45777387+02:00
 | 
			
		||||
custom:
 | 
			
		||||
    Issue: "374"
 | 
			
		||||
    SchemaChange: No schema change
 | 
			
		||||
@@ -1,22 +0,0 @@
 | 
			
		||||
## v3.12.0 - 2025-06-30
 | 
			
		||||
### Feature
 | 
			
		||||
* ([#377](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/377)) Add the document file name to the document title when a user upload a document, unless there is already a document title.   
 | 
			
		||||
* Add desactivation date for social action and issue csv export   
 | 
			
		||||
* Add Emoji and Fullscreen feature to ckeditor configuration   
 | 
			
		||||
* ([#321](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/321)) Create editor which allow us to toggle between rich and simple text editor   
 | 
			
		||||
* Do not remove workflow which are automatically canceled after staling for more than 30 days   
 | 
			
		||||
### Fixed
 | 
			
		||||
* ([#376](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/376)) trying to prevent bug of typeerror in doc-history + improved display of document history   
 | 
			
		||||
* ([#381](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/381)) Display previous participation in acc course work even if the person has left the acc course   
 | 
			
		||||
* ([#372](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/372)) Fix display of text in calendar events   
 | 
			
		||||
* Add missing translation for user_group.no_user_groups   
 | 
			
		||||
* Fix admin entity edit actions for event admin entities and activity reason (category) entities   
 | 
			
		||||
* ([#392](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/392)) Allow null and cast as string to setContent method for NewsItem
 | 
			
		||||
   
 | 
			
		||||
* ([#393](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/393)) Doc Generation: the "dump only" method send the document as an email attachment.   
 | 
			
		||||
### DX
 | 
			
		||||
* ([#352](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/352)) Remove dead code for wopi-link module   
 | 
			
		||||
* Replace library node-sass by sass, and upgrade bootstrap to version 5.3 (yarn upgrade / install is required)   
 | 
			
		||||
### UX
 | 
			
		||||
* ([#374](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/374)) Remove default filter in_progress for the page 'my tasks'; Allows for new tasks to be displayed upon opening of the page   
 | 
			
		||||
* Improve labeling of fields in person resource creation form   
 | 
			
		||||
@@ -1,3 +0,0 @@
 | 
			
		||||
## v3.12.1 - 2025-06-30
 | 
			
		||||
### Fixed
 | 
			
		||||
* Fix loading of the list of documents   
 | 
			
		||||
@@ -1,74 +0,0 @@
 | 
			
		||||
## v4.0.0 - 2025-07-08
 | 
			
		||||
### Feature
 | 
			
		||||
* ([#359](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/359)) Allow the merge of two accompanying period works
 | 
			
		||||
### Fixed
 | 
			
		||||
* ([#390](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/390)) Display the list of participant in the results, even if there is only one participant and that the search result display the requestor
 | 
			
		||||
* Fix admin entity edit actions for event admin entities and activity reason (category) entities
 | 
			
		||||
* Fix translations for social action fields in admin form: results, goals, evaluations
 | 
			
		||||
### DX
 | 
			
		||||
* Rewrite exports to run them asynchronously
 | 
			
		||||
 | 
			
		||||
  **Schema Change**: Add columns or tables
 | 
			
		||||
* Allow TranslatableMessage in flash messages
 | 
			
		||||
### UX
 | 
			
		||||
* Improve labeling of fields in person resource creation form
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
**Release notes**
 | 
			
		||||
 | 
			
		||||
- Add new methods to serialize data using the rector rule
 | 
			
		||||
- Remove all references to the Request in filters, aggregators, filters. Actually, the most frequent occurence is `$security->getUser()`.
 | 
			
		||||
- Refactor manually the initializeQuery method
 | 
			
		||||
- Remove the injection of ExportManager into the constructor of each export element:
 | 
			
		||||
 | 
			
		||||
  ```diff
 | 
			
		||||
 | 
			
		||||
  - class MyFormatter implements FormatterInterface
 | 
			
		||||
  + class MyFormatter implements FormatterInterface, \Chill\MainBundle\Export\ExportManagerAwareInterface
 | 
			
		||||
  {
 | 
			
		||||
  +    use \Chill\MainBundle\Export\Helper\ExportManagerAwareTrait;
 | 
			
		||||
 | 
			
		||||
  -    public function __construct(private ExportManager $exportmanager) {}
 | 
			
		||||
 | 
			
		||||
       public function MyMethod(): void
 | 
			
		||||
       {
 | 
			
		||||
  -          $this->exportManager->getFilter('alias');
 | 
			
		||||
  +          $this->getExportManager()->getFilter('alias');
 | 
			
		||||
       }
 | 
			
		||||
  }
 | 
			
		||||
  ```
 | 
			
		||||
- configure messenger to handle export in a queue:
 | 
			
		||||
 | 
			
		||||
```diff
 | 
			
		||||
# config/packages/messenger.yaml
 | 
			
		||||
framework:
 | 
			
		||||
    messenger:
 | 
			
		||||
        routing:
 | 
			
		||||
+            'Chill\MainBundle\Export\Messenger\ExportRequestGenerationMessage': priority
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
- add missing methods to exports, aggregators, filters, formatter:
 | 
			
		||||
 | 
			
		||||
  ```php
 | 
			
		||||
  public function normalizeFormData(array $formData): array;
 | 
			
		||||
 | 
			
		||||
  public function denormalizeFormData(array $formData, int $fromVersion): array;
 | 
			
		||||
  ```
 | 
			
		||||
 | 
			
		||||
  There are rector rules to generate those methods:
 | 
			
		||||
 | 
			
		||||
  - `Chill\Utils\Rector\Rector\ChillBundleAddNormalizationMethodsOnExportRector`
 | 
			
		||||
 | 
			
		||||
  See:
 | 
			
		||||
 | 
			
		||||
  ```php
 | 
			
		||||
  // upgrade chill exports
 | 
			
		||||
  $rectorConfig->rules([\Chill\Utils\Rector\Rector\ChillBundleAddNormalizationMethodsOnExportRector::class]);
 | 
			
		||||
  ```
 | 
			
		||||
 | 
			
		||||
  This rule will create most of the work necessary, but some manuals changes are still necessary:
 | 
			
		||||
 | 
			
		||||
  - we must set manually the correct repository for method `denormalizeDoctrineEntity`;
 | 
			
		||||
  - when the form data contains some entities, and the form type is not one of EntityType::class, PickUserDynamicType::class, PickUserLocationType::class, PickThirdpartyDynamicType::class, Select2CountryType::class, then we must handle the normalization manually (using the `\Chill\MainBundle\Export\ExportDataNormalizerTrait`)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -1,4 +0,0 @@
 | 
			
		||||
## v4.0.1 - 2025-07-08
 | 
			
		||||
### Fixed
 | 
			
		||||
* Fix package.json for compilation
 | 
			
		||||
   
 | 
			
		||||
@@ -1,4 +0,0 @@
 | 
			
		||||
## v4.0.2 - 2025-07-09
 | 
			
		||||
### Fixed
 | 
			
		||||
* Fix add missing translation   
 | 
			
		||||
* Fix the transfer of evaluations and documents during of accompanyingperiodwork   
 | 
			
		||||
@@ -1,12 +0,0 @@
 | 
			
		||||
## v4.1.0 - 2025-08-26
 | 
			
		||||
### Feature
 | 
			
		||||
* ([#400](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/400)) Add filter to social actions list to filter out actions where current user intervenes   
 | 
			
		||||
* ([#399](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/399)) Show filters on list pages unfolded by default   
 | 
			
		||||
* Expansion of event module with new fields in the creation form: thematic, internal/external animator, responsable, and budget elements. Filtering options in the event list + adapted exports   
 | 
			
		||||
 | 
			
		||||
  **Schema Change**: Add columns or tables
 | 
			
		||||
### Fixed
 | 
			
		||||
* ([#382](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/382)) adjust display logic for accompanying period dates, include closing date if period is closed.   
 | 
			
		||||
* ([#384](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/384)) add min and step attributes to integer field in DateIntervalType   
 | 
			
		||||
### UX
 | 
			
		||||
* Limit display of participations in event list   
 | 
			
		||||
@@ -1,10 +0,0 @@
 | 
			
		||||
## v4.2.0 - 2025-09-02
 | 
			
		||||
### Feature
 | 
			
		||||
* ([#64](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/64)) Add external identifier for a Person
 | 
			
		||||
 | 
			
		||||
  **Schema Change**: Add columns or tables
 | 
			
		||||
* ([#330](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/330) Allow users to choose for which notifications they want to receive an email
 | 
			
		||||
### Fixed
 | 
			
		||||
* ([#422](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/422)) Fixed html layout of pages for recovering password
 | 
			
		||||
* Fix typo in 'uncheckAll' script for centers selection
 | 
			
		||||
* Fix incorrect parameter name in event details link
 | 
			
		||||
@@ -1,6 +0,0 @@
 | 
			
		||||
## v4.2.1 - 2025-09-03
 | 
			
		||||
### Fixed
 | 
			
		||||
* Fix exports to work with DirectExportInterface   
 | 
			
		||||
### DX
 | 
			
		||||
* Improve error message when a stored object cannot be written on local disk
 | 
			
		||||
   
 | 
			
		||||
@@ -1,10 +0,0 @@
 | 
			
		||||
## v4.3.0 - 2025-09-08
 | 
			
		||||
### Feature
 | 
			
		||||
* ([#409](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/409)) Add 45 and 60 min calendar ranges   
 | 
			
		||||
* Add a command to generate a list of permissions   
 | 
			
		||||
* ([#412](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/412)) Add an absence end date   
 | 
			
		||||
 | 
			
		||||
  **Schema Change**: Add columns or tables
 | 
			
		||||
### Fixed
 | 
			
		||||
* fix date formatting in calendar range display   
 | 
			
		||||
* Change route URL to avoid clash with person duplicate controller method   
 | 
			
		||||
@@ -1,8 +0,0 @@
 | 
			
		||||
## v4.4.0 - 2025-09-11
 | 
			
		||||
### Feature
 | 
			
		||||
* ([#359](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/359)) Allow the merge of two accompanying period works   
 | 
			
		||||
* ([#369](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/369)) Duplication of a document to another accompanying period work evaluation   
 | 
			
		||||
* ([#359](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/359)) Fusion of two accompanying period works   
 | 
			
		||||
### Fixed
 | 
			
		||||
* Fix display of 'duplicate' and 'merge' buttons in CRUD templates   
 | 
			
		||||
* Fix saving notification preferences in user's profile   
 | 
			
		||||
@@ -1,3 +0,0 @@
 | 
			
		||||
## v4.4.1 - 2025-09-11
 | 
			
		||||
### Fixed
 | 
			
		||||
* fix translations in duplicate evaluation document modal and realign close modal button   
 | 
			
		||||
@@ -1,3 +0,0 @@
 | 
			
		||||
## v4.4.2 - 2025-09-12
 | 
			
		||||
### Fixed
 | 
			
		||||
* Fix document generation and workflow generation do not work on accompanying period work documents   
 | 
			
		||||
@@ -1,13 +0,0 @@
 | 
			
		||||
## v4.5.0 - 2025-10-03
 | 
			
		||||
### Feature
 | 
			
		||||
* Only allow delete of attachment on workflows that are not final   
 | 
			
		||||
* Move up signature buttons on index workflow page for easier access   
 | 
			
		||||
* Filter out document from attachment list if it is the same as the workflow document   
 | 
			
		||||
* Block edition on attached document on workflow, if the workflow is finalized or sent external   
 | 
			
		||||
* Convert workflow's attached document to pdf while sending them external   
 | 
			
		||||
* After a signature is canceled or rejected, going to a waiting page until the post-process routines apply a workflow transition   
 | 
			
		||||
### Fixed
 | 
			
		||||
* ([#426](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/426)) Increased the number of required characters when setting a new password in Chill from 9 to 14 - GDPR compliance   
 | 
			
		||||
* Fix permissions on storedObject which are subject by a workflow   
 | 
			
		||||
### DX
 | 
			
		||||
* Introduce a WaitingScreen component to display a waiting screen   
 | 
			
		||||
@@ -1,4 +0,0 @@
 | 
			
		||||
## v4.5.1 - 2025-10-03
 | 
			
		||||
### Fixed
 | 
			
		||||
* Add missing javascript dependency   
 | 
			
		||||
* Add exception handling for conversion of attachment on sending external, when documens are already in pdf   
 | 
			
		||||
							
								
								
									
										2
									
								
								.env
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								.env
									
									
									
									
									
								
							@@ -86,7 +86,7 @@ ADD_ADDRESS_MAP_CENTER_Z=15
 | 
			
		||||
## Redis Cache & redis database
 | 
			
		||||
REDIS_HOST=redis
 | 
			
		||||
REDIS_PORT=6379
 | 
			
		||||
REDIS_URL="redis://${REDIS_HOST}:${REDIS_PORT}"
 | 
			
		||||
REDIS_URL=redis://${REDIS_HOST}:${REDIS_PORT}
 | 
			
		||||
###< chill-project/chill-bundles ###
 | 
			
		||||
 | 
			
		||||
###> symfony/ovh-cloud-notifier ###
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										4
									
								
								.env.dev
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								.env.dev
									
									
									
									
									
								
							@@ -1,4 +0,0 @@
 | 
			
		||||
 | 
			
		||||
###> symfony/framework-bundle ###
 | 
			
		||||
APP_SECRET=72759e571285ef25677c88f967a73386
 | 
			
		||||
###< symfony/framework-bundle ###
 | 
			
		||||
							
								
								
									
										40
									
								
								.env.test
									
									
									
									
									
								
							
							
						
						
									
										40
									
								
								.env.test
									
									
									
									
									
								
							@@ -1,5 +1,39 @@
 | 
			
		||||
# define your env variables for the test env here
 | 
			
		||||
# variables for .env environement
 | 
			
		||||
# those variables suits for gitlab-ci
 | 
			
		||||
# Run tests from root to adapt your own environment
 | 
			
		||||
KERNEL_CLASS='App\Kernel'
 | 
			
		||||
APP_SECRET='$ecretf0rt3st'
 | 
			
		||||
SYMFONY_DEPRECATIONS_HELPER=999999
 | 
			
		||||
DEFAULT_CARRIER_CODE=TEST
 | 
			
		||||
 | 
			
		||||
ADMIN_PASSWORD=password
 | 
			
		||||
 | 
			
		||||
JWT_SECRET_KEY=%kernel.project_dir%/config/jwt/private.pem
 | 
			
		||||
JWT_PUBLIC_KEY=%kernel.project_dir%/config/jwt/public.pem
 | 
			
		||||
JWT_PASSPHRASE=2a30f6ba26521a2613821da35f28386e
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
MESSENGER_TRANSPORT_DSN=sync://
 | 
			
		||||
 | 
			
		||||
###> doctrine/doctrine-bundle ###
 | 
			
		||||
# Format described at https://www.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/configuration.html#connecting-using-a-url
 | 
			
		||||
# IMPORTANT: You MUST configure your server version, either here or in config/packages/doctrine.yaml
 | 
			
		||||
#
 | 
			
		||||
DATABASE_URL="postgresql://app:!ChangeMe!@127.0.0.1:5454/test?serverVersion=14&charset=utf8"
 | 
			
		||||
###< 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
 | 
			
		||||
 
 | 
			
		||||
@@ -7,6 +7,14 @@
 | 
			
		||||
        "message": "'app' is assigned a value but never used.",
 | 
			
		||||
        "hash": "f8c2979921289906e3baabae31ba101ead91504f"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillActivityBundle/Resources/public/vuejs/Activity/index.js",
 | 
			
		||||
        "line": 57,
 | 
			
		||||
        "column": 23,
 | 
			
		||||
        "ruleId": "@typescript-eslint/no-unused-vars",
 | 
			
		||||
        "message": "'event' is defined but never used.",
 | 
			
		||||
        "hash": "cf0cf378f71403f62a6425f384ccbbdec433d1f2"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillCalendarBundle/Resources/public/module/Invite/answer.js",
 | 
			
		||||
        "line": 7,
 | 
			
		||||
@@ -119,6 +127,46 @@
 | 
			
		||||
        "message": "'payload' is defined but never used.",
 | 
			
		||||
        "hash": "66c545917093ba30f1d6ca10ddaa676140e749bd"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillCalendarBundle/Resources/public/vuejs/MyCalendarRange/App2.vue",
 | 
			
		||||
        "line": 224,
 | 
			
		||||
        "column": 10,
 | 
			
		||||
        "ruleId": "@typescript-eslint/no-unused-vars",
 | 
			
		||||
        "message": "'reactive' is defined but never used.",
 | 
			
		||||
        "hash": "96ed76a9828138fb125fc36c4b55e900bbfe87c2"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillCalendarBundle/Resources/public/vuejs/MyCalendarRange/App2.vue",
 | 
			
		||||
        "line": 230,
 | 
			
		||||
        "column": 5,
 | 
			
		||||
        "ruleId": "@typescript-eslint/no-unused-vars",
 | 
			
		||||
        "message": "'DropArg' is defined but never used.",
 | 
			
		||||
        "hash": "bd405399a4091d65e8391404bfb0c4611816c8e0"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillCalendarBundle/Resources/public/vuejs/MyCalendarRange/App2.vue",
 | 
			
		||||
        "line": 251,
 | 
			
		||||
        "column": 9,
 | 
			
		||||
        "ruleId": "@typescript-eslint/no-unused-vars",
 | 
			
		||||
        "message": "'t' is assigned a value but never used.",
 | 
			
		||||
        "hash": "bc09207a496405f7a71c178e522b89aeb1f7ebd3"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillCalendarBundle/Resources/public/vuejs/MyCalendarRange/App2.vue",
 | 
			
		||||
        "line": 356,
 | 
			
		||||
        "column": 32,
 | 
			
		||||
        "ruleId": "@typescript-eslint/no-unused-vars",
 | 
			
		||||
        "message": "'arg' is defined but never used.",
 | 
			
		||||
        "hash": "aeae152f0669b946a1ad681dd52b0ef03393ae79"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillCalendarBundle/Resources/public/vuejs/MyCalendarRange/App2.vue",
 | 
			
		||||
        "line": 434,
 | 
			
		||||
        "column": 11,
 | 
			
		||||
        "ruleId": "@typescript-eslint/no-unused-vars",
 | 
			
		||||
        "message": "'changedEvent' is assigned a value but never used.",
 | 
			
		||||
        "hash": "a7a81a6bf09d00c0364e3aa8207ffad853f0547b"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillCalendarBundle/Resources/public/vuejs/MyCalendarRange/Components/EditLocation.vue",
 | 
			
		||||
        "line": 77,
 | 
			
		||||
@@ -351,6 +399,14 @@
 | 
			
		||||
        "message": "'error' is defined but never used.",
 | 
			
		||||
        "hash": "e26e5e101e90d2b7ee84d6f5de8c819e52129c17"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillDocStoreBundle/Resources/public/module/async_upload/index.ts",
 | 
			
		||||
        "line": 29,
 | 
			
		||||
        "column": 14,
 | 
			
		||||
        "ruleId": "@typescript-eslint/no-unused-vars",
 | 
			
		||||
        "message": "'vm' is defined but never used.",
 | 
			
		||||
        "hash": "8e7f5e89dd72c54459cf82156389b88988f97d63"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillDocStoreBundle/Resources/public/module/async_upload/uploader.js",
 | 
			
		||||
        "line": 39,
 | 
			
		||||
@@ -559,6 +615,14 @@
 | 
			
		||||
        "message": "'ref' is defined but never used.",
 | 
			
		||||
        "hash": "2a27cd6d06a26e1326654c929068e3704137e24b"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillDocStoreBundle/Resources/public/vuejs/StoredObjectButton/HistoryButton/HistoryButtonList.vue",
 | 
			
		||||
        "line": 57,
 | 
			
		||||
        "column": 17,
 | 
			
		||||
        "ruleId": "vue/valid-v-for",
 | 
			
		||||
        "message": "Custom elements in iteration require 'v-bind:key' directives.",
 | 
			
		||||
        "hash": "cce787939524e83dd135869e13738ef332d7156c"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillDocStoreBundle/Resources/public/vuejs/StoredObjectButton/WopiEditButton.vue",
 | 
			
		||||
        "line": 15,
 | 
			
		||||
@@ -919,6 +983,22 @@
 | 
			
		||||
        "message": "'_e' is defined but never used.",
 | 
			
		||||
        "hash": "1d6448401778e8c56554020fe5abd47851ed33f3"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/module/wopi-link/index.js",
 | 
			
		||||
        "line": 21,
 | 
			
		||||
        "column": 55,
 | 
			
		||||
        "ruleId": "@typescript-eslint/no-unused-vars",
 | 
			
		||||
        "message": "'e' is defined but never used.",
 | 
			
		||||
        "hash": "eae499e4f6e9f43a9d17f9cd917cb6d3d97be25c"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/page/export/download-export.js",
 | 
			
		||||
        "line": 3,
 | 
			
		||||
        "column": 55,
 | 
			
		||||
        "ruleId": "@typescript-eslint/no-unused-vars",
 | 
			
		||||
        "message": "'e' is defined but never used.",
 | 
			
		||||
        "hash": "088fd383e7807e484aefc9825209bc7c8942bd22"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/page/homepage_widget/index.js",
 | 
			
		||||
        "line": 9,
 | 
			
		||||
@@ -1009,19 +1089,115 @@
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress.vue",
 | 
			
		||||
        "line": 516,
 | 
			
		||||
        "column": 21,
 | 
			
		||||
        "ruleId": "vue/no-mutating-props",
 | 
			
		||||
        "message": "Unexpected mutation of \"context\" prop.",
 | 
			
		||||
        "hash": "984c4203f2ac1e1bb65f9ce76ecd03b763cfaa83"
 | 
			
		||||
        "line": 247,
 | 
			
		||||
        "column": 5,
 | 
			
		||||
        "ruleId": "@typescript-eslint/no-unused-vars",
 | 
			
		||||
        "message": "'postAddressToPerson' is defined but never used.",
 | 
			
		||||
        "hash": "8a41c437cf2b5554cbbe1704cd51f3102b3d5994"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress.vue",
 | 
			
		||||
        "line": 517,
 | 
			
		||||
        "line": 248,
 | 
			
		||||
        "column": 5,
 | 
			
		||||
        "ruleId": "@typescript-eslint/no-unused-vars",
 | 
			
		||||
        "message": "'postAddressToHousehold' is defined but never used.",
 | 
			
		||||
        "hash": "66dec84b2ece299daf21308e5e60d497ba442b27"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress.vue",
 | 
			
		||||
        "line": 490,
 | 
			
		||||
        "column": 21,
 | 
			
		||||
        "ruleId": "vue/no-mutating-props",
 | 
			
		||||
        "message": "Unexpected mutation of \"context\" prop.",
 | 
			
		||||
        "hash": "c9fb019bc21bfa77d989ed596913b99dd653c594"
 | 
			
		||||
        "hash": "0d3f40c47974a4371072b3b9ee04b197c830162d"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress.vue",
 | 
			
		||||
        "line": 491,
 | 
			
		||||
        "column": 21,
 | 
			
		||||
        "ruleId": "vue/no-mutating-props",
 | 
			
		||||
        "message": "Unexpected mutation of \"context\" prop.",
 | 
			
		||||
        "hash": "8e877b7e588c30e182f7b572bdb9685360f9cf99"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress.vue",
 | 
			
		||||
        "line": 508,
 | 
			
		||||
        "column": 47,
 | 
			
		||||
        "ruleId": "@typescript-eslint/no-unused-vars",
 | 
			
		||||
        "message": "'reject' is defined but never used.",
 | 
			
		||||
        "hash": "5a3e3401bc3c765d91faaf4cfde57697af1262b7"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress.vue",
 | 
			
		||||
        "line": 525,
 | 
			
		||||
        "column": 47,
 | 
			
		||||
        "ruleId": "@typescript-eslint/no-unused-vars",
 | 
			
		||||
        "message": "'reject' is defined but never used.",
 | 
			
		||||
        "hash": "35a741d90379574b9323279f5802193d0c98a9dc"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress.vue",
 | 
			
		||||
        "line": 553,
 | 
			
		||||
        "column": 47,
 | 
			
		||||
        "ruleId": "@typescript-eslint/no-unused-vars",
 | 
			
		||||
        "message": "'reject' is defined but never used.",
 | 
			
		||||
        "hash": "c23d1ddf6c0d10ae97948e74aee9c14b9320b86c"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress.vue",
 | 
			
		||||
        "line": 572,
 | 
			
		||||
        "column": 47,
 | 
			
		||||
        "ruleId": "@typescript-eslint/no-unused-vars",
 | 
			
		||||
        "message": "'reject' is defined but never used.",
 | 
			
		||||
        "hash": "4322e81c6ea9d9734c680633a724d5bd4fabacb2"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress.vue",
 | 
			
		||||
        "line": 803,
 | 
			
		||||
        "column": 47,
 | 
			
		||||
        "ruleId": "@typescript-eslint/no-unused-vars",
 | 
			
		||||
        "message": "'reject' is defined but never used.",
 | 
			
		||||
        "hash": "7928a6461b9d394c7d97f048933553936f7d8963"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress.vue",
 | 
			
		||||
        "line": 852,
 | 
			
		||||
        "column": 47,
 | 
			
		||||
        "ruleId": "@typescript-eslint/no-unused-vars",
 | 
			
		||||
        "message": "'reject' is defined but never used.",
 | 
			
		||||
        "hash": "e5afdb8efccb5470a08dde48f755b1268fa947b5"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressMore.vue",
 | 
			
		||||
        "line": 93,
 | 
			
		||||
        "column": 17,
 | 
			
		||||
        "ruleId": "vue/no-mutating-props",
 | 
			
		||||
        "message": "Unexpected mutation of \"entity\" prop.",
 | 
			
		||||
        "hash": "68f5e1cf5c03f9ada59c9e0afca0b74c7f3fca4b"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressMore.vue",
 | 
			
		||||
        "line": 101,
 | 
			
		||||
        "column": 17,
 | 
			
		||||
        "ruleId": "vue/no-mutating-props",
 | 
			
		||||
        "message": "Unexpected mutation of \"entity\" prop.",
 | 
			
		||||
        "hash": "50d730f6109092baff2db66adc44dc1315e2bda2"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressMore.vue",
 | 
			
		||||
        "line": 109,
 | 
			
		||||
        "column": 17,
 | 
			
		||||
        "ruleId": "vue/no-mutating-props",
 | 
			
		||||
        "message": "Unexpected mutation of \"entity\" prop.",
 | 
			
		||||
        "hash": "573e4c041ce663f28b933d7a675c2a525aba644c"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressMore.vue",
 | 
			
		||||
        "line": 117,
 | 
			
		||||
        "column": 17,
 | 
			
		||||
        "ruleId": "vue/no-mutating-props",
 | 
			
		||||
        "message": "Unexpected mutation of \"entity\" prop.",
 | 
			
		||||
        "hash": "293f845eeab515b1df4649d136c2d8219ed59c4d"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressMore.vue",
 | 
			
		||||
@@ -1048,180 +1224,204 @@
 | 
			
		||||
        "hash": "2d5a5e680ff207ad97c7e7b7d999064b561dfd8a"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressMore.vue",
 | 
			
		||||
        "line": 149,
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressSelection.vue",
 | 
			
		||||
        "line": 106,
 | 
			
		||||
        "column": 17,
 | 
			
		||||
        "ruleId": "vue/no-mutating-props",
 | 
			
		||||
        "message": "Unexpected mutation of \"entity\" prop.",
 | 
			
		||||
        "hash": "e4c1ecd7ae77d46ac3625c5bbe92a24d6a964db9"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressMore.vue",
 | 
			
		||||
        "line": 157,
 | 
			
		||||
        "column": 17,
 | 
			
		||||
        "ruleId": "vue/no-mutating-props",
 | 
			
		||||
        "message": "Unexpected mutation of \"entity\" prop.",
 | 
			
		||||
        "hash": "4dece2db87c6ce1c04ae06c088ddfe916c1c0c61"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressMore.vue",
 | 
			
		||||
        "line": 165,
 | 
			
		||||
        "column": 17,
 | 
			
		||||
        "ruleId": "vue/no-mutating-props",
 | 
			
		||||
        "message": "Unexpected mutation of \"entity\" prop.",
 | 
			
		||||
        "hash": "facc7a0f17bdf19396fae3d0de3da82e60503c0d"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressMore.vue",
 | 
			
		||||
        "line": 173,
 | 
			
		||||
        "column": 17,
 | 
			
		||||
        "ruleId": "vue/no-mutating-props",
 | 
			
		||||
        "message": "Unexpected mutation of \"entity\" prop.",
 | 
			
		||||
        "hash": "19de32c76518387218264d7c4dab914d143a9cca"
 | 
			
		||||
        "hash": "d52356f2af31d0167c02330ec22d09fbfa6b2b9f"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressSelection.vue",
 | 
			
		||||
        "line": 130,
 | 
			
		||||
        "line": 114,
 | 
			
		||||
        "column": 17,
 | 
			
		||||
        "ruleId": "vue/no-mutating-props",
 | 
			
		||||
        "message": "Unexpected mutation of \"entity\" prop.",
 | 
			
		||||
        "hash": "239ac02a02694d5b20ab30d4c7ce5838c51d1515"
 | 
			
		||||
        "hash": "c8e8e06f370f93bf05867e93b5f037dfa46937b1"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressSelection.vue",
 | 
			
		||||
        "line": 138,
 | 
			
		||||
        "column": 17,
 | 
			
		||||
        "ruleId": "vue/no-mutating-props",
 | 
			
		||||
        "message": "Unexpected mutation of \"entity\" prop.",
 | 
			
		||||
        "hash": "a54f9bc6d1edfa4df93c7dd7d409cfef3fccf99e"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressSelection.vue",
 | 
			
		||||
        "line": 152,
 | 
			
		||||
        "line": 128,
 | 
			
		||||
        "column": 13,
 | 
			
		||||
        "ruleId": "vue/no-mutating-props",
 | 
			
		||||
        "message": "Unexpected mutation of \"entity\" prop.",
 | 
			
		||||
        "hash": "74a5f664d18f3916ea908897fcd0291cb0128f29"
 | 
			
		||||
        "hash": "9abaf71ca4b4f292b3b01e724d0a7733365e71f1"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressSelection.vue",
 | 
			
		||||
        "line": 129,
 | 
			
		||||
        "column": 13,
 | 
			
		||||
        "ruleId": "vue/no-mutating-props",
 | 
			
		||||
        "message": "Unexpected mutation of \"entity\" prop.",
 | 
			
		||||
        "hash": "0b0743959778a9e3d93089b132608816ee4e6646"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressSelection.vue",
 | 
			
		||||
        "line": 132,
 | 
			
		||||
        "column": 13,
 | 
			
		||||
        "ruleId": "vue/no-mutating-props",
 | 
			
		||||
        "message": "Unexpected mutation of \"entity\" prop.",
 | 
			
		||||
        "hash": "9759da7b7859b8ee8efaf74876430658ac6b6fe2"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressSelection.vue",
 | 
			
		||||
        "line": 133,
 | 
			
		||||
        "column": 13,
 | 
			
		||||
        "ruleId": "vue/no-mutating-props",
 | 
			
		||||
        "message": "Unexpected mutation of \"entity\" prop.",
 | 
			
		||||
        "hash": "dba8be9a27ab74ec743b7d9e07c05d857b407dd3"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressSelection.vue",
 | 
			
		||||
        "line": 134,
 | 
			
		||||
        "column": 13,
 | 
			
		||||
        "ruleId": "vue/no-mutating-props",
 | 
			
		||||
        "message": "Unexpected mutation of \"entity\" prop.",
 | 
			
		||||
        "hash": "9b1f5bce779aafc46b19d7a5d266eaa29f8f9be9"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressSelection.vue",
 | 
			
		||||
        "line": 139,
 | 
			
		||||
        "column": 13,
 | 
			
		||||
        "ruleId": "vue/no-mutating-props",
 | 
			
		||||
        "message": "Unexpected mutation of \"entity\" prop.",
 | 
			
		||||
        "hash": "fe6fc4aea0994ba9da15b7c09d308842b67958cb"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressSelection.vue",
 | 
			
		||||
        "line": 153,
 | 
			
		||||
        "column": 13,
 | 
			
		||||
        "ruleId": "vue/no-mutating-props",
 | 
			
		||||
        "message": "Unexpected mutation of \"entity\" prop.",
 | 
			
		||||
        "hash": "740ea5d793c7a34c9f352d8b333f3aa04cc80ee8"
 | 
			
		||||
        "column": 55,
 | 
			
		||||
        "ruleId": "@typescript-eslint/no-unused-vars",
 | 
			
		||||
        "message": "'reject' is defined but never used.",
 | 
			
		||||
        "hash": "bd0e024fcad2e3f4566f15293e3c25c840f6dd3e"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressSelection.vue",
 | 
			
		||||
        "line": 156,
 | 
			
		||||
        "column": 13,
 | 
			
		||||
        "ruleId": "vue/no-mutating-props",
 | 
			
		||||
        "message": "Unexpected mutation of \"entity\" prop.",
 | 
			
		||||
        "hash": "af8aca18f0226a5988ed90d44d95e2d607bfb5e6"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressSelection.vue",
 | 
			
		||||
        "line": 157,
 | 
			
		||||
        "column": 13,
 | 
			
		||||
        "ruleId": "vue/no-mutating-props",
 | 
			
		||||
        "message": "Unexpected mutation of \"entity\" prop.",
 | 
			
		||||
        "hash": "7bc2453017793ae20cd6c10005f941d384b59d84"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressSelection.vue",
 | 
			
		||||
        "line": 158,
 | 
			
		||||
        "column": 13,
 | 
			
		||||
        "ruleId": "vue/no-mutating-props",
 | 
			
		||||
        "message": "Unexpected mutation of \"entity\" prop.",
 | 
			
		||||
        "hash": "571b4ee5f22358dd165ec59696bb3439b7c9ff6c"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressSelection.vue",
 | 
			
		||||
        "line": 163,
 | 
			
		||||
        "column": 13,
 | 
			
		||||
        "ruleId": "vue/no-mutating-props",
 | 
			
		||||
        "message": "Unexpected mutation of \"entity\" prop.",
 | 
			
		||||
        "hash": "cfcb5946c86e289fc61623a794284a5a272d02e8"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressSelection.vue",
 | 
			
		||||
        "line": 178,
 | 
			
		||||
        "line": 154,
 | 
			
		||||
        "column": 37,
 | 
			
		||||
        "ruleId": "vue/no-mutating-props",
 | 
			
		||||
        "message": "Unexpected mutation of \"entity\" prop.",
 | 
			
		||||
        "hash": "0ec402e43cb08bf129e0737c0d2c4f6d0c7af8bd"
 | 
			
		||||
        "hash": "596c4b180b926b7829f987384328bf5636cd367a"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressSelection.vue",
 | 
			
		||||
        "line": 196,
 | 
			
		||||
        "line": 171,
 | 
			
		||||
        "column": 59,
 | 
			
		||||
        "ruleId": "@typescript-eslint/no-unused-vars",
 | 
			
		||||
        "message": "'reject' is defined but never used.",
 | 
			
		||||
        "hash": "5b41d5f9b45da074fb7bbbbd45e0da501da72071"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressSelection.vue",
 | 
			
		||||
        "line": 172,
 | 
			
		||||
        "column": 41,
 | 
			
		||||
        "ruleId": "vue/no-mutating-props",
 | 
			
		||||
        "message": "Unexpected mutation of \"entity\" prop.",
 | 
			
		||||
        "hash": "ec178d33e067aac892e015002afb6f3a2ff98762"
 | 
			
		||||
        "hash": "d92b92a25043244cca809bd129633b7e024e26b4"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressSelection.vue",
 | 
			
		||||
        "line": 214,
 | 
			
		||||
        "line": 190,
 | 
			
		||||
        "column": 17,
 | 
			
		||||
        "ruleId": "vue/no-mutating-props",
 | 
			
		||||
        "message": "Unexpected mutation of \"entity\" prop.",
 | 
			
		||||
        "hash": "c0f4e5454e672b6064eb9cf6c235c6810f7bfa80"
 | 
			
		||||
        "hash": "dd9a85ea740742d620e864796f67c5bff834486d"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressSelection.vue",
 | 
			
		||||
        "line": 215,
 | 
			
		||||
        "line": 191,
 | 
			
		||||
        "column": 17,
 | 
			
		||||
        "ruleId": "vue/no-mutating-props",
 | 
			
		||||
        "message": "Unexpected mutation of \"entity\" prop.",
 | 
			
		||||
        "hash": "e3dd840d2474f9865a45822872bf9ecfb15961d7"
 | 
			
		||||
        "hash": "e3e59960d0d50709a57b336f66b586710b774892"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressSelection.vue",
 | 
			
		||||
        "line": 216,
 | 
			
		||||
        "line": 192,
 | 
			
		||||
        "column": 17,
 | 
			
		||||
        "ruleId": "vue/no-mutating-props",
 | 
			
		||||
        "message": "Unexpected mutation of \"entity\" prop.",
 | 
			
		||||
        "hash": "a32a60382b145cc7a4a7ebe01ec435b8e3103320"
 | 
			
		||||
        "hash": "fe11b0e54396511e7b3b08615a78d22fc27e2fad"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressSelection.vue",
 | 
			
		||||
        "line": 246,
 | 
			
		||||
        "line": 222,
 | 
			
		||||
        "column": 13,
 | 
			
		||||
        "ruleId": "vue/no-mutating-props",
 | 
			
		||||
        "message": "Unexpected mutation of \"entity\" prop.",
 | 
			
		||||
        "hash": "082447e5c731012f3acc282943502775dfd24797"
 | 
			
		||||
        "hash": "63c14c2150c33ec701bc4a0ff94efde69537d490"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
 | 
			
		||||
        "line": 118,
 | 
			
		||||
        "line": 96,
 | 
			
		||||
        "column": 20,
 | 
			
		||||
        "ruleId": "vue/no-mutating-props",
 | 
			
		||||
        "message": "Unexpected mutation of \"entity\" prop.",
 | 
			
		||||
        "hash": "d4fba4fe09af3c0937c0dd164928c8930c1591b5"
 | 
			
		||||
        "hash": "d2a9fdaeef0e2810f480022d4c6f99e4f76a818e"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
 | 
			
		||||
        "line": 118,
 | 
			
		||||
        "line": 96,
 | 
			
		||||
        "column": 20,
 | 
			
		||||
        "ruleId": "vue/no-side-effects-in-computed-properties",
 | 
			
		||||
        "message": "Unexpected side effect in \"cities\" computed property.",
 | 
			
		||||
        "hash": "1113a114d5aaf9f32f442916d25458541c5af35c"
 | 
			
		||||
        "hash": "dd92a60a9b1ebefeb9a90941d45326fbfa483733"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
 | 
			
		||||
        "line": 102,
 | 
			
		||||
        "column": 17,
 | 
			
		||||
        "ruleId": "vue/no-mutating-props",
 | 
			
		||||
        "message": "Unexpected mutation of \"entity\" prop.",
 | 
			
		||||
        "hash": "04be01ab638ce01f568fb0216929e65e1175ca23"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
 | 
			
		||||
        "line": 110,
 | 
			
		||||
        "column": 17,
 | 
			
		||||
        "ruleId": "vue/no-mutating-props",
 | 
			
		||||
        "message": "Unexpected mutation of \"entity\" prop.",
 | 
			
		||||
        "hash": "8619c8e0b63e87d09268832f90e4fba06b87e41f"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
 | 
			
		||||
        "line": 124,
 | 
			
		||||
        "column": 17,
 | 
			
		||||
        "column": 13,
 | 
			
		||||
        "ruleId": "vue/no-mutating-props",
 | 
			
		||||
        "message": "Unexpected mutation of \"entity\" prop.",
 | 
			
		||||
        "hash": "fa56a7c93583f0a9d0c2ecac10228c4f4fc1bc3a"
 | 
			
		||||
        "hash": "281f918da00635079501418b1e6b2c05b62eb4a7"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
 | 
			
		||||
        "line": 132,
 | 
			
		||||
        "column": 17,
 | 
			
		||||
        "line": 125,
 | 
			
		||||
        "column": 13,
 | 
			
		||||
        "ruleId": "vue/no-mutating-props",
 | 
			
		||||
        "message": "Unexpected mutation of \"entity\" prop.",
 | 
			
		||||
        "hash": "9fe87937ea67d1dae95fb3d44d4be0da2eba0905"
 | 
			
		||||
        "hash": "c131b09fa67ab1d069f1d04a54582d6b0f206153"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
 | 
			
		||||
        "line": 126,
 | 
			
		||||
        "column": 13,
 | 
			
		||||
        "ruleId": "vue/no-mutating-props",
 | 
			
		||||
        "message": "Unexpected mutation of \"entity\" prop.",
 | 
			
		||||
        "hash": "3d3a2a4add64c291b8f5f1cddd90a173cd6a819d"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
 | 
			
		||||
        "line": 131,
 | 
			
		||||
        "column": 21,
 | 
			
		||||
        "ruleId": "vue/no-mutating-props",
 | 
			
		||||
        "message": "Unexpected mutation of \"entity\" prop.",
 | 
			
		||||
        "hash": "ed48f4988914d7897018a2e06830a97e6740b3e8"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
 | 
			
		||||
        "line": 145,
 | 
			
		||||
        "column": 13,
 | 
			
		||||
        "ruleId": "vue/no-mutating-props",
 | 
			
		||||
        "message": "Unexpected mutation of \"entity\" prop.",
 | 
			
		||||
        "hash": "744f3a7610d4d6015e50e25149bceffd6c6e2763"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
 | 
			
		||||
@@ -1241,139 +1441,115 @@
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
 | 
			
		||||
        "line": 148,
 | 
			
		||||
        "column": 13,
 | 
			
		||||
        "line": 149,
 | 
			
		||||
        "column": 17,
 | 
			
		||||
        "ruleId": "vue/no-mutating-props",
 | 
			
		||||
        "message": "Unexpected mutation of \"entity\" prop.",
 | 
			
		||||
        "hash": "ab4f478fbfbc954b8dff75176dcd432f9ff28cfc"
 | 
			
		||||
        "hash": "1e7b1ad55866f708baaca72dfa4ff26d6f8e5d21"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
 | 
			
		||||
        "line": 153,
 | 
			
		||||
        "column": 21,
 | 
			
		||||
        "ruleId": "vue/no-mutating-props",
 | 
			
		||||
        "message": "Unexpected mutation of \"entity\" prop.",
 | 
			
		||||
        "hash": "1d907d149f9ddb62e32140a90efe9a74b3e71fef"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
 | 
			
		||||
        "line": 167,
 | 
			
		||||
        "line": 152,
 | 
			
		||||
        "column": 13,
 | 
			
		||||
        "ruleId": "vue/no-mutating-props",
 | 
			
		||||
        "message": "Unexpected mutation of \"entity\" prop.",
 | 
			
		||||
        "hash": "8aa37d2d4f011773e68838a2c88017875de563b5"
 | 
			
		||||
        "hash": "84779331536ffceec8d4a8c5ca4307310b882549"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
 | 
			
		||||
        "line": 168,
 | 
			
		||||
        "line": 161,
 | 
			
		||||
        "column": 13,
 | 
			
		||||
        "ruleId": "vue/no-mutating-props",
 | 
			
		||||
        "message": "Unexpected mutation of \"entity\" prop.",
 | 
			
		||||
        "hash": "a4827a357e52a51fa9262319114d81a130296acf"
 | 
			
		||||
        "hash": "0789999841be671a4d8ab080d6fdb679f843eb52"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
 | 
			
		||||
        "line": 169,
 | 
			
		||||
        "column": 13,
 | 
			
		||||
        "ruleId": "vue/no-mutating-props",
 | 
			
		||||
        "message": "Unexpected mutation of \"entity\" prop.",
 | 
			
		||||
        "hash": "a4c9715664202949e3242b8d4aa4098288b46dc4"
 | 
			
		||||
        "line": 170,
 | 
			
		||||
        "column": 51,
 | 
			
		||||
        "ruleId": "@typescript-eslint/no-unused-vars",
 | 
			
		||||
        "message": "'reject' is defined but never used.",
 | 
			
		||||
        "hash": "bbb17afa114f016e2058d90aa32d2a625804f0d1"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
 | 
			
		||||
        "line": 171,
 | 
			
		||||
        "column": 17,
 | 
			
		||||
        "ruleId": "vue/no-mutating-props",
 | 
			
		||||
        "message": "Unexpected mutation of \"entity\" prop.",
 | 
			
		||||
        "hash": "f3e9e21e433e90ec7b615b8940d43c4177372b66"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
 | 
			
		||||
        "line": 174,
 | 
			
		||||
        "column": 13,
 | 
			
		||||
        "ruleId": "vue/no-mutating-props",
 | 
			
		||||
        "message": "Unexpected mutation of \"entity\" prop.",
 | 
			
		||||
        "hash": "770b7a24cc24b380e88db47d62422c8e1ece2571"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
 | 
			
		||||
        "line": 183,
 | 
			
		||||
        "column": 13,
 | 
			
		||||
        "ruleId": "vue/no-mutating-props",
 | 
			
		||||
        "message": "Unexpected mutation of \"entity\" prop.",
 | 
			
		||||
        "hash": "2aef3c519a9ec6abcfe7573989d3de19d5c4c752"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
 | 
			
		||||
        "line": 193,
 | 
			
		||||
        "column": 33,
 | 
			
		||||
        "ruleId": "vue/no-mutating-props",
 | 
			
		||||
        "message": "Unexpected mutation of \"entity\" prop.",
 | 
			
		||||
        "hash": "5d1f97e4d7d9f47399d312e8b9f95ef9e3843b8c"
 | 
			
		||||
        "hash": "5fbe407ceceb37bff2ac800ceddd7942540132f1"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
 | 
			
		||||
        "line": 190,
 | 
			
		||||
        "column": 55,
 | 
			
		||||
        "ruleId": "@typescript-eslint/no-unused-vars",
 | 
			
		||||
        "message": "'reject' is defined but never used.",
 | 
			
		||||
        "hash": "e2af91def877befbabef8e93deba4c58a3ee2ded"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
 | 
			
		||||
        "line": 191,
 | 
			
		||||
        "column": 37,
 | 
			
		||||
        "ruleId": "vue/no-mutating-props",
 | 
			
		||||
        "message": "Unexpected mutation of \"entity\" prop.",
 | 
			
		||||
        "hash": "ee8544ee45681a650ed7d4918ae979685cdd8f0f"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
 | 
			
		||||
        "line": 210,
 | 
			
		||||
        "column": 17,
 | 
			
		||||
        "ruleId": "vue/no-mutating-props",
 | 
			
		||||
        "message": "Unexpected mutation of \"entity\" prop.",
 | 
			
		||||
        "hash": "5d9d2217c8c7e6571bc9f72a98ea5b370edb4968"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
 | 
			
		||||
        "line": 211,
 | 
			
		||||
        "column": 17,
 | 
			
		||||
        "ruleId": "vue/no-mutating-props",
 | 
			
		||||
        "message": "Unexpected mutation of \"entity\" prop.",
 | 
			
		||||
        "hash": "6e04619b373c23c91f6c36c2aad314ac16cdb697"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
 | 
			
		||||
        "line": 212,
 | 
			
		||||
        "column": 17,
 | 
			
		||||
        "ruleId": "vue/no-mutating-props",
 | 
			
		||||
        "message": "Unexpected mutation of \"entity\" prop.",
 | 
			
		||||
        "hash": "39df045639a62f64ccdb03a80e286bc3ad772587"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
 | 
			
		||||
        "line": 213,
 | 
			
		||||
        "column": 37,
 | 
			
		||||
        "ruleId": "vue/no-mutating-props",
 | 
			
		||||
        "message": "Unexpected mutation of \"entity\" prop.",
 | 
			
		||||
        "hash": "c1df874f790ef0c036bf58ae8a8db1ee173685d4"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
 | 
			
		||||
        "line": 232,
 | 
			
		||||
        "column": 17,
 | 
			
		||||
        "ruleId": "vue/no-mutating-props",
 | 
			
		||||
        "message": "Unexpected mutation of \"entity\" prop.",
 | 
			
		||||
        "hash": "476e6588a28ac9382e8b9d2e63a8babecd23bad8"
 | 
			
		||||
        "hash": "c399a43fa797a8ce61c9d96a644a39cc84a387b7"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
 | 
			
		||||
        "line": 233,
 | 
			
		||||
        "column": 17,
 | 
			
		||||
        "ruleId": "vue/no-mutating-props",
 | 
			
		||||
        "message": "Unexpected mutation of \"entity\" prop.",
 | 
			
		||||
        "hash": "6a0c82ba72d6d87217bf33a6ad8e40a4b81bc802"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
 | 
			
		||||
        "line": 234,
 | 
			
		||||
        "column": 17,
 | 
			
		||||
        "ruleId": "vue/no-mutating-props",
 | 
			
		||||
        "message": "Unexpected mutation of \"entity\" prop.",
 | 
			
		||||
        "hash": "741d5af6c7d90041c0dc1c1df2e8699b80fca69a"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
 | 
			
		||||
        "line": 235,
 | 
			
		||||
        "column": 17,
 | 
			
		||||
        "ruleId": "vue/no-mutating-props",
 | 
			
		||||
        "message": "Unexpected mutation of \"entity\" prop.",
 | 
			
		||||
        "hash": "c3ffd141f58d532663875cc5c7d338ed00db2a6d"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
 | 
			
		||||
        "line": 267,
 | 
			
		||||
        "line": 245,
 | 
			
		||||
        "column": 13,
 | 
			
		||||
        "ruleId": "vue/no-mutating-props",
 | 
			
		||||
        "message": "Unexpected mutation of \"entity\" prop.",
 | 
			
		||||
        "hash": "2700f258396516a2fe971618fafbcdf72cdda3ab"
 | 
			
		||||
        "hash": "04337a07944caaa4819cfebcf29e1a7cbfdf248b"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CountrySelection.vue",
 | 
			
		||||
        "line": 94,
 | 
			
		||||
        "line": 76,
 | 
			
		||||
        "column": 13,
 | 
			
		||||
        "ruleId": "vue/no-mutating-props",
 | 
			
		||||
        "message": "Unexpected mutation of \"entity\" prop.",
 | 
			
		||||
        "hash": "4be1b0592efa775092a91a1d744e16ce98bd216e"
 | 
			
		||||
        "hash": "373a2e31f110d138c66d77f1faf5dc61545c55af"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CountrySelection.vue",
 | 
			
		||||
        "line": 99,
 | 
			
		||||
        "line": 81,
 | 
			
		||||
        "column": 13,
 | 
			
		||||
        "ruleId": "vue/no-mutating-props",
 | 
			
		||||
        "message": "Unexpected mutation of \"entity\" prop.",
 | 
			
		||||
        "hash": "19b54b6d76c30249d520a296f826eda9d6eb0668"
 | 
			
		||||
        "hash": "421eb6a63224b4b1d81b216677a710c5c99ddee3"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/DatePane.vue",
 | 
			
		||||
@@ -1393,19 +1569,19 @@
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/EditPane.vue",
 | 
			
		||||
        "line": 169,
 | 
			
		||||
        "line": 155,
 | 
			
		||||
        "column": 17,
 | 
			
		||||
        "ruleId": "vue/no-mutating-props",
 | 
			
		||||
        "message": "Unexpected mutation of \"entity\" prop.",
 | 
			
		||||
        "hash": "dcb7b34098062760ddbb849655a5bb3ca65c36d3"
 | 
			
		||||
        "hash": "b3a822914fcb5e2fcf28efc331a45b9205002eeb"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/EditPane.vue",
 | 
			
		||||
        "line": 178,
 | 
			
		||||
        "line": 164,
 | 
			
		||||
        "column": 17,
 | 
			
		||||
        "ruleId": "vue/no-mutating-props",
 | 
			
		||||
        "message": "Unexpected mutation of \"entity\" prop.",
 | 
			
		||||
        "hash": "86b3ecf201025cac36878c5e4bf8850fb9d58cb5"
 | 
			
		||||
        "hash": "72c7d850f6cdeaf65b373a33234222f9766ee30b"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/index.js",
 | 
			
		||||
@@ -1455,6 +1631,14 @@
 | 
			
		||||
        "message": "'app' is assigned a value but never used.",
 | 
			
		||||
        "hash": "9e6125f4fc387dc362c69cc6e3ce360eb2851f1b"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/PickEntity/PickEntity.vue",
 | 
			
		||||
        "line": 60,
 | 
			
		||||
        "column": 22,
 | 
			
		||||
        "ruleId": "vue/require-valid-default-prop",
 | 
			
		||||
        "message": "Type of the default value for 'suggested' prop must be a function.",
 | 
			
		||||
        "hash": "d30212820bc2e97fa02d75dbc3a014558693f169"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/_components/AddressDetails/Parts/AddressDetailsMap.vue",
 | 
			
		||||
        "line": 24,
 | 
			
		||||
@@ -1543,6 +1727,14 @@
 | 
			
		||||
        "message": "'tags' is assigned a value but never used.",
 | 
			
		||||
        "hash": "ae9bb2e0651c118ed9efd227e88b86cc83f5d80d"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourse/components/StickyNav.vue",
 | 
			
		||||
        "line": 116,
 | 
			
		||||
        "column": 18,
 | 
			
		||||
        "ruleId": "@typescript-eslint/no-unused-vars",
 | 
			
		||||
        "message": "'event' is defined but never used.",
 | 
			
		||||
        "hash": "201f182769c6dfb87148b841e7d9b592be429669"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourse/index.js",
 | 
			
		||||
        "line": 19,
 | 
			
		||||
@@ -1575,6 +1767,14 @@
 | 
			
		||||
        "message": "'app' is assigned a value but never used.",
 | 
			
		||||
        "hash": "aaaaa63e7a60443b8cbf8191feb9142852ebdf1c"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourseWorkEdit/components/FormEvaluation.vue",
 | 
			
		||||
        "line": 79,
 | 
			
		||||
        "column": 13,
 | 
			
		||||
        "ruleId": "vue/require-v-for-key",
 | 
			
		||||
        "message": "Elements in iteration expect to have 'v-bind:key' directives.",
 | 
			
		||||
        "hash": "422f53925922e59655d0f71624c19af75d41628c"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourseWorkEdit/index.js",
 | 
			
		||||
        "line": 12,
 | 
			
		||||
@@ -1615,6 +1815,22 @@
 | 
			
		||||
        "message": "'evalFQDN' is assigned a value but never used.",
 | 
			
		||||
        "hash": "7fc32caafa23addddf44f3acbc5045b4523a0271"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourseWorkEdit/store.js",
 | 
			
		||||
        "line": 611,
 | 
			
		||||
        "column": 9,
 | 
			
		||||
        "ruleId": "@typescript-eslint/no-unused-vars",
 | 
			
		||||
        "message": "'errors' is assigned a value but never used.",
 | 
			
		||||
        "hash": "c41cf979fc1626c38328dbf1028800c3395496bd"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillPersonBundle/Resources/public/vuejs/ExportFormActionGoalResult/App.vue",
 | 
			
		||||
        "line": 282,
 | 
			
		||||
        "column": 7,
 | 
			
		||||
        "ruleId": "@typescript-eslint/no-unused-expressions",
 | 
			
		||||
        "message": "Expected an assignment or function call and instead saw an expression.",
 | 
			
		||||
        "hash": "de3a6e2bb10a80a2bacba665be74266c7efc7d64"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillPersonBundle/Resources/public/vuejs/ExportFormActionGoalResult/index.js",
 | 
			
		||||
        "line": 16,
 | 
			
		||||
@@ -1631,6 +1847,38 @@
 | 
			
		||||
        "message": "'app' is assigned a value but never used.",
 | 
			
		||||
        "hash": "2f161e663689e3e4dfe2c53b0d64c91a4d2b1a60"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillPersonBundle/Resources/public/vuejs/VisGraph/App.vue",
 | 
			
		||||
        "line": 263,
 | 
			
		||||
        "column": 19,
 | 
			
		||||
        "ruleId": "vue/return-in-computed-property",
 | 
			
		||||
        "message": "Expected to return a value in \"refreshNetwork\" computed property.",
 | 
			
		||||
        "hash": "2c1b08a49098c83b09058cedc0a962126e91e544"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillPersonBundle/Resources/public/vuejs/VisGraph/App.vue",
 | 
			
		||||
        "line": 270,
 | 
			
		||||
        "column": 7,
 | 
			
		||||
        "ruleId": "vue/no-side-effects-in-computed-properties",
 | 
			
		||||
        "message": "Unexpected side effect in \"legendLayers\" computed property.",
 | 
			
		||||
        "hash": "760948d2187c853f17ac9a1bd7107e883092d4f4"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillPersonBundle/Resources/public/vuejs/VisGraph/App.vue",
 | 
			
		||||
        "line": 281,
 | 
			
		||||
        "column": 5,
 | 
			
		||||
        "ruleId": "vue/no-dupe-keys",
 | 
			
		||||
        "message": "Duplicate key 'checkedLayers'. May cause name collision in script or template tag.",
 | 
			
		||||
        "hash": "447edb461e15e3ff5c60c8ecba88131e442539aa"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillPersonBundle/Resources/public/vuejs/VisGraph/App.vue",
 | 
			
		||||
        "line": 353,
 | 
			
		||||
        "column": 7,
 | 
			
		||||
        "ruleId": "@typescript-eslint/no-unused-expressions",
 | 
			
		||||
        "message": "Expected an assignment or function call and instead saw an expression.",
 | 
			
		||||
        "hash": "9cf656cbf1eb3d7cc0082e63adcd320b6093d14f"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillPersonBundle/Resources/public/vuejs/VisGraph/index.js",
 | 
			
		||||
        "line": 20,
 | 
			
		||||
@@ -1639,6 +1887,22 @@
 | 
			
		||||
        "message": "'app' is assigned a value but never used.",
 | 
			
		||||
        "hash": "9e94e6412b8a44e47bfe8e66218cad09cff5bed4"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillPersonBundle/Resources/public/vuejs/_components/AccompanyingPeriod/SetReferrer.vue",
 | 
			
		||||
        "line": 42,
 | 
			
		||||
        "column": 16,
 | 
			
		||||
        "ruleId": "@typescript-eslint/no-unused-vars",
 | 
			
		||||
        "message": "'response' is defined but never used.",
 | 
			
		||||
        "hash": "62de07b13c662e32332bb062038acee23978ea70"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillPersonBundle/Resources/public/vuejs/_components/AddPersons.vue",
 | 
			
		||||
        "line": 356,
 | 
			
		||||
        "column": 28,
 | 
			
		||||
        "ruleId": "@typescript-eslint/no-unused-vars",
 | 
			
		||||
        "message": "'_response' is defined but never used.",
 | 
			
		||||
        "hash": "097e7788a2b5dea500b80b8a3cf968e57063a66a"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillPersonBundle/Resources/public/vuejs/_components/AddPersons/TypeUserGroup.vue",
 | 
			
		||||
        "line": 6,
 | 
			
		||||
@@ -1654,5 +1918,45 @@
 | 
			
		||||
        "ruleId": "@typescript-eslint/no-unused-vars",
 | 
			
		||||
        "message": "'UserRenderBoxBadge' is defined but never used.",
 | 
			
		||||
        "hash": "99eba0d8633b2c9497417f4f61ec4194dbb2a96b"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillWopiBundle/src/Resources/public/module/pending/index.ts",
 | 
			
		||||
        "line": 4,
 | 
			
		||||
        "column": 3,
 | 
			
		||||
        "ruleId": "@typescript-eslint/no-unused-vars",
 | 
			
		||||
        "message": "'StoredObjectStatus' is defined but never used.",
 | 
			
		||||
        "hash": "63f8c4572293916850d6165647774b27d4b732c6"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillWopiBundle/src/Resources/public/module/pending/index.ts",
 | 
			
		||||
        "line": 5,
 | 
			
		||||
        "column": 3,
 | 
			
		||||
        "ruleId": "@typescript-eslint/no-unused-vars",
 | 
			
		||||
        "message": "'StoredObjectStatusChange' is defined but never used.",
 | 
			
		||||
        "hash": "a87c178e3eb5999bf0f46b3fa1c6da77e1be08b9"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillWopiBundle/src/Resources/public/module/pending/index.ts",
 | 
			
		||||
        "line": 30,
 | 
			
		||||
        "column": 61,
 | 
			
		||||
        "ruleId": "@typescript-eslint/no-unused-vars",
 | 
			
		||||
        "message": "'e' is defined but never used.",
 | 
			
		||||
        "hash": "02953121583f4f73742a19adab099ab63df9076e"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillWopiBundle/src/Resources/public/module/pending/index.ts",
 | 
			
		||||
        "line": 31,
 | 
			
		||||
        "column": 32,
 | 
			
		||||
        "ruleId": "@typescript-eslint/no-explicit-any",
 | 
			
		||||
        "message": "Unexpected any. Specify a different type.",
 | 
			
		||||
        "hash": "af48e21a1651b6017ede882dab249c00a818a44d"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "path": "src/Bundle/ChillWopiBundle/src/Resources/public/module/pending/index.ts",
 | 
			
		||||
        "line": 37,
 | 
			
		||||
        "column": 16,
 | 
			
		||||
        "ruleId": "@typescript-eslint/no-explicit-any",
 | 
			
		||||
        "message": "Unexpected any. Specify a different type.",
 | 
			
		||||
        "hash": "7513ea552a0a649ce4ab93b6cf9d40bfef4f68d9"
 | 
			
		||||
    }
 | 
			
		||||
]
 | 
			
		||||
							
								
								
									
										5
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -18,9 +18,6 @@ migrations/*
 | 
			
		||||
templates/*
 | 
			
		||||
translations/*
 | 
			
		||||
 | 
			
		||||
# we allow developers to add customization on their installation, without commiting it
 | 
			
		||||
config/packages/dev/*
 | 
			
		||||
 | 
			
		||||
###> symfony/framework-bundle ###
 | 
			
		||||
/.env.local
 | 
			
		||||
/.env.local.php
 | 
			
		||||
@@ -33,7 +30,7 @@ config/packages/dev/*
 | 
			
		||||
 | 
			
		||||
###> phpunit/phpunit ###
 | 
			
		||||
/phpunit.xml
 | 
			
		||||
/.phpunit.cache/
 | 
			
		||||
.phpunit.result.cache
 | 
			
		||||
###< phpunit/phpunit ###
 | 
			
		||||
 | 
			
		||||
/.php-cs-fixer.cache
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,7 @@
 | 
			
		||||
# Select what we should cache between builds
 | 
			
		||||
cache:
 | 
			
		||||
    paths:
 | 
			
		||||
        - vendor/
 | 
			
		||||
        - /vendor/
 | 
			
		||||
        - .cache
 | 
			
		||||
        - node_modules/
 | 
			
		||||
 | 
			
		||||
@@ -46,7 +46,7 @@ stages:
 | 
			
		||||
 | 
			
		||||
build:
 | 
			
		||||
    stage: Composer install
 | 
			
		||||
    image: chill/base-image:8.3-edge
 | 
			
		||||
    image: gitea.champs-libres.be/chill-project/chill-skeleton-basic/base-image:php82
 | 
			
		||||
    before_script:
 | 
			
		||||
        - composer config -g cache-dir "$(pwd)/.cache"
 | 
			
		||||
    script:
 | 
			
		||||
@@ -61,7 +61,7 @@ build:
 | 
			
		||||
 | 
			
		||||
code_style:
 | 
			
		||||
    stage: Tests
 | 
			
		||||
    image: chill/base-image:8.3-edge
 | 
			
		||||
    image: gitea.champs-libres.be/chill-project/chill-skeleton-basic/base-image:php82
 | 
			
		||||
    script:
 | 
			
		||||
        - php-cs-fixer fix --dry-run -v --show-progress=none
 | 
			
		||||
    cache:
 | 
			
		||||
@@ -74,25 +74,35 @@ code_style:
 | 
			
		||||
 | 
			
		||||
phpstan_tests:
 | 
			
		||||
    stage: Tests
 | 
			
		||||
    image: chill/base-image:8.3-edge
 | 
			
		||||
    dependencies:
 | 
			
		||||
        - build
 | 
			
		||||
    image: gitea.champs-libres.be/chill-project/chill-skeleton-basic/base-image:php82
 | 
			
		||||
    variables:
 | 
			
		||||
        COMPOSER_MEMORY_LIMIT: 3G
 | 
			
		||||
    before_script:
 | 
			
		||||
        - bin/console cache:clear --env=dev
 | 
			
		||||
    script:
 | 
			
		||||
        - composer exec phpstan -- analyze --memory-limit=3G
 | 
			
		||||
    cache:
 | 
			
		||||
        paths:
 | 
			
		||||
            - .cache/
 | 
			
		||||
    artifacts:
 | 
			
		||||
        expire_in: 1 day
 | 
			
		||||
        paths:
 | 
			
		||||
            - vendor/
 | 
			
		||||
 | 
			
		||||
rector_tests:
 | 
			
		||||
    stage: Tests
 | 
			
		||||
    image: chill/base-image:8.3-edge
 | 
			
		||||
    dependencies:
 | 
			
		||||
        - build
 | 
			
		||||
    image: gitea.champs-libres.be/chill-project/chill-skeleton-basic/base-image:php82
 | 
			
		||||
    before_script:
 | 
			
		||||
        - bin/console cache:clear --env=dev
 | 
			
		||||
    script:
 | 
			
		||||
        - composer exec rector -- process --dry-run
 | 
			
		||||
    cache:
 | 
			
		||||
        paths:
 | 
			
		||||
            - .cache/
 | 
			
		||||
    artifacts:
 | 
			
		||||
        expire_in: 1 day
 | 
			
		||||
        paths:
 | 
			
		||||
            - vendor/
 | 
			
		||||
 | 
			
		||||
lint:
 | 
			
		||||
    stage: Tests
 | 
			
		||||
@@ -122,9 +132,7 @@ lint:
 | 
			
		||||
 | 
			
		||||
unit_tests:
 | 
			
		||||
    stage: Tests
 | 
			
		||||
    image: chill/base-image:8.3-edge
 | 
			
		||||
    dependencies:
 | 
			
		||||
        - build
 | 
			
		||||
    image: gitea.champs-libres.be/chill-project/chill-skeleton-basic/base-image:php82
 | 
			
		||||
    variables:
 | 
			
		||||
        COMPOSER_MEMORY_LIMIT: 3G
 | 
			
		||||
    before_script:
 | 
			
		||||
@@ -135,6 +143,10 @@ unit_tests:
 | 
			
		||||
        - php bin/console doctrine:fixtures:load -n --env=test
 | 
			
		||||
    script:
 | 
			
		||||
        - composer exec phpunit -- --colors=never --exclude-group dbIntensive,openstack-integration
 | 
			
		||||
    artifacts:
 | 
			
		||||
        expire_in: 1 day
 | 
			
		||||
        paths:
 | 
			
		||||
            - vendor/
 | 
			
		||||
 | 
			
		||||
release:
 | 
			
		||||
    stage: Deploy
 | 
			
		||||
 
 | 
			
		||||
@@ -22,16 +22,16 @@ Chill is a comprehensive web application built as a set of Symfony bundles. It i
 | 
			
		||||
- **Backend**: PHP 8.3+, Symfony 5.4
 | 
			
		||||
- **Frontend**: JavaScript/TypeScript, Vue.js 3, Bootstrap 5
 | 
			
		||||
- **Build Tools**: Webpack Encore, Yarn
 | 
			
		||||
- **Database**: PostgreSQL with materialized views. We do not support other databases.
 | 
			
		||||
- **Database**: PostgreSQL with materialized views
 | 
			
		||||
- **Other Services**: Redis, AMQP (RabbitMQ), SMTP
 | 
			
		||||
 | 
			
		||||
## Project Structure
 | 
			
		||||
 | 
			
		||||
Note: This is a project that's existed for a long time, and throughout the years we've used multiple structures inside each bundle. When having the choice, the developers should choose the new structure.
 | 
			
		||||
Note: This is a project which exists from a long time ago, and we found multiple structure inside each bundle. When having the choice, the developers should choose the new structure.
 | 
			
		||||
 | 
			
		||||
The project follows a standard Symfony bundle structure:
 | 
			
		||||
- `/src/Bundle/`: Contains all the Chill bundles. The code is either at the root of the bundle directory, or within a `src/` directory (preferred). See psr4 mapping at the root's `composer.json`.
 | 
			
		||||
- each bundle comes with its own tests, either in the `Tests` directory (when the code is directly within the bundle directory (for instance `src/Bundle/ChillMainBundle/Tests`, `src/Bundle/ChillPersonBundle/Tests`)), or inside the `tests` directory, alongside the `src/` sub-directory (example: `src/Bundle/ChillWopiBundle/tests`) (this is the preferred way).
 | 
			
		||||
- each bundle come with his own tests, either in the `Tests` directory (when the code is directly within the bundle directory (for instance `src/Bundle/ChillMainBundle/Tests`, `src/Bundle/ChillPersonBundle/Tests`)), or inside the `tests` directory, alongside to the `src/` sub-directory (example: `src/Bundle/ChillWopiBundle/tests`) (this is the preferred way).
 | 
			
		||||
- `/docs/`: Contains project documentation
 | 
			
		||||
 | 
			
		||||
Each bundle typically has the following structure:
 | 
			
		||||
@@ -46,13 +46,13 @@ Each bundle typically has the following structure:
 | 
			
		||||
 | 
			
		||||
### A special word about TicketBundle
 | 
			
		||||
 | 
			
		||||
The ticket bundle is developed using a kind of "Command" pattern. The controller fills a "Command," and a "CommandHandler" handles this command. They are saved in the `src/Bundle/ChillTicketBundle/src/Action` directory.
 | 
			
		||||
The ticket bundle is developed using a kind of "Command" pattern. The controller fill a "Command", and a "CommandHandler" handle this command. They are savec in the `src/Bundle/ChillTicketBundle/src/Action` directory.
 | 
			
		||||
 | 
			
		||||
## Development Guidelines
 | 
			
		||||
 | 
			
		||||
### Building and Configuration Instructions
 | 
			
		||||
 | 
			
		||||
All the commands should be run through the `symfony` command, which will configure the required variables.
 | 
			
		||||
All the command should be run through the `symfony` command, which will configure the required variables.
 | 
			
		||||
 | 
			
		||||
For assets, we must ensure that we use node at version `^20.0.0`. This is done using `nvm use 20`.
 | 
			
		||||
 | 
			
		||||
@@ -87,7 +87,7 @@ For assets, we must ensure that we use node at version `^20.0.0`. This is done u
 | 
			
		||||
   docker compose up -d
 | 
			
		||||
   ```
 | 
			
		||||
 | 
			
		||||
6. **Set Up the Database**:
 | 
			
		||||
5. **Set Up the Database**:
 | 
			
		||||
   ```bash
 | 
			
		||||
   # Create the database
 | 
			
		||||
   symfony console doctrine:database:create
 | 
			
		||||
@@ -99,20 +99,20 @@ For assets, we must ensure that we use node at version `^20.0.0`. This is done u
 | 
			
		||||
   symfony console doctrine:fixtures:load
 | 
			
		||||
   ```
 | 
			
		||||
 | 
			
		||||
7. **Build Assets**:
 | 
			
		||||
6. **Build Assets**:
 | 
			
		||||
   ```bash
 | 
			
		||||
   nvm use 20
 | 
			
		||||
   yarn run encore dev
 | 
			
		||||
   ```
 | 
			
		||||
 | 
			
		||||
8. **Start the Development Server**:
 | 
			
		||||
7. **Start the Development Server**:
 | 
			
		||||
   ```bash
 | 
			
		||||
   symfony server:start -d
 | 
			
		||||
   ```
 | 
			
		||||
 | 
			
		||||
#### Docker Setup
 | 
			
		||||
 | 
			
		||||
The project includes a Docker configuration for easier development:
 | 
			
		||||
The project includes Docker configuration for easier development:
 | 
			
		||||
 | 
			
		||||
1. **Start Docker Services**:
 | 
			
		||||
   ```bash
 | 
			
		||||
@@ -149,93 +149,14 @@ Key configuration files:
 | 
			
		||||
- `package.json`: JavaScript dependencies and scripts
 | 
			
		||||
- `.env`: Default environment variables. Must usually not be updated: use `.env.local` instead.
 | 
			
		||||
 | 
			
		||||
### Database migrations
 | 
			
		||||
 | 
			
		||||
Each time a doctrine entity is created, we generate migration to adapt the database.
 | 
			
		||||
 | 
			
		||||
The migration is created using the command `symfony console doctrine:migrations:diff --no-interaction --namespace <namespace>`, where the namespace is the relevant namespace for migration. As this is a bash script, remember to quote the `\` (`\` must become `\\` in your command).
 | 
			
		||||
 | 
			
		||||
Each bundle has his own namespace for migration (always ask me to confirm that command with a list of updated / created entities so that I can confirm to you that it is ok):
 | 
			
		||||
 | 
			
		||||
- `Chill\Bundle\ActivityBundle` writes migrations to `Chill\Migrations\Activity`;
 | 
			
		||||
- `Chill\Bundle\BudgetBundle` writes migrations to `Chill\Migrations\Budget`;
 | 
			
		||||
- `Chill\Bundle\CustomFieldsBundle` writes migrations to `Chill\Migrations\CustomFields`;
 | 
			
		||||
- `Chill\Bundle\DocGeneratorBundle` writes migrations to `Chill\Migrations\DocGenerator`;
 | 
			
		||||
- `Chill\Bundle\DocStoreBundle` writes migrations to `Chill\Migrations\DocStore`;
 | 
			
		||||
- `Chill\Bundle\EventBundle` writes migrations to `Chill\Migrations\Event`;
 | 
			
		||||
- `Chill\Bundle\CalendarBundle` writes migrations to `Chill\Migrations\Calendar`;
 | 
			
		||||
- `Chill\Bundle\FamilyMembersBundle` writes migrations to `Chill\Migrations\FamilyMembers`;
 | 
			
		||||
- `Chill\Bundle\FranceTravailApiBundle` writes migrations to `Chill\Migrations\FranceTravailApi`;
 | 
			
		||||
- `Chill\Bundle\JobBundle` writes migrations to `Chill\Migrations\Job`;
 | 
			
		||||
- `Chill\Bundle\MainBundle` writes migrations to `Chill\Migrations\Main`;
 | 
			
		||||
- `Chill\Bundle\PersonBundle` writes migrations to `Chill\Migrations\Person`;
 | 
			
		||||
- `Chill\Bundle\ReportBundle` writes migrations to `Chill\Migrations\Report`;
 | 
			
		||||
- `Chill\Bundle\TaskBundle` writes migrations to `Chill\Migrations\Task`;
 | 
			
		||||
- `Chill\Bundle\ThirdPartyBundle` writes migrations to `Chill\Migrations\ThirdParty`;
 | 
			
		||||
- `Chill\Bundle\TicketBundle` writes migrations to `Chill\Migrations\Ticket`;
 | 
			
		||||
- `Chill\Bundle\WopiBundle` writes migrations to `Chill\Migrations\Wopi`;
 | 
			
		||||
 | 
			
		||||
Once created the, comment's classes should be removed and a description of the changes made to the entities should be added to the migrations, using the `getDescription` method. The migration should not be cleaned by any artificial intelligence, as modifying this migration is error prone.
 | 
			
		||||
 | 
			
		||||
### Guidelines related to code structure and requirements
 | 
			
		||||
 | 
			
		||||
#### Usage of clock
 | 
			
		||||
 | 
			
		||||
When we need to use a DateTime or DateTimeImmutable that need to express "now", we prefer the usage of
 | 
			
		||||
`Symfony\Component\Clock\ClockInterface`, where possible. This is usually not possible in doctrine entities,
 | 
			
		||||
where injection does not work when restoring an entity from a database, but usually possible in services.
 | 
			
		||||
 | 
			
		||||
In test, we use `\Symfony\Component\Clock\MockClock` which is an implementation of `Symfony\Component\Clock\ClockInterface`
 | 
			
		||||
where we have full and easy control of the date.
 | 
			
		||||
 | 
			
		||||
### Testing Information
 | 
			
		||||
 | 
			
		||||
The project uses PHPUnit for testing. Each bundle has its own test suite, and there's also a global test suite at the root level.
 | 
			
		||||
 | 
			
		||||
#### Use of mock in tests
 | 
			
		||||
 | 
			
		||||
##### General mocking
 | 
			
		||||
 | 
			
		||||
For creating mock, we prefer using prophecy (library phpspec/prophecy).
 | 
			
		||||
 | 
			
		||||
##### Useful helpers and tips that avoid creating a mock
 | 
			
		||||
 | 
			
		||||
Some notable implementations that are test helpers and avoid creating a mock:
 | 
			
		||||
 | 
			
		||||
- `\Psr\Log\NullLogger`, an implementation of `\Psr\Log\LoggerInterface`;
 | 
			
		||||
- `\Symfony\Component\Clock\MockClock`, an implementation of `Symfony\Component\Clock\ClockInterface` (already mentioned above);
 | 
			
		||||
- `\Symfony\Component\HttpClient\MockHttpClient`, an implementation of `\Symfony\Contracts\HttpClient\HttpClientInterface`;
 | 
			
		||||
- When using `\Symfony\Component\Mailer\MailerInterface`, we can create the mock with "InMemoryTransport":
 | 
			
		||||
 | 
			
		||||
    ```php
 | 
			
		||||
    use Symfony\Component\Mailer\Transport\InMemoryTransport;
 | 
			
		||||
    use \Symfony\Component\Mailer\Mailer;
 | 
			
		||||
 | 
			
		||||
    $transport = new InMemoryTransport();
 | 
			
		||||
    $mailer = new Mailer($transport);
 | 
			
		||||
 | 
			
		||||
    // After sending:
 | 
			
		||||
    $messages = $transport->getSent(); // array of SentMessage
 | 
			
		||||
    ```
 | 
			
		||||
- When using `\Symfony\Contracts\EventDispatcher\EventDispatcherInterface`, we can use directly an instance of `\Symfony\Component\EventDispatcher\EventDispatcher`;
 | 
			
		||||
 | 
			
		||||
##### When we prefer not creating a mock
 | 
			
		||||
 | 
			
		||||
- When we use Doctrine Entities related to the project, we prefer not to use a mock: we instantiate them directly (unless it requires too much code to write);
 | 
			
		||||
 | 
			
		||||
##### Mocking final and readonly classes
 | 
			
		||||
 | 
			
		||||
Classes marked as final can't be mocked. To avoid that, either:
 | 
			
		||||
 | 
			
		||||
- we remove the `final` keyword from the class;
 | 
			
		||||
- we extract an interface from the final class.
 | 
			
		||||
 | 
			
		||||
This must be a decision made by a human, not by an AI. Every AI task must abort with an explicit message in that case.
 | 
			
		||||
 | 
			
		||||
#### Running Tests
 | 
			
		||||
 | 
			
		||||
The tests are run from the project's root (not from the bundle's root).
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
# Run all tests
 | 
			
		||||
vendor/bin/phpunit
 | 
			
		||||
@@ -297,7 +218,7 @@ class TicketTest extends TestCase
 | 
			
		||||
 | 
			
		||||
#### Test Database
 | 
			
		||||
 | 
			
		||||
For tests that require a database, the project uses a postgresql database filled with fixtures (usage of doctrine-fixtures). You can configure a different database for testing in the `.env.test` file.
 | 
			
		||||
For tests that require a database, the project uses an in-memory SQLite database by default. You can configure a different database for testing in the `.env.test` file.
 | 
			
		||||
 | 
			
		||||
### Code Quality Tools
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										210
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										210
									
								
								CHANGELOG.md
									
									
									
									
									
								
							@@ -6,216 +6,6 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html),
 | 
			
		||||
and is generated by [Changie](https://github.com/miniscruff/changie).
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## v4.5.1 - 2025-10-03
 | 
			
		||||
### Fixed
 | 
			
		||||
* Add missing javascript dependency   
 | 
			
		||||
* Add exception handling for conversion of attachment on sending external, when documens are already in pdf   
 | 
			
		||||
 | 
			
		||||
## v4.5.0 - 2025-10-03
 | 
			
		||||
### Feature
 | 
			
		||||
* Only allow delete of attachment on workflows that are not final   
 | 
			
		||||
* Move up signature buttons on index workflow page for easier access   
 | 
			
		||||
* Filter out document from attachment list if it is the same as the workflow document   
 | 
			
		||||
* Block edition on attached document on workflow, if the workflow is finalized or sent external   
 | 
			
		||||
* Convert workflow's attached document to pdf while sending them external   
 | 
			
		||||
* After a signature is canceled or rejected, going to a waiting page until the post-process routines apply a workflow transition   
 | 
			
		||||
### Fixed
 | 
			
		||||
* ([#426](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/426)) Increased the number of required characters when setting a new password in Chill from 9 to 14 - GDPR compliance   
 | 
			
		||||
* Fix permissions on storedObject which are subject by a workflow   
 | 
			
		||||
### DX
 | 
			
		||||
* Introduce a WaitingScreen component to display a waiting screen   
 | 
			
		||||
 | 
			
		||||
## v4.4.2 - 2025-09-12
 | 
			
		||||
### Fixed
 | 
			
		||||
* Fix document generation and workflow generation do not work on accompanying period work documents   
 | 
			
		||||
 | 
			
		||||
## v4.4.1 - 2025-09-11
 | 
			
		||||
### Fixed
 | 
			
		||||
* fix translations in duplicate evaluation document modal and realign close modal button   
 | 
			
		||||
 | 
			
		||||
## v4.4.0 - 2025-09-11
 | 
			
		||||
### Feature
 | 
			
		||||
* ([#359](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/359)) Allow the merge of two accompanying period works   
 | 
			
		||||
* ([#369](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/369)) Duplication of a document to another accompanying period work evaluation   
 | 
			
		||||
* ([#359](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/359)) Fusion of two accompanying period works   
 | 
			
		||||
### Fixed
 | 
			
		||||
* Fix display of 'duplicate' and 'merge' buttons in CRUD templates   
 | 
			
		||||
* Fix saving notification preferences in user's profile   
 | 
			
		||||
 | 
			
		||||
## v4.3.0 - 2025-09-08
 | 
			
		||||
### Feature
 | 
			
		||||
* ([#409](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/409)) Add 45 and 60 min calendar ranges   
 | 
			
		||||
* Add a command to generate a list of permissions   
 | 
			
		||||
* ([#412](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/412)) Add an absence end date   
 | 
			
		||||
 | 
			
		||||
  **Schema Change**: Add columns or tables
 | 
			
		||||
### Fixed
 | 
			
		||||
* fix date formatting in calendar range display   
 | 
			
		||||
* Change route URL to avoid clash with person duplicate controller method   
 | 
			
		||||
 | 
			
		||||
## v4.2.1 - 2025-09-03
 | 
			
		||||
### Fixed
 | 
			
		||||
* Fix exports to work with DirectExportInterface   
 | 
			
		||||
### DX
 | 
			
		||||
* Improve error message when a stored object cannot be written on local disk
 | 
			
		||||
   
 | 
			
		||||
 | 
			
		||||
## v4.2.0 - 2025-09-02
 | 
			
		||||
### Feature
 | 
			
		||||
* ([#64](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/64)) Add external identifier for a Person
 | 
			
		||||
 | 
			
		||||
  **Schema Change**: Add columns or tables
 | 
			
		||||
* ([#330](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/330) Allow users to choose for which notifications they want to receive an email
 | 
			
		||||
### Fixed
 | 
			
		||||
* ([#422](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/422)) Fixed html layout of pages for recovering password
 | 
			
		||||
* Fix typo in 'uncheckAll' script for centers selection
 | 
			
		||||
* Fix incorrect parameter name in event details link
 | 
			
		||||
 | 
			
		||||
## v4.1.0 - 2025-08-26
 | 
			
		||||
### Feature
 | 
			
		||||
* ([#400](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/400)) Add filter to social actions list to filter out actions where current user intervenes   
 | 
			
		||||
* ([#399](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/399)) Show filters on list pages unfolded by default   
 | 
			
		||||
* Expansion of event module with new fields in the creation form: thematic, internal/external animator, responsable, and budget elements. Filtering options in the event list + adapted exports   
 | 
			
		||||
 | 
			
		||||
  **Schema Change**: Add columns or tables
 | 
			
		||||
### Fixed
 | 
			
		||||
* ([#382](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/382)) adjust display logic for accompanying period dates, include closing date if period is closed.   
 | 
			
		||||
* ([#384](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/384)) add min and step attributes to integer field in DateIntervalType   
 | 
			
		||||
### UX
 | 
			
		||||
* Limit display of participations in event list   
 | 
			
		||||
 | 
			
		||||
## v4.0.2 - 2025-07-09
 | 
			
		||||
### Fixed
 | 
			
		||||
* Fix add missing translation   
 | 
			
		||||
* Fix the transfer of evaluations and documents during of accompanyingperiodwork   
 | 
			
		||||
 | 
			
		||||
## v4.0.1 - 2025-07-08
 | 
			
		||||
### Fixed
 | 
			
		||||
* Fix package.json for compilation
 | 
			
		||||
   
 | 
			
		||||
 | 
			
		||||
## v4.0.0 - 2025-07-08
 | 
			
		||||
### Feature
 | 
			
		||||
* ([#359](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/359)) Allow the merge of two accompanying period works
 | 
			
		||||
### Fixed
 | 
			
		||||
* ([#390](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/390)) Display the list of participant in the results, even if there is only one participant and that the search result display the requestor
 | 
			
		||||
* Fix admin entity edit actions for event admin entities and activity reason (category) entities
 | 
			
		||||
* Fix translations for social action fields in admin form: results, goals, evaluations
 | 
			
		||||
### DX
 | 
			
		||||
* Rewrite exports to run them asynchronously
 | 
			
		||||
 | 
			
		||||
  **Schema Change**: Add columns or tables
 | 
			
		||||
* Allow TranslatableMessage in flash messages
 | 
			
		||||
### UX
 | 
			
		||||
* Improve labeling of fields in person resource creation form
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
**Release notes**
 | 
			
		||||
 | 
			
		||||
- Add new methods to serialize data using the rector rule
 | 
			
		||||
- Remove all references to the Request in filters, aggregators, filters. Actually, the most frequent occurence is `$security->getUser()`.
 | 
			
		||||
- Refactor manually the initializeQuery method
 | 
			
		||||
- Remove the injection of ExportManager into the constructor of each export element:
 | 
			
		||||
 | 
			
		||||
  ```diff
 | 
			
		||||
 | 
			
		||||
  - class MyFormatter implements FormatterInterface
 | 
			
		||||
  + class MyFormatter implements FormatterInterface, \Chill\MainBundle\Export\ExportManagerAwareInterface
 | 
			
		||||
  {
 | 
			
		||||
  +    use \Chill\MainBundle\Export\Helper\ExportManagerAwareTrait;
 | 
			
		||||
 | 
			
		||||
  -    public function __construct(private ExportManager $exportmanager) {}
 | 
			
		||||
 | 
			
		||||
       public function MyMethod(): void
 | 
			
		||||
       {
 | 
			
		||||
  -          $this->exportManager->getFilter('alias');
 | 
			
		||||
  +          $this->getExportManager()->getFilter('alias');
 | 
			
		||||
       }
 | 
			
		||||
  }
 | 
			
		||||
  ```
 | 
			
		||||
- configure messenger to handle export in a queue:
 | 
			
		||||
 | 
			
		||||
```diff
 | 
			
		||||
# config/packages/messenger.yaml
 | 
			
		||||
framework:
 | 
			
		||||
    messenger:
 | 
			
		||||
        routing:
 | 
			
		||||
+            'Chill\MainBundle\Export\Messenger\ExportRequestGenerationMessage': priority
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
- add missing methods to exports, aggregators, filters, formatter:
 | 
			
		||||
 | 
			
		||||
  ```php
 | 
			
		||||
  public function normalizeFormData(array $formData): array;
 | 
			
		||||
 | 
			
		||||
  public function denormalizeFormData(array $formData, int $fromVersion): array;
 | 
			
		||||
  ```
 | 
			
		||||
 | 
			
		||||
  There are rector rules to generate those methods:
 | 
			
		||||
 | 
			
		||||
  - `Chill\Utils\Rector\Rector\ChillBundleAddNormalizationMethodsOnExportRector`
 | 
			
		||||
 | 
			
		||||
  See:
 | 
			
		||||
 | 
			
		||||
  ```php
 | 
			
		||||
  // upgrade chill exports
 | 
			
		||||
  $rectorConfig->rules([\Chill\Utils\Rector\Rector\ChillBundleAddNormalizationMethodsOnExportRector::class]);
 | 
			
		||||
  ```
 | 
			
		||||
 | 
			
		||||
  This rule will create most of the work necessary, but some manuals changes are still necessary:
 | 
			
		||||
 | 
			
		||||
  - we must set manually the correct repository for method `denormalizeDoctrineEntity`;
 | 
			
		||||
  - when the form data contains some entities, and the form type is not one of EntityType::class, PickUserDynamicType::class, PickUserLocationType::class, PickThirdpartyDynamicType::class, Select2CountryType::class, then we must handle the normalization manually (using the `\Chill\MainBundle\Export\ExportDataNormalizerTrait`)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## v3.12.1 - 2025-06-30
 | 
			
		||||
### Fixed
 | 
			
		||||
* Fix loading of the list of documents   
 | 
			
		||||
 | 
			
		||||
## v3.12.0 - 2025-06-30
 | 
			
		||||
### Feature
 | 
			
		||||
* ([#377](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/377)) Add the document file name to the document title when a user upload a document, unless there is already a document title.   
 | 
			
		||||
* Add desactivation date for social action and issue csv export   
 | 
			
		||||
* Add Emoji and Fullscreen feature to ckeditor configuration   
 | 
			
		||||
* ([#321](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/321)) Create editor which allow us to toggle between rich and simple text editor   
 | 
			
		||||
* Do not remove workflow which are automatically canceled after staling for more than 30 days   
 | 
			
		||||
### Fixed
 | 
			
		||||
* ([#376](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/376)) trying to prevent bug of typeerror in doc-history + improved display of document history   
 | 
			
		||||
* ([#381](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/381)) Display previous participation in acc course work even if the person has left the acc course   
 | 
			
		||||
* ([#372](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/372)) Fix display of text in calendar events   
 | 
			
		||||
* Add missing translation for user_group.no_user_groups   
 | 
			
		||||
* Fix admin entity edit actions for event admin entities and activity reason (category) entities   
 | 
			
		||||
* ([#392](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/392)) Allow null and cast as string to setContent method for NewsItem
 | 
			
		||||
   
 | 
			
		||||
* ([#393](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/393)) Doc Generation: the "dump only" method send the document as an email attachment.   
 | 
			
		||||
### DX
 | 
			
		||||
* ([#352](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/352)) Remove dead code for wopi-link module   
 | 
			
		||||
* Replace library node-sass by sass, and upgrade bootstrap to version 5.3 (yarn upgrade / install is required)   
 | 
			
		||||
### UX
 | 
			
		||||
* ([#374](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/374)) Remove default filter in_progress for the page 'my tasks'; Allows for new tasks to be displayed upon opening of the page   
 | 
			
		||||
* Improve labeling of fields in person resource creation form   
 | 
			
		||||
 | 
			
		||||
## v3.11.0 - 2025-04-17
 | 
			
		||||
### Feature
 | 
			
		||||
* ([#365](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/365)) Add counters of actions and activities, with 2 boxes to (1) show the number of active actions on total actions and (2) show the number of activities in a accompanying period, and pills in menus for showing the number of active actions and the number of activities.
 | 
			
		||||
* ([#364](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/364)) Added a second phone number "telephone2" to the thirdParty entity. Adapted twig templates and vuejs apps to handle this phone number
 | 
			
		||||
 | 
			
		||||
  **Schema Change**: Add columns or tables
 | 
			
		||||
* Signature: add a button to go directly to the signature zone, even if there is only one
 | 
			
		||||
### Fixed
 | 
			
		||||
* Fixed wrong translations in the on-the-fly for creation of thirdParty
 | 
			
		||||
* Fixed update of phone number in on-the-fly edition of thirdParty
 | 
			
		||||
* Fixed closing of modal when editing thirdParty in accompanying course works
 | 
			
		||||
* Shorten the delay between two execution of AccompanyingPeriodStepChangeCronjob, to ensure at least one execution in a day
 | 
			
		||||
* ([#102](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/102)) Fix display of title in document list
 | 
			
		||||
* When cleaning the old stored object versions, do not throw an error if the stored object is not found on disk
 | 
			
		||||
* Add consistent log prefix and key to logs when stale workflows are automatically canceled
 | 
			
		||||
* ([#380](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/380)) Remove the "not null" validation constraint on recently added properties on HouseholdComposition
 | 
			
		||||
 | 
			
		||||
### DX
 | 
			
		||||
* Add new chill-col style for displaying title and aside in a flex table
 | 
			
		||||
 | 
			
		||||
## v3.10.3 - 2025-03-18
 | 
			
		||||
### DX
 | 
			
		||||
* Eslint fixes   
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										121
									
								
								composer.json
									
									
									
									
									
								
							
							
						
						
									
										121
									
								
								composer.json
									
									
									
									
									
								
							@@ -8,7 +8,7 @@
 | 
			
		||||
        "social worker"
 | 
			
		||||
    ],
 | 
			
		||||
    "require": {
 | 
			
		||||
        "php": "^8.3",
 | 
			
		||||
        "php": "^8.2",
 | 
			
		||||
        "ext-dom": "*",
 | 
			
		||||
        "ext-json": "*",
 | 
			
		||||
        "ext-openssl": "*",
 | 
			
		||||
@@ -19,10 +19,10 @@
 | 
			
		||||
        "doctrine/data-fixtures": "^1.8",
 | 
			
		||||
        "doctrine/doctrine-bundle": "^2.1",
 | 
			
		||||
        "doctrine/doctrine-migrations-bundle": "^3.0",
 | 
			
		||||
        "doctrine/orm": "^3.5.2",
 | 
			
		||||
        "doctrine/orm": "^2.13.0",
 | 
			
		||||
        "erusev/parsedown": "^1.7",
 | 
			
		||||
        "knplabs/knp-menu-bundle": "^3.0",
 | 
			
		||||
        "knplabs/knp-time-bundle": "^2.4",
 | 
			
		||||
        "knplabs/knp-time-bundle": "^1.12",
 | 
			
		||||
        "knpuniversity/oauth2-client-bundle": "^2.10",
 | 
			
		||||
        "league/csv": "^9.7.1",
 | 
			
		||||
        "lexik/jwt-authentication-bundle": "^2.16",
 | 
			
		||||
@@ -32,53 +32,54 @@
 | 
			
		||||
        "ovh/ovh": "^3.0",
 | 
			
		||||
        "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/amqp-messenger": "^7.3",
 | 
			
		||||
        "symfony/asset": "^7.2",
 | 
			
		||||
        "symfony/browser-kit": "^7.2",
 | 
			
		||||
        "symfony/cache": "^7.2",
 | 
			
		||||
        "symfony/clock": "^7.2",
 | 
			
		||||
        "symfony/config": "^7.2",
 | 
			
		||||
        "symfony/console": "^7.2",
 | 
			
		||||
        "symfony/css-selector": "^7.2",
 | 
			
		||||
        "symfony/dom-crawler": "^7.2",
 | 
			
		||||
        "symfony/error-handler": "^7.2",
 | 
			
		||||
        "symfony/event-dispatcher": "^7.2",
 | 
			
		||||
        "symfony/event-dispatcher-contracts": "^3.0",
 | 
			
		||||
        "symfony/expression-language": "^7.2",
 | 
			
		||||
        "symfony/filesystem": "^7.2",
 | 
			
		||||
        "symfony/finder": "^7.2",
 | 
			
		||||
        "symfony/form": "^7.2",
 | 
			
		||||
        "symfony/framework-bundle": "^7.2",
 | 
			
		||||
        "symfony/http-client": "^7.2",
 | 
			
		||||
        "symfony/http-foundation": "^7.2",
 | 
			
		||||
        "symfony/intl": "^7.2",
 | 
			
		||||
        "symfony/mailer": "^7.2",
 | 
			
		||||
        "symfony/messenger": "^7.2",
 | 
			
		||||
        "symfony/mime": "^7.2",
 | 
			
		||||
        "symfony/asset": "^5.4",
 | 
			
		||||
        "symfony/browser-kit": "^5.4",
 | 
			
		||||
        "symfony/cache": "^5.4",
 | 
			
		||||
        "symfony/clock": "^6.2",
 | 
			
		||||
        "symfony/config": "^5.4",
 | 
			
		||||
        "symfony/console": "^5.4",
 | 
			
		||||
        "symfony/css-selector": "^5.4",
 | 
			
		||||
        "symfony/dom-crawler": "^5.4",
 | 
			
		||||
        "symfony/error-handler": "^5.4",
 | 
			
		||||
        "symfony/event-dispatcher": "^5.4",
 | 
			
		||||
        "symfony/event-dispatcher-contracts": "^2.4",
 | 
			
		||||
        "symfony/expression-language": "^5.4",
 | 
			
		||||
        "symfony/filesystem": "^5.4",
 | 
			
		||||
        "symfony/finder": "^5.4",
 | 
			
		||||
        "symfony/form": "^5.4",
 | 
			
		||||
        "symfony/framework-bundle": "^5.4",
 | 
			
		||||
        "symfony/http-client": "^5.4",
 | 
			
		||||
        "symfony/http-foundation": "^5.4",
 | 
			
		||||
        "symfony/intl": "^5.4",
 | 
			
		||||
        "symfony/mailer": "^5.4",
 | 
			
		||||
        "symfony/messenger": "^5.4",
 | 
			
		||||
        "symfony/mime": "^5.4",
 | 
			
		||||
        "symfony/monolog-bundle": "^3.5",
 | 
			
		||||
        "symfony/notifier": "^7.2",
 | 
			
		||||
        "symfony/options-resolver": "^7.2",
 | 
			
		||||
        "symfony/ovh-cloud-notifier": "^7.2",
 | 
			
		||||
        "symfony/polyfill-intl-messageformatter": "^1.32",
 | 
			
		||||
        "symfony/process": "^7.2",
 | 
			
		||||
        "symfony/property-access": "^7.2",
 | 
			
		||||
        "symfony/property-info": "^7.2",
 | 
			
		||||
        "symfony/routing": "^7.2",
 | 
			
		||||
        "symfony/security-bundle": "^7.3",
 | 
			
		||||
        "symfony/security-core": "^7.2",
 | 
			
		||||
        "symfony/security-csrf": "^7.2",
 | 
			
		||||
        "symfony/security-http": "^7.2",
 | 
			
		||||
        "symfony/serializer": "^7.2",
 | 
			
		||||
        "symfony/string": "^7.2",
 | 
			
		||||
        "symfony/translation": "^7.3",
 | 
			
		||||
        "symfony/twig-bundle": "^7.3",
 | 
			
		||||
        "symfony/notifier": "^5.4",
 | 
			
		||||
        "symfony/options-resolver": "^5.4",
 | 
			
		||||
        "symfony/ovh-cloud-notifier": "^5.4",
 | 
			
		||||
        "symfony/process": "^5.4",
 | 
			
		||||
        "symfony/property-access": "^5.4",
 | 
			
		||||
        "symfony/property-info": "^5.4",
 | 
			
		||||
        "symfony/routing": "^5.4",
 | 
			
		||||
        "symfony/security-bundle": "^5.4",
 | 
			
		||||
        "symfony/security-core": "^5.4",
 | 
			
		||||
        "symfony/security-csrf": "^5.4",
 | 
			
		||||
        "symfony/security-guard": "^5.4",
 | 
			
		||||
        "symfony/security-http": "^5.4",
 | 
			
		||||
        "symfony/serializer": "^5.4",
 | 
			
		||||
        "symfony/string": "^5.4",
 | 
			
		||||
        "symfony/templating": "^5.4",
 | 
			
		||||
        "symfony/translation": "^5.4",
 | 
			
		||||
        "symfony/twig-bundle": "^5.4",
 | 
			
		||||
        "symfony/ux-translator": "^2.22",
 | 
			
		||||
        "symfony/validator": "^7.2",
 | 
			
		||||
        "symfony/webpack-encore-bundle": "^2.0",
 | 
			
		||||
        "symfony/workflow": "^7.2",
 | 
			
		||||
        "symfony/yaml": "^7.2",
 | 
			
		||||
        "symfony/validator": "^5.4",
 | 
			
		||||
        "symfony/webpack-encore-bundle": "^1.11",
 | 
			
		||||
        "symfony/workflow": "^5.4",
 | 
			
		||||
        "symfony/yaml": "^5.4",
 | 
			
		||||
        "thenetworg/oauth2-azure": "^2.0",
 | 
			
		||||
        "twig/extra-bundle": "^3.0",
 | 
			
		||||
        "twig/intl-extra": "^3.0",
 | 
			
		||||
@@ -89,27 +90,27 @@
 | 
			
		||||
    "require-dev": {
 | 
			
		||||
        "doctrine/doctrine-fixtures-bundle": "^3.3",
 | 
			
		||||
        "fakerphp/faker": "^1.13",
 | 
			
		||||
        "friendsofphp/php-cs-fixer": "3.88.2",
 | 
			
		||||
        "jangregor/phpstan-prophecy": "^2.2",
 | 
			
		||||
        "friendsofphp/php-cs-fixer": "3.65.0",
 | 
			
		||||
        "jangregor/phpstan-prophecy": "^1.0",
 | 
			
		||||
        "nelmio/alice": "^3.8",
 | 
			
		||||
        "nikic/php-parser": "^4.15",
 | 
			
		||||
        "phpspec/prophecy-phpunit": "^2.0",
 | 
			
		||||
        "phpstan/extension-installer": "^1.2",
 | 
			
		||||
        "phpstan/phpstan": "^2.1.30",
 | 
			
		||||
        "phpstan/phpstan-deprecation-rules": "^2.0",
 | 
			
		||||
        "phpstan/phpstan-doctrine": "^2.0",
 | 
			
		||||
        "phpstan/phpstan-strict-rules": "^2.0.7",
 | 
			
		||||
        "phpstan/phpstan-symfony": "^2.0",
 | 
			
		||||
        "phpstan/phpstan": "^1.9",
 | 
			
		||||
        "phpstan/phpstan-deprecation-rules": "^1.1",
 | 
			
		||||
        "phpstan/phpstan-strict-rules": "^1.0",
 | 
			
		||||
        "phpunit/phpunit": "^10.5.24",
 | 
			
		||||
        "rector/rector": "^2.2",
 | 
			
		||||
        "symfony/debug-bundle": "^7.2",
 | 
			
		||||
        "symfony/dotenv": "^7.2",
 | 
			
		||||
        "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": "^7.2",
 | 
			
		||||
        "symfony/stopwatch": "^7.2",
 | 
			
		||||
        "symfony/var-dumper": "^7.2",
 | 
			
		||||
        "symfony/web-profiler-bundle": "^7.2"
 | 
			
		||||
        "symfony/runtime": "^5.4",
 | 
			
		||||
        "symfony/stopwatch": "^5.4",
 | 
			
		||||
        "symfony/var-dumper": "^5.4",
 | 
			
		||||
        "symfony/web-profiler-bundle": "^5.4"
 | 
			
		||||
    },
 | 
			
		||||
    "conflict": {
 | 
			
		||||
        "symfony/symfony": "*"
 | 
			
		||||
 
 | 
			
		||||
@@ -14,6 +14,7 @@ return [
 | 
			
		||||
    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],
 | 
			
		||||
 
 | 
			
		||||
@@ -17,7 +17,6 @@ chill_main:
 | 
			
		||||
    acl:
 | 
			
		||||
        form_show_scopes: true
 | 
			
		||||
        form_show_centers: true
 | 
			
		||||
        filter_stats_by_center: true
 | 
			
		||||
    access_global_history: false
 | 
			
		||||
    access_user_change_password: true
 | 
			
		||||
    access_permissions_group_list: true
 | 
			
		||||
 
 | 
			
		||||
@@ -1,11 +0,0 @@
 | 
			
		||||
# Enable stateless CSRF protection for forms and logins/logouts
 | 
			
		||||
framework:
 | 
			
		||||
    form:
 | 
			
		||||
        csrf_protection:
 | 
			
		||||
            token_id: submit
 | 
			
		||||
 | 
			
		||||
    csrf_protection:
 | 
			
		||||
        stateless_token_ids:
 | 
			
		||||
            - submit
 | 
			
		||||
            - authenticate
 | 
			
		||||
            - logout
 | 
			
		||||
@@ -7,7 +7,6 @@ doctrine:
 | 
			
		||||
        #server_version: '16'
 | 
			
		||||
        use_savepoints: true
 | 
			
		||||
    orm:
 | 
			
		||||
        enable_lazy_ghost_objects: true
 | 
			
		||||
        auto_generate_proxy_classes: true
 | 
			
		||||
        naming_strategy: doctrine.orm.naming_strategy.default
 | 
			
		||||
        auto_mapping: true
 | 
			
		||||
 
 | 
			
		||||
@@ -4,16 +4,6 @@ framework:
 | 
			
		||||
    #csrf_protection: true
 | 
			
		||||
    http_method_override: false
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    # Enable EntityValueResolver for automatic entity injection in controllers
 | 
			
		||||
    # This replaces the functionality previously provided by SensioFrameworkExtraBundle
 | 
			
		||||
    http_client:
 | 
			
		||||
        enabled: true
 | 
			
		||||
 | 
			
		||||
    request:
 | 
			
		||||
        formats:
 | 
			
		||||
            json: ['application/json']
 | 
			
		||||
 | 
			
		||||
    # Enables session support. Note that the session will ONLY be started if you read or write from it.
 | 
			
		||||
    # Remove or comment this section to explicitly disable session support.
 | 
			
		||||
    session:
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,11 @@
 | 
			
		||||
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://
 | 
			
		||||
@@ -16,9 +19,7 @@ framework:
 | 
			
		||||
                        async: ~
 | 
			
		||||
                    auto_setup: true
 | 
			
		||||
 | 
			
		||||
            priority:
 | 
			
		||||
                dsn: '%env(MESSENGER_TRANSPORT_DSN)%/priority'
 | 
			
		||||
 | 
			
		||||
            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'
 | 
			
		||||
@@ -60,10 +61,6 @@ framework:
 | 
			
		||||
            'Chill\MainBundle\Workflow\Messenger\PostSignatureStateChangeMessage': priority
 | 
			
		||||
            'Chill\MainBundle\Workflow\Messenger\PostPublicViewMessage': async
 | 
			
		||||
            'Chill\MainBundle\Service\Workflow\CancelStaleWorkflowMessage': async
 | 
			
		||||
            'Chill\MainBundle\Notification\Email\NotificationEmailMessages\SendImmediateNotificationEmailMessage': async
 | 
			
		||||
            'Chill\MainBundle\Export\Messenger\ExportRequestGenerationMessage': priority
 | 
			
		||||
            'Chill\MainBundle\Export\Messenger\RemoveExportGenerationMessage': async
 | 
			
		||||
            'Chill\MainBundle\Notification\Email\NotificationEmailMessages\ScheduleDailyNotificationDigestMessage': async
 | 
			
		||||
            # end of routes added by chill-bundles recipes
 | 
			
		||||
            # Route your messages to the transports
 | 
			
		||||
            # 'App\Message\YourMessage': async
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,8 @@
 | 
			
		||||
framework:
 | 
			
		||||
    notifier:
 | 
			
		||||
        texter_transports:
 | 
			
		||||
        #ovhcloud: '%env(OVHCLOUD_DSN)%'
 | 
			
		||||
        #ovhcloud: '%env(SHORT_MESSAGE_DSN)%'
 | 
			
		||||
            #ovhcloud: '%env(OVHCLOUD_DSN)%'
 | 
			
		||||
            #ovhcloud: '%env(SHORT_MESSAGE_DSN)%'
 | 
			
		||||
        channel_policy:
 | 
			
		||||
            # use chat/slack, chat/telegram, sms/twilio or sms/nexmo
 | 
			
		||||
            urgent: ['email']
 | 
			
		||||
 
 | 
			
		||||
@@ -1,3 +0,0 @@
 | 
			
		||||
framework:
 | 
			
		||||
    property_info:
 | 
			
		||||
        enabled: true
 | 
			
		||||
@@ -1,4 +1,5 @@
 | 
			
		||||
security:
 | 
			
		||||
    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'
 | 
			
		||||
@@ -27,13 +28,16 @@ security:
 | 
			
		||||
            pattern: ^/wopi
 | 
			
		||||
            provider: chill_chain_provider
 | 
			
		||||
            stateless: true
 | 
			
		||||
            jwt: ~
 | 
			
		||||
            guard:
 | 
			
		||||
                authenticators:
 | 
			
		||||
                    - lexik_jwt_authentication.jwt_token_authenticator
 | 
			
		||||
        dav:
 | 
			
		||||
            pattern: ^/dav
 | 
			
		||||
            provider: chill_chain_provider
 | 
			
		||||
            stateless: true
 | 
			
		||||
            custom_authenticator:
 | 
			
		||||
                - Chill\DocStoreBundle\Security\Authenticator\JWTOnDavUrlAuthenticator
 | 
			
		||||
            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:
 | 
			
		||||
@@ -59,7 +63,7 @@ security:
 | 
			
		||||
    # 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: PUBLIC_ACCESS }
 | 
			
		||||
        - { path: ^/(login|logout), roles: IS_AUTHENTICATED_ANONYMOUSLY }
 | 
			
		||||
        - { path: ^/public, roles: IS_AUTHENTICATED_ANONYMOUSLY }
 | 
			
		||||
        - { path: ^/wopi, roles: IS_AUTHENTICATED_FULLY }
 | 
			
		||||
        # access for homepage, the homepage redirect admin to admin section
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										3
									
								
								config/packages/sensio_framework_extra.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								config/packages/sensio_framework_extra.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
			
		||||
sensio_framework_extra:
 | 
			
		||||
    router:
 | 
			
		||||
        annotations: false
 | 
			
		||||
@@ -1,4 +0,0 @@
 | 
			
		||||
framework:
 | 
			
		||||
    serializer:
 | 
			
		||||
        enabled: true
 | 
			
		||||
        enable_attributes: true
 | 
			
		||||
@@ -7,8 +7,7 @@ framework:
 | 
			
		||||
                        - Chill\PersonBundle\Entity\AccompanyingPeriod\AccompanyingPeriodWorkEvaluationDocument
 | 
			
		||||
                        - Chill\PersonBundle\Entity\AccompanyingPeriod\AccompanyingPeriodWork
 | 
			
		||||
                        - Chill\DocStoreBundle\Entity\AccompanyingCourseDocument
 | 
			
		||||
                label: Suivi
 | 
			
		||||
                translated_labels:
 | 
			
		||||
                label:
 | 
			
		||||
                    fr: 'Suivi'
 | 
			
		||||
            support_strategy: Chill\MainBundle\Workflow\RelatedEntityWorkflowSupportsStrategy
 | 
			
		||||
            marking_store:
 | 
			
		||||
@@ -17,13 +16,11 @@ framework:
 | 
			
		||||
            places:
 | 
			
		||||
                initial:
 | 
			
		||||
                    metadata:
 | 
			
		||||
                        label: Étape initiale
 | 
			
		||||
                        translated_labels:
 | 
			
		||||
                        label:
 | 
			
		||||
                            fr: Étape initiale
 | 
			
		||||
                attenteModification:
 | 
			
		||||
                    metadata:
 | 
			
		||||
                        label: En attente de modification du document
 | 
			
		||||
                        translated_labels:
 | 
			
		||||
                        label:
 | 
			
		||||
                            fr: En attente de modification du document
 | 
			
		||||
                        validationFilterInputLabels:
 | 
			
		||||
                            forward: {fr: Modification effectuée}
 | 
			
		||||
@@ -31,8 +28,7 @@ framework:
 | 
			
		||||
                            neutral: {fr: Autre}
 | 
			
		||||
                attenteMiseEnForme:
 | 
			
		||||
                    metadata:
 | 
			
		||||
                        label: En attente de mise en forme
 | 
			
		||||
                        translated_labels:
 | 
			
		||||
                        label:
 | 
			
		||||
                            fr: En attente de mise en forme
 | 
			
		||||
                        validationFilterInputLabels:
 | 
			
		||||
                            forward: {fr: Mise en forme terminée}
 | 
			
		||||
@@ -40,8 +36,7 @@ framework:
 | 
			
		||||
                            neutral: {fr: Autre}
 | 
			
		||||
                attenteVisa:
 | 
			
		||||
                    metadata:
 | 
			
		||||
                        label: En attente de visa
 | 
			
		||||
                        translated_labels:
 | 
			
		||||
                        label:
 | 
			
		||||
                            fr: En attente de visa
 | 
			
		||||
                        validationFilterInputLabels:
 | 
			
		||||
                            forward: {fr: Visa accordé}
 | 
			
		||||
@@ -52,8 +47,7 @@ framework:
 | 
			
		||||
                        isSignature: ['user', 'person']
 | 
			
		||||
                        onSignatureCompleted:
 | 
			
		||||
                            transitionName: signatureApplied
 | 
			
		||||
                        label: En attente de signature
 | 
			
		||||
                        translated_labels:
 | 
			
		||||
                        label:
 | 
			
		||||
                            fr: En attente de signature
 | 
			
		||||
                        validationFilterInputLabels:
 | 
			
		||||
                            forward: {fr: Signature accordée}
 | 
			
		||||
@@ -61,8 +55,7 @@ framework:
 | 
			
		||||
                            neutral: {fr: Autre}
 | 
			
		||||
                postSignature:
 | 
			
		||||
                    metadata:
 | 
			
		||||
                        label: Signatures traitées
 | 
			
		||||
                        translated_labels:
 | 
			
		||||
                        label:
 | 
			
		||||
                            fr: Signatures traitées
 | 
			
		||||
                        validationFilterInputLabels:
 | 
			
		||||
                            forward: {fr: Poursuite du traitement}
 | 
			
		||||
@@ -70,8 +63,7 @@ framework:
 | 
			
		||||
                            neutral: {fr: Autre}
 | 
			
		||||
                attenteTraitement:
 | 
			
		||||
                    metadata:
 | 
			
		||||
                        label: En attente de traitement
 | 
			
		||||
                        translated_labels:
 | 
			
		||||
                        label:
 | 
			
		||||
                            fr: En attente de traitement
 | 
			
		||||
                        validationFilterInputLabels:
 | 
			
		||||
                            forward: {fr: Traitement terminé favorablement}
 | 
			
		||||
@@ -79,8 +71,7 @@ framework:
 | 
			
		||||
                            neutral: {fr: Autre}
 | 
			
		||||
                attenteEnvoi:
 | 
			
		||||
                    metadata:
 | 
			
		||||
                        label: En attente d'envoi
 | 
			
		||||
                        translated_labels:
 | 
			
		||||
                        label:
 | 
			
		||||
                            fr: En attente d'envoi
 | 
			
		||||
                        validationFilterInputLabels:
 | 
			
		||||
                            forward: {fr: Document envoyé}
 | 
			
		||||
@@ -88,8 +79,7 @@ framework:
 | 
			
		||||
                            neutral: {fr: Autre}
 | 
			
		||||
                attenteValidationMiseEnForme:
 | 
			
		||||
                    metadata:
 | 
			
		||||
                        label: En attente de validation de la mise en forme
 | 
			
		||||
                        translated_labels:
 | 
			
		||||
                        label:
 | 
			
		||||
                            fr: En attente de validation de la mise en forme
 | 
			
		||||
                        validationFilterInputLabels:
 | 
			
		||||
                            forward: {fr: Validation de la mise en forme}
 | 
			
		||||
@@ -99,8 +89,7 @@ framework:
 | 
			
		||||
                    metadata:
 | 
			
		||||
                        isSentExternal: true
 | 
			
		||||
                        onExternalView: clotureApresLectureEnvoiExterne
 | 
			
		||||
                        label: En attente d'ouverture par un destinataire externe
 | 
			
		||||
                        translated_labels:
 | 
			
		||||
                        label:
 | 
			
		||||
                            fr: En attente d'ouverture par un destinataire externe
 | 
			
		||||
                        validationFilterInputLabels:
 | 
			
		||||
                            forward: {fr: Document reçu par un destinataire externe}
 | 
			
		||||
@@ -110,15 +99,13 @@ framework:
 | 
			
		||||
                    metadata:
 | 
			
		||||
                        isFinal: true
 | 
			
		||||
                        isFinalPositive: false
 | 
			
		||||
                        label: Annulé
 | 
			
		||||
                        translated_labels:
 | 
			
		||||
                        label:
 | 
			
		||||
                            fr: Annulé
 | 
			
		||||
                final:
 | 
			
		||||
                    metadata:
 | 
			
		||||
                        isFinal: true
 | 
			
		||||
                        isFinalPositive: true
 | 
			
		||||
                        label: Finalisé
 | 
			
		||||
                        translated_labels:
 | 
			
		||||
                        label:
 | 
			
		||||
                            fr: Finalisé
 | 
			
		||||
            transitions:
 | 
			
		||||
                # transition qui avancent
 | 
			
		||||
@@ -127,8 +114,7 @@ framework:
 | 
			
		||||
                        - initial
 | 
			
		||||
                    to: attenteModification
 | 
			
		||||
                    metadata:
 | 
			
		||||
                        label: Demande de modification du document
 | 
			
		||||
                        translated_labels:
 | 
			
		||||
                        label:
 | 
			
		||||
                            fr: Demande de modification du document
 | 
			
		||||
                        isForward: true
 | 
			
		||||
                demandeMiseEnForme:
 | 
			
		||||
@@ -137,8 +123,7 @@ framework:
 | 
			
		||||
                        - attenteModification
 | 
			
		||||
                    to: attenteMiseEnForme
 | 
			
		||||
                    metadata:
 | 
			
		||||
                        label: Demande de mise en forme
 | 
			
		||||
                        translated_labels:
 | 
			
		||||
                        label:
 | 
			
		||||
                            fr: Demande de mise en forme
 | 
			
		||||
                        isForward: true
 | 
			
		||||
                demandeValidationMiseEnForme:
 | 
			
		||||
@@ -146,8 +131,7 @@ framework:
 | 
			
		||||
                        - attenteMiseEnForme
 | 
			
		||||
                    to: attenteValidationMiseEnForme
 | 
			
		||||
                    metadata:
 | 
			
		||||
                        label: Demande de validation de la mise en forme
 | 
			
		||||
                        translated_labels:
 | 
			
		||||
                        label:
 | 
			
		||||
                            fr: Demande de validation de la mise en forme
 | 
			
		||||
                        isForward: true
 | 
			
		||||
                demandeVisa:
 | 
			
		||||
@@ -160,8 +144,7 @@ framework:
 | 
			
		||||
                        - attenteTraitement
 | 
			
		||||
                    to: attenteVisa
 | 
			
		||||
                    metadata:
 | 
			
		||||
                        label: Demande de visa
 | 
			
		||||
                        translated_labels:
 | 
			
		||||
                        label:
 | 
			
		||||
                            fr: Demande de visa
 | 
			
		||||
                        isForward: true
 | 
			
		||||
                demandeSignature:
 | 
			
		||||
@@ -174,18 +157,14 @@ framework:
 | 
			
		||||
                        - attenteTraitement
 | 
			
		||||
                    to: attenteSignature
 | 
			
		||||
                    metadata:
 | 
			
		||||
                        label: Demande de signature
 | 
			
		||||
                        translated_labels:
 | 
			
		||||
                            fr: Demande de signature
 | 
			
		||||
                        label: {fr: Demande de signature}
 | 
			
		||||
                        isForward: true
 | 
			
		||||
                signatureApplied:
 | 
			
		||||
                    from:
 | 
			
		||||
                        - attenteSignature
 | 
			
		||||
                    to: postSignature
 | 
			
		||||
                    metadata:
 | 
			
		||||
                        label: Signatures appliquées
 | 
			
		||||
                        translated_labels:
 | 
			
		||||
                            fr: Signatures appliquées
 | 
			
		||||
                        label: {fr: Signatures appliquées}
 | 
			
		||||
                        isForward: true
 | 
			
		||||
                        transitionGuard: 'system' # can be 'system+only-dest' or 'only-dest' (only-dest is default)
 | 
			
		||||
                demandeTraitement:
 | 
			
		||||
@@ -198,9 +177,7 @@ framework:
 | 
			
		||||
                        - postSignature
 | 
			
		||||
                    to: attenteTraitement
 | 
			
		||||
                    metadata:
 | 
			
		||||
                        label: Demande de traitement
 | 
			
		||||
                        translated_labels:
 | 
			
		||||
                            fr: Demande de traitement
 | 
			
		||||
                        label: {fr: Demande de traitement}
 | 
			
		||||
                        isForward: true
 | 
			
		||||
                demandeEnvoi:
 | 
			
		||||
                    from:
 | 
			
		||||
@@ -213,9 +190,7 @@ framework:
 | 
			
		||||
                        - attenteTraitement
 | 
			
		||||
                    to: attenteEnvoi
 | 
			
		||||
                    metadata:
 | 
			
		||||
                        label: Demande d'envoi
 | 
			
		||||
                        translated_labels:
 | 
			
		||||
                            fr: Demande d'envoi
 | 
			
		||||
                        label: {fr: Demande d'envoi}
 | 
			
		||||
                        isForward: true
 | 
			
		||||
                demandeEnvoiExterne:
 | 
			
		||||
                    from:
 | 
			
		||||
@@ -228,9 +203,7 @@ framework:
 | 
			
		||||
                        - attenteTraitement
 | 
			
		||||
                    to: attenteReceptionExternal
 | 
			
		||||
                    metadata:
 | 
			
		||||
                        label: Envoi sécurisé par courrier électronique
 | 
			
		||||
                        translated_labels:
 | 
			
		||||
                            fr: Envoi sécurisé par courrier électronique
 | 
			
		||||
                        label: {fr: Envoi sécurisé par courrier électronique}
 | 
			
		||||
                        isForward: true
 | 
			
		||||
                clotureApresLectureEnvoiExterne:
 | 
			
		||||
                    from:
 | 
			
		||||
@@ -240,9 +213,7 @@ framework:
 | 
			
		||||
                    metadata:
 | 
			
		||||
                        transitionGuard: system
 | 
			
		||||
                        isForward:  true
 | 
			
		||||
                        label: Consultation de l'envoi sécurisé
 | 
			
		||||
                        translated_labels:
 | 
			
		||||
                            fr: Consultation de l'envoi sécurisé
 | 
			
		||||
                        label: {fr: Consultation de l'envoi sécurisé}
 | 
			
		||||
                annulation:
 | 
			
		||||
                    from:
 | 
			
		||||
                        - initial
 | 
			
		||||
@@ -256,9 +227,7 @@ framework:
 | 
			
		||||
                        - attenteEnvoi
 | 
			
		||||
                    to: annule
 | 
			
		||||
                    metadata:
 | 
			
		||||
                        label: Annulation
 | 
			
		||||
                        translated_labels:
 | 
			
		||||
                            fr: Annulation
 | 
			
		||||
                        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
 | 
			
		||||
@@ -268,35 +237,27 @@ framework:
 | 
			
		||||
                        - attenteValidationMiseEnForme
 | 
			
		||||
                    to: attenteMiseEnForme
 | 
			
		||||
                    metadata:
 | 
			
		||||
                        label: Demande de mise en forme supplémentaire
 | 
			
		||||
                        translated_labels:
 | 
			
		||||
                            fr: Demande de mise en forme supplémentaire
 | 
			
		||||
                        label: {fr: Demande de mise en forme supplémentaire}
 | 
			
		||||
                demandeVisaSupplementaire:
 | 
			
		||||
                    from:
 | 
			
		||||
                        - attenteVisa
 | 
			
		||||
                    to: attenteVisa
 | 
			
		||||
                    metadata:
 | 
			
		||||
                        label: Demande de visa supplémentaire
 | 
			
		||||
                        translated_labels:
 | 
			
		||||
                            fr: Demande de visa supplémentaire
 | 
			
		||||
                        label: {fr: Demande de visa supplémentaire}
 | 
			
		||||
                        isForward: true
 | 
			
		||||
                demandeSignatureSupplementaire:
 | 
			
		||||
                    from:
 | 
			
		||||
                        - postSignature
 | 
			
		||||
                    to: attenteSignature
 | 
			
		||||
                    metadata:
 | 
			
		||||
                        label: Demande de signature supplémentaire
 | 
			
		||||
                        translated_labels:
 | 
			
		||||
                            fr: Demande de signature supplémentaire
 | 
			
		||||
                        label: {fr: Demande de signature supplémentaire}
 | 
			
		||||
                        isForward: true
 | 
			
		||||
                demandeTraitementSupplementaire:
 | 
			
		||||
                    from:
 | 
			
		||||
                        - attenteTraitement
 | 
			
		||||
                    to: attenteTraitement
 | 
			
		||||
                    metadata:
 | 
			
		||||
                        label: Demande de traitement supplémentaire
 | 
			
		||||
                        translated_labels:
 | 
			
		||||
                            fr: Demande de traitement supplémentaire
 | 
			
		||||
                        label: {fr: Demande de traitement supplémentaire}
 | 
			
		||||
                # transitions qui renvoient vers une étape précédente
 | 
			
		||||
                refusEtModificationDocument:
 | 
			
		||||
                    from:
 | 
			
		||||
@@ -306,8 +267,7 @@ framework:
 | 
			
		||||
                        - attenteEnvoi
 | 
			
		||||
                    to: attenteModification
 | 
			
		||||
                    metadata:
 | 
			
		||||
                        label: Refus et demande de modification du document
 | 
			
		||||
                        translated_labels:
 | 
			
		||||
                        label:
 | 
			
		||||
                            fr: Refus et demande de modification du document
 | 
			
		||||
                        isForward: false
 | 
			
		||||
                refusEtDemandeMiseEnForme:
 | 
			
		||||
@@ -317,9 +277,7 @@ framework:
 | 
			
		||||
                        - attenteEnvoi
 | 
			
		||||
                    to: attenteMiseEnForme
 | 
			
		||||
                    metadata:
 | 
			
		||||
                        label: Refus et demande de mise en forme
 | 
			
		||||
                        translated_labels:
 | 
			
		||||
                            fr: Refus et demande de mise en forme
 | 
			
		||||
                        label: {fr: Refus et demande de mise en forme}
 | 
			
		||||
                        isForward: false
 | 
			
		||||
                refusEtDemandeVisa:
 | 
			
		||||
                    from:
 | 
			
		||||
@@ -327,27 +285,21 @@ framework:
 | 
			
		||||
                        - attenteEnvoi
 | 
			
		||||
                    to: attenteVisa
 | 
			
		||||
                    metadata:
 | 
			
		||||
                        label: Refus et demande de visa
 | 
			
		||||
                        translated_labels:
 | 
			
		||||
                            fr: Refus et demande de visa
 | 
			
		||||
                        label: {fr: Refus et demande de visa}
 | 
			
		||||
                        isForward: false
 | 
			
		||||
                refusEtDemandeSignature:
 | 
			
		||||
                    from:
 | 
			
		||||
                        - attenteEnvoi
 | 
			
		||||
                    to: attenteSignature
 | 
			
		||||
                    metadata:
 | 
			
		||||
                        label: Refus et demande de signature
 | 
			
		||||
                        translated_labels:
 | 
			
		||||
                            fr: Refus et demande de signature
 | 
			
		||||
                        label: {fr: Refus et demande de signature}
 | 
			
		||||
                        isForward: false
 | 
			
		||||
                refusEtDemandeTraitement:
 | 
			
		||||
                    from:
 | 
			
		||||
                        - attenteEnvoi
 | 
			
		||||
                    to: attenteTraitement
 | 
			
		||||
                    metadata:
 | 
			
		||||
                        label: Refus et demande de traitement
 | 
			
		||||
                        translated_labels:
 | 
			
		||||
                            fr: Refus et demande de traitement
 | 
			
		||||
                        label: {fr: Refus et demande de traitement}
 | 
			
		||||
                        isForward: false
 | 
			
		||||
                # transition vers final
 | 
			
		||||
                initialToFinal:
 | 
			
		||||
@@ -355,9 +307,7 @@ framework:
 | 
			
		||||
                        - initial
 | 
			
		||||
                    to: final
 | 
			
		||||
                    metadata:
 | 
			
		||||
                        label: Clotûre immédiate et cloture positive
 | 
			
		||||
                        translated_labels:
 | 
			
		||||
                            fr: Clotûre immédiate et cloture positive
 | 
			
		||||
                        label: {fr: Clotûre immédiate et cloture positive}
 | 
			
		||||
                        isForward: true
 | 
			
		||||
                attenteMiseEnFormeToFinal:
 | 
			
		||||
                    from:
 | 
			
		||||
@@ -365,43 +315,33 @@ framework:
 | 
			
		||||
                        - attenteValidationMiseEnForme
 | 
			
		||||
                    to: final
 | 
			
		||||
                    metadata:
 | 
			
		||||
                        label: Mise en forme terminée et cloture positive
 | 
			
		||||
                        translated_labels:
 | 
			
		||||
                            fr: Mise en forme terminée et cloture positive
 | 
			
		||||
                        label: {fr: Mise en forme terminée et cloture positive}
 | 
			
		||||
                        isForward: true
 | 
			
		||||
                attenteVisaToFinal:
 | 
			
		||||
                    from:
 | 
			
		||||
                        - attenteVisa
 | 
			
		||||
                    to: final
 | 
			
		||||
                    metadata:
 | 
			
		||||
                        label: Accorde le visa et cloture positive
 | 
			
		||||
                        translated_labels:
 | 
			
		||||
                            fr: Accorde le visa et cloture positive
 | 
			
		||||
                        label: {fr: Accorde le visa et cloture positive}
 | 
			
		||||
                        isForward: true
 | 
			
		||||
                postSignatureToFinal:
 | 
			
		||||
                    from:
 | 
			
		||||
                        - postSignature
 | 
			
		||||
                    to: final
 | 
			
		||||
                    metadata:
 | 
			
		||||
                        label: Cloture positive
 | 
			
		||||
                        translated_labels:
 | 
			
		||||
                            fr: Cloture positive
 | 
			
		||||
                        label: {fr: Cloture positive}
 | 
			
		||||
                        isForward: true
 | 
			
		||||
                attenteTraitementToFinal:
 | 
			
		||||
                    from:
 | 
			
		||||
                        - attenteTraitement
 | 
			
		||||
                    to: final
 | 
			
		||||
                    metadata:
 | 
			
		||||
                        label: Traitement terminé et cloture positive
 | 
			
		||||
                        translated_labels:
 | 
			
		||||
                            fr: Traitement terminé et cloture positive
 | 
			
		||||
                        label: {fr: Traitement terminé et cloture positive}
 | 
			
		||||
                        isForward: true
 | 
			
		||||
                attenteEnvoiToFinal:
 | 
			
		||||
                    from:
 | 
			
		||||
                        - attenteEnvoi
 | 
			
		||||
                    to: final
 | 
			
		||||
                    metadata:
 | 
			
		||||
                        label: Envoyé et cloture positive
 | 
			
		||||
                        translated_labels:
 | 
			
		||||
                            fr: Envoyé et cloture positive
 | 
			
		||||
                        label: {fr: Envoyé et cloture positive}
 | 
			
		||||
                        isForward: true
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										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
 | 
			
		||||
@@ -1,3 +0,0 @@
 | 
			
		||||
_security_logout:
 | 
			
		||||
    resource: security.route_loader.logout
 | 
			
		||||
    type: service
 | 
			
		||||
@@ -6,20 +6,8 @@
 | 
			
		||||
parameters:
 | 
			
		||||
 | 
			
		||||
services:
 | 
			
		||||
    #alias to inject container into AbstractController::setContainer
 | 
			
		||||
    Psr\Container\ContainerInterface: '@service_container'
 | 
			
		||||
 | 
			
		||||
    # default configuration for services in *this* file
 | 
			
		||||
    _defaults:
 | 
			
		||||
        autowire: true      # Automatically injects dependencies in your services.
 | 
			
		||||
        autoconfigure: true # Automatically registers your services as commands, event subscribers, etc.
 | 
			
		||||
 | 
			
		||||
    # Custom entity value resolver to replace SensioFrameworkExtraBundle functionality
 | 
			
		||||
    Chill\MainBundle\ArgumentResolver\EntityValueResolver:
 | 
			
		||||
        tags:
 | 
			
		||||
            - { name: controller.argument_value_resolver, priority: 50 }
 | 
			
		||||
 | 
			
		||||
    Chill\MainBundle\Serializer\CircularReferenceHandler:
 | 
			
		||||
        public: false
 | 
			
		||||
        tags:
 | 
			
		||||
            - { name: 'serializer.circular_reference_handler' }
 | 
			
		||||
 
 | 
			
		||||
@@ -12,16 +12,14 @@ declare(strict_types=1);
 | 
			
		||||
namespace Chill\PersonBundle\Export\Filter;
 | 
			
		||||
 | 
			
		||||
use Chill\MainBundle\Export\ExportElementValidatedInterface;
 | 
			
		||||
use Chill\MainBundle\Export\ExportGenerationContext;
 | 
			
		||||
use Chill\MainBundle\Export\FilterInterface;
 | 
			
		||||
use DateTime;
 | 
			
		||||
use Doctrine\ORM\Query\Expr;
 | 
			
		||||
use Symfony\Component\Form\Extension\Core\Type\DateType;
 | 
			
		||||
use Symfony\Component\Validator\Context\ExecutionContextInterface;
 | 
			
		||||
 | 
			
		||||
class BirthdateFilter implements ExportElementValidatedInterface, FilterInterface
 | 
			
		||||
{
 | 
			
		||||
    use \Chill\MainBundle\Export\ExportDataNormalizerTrait;
 | 
			
		||||
 | 
			
		||||
    // add specific role for this filter
 | 
			
		||||
    public function addRole(): ?string
 | 
			
		||||
    {
 | 
			
		||||
@@ -30,7 +28,7 @@ class BirthdateFilter implements ExportElementValidatedInterface, FilterInterfac
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // here, we alter the query created by Export
 | 
			
		||||
    public function alterQuery(\Doctrine\ORM\QueryBuilder $qb, $data, ExportGenerationContext $exportGenerationContext): void
 | 
			
		||||
    public function alterQuery(\Doctrine\ORM\QueryBuilder $qb, $data)
 | 
			
		||||
    {
 | 
			
		||||
        $where = $qb->getDQLPart('where');
 | 
			
		||||
        // we create the clause here
 | 
			
		||||
@@ -54,13 +52,13 @@ class BirthdateFilter implements ExportElementValidatedInterface, FilterInterfac
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // we give information on which type of export this filter applies
 | 
			
		||||
    public function applyOn(): string
 | 
			
		||||
    public function applyOn()
 | 
			
		||||
    {
 | 
			
		||||
        return 'person';
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // we build a form to collect some parameters from the users
 | 
			
		||||
    public function buildForm(\Symfony\Component\Form\FormBuilderInterface $builder): void
 | 
			
		||||
    public function buildForm(\Symfony\Component\Form\FormBuilderInterface $builder)
 | 
			
		||||
    {
 | 
			
		||||
        $builder->add('date_from', DateType::class, [
 | 
			
		||||
            'label' => 'Born after this date',
 | 
			
		||||
@@ -76,39 +74,23 @@ class BirthdateFilter implements ExportElementValidatedInterface, FilterInterfac
 | 
			
		||||
            'format' => 'dd-MM-yyyy',
 | 
			
		||||
        ]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getNormalizationVersion(): int
 | 
			
		||||
    {
 | 
			
		||||
        return 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function normalizeFormData(array $formData): array
 | 
			
		||||
    {
 | 
			
		||||
        return ['date_from' => $this->normalizeDate($formData['date_from']), 'date_to' => $this->normalizeDate($formData['date_to'])];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function denormalizeFormData(array $formData, int $fromVersion): array
 | 
			
		||||
    {
 | 
			
		||||
        return ['date_from' => $this->denormalizeDate($formData['date_from']), 'date_to' => $this->denormalizeDate($formData['date_to'])];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getFormDefaultData(): array
 | 
			
		||||
    {
 | 
			
		||||
        return ['date_from' => new \DateTime(), 'date_to' => new \DateTime()];
 | 
			
		||||
        return ['date_from' => new DateTime(), 'date_to' => new DateTime()];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // here, we create a simple string which will describe the action of
 | 
			
		||||
    // the filter in the Response
 | 
			
		||||
    public function describeAction($data, ExportGenerationContext $context): string|\Symfony\Contracts\Translation\TranslatableInterface|array
 | 
			
		||||
    public function describeAction($data, $format = 'string')
 | 
			
		||||
    {
 | 
			
		||||
        return ['Filtered by person\'s birtdate: '
 | 
			
		||||
            .'between %date_from% and %date_to%', [
 | 
			
		||||
            . 'between %date_from% and %date_to%', [
 | 
			
		||||
                '%date_from%' => $data['date_from']->format('d-m-Y'),
 | 
			
		||||
                '%date_to%' => $data['date_to']->format('d-m-Y'),
 | 
			
		||||
            ], ];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getTitle(): string|\Symfony\Contracts\Translation\TranslatableInterface
 | 
			
		||||
    public function getTitle()
 | 
			
		||||
    {
 | 
			
		||||
        return 'Filter by person\'s birthdate';
 | 
			
		||||
    }
 | 
			
		||||
@@ -117,20 +99,20 @@ class BirthdateFilter implements ExportElementValidatedInterface, FilterInterfac
 | 
			
		||||
    // is executed here. This function is added by the interface
 | 
			
		||||
    // `ExportElementValidatedInterface`, and can be ignore if there is
 | 
			
		||||
    // no need for a validation
 | 
			
		||||
    public function validateForm($data, ExecutionContextInterface $context): void
 | 
			
		||||
    public function validateForm($data, ExecutionContextInterface $context)
 | 
			
		||||
    {
 | 
			
		||||
        $date_from = $data['date_from'];
 | 
			
		||||
        $date_to = $data['date_to'];
 | 
			
		||||
 | 
			
		||||
        if (null === $date_from) {
 | 
			
		||||
            $context->buildViolation('The "date from" should not be empty')
 | 
			
		||||
                // ->atPath('date_from')
 | 
			
		||||
                //->atPath('date_from')
 | 
			
		||||
                ->addViolation();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (null === $date_to) {
 | 
			
		||||
            $context->buildViolation('The "date to" should not be empty')
 | 
			
		||||
                // ->atPath('date_to')
 | 
			
		||||
                //->atPath('date_to')
 | 
			
		||||
                ->addViolation();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -139,7 +121,7 @@ class BirthdateFilter implements ExportElementValidatedInterface, FilterInterfac
 | 
			
		||||
            && $date_from >= $date_to
 | 
			
		||||
        ) {
 | 
			
		||||
            $context->buildViolation('The date "date to" should be after the '
 | 
			
		||||
                .'date given in "date from" field')
 | 
			
		||||
                . 'date given in "date from" field')
 | 
			
		||||
                ->addViolation();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -32,22 +32,10 @@ class CountPerson implements ExportInterface
 | 
			
		||||
        $this->entityManager = $em;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function buildForm(FormBuilderInterface $builder): void
 | 
			
		||||
    public function buildForm(FormBuilderInterface $builder)
 | 
			
		||||
    {
 | 
			
		||||
        // this export does not add any form
 | 
			
		||||
    }
 | 
			
		||||
    public function getNormalizationVersion(): int
 | 
			
		||||
    {
 | 
			
		||||
        return 1;
 | 
			
		||||
    }
 | 
			
		||||
    public function normalizeFormData(array $formData): array
 | 
			
		||||
    {
 | 
			
		||||
        return [];
 | 
			
		||||
    }
 | 
			
		||||
    public function denormalizeFormData(array $formData, int $fromVersion): array
 | 
			
		||||
    {
 | 
			
		||||
        return [];
 | 
			
		||||
    }
 | 
			
		||||
    public function getFormDefaultData(): array
 | 
			
		||||
    {
 | 
			
		||||
        return [];
 | 
			
		||||
@@ -72,29 +60,29 @@ class CountPerson implements ExportInterface
 | 
			
		||||
        };
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getQueryKeys($data): array
 | 
			
		||||
    public function getQueryKeys($data)
 | 
			
		||||
    {
 | 
			
		||||
        // this array match the result keys in the query. We have only
 | 
			
		||||
        // one column.
 | 
			
		||||
        return ['export_result'];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getResult($query, $data, \Chill\MainBundle\Export\ExportGenerationContext $context): array
 | 
			
		||||
    public function getResult($query, $data)
 | 
			
		||||
    {
 | 
			
		||||
        return $query->getQuery()->getResult(Query::HYDRATE_SCALAR);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getTitle(): string|\Symfony\Contracts\Translation\TranslatableInterface
 | 
			
		||||
    public function getTitle()
 | 
			
		||||
    {
 | 
			
		||||
        return 'Count peoples';
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getType(): string
 | 
			
		||||
    public function getType()
 | 
			
		||||
    {
 | 
			
		||||
        return Declarations::PERSON_TYPE;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function initiateQuery(array $requiredModifiers, array $acl, array $data, \Chill\MainBundle\Export\ExportGenerationContext $context): \Doctrine\ORM\QueryBuilder
 | 
			
		||||
    public function initiateQuery(array $requiredModifiers, array $acl, array $data = [])
 | 
			
		||||
    {
 | 
			
		||||
        // we gather all center the user choose.
 | 
			
		||||
        $centers = array_map(static fn ($el) => $el['center'], $acl);
 | 
			
		||||
 
 | 
			
		||||
@@ -1,84 +0,0 @@
 | 
			
		||||
@startuml
 | 
			
		||||
'https://plantuml.com/sequence-diagram
 | 
			
		||||
 | 
			
		||||
autonumber
 | 
			
		||||
 | 
			
		||||
User -> ExportController: configure export using form
 | 
			
		||||
activate ExportController
 | 
			
		||||
ExportController -> ExportForm: build form
 | 
			
		||||
activate ExportForm
 | 
			
		||||
 | 
			
		||||
loop for every ExportElement (Filter, Aggregator)
 | 
			
		||||
    ExportForm -> ExportElement: `buildForm`
 | 
			
		||||
    activate ExportElement
 | 
			
		||||
    ExportElement -> ExportForm: add form to builders
 | 
			
		||||
    deactivate ExportElement
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
ExportForm -> ExportController
 | 
			
		||||
deactivate ExportForm
 | 
			
		||||
 | 
			
		||||
ExportController -> User: show form
 | 
			
		||||
deactivate ExportController
 | 
			
		||||
 | 
			
		||||
note left of User: Configure the export:\ncheck filters, aggregators, …
 | 
			
		||||
 | 
			
		||||
User -> ExportController: post configuration of the export
 | 
			
		||||
activate ExportController
 | 
			
		||||
 | 
			
		||||
ExportController -> ExportForm: `getData`
 | 
			
		||||
activate ExportForm
 | 
			
		||||
ExportForm -> ExportController: return data: list of entities, etc.
 | 
			
		||||
deactivate ExportForm
 | 
			
		||||
 | 
			
		||||
loop for every ExportElement (Filter, Aggregator)
 | 
			
		||||
    ExportController -> ExportElement: serializeData (data)
 | 
			
		||||
    activate ExportElement
 | 
			
		||||
    ExportElement -> ExportController: return serializedData (simple array with string, int, …)
 | 
			
		||||
    deactivate ExportElement
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
ExportController -> Database: `INSERT INTO RequestGeneration_table` (insert new entity)
 | 
			
		||||
ExportController -> MessageQueue: warn about a new request
 | 
			
		||||
activate MessageQueue
 | 
			
		||||
ExportController -> User: "ok, generation is in process"
 | 
			
		||||
deactivate ExportController
 | 
			
		||||
 | 
			
		||||
note left of User: The user see a waiting screen
 | 
			
		||||
 | 
			
		||||
MessageQueue -> MessengerConsumer: forward the message to the MessengerConsumer
 | 
			
		||||
deactivate MessageQueue
 | 
			
		||||
activate MessengerConsumer
 | 
			
		||||
MessengerConsumer -> Database: `SELECT * FROM RequestGeneration_table WHERE id = %s`
 | 
			
		||||
activate Database
 | 
			
		||||
Database -> MessengerConsumer: return RequestGeneration with serializedData
 | 
			
		||||
deactivate Database
 | 
			
		||||
 | 
			
		||||
loop for every ExportElement (Filter, Aggregator)
 | 
			
		||||
    MessengerConsumer -> ExportElement: deserializeData
 | 
			
		||||
    activate ExportElement
 | 
			
		||||
    ExportElement -> MessengerConsumer: return data (list of entities, etc.) from the serialized array
 | 
			
		||||
    deactivate ExportElement
 | 
			
		||||
    MessengerConsumer -> ExportElement: alter the sql query (`ExportElement::alterQuery`)
 | 
			
		||||
    activate ExportElement
 | 
			
		||||
    ExportElement -> MessengerConsumer: return the query with WHERE and GROUP BY clauses
 | 
			
		||||
    deactivate ExportElement
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
MessengerConsumer -> MessengerConsumer: prepare the export
 | 
			
		||||
MessengerConsumer -> MessengerConsumer: save the export as a stored object
 | 
			
		||||
MessengerConsumer -> Database: `UPDATE RequestGeneration_table SET ready = true`
 | 
			
		||||
deactivate MessengerConsumer
 | 
			
		||||
 | 
			
		||||
User -> ExportController: pull every 5s to know if the export is generated
 | 
			
		||||
activate ExportController
 | 
			
		||||
ExportController -> User: warn the export is generated
 | 
			
		||||
deactivate ExportController
 | 
			
		||||
 | 
			
		||||
User -> ExportController: download the export from object storage
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@enduml
 | 
			
		||||
@@ -15,31 +15,24 @@ Messages to users, flashbags and buttons
 | 
			
		||||
Flashbags
 | 
			
		||||
==========
 | 
			
		||||
 | 
			
		||||
The four following levels are defined :
 | 
			
		||||
The four following levels are defined : 
 | 
			
		||||
 | 
			
		||||
+-----------+----------------------------------------------------------------------------------------------+
 | 
			
		||||
|Key        |Intent                                                                                        |
 | 
			
		||||
+===========+==============================================================================================+
 | 
			
		||||
|alert      |A message not linked with the user action, but which should require an action or a            |
 | 
			
		||||
|           |correction.                                                                                   |
 | 
			
		||||
+-----------+----------------------------------------------------------------------------------------------+
 | 
			
		||||
|success    |The user action succeeds.                                                                     |
 | 
			
		||||
+-----------+----------------------------------------------------------------------------------------------+
 | 
			
		||||
|notice     |A simple message to give information to the user. The message may be linked or not linked with|
 | 
			
		||||
|           |the user action.                                                                              |
 | 
			
		||||
+-----------+----------------------------------------------------------------------------------------------+
 | 
			
		||||
|warning    |A message linked with an action, the user should correct.                                     |
 | 
			
		||||
+-----------+----------------------------------------------------------------------------------------------+
 | 
			
		||||
|error      |The user's action failed: he must correct something to process the action.                    |
 | 
			
		||||
+-----------+----------------------------------------------------------------------------------------------+
 | 
			
		||||
 | 
			
		||||
We can use :code:`TranslatableMessage` (and other :code:`TranslatableMessageInterface` instances) into the controller:
 | 
			
		||||
 | 
			
		||||
.. code-block:: php
 | 
			
		||||
 | 
			
		||||
   // in a controller action:
 | 
			
		||||
   if (($session = $request->getSession()) instanceof Session) {
 | 
			
		||||
       $session->getFlashBag()->add(
 | 
			
		||||
           'success',
 | 
			
		||||
           new TranslatableMessage('saved_export.Saved export is saved!')
 | 
			
		||||
       );
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
.. seealso::
 | 
			
		||||
 | 
			
		||||
   `Flash Messages on Symfony documentation <http://symfony.com/doc/current/book/controller.html#flash-messages>`_
 | 
			
		||||
@@ -73,7 +66,7 @@ To add the action on button, use them as class along with ``sc-button`` :
 | 
			
		||||
|           |                | - Submitting this form will remove the entity                                |
 | 
			
		||||
+-----------+----------------+------------------------------------------------------------------------------+
 | 
			
		||||
| Edit      | ``bt-edit`` or | Link to a form to edit an entity                                             |
 | 
			
		||||
|           | ``bt-update``  |                                                                              |
 | 
			
		||||
|           | ``bt-update``  |                                                                              | 
 | 
			
		||||
+-----------+----------------+------------------------------------------------------------------------------+
 | 
			
		||||
| Save      | ``bt-save``    | Submitting this form will save change on the entity                          |
 | 
			
		||||
+-----------+----------------+------------------------------------------------------------------------------+
 | 
			
		||||
 
 | 
			
		||||
@@ -18,7 +18,7 @@ class example extends \Symfony\Bundle\FrameworkBundle\Controller\AbstractControl
 | 
			
		||||
    public function __construct(private readonly \Doctrine\Persistence\ManagerRegistry $managerRegistry)
 | 
			
		||||
    {
 | 
			
		||||
    }
 | 
			
		||||
    public function yourAction(): \Symfony\Component\HttpFoundation\Response
 | 
			
		||||
    public function yourAction()
 | 
			
		||||
    {
 | 
			
		||||
        $em = $this->managerRegistry->getManager();
 | 
			
		||||
        // first, get the number of total item are available
 | 
			
		||||
 
 | 
			
		||||
@@ -28,7 +28,7 @@ class ConsultationController extends \Symfony\Bundle\FrameworkBundle\Controller\
 | 
			
		||||
     *
 | 
			
		||||
     * @return \Symfony\Component\HttpFoundation\Response
 | 
			
		||||
     */
 | 
			
		||||
    public function listAction($id): \Symfony\Component\HttpFoundation\Response
 | 
			
		||||
    public function listAction($id)
 | 
			
		||||
    {
 | 
			
		||||
        /** @var \Chill\PersonBundle\Entity\Person $person */
 | 
			
		||||
        $person = $this->get('chill.person.repository.person')
 | 
			
		||||
 
 | 
			
		||||
@@ -31,7 +31,7 @@ class ChillMainConfiguration implements ConfigurationInterface
 | 
			
		||||
        $this->setWidgetFactories($widgetFactories);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getConfigTreeBuilder(): \Symfony\Component\Config\Definition\Builder\TreeBuilder
 | 
			
		||||
    public function getConfigTreeBuilder()
 | 
			
		||||
    {
 | 
			
		||||
        $treeBuilder = new TreeBuilder('chill_main');
 | 
			
		||||
        $rootNode = $treeBuilder->getRootNode();
 | 
			
		||||
 
 | 
			
		||||
@@ -27,12 +27,12 @@ class ChillMainExtension extends Extension implements Widget\HasWidgetFactoriesE
 | 
			
		||||
     */
 | 
			
		||||
    protected $widgetFactories = [];
 | 
			
		||||
 | 
			
		||||
    public function addWidgetFactory(WidgetFactoryInterface $factory): void
 | 
			
		||||
    public function addWidgetFactory(WidgetFactoryInterface $factory)
 | 
			
		||||
    {
 | 
			
		||||
        $this->widgetFactories[] = $factory;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getConfiguration(array $config, ContainerBuilder $container): ?\Symfony\Component\Config\Definition\ConfigurationInterface
 | 
			
		||||
    public function getConfiguration(array $config, ContainerBuilder $container)
 | 
			
		||||
    {
 | 
			
		||||
        return new Configuration($this->widgetFactories, $container);
 | 
			
		||||
    }
 | 
			
		||||
@@ -45,7 +45,7 @@ class ChillMainExtension extends Extension implements Widget\HasWidgetFactoriesE
 | 
			
		||||
        return $this->widgetFactories;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function load(array $configs, ContainerBuilder $container): void
 | 
			
		||||
    public function load(array $configs, ContainerBuilder $container)
 | 
			
		||||
    {
 | 
			
		||||
        // configuration for main bundle
 | 
			
		||||
        $configuration = $this->getConfiguration($configs, $container);
 | 
			
		||||
 
 | 
			
		||||
@@ -25,7 +25,7 @@ class ChillPersonAddAPersonListWidgetFactory extends AbstractWidgetFactory
 | 
			
		||||
     * see http://symfony.com/doc/current/components/config/definition.html
 | 
			
		||||
     *
 | 
			
		||||
     */
 | 
			
		||||
    public function configureOptions($place, NodeBuilder $node): void
 | 
			
		||||
    public function configureOptions($place, NodeBuilder $node)
 | 
			
		||||
    {
 | 
			
		||||
        $node->booleanNode('only_active')
 | 
			
		||||
            ->defaultTrue()
 | 
			
		||||
 
 | 
			
		||||
@@ -124,7 +124,7 @@ class ChillPersonAddAPersonWidget implements WidgetInterface
 | 
			
		||||
    /**
 | 
			
		||||
     * @return UserInterface
 | 
			
		||||
     */
 | 
			
		||||
    private function getUser(): void
 | 
			
		||||
    private function getUser()
 | 
			
		||||
    {
 | 
			
		||||
        // return a user
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -22,7 +22,7 @@ use Symfony\Component\HttpKernel\DependencyInjection\Extension;
 | 
			
		||||
 */
 | 
			
		||||
class ChillPersonExtension extends Extension implements PrependExtensionInterface
 | 
			
		||||
{
 | 
			
		||||
    public function load(array $configs, ContainerBuilder $container): void
 | 
			
		||||
    public function load(array $configs, ContainerBuilder $container)
 | 
			
		||||
    {
 | 
			
		||||
        // ...
 | 
			
		||||
    }
 | 
			
		||||
@@ -32,7 +32,7 @@ class ChillPersonExtension extends Extension implements PrependExtensionInterfac
 | 
			
		||||
     *
 | 
			
		||||
     * @param \Chill\PersonBundle\DependencyInjection\containerBuilder $container
 | 
			
		||||
     */
 | 
			
		||||
    public function prepend(ContainerBuilder $container): void
 | 
			
		||||
    public function prepend(ContainerBuilder $container)
 | 
			
		||||
    {
 | 
			
		||||
        $container->prependExtensionConfig('chill_main', [
 | 
			
		||||
            'widgets' => [
 | 
			
		||||
 
 | 
			
		||||
@@ -11,7 +11,6 @@
 | 
			
		||||
    "@hotwired/stimulus": "^3.0.0",
 | 
			
		||||
    "@luminateone/eslint-baseline": "^1.0.9",
 | 
			
		||||
    "@symfony/stimulus-bridge": "^3.2.0",
 | 
			
		||||
    "@symfony/ux-translator": "file:vendor/symfony/ux-translator/assets",
 | 
			
		||||
    "@symfony/webpack-encore": "^4.1.0",
 | 
			
		||||
    "@tsconfig/node20": "^20.1.4",
 | 
			
		||||
    "@types/dompurify": "^3.0.5",
 | 
			
		||||
@@ -56,7 +55,6 @@
 | 
			
		||||
    "@tsconfig/node20": "^20.1.4",
 | 
			
		||||
    "@types/dompurify": "^3.0.5",
 | 
			
		||||
    "@types/leaflet": "^1.9.3",
 | 
			
		||||
    "@vueuse/core": "^13.9.0",
 | 
			
		||||
    "bootstrap-icons": "^1.11.3",
 | 
			
		||||
    "dropzone": "^5.7.6",
 | 
			
		||||
    "es6-promise": "^4.2.8",
 | 
			
		||||
 
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -3,7 +3,7 @@ parameters:
 | 
			
		||||
    paths:
 | 
			
		||||
        - src/
 | 
			
		||||
        - utils/
 | 
			
		||||
    tmpDir: var/cache/phpstan
 | 
			
		||||
    tmpDir: .cache/
 | 
			
		||||
    reportUnmatchedIgnoredErrors: false
 | 
			
		||||
    excludePaths:
 | 
			
		||||
        - .php_cs*
 | 
			
		||||
@@ -22,9 +22,6 @@ parameters:
 | 
			
		||||
        - src/Bundle/*/src/translations/*
 | 
			
		||||
        - src/Bundle/*/src/Resources/*
 | 
			
		||||
 | 
			
		||||
    symfony:
 | 
			
		||||
        containerXmlPath: var/cache/dev/App_KernelDevDebugContainer.xml
 | 
			
		||||
 | 
			
		||||
includes:
 | 
			
		||||
    - phpstan-baseline.neon
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,24 +1,13 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 | 
			
		||||
         xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/10.5/phpunit.xsd"
 | 
			
		||||
         bootstrap="vendor/autoload.php"
 | 
			
		||||
         executionOrder="depends,defects"
 | 
			
		||||
         beStrictAboutOutputDuringTests="true"
 | 
			
		||||
         failOnRisky="true"
 | 
			
		||||
         failOnWarning="true"
 | 
			
		||||
         colors="true"
 | 
			
		||||
         cacheDirectory="var/cache/phpunit.rector.cache"
 | 
			
		||||
         requireCoverageMetadata="true"
 | 
			
		||||
         beStrictAboutCoverageMetadata="true"
 | 
			
		||||
         displayDetailsOnTestsThatTriggerWarnings="true">
 | 
			
		||||
    <testsuites>
 | 
			
		||||
        <testsuite name="default">
 | 
			
		||||
            <directory>utils/rector/tests</directory>
 | 
			
		||||
        </testsuite>
 | 
			
		||||
    </testsuites>
 | 
			
		||||
    <source>
 | 
			
		||||
        <include>
 | 
			
		||||
            <directory suffix=".php">utils/rector/src</directory>
 | 
			
		||||
        </include>
 | 
			
		||||
    </source>
 | 
			
		||||
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/10.5/phpunit.xsd" bootstrap="vendor/autoload.php" executionOrder="depends,defects" beStrictAboutOutputDuringTests="true" failOnRisky="true" failOnWarning="true" colors="true" cacheDirectory="var/cache/phpunit.rector.cache" requireCoverageMetadata="true" beStrictAboutCoverageMetadata="true">
 | 
			
		||||
  <testsuites>
 | 
			
		||||
    <testsuite name="default">
 | 
			
		||||
      <directory>utils/rector/tests</directory>
 | 
			
		||||
    </testsuite>
 | 
			
		||||
  </testsuites>
 | 
			
		||||
  <source>
 | 
			
		||||
    <include>
 | 
			
		||||
      <directory suffix=".php">utils/rector/src</directory>
 | 
			
		||||
    </include>
 | 
			
		||||
  </source>
 | 
			
		||||
</phpunit>
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										104
									
								
								phpunit.xml.dist
									
									
									
									
									
								
							
							
						
						
									
										104
									
								
								phpunit.xml.dist
									
									
									
									
									
								
							@@ -1,34 +1,84 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
 | 
			
		||||
<!-- https://phpunit.readthedocs.io/en/latest/configuration.html -->
 | 
			
		||||
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 | 
			
		||||
         xsi:noNamespaceSchemaLocation="vendor/phpunit/phpunit/phpunit.xsd"
 | 
			
		||||
         backupGlobals="false"
 | 
			
		||||
         colors="true"
 | 
			
		||||
         failOnNotice="true"
 | 
			
		||||
         failOnWarning="true"
 | 
			
		||||
         bootstrap="tests/bootstrap.php"
 | 
			
		||||
         cacheDirectory=".phpunit.cache"
 | 
			
		||||
<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" />
 | 
			
		||||
        <server name="SHELL_VERBOSITY" value="-1" />
 | 
			
		||||
    </php>
 | 
			
		||||
 | 
			
		||||
    <testsuites>
 | 
			
		||||
        <testsuite name="Project Test Suite">
 | 
			
		||||
            <directory>tests</directory>
 | 
			
		||||
  <php>
 | 
			
		||||
    <ini name="display_errors" value="1" />
 | 
			
		||||
    <ini name="error_reporting" value="-1"/>
 | 
			
		||||
    <server name="APP_ENV" value="test" force="true"/>
 | 
			
		||||
    <env name="SYMFONY_DEPRECATIONS_HELPER" value="max[direct]=93&max[indirect]=999999"/>
 | 
			
		||||
    <server name="SHELL_VERBOSITY" value="-1"/>
 | 
			
		||||
      <server name="SYMFONY_PHPUNIT_REMOVE" value="" />
 | 
			
		||||
      <server name="SYMFONY_PHPUNIT_VERSION" value="9.5" />
 | 
			
		||||
      <ini name="date.timezone" value="Europe/Brussels" />
 | 
			
		||||
  </php>
 | 
			
		||||
  <testsuites>
 | 
			
		||||
    <!--
 | 
			
		||||
        <testsuite name="ActivityBundle">
 | 
			
		||||
            <directory suffix="Test.php">src/Bundle/ChillActivityBundle/Tests/</directory>
 | 
			
		||||
        </testsuite>
 | 
			
		||||
    </testsuites>
 | 
			
		||||
 | 
			
		||||
    <source ignoreSuppressionOfDeprecations="true" restrictNotices="true" restrictWarnings="true">
 | 
			
		||||
        <include>
 | 
			
		||||
            <directory>src</directory>
 | 
			
		||||
        </include>
 | 
			
		||||
    </source>
 | 
			
		||||
 | 
			
		||||
        -->
 | 
			
		||||
    <testsuite name="AsideActivityBundle">
 | 
			
		||||
      <directory suffix="Test.php">src/Bundle/ChillAsideActivityBundle/src/Tests/</directory>
 | 
			
		||||
    </testsuite>
 | 
			
		||||
    <testsuite name="BudgetBundle">
 | 
			
		||||
      <directory suffix="Test.php">src/Bundle/ChillBudgetBundle/Tests/</directory>
 | 
			
		||||
    </testsuite>
 | 
			
		||||
    <testsuite name="CalendarBundle">
 | 
			
		||||
      <directory suffix="Test.php">src/Bundle/ChillCalendarBundle/Tests/</directory>
 | 
			
		||||
    </testsuite>
 | 
			
		||||
    <!-- Missing CustomFieldBundle -->
 | 
			
		||||
    <testsuite name="DocGeneratorBundle">
 | 
			
		||||
      <directory suffix="Test.php">src/Bundle/ChillDocGeneratorBundle/tests/</directory>
 | 
			
		||||
    </testsuite>
 | 
			
		||||
    <testsuite name="DocStoreBundle">
 | 
			
		||||
      <directory suffix="Test.php">src/Bundle/ChillDocStoreBundle/Tests/</directory>
 | 
			
		||||
    </testsuite>
 | 
			
		||||
    <!--
 | 
			
		||||
        <testsuite name="EventBundle">
 | 
			
		||||
            <directory suffix="Test.php">src/Bundle/ChillEventBundle/tests/</directory>
 | 
			
		||||
        </testsuite>
 | 
			
		||||
        -->
 | 
			
		||||
    <testsuite name="MainBundle">
 | 
			
		||||
      <directory suffix="Test.php">src/Bundle/ChillMainBundle/Tests/</directory>
 | 
			
		||||
    </testsuite>
 | 
			
		||||
    <testsuite name="PersonBundle">
 | 
			
		||||
      <directory suffix="Test.php">src/Bundle/ChillPersonBundle/Tests/</directory>
 | 
			
		||||
      <!-- we are rewriting accompanying periods... Work in progress -->
 | 
			
		||||
      <exclude>src/Bundle/ChillPersonBundle/Tests/Controller/AccompanyingPeriodControllerTest.php</exclude>
 | 
			
		||||
      <!-- we are rewriting address, Work in progress -->
 | 
			
		||||
      <exclude>src/Bundle/ChillPersonBundle/Tests/Controller/PersonAddressControllerTest.php</exclude>
 | 
			
		||||
      <!-- find a solution to create multiple configs -->
 | 
			
		||||
      <exclude>src/Bundle/ChillPersonBundle/Tests/Controller/PersonControllerUpdateWithHiddenFieldsTest.php</exclude>
 | 
			
		||||
      <!-- temporarily removed, the time to find a fix -->
 | 
			
		||||
      <exclude>src/Bundle/ChillPersonBundle/Tests/Controller/PersonDuplicateControllerViewTest.php</exclude>
 | 
			
		||||
    </testsuite>
 | 
			
		||||
    <!--
 | 
			
		||||
        <testsuite name="ReportBundle">
 | 
			
		||||
            <directory suffix="Test.php">src/Bundle/ChillReportBundle/Tests/</directory>
 | 
			
		||||
        </testsuite>
 | 
			
		||||
        -->
 | 
			
		||||
    <!--
 | 
			
		||||
        <testsuite name="TaskBundle">
 | 
			
		||||
            <directory suffix="Test.php">src/Bundle/ChillTaskBundle/Tests</directory>
 | 
			
		||||
        </testsuite>
 | 
			
		||||
        -->
 | 
			
		||||
    <testsuite name="ThirdPartyBundle">
 | 
			
		||||
      <directory suffix="Test.php">src/Bundle/ChillThirdPartyBundle/Tests</directory>
 | 
			
		||||
    </testsuite>
 | 
			
		||||
    <testsuite name="WopiBundle">
 | 
			
		||||
      <directory suffix="Test.php">src/Bundle/ChillWopiBundle/tests/</directory>
 | 
			
		||||
    </testsuite>
 | 
			
		||||
  </testsuites>
 | 
			
		||||
  <!-- Run `composer require symfony/panther` before enabling this extension -->
 | 
			
		||||
  <!--
 | 
			
		||||
    <extensions>
 | 
			
		||||
        <extension class="Symfony\Component\Panther\ServerExtension" />
 | 
			
		||||
    </extensions>
 | 
			
		||||
    -->
 | 
			
		||||
</phpunit>
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										85
									
								
								rector.php
									
									
									
									
									
								
							
							
						
						
									
										85
									
								
								rector.php
									
									
									
									
									
								
							@@ -13,8 +13,85 @@ use Rector\CodeQuality\Rector\Class_\InlineConstructorDefaultToPropertyRector;
 | 
			
		||||
use Rector\Config\RectorConfig;
 | 
			
		||||
use Rector\Php80\Rector\Class_\AnnotationToAttributeRector;
 | 
			
		||||
use Rector\Set\ValueObject\LevelSetList;
 | 
			
		||||
use Rector\Symfony\Set\SymfonySetList;
 | 
			
		||||
 | 
			
		||||
return RectorConfig::configure()
 | 
			
		||||
    ->withPaths(['./src', './docs', './rector.php'])
 | 
			
		||||
    ->withComposerBased(twig: true, doctrine: true, symfony: true);
 | 
			
		||||
return static function (RectorConfig $rectorConfig): void {
 | 
			
		||||
    $rectorConfig->paths([
 | 
			
		||||
        __DIR__ . '/docs',
 | 
			
		||||
        __DIR__ . '/src',
 | 
			
		||||
    ]);
 | 
			
		||||
 | 
			
		||||
    $rectorConfig->skip([
 | 
			
		||||
        \Rector\Php55\Rector\String_\StringClassNameToClassConstantRector::class => __DIR__ . 'src/Bundle/ChillMainBundle/Service/Notifier/LegacyOvhCloudFactory.php'
 | 
			
		||||
    ]);
 | 
			
		||||
 | 
			
		||||
    $rectorConfig->symfonyContainerXml(__DIR__ . '/var/cache/dev/test/App_KernelTestDebugContainer.xml  ');
 | 
			
		||||
    $rectorConfig->symfonyContainerPhp(__DIR__ . '/tests/symfony-container.php');
 | 
			
		||||
 | 
			
		||||
    //$rectorConfig->cacheClass(\Rector\Caching\ValueObject\Storage\FileCacheStorage::class);
 | 
			
		||||
    //$rectorConfig->cacheDirectory(__DIR__ . '/.cache/rector');
 | 
			
		||||
 | 
			
		||||
    // register a single rule
 | 
			
		||||
    $rectorConfig->rule(InlineConstructorDefaultToPropertyRector::class);
 | 
			
		||||
    $rectorConfig->rule(Rector\TypeDeclaration\Rector\ClassMethod\AddParamTypeFromPropertyTypeRector::class);
 | 
			
		||||
    $rectorConfig->rule(Rector\TypeDeclaration\Rector\Class_\MergeDateTimePropertyTypeDeclarationRector::class);
 | 
			
		||||
    $rectorConfig->rule(Rector\TypeDeclaration\Rector\ClassMethod\AddReturnTypeDeclarationBasedOnParentClassMethodRector::class);
 | 
			
		||||
 | 
			
		||||
    // part of the symfony 54 rules
 | 
			
		||||
    $rectorConfig->rule(\Rector\Symfony\Symfony53\Rector\StaticPropertyFetch\KernelTestCaseContainerPropertyDeprecationRector::class);
 | 
			
		||||
    $rectorConfig->rule(\Rector\Symfony\Symfony60\Rector\MethodCall\GetHelperControllerToServiceRector::class);
 | 
			
		||||
    $rectorConfig->disableParallel();
 | 
			
		||||
 | 
			
		||||
    //define sets of rules
 | 
			
		||||
    $rectorConfig->sets([
 | 
			
		||||
        LevelSetList::UP_TO_PHP_82,
 | 
			
		||||
        \Rector\Symfony\Set\SymfonySetList::SYMFONY_40,
 | 
			
		||||
        \Rector\Symfony\Set\SymfonySetList::SYMFONY_41,
 | 
			
		||||
        \Rector\Symfony\Set\SymfonySetList::SYMFONY_42,
 | 
			
		||||
        \Rector\Symfony\Set\SymfonySetList::SYMFONY_43,
 | 
			
		||||
        \Rector\Symfony\Set\SymfonySetList::SYMFONY_44,
 | 
			
		||||
        \Rector\Doctrine\Set\DoctrineSetList::DOCTRINE_CODE_QUALITY,
 | 
			
		||||
        \Rector\PHPUnit\Set\PHPUnitSetList::PHPUNIT_90,
 | 
			
		||||
    ]);
 | 
			
		||||
 | 
			
		||||
    $rectorConfig->ruleWithConfiguration(\Rector\Php80\Rector\Class_\AnnotationToAttributeRector::class, [
 | 
			
		||||
        new \Rector\Php80\ValueObject\AnnotationToAttribute('Symfony\Component\Serializer\Annotation\Context'),
 | 
			
		||||
    ]);
 | 
			
		||||
 | 
			
		||||
    // migrate for phpunit
 | 
			
		||||
    $rectorConfig->rules([
 | 
			
		||||
        \Rector\PHPUnit\PHPUnit100\Rector\Class_\StaticDataProviderClassMethodRector::class,
 | 
			
		||||
        \Rector\PHPUnit\PHPUnit100\Rector\Class_\PublicDataProviderClassMethodRector::class
 | 
			
		||||
    ]);
 | 
			
		||||
 | 
			
		||||
    // some routes are added twice if it remains activated
 | 
			
		||||
    // $rectorConfig->rule(\Rector\Symfony\Configs\Rector\ClassMethod\AddRouteAnnotationRector::class);
 | 
			
		||||
 | 
			
		||||
    // chill rules
 | 
			
		||||
    $rectorConfig->rules([
 | 
			
		||||
        \Chill\Utils\Rector\Rector\ChillBundleMakeDataProviderStaticForAbstractExportTestRector::class,
 | 
			
		||||
    ]);
 | 
			
		||||
 | 
			
		||||
    // skip some path...
 | 
			
		||||
    $rectorConfig->skip([
 | 
			
		||||
        // waiting for fixing this bug: https://github.com/rectorphp/rector-doctrine/issues/342
 | 
			
		||||
        \Rector\Doctrine\CodeQuality\Rector\Property\ImproveDoctrineCollectionDocTypeInEntityRector::class,
 | 
			
		||||
    ]);
 | 
			
		||||
 | 
			
		||||
    $rectorConfig->ruleWithConfiguration(AnnotationToAttributeRector::class, [
 | 
			
		||||
        new \Rector\Php80\ValueObject\AnnotationToAttribute('Chill\PersonBundle\Validator\Constraints\AccompanyingPeriod\AccompanyingPeriodValidity'),
 | 
			
		||||
        new \Rector\Php80\ValueObject\AnnotationToAttribute('Chill\PersonBundle\Validator\Constraints\Household\HouseholdMembershipSequential'),
 | 
			
		||||
        new \Rector\Php80\ValueObject\AnnotationToAttribute('Chill\PersonBundle\Validator\Constraints\Household\MaxHolder'),
 | 
			
		||||
        new \Rector\Php80\ValueObject\AnnotationToAttribute('Chill\PersonBundle\Validator\Constraints\AccompanyingPeriod\ConfidentialCourseMustHaveReferrer'),
 | 
			
		||||
        new \Rector\Php80\ValueObject\AnnotationToAttribute('Chill\PersonBundle\Validator\Constraints\AccompanyingPeriod\LocationValidity'),
 | 
			
		||||
        new \Rector\Php80\ValueObject\AnnotationToAttribute('Chill\PersonBundle\Validator\Constraints\AccompanyingPeriod\ParticipationOverlap'),
 | 
			
		||||
        new \Rector\Php80\ValueObject\AnnotationToAttribute('Chill\PersonBundle\Validator\Constraints\AccompanyingPeriod\ResourceDuplicateCheck'),
 | 
			
		||||
        new \Rector\Php80\ValueObject\AnnotationToAttribute('Chill\PersonBundle\Validator\Constraints\Person\Birthdate'),
 | 
			
		||||
        new \Rector\Php80\ValueObject\AnnotationToAttribute('Chill\PersonBundle\Validator\Constraints\Person\PersonHasCenter'),
 | 
			
		||||
        new \Rector\Php80\ValueObject\AnnotationToAttribute('Chill\PersonBundle\Validator\Constraints\Relationship\RelationshipNoDuplicate'),
 | 
			
		||||
        new \Rector\Php80\ValueObject\AnnotationToAttribute('Chill\ActivityBundle\Validator\Constraints\ActivityValidity'),
 | 
			
		||||
        new \Rector\Php80\ValueObject\AnnotationToAttribute('Chill\DocStoreBundle\Validator\Constraints\AsyncFileExists'),
 | 
			
		||||
        new \Rector\Php80\ValueObject\AnnotationToAttribute('Chill\MainBundle\Validation\Constraint\PhonenumberConstraint'),
 | 
			
		||||
        new \Rector\Php80\ValueObject\AnnotationToAttribute('Chill\MainBundle\Validator\Constraints\Entity\UserCircleConsistency'),
 | 
			
		||||
        new \Rector\Php80\ValueObject\AnnotationToAttribute('Chill\MainBundle\Workflow\Validator\EntityWorkflowCreation'),
 | 
			
		||||
    ]);
 | 
			
		||||
};
 | 
			
		||||
 
 | 
			
		||||
@@ -74,8 +74,8 @@ final class ActivityController extends AbstractController
 | 
			
		||||
    /**
 | 
			
		||||
     * Deletes a Activity entity.
 | 
			
		||||
     */
 | 
			
		||||
    #[\Symfony\Component\Routing\Attribute\Route(path: '/{_locale}/activity/{id}/delete', name: 'chill_activity_activity_delete', methods: ['GET', 'POST', 'DELETE'])]
 | 
			
		||||
    public function deleteAction(Request $request, mixed $id): \Symfony\Component\HttpFoundation\RedirectResponse|Response
 | 
			
		||||
    #[\Symfony\Component\Routing\Annotation\Route(path: '/{_locale}/activity/{id}/delete', name: 'chill_activity_activity_delete', methods: ['GET', 'POST', 'DELETE'])]
 | 
			
		||||
    public function deleteAction(Request $request, mixed $id)
 | 
			
		||||
    {
 | 
			
		||||
        $view = null;
 | 
			
		||||
 | 
			
		||||
@@ -83,7 +83,7 @@ final class ActivityController extends AbstractController
 | 
			
		||||
 | 
			
		||||
        $activity = $this->activityRepository->find($id);
 | 
			
		||||
 | 
			
		||||
        if (null === $activity) {
 | 
			
		||||
        if (!$activity) {
 | 
			
		||||
            throw $this->createNotFoundException('Unable to find Activity entity.');
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -104,11 +104,11 @@ final class ActivityController extends AbstractController
 | 
			
		||||
 | 
			
		||||
            if ($form->isSubmitted() && $form->isValid()) {
 | 
			
		||||
                $this->logger->notice('An activity has been removed', [
 | 
			
		||||
                    'by_user' => $this->getUser()->getUserIdentifier(),
 | 
			
		||||
                    'by_user' => $this->getUser()->getUsername(),
 | 
			
		||||
                    'activity_id' => $activity->getId(),
 | 
			
		||||
                    'person_id' => null === $activity->getPerson() ? $activity->getPerson()->getId() : null,
 | 
			
		||||
                    'comment' => null === $activity->getComment()->getComment(),
 | 
			
		||||
                    'scope_id' => null === $activity->getScope() ? $activity->getScope()->getId() : null,
 | 
			
		||||
                    'person_id' => $activity->getPerson() ? $activity->getPerson()->getId() : null,
 | 
			
		||||
                    'comment' => $activity->getComment()->getComment(),
 | 
			
		||||
                    'scope_id' => $activity->getScope() ? $activity->getScope()->getId() : null,
 | 
			
		||||
                    'reasons_ids' => $activity->getReasons()
 | 
			
		||||
                        ->map(
 | 
			
		||||
                            static fn (ActivityReason $ar): int => $ar->getId()
 | 
			
		||||
@@ -134,7 +134,7 @@ final class ActivityController extends AbstractController
 | 
			
		||||
 | 
			
		||||
        return $this->render($view, [
 | 
			
		||||
            'activity' => $activity,
 | 
			
		||||
            'delete_form' => $form,
 | 
			
		||||
            'delete_form' => $form->createView(),
 | 
			
		||||
            'person' => $person,
 | 
			
		||||
            'accompanyingCourse' => $accompanyingPeriod,
 | 
			
		||||
        ]);
 | 
			
		||||
@@ -143,7 +143,7 @@ final class ActivityController extends AbstractController
 | 
			
		||||
    /**
 | 
			
		||||
     * Displays a form to edit an existing Activity entity.
 | 
			
		||||
     */
 | 
			
		||||
    #[\Symfony\Component\Routing\Attribute\Route(path: '/{_locale}/activity/{id}/edit', name: 'chill_activity_activity_edit', methods: ['GET', 'POST', 'PUT'])]
 | 
			
		||||
    #[\Symfony\Component\Routing\Annotation\Route(path: '/{_locale}/activity/{id}/edit', name: 'chill_activity_activity_edit', methods: ['GET', 'POST', 'PUT'])]
 | 
			
		||||
    public function editAction(int $id, Request $request): Response
 | 
			
		||||
    {
 | 
			
		||||
        $view = null;
 | 
			
		||||
@@ -226,8 +226,8 @@ final class ActivityController extends AbstractController
 | 
			
		||||
 | 
			
		||||
        return $this->render($view, [
 | 
			
		||||
            'entity' => $entity,
 | 
			
		||||
            'edit_form' => $form,
 | 
			
		||||
            'delete_form' => $deleteForm,
 | 
			
		||||
            'edit_form' => $form->createView(),
 | 
			
		||||
            'delete_form' => $deleteForm->createView(),
 | 
			
		||||
            'person' => $person,
 | 
			
		||||
            'accompanyingCourse' => $accompanyingPeriod,
 | 
			
		||||
            'activity_json' => $activity_array,
 | 
			
		||||
@@ -237,7 +237,7 @@ final class ActivityController extends AbstractController
 | 
			
		||||
    /**
 | 
			
		||||
     * Lists all Activity entities.
 | 
			
		||||
     */
 | 
			
		||||
    #[\Symfony\Component\Routing\Attribute\Route(path: '/{_locale}/activity/', name: 'chill_activity_activity_list')]
 | 
			
		||||
    #[\Symfony\Component\Routing\Annotation\Route(path: '/{_locale}/activity/', name: 'chill_activity_activity_list')]
 | 
			
		||||
    public function listAction(Request $request): Response
 | 
			
		||||
    {
 | 
			
		||||
        $view = null;
 | 
			
		||||
@@ -341,7 +341,7 @@ final class ActivityController extends AbstractController
 | 
			
		||||
        return $filterBuilder->build();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[\Symfony\Component\Routing\Attribute\Route(path: '/{_locale}/activity/new', name: 'chill_activity_activity_new', methods: ['POST', 'GET'])]
 | 
			
		||||
    #[\Symfony\Component\Routing\Annotation\Route(path: '/{_locale}/activity/new', name: 'chill_activity_activity_new', methods: ['POST', 'GET'])]
 | 
			
		||||
    public function newAction(Request $request): Response
 | 
			
		||||
    {
 | 
			
		||||
        $view = null;
 | 
			
		||||
@@ -364,7 +364,7 @@ final class ActivityController extends AbstractController
 | 
			
		||||
        $activityData = null;
 | 
			
		||||
 | 
			
		||||
        if ($request->query->has('activityData')) {
 | 
			
		||||
            $activityData = $request->query->all('activityData');
 | 
			
		||||
            $activityData = $request->query->get('activityData');
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (
 | 
			
		||||
@@ -516,13 +516,13 @@ final class ActivityController extends AbstractController
 | 
			
		||||
            'person' => $person,
 | 
			
		||||
            'accompanyingCourse' => $accompanyingPeriod,
 | 
			
		||||
            'entity' => $entity,
 | 
			
		||||
            'form' => $form,
 | 
			
		||||
            'form' => $form->createView(),
 | 
			
		||||
            'activity_json' => $activity_array,
 | 
			
		||||
            'default_location' => $defaultLocation,
 | 
			
		||||
        ]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[\Symfony\Component\Routing\Attribute\Route(path: '/{_locale}/activity/select-type', name: 'chill_activity_activity_select_type')]
 | 
			
		||||
    #[\Symfony\Component\Routing\Annotation\Route(path: '/{_locale}/activity/select-type', name: 'chill_activity_activity_select_type')]
 | 
			
		||||
    public function selectTypeAction(Request $request): Response
 | 
			
		||||
    {
 | 
			
		||||
        $view = null;
 | 
			
		||||
@@ -567,7 +567,7 @@ final class ActivityController extends AbstractController
 | 
			
		||||
        ]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[\Symfony\Component\Routing\Attribute\Route(path: '/{_locale}/activity/{id}/show', name: 'chill_activity_activity_show')]
 | 
			
		||||
    #[\Symfony\Component\Routing\Annotation\Route(path: '/{_locale}/activity/{id}/show', name: 'chill_activity_activity_show')]
 | 
			
		||||
    public function showAction(Request $request, int $id): Response
 | 
			
		||||
    {
 | 
			
		||||
        $entity = $this->activityRepository->find($id);
 | 
			
		||||
@@ -611,7 +611,7 @@ final class ActivityController extends AbstractController
 | 
			
		||||
            'person' => $person,
 | 
			
		||||
            'accompanyingCourse' => $accompanyingPeriod,
 | 
			
		||||
            'entity' => $entity,
 | 
			
		||||
            'delete_form' => $deleteForm,
 | 
			
		||||
            'delete_form' => $deleteForm->createView(),
 | 
			
		||||
        ]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,6 @@ use Chill\ActivityBundle\Entity\ActivityReasonCategory;
 | 
			
		||||
use Chill\ActivityBundle\Form\ActivityReasonCategoryType;
 | 
			
		||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
 | 
			
		||||
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
 | 
			
		||||
use Symfony\Component\Form\FormInterface;
 | 
			
		||||
use Symfony\Component\HttpFoundation\Request;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -28,8 +27,8 @@ class ActivityReasonCategoryController extends AbstractController
 | 
			
		||||
    /**
 | 
			
		||||
     * Creates a new ActivityReasonCategory entity.
 | 
			
		||||
     */
 | 
			
		||||
    #[\Symfony\Component\Routing\Attribute\Route(path: '/{_locale}/admin/activityreasoncategory/create', name: 'chill_activity_activityreasoncategory_create', methods: ['POST'])]
 | 
			
		||||
    public function createAction(Request $request): \Symfony\Component\HttpFoundation\RedirectResponse|\Symfony\Component\HttpFoundation\Response
 | 
			
		||||
    #[\Symfony\Component\Routing\Annotation\Route(path: '/{_locale}/admin/activityreasoncategory/create', name: 'chill_activity_activityreasoncategory_create', methods: ['POST'])]
 | 
			
		||||
    public function createAction(Request $request)
 | 
			
		||||
    {
 | 
			
		||||
        $entity = new ActivityReasonCategory();
 | 
			
		||||
        $form = $this->createCreateForm($entity);
 | 
			
		||||
@@ -45,15 +44,37 @@ class ActivityReasonCategoryController extends AbstractController
 | 
			
		||||
 | 
			
		||||
        return $this->render('@ChillActivity/ActivityReasonCategory/new.html.twig', [
 | 
			
		||||
            'entity' => $entity,
 | 
			
		||||
            'form' => $form,
 | 
			
		||||
            'form' => $form->createView(),
 | 
			
		||||
        ]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Displays a form to edit an existing ActivityReasonCategory entity.
 | 
			
		||||
     */
 | 
			
		||||
    #[\Symfony\Component\Routing\Annotation\Route(path: '/{_locale}/admin/activityreasoncategory/{id}/edit', name: 'chill_activity_activityreasoncategory_edit')]
 | 
			
		||||
    public function editAction(mixed $id)
 | 
			
		||||
    {
 | 
			
		||||
        $em = $this->managerRegistry->getManager();
 | 
			
		||||
 | 
			
		||||
        $entity = $em->getRepository(ActivityReasonCategory::class)->find($id);
 | 
			
		||||
 | 
			
		||||
        if (!$entity) {
 | 
			
		||||
            throw $this->createNotFoundException('Unable to find ActivityReasonCategory entity.');
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $editForm = $this->createEditForm($entity);
 | 
			
		||||
 | 
			
		||||
        return $this->render('@ChillActivity/ActivityReasonCategory/edit.html.twig', [
 | 
			
		||||
            'entity' => $entity,
 | 
			
		||||
            'edit_form' => $editForm->createView(),
 | 
			
		||||
        ]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Lists all ActivityReasonCategory entities.
 | 
			
		||||
     */
 | 
			
		||||
    #[\Symfony\Component\Routing\Attribute\Route(path: '/{_locale}/admin/activityreasoncategory/', name: 'chill_activity_activityreasoncategory')]
 | 
			
		||||
    public function indexAction(): \Symfony\Component\HttpFoundation\Response
 | 
			
		||||
    #[\Symfony\Component\Routing\Annotation\Route(path: '/{_locale}/admin/activityreasoncategory/', name: 'chill_activity_activityreasoncategory')]
 | 
			
		||||
    public function indexAction()
 | 
			
		||||
    {
 | 
			
		||||
        $em = $this->managerRegistry->getManager();
 | 
			
		||||
 | 
			
		||||
@@ -67,29 +88,48 @@ class ActivityReasonCategoryController extends AbstractController
 | 
			
		||||
    /**
 | 
			
		||||
     * Displays a form to create a new ActivityReasonCategory entity.
 | 
			
		||||
     */
 | 
			
		||||
    #[\Symfony\Component\Routing\Attribute\Route(path: '/{_locale}/admin/activityreasoncategory/new', name: 'chill_activity_activityreasoncategory_new')]
 | 
			
		||||
    public function newAction(): \Symfony\Component\HttpFoundation\Response
 | 
			
		||||
    #[\Symfony\Component\Routing\Annotation\Route(path: '/{_locale}/admin/activityreasoncategory/new', name: 'chill_activity_activityreasoncategory_new')]
 | 
			
		||||
    public function newAction()
 | 
			
		||||
    {
 | 
			
		||||
        $entity = new ActivityReasonCategory();
 | 
			
		||||
        $form = $this->createCreateForm($entity);
 | 
			
		||||
 | 
			
		||||
        return $this->render('@ChillActivity/ActivityReasonCategory/new.html.twig', [
 | 
			
		||||
            'entity' => $entity,
 | 
			
		||||
            'form' => $form,
 | 
			
		||||
            'form' => $form->createView(),
 | 
			
		||||
        ]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Finds and displays a ActivityReasonCategory entity.
 | 
			
		||||
     */
 | 
			
		||||
    #[\Symfony\Component\Routing\Annotation\Route(path: '/{_locale}/admin/activityreasoncategory/{id}/show', name: 'chill_activity_activityreasoncategory_show')]
 | 
			
		||||
    public function showAction(mixed $id)
 | 
			
		||||
    {
 | 
			
		||||
        $em = $this->managerRegistry->getManager();
 | 
			
		||||
 | 
			
		||||
        $entity = $em->getRepository(ActivityReasonCategory::class)->find($id);
 | 
			
		||||
 | 
			
		||||
        if (!$entity) {
 | 
			
		||||
            throw $this->createNotFoundException('Unable to find ActivityReasonCategory entity.');
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return $this->render('@ChillActivity/ActivityReasonCategory/show.html.twig', [
 | 
			
		||||
            'entity' => $entity,
 | 
			
		||||
        ]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Edits an existing ActivityReasonCategory entity.
 | 
			
		||||
     */
 | 
			
		||||
    #[\Symfony\Component\Routing\Attribute\Route(path: '/{_locale}/admin/activityreasoncategory/{id}/update', name: 'chill_activity_activityreasoncategory_update', methods: ['POST', 'PUT'])]
 | 
			
		||||
    public function updateAction(Request $request, mixed $id): \Symfony\Component\HttpFoundation\RedirectResponse|\Symfony\Component\HttpFoundation\Response
 | 
			
		||||
    #[\Symfony\Component\Routing\Annotation\Route(path: '/{_locale}/admin/activityreasoncategory/{id}/update', name: 'chill_activity_activityreasoncategory_update', methods: ['POST', 'PUT'])]
 | 
			
		||||
    public function updateAction(Request $request, mixed $id)
 | 
			
		||||
    {
 | 
			
		||||
        $em = $this->managerRegistry->getManager();
 | 
			
		||||
 | 
			
		||||
        $entity = $em->getRepository(ActivityReasonCategory::class)->find($id);
 | 
			
		||||
 | 
			
		||||
        if (null === $entity) {
 | 
			
		||||
        if (!$entity) {
 | 
			
		||||
            throw $this->createNotFoundException('Unable to find ActivityReasonCategory entity.');
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -99,12 +139,12 @@ class ActivityReasonCategoryController extends AbstractController
 | 
			
		||||
        if ($editForm->isSubmitted() && $editForm->isValid()) {
 | 
			
		||||
            $em->flush();
 | 
			
		||||
 | 
			
		||||
            return $this->redirectToRoute('chill_activity_activityreasoncategory', ['id' => $id]);
 | 
			
		||||
            return $this->redirectToRoute('chill_activity_activityreasoncategory_edit', ['id' => $id]);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return $this->render('@ChillActivity/ActivityReasonCategory/edit.html.twig', [
 | 
			
		||||
            'entity' => $entity,
 | 
			
		||||
            'edit_form' => $editForm,
 | 
			
		||||
            'edit_form' => $editForm->createView(),
 | 
			
		||||
        ]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -112,8 +152,10 @@ class ActivityReasonCategoryController extends AbstractController
 | 
			
		||||
     * Creates a form to create a ActivityReasonCategory entity.
 | 
			
		||||
     *
 | 
			
		||||
     * @param ActivityReasonCategory $entity The entity
 | 
			
		||||
     *
 | 
			
		||||
     * @return \Symfony\Component\Form\Form The form
 | 
			
		||||
     */
 | 
			
		||||
    private function createCreateForm(ActivityReasonCategory $entity): FormInterface
 | 
			
		||||
    private function createCreateForm(ActivityReasonCategory $entity)
 | 
			
		||||
    {
 | 
			
		||||
        $form = $this->createForm(ActivityReasonCategoryType::class, $entity, [
 | 
			
		||||
            'action' => $this->generateUrl('chill_activity_activityreasoncategory_create'),
 | 
			
		||||
@@ -129,12 +171,14 @@ class ActivityReasonCategoryController extends AbstractController
 | 
			
		||||
     * Creates a form to edit a ActivityReasonCategory entity.
 | 
			
		||||
     *
 | 
			
		||||
     * @param ActivityReasonCategory $entity The entity
 | 
			
		||||
     *
 | 
			
		||||
     * @return \Symfony\Component\Form\Form The form
 | 
			
		||||
     */
 | 
			
		||||
    private function createEditForm(ActivityReasonCategory $entity): FormInterface
 | 
			
		||||
    private function createEditForm(ActivityReasonCategory $entity)
 | 
			
		||||
    {
 | 
			
		||||
        $form = $this->createForm(ActivityReasonCategoryType::class, $entity, [
 | 
			
		||||
            'action' => $this->generateUrl('chill_activity_activityreasoncategory_update', ['id' => $entity->getId()]),
 | 
			
		||||
            'method' => 'POST',
 | 
			
		||||
            'method' => 'PUT',
 | 
			
		||||
        ]);
 | 
			
		||||
 | 
			
		||||
        $form->add('submit', SubmitType::class, ['label' => 'Update']);
 | 
			
		||||
 
 | 
			
		||||
@@ -16,9 +16,8 @@ use Chill\ActivityBundle\Form\ActivityReasonType;
 | 
			
		||||
use Chill\ActivityBundle\Repository\ActivityReasonRepository;
 | 
			
		||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
 | 
			
		||||
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
 | 
			
		||||
use Symfony\Component\Form\Form;
 | 
			
		||||
use Symfony\Component\Form\FormInterface;
 | 
			
		||||
use Symfony\Component\HttpFoundation\Request;
 | 
			
		||||
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * ActivityReason controller.
 | 
			
		||||
@@ -30,8 +29,8 @@ class ActivityReasonController extends AbstractController
 | 
			
		||||
    /**
 | 
			
		||||
     * Creates a new ActivityReason entity.
 | 
			
		||||
     */
 | 
			
		||||
    #[\Symfony\Component\Routing\Attribute\Route(path: '/{_locale}/admin/activityreason/create', name: 'chill_activity_activityreason_create', methods: ['POST'])]
 | 
			
		||||
    public function createAction(Request $request): \Symfony\Component\HttpFoundation\RedirectResponse|\Symfony\Component\HttpFoundation\Response
 | 
			
		||||
    #[\Symfony\Component\Routing\Annotation\Route(path: '/{_locale}/admin/activityreason/create', name: 'chill_activity_activityreason_create', methods: ['POST'])]
 | 
			
		||||
    public function createAction(Request $request)
 | 
			
		||||
    {
 | 
			
		||||
        $entity = new ActivityReason();
 | 
			
		||||
        $form = $this->createCreateForm($entity);
 | 
			
		||||
@@ -47,15 +46,37 @@ class ActivityReasonController extends AbstractController
 | 
			
		||||
 | 
			
		||||
        return $this->render('@ChillActivity/ActivityReason/new.html.twig', [
 | 
			
		||||
            'entity' => $entity,
 | 
			
		||||
            'form' => $form,
 | 
			
		||||
            'form' => $form->createView(),
 | 
			
		||||
        ]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Displays a form to edit an existing ActivityReason entity.
 | 
			
		||||
     */
 | 
			
		||||
    #[\Symfony\Component\Routing\Annotation\Route(path: '/{_locale}/admin/activityreason/{id}/edit', name: 'chill_activity_activityreason_edit')]
 | 
			
		||||
    public function editAction(mixed $id)
 | 
			
		||||
    {
 | 
			
		||||
        $em = $this->managerRegistry->getManager();
 | 
			
		||||
 | 
			
		||||
        $entity = $em->getRepository(ActivityReason::class)->find($id);
 | 
			
		||||
 | 
			
		||||
        if (null === $entity) {
 | 
			
		||||
            throw new NotFoundHttpException('Unable to find ActivityReason entity.');
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $editForm = $this->createEditForm($entity);
 | 
			
		||||
 | 
			
		||||
        return $this->render('@ChillActivity/ActivityReason/edit.html.twig', [
 | 
			
		||||
            'entity' => $entity,
 | 
			
		||||
            'edit_form' => $editForm->createView(),
 | 
			
		||||
        ]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Lists all ActivityReason entities.
 | 
			
		||||
     */
 | 
			
		||||
    #[\Symfony\Component\Routing\Attribute\Route(path: '/{_locale}/admin/activityreason/', name: 'chill_activity_activityreason')]
 | 
			
		||||
    public function indexAction(): \Symfony\Component\HttpFoundation\Response
 | 
			
		||||
    #[\Symfony\Component\Routing\Annotation\Route(path: '/{_locale}/admin/activityreason/', name: 'chill_activity_activityreason')]
 | 
			
		||||
    public function indexAction()
 | 
			
		||||
    {
 | 
			
		||||
        $em = $this->managerRegistry->getManager();
 | 
			
		||||
 | 
			
		||||
@@ -69,29 +90,48 @@ class ActivityReasonController extends AbstractController
 | 
			
		||||
    /**
 | 
			
		||||
     * Displays a form to create a new ActivityReason entity.
 | 
			
		||||
     */
 | 
			
		||||
    #[\Symfony\Component\Routing\Attribute\Route(path: '/{_locale}/admin/activityreason/new', name: 'chill_activity_activityreason_new')]
 | 
			
		||||
    public function newAction(): \Symfony\Component\HttpFoundation\Response
 | 
			
		||||
    #[\Symfony\Component\Routing\Annotation\Route(path: '/{_locale}/admin/activityreason/new', name: 'chill_activity_activityreason_new')]
 | 
			
		||||
    public function newAction()
 | 
			
		||||
    {
 | 
			
		||||
        $entity = new ActivityReason();
 | 
			
		||||
        $form = $this->createCreateForm($entity);
 | 
			
		||||
 | 
			
		||||
        return $this->render('@ChillActivity/ActivityReason/new.html.twig', [
 | 
			
		||||
            'entity' => $entity,
 | 
			
		||||
            'form' => $form,
 | 
			
		||||
            'form' => $form->createView(),
 | 
			
		||||
        ]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Finds and displays a ActivityReason entity.
 | 
			
		||||
     */
 | 
			
		||||
    #[\Symfony\Component\Routing\Annotation\Route(path: '/{_locale}/admin/activityreason/{id}/show', name: 'chill_activity_activityreason_show')]
 | 
			
		||||
    public function showAction(mixed $id)
 | 
			
		||||
    {
 | 
			
		||||
        $em = $this->managerRegistry->getManager();
 | 
			
		||||
 | 
			
		||||
        $entity = $em->getRepository(ActivityReason::class)->find($id);
 | 
			
		||||
 | 
			
		||||
        if (!$entity) {
 | 
			
		||||
            throw $this->createNotFoundException('Unable to find ActivityReason entity.');
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return $this->render('@ChillActivity/ActivityReason/show.html.twig', [
 | 
			
		||||
            'entity' => $entity,
 | 
			
		||||
        ]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Edits an existing ActivityReason entity.
 | 
			
		||||
     */
 | 
			
		||||
    #[\Symfony\Component\Routing\Attribute\Route(path: '/{_locale}/admin/activityreason/{id}/update', name: 'chill_activity_activityreason_update', methods: ['POST', 'PUT'])]
 | 
			
		||||
    public function updateAction(Request $request, mixed $id): \Symfony\Component\HttpFoundation\RedirectResponse|\Symfony\Component\HttpFoundation\Response
 | 
			
		||||
    #[\Symfony\Component\Routing\Annotation\Route(path: '/{_locale}/admin/activityreason/{id}/update', name: 'chill_activity_activityreason_update', methods: ['POST', 'PUT'])]
 | 
			
		||||
    public function updateAction(Request $request, mixed $id)
 | 
			
		||||
    {
 | 
			
		||||
        $em = $this->managerRegistry->getManager();
 | 
			
		||||
 | 
			
		||||
        $entity = $em->getRepository(ActivityReason::class)->find($id);
 | 
			
		||||
 | 
			
		||||
        if (null === $entity) {
 | 
			
		||||
        if (!$entity) {
 | 
			
		||||
            throw $this->createNotFoundException('Unable to find ActivityReason entity.');
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -106,7 +146,7 @@ class ActivityReasonController extends AbstractController
 | 
			
		||||
 | 
			
		||||
        return $this->render('@ChillActivity/ActivityReason/edit.html.twig', [
 | 
			
		||||
            'entity' => $entity,
 | 
			
		||||
            'edit_form' => $editForm,
 | 
			
		||||
            'edit_form' => $editForm->createView(),
 | 
			
		||||
        ]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -114,8 +154,10 @@ class ActivityReasonController extends AbstractController
 | 
			
		||||
     * Creates a form to create a ActivityReason entity.
 | 
			
		||||
     *
 | 
			
		||||
     * @param ActivityReason $entity The entity
 | 
			
		||||
     *
 | 
			
		||||
     * @return \Symfony\Component\Form\Form The form
 | 
			
		||||
     */
 | 
			
		||||
    private function createCreateForm(ActivityReason $entity): FormInterface
 | 
			
		||||
    private function createCreateForm(ActivityReason $entity)
 | 
			
		||||
    {
 | 
			
		||||
        $form = $this->createForm(ActivityReasonType::class, $entity, [
 | 
			
		||||
            'action' => $this->generateUrl('chill_activity_activityreason_create'),
 | 
			
		||||
@@ -131,12 +173,14 @@ class ActivityReasonController extends AbstractController
 | 
			
		||||
     * Creates a form to edit a ActivityReason entity.
 | 
			
		||||
     *
 | 
			
		||||
     * @param ActivityReason $entity The entity
 | 
			
		||||
     *
 | 
			
		||||
     * @return \Symfony\Component\Form\Form The form
 | 
			
		||||
     */
 | 
			
		||||
    private function createEditForm(ActivityReason $entity): FormInterface
 | 
			
		||||
    private function createEditForm(ActivityReason $entity)
 | 
			
		||||
    {
 | 
			
		||||
        $form = $this->createForm(ActivityReasonType::class, $entity, [
 | 
			
		||||
            'action' => $this->generateUrl('chill_activity_activityreason_update', ['id' => $entity->getId()]),
 | 
			
		||||
            'method' => 'POST',
 | 
			
		||||
            'method' => 'PUT',
 | 
			
		||||
        ]);
 | 
			
		||||
 | 
			
		||||
        $form->add('submit', SubmitType::class, ['label' => 'Update']);
 | 
			
		||||
 
 | 
			
		||||
@@ -18,15 +18,15 @@ use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
 | 
			
		||||
 */
 | 
			
		||||
class AdminController extends AbstractController
 | 
			
		||||
{
 | 
			
		||||
    #[\Symfony\Component\Routing\Attribute\Route(path: '/{_locale}/admin/activity', name: 'chill_activity_admin_index')]
 | 
			
		||||
    public function indexActivityAction(): \Symfony\Component\HttpFoundation\Response
 | 
			
		||||
    #[\Symfony\Component\Routing\Annotation\Route(path: '/{_locale}/admin/activity', name: 'chill_activity_admin_index')]
 | 
			
		||||
    public function indexActivityAction()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->render('@ChillActivity/Admin/layout_activity.html.twig');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[\Symfony\Component\Routing\Attribute\Route(path: '/{_locale}/admin/activity_redirect_to_main', name: 'chill_admin_aside_activity_redirect_to_admin_index', options: [null])]
 | 
			
		||||
    #[\Symfony\Component\Routing\Attribute\Route(path: '/{_locale}/admin/activity_redirect_to_main', name: 'chill_admin_activity_redirect_to_admin_index')]
 | 
			
		||||
    public function redirectToAdminIndexAction(): \Symfony\Component\HttpFoundation\RedirectResponse
 | 
			
		||||
    #[\Symfony\Component\Routing\Annotation\Route(path: '/{_locale}/admin/activity_redirect_to_main', name: 'chill_admin_aside_activity_redirect_to_admin_index', options: [null])]
 | 
			
		||||
    #[\Symfony\Component\Routing\Annotation\Route(path: '/{_locale}/admin/activity_redirect_to_main', name: 'chill_admin_activity_redirect_to_admin_index')]
 | 
			
		||||
    public function redirectToAdminIndexAction()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->redirectToRoute('chill_main_admin_central');
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -27,6 +27,8 @@ use Faker\Factory as FakerFactory;
 | 
			
		||||
 | 
			
		||||
class LoadActivity extends AbstractFixture implements OrderedFixtureInterface
 | 
			
		||||
{
 | 
			
		||||
    use \Symfony\Component\DependencyInjection\ContainerAwareTrait;
 | 
			
		||||
 | 
			
		||||
    private readonly \Faker\Generator $faker;
 | 
			
		||||
 | 
			
		||||
    public function __construct(private readonly EntityManagerInterface $em)
 | 
			
		||||
 
 | 
			
		||||
@@ -25,7 +25,7 @@ use Symfony\Component\HttpKernel\DependencyInjection\Extension;
 | 
			
		||||
 */
 | 
			
		||||
class ChillActivityExtension extends Extension implements PrependExtensionInterface
 | 
			
		||||
{
 | 
			
		||||
    public function load(array $configs, ContainerBuilder $container): void
 | 
			
		||||
    public function load(array $configs, ContainerBuilder $container)
 | 
			
		||||
    {
 | 
			
		||||
        $configuration = new Configuration();
 | 
			
		||||
        $config = $this->processConfiguration($configuration, $configs);
 | 
			
		||||
@@ -44,14 +44,14 @@ class ChillActivityExtension extends Extension implements PrependExtensionInterf
 | 
			
		||||
        $loader->load('services/doctrine.entitylistener.yaml');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function prepend(ContainerBuilder $container): void
 | 
			
		||||
    public function prepend(ContainerBuilder $container)
 | 
			
		||||
    {
 | 
			
		||||
        $this->prependRoutes($container);
 | 
			
		||||
        $this->prependAuthorization($container);
 | 
			
		||||
        $this->prependCruds($container);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function prependAuthorization(ContainerBuilder $container): void
 | 
			
		||||
    public function prependAuthorization(ContainerBuilder $container)
 | 
			
		||||
    {
 | 
			
		||||
        $container->prependExtensionConfig('security', [
 | 
			
		||||
            'role_hierarchy' => [
 | 
			
		||||
@@ -71,7 +71,7 @@ class ChillActivityExtension extends Extension implements PrependExtensionInterf
 | 
			
		||||
    /** (non-PHPdoc).
 | 
			
		||||
     * @see \Symfony\Component\DependencyInjection\Extension\PrependExtensionInterface::prepend()
 | 
			
		||||
     */
 | 
			
		||||
    public function prependRoutes(ContainerBuilder $container): void
 | 
			
		||||
    public function prependRoutes(ContainerBuilder $container)
 | 
			
		||||
    {
 | 
			
		||||
        // add routes for custom bundle
 | 
			
		||||
        $container->prependExtensionConfig('chill_main', [
 | 
			
		||||
 
 | 
			
		||||
@@ -22,7 +22,7 @@ use function is_int;
 | 
			
		||||
 */
 | 
			
		||||
class Configuration implements ConfigurationInterface
 | 
			
		||||
{
 | 
			
		||||
    public function getConfigTreeBuilder(): TreeBuilder
 | 
			
		||||
    public function getConfigTreeBuilder()
 | 
			
		||||
    {
 | 
			
		||||
        $treeBuilder = new TreeBuilder('chill_activity');
 | 
			
		||||
        $rootNode = $treeBuilder->getRootNode();
 | 
			
		||||
 
 | 
			
		||||
@@ -34,9 +34,9 @@ use Chill\ThirdPartyBundle\Entity\ThirdParty;
 | 
			
		||||
use Doctrine\Common\Collections\ArrayCollection;
 | 
			
		||||
use Doctrine\Common\Collections\Collection;
 | 
			
		||||
use Doctrine\ORM\Mapping as ORM;
 | 
			
		||||
use Symfony\Component\Serializer\Attribute\DiscriminatorMap;
 | 
			
		||||
use Symfony\Component\Serializer\Attribute\Groups;
 | 
			
		||||
use Symfony\Component\Serializer\Attribute\SerializedName;
 | 
			
		||||
use Symfony\Component\Serializer\Annotation\DiscriminatorMap;
 | 
			
		||||
use Symfony\Component\Serializer\Annotation\Groups;
 | 
			
		||||
use Symfony\Component\Serializer\Annotation\SerializedName;
 | 
			
		||||
use Symfony\Component\Validator\Constraints as Assert;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 
 | 
			
		||||
@@ -12,7 +12,7 @@ declare(strict_types=1);
 | 
			
		||||
namespace Chill\ActivityBundle\Entity;
 | 
			
		||||
 | 
			
		||||
use Doctrine\ORM\Mapping as ORM;
 | 
			
		||||
use Symfony\Component\Serializer\Attribute as Serializer;
 | 
			
		||||
use Symfony\Component\Serializer\Annotation as Serializer;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Class ActivityPresence.
 | 
			
		||||
 
 | 
			
		||||
@@ -37,8 +37,10 @@ class ActivityReason
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get active.
 | 
			
		||||
     *
 | 
			
		||||
     * @return bool
 | 
			
		||||
     */
 | 
			
		||||
    public function getActive(): bool
 | 
			
		||||
    public function getActive()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->active;
 | 
			
		||||
    }
 | 
			
		||||
@@ -53,8 +55,10 @@ class ActivityReason
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get id.
 | 
			
		||||
     *
 | 
			
		||||
     * @return int
 | 
			
		||||
     */
 | 
			
		||||
    public function getId(): ?int
 | 
			
		||||
    public function getId()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->id;
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -58,16 +58,20 @@ class ActivityReasonCategory implements \Stringable
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get active.
 | 
			
		||||
     *
 | 
			
		||||
     * @return bool
 | 
			
		||||
     */
 | 
			
		||||
    public function getActive(): bool
 | 
			
		||||
    public function getActive()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->active;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get id.
 | 
			
		||||
     *
 | 
			
		||||
     * @return int
 | 
			
		||||
     */
 | 
			
		||||
    public function getId(): ?int
 | 
			
		||||
    public function getId()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->id;
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -12,8 +12,8 @@ declare(strict_types=1);
 | 
			
		||||
namespace Chill\ActivityBundle\Entity;
 | 
			
		||||
 | 
			
		||||
use Doctrine\ORM\Mapping as ORM;
 | 
			
		||||
use Symfony\Component\Serializer\Attribute as Serializer;
 | 
			
		||||
use Symfony\Component\Serializer\Attribute\Groups;
 | 
			
		||||
use Symfony\Component\Serializer\Annotation as Serializer;
 | 
			
		||||
use Symfony\Component\Serializer\Annotation\Groups;
 | 
			
		||||
use Symfony\Component\Validator\Constraints as Assert;
 | 
			
		||||
use Symfony\Component\Validator\Context\ExecutionContextInterface;
 | 
			
		||||
 | 
			
		||||
@@ -188,7 +188,7 @@ class ActivityType
 | 
			
		||||
    private int $userVisible = self::FIELD_REQUIRED;
 | 
			
		||||
 | 
			
		||||
    #[Assert\Callback]
 | 
			
		||||
    public function checkSocialActionsVisibility(ExecutionContextInterface $context, mixed $payload): void
 | 
			
		||||
    public function checkSocialActionsVisibility(ExecutionContextInterface $context, mixed $payload)
 | 
			
		||||
    {
 | 
			
		||||
        if ($this->socialIssuesVisible !== $this->socialActionsVisible) {
 | 
			
		||||
            // if social issues are invisible then social actions cannot be optional or required + if social issues are optional then social actions shouldn't be required
 | 
			
		||||
@@ -461,17 +461,11 @@ class ActivityType
 | 
			
		||||
    {
 | 
			
		||||
        $property = $field.'Visible';
 | 
			
		||||
 | 
			
		||||
        // Get the real class name (not the proxy)
 | 
			
		||||
        $class = static::class;
 | 
			
		||||
        if (str_contains($class, '__CG__')) {
 | 
			
		||||
            $class = get_parent_class($this);
 | 
			
		||||
        }
 | 
			
		||||
        $realClass = $class;
 | 
			
		||||
 | 
			
		||||
        if (!property_exists($realClass, $property)) {
 | 
			
		||||
        if (!property_exists($this, $property)) {
 | 
			
		||||
            throw new \InvalidArgumentException('Field "'.$field.'" not found');
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /* @phpstan-ignore-next-line */
 | 
			
		||||
        return self::FIELD_INVISIBLE !== $this->{$property};
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -21,7 +21,7 @@ class ActivityEntityListener
 | 
			
		||||
{
 | 
			
		||||
    public function __construct(private readonly EntityManagerInterface $em, private readonly AccompanyingPeriodWorkRepository $workRepository) {}
 | 
			
		||||
 | 
			
		||||
    public function persistActionToCourse(Activity $activity): void
 | 
			
		||||
    public function persistActionToCourse(Activity $activity)
 | 
			
		||||
    {
 | 
			
		||||
        if ($activity->getAccompanyingPeriod() instanceof AccompanyingPeriod) {
 | 
			
		||||
            $period = $activity->getAccompanyingPeriod();
 | 
			
		||||
 
 | 
			
		||||
@@ -24,7 +24,7 @@ class ByActivityNumberAggregator implements AggregatorInterface
 | 
			
		||||
        return null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function alterQuery(QueryBuilder $qb, $data, \Chill\MainBundle\Export\ExportGenerationContext $exportGenerationContext): void
 | 
			
		||||
    public function alterQuery(QueryBuilder $qb, $data): void
 | 
			
		||||
    {
 | 
			
		||||
        $qb
 | 
			
		||||
            ->addSelect('(SELECT COUNT(activity.id) FROM '.Activity::class.' activity WHERE activity.accompanyingPeriod = acp) AS activity_by_number_aggregator')
 | 
			
		||||
@@ -41,27 +41,12 @@ class ByActivityNumberAggregator implements AggregatorInterface
 | 
			
		||||
        // No form needed
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getNormalizationVersion(): int
 | 
			
		||||
    {
 | 
			
		||||
        return 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function normalizeFormData(array $formData): array
 | 
			
		||||
    {
 | 
			
		||||
        return [];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function denormalizeFormData(array $formData, int $fromVersion): array
 | 
			
		||||
    {
 | 
			
		||||
        return [];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getFormDefaultData(): array
 | 
			
		||||
    {
 | 
			
		||||
        return [];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getLabels($key, array $values, $data): callable
 | 
			
		||||
    public function getLabels($key, array $values, $data)
 | 
			
		||||
    {
 | 
			
		||||
        return static function ($value) {
 | 
			
		||||
            if ('_header' === $value) {
 | 
			
		||||
 
 | 
			
		||||
@@ -33,7 +33,7 @@ final readonly class ByActivityTypeAggregator implements AggregatorInterface
 | 
			
		||||
        private TranslatableStringHelperInterface $translatableStringHelper,
 | 
			
		||||
    ) {}
 | 
			
		||||
 | 
			
		||||
    public function buildForm(FormBuilderInterface $builder): void
 | 
			
		||||
    public function buildForm(FormBuilderInterface $builder)
 | 
			
		||||
    {
 | 
			
		||||
        $builder
 | 
			
		||||
            ->add('after_date', PickRollingDateType::class, [
 | 
			
		||||
@@ -46,21 +46,6 @@ final readonly class ByActivityTypeAggregator implements AggregatorInterface
 | 
			
		||||
            ]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getNormalizationVersion(): int
 | 
			
		||||
    {
 | 
			
		||||
        return 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function normalizeFormData(array $formData): array
 | 
			
		||||
    {
 | 
			
		||||
        return ['after_date' => $formData['after_date']?->normalize(), 'before_date' => $formData['before_date']?->normalize()];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function denormalizeFormData(array $formData, int $fromVersion): array
 | 
			
		||||
    {
 | 
			
		||||
        return ['after_date' => \Chill\MainBundle\Service\RollingDate\RollingDate::fromNormalized($formData['after_date']), 'before_date' => \Chill\MainBundle\Service\RollingDate\RollingDate::fromNormalized($formData['before_date'])];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getFormDefaultData(): array
 | 
			
		||||
    {
 | 
			
		||||
        return [
 | 
			
		||||
@@ -69,7 +54,7 @@ final readonly class ByActivityTypeAggregator implements AggregatorInterface
 | 
			
		||||
        ];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getLabels($key, array $values, mixed $data): callable
 | 
			
		||||
    public function getLabels($key, array $values, mixed $data)
 | 
			
		||||
    {
 | 
			
		||||
        return function (int|string|null $value): string {
 | 
			
		||||
            if ('_header' === $value) {
 | 
			
		||||
@@ -84,12 +69,12 @@ final readonly class ByActivityTypeAggregator implements AggregatorInterface
 | 
			
		||||
        };
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getQueryKeys($data): array
 | 
			
		||||
    public function getQueryKeys($data)
 | 
			
		||||
    {
 | 
			
		||||
        return [self::PREFIX.'_actype_id'];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getTitle(): string|\Symfony\Contracts\Translation\TranslatableInterface
 | 
			
		||||
    public function getTitle()
 | 
			
		||||
    {
 | 
			
		||||
        return 'export.aggregator.acp.by_activity_type.title';
 | 
			
		||||
    }
 | 
			
		||||
@@ -99,7 +84,7 @@ final readonly class ByActivityTypeAggregator implements AggregatorInterface
 | 
			
		||||
        return null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function alterQuery(QueryBuilder $qb, $data, \Chill\MainBundle\Export\ExportGenerationContext $exportGenerationContext): void
 | 
			
		||||
    public function alterQuery(QueryBuilder $qb, $data)
 | 
			
		||||
    {
 | 
			
		||||
        $p = self::PREFIX;
 | 
			
		||||
 | 
			
		||||
@@ -130,7 +115,7 @@ final readonly class ByActivityTypeAggregator implements AggregatorInterface
 | 
			
		||||
            ->addGroupBy("{$p}_actype_id");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function applyOn(): string
 | 
			
		||||
    public function applyOn()
 | 
			
		||||
    {
 | 
			
		||||
        return Declarations::ACP_TYPE;
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -27,7 +27,7 @@ class BySocialActionAggregator implements AggregatorInterface
 | 
			
		||||
        return null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function alterQuery(QueryBuilder $qb, $data, \Chill\MainBundle\Export\ExportGenerationContext $exportGenerationContext): void
 | 
			
		||||
    public function alterQuery(QueryBuilder $qb, $data)
 | 
			
		||||
    {
 | 
			
		||||
        if (!\in_array('actsocialaction', $qb->getAllAliases(), true)) {
 | 
			
		||||
            $qb->leftJoin('activity.socialActions', 'actsocialaction');
 | 
			
		||||
@@ -42,32 +42,17 @@ class BySocialActionAggregator implements AggregatorInterface
 | 
			
		||||
        return Declarations::ACTIVITY_ACP;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function buildForm(FormBuilderInterface $builder): void
 | 
			
		||||
    public function buildForm(FormBuilderInterface $builder)
 | 
			
		||||
    {
 | 
			
		||||
        // no form
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getNormalizationVersion(): int
 | 
			
		||||
    {
 | 
			
		||||
        return 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function normalizeFormData(array $formData): array
 | 
			
		||||
    {
 | 
			
		||||
        return [];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function denormalizeFormData(array $formData, int $fromVersion): array
 | 
			
		||||
    {
 | 
			
		||||
        return [];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getFormDefaultData(): array
 | 
			
		||||
    {
 | 
			
		||||
        return [];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getLabels($key, array $values, $data): callable
 | 
			
		||||
    public function getLabels($key, array $values, $data)
 | 
			
		||||
    {
 | 
			
		||||
        return function ($value) {
 | 
			
		||||
            if ('_header' === $value) {
 | 
			
		||||
 
 | 
			
		||||
@@ -27,7 +27,7 @@ class BySocialIssueAggregator implements AggregatorInterface
 | 
			
		||||
        return null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function alterQuery(QueryBuilder $qb, $data, \Chill\MainBundle\Export\ExportGenerationContext $exportGenerationContext): void
 | 
			
		||||
    public function alterQuery(QueryBuilder $qb, $data)
 | 
			
		||||
    {
 | 
			
		||||
        if (!\in_array('actsocialissue', $qb->getAllAliases(), true)) {
 | 
			
		||||
            $qb->leftJoin('activity.socialIssues', 'actsocialissue');
 | 
			
		||||
@@ -42,32 +42,17 @@ class BySocialIssueAggregator implements AggregatorInterface
 | 
			
		||||
        return Declarations::ACTIVITY_ACP;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function buildForm(FormBuilderInterface $builder): void
 | 
			
		||||
    public function buildForm(FormBuilderInterface $builder)
 | 
			
		||||
    {
 | 
			
		||||
        // no form
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getNormalizationVersion(): int
 | 
			
		||||
    {
 | 
			
		||||
        return 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function normalizeFormData(array $formData): array
 | 
			
		||||
    {
 | 
			
		||||
        return [];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function denormalizeFormData(array $formData, int $fromVersion): array
 | 
			
		||||
    {
 | 
			
		||||
        return [];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getFormDefaultData(): array
 | 
			
		||||
    {
 | 
			
		||||
        return [];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getLabels($key, array $values, $data): callable
 | 
			
		||||
    public function getLabels($key, array $values, $data)
 | 
			
		||||
    {
 | 
			
		||||
        return function ($value): string {
 | 
			
		||||
            if ('_header' === $value) {
 | 
			
		||||
 
 | 
			
		||||
@@ -25,7 +25,7 @@ final readonly class ActivityLocationAggregator implements AggregatorInterface
 | 
			
		||||
        return null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function alterQuery(QueryBuilder $qb, $data, \Chill\MainBundle\Export\ExportGenerationContext $exportGenerationContext): void
 | 
			
		||||
    public function alterQuery(QueryBuilder $qb, $data)
 | 
			
		||||
    {
 | 
			
		||||
        if (!\in_array('actloc', $qb->getAllAliases(), true)) {
 | 
			
		||||
            $qb->leftJoin('activity.location', 'actloc');
 | 
			
		||||
@@ -39,32 +39,17 @@ final readonly class ActivityLocationAggregator implements AggregatorInterface
 | 
			
		||||
        return Declarations::ACTIVITY;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function buildForm(FormBuilderInterface $builder): void
 | 
			
		||||
    public function buildForm(FormBuilderInterface $builder)
 | 
			
		||||
    {
 | 
			
		||||
        // no form required for this aggregator
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getNormalizationVersion(): int
 | 
			
		||||
    {
 | 
			
		||||
        return 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function normalizeFormData(array $formData): array
 | 
			
		||||
    {
 | 
			
		||||
        return [];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function denormalizeFormData(array $formData, int $fromVersion): array
 | 
			
		||||
    {
 | 
			
		||||
        return [];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getFormDefaultData(): array
 | 
			
		||||
    {
 | 
			
		||||
        return [];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getLabels($key, array $values, $data): callable
 | 
			
		||||
    public function getLabels($key, array $values, $data): \Closure
 | 
			
		||||
    {
 | 
			
		||||
        return function ($value): string {
 | 
			
		||||
            if ('_header' === $value) {
 | 
			
		||||
@@ -84,7 +69,7 @@ final readonly class ActivityLocationAggregator implements AggregatorInterface
 | 
			
		||||
        return [self::KEY];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getTitle(): string|\Symfony\Contracts\Translation\TranslatableInterface
 | 
			
		||||
    public function getTitle()
 | 
			
		||||
    {
 | 
			
		||||
        return 'export.aggregator.activity.by_location.Title';
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -22,29 +22,14 @@ final readonly class ActivityPresenceAggregator implements AggregatorInterface
 | 
			
		||||
{
 | 
			
		||||
    public function __construct(private ActivityPresenceRepositoryInterface $activityPresenceRepository, private TranslatableStringHelperInterface $translatableStringHelper) {}
 | 
			
		||||
 | 
			
		||||
    public function buildForm(FormBuilderInterface $builder): void {}
 | 
			
		||||
 | 
			
		||||
    public function getNormalizationVersion(): int
 | 
			
		||||
    {
 | 
			
		||||
        return 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function normalizeFormData(array $formData): array
 | 
			
		||||
    {
 | 
			
		||||
        return [];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function denormalizeFormData(array $formData, int $fromVersion): array
 | 
			
		||||
    {
 | 
			
		||||
        return [];
 | 
			
		||||
    }
 | 
			
		||||
    public function buildForm(FormBuilderInterface $builder) {}
 | 
			
		||||
 | 
			
		||||
    public function getFormDefaultData(): array
 | 
			
		||||
    {
 | 
			
		||||
        return [];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getLabels($key, array $values, mixed $data): callable
 | 
			
		||||
    public function getLabels($key, array $values, mixed $data)
 | 
			
		||||
    {
 | 
			
		||||
        return function (int|string|null $value): string {
 | 
			
		||||
            if ('_header' === $value) {
 | 
			
		||||
@@ -59,7 +44,7 @@ final readonly class ActivityPresenceAggregator implements AggregatorInterface
 | 
			
		||||
        };
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getQueryKeys($data): array
 | 
			
		||||
    public function getQueryKeys($data)
 | 
			
		||||
    {
 | 
			
		||||
        return ['activity_presence_aggregator_attendee'];
 | 
			
		||||
    }
 | 
			
		||||
@@ -74,13 +59,13 @@ final readonly class ActivityPresenceAggregator implements AggregatorInterface
 | 
			
		||||
        return null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function alterQuery(QueryBuilder $qb, $data, \Chill\MainBundle\Export\ExportGenerationContext $exportGenerationContext): void
 | 
			
		||||
    public function alterQuery(QueryBuilder $qb, $data): void
 | 
			
		||||
    {
 | 
			
		||||
        $qb->addSelect('IDENTITY(activity.attendee) AS activity_presence_aggregator_attendee');
 | 
			
		||||
        $qb->addGroupBy('activity_presence_aggregator_attendee');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function applyOn(): string
 | 
			
		||||
    public function applyOn()
 | 
			
		||||
    {
 | 
			
		||||
        return Declarations::ACTIVITY;
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -36,7 +36,7 @@ class ActivityReasonAggregator implements AggregatorInterface, ExportElementVali
 | 
			
		||||
        return null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function alterQuery(QueryBuilder $qb, $data, \Chill\MainBundle\Export\ExportGenerationContext $exportGenerationContext): void
 | 
			
		||||
    public function alterQuery(QueryBuilder $qb, $data)
 | 
			
		||||
    {
 | 
			
		||||
        // add select element
 | 
			
		||||
        if ('reasons' === $data['level']) {
 | 
			
		||||
@@ -72,7 +72,7 @@ class ActivityReasonAggregator implements AggregatorInterface, ExportElementVali
 | 
			
		||||
        return Declarations::ACTIVITY;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function buildForm(FormBuilderInterface $builder): void
 | 
			
		||||
    public function buildForm(FormBuilderInterface $builder)
 | 
			
		||||
    {
 | 
			
		||||
        $builder->add(
 | 
			
		||||
            'level',
 | 
			
		||||
@@ -89,21 +89,6 @@ class ActivityReasonAggregator implements AggregatorInterface, ExportElementVali
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getNormalizationVersion(): int
 | 
			
		||||
    {
 | 
			
		||||
        return 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function normalizeFormData(array $formData): array
 | 
			
		||||
    {
 | 
			
		||||
        return ['level' => $formData['level']];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function denormalizeFormData(array $formData, int $fromVersion): array
 | 
			
		||||
    {
 | 
			
		||||
        return ['level' => $formData['level']];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getFormDefaultData(): array
 | 
			
		||||
    {
 | 
			
		||||
        return [
 | 
			
		||||
@@ -111,7 +96,7 @@ class ActivityReasonAggregator implements AggregatorInterface, ExportElementVali
 | 
			
		||||
        ];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getLabels($key, array $values, $data): callable
 | 
			
		||||
    public function getLabels($key, array $values, $data)
 | 
			
		||||
    {
 | 
			
		||||
        return function ($value) use ($data) {
 | 
			
		||||
            if ('_header' === $value) {
 | 
			
		||||
@@ -140,7 +125,7 @@ class ActivityReasonAggregator implements AggregatorInterface, ExportElementVali
 | 
			
		||||
        };
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getQueryKeys($data): array
 | 
			
		||||
    public function getQueryKeys($data)
 | 
			
		||||
    {
 | 
			
		||||
        // add select element
 | 
			
		||||
        if ('reasons' === $data['level']) {
 | 
			
		||||
@@ -154,12 +139,12 @@ class ActivityReasonAggregator implements AggregatorInterface, ExportElementVali
 | 
			
		||||
        throw new \RuntimeException('The data provided are not recognised.');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getTitle(): string|\Symfony\Contracts\Translation\TranslatableInterface
 | 
			
		||||
    public function getTitle()
 | 
			
		||||
    {
 | 
			
		||||
        return 'Aggregate by activity reason';
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function validateForm($data, ExecutionContextInterface $context): void
 | 
			
		||||
    public function validateForm($data, ExecutionContextInterface $context)
 | 
			
		||||
    {
 | 
			
		||||
        if (null === $data['level']) {
 | 
			
		||||
            $context
 | 
			
		||||
 
 | 
			
		||||
@@ -29,7 +29,7 @@ class ActivityTypeAggregator implements AggregatorInterface
 | 
			
		||||
        return null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function alterQuery(QueryBuilder $qb, $data, \Chill\MainBundle\Export\ExportGenerationContext $exportGenerationContext): void
 | 
			
		||||
    public function alterQuery(QueryBuilder $qb, $data)
 | 
			
		||||
    {
 | 
			
		||||
        if (!\in_array('acttype', $qb->getAllAliases(), true)) {
 | 
			
		||||
            $qb->leftJoin('activity.activityType', 'acttype');
 | 
			
		||||
@@ -44,32 +44,17 @@ class ActivityTypeAggregator implements AggregatorInterface
 | 
			
		||||
        return Declarations::ACTIVITY;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function buildForm(FormBuilderInterface $builder): void
 | 
			
		||||
    public function buildForm(FormBuilderInterface $builder)
 | 
			
		||||
    {
 | 
			
		||||
        // no form required for this aggregator
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getNormalizationVersion(): int
 | 
			
		||||
    {
 | 
			
		||||
        return 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function normalizeFormData(array $formData): array
 | 
			
		||||
    {
 | 
			
		||||
        return [];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function denormalizeFormData(array $formData, int $fromVersion): array
 | 
			
		||||
    {
 | 
			
		||||
        return [];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getFormDefaultData(): array
 | 
			
		||||
    {
 | 
			
		||||
        return [];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getLabels($key, array $values, $data): callable
 | 
			
		||||
    public function getLabels($key, array $values, $data): \Closure
 | 
			
		||||
    {
 | 
			
		||||
        return function (int|string|null $value): string {
 | 
			
		||||
            if ('_header' === $value) {
 | 
			
		||||
@@ -89,7 +74,7 @@ class ActivityTypeAggregator implements AggregatorInterface
 | 
			
		||||
        return [self::KEY];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getTitle(): string|\Symfony\Contracts\Translation\TranslatableInterface
 | 
			
		||||
    public function getTitle()
 | 
			
		||||
    {
 | 
			
		||||
        return 'Aggregate by activity type';
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -29,7 +29,7 @@ class ActivityUserAggregator implements AggregatorInterface
 | 
			
		||||
        return null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function alterQuery(QueryBuilder $qb, $data, \Chill\MainBundle\Export\ExportGenerationContext $exportGenerationContext): void
 | 
			
		||||
    public function alterQuery(QueryBuilder $qb, $data)
 | 
			
		||||
    {
 | 
			
		||||
        // add select element
 | 
			
		||||
        $qb->addSelect(sprintf('IDENTITY(activity.user) AS %s', self::KEY));
 | 
			
		||||
@@ -43,32 +43,17 @@ class ActivityUserAggregator implements AggregatorInterface
 | 
			
		||||
        return Declarations::ACTIVITY;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function buildForm(FormBuilderInterface $builder): void
 | 
			
		||||
    public function buildForm(FormBuilderInterface $builder)
 | 
			
		||||
    {
 | 
			
		||||
        // nothing to add
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getNormalizationVersion(): int
 | 
			
		||||
    {
 | 
			
		||||
        return 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function normalizeFormData(array $formData): array
 | 
			
		||||
    {
 | 
			
		||||
        return [];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function denormalizeFormData(array $formData, int $fromVersion): array
 | 
			
		||||
    {
 | 
			
		||||
        return [];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getFormDefaultData(): array
 | 
			
		||||
    {
 | 
			
		||||
        return [];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getLabels($key, $values, $data): callable
 | 
			
		||||
    public function getLabels($key, $values, $data): \Closure
 | 
			
		||||
    {
 | 
			
		||||
        return function ($value) {
 | 
			
		||||
            if ('_header' === $value) {
 | 
			
		||||
@@ -85,7 +70,7 @@ class ActivityUserAggregator implements AggregatorInterface
 | 
			
		||||
        };
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getQueryKeys($data): array
 | 
			
		||||
    public function getQueryKeys($data)
 | 
			
		||||
    {
 | 
			
		||||
        return [self::KEY];
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -27,7 +27,7 @@ class ActivityUsersAggregator implements AggregatorInterface
 | 
			
		||||
        return null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function alterQuery(QueryBuilder $qb, $data, \Chill\MainBundle\Export\ExportGenerationContext $exportGenerationContext): void
 | 
			
		||||
    public function alterQuery(QueryBuilder $qb, $data)
 | 
			
		||||
    {
 | 
			
		||||
        if (!\in_array('actusers', $qb->getAllAliases(), true)) {
 | 
			
		||||
            $qb->leftJoin('activity.users', 'actusers');
 | 
			
		||||
@@ -43,32 +43,17 @@ class ActivityUsersAggregator implements AggregatorInterface
 | 
			
		||||
        return Declarations::ACTIVITY;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function buildForm(FormBuilderInterface $builder): void
 | 
			
		||||
    public function buildForm(FormBuilderInterface $builder)
 | 
			
		||||
    {
 | 
			
		||||
        // nothing to add on the form
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getNormalizationVersion(): int
 | 
			
		||||
    {
 | 
			
		||||
        return 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function normalizeFormData(array $formData): array
 | 
			
		||||
    {
 | 
			
		||||
        return [];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function denormalizeFormData(array $formData, int $fromVersion): array
 | 
			
		||||
    {
 | 
			
		||||
        return [];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getFormDefaultData(): array
 | 
			
		||||
    {
 | 
			
		||||
        return [];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getLabels($key, array $values, $data): callable
 | 
			
		||||
    public function getLabels($key, array $values, $data)
 | 
			
		||||
    {
 | 
			
		||||
        return function ($value) {
 | 
			
		||||
            if ('_header' === $value) {
 | 
			
		||||
@@ -85,12 +70,12 @@ class ActivityUsersAggregator implements AggregatorInterface
 | 
			
		||||
        };
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getQueryKeys($data): array
 | 
			
		||||
    public function getQueryKeys($data)
 | 
			
		||||
    {
 | 
			
		||||
        return ['activity_users_aggregator'];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getTitle(): string|\Symfony\Contracts\Translation\TranslatableInterface
 | 
			
		||||
    public function getTitle()
 | 
			
		||||
    {
 | 
			
		||||
        return 'Aggregate by activity users';
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -34,7 +34,7 @@ class ActivityUsersJobAggregator implements AggregatorInterface
 | 
			
		||||
        return null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function alterQuery(QueryBuilder $qb, $data, \Chill\MainBundle\Export\ExportGenerationContext $exportGenerationContext): void
 | 
			
		||||
    public function alterQuery(QueryBuilder $qb, $data)
 | 
			
		||||
    {
 | 
			
		||||
        $p = self::PREFIX;
 | 
			
		||||
 | 
			
		||||
@@ -65,29 +65,14 @@ class ActivityUsersJobAggregator implements AggregatorInterface
 | 
			
		||||
        return Declarations::ACTIVITY;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function buildForm(FormBuilderInterface $builder): void {}
 | 
			
		||||
 | 
			
		||||
    public function getNormalizationVersion(): int
 | 
			
		||||
    {
 | 
			
		||||
        return 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function normalizeFormData(array $formData): array
 | 
			
		||||
    {
 | 
			
		||||
        return [];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function denormalizeFormData(array $formData, int $fromVersion): array
 | 
			
		||||
    {
 | 
			
		||||
        return [];
 | 
			
		||||
    }
 | 
			
		||||
    public function buildForm(FormBuilderInterface $builder) {}
 | 
			
		||||
 | 
			
		||||
    public function getFormDefaultData(): array
 | 
			
		||||
    {
 | 
			
		||||
        return [];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getLabels($key, array $values, $data): callable
 | 
			
		||||
    public function getLabels($key, array $values, $data)
 | 
			
		||||
    {
 | 
			
		||||
        return function ($value): string {
 | 
			
		||||
            if ('_header' === $value) {
 | 
			
		||||
 
 | 
			
		||||
@@ -34,7 +34,7 @@ class ActivityUsersScopeAggregator implements AggregatorInterface
 | 
			
		||||
        return null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function alterQuery(QueryBuilder $qb, $data, \Chill\MainBundle\Export\ExportGenerationContext $exportGenerationContext): void
 | 
			
		||||
    public function alterQuery(QueryBuilder $qb, $data)
 | 
			
		||||
    {
 | 
			
		||||
        $p = self::PREFIX;
 | 
			
		||||
 | 
			
		||||
@@ -65,29 +65,14 @@ class ActivityUsersScopeAggregator implements AggregatorInterface
 | 
			
		||||
        return Declarations::ACTIVITY;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function buildForm(FormBuilderInterface $builder): void {}
 | 
			
		||||
 | 
			
		||||
    public function getNormalizationVersion(): int
 | 
			
		||||
    {
 | 
			
		||||
        return 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function normalizeFormData(array $formData): array
 | 
			
		||||
    {
 | 
			
		||||
        return [];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function denormalizeFormData(array $formData, int $fromVersion): array
 | 
			
		||||
    {
 | 
			
		||||
        return [];
 | 
			
		||||
    }
 | 
			
		||||
    public function buildForm(FormBuilderInterface $builder) {}
 | 
			
		||||
 | 
			
		||||
    public function getFormDefaultData(): array
 | 
			
		||||
    {
 | 
			
		||||
        return [];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getLabels($key, array $values, $data): callable
 | 
			
		||||
    public function getLabels($key, array $values, $data)
 | 
			
		||||
    {
 | 
			
		||||
        return function ($value): string {
 | 
			
		||||
            if ('_header' === $value) {
 | 
			
		||||
 
 | 
			
		||||
@@ -27,7 +27,7 @@ class ByCreatorAggregator implements AggregatorInterface
 | 
			
		||||
        return null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function alterQuery(QueryBuilder $qb, $data, \Chill\MainBundle\Export\ExportGenerationContext $exportGenerationContext): void
 | 
			
		||||
    public function alterQuery(QueryBuilder $qb, $data)
 | 
			
		||||
    {
 | 
			
		||||
        $qb->addSelect('IDENTITY(activity.createdBy) AS creator_aggregator');
 | 
			
		||||
        $qb->addGroupBy('creator_aggregator');
 | 
			
		||||
@@ -38,32 +38,17 @@ class ByCreatorAggregator implements AggregatorInterface
 | 
			
		||||
        return Declarations::ACTIVITY;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function buildForm(FormBuilderInterface $builder): void
 | 
			
		||||
    public function buildForm(FormBuilderInterface $builder)
 | 
			
		||||
    {
 | 
			
		||||
        // no form
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getNormalizationVersion(): int
 | 
			
		||||
    {
 | 
			
		||||
        return 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function normalizeFormData(array $formData): array
 | 
			
		||||
    {
 | 
			
		||||
        return [];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function denormalizeFormData(array $formData, int $fromVersion): array
 | 
			
		||||
    {
 | 
			
		||||
        return [];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getFormDefaultData(): array
 | 
			
		||||
    {
 | 
			
		||||
        return [];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getLabels($key, array $values, $data): callable
 | 
			
		||||
    public function getLabels($key, array $values, $data)
 | 
			
		||||
    {
 | 
			
		||||
        return function ($value): string {
 | 
			
		||||
            if ('_header' === $value) {
 | 
			
		||||
 
 | 
			
		||||
@@ -27,7 +27,7 @@ class ByThirdpartyAggregator implements AggregatorInterface
 | 
			
		||||
        return null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function alterQuery(QueryBuilder $qb, $data, \Chill\MainBundle\Export\ExportGenerationContext $exportGenerationContext): void
 | 
			
		||||
    public function alterQuery(QueryBuilder $qb, $data)
 | 
			
		||||
    {
 | 
			
		||||
        if (!\in_array('acttparty', $qb->getAllAliases(), true)) {
 | 
			
		||||
            $qb->leftJoin('activity.thirdParties', 'acttparty');
 | 
			
		||||
@@ -42,32 +42,17 @@ class ByThirdpartyAggregator implements AggregatorInterface
 | 
			
		||||
        return Declarations::ACTIVITY;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function buildForm(FormBuilderInterface $builder): void
 | 
			
		||||
    public function buildForm(FormBuilderInterface $builder)
 | 
			
		||||
    {
 | 
			
		||||
        // no form
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getNormalizationVersion(): int
 | 
			
		||||
    {
 | 
			
		||||
        return 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function normalizeFormData(array $formData): array
 | 
			
		||||
    {
 | 
			
		||||
        return [];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function denormalizeFormData(array $formData, int $fromVersion): array
 | 
			
		||||
    {
 | 
			
		||||
        return [];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getFormDefaultData(): array
 | 
			
		||||
    {
 | 
			
		||||
        return [];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getLabels($key, array $values, $data): callable
 | 
			
		||||
    public function getLabels($key, array $values, $data)
 | 
			
		||||
    {
 | 
			
		||||
        return function ($value): string {
 | 
			
		||||
            if ('_header' === $value) {
 | 
			
		||||
 
 | 
			
		||||
@@ -34,7 +34,7 @@ class CreatorJobAggregator implements AggregatorInterface
 | 
			
		||||
        return null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function alterQuery(QueryBuilder $qb, $data, \Chill\MainBundle\Export\ExportGenerationContext $exportGenerationContext): void
 | 
			
		||||
    public function alterQuery(QueryBuilder $qb, $data)
 | 
			
		||||
    {
 | 
			
		||||
        $p = self::PREFIX;
 | 
			
		||||
 | 
			
		||||
@@ -65,29 +65,14 @@ class CreatorJobAggregator implements AggregatorInterface
 | 
			
		||||
        return Declarations::ACTIVITY;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function buildForm(FormBuilderInterface $builder): void {}
 | 
			
		||||
 | 
			
		||||
    public function getNormalizationVersion(): int
 | 
			
		||||
    {
 | 
			
		||||
        return 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function normalizeFormData(array $formData): array
 | 
			
		||||
    {
 | 
			
		||||
        return [];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function denormalizeFormData(array $formData, int $fromVersion): array
 | 
			
		||||
    {
 | 
			
		||||
        return [];
 | 
			
		||||
    }
 | 
			
		||||
    public function buildForm(FormBuilderInterface $builder) {}
 | 
			
		||||
 | 
			
		||||
    public function getFormDefaultData(): array
 | 
			
		||||
    {
 | 
			
		||||
        return [];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getLabels($key, array $values, $data): callable
 | 
			
		||||
    public function getLabels($key, array $values, $data)
 | 
			
		||||
    {
 | 
			
		||||
        return function ($value): string {
 | 
			
		||||
            if ('_header' === $value) {
 | 
			
		||||
 
 | 
			
		||||
@@ -34,7 +34,7 @@ class CreatorScopeAggregator implements AggregatorInterface
 | 
			
		||||
        return null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function alterQuery(QueryBuilder $qb, $data, \Chill\MainBundle\Export\ExportGenerationContext $exportGenerationContext): void
 | 
			
		||||
    public function alterQuery(QueryBuilder $qb, $data)
 | 
			
		||||
    {
 | 
			
		||||
        $p = self::PREFIX;
 | 
			
		||||
 | 
			
		||||
@@ -65,29 +65,14 @@ class CreatorScopeAggregator implements AggregatorInterface
 | 
			
		||||
        return Declarations::ACTIVITY;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function buildForm(FormBuilderInterface $builder): void {}
 | 
			
		||||
 | 
			
		||||
    public function getNormalizationVersion(): int
 | 
			
		||||
    {
 | 
			
		||||
        return 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function normalizeFormData(array $formData): array
 | 
			
		||||
    {
 | 
			
		||||
        return [];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function denormalizeFormData(array $formData, int $fromVersion): array
 | 
			
		||||
    {
 | 
			
		||||
        return [];
 | 
			
		||||
    }
 | 
			
		||||
    public function buildForm(FormBuilderInterface $builder) {}
 | 
			
		||||
 | 
			
		||||
    public function getFormDefaultData(): array
 | 
			
		||||
    {
 | 
			
		||||
        return [];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getLabels($key, array $values, $data): callable
 | 
			
		||||
    public function getLabels($key, array $values, $data)
 | 
			
		||||
    {
 | 
			
		||||
        return function ($value): string {
 | 
			
		||||
            if ('_header' === $value) {
 | 
			
		||||
 
 | 
			
		||||
@@ -32,7 +32,7 @@ class DateAggregator implements AggregatorInterface
 | 
			
		||||
        return null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function alterQuery(QueryBuilder $qb, $data, \Chill\MainBundle\Export\ExportGenerationContext $exportGenerationContext): void
 | 
			
		||||
    public function alterQuery(QueryBuilder $qb, $data)
 | 
			
		||||
    {
 | 
			
		||||
        $order = null;
 | 
			
		||||
 | 
			
		||||
@@ -67,7 +67,7 @@ class DateAggregator implements AggregatorInterface
 | 
			
		||||
        return Declarations::ACTIVITY;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function buildForm(FormBuilderInterface $builder): void
 | 
			
		||||
    public function buildForm(FormBuilderInterface $builder)
 | 
			
		||||
    {
 | 
			
		||||
        $builder->add('frequency', ChoiceType::class, [
 | 
			
		||||
            'choices' => self::CHOICES,
 | 
			
		||||
@@ -76,27 +76,12 @@ class DateAggregator implements AggregatorInterface
 | 
			
		||||
        ]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getNormalizationVersion(): int
 | 
			
		||||
    {
 | 
			
		||||
        return 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function normalizeFormData(array $formData): array
 | 
			
		||||
    {
 | 
			
		||||
        return ['frequency' => $formData['frequency']];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function denormalizeFormData(array $formData, int $fromVersion): array
 | 
			
		||||
    {
 | 
			
		||||
        return ['frequency' => $formData['frequency']];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getFormDefaultData(): array
 | 
			
		||||
    {
 | 
			
		||||
        return ['frequency' => self::DEFAULT_CHOICE];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getLabels($key, array $values, $data): callable
 | 
			
		||||
    public function getLabels($key, array $values, $data)
 | 
			
		||||
    {
 | 
			
		||||
        return static function ($value) use ($data): string {
 | 
			
		||||
            if ('_header' === $value) {
 | 
			
		||||
 
 | 
			
		||||
@@ -27,7 +27,7 @@ class LocationTypeAggregator implements AggregatorInterface
 | 
			
		||||
        return null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function alterQuery(QueryBuilder $qb, $data, \Chill\MainBundle\Export\ExportGenerationContext $exportGenerationContext): void
 | 
			
		||||
    public function alterQuery(QueryBuilder $qb, $data)
 | 
			
		||||
    {
 | 
			
		||||
        if (!\in_array('actloc', $qb->getAllAliases(), true)) {
 | 
			
		||||
            $qb->leftJoin('activity.location', 'actloc');
 | 
			
		||||
@@ -42,32 +42,17 @@ class LocationTypeAggregator implements AggregatorInterface
 | 
			
		||||
        return Declarations::ACTIVITY;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function buildForm(FormBuilderInterface $builder): void
 | 
			
		||||
    public function buildForm(FormBuilderInterface $builder)
 | 
			
		||||
    {
 | 
			
		||||
        // no form
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getNormalizationVersion(): int
 | 
			
		||||
    {
 | 
			
		||||
        return 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function normalizeFormData(array $formData): array
 | 
			
		||||
    {
 | 
			
		||||
        return [];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function denormalizeFormData(array $formData, int $fromVersion): array
 | 
			
		||||
    {
 | 
			
		||||
        return [];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getFormDefaultData(): array
 | 
			
		||||
    {
 | 
			
		||||
        return [];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getLabels($key, array $values, $data): callable
 | 
			
		||||
    public function getLabels($key, array $values, $data)
 | 
			
		||||
    {
 | 
			
		||||
        return function ($value): string {
 | 
			
		||||
            if ('_header' === $value) {
 | 
			
		||||
 
 | 
			
		||||
@@ -24,32 +24,17 @@ final readonly class HouseholdAggregator implements AggregatorInterface
 | 
			
		||||
{
 | 
			
		||||
    public function __construct(private HouseholdRepository $householdRepository) {}
 | 
			
		||||
 | 
			
		||||
    public function buildForm(FormBuilderInterface $builder): void
 | 
			
		||||
    public function buildForm(FormBuilderInterface $builder)
 | 
			
		||||
    {
 | 
			
		||||
        // nothing to add here
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getNormalizationVersion(): int
 | 
			
		||||
    {
 | 
			
		||||
        return 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function normalizeFormData(array $formData): array
 | 
			
		||||
    {
 | 
			
		||||
        return [];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function denormalizeFormData(array $formData, int $fromVersion): array
 | 
			
		||||
    {
 | 
			
		||||
        return [];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getFormDefaultData(): array
 | 
			
		||||
    {
 | 
			
		||||
        return [];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getLabels($key, array $values, mixed $data): callable
 | 
			
		||||
    public function getLabels($key, array $values, mixed $data)
 | 
			
		||||
    {
 | 
			
		||||
        return function (int|string|null $value): string|int {
 | 
			
		||||
            if ('_header' === $value) {
 | 
			
		||||
@@ -64,12 +49,12 @@ final readonly class HouseholdAggregator implements AggregatorInterface
 | 
			
		||||
        };
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getQueryKeys($data): array
 | 
			
		||||
    public function getQueryKeys($data)
 | 
			
		||||
    {
 | 
			
		||||
        return ['activity_household_agg'];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getTitle(): string|\Symfony\Contracts\Translation\TranslatableInterface
 | 
			
		||||
    public function getTitle()
 | 
			
		||||
    {
 | 
			
		||||
        return 'export.aggregator.person.by_household.title';
 | 
			
		||||
    }
 | 
			
		||||
@@ -79,7 +64,7 @@ final readonly class HouseholdAggregator implements AggregatorInterface
 | 
			
		||||
        return null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function alterQuery(QueryBuilder $qb, $data, \Chill\MainBundle\Export\ExportGenerationContext $exportGenerationContext): void
 | 
			
		||||
    public function alterQuery(QueryBuilder $qb, $data)
 | 
			
		||||
    {
 | 
			
		||||
        $qb->join(
 | 
			
		||||
            HouseholdMember::class,
 | 
			
		||||
@@ -107,7 +92,7 @@ final readonly class HouseholdAggregator implements AggregatorInterface
 | 
			
		||||
            ->addGroupBy('activity_household_agg');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function applyOn(): string
 | 
			
		||||
    public function applyOn()
 | 
			
		||||
    {
 | 
			
		||||
        return Declarations::ACTIVITY_PERSON;
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -21,42 +21,27 @@ final readonly class PersonAggregator implements AggregatorInterface
 | 
			
		||||
{
 | 
			
		||||
    public function __construct(private LabelPersonHelper $labelPersonHelper) {}
 | 
			
		||||
 | 
			
		||||
    public function buildForm(FormBuilderInterface $builder): void
 | 
			
		||||
    public function buildForm(FormBuilderInterface $builder)
 | 
			
		||||
    {
 | 
			
		||||
        // nothing to add here
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getNormalizationVersion(): int
 | 
			
		||||
    {
 | 
			
		||||
        return 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function normalizeFormData(array $formData): array
 | 
			
		||||
    {
 | 
			
		||||
        return [];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function denormalizeFormData(array $formData, int $fromVersion): array
 | 
			
		||||
    {
 | 
			
		||||
        return [];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getFormDefaultData(): array
 | 
			
		||||
    {
 | 
			
		||||
        return [];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getLabels($key, array $values, mixed $data): callable
 | 
			
		||||
    public function getLabels($key, array $values, mixed $data)
 | 
			
		||||
    {
 | 
			
		||||
        return $this->labelPersonHelper->getLabel($key, $values, 'export.aggregator.person.by_person.person');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getQueryKeys($data): array
 | 
			
		||||
    public function getQueryKeys($data)
 | 
			
		||||
    {
 | 
			
		||||
        return ['activity_by_person_agg'];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getTitle(): string|\Symfony\Contracts\Translation\TranslatableInterface
 | 
			
		||||
    public function getTitle()
 | 
			
		||||
    {
 | 
			
		||||
        return 'export.aggregator.person.by_person.title';
 | 
			
		||||
    }
 | 
			
		||||
@@ -66,14 +51,14 @@ final readonly class PersonAggregator implements AggregatorInterface
 | 
			
		||||
        return null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function alterQuery(QueryBuilder $qb, $data, \Chill\MainBundle\Export\ExportGenerationContext $exportGenerationContext): void
 | 
			
		||||
    public function alterQuery(QueryBuilder $qb, $data)
 | 
			
		||||
    {
 | 
			
		||||
        $qb
 | 
			
		||||
            ->addSelect('IDENTITY(activity.person) AS activity_by_person_agg')
 | 
			
		||||
            ->addGroupBy('activity_by_person_agg');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function applyOn(): string
 | 
			
		||||
    public function applyOn()
 | 
			
		||||
    {
 | 
			
		||||
        return Declarations::ACTIVITY_PERSON;
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user