Compare commits

..

188 Commits

Author SHA1 Message Date
69b59d2ae2 Correct syntax in .env file for redis_url 2025-09-11 14:03:24 +02:00
90f86bf566 fix CalendarNormalizerTest.php 2025-09-11 14:03:01 +02:00
b363bd3425 fix CalendarRangeSyncerTest.php 2025-09-11 12:50:24 +02:00
6ceb1b9544 Attempt fix ActivityVoterTest.php 2025-09-11 12:44:06 +02:00
94b5c06d10 Fix TranslatableActivityTypeTest.php 2025-09-11 12:12:29 +02:00
895e1be9ef Fix fixtures
- Inject parameters directly instead of getting from container
- User PasswordHasher instead of EncoderFactory
- set parameters directly and correctly encode values to json
2025-09-11 11:44:53 +02:00
94a0eb1a0a Fix ActivityTest.php to use setParent() instead of addChild() method. Latest version of Doctrine stricter in keeping relationships synced. 2025-09-11 09:57:10 +02:00
cc8151546a Undo inadequate fix of normalizers 2025-09-11 09:40:37 +02:00
4bd9e2ba7d fix: update CRUD routing controller syntax
- Replace `:` with `::` for `_controller` to align with modern Symfony standards
2025-09-10 17:12:14 +02:00
509b2c2590 fix: circular reference problems during fetches
- Add code snippet to avoid circular reference in SocialActionNormalizer.php, AccompanyingPeriodWorkEvaluationDocumentNormalizer.php, AccompanyingPeriodWorkEvaluationNormalizer.php, and AccompanyingPeriodWorkNormalizer.php
2025-09-10 15:06:13 +02:00
3480495be1 fix: update configuration of TrackCreateUpdateSubscriber.php
- Update config to be conform with symfony 7.3
- Create unit test for TrackCreateUpdateSubscriber.php
2025-09-10 13:24:50 +02:00
4123aa6550 Merge branch 'master' into migrate_to_sf72 2025-09-09 17:42:28 +02:00
835d79a809 refactor: adjust TrackCreateUpdateSubscriber for strict types and improve user handling
- Add `readonly` class and typed method return values
- Replace `LifecycleEventArgs` with specific `PrePersistEventArgs` and `PreUpdateEventArgs`
- Simplify `DateTimeImmutable` instantiation
- Enhance user retrieval using variable assignment for type-checking
2025-09-09 17:41:03 +02:00
2a280b814f Refactor view templates: relocate 'merge' action block and standardize 'duplicate link' block handling 2025-09-09 17:36:46 +02:00
ffeba3818b refactor: improve test setup and entity references in SingleTaskControllerTest
- Remove unnecessary kernel boot in `setUp`
- Use DI container retrieval for entity manager
- Replace string class references with `::class` constants
2025-09-09 17:09:33 +02:00
f88718e263 fix: update CalendarTypeTest to use ATOM date format
- Adjust assertions to use `ATOM` date format for `startDate` and `endDate`
2025-09-09 16:08:27 +02:00
2433737df0 refactor: remove unused event arguments from entity listener methods
- Simplify method signatures by removing `$eventArgs` parameter
2025-09-09 16:01:17 +02:00
af7d635714 fix: update tests and exports to use consistent class references
- Use `NativeQuery` instead of `AbstractQuery` in `SummaryBudgetTest`
- Replace string entity reference with `Activity::class` in `ListActivity`
2025-09-09 16:00:55 +02:00
34213ac093 fix: allow null safe navigation in ByActivityTypeAggregator normalizeFormData method 2025-09-09 15:58:53 +02:00
8d6f76a8b7 Fix import of Security 2025-09-09 09:35:12 +02:00
941acea4d9 Merge branch 'master' into migrate_to_sf72
# Conflicts:
#	src/Bundle/ChillEventBundle/Controller/EventController.php
#	src/Bundle/ChillEventBundle/Controller/ParticipationController.php
#	src/Bundle/ChillEventBundle/DependencyInjection/ChillEventExtension.php
#	src/Bundle/ChillEventBundle/Entity/Event.php
#	src/Bundle/ChillEventBundle/Form/EventType.php
#	src/Bundle/ChillEventBundle/Menu/AdminMenuBuilder.php
#	src/Bundle/ChillEventBundle/config/services.yaml
#	src/Bundle/ChillEventBundle/config/services/controller.yaml
#	src/Bundle/ChillMainBundle/Resources/views/Menu/user.html.twig
#	src/Bundle/ChillPersonBundle/Controller/AccompanyingPeriodWorkDuplicateController.php
#	src/Bundle/ChillPersonBundle/Controller/PersonController.php
#	src/Bundle/ChillPersonBundle/Form/PersonType.php
2025-09-09 09:33:27 +02:00
230c758255 Update bundles to v4.3.0 2025-09-08 16:05:09 +02:00
eafda987ae Merge branch '412-absence-enddate' into 'master'
Resolve "Absence user: add end date"

Closes #412

See merge request Chill-Projet/chill-bundles!865
2025-09-08 13:47:14 +00:00
7db8a371fc Resolve "Absence user: add end date" 2025-09-08 13:47:14 +00:00
0d0649dd31 Change route URL to avoid clash with person duplicate controller method 2025-09-08 14:51:54 +02:00
ac12b8cdcf Merge branch 'add-permission-list-command' into 'master'
Add `RoleDumper` and `DumpListPermissionsCommand` to generate a markdown list of permissions

See merge request Chill-Projet/chill-bundles!874
2025-09-05 16:55:45 +00:00
9c1611d052 Add RoleDumper and DumpListPermissionsCommand to generate a markdown list of permissions 2025-09-05 16:55:45 +00:00
90e3043c3d Junie guidelines: fix grammar and typos in development guidelines 2025-09-04 17:26:55 +02:00
af13bf9088 Update chill bundles to v4.2.1 2025-09-03 21:12:21 +02:00
4aa65d69c7 Merge branch 'master' of gitlab.com:Chill-Projet/chill-bundles 2025-09-03 21:11:06 +02:00
9e33aec594 Handle different export types in ExportConfigNormalizer and allow null/array checks for dataFormatter in ExportController 2025-09-03 21:10:58 +02:00
f88bc7e9f0 Merge branch 'improve-local-storage' into 'master'
Improve error handling when saving objects to local disk

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

Closes #422

See merge request Chill-Projet/chill-bundles!869
2025-09-02 08:29:27 +00:00
juminet
82c02f442b Resolve "Fix layout of password recover pages" 2025-09-02 08:29:26 +00:00
f32a9dc7bc Merge branch '64-identifiant-personne' into 'master'
Add external identifiers for person, editable in edit form, with minimal features associated

See merge request Chill-Projet/chill-bundles!871
2025-09-01 08:05:11 +00:00
ea06a96f91 Add external identifiers for person, editable in edit form, with minimal features associated 2025-09-01 08:05:11 +00:00
76433e2512 Fix incorrect parameter name in event details link 2025-08-28 13:49:45 +02:00
1fa464b87a Fix typo in 'uncheckAll' script for centers selection 2025-08-28 13:32:43 +02:00
77bccd5c4e Remove deprecated ContainerAwareTrait 2025-08-27 17:01:06 +02:00
5ffa945a84 Remove Symfony and ChampsLibres folders 2025-08-27 17:00:49 +02:00
3a85d940e9 Replace deprecated ClassUtils 2025-08-27 16:41:40 +02:00
d2e7640652 Upgrade Doctrine ORM to 3.5.2 2025-08-27 16:33:10 +02:00
979b2955f6 Rector changes return typing 2025-08-27 16:32:44 +02:00
da240f5ce5 Use WorkflowInterface instead of Workflow 2025-08-27 16:01:01 +02:00
f91ab63b3a Use $query->all() instead of ->() for non-scalar values 2025-08-27 15:59:56 +02:00
2ea8a03698 Use correct key for workflow labels 2025-08-27 15:58:48 +02:00
3b75f43e80 Update chill bundles to v4.1.0 2025-08-26 15:43:21 +02:00
a40eb95c43 Add changie for new event bundle features 2025-08-26 15:41:58 +02:00
8429c6e693 Merge branch 'improvements_event_module' into 'master'
Improvements event module

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

Closes #400

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

Closes #355

See merge request Chill-Projet/chill-bundles!795
2025-08-18 15:34:48 +00:00
f5668592ca Resolve "Fusion des tiers" 2025-08-18 15:34:48 +00:00
21e965449c refactor(config): update service definitions for autowiring and controller configuration
- Enable autowiring for Chill\EventBundle\Controller
- Add default autowire and autoconfigure settings
2025-08-05 13:49:20 +02:00
88697ae83f chore: update dependencies and configure services
- bump symfony/security-bundle to ^7.3 in composer.json
- enable autoconfigure for Chill\CalendarBundle\Controller services
2025-08-05 11:21:52 +02:00
10ba2aaea5 feat: update symfony/amqp-messenger to v7.3
- Added symfony/amqp-messenger v7.3 to dependencies
- Removed symfony/amqp-messenger v7.2 from dev dependencies
2025-08-05 11:03:43 +02:00
4b484bd16c refactor(entity): use TrackCreationTrait and TrackUpdateTrait in AsideActivity
- Replace manual tracking of createdAt, createdBy, updatedAt, updatedBy with TrackCreationTrait and TrackUpdateTrait
- Remove related properties and methods
2025-08-05 09:04:22 +02:00
4c28a4c358 refactor: improve property checks
- use ClassUtils for real class name resolution in ActivityType
2025-08-05 09:03:53 +02:00
490d546e7a ```
refactor: add type hints and improve method signatures

- add return type declarations to methods in `ExportGenerationVoter`
- add type hints to `EntityToJsonTransformer` methods
- include `ExceptionInterface` in `EntityToJsonTransformer` for better error handling
```
2025-08-04 17:16:42 +02:00
7a4416109e Replace Security component with SecurityBundle
Updated references from Symfony\Component\Security\Core\Security
to Symfony\Bundle\SecurityBundle\Security across multiple files
to align with the updated namespace and improve compatibility.
2025-08-04 17:02:23 +02:00
0e1a47a49b Merge branch 'master' into migrate_to_sf72
# Conflicts:
#	docs/source/_static/code/exports/BirthdateFilter.php
#	rector.php
#	src/Bundle/ChillActivityBundle/Export/Aggregator/ACPAggregators/ByActivityTypeAggregator.php
#	src/Bundle/ChillActivityBundle/Export/Aggregator/ACPAggregators/BySocialActionAggregator.php
#	src/Bundle/ChillActivityBundle/Export/Aggregator/ACPAggregators/BySocialIssueAggregator.php
#	src/Bundle/ChillActivityBundle/Export/Aggregator/ActivityLocationAggregator.php
#	src/Bundle/ChillActivityBundle/Export/Aggregator/ActivityPresenceAggregator.php
#	src/Bundle/ChillActivityBundle/Export/Aggregator/ActivityReasonAggregator.php
#	src/Bundle/ChillActivityBundle/Export/Aggregator/ActivityTypeAggregator.php
#	src/Bundle/ChillActivityBundle/Export/Aggregator/ActivityUserAggregator.php
#	src/Bundle/ChillActivityBundle/Export/Aggregator/ActivityUsersAggregator.php
#	src/Bundle/ChillActivityBundle/Export/Aggregator/ActivityUsersJobAggregator.php
#	src/Bundle/ChillActivityBundle/Export/Aggregator/ActivityUsersScopeAggregator.php
#	src/Bundle/ChillActivityBundle/Export/Aggregator/ByCreatorAggregator.php
#	src/Bundle/ChillActivityBundle/Export/Aggregator/ByThirdpartyAggregator.php
#	src/Bundle/ChillActivityBundle/Export/Aggregator/CreatorJobAggregator.php
#	src/Bundle/ChillActivityBundle/Export/Aggregator/CreatorScopeAggregator.php
#	src/Bundle/ChillActivityBundle/Export/Aggregator/DateAggregator.php
#	src/Bundle/ChillActivityBundle/Export/Aggregator/LocationTypeAggregator.php
#	src/Bundle/ChillActivityBundle/Export/Aggregator/PersonAggregators/HouseholdAggregator.php
#	src/Bundle/ChillActivityBundle/Export/Aggregator/PersonAggregators/PersonAggregator.php
#	src/Bundle/ChillActivityBundle/Export/Aggregator/PersonsAggregator.php
#	src/Bundle/ChillActivityBundle/Export/Export/LinkedToACP/SumActivityDuration.php
#	src/Bundle/ChillActivityBundle/Export/Export/LinkedToACP/SumActivityVisitDuration.php
#	src/Bundle/ChillActivityBundle/Export/Filter/ACPFilters/ActivityTypeFilter.php
#	src/Bundle/ChillActivityBundle/Export/Filter/ACPFilters/BySocialActionFilter.php
#	src/Bundle/ChillActivityBundle/Export/Filter/ACPFilters/BySocialIssueFilter.php
#	src/Bundle/ChillActivityBundle/Export/Filter/ACPFilters/HasNoActivityFilter.php
#	src/Bundle/ChillActivityBundle/Export/Filter/ACPFilters/PeriodHavingActivityBetweenDatesFilter.php
#	src/Bundle/ChillActivityBundle/Export/Filter/ActivityDateFilter.php
#	src/Bundle/ChillActivityBundle/Export/Filter/ActivityPresenceFilter.php
#	src/Bundle/ChillActivityBundle/Export/Filter/ActivityTypeFilter.php
#	src/Bundle/ChillActivityBundle/Export/Filter/ActivityUsersFilter.php
#	src/Bundle/ChillActivityBundle/Export/Filter/ByCreatorFilter.php
#	src/Bundle/ChillActivityBundle/Export/Filter/CreatorJobFilter.php
#	src/Bundle/ChillActivityBundle/Export/Filter/CreatorScopeFilter.php
#	src/Bundle/ChillActivityBundle/Export/Filter/EmergencyFilter.php
#	src/Bundle/ChillActivityBundle/Export/Filter/LocationFilter.php
#	src/Bundle/ChillActivityBundle/Export/Filter/LocationTypeFilter.php
#	src/Bundle/ChillActivityBundle/Export/Filter/PersonFilters/ActivityReasonFilter.php
#	src/Bundle/ChillActivityBundle/Export/Filter/PersonsFilter.php
#	src/Bundle/ChillActivityBundle/Export/Filter/SentReceivedFilter.php
#	src/Bundle/ChillActivityBundle/Export/Filter/UserFilter.php
#	src/Bundle/ChillActivityBundle/Export/Filter/UsersJobFilter.php
#	src/Bundle/ChillActivityBundle/Export/Filter/UsersScopeFilter.php
#	src/Bundle/ChillActivityBundle/Validator/Constraints/ActivityValidity.php
#	src/Bundle/ChillAsideActivityBundle/src/Export/Aggregator/ByActivityTypeAggregator.php
#	src/Bundle/ChillAsideActivityBundle/src/Export/Aggregator/ByUserJobAggregator.php
#	src/Bundle/ChillAsideActivityBundle/src/Export/Aggregator/ByUserScopeAggregator.php
#	src/Bundle/ChillAsideActivityBundle/src/Export/Filter/ByActivityTypeFilter.php
#	src/Bundle/ChillAsideActivityBundle/src/Export/Filter/ByDateFilter.php
#	src/Bundle/ChillAsideActivityBundle/src/Export/Filter/ByUserFilter.php
#	src/Bundle/ChillAsideActivityBundle/src/Export/Filter/ByUserJobFilter.php
#	src/Bundle/ChillAsideActivityBundle/src/Export/Filter/ByUserScopeFilter.php
#	src/Bundle/ChillCalendarBundle/Export/Aggregator/AgentAggregator.php
#	src/Bundle/ChillCalendarBundle/Export/Aggregator/CancelReasonAggregator.php
#	src/Bundle/ChillCalendarBundle/Export/Aggregator/JobAggregator.php
#	src/Bundle/ChillCalendarBundle/Export/Aggregator/LocationAggregator.php
#	src/Bundle/ChillCalendarBundle/Export/Aggregator/LocationTypeAggregator.php
#	src/Bundle/ChillCalendarBundle/Export/Aggregator/MonthYearAggregator.php
#	src/Bundle/ChillCalendarBundle/Export/Aggregator/ScopeAggregator.php
#	src/Bundle/ChillCalendarBundle/Export/Aggregator/UrgencyAggregator.php
#	src/Bundle/ChillCalendarBundle/Export/Filter/AgentFilter.php
#	src/Bundle/ChillCalendarBundle/Export/Filter/BetweenDatesFilter.php
#	src/Bundle/ChillCalendarBundle/Export/Filter/CalendarRangeFilter.php
#	src/Bundle/ChillCalendarBundle/Export/Filter/JobFilter.php
#	src/Bundle/ChillCalendarBundle/Export/Filter/ScopeFilter.php
#	src/Bundle/ChillEventBundle/Export/Aggregator/EventDateAggregator.php
#	src/Bundle/ChillEventBundle/Export/Aggregator/EventTypeAggregator.php
#	src/Bundle/ChillEventBundle/Export/Aggregator/RoleAggregator.php
#	src/Bundle/ChillEventBundle/Export/Filter/EventDateFilter.php
#	src/Bundle/ChillEventBundle/Export/Filter/EventTypeFilter.php
#	src/Bundle/ChillEventBundle/Export/Filter/RoleFilter.php
#	src/Bundle/ChillMainBundle/Controller/ExportController.php
#	src/Bundle/ChillMainBundle/Controller/SavedExportController.php
#	src/Bundle/ChillMainBundle/DependencyInjection/CompilerPass/ExportsCompilerPass.php
#	src/Bundle/ChillMainBundle/Entity/Notification.php
#	src/Bundle/ChillMainBundle/Export/ExportManager.php
#	src/Bundle/ChillMainBundle/Export/Formatter/CSVFormatter.php
#	src/Bundle/ChillMainBundle/Export/Formatter/CSVListFormatter.php
#	src/Bundle/ChillMainBundle/Export/Formatter/CSVPivotedListFormatter.php
#	src/Bundle/ChillMainBundle/Export/Formatter/SpreadSheetFormatter.php
#	src/Bundle/ChillMainBundle/Export/Formatter/SpreadsheetListFormatter.php
#	src/Bundle/ChillMainBundle/Form/SavedExportType.php
#	src/Bundle/ChillMainBundle/Form/Type/DataTransformer/EntityToJsonTransformer.php
#	src/Bundle/ChillMainBundle/Tests/Export/ExportManagerTest.php
#	src/Bundle/ChillMainBundle/Tests/Export/SortExportElementTest.php
#	src/Bundle/ChillPersonBundle/Export/Aggregator/AccompanyingCourseAggregators/AdministrativeLocationAggregator.php
#	src/Bundle/ChillPersonBundle/Export/Aggregator/AccompanyingCourseAggregators/ClosingDateAggregator.php
#	src/Bundle/ChillPersonBundle/Export/Aggregator/AccompanyingCourseAggregators/ClosingMotiveAggregator.php
#	src/Bundle/ChillPersonBundle/Export/Aggregator/AccompanyingCourseAggregators/ConfidentialAggregator.php
#	src/Bundle/ChillPersonBundle/Export/Aggregator/AccompanyingCourseAggregators/CreatorJobAggregator.php
#	src/Bundle/ChillPersonBundle/Export/Aggregator/AccompanyingCourseAggregators/DurationAggregator.php
#	src/Bundle/ChillPersonBundle/Export/Aggregator/AccompanyingCourseAggregators/EmergencyAggregator.php
#	src/Bundle/ChillPersonBundle/Export/Aggregator/AccompanyingCourseAggregators/EvaluationAggregator.php
#	src/Bundle/ChillPersonBundle/Export/Aggregator/AccompanyingCourseAggregators/GeographicalUnitStatAggregator.php
#	src/Bundle/ChillPersonBundle/Export/Aggregator/AccompanyingCourseAggregators/IntensityAggregator.php
#	src/Bundle/ChillPersonBundle/Export/Aggregator/AccompanyingCourseAggregators/JobWorkingOnCourseAggregator.php
#	src/Bundle/ChillPersonBundle/Export/Aggregator/AccompanyingCourseAggregators/OpeningDateAggregator.php
#	src/Bundle/ChillPersonBundle/Export/Aggregator/AccompanyingCourseAggregators/OriginAggregator.php
#	src/Bundle/ChillPersonBundle/Export/Aggregator/AccompanyingCourseAggregators/PersonParticipatingAggregator.php
#	src/Bundle/ChillPersonBundle/Export/Aggregator/AccompanyingCourseAggregators/ReferrerAggregator.php
#	src/Bundle/ChillPersonBundle/Export/Aggregator/AccompanyingCourseAggregators/ReferrerScopeAggregator.php
#	src/Bundle/ChillPersonBundle/Export/Aggregator/AccompanyingCourseAggregators/RequestorAggregator.php
#	src/Bundle/ChillPersonBundle/Export/Aggregator/AccompanyingCourseAggregators/ScopeAggregator.php
#	src/Bundle/ChillPersonBundle/Export/Aggregator/AccompanyingCourseAggregators/ScopeWorkingOnCourseAggregator.php
#	src/Bundle/ChillPersonBundle/Export/Aggregator/AccompanyingCourseAggregators/SocialActionAggregator.php
#	src/Bundle/ChillPersonBundle/Export/Aggregator/AccompanyingCourseAggregators/SocialIssueAggregator.php
#	src/Bundle/ChillPersonBundle/Export/Aggregator/AccompanyingCourseAggregators/StepAggregator.php
#	src/Bundle/ChillPersonBundle/Export/Aggregator/AccompanyingCourseAggregators/UserJobAggregator.php
#	src/Bundle/ChillPersonBundle/Export/Aggregator/AccompanyingCourseAggregators/UserWorkingOnCourseAggregator.php
#	src/Bundle/ChillPersonBundle/Export/Aggregator/AccompanyingPeriodStepHistoryAggregators/ByClosingMotiveAggregator.php
#	src/Bundle/ChillPersonBundle/Export/Aggregator/AccompanyingPeriodStepHistoryAggregators/ByDateAggregator.php
#	src/Bundle/ChillPersonBundle/Export/Aggregator/AccompanyingPeriodStepHistoryAggregators/ByStepAggregator.php
#	src/Bundle/ChillPersonBundle/Export/Aggregator/EvaluationAggregators/ByEndDateAggregator.php
#	src/Bundle/ChillPersonBundle/Export/Aggregator/EvaluationAggregators/ByMaxDateAggregator.php
#	src/Bundle/ChillPersonBundle/Export/Aggregator/EvaluationAggregators/ByStartDateAggregator.php
#	src/Bundle/ChillPersonBundle/Export/Aggregator/EvaluationAggregators/EvaluationTypeAggregator.php
#	src/Bundle/ChillPersonBundle/Export/Aggregator/EvaluationAggregators/HavingEndDateAggregator.php
#	src/Bundle/ChillPersonBundle/Export/Aggregator/HouseholdAggregators/ChildrenNumberAggregator.php
#	src/Bundle/ChillPersonBundle/Export/Aggregator/HouseholdAggregators/CompositionAggregator.php
#	src/Bundle/ChillPersonBundle/Export/Aggregator/PersonAggregators/AdministrativeStatusAggregator.php
#	src/Bundle/ChillPersonBundle/Export/Aggregator/PersonAggregators/AgeAggregator.php
#	src/Bundle/ChillPersonBundle/Export/Aggregator/PersonAggregators/ByHouseholdCompositionAggregator.php
#	src/Bundle/ChillPersonBundle/Export/Aggregator/PersonAggregators/CenterAggregator.php
#	src/Bundle/ChillPersonBundle/Export/Aggregator/PersonAggregators/EmploymentStatusAggregator.php
#	src/Bundle/ChillPersonBundle/Export/Aggregator/PersonAggregators/GenderAggregator.php
#	src/Bundle/ChillPersonBundle/Export/Aggregator/PersonAggregators/HouseholdPositionAggregator.php
#	src/Bundle/ChillPersonBundle/Export/Aggregator/PersonAggregators/MaritalStatusAggregator.php
#	src/Bundle/ChillPersonBundle/Export/Aggregator/PersonAggregators/NationalityAggregator.php
#	src/Bundle/ChillPersonBundle/Export/Aggregator/PersonAggregators/PostalCodeAggregator.php
#	src/Bundle/ChillPersonBundle/Export/Aggregator/SocialWorkAggregators/ActionTypeAggregator.php
#	src/Bundle/ChillPersonBundle/Export/Aggregator/SocialWorkAggregators/CreatorAggregator.php
#	src/Bundle/ChillPersonBundle/Export/Aggregator/SocialWorkAggregators/CreatorJobAggregator.php
#	src/Bundle/ChillPersonBundle/Export/Aggregator/SocialWorkAggregators/CreatorScopeAggregator.php
#	src/Bundle/ChillPersonBundle/Export/Aggregator/SocialWorkAggregators/GoalAggregator.php
#	src/Bundle/ChillPersonBundle/Export/Aggregator/SocialWorkAggregators/GoalResultAggregator.php
#	src/Bundle/ChillPersonBundle/Export/Aggregator/SocialWorkAggregators/HandlingThirdPartyAggregator.php
#	src/Bundle/ChillPersonBundle/Export/Aggregator/SocialWorkAggregators/JobAggregator.php
#	src/Bundle/ChillPersonBundle/Export/Aggregator/SocialWorkAggregators/ReferrerAggregator.php
#	src/Bundle/ChillPersonBundle/Export/Aggregator/SocialWorkAggregators/ResultAggregator.php
#	src/Bundle/ChillPersonBundle/Export/Aggregator/SocialWorkAggregators/ScopeAggregator.php
#	src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingCourseFilters/ActiveOnDateFilter.php
#	src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingCourseFilters/ActiveOneDayBetweenDatesFilter.php
#	src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingCourseFilters/AdministrativeLocationFilter.php
#	src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingCourseFilters/ClosingMotiveFilter.php
#	src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingCourseFilters/ConfidentialFilter.php
#	src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingCourseFilters/CreatorFilter.php
#	src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingCourseFilters/CreatorJobFilter.php
#	src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingCourseFilters/EmergencyFilter.php
#	src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingCourseFilters/EvaluationFilter.php
#	src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingCourseFilters/GeographicalUnitStatFilter.php
#	src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingCourseFilters/HandlingThirdPartyFilter.php
#	src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingCourseFilters/HasNoReferrerFilter.php
#	src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingCourseFilters/HasTemporaryLocationFilter.php
#	src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingCourseFilters/IntensityFilter.php
#	src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingCourseFilters/NotAssociatedWithAReferenceAddressFilter.php
#	src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingCourseFilters/OpenBetweenDatesFilter.php
#	src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingCourseFilters/OriginFilter.php
#	src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingCourseFilters/ReferrerFilter.php
#	src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingCourseFilters/ReferrerFilterBetweenDates.php
#	src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingCourseFilters/RequestorFilter.php
#	src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingCourseFilters/SocialActionFilter.php
#	src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingCourseFilters/SocialIssueFilter.php
#	src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingCourseFilters/StepFilterBetweenDates.php
#	src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingCourseFilters/StepFilterOnDate.php
#	src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingCourseFilters/UserJobFilter.php
#	src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingPeriodStepHistoryFilters/ByDateFilter.php
#	src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingPeriodStepHistoryFilters/ByStepFilter.php
#	src/Bundle/ChillPersonBundle/Export/Filter/EvaluationFilters/EvaluationTypeFilter.php
#	src/Bundle/ChillPersonBundle/Export/Filter/EvaluationFilters/MaxDateFilter.php
#	src/Bundle/ChillPersonBundle/Export/Filter/PersonFilters/AddressRefStatusFilter.php
#	src/Bundle/ChillPersonBundle/Export/Filter/PersonFilters/AgeFilter.php
#	src/Bundle/ChillPersonBundle/Export/Filter/PersonFilters/BirthdateFilter.php
#	src/Bundle/ChillPersonBundle/Export/Filter/PersonFilters/ByHouseholdCompositionFilter.php
#	src/Bundle/ChillPersonBundle/Export/Filter/PersonFilters/DeadOrAliveFilter.php
#	src/Bundle/ChillPersonBundle/Export/Filter/PersonFilters/DeathdateFilter.php
#	src/Bundle/ChillPersonBundle/Export/Filter/PersonFilters/GenderFilter.php
#	src/Bundle/ChillPersonBundle/Export/Filter/PersonFilters/GeographicalUnitFilter.php
#	src/Bundle/ChillPersonBundle/Export/Filter/PersonFilters/MaritalStatusFilter.php
#	src/Bundle/ChillPersonBundle/Export/Filter/PersonFilters/NationalityFilter.php
#	src/Bundle/ChillPersonBundle/Export/Filter/PersonFilters/ResidentialAddressAtThirdpartyFilter.php
#	src/Bundle/ChillPersonBundle/Export/Filter/PersonFilters/ResidentialAddressAtUserFilter.php
#	src/Bundle/ChillPersonBundle/Export/Filter/PersonFilters/WithParticipationBetweenDatesFilter.php
#	src/Bundle/ChillPersonBundle/Export/Filter/PersonFilters/WithoutHouseholdComposition.php
#	src/Bundle/ChillPersonBundle/Export/Filter/PersonFilters/WithoutParticipationBetweenDatesFilter.php
#	src/Bundle/ChillPersonBundle/Export/Filter/SocialWorkFilters/CreatorFilter.php
#	src/Bundle/ChillPersonBundle/Export/Filter/SocialWorkFilters/CreatorJobFilter.php
#	src/Bundle/ChillPersonBundle/Export/Filter/SocialWorkFilters/CreatorScopeFilter.php
#	src/Bundle/ChillPersonBundle/Export/Filter/SocialWorkFilters/JobFilter.php
#	src/Bundle/ChillPersonBundle/Export/Filter/SocialWorkFilters/ReferrerFilter.php
#	src/Bundle/ChillPersonBundle/Export/Filter/SocialWorkFilters/ScopeFilter.php
#	src/Bundle/ChillPersonBundle/Export/Filter/SocialWorkFilters/SocialWorkTypeFilter.php
#	src/Bundle/ChillPersonBundle/Export/Helper/FilterListAccompanyingPeriodHelper.php
#	src/Bundle/ChillPersonBundle/Security/Authorization/AccompanyingPeriodVoter.php
#	src/Bundle/ChillPersonBundle/Tests/Export/Export/ListAccompanyingPeriodTest.php
#	src/Bundle/ChillPersonBundle/Validator/Constraints/AccompanyingPeriod/AccompanyingPeriodValidity.php
#	src/Bundle/ChillPersonBundle/Validator/Constraints/AccompanyingPeriod/ConfidentialCourseMustHaveReferrer.php
#	src/Bundle/ChillPersonBundle/Validator/Constraints/AccompanyingPeriod/LocationValidity.php
#	src/Bundle/ChillPersonBundle/Validator/Constraints/Household/MaxHolder.php
#	src/Bundle/ChillReportBundle/Export/Export/ReportList.php
#	src/Bundle/ChillReportBundle/Export/Filter/ReportDateFilter.php
2025-08-04 16:57:45 +02:00
26298c48fd Merge branch with master 2025-07-01 16:43:44 +02:00
4d4bcb44bc Merge branch 'migrate_to_sf72' of https://gitlab.com/Chill-Projet/chill-bundles into migrate_to_sf72 2025-06-05 16:31:08 +02:00
51777f7365 Some file additions after rebase on master 2025-06-05 16:29:01 +02:00
b9a9983b88 Inject services, no longer available in container by default 2025-06-05 16:23:23 +02:00
e51a3c7525 Rename key property_info.with_constructor_extractor to just enabled: true 2025-06-05 16:23:23 +02:00
9875f49374 Replace methods with injected services 2025-06-05 16:23:23 +02:00
52c3c0a565 Rector file with symfonysetlist rules up to symfony_71 2025-06-05 16:23:23 +02:00
640a7bcd0a Correct injection of services 2025-06-05 16:23:23 +02:00
13a9e14450 Run symfonysetlist up to symfony_70 2025-06-05 16:23:21 +02:00
abb786495a Run symfonysetlist symfony_62 2025-06-05 16:21:19 +02:00
8ec18a6fb8 Use [#MapEntity()] attribute to inject entity into method + for now set controller_resolver.auto_mapping to true 2025-06-05 16:21:19 +02:00
f282ffbfd4 Remove not null constraint in db on updatedat property for notification 2025-06-05 16:21:19 +02:00
27a2d8fdc8 Remove double services key: silent error triggering on this will be deprecated 2025-06-05 16:21:19 +02:00
1cb63bfe1d Use FQCN::method to build CRUD routes 2025-06-05 16:21:19 +02:00
9daa7f7c09 Update framework recipe 2025-06-05 16:21:19 +02:00
b6e780d573 Update symfony flex recipe 2025-06-05 16:21:19 +02:00
7e3618a9be Update phpunit recipe 2025-06-05 16:21:19 +02:00
61b187e340 Update doctrine/annotations recipe 2025-06-05 16:21:19 +02:00
abfdf2ec6d Inject managerRegistry and serializerInterface directly into controllers 2025-06-05 16:21:19 +02:00
cc20e8896f Use userIdentifier instead of deprecated getUsername() 2025-06-05 16:21:19 +02:00
59fe9a469a Set alias to inject container into AbstractController::setContainer() 2025-06-05 16:21:18 +02:00
228b4f0b3d set typed ?string properties to '= null' 2025-06-05 16:21:18 +02:00
b5bbf929f6 Uncomment necessary config 2025-06-05 16:21:18 +02:00
d9ce4e3ec6 Inject ManagerRegistry directly instead of getting from container 2025-06-05 16:21:18 +02:00
c08c909545 Remove NOT NULL constraint from created and updated properties 2025-06-05 16:21:18 +02:00
6cd17a8e36 Remove containerAwareInterface, no longer supported in sf72 2025-06-05 16:21:18 +02:00
e3b2b7c6d1 Make doctrine service available, no longer by default in scoped service locator 2025-06-05 16:21:18 +02:00
0337bca273 Adjust workflow config, label needs to be a string 2025-06-05 16:21:18 +02:00
8bb2e2dc37 Add missing return statement 2025-06-05 16:21:18 +02:00
cdd0372d3e Update security config (guidelines sf64) 2025-06-05 16:21:18 +02:00
1ee16d3446 Uncomment necessary controller config in mainbundle 2025-06-05 16:21:18 +02:00
bdbcb9ca4a Update symfony packages and necessary config (auto) 2025-06-05 16:21:18 +02:00
e639289130 Remove ContainerAwareInterface from CustomFieldProvider.php 2025-06-05 16:21:18 +02:00
3d3347e547 Remove config for controller; Symfony will find and load them automatically 2025-06-05 16:21:18 +02:00
3f27d9e8fc Class cannot be final if you want to use lazy proxy 2025-06-05 16:21:18 +02:00
ce98b9ae48 Use type attribute instead of annotations 2025-06-05 16:21:18 +02:00
d2bd17632f Remove ContainerAwareInterface and extend Fixture instead 2025-06-05 16:21:18 +02:00
7cef5e3a76 Get session from requestStack instead of injecting SessionInterface 2025-06-05 16:21:18 +02:00
9726844a26 Remove this config. Symfony will still find and load controllers via annotations or attributes 2025-06-05 16:21:18 +02:00
f7ce3996ef Add name argument to AsCommand attribute and replace Security service namespace with new namespace Symfony\Bundle\SecurityBundle\Security 2025-06-05 16:21:17 +02:00
6e21f2688f Add getSupportedTypes method for (de)normalizerInterface implementations 2025-06-05 16:21:17 +02:00
17db59d221 Rector changes and immplementations of required methods 2025-06-05 16:21:17 +02:00
053b92b77c Update configuration to comply with symfony 7.2 2025-06-05 16:21:17 +02:00
eab5a8be7b Do not show job menu entry if user does not have necessary permission 2025-06-05 16:21:17 +02:00
36fd6f10b2 Inject services, no longer available in container by default 2025-06-03 15:08:26 +02:00
23227add12 Rename key property_info.with_constructor_extractor to just enabled: true 2025-06-03 14:52:42 +02:00
8cbd800fb9 Replace methods with injected services 2025-06-03 14:50:58 +02:00
1f79985193 Rector file with symfonysetlist rules up to symfony_71 2025-05-28 16:10:59 +02:00
f4ed7e4254 Correct injection of services 2025-05-28 16:10:07 +02:00
382f20c6ad Run symfonysetlist up to symfony_70 2025-05-28 15:46:25 +02:00
220110a403 Run symfonysetlist symfony_62 2025-05-28 15:17:20 +02:00
3fdf494f1c Use [#MapEntity()] attribute to inject entity into method + for now set controller_resolver.auto_mapping to true 2025-05-28 14:58:59 +02:00
793dcbfa9a Remove not null constraint in db on updatedat property for notification 2025-05-28 14:54:25 +02:00
f96ed1f5eb Remove double services key: silent error triggering on this will be deprecated 2025-05-28 14:33:36 +02:00
8b9b427a1e Use FQCN::method to build CRUD routes 2025-05-28 14:32:59 +02:00
2f3caafd10 Update framework recipe 2025-05-28 12:51:53 +02:00
fde10ebe71 Update symfony flex recipe 2025-05-28 12:49:33 +02:00
b7fc85a2c9 Update phpunit recipe 2025-05-28 12:48:53 +02:00
72b79f9af5 Update doctrine/annotations recipe 2025-05-28 12:42:57 +02:00
ab15ec8a4c Inject managerRegistry and serializerInterface directly into controllers 2025-05-28 12:04:27 +02:00
c8f1e67fc7 Use userIdentifier instead of deprecated getUsername() 2025-05-28 11:23:51 +02:00
d5c09c853f Set alias to inject container into AbstractController::setContainer() 2025-05-28 11:21:55 +02:00
a79b0b85dd set typed ?string properties to '= null' 2025-05-28 10:47:23 +02:00
47c1282044 Uncomment necessary config 2025-05-27 15:19:28 +02:00
ce63506a1a Inject ManagerRegistry directly instead of getting from container 2025-05-27 15:19:15 +02:00
8ab03473b7 Remove NOT NULL constraint from created and updated properties 2025-05-27 15:18:32 +02:00
ebaff8d170 Remove containerAwareInterface, no longer supported in sf72 2025-05-27 14:06:36 +02:00
46f9e4968b Make doctrine service available, no longer by default in scoped service locator 2025-05-27 13:03:43 +02:00
344c5a1c3c Adjust workflow config, label needs to be a string 2025-05-27 12:44:03 +02:00
50b590ae34 Add missing return statement 2025-05-27 12:43:45 +02:00
74fbd6feac Update security config (guidelines sf64) 2025-05-27 12:43:35 +02:00
aa69a7ad62 Uncomment necessary controller config in mainbundle 2025-05-27 12:43:10 +02:00
bc0fae5c2e Update symfony packages and necessary config (auto) 2025-05-27 12:42:41 +02:00
1321f5c734 Remove ContainerAwareInterface from CustomFieldProvider.php 2025-05-26 14:55:39 +02:00
262b7c5db3 Remove config for controller; Symfony will find and load them automatically 2025-05-26 14:55:15 +02:00
5283eddb15 Class cannot be final if you want to use lazy proxy 2025-05-26 14:54:47 +02:00
f7b0c49124 Use type attribute instead of annotations 2025-05-26 14:54:05 +02:00
5e32375dfe Remove ContainerAwareInterface and extend Fixture instead 2025-05-26 14:32:06 +02:00
5cdfee40fb Get session from requestStack instead of injecting SessionInterface 2025-05-26 14:19:01 +02:00
6e5dbe4e58 Remove this config. Symfony will still find and load controllers via annotations or attributes 2025-05-26 14:07:23 +02:00
d884d78617 Add name argument to AsCommand attribute and replace Security service namespace with new namespace Symfony\Bundle\SecurityBundle\Security 2025-05-26 13:58:12 +02:00
a5049ddefb Add getSupportedTypes method for (de)normalizerInterface implementations 2025-05-26 13:49:05 +02:00
9fcc1634f5 Rector changes and immplementations of required methods 2025-05-22 17:47:07 +02:00
d9a47fdee9 Update configuration to comply with symfony 7.2 2025-05-22 17:45:52 +02:00
1e5d676aa5 Do not show job menu entry if user does not have necessary permission 2025-05-22 15:25:11 +02:00
1394 changed files with 10528 additions and 5416 deletions

View File

@@ -1,6 +0,0 @@
kind: Feature
body: Show filters on list pages unfolded by default
time: 2025-07-22T15:50:39.338057044+02:00
custom:
Issue: "399"
SchemaChange: No schema change

View File

@@ -1,6 +0,0 @@
kind: Fixed
body: adjust display logic for accompanying period dates, include closing date if period is closed.
time: 2025-08-06T13:46:09.241584292+02:00
custom:
Issue: "382"
SchemaChange: No schema change

View File

@@ -1,6 +0,0 @@
kind: Fixed
body: add min and step attributes to integer field in DateIntervalType
time: 2025-08-06T17:35:27.413787704+02:00
custom:
Issue: "384"
SchemaChange: No schema change

View File

@@ -0,0 +1,6 @@
kind: Fixed
body: Fix display of 'duplicate' and 'merge' buttons in CRUD templates
time: 2025-09-09T17:36:39.960419639+02:00
custom:
Issue: ""
SchemaChange: No schema change

View File

@@ -1,6 +0,0 @@
kind: UX
body: Limit display of participations in event list
time: 2025-07-22T13:26:37.500656935+02:00
custom:
Issue: ""
SchemaChange: No schema change

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

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

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

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

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

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

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

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

2
.env
View File

@@ -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 Normal file
View File

@@ -0,0 +1,4 @@
###> symfony/framework-bundle ###
APP_SECRET=72759e571285ef25677c88f967a73386
###< symfony/framework-bundle ###

View File

@@ -1,39 +1,5 @@
# variables for .env environement
# those variables suits for gitlab-ci
# Run tests from root to adapt your own environment
# define your env variables for the test env here
KERNEL_CLASS='App\Kernel'
APP_SECRET='$ecretf0rt3st'
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
SYMFONY_DEPRECATIONS_HELPER=999999
DEFAULT_CARRIER_CODE=TEST

View File

@@ -7,14 +7,6 @@
"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,
@@ -127,46 +119,6 @@
"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,
@@ -399,14 +351,6 @@
"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,
@@ -615,14 +559,6 @@
"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,
@@ -983,22 +919,6 @@
"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,
@@ -1089,115 +1009,19 @@
},
{
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress.vue",
"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": 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,
"line": 516,
"column": 21,
"ruleId": "vue/no-mutating-props",
"message": "Unexpected mutation of \"context\" prop.",
"hash": "0d3f40c47974a4371072b3b9ee04b197c830162d"
"hash": "984c4203f2ac1e1bb65f9ce76ecd03b763cfaa83"
},
{
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress.vue",
"line": 491,
"line": 517,
"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"
"hash": "c9fb019bc21bfa77d989ed596913b99dd653c594"
},
{
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressMore.vue",
@@ -1224,204 +1048,180 @@
"hash": "2d5a5e680ff207ad97c7e7b7d999064b561dfd8a"
},
{
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressSelection.vue",
"line": 106,
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressMore.vue",
"line": 149,
"column": 17,
"ruleId": "vue/no-mutating-props",
"message": "Unexpected mutation of \"entity\" prop.",
"hash": "d52356f2af31d0167c02330ec22d09fbfa6b2b9f"
"hash": "e4c1ecd7ae77d46ac3625c5bbe92a24d6a964db9"
},
{
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressSelection.vue",
"line": 114,
"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": "c8e8e06f370f93bf05867e93b5f037dfa46937b1"
"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"
},
{
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressSelection.vue",
"line": 128,
"column": 13,
"line": 130,
"column": 17,
"ruleId": "vue/no-mutating-props",
"message": "Unexpected mutation of \"entity\" prop.",
"hash": "9abaf71ca4b4f292b3b01e724d0a7733365e71f1"
"hash": "239ac02a02694d5b20ab30d4c7ce5838c51d1515"
},
{
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressSelection.vue",
"line": 129,
"column": 13,
"line": 138,
"column": 17,
"ruleId": "vue/no-mutating-props",
"message": "Unexpected mutation of \"entity\" prop.",
"hash": "0b0743959778a9e3d93089b132608816ee4e6646"
"hash": "a54f9bc6d1edfa4df93c7dd7d409cfef3fccf99e"
},
{
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressSelection.vue",
"line": 132,
"line": 152,
"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"
"hash": "74a5f664d18f3916ea908897fcd0291cb0128f29"
},
{
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressSelection.vue",
"line": 153,
"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": 154,
"column": 37,
"ruleId": "vue/no-mutating-props",
"message": "Unexpected mutation of \"entity\" prop.",
"hash": "596c4b180b926b7829f987384328bf5636cd367a"
},
{
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressSelection.vue",
"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": "d92b92a25043244cca809bd129633b7e024e26b4"
},
{
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressSelection.vue",
"line": 190,
"column": 17,
"ruleId": "vue/no-mutating-props",
"message": "Unexpected mutation of \"entity\" prop.",
"hash": "dd9a85ea740742d620e864796f67c5bff834486d"
},
{
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressSelection.vue",
"line": 191,
"column": 17,
"ruleId": "vue/no-mutating-props",
"message": "Unexpected mutation of \"entity\" prop.",
"hash": "e3e59960d0d50709a57b336f66b586710b774892"
},
{
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressSelection.vue",
"line": 192,
"column": 17,
"ruleId": "vue/no-mutating-props",
"message": "Unexpected mutation of \"entity\" prop.",
"hash": "fe11b0e54396511e7b3b08615a78d22fc27e2fad"
},
{
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressSelection.vue",
"line": 222,
"column": 13,
"ruleId": "vue/no-mutating-props",
"message": "Unexpected mutation of \"entity\" prop.",
"hash": "63c14c2150c33ec701bc4a0ff94efde69537d490"
"hash": "740ea5d793c7a34c9f352d8b333f3aa04cc80ee8"
},
{
"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,
"column": 37,
"ruleId": "vue/no-mutating-props",
"message": "Unexpected mutation of \"entity\" prop.",
"hash": "0ec402e43cb08bf129e0737c0d2c4f6d0c7af8bd"
},
{
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressSelection.vue",
"line": 196,
"column": 41,
"ruleId": "vue/no-mutating-props",
"message": "Unexpected mutation of \"entity\" prop.",
"hash": "ec178d33e067aac892e015002afb6f3a2ff98762"
},
{
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressSelection.vue",
"line": 214,
"column": 17,
"ruleId": "vue/no-mutating-props",
"message": "Unexpected mutation of \"entity\" prop.",
"hash": "c0f4e5454e672b6064eb9cf6c235c6810f7bfa80"
},
{
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressSelection.vue",
"line": 215,
"column": 17,
"ruleId": "vue/no-mutating-props",
"message": "Unexpected mutation of \"entity\" prop.",
"hash": "e3dd840d2474f9865a45822872bf9ecfb15961d7"
},
{
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressSelection.vue",
"line": 216,
"column": 17,
"ruleId": "vue/no-mutating-props",
"message": "Unexpected mutation of \"entity\" prop.",
"hash": "a32a60382b145cc7a4a7ebe01ec435b8e3103320"
},
{
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressSelection.vue",
"line": 246,
"column": 13,
"ruleId": "vue/no-mutating-props",
"message": "Unexpected mutation of \"entity\" prop.",
"hash": "082447e5c731012f3acc282943502775dfd24797"
},
{
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
"line": 96,
"line": 118,
"column": 20,
"ruleId": "vue/no-mutating-props",
"message": "Unexpected mutation of \"entity\" prop.",
"hash": "d2a9fdaeef0e2810f480022d4c6f99e4f76a818e"
"hash": "d4fba4fe09af3c0937c0dd164928c8930c1591b5"
},
{
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
"line": 96,
"line": 118,
"column": 20,
"ruleId": "vue/no-side-effects-in-computed-properties",
"message": "Unexpected side effect in \"cities\" computed property.",
"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"
"hash": "1113a114d5aaf9f32f442916d25458541c5af35c"
},
{
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
"line": 124,
"column": 13,
"column": 17,
"ruleId": "vue/no-mutating-props",
"message": "Unexpected mutation of \"entity\" prop.",
"hash": "281f918da00635079501418b1e6b2c05b62eb4a7"
"hash": "fa56a7c93583f0a9d0c2ecac10228c4f4fc1bc3a"
},
{
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
"line": 125,
"column": 13,
"line": 132,
"column": 17,
"ruleId": "vue/no-mutating-props",
"message": "Unexpected mutation of \"entity\" prop.",
"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"
"hash": "9fe87937ea67d1dae95fb3d44d4be0da2eba0905"
},
{
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
@@ -1441,115 +1241,139 @@
},
{
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
"line": 149,
"column": 17,
"ruleId": "vue/no-mutating-props",
"message": "Unexpected mutation of \"entity\" prop.",
"hash": "1e7b1ad55866f708baaca72dfa4ff26d6f8e5d21"
},
{
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
"line": 152,
"line": 148,
"column": 13,
"ruleId": "vue/no-mutating-props",
"message": "Unexpected mutation of \"entity\" prop.",
"hash": "84779331536ffceec8d4a8c5ca4307310b882549"
"hash": "ab4f478fbfbc954b8dff75176dcd432f9ff28cfc"
},
{
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
"line": 161,
"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,
"column": 13,
"ruleId": "vue/no-mutating-props",
"message": "Unexpected mutation of \"entity\" prop.",
"hash": "0789999841be671a4d8ab080d6fdb679f843eb52"
"hash": "8aa37d2d4f011773e68838a2c88017875de563b5"
},
{
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
"line": 170,
"column": 51,
"ruleId": "@typescript-eslint/no-unused-vars",
"message": "'reject' is defined but never used.",
"hash": "bbb17afa114f016e2058d90aa32d2a625804f0d1"
"line": 168,
"column": 13,
"ruleId": "vue/no-mutating-props",
"message": "Unexpected mutation of \"entity\" prop.",
"hash": "a4827a357e52a51fa9262319114d81a130296acf"
},
{
"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"
},
{
"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": "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"
"hash": "5d1f97e4d7d9f47399d312e8b9f95ef9e3843b8c"
},
{
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
"line": 213,
"column": 17,
"column": 37,
"ruleId": "vue/no-mutating-props",
"message": "Unexpected mutation of \"entity\" prop.",
"hash": "c399a43fa797a8ce61c9d96a644a39cc84a387b7"
"hash": "c1df874f790ef0c036bf58ae8a8db1ee173685d4"
},
{
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
"line": 245,
"line": 232,
"column": 17,
"ruleId": "vue/no-mutating-props",
"message": "Unexpected mutation of \"entity\" prop.",
"hash": "476e6588a28ac9382e8b9d2e63a8babecd23bad8"
},
{
"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,
"column": 13,
"ruleId": "vue/no-mutating-props",
"message": "Unexpected mutation of \"entity\" prop.",
"hash": "04337a07944caaa4819cfebcf29e1a7cbfdf248b"
"hash": "2700f258396516a2fe971618fafbcdf72cdda3ab"
},
{
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CountrySelection.vue",
"line": 76,
"line": 94,
"column": 13,
"ruleId": "vue/no-mutating-props",
"message": "Unexpected mutation of \"entity\" prop.",
"hash": "373a2e31f110d138c66d77f1faf5dc61545c55af"
"hash": "4be1b0592efa775092a91a1d744e16ce98bd216e"
},
{
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CountrySelection.vue",
"line": 81,
"line": 99,
"column": 13,
"ruleId": "vue/no-mutating-props",
"message": "Unexpected mutation of \"entity\" prop.",
"hash": "421eb6a63224b4b1d81b216677a710c5c99ddee3"
"hash": "19b54b6d76c30249d520a296f826eda9d6eb0668"
},
{
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/DatePane.vue",
@@ -1569,19 +1393,19 @@
},
{
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/EditPane.vue",
"line": 155,
"line": 169,
"column": 17,
"ruleId": "vue/no-mutating-props",
"message": "Unexpected mutation of \"entity\" prop.",
"hash": "b3a822914fcb5e2fcf28efc331a45b9205002eeb"
"hash": "dcb7b34098062760ddbb849655a5bb3ca65c36d3"
},
{
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/EditPane.vue",
"line": 164,
"line": 178,
"column": 17,
"ruleId": "vue/no-mutating-props",
"message": "Unexpected mutation of \"entity\" prop.",
"hash": "72c7d850f6cdeaf65b373a33234222f9766ee30b"
"hash": "86b3ecf201025cac36878c5e4bf8850fb9d58cb5"
},
{
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/index.js",
@@ -1631,14 +1455,6 @@
"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,
@@ -1727,14 +1543,6 @@
"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,
@@ -1767,14 +1575,6 @@
"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,
@@ -1815,22 +1615,6 @@
"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,
@@ -1847,38 +1631,6 @@
"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,
@@ -1887,22 +1639,6 @@
"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,
@@ -1918,45 +1654,5 @@
"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
View File

@@ -18,6 +18,9 @@ migrations/*
templates/*
translations/*
# we allow developers to add customization on their installation, without commiting it
config/packages/dev/*
###> symfony/framework-bundle ###
/.env.local
/.env.local.php
@@ -30,7 +33,7 @@ translations/*
###> phpunit/phpunit ###
/phpunit.xml
.phpunit.result.cache
/.phpunit.cache/
###< phpunit/phpunit ###
/.php-cs-fixer.cache

View File

@@ -27,11 +27,11 @@ Chill is a comprehensive web application built as a set of Symfony bundles. It i
## Project 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.
Note: This is a project that's existed for a long time, and throughout the years we've used multiple structures inside each bundle. When having the choice, the developers should choose the new structure.
The project follows a standard Symfony bundle structure:
- `/src/Bundle/`: Contains all the Chill bundles. The code is either at the root of the bundle directory, or within a `src/` directory (preferred). See psr4 mapping at the root's `composer.json`.
- each bundle 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).
- each bundle comes with its own tests, either in the `Tests` directory (when the code is directly within the bundle directory (for instance `src/Bundle/ChillMainBundle/Tests`, `src/Bundle/ChillPersonBundle/Tests`)), or inside the `tests` directory, alongside the `src/` sub-directory (example: `src/Bundle/ChillWopiBundle/tests`) (this is the preferred way).
- `/docs/`: Contains project documentation
Each bundle typically has the following structure:
@@ -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 fill a "Command", and a "CommandHandler" handle this command. They are savec in the `src/Bundle/ChillTicketBundle/src/Action` directory.
The ticket bundle is developed using a kind of "Command" pattern. The controller fills a "Command," and a "CommandHandler" handles this command. They are saved in the `src/Bundle/ChillTicketBundle/src/Action` directory.
## Development Guidelines
### Building and Configuration Instructions
All the command should be run through the `symfony` command, which will configure the required variables.
All the commands should be run through the `symfony` command, which will configure the required variables.
For assets, we must ensure that we use node at version `^20.0.0`. This is done using `nvm use 20`.
@@ -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
```
5. **Set Up the Database**:
6. **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
```
6. **Build Assets**:
7. **Build Assets**:
```bash
nvm use 20
yarn run encore dev
```
7. **Start the Development Server**:
8. **Start the Development Server**:
```bash
symfony server:start -d
```
#### Docker Setup
The project includes Docker configuration for easier development:
The project includes a Docker configuration for easier development:
1. **Start Docker Services**:
```bash
@@ -153,9 +153,9 @@ Key configuration files:
Each time a doctrine entity is created, we generate migration to adapt the database.
The migration are 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, do not forget to quote the `\` (`\` must become `\\` in your command).
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 you that it is ok):
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`;
@@ -183,7 +183,7 @@ Once created the, comment's classes should be removed and a description of the c
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 database, but usually possible in services.
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.
@@ -198,9 +198,9 @@ The project uses PHPUnit for testing. Each bundle has its own test suite, and th
For creating mock, we prefer using prophecy (library phpspec/prophecy).
##### Useful helpers and tips that avoid create a mock
##### Useful helpers and tips that avoid creating a mock
Some notable implementations that are tests helper, and avoid to create 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);
@@ -297,7 +297,7 @@ class TicketTest extends TestCase
#### Test Database
For tests that require a database, the project uses postgresql database filled by 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 a postgresql database filled with fixtures (usage of doctrine-fixtures). You can configure a different database for testing in the `.env.test` file.
### Code Quality Tools

View File

@@ -6,6 +6,48 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html),
and is generated by [Changie](https://github.com/miniscruff/changie).
## 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

View File

@@ -8,7 +8,7 @@
"social worker"
],
"require": {
"php": "^8.2",
"php": "^8.3",
"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": "^2.13.0",
"doctrine/orm": "^3.5.2",
"erusev/parsedown": "^1.7",
"knplabs/knp-menu-bundle": "^3.0",
"knplabs/knp-time-bundle": "^1.12",
"knplabs/knp-time-bundle": "^2.0",
"knpuniversity/oauth2-client-bundle": "^2.10",
"league/csv": "^9.7.1",
"lexik/jwt-authentication-bundle": "^2.16",
@@ -32,54 +32,53 @@
"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/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/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/monolog-bundle": "^3.5",
"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/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.2",
"symfony/twig-bundle": "^7.2",
"symfony/ux-translator": "^2.22",
"symfony/validator": "^5.4",
"symfony/webpack-encore-bundle": "^1.11",
"symfony/workflow": "^5.4",
"symfony/yaml": "^5.4",
"symfony/validator": "^7.2",
"symfony/webpack-encore-bundle": "^2.0",
"symfony/workflow": "^7.2",
"symfony/yaml": "^7.2",
"thenetworg/oauth2-azure": "^2.0",
"twig/extra-bundle": "^3.0",
"twig/intl-extra": "^3.0",
@@ -101,16 +100,15 @@
"phpstan/phpstan-strict-rules": "^1.0",
"phpunit/phpunit": "^10.5.24",
"rector/rector": "^1.1.0",
"symfony/amqp-messenger": "^5.4.45",
"symfony/debug-bundle": "^5.4",
"symfony/dotenv": "^5.4",
"symfony/debug-bundle": "^7.2",
"symfony/dotenv": "^7.2",
"symfony/flex": "^2.4",
"symfony/maker-bundle": "^1.20",
"symfony/phpunit-bridge": "^7.1",
"symfony/runtime": "^5.4",
"symfony/stopwatch": "^5.4",
"symfony/var-dumper": "^5.4",
"symfony/web-profiler-bundle": "^5.4"
"symfony/runtime": "^7.2",
"symfony/stopwatch": "^7.2",
"symfony/var-dumper": "^7.2",
"symfony/web-profiler-bundle": "^7.2"
},
"conflict": {
"symfony/symfony": "*"

View File

@@ -14,7 +14,6 @@ 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],

11
config/packages/csrf.yaml Normal file
View File

@@ -0,0 +1,11 @@
# Enable stateless CSRF protection for forms and logins/logouts
framework:
form:
csrf_protection:
token_id: submit
csrf_protection:
stateless_token_ids:
- submit
- authenticate
- logout

View File

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

View File

@@ -4,6 +4,16 @@ 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:

View File

@@ -1,7 +1,5 @@
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

View File

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

View File

@@ -0,0 +1,3 @@
framework:
property_info:
enabled: true

View File

@@ -1,5 +1,4 @@
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'
@@ -28,16 +27,13 @@ security:
pattern: ^/wopi
provider: chill_chain_provider
stateless: true
guard:
authenticators:
- lexik_jwt_authentication.jwt_token_authenticator
jwt: ~
dav:
pattern: ^/dav
provider: chill_chain_provider
stateless: true
guard:
authenticators:
- Chill\DocStoreBundle\Security\Guard\JWTOnDavUrlAuthenticator
custom_authenticator:
- Chill\DocStoreBundle\Security\Authenticator\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:
@@ -63,7 +59,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: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/(login|logout), roles: PUBLIC_ACCESS }
- { path: ^/public, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/wopi, roles: IS_AUTHENTICATED_FULLY }
# access for homepage, the homepage redirect admin to admin section

View File

@@ -1,3 +0,0 @@
sensio_framework_extra:
router:
annotations: false

View File

@@ -7,7 +7,8 @@ framework:
- Chill\PersonBundle\Entity\AccompanyingPeriod\AccompanyingPeriodWorkEvaluationDocument
- Chill\PersonBundle\Entity\AccompanyingPeriod\AccompanyingPeriodWork
- Chill\DocStoreBundle\Entity\AccompanyingCourseDocument
label:
label: Suivi
translated_labels:
fr: 'Suivi'
support_strategy: Chill\MainBundle\Workflow\RelatedEntityWorkflowSupportsStrategy
marking_store:
@@ -16,11 +17,13 @@ framework:
places:
initial:
metadata:
label:
label: Étape initiale
translated_labels:
fr: Étape initiale
attenteModification:
metadata:
label:
label: En attente de modification du document
translated_labels:
fr: En attente de modification du document
validationFilterInputLabels:
forward: {fr: Modification effectuée}
@@ -28,7 +31,8 @@ framework:
neutral: {fr: Autre}
attenteMiseEnForme:
metadata:
label:
label: En attente de mise en forme
translated_labels:
fr: En attente de mise en forme
validationFilterInputLabels:
forward: {fr: Mise en forme terminée}
@@ -36,7 +40,8 @@ framework:
neutral: {fr: Autre}
attenteVisa:
metadata:
label:
label: En attente de visa
translated_labels:
fr: En attente de visa
validationFilterInputLabels:
forward: {fr: Visa accordé}
@@ -47,7 +52,8 @@ framework:
isSignature: ['user', 'person']
onSignatureCompleted:
transitionName: signatureApplied
label:
label: En attente de signature
translated_labels:
fr: En attente de signature
validationFilterInputLabels:
forward: {fr: Signature accordée}
@@ -55,7 +61,8 @@ framework:
neutral: {fr: Autre}
postSignature:
metadata:
label:
label: Signatures traitées
translated_labels:
fr: Signatures traitées
validationFilterInputLabels:
forward: {fr: Poursuite du traitement}
@@ -63,7 +70,8 @@ framework:
neutral: {fr: Autre}
attenteTraitement:
metadata:
label:
label: En attente de traitement
translated_labels:
fr: En attente de traitement
validationFilterInputLabels:
forward: {fr: Traitement terminé favorablement}
@@ -71,7 +79,8 @@ framework:
neutral: {fr: Autre}
attenteEnvoi:
metadata:
label:
label: En attente d'envoi
translated_labels:
fr: En attente d'envoi
validationFilterInputLabels:
forward: {fr: Document envoyé}
@@ -79,7 +88,8 @@ framework:
neutral: {fr: Autre}
attenteValidationMiseEnForme:
metadata:
label:
label: En attente de validation de la mise en forme
translated_labels:
fr: En attente de validation de la mise en forme
validationFilterInputLabels:
forward: {fr: Validation de la mise en forme}
@@ -89,7 +99,8 @@ framework:
metadata:
isSentExternal: true
onExternalView: clotureApresLectureEnvoiExterne
label:
label: En attente d'ouverture par un destinataire externe
translated_labels:
fr: En attente d'ouverture par un destinataire externe
validationFilterInputLabels:
forward: {fr: Document reçu par un destinataire externe}
@@ -99,13 +110,15 @@ framework:
metadata:
isFinal: true
isFinalPositive: false
label:
label: Annulé
translated_labels:
fr: Annulé
final:
metadata:
isFinal: true
isFinalPositive: true
label:
label: Finalisé
translated_labels:
fr: Finalisé
transitions:
# transition qui avancent
@@ -114,7 +127,8 @@ framework:
- initial
to: attenteModification
metadata:
label:
label: Demande de modification du document
translated_labels:
fr: Demande de modification du document
isForward: true
demandeMiseEnForme:
@@ -123,7 +137,8 @@ framework:
- attenteModification
to: attenteMiseEnForme
metadata:
label:
label: Demande de mise en forme
translated_labels:
fr: Demande de mise en forme
isForward: true
demandeValidationMiseEnForme:
@@ -131,7 +146,8 @@ framework:
- attenteMiseEnForme
to: attenteValidationMiseEnForme
metadata:
label:
label: Demande de validation de la mise en forme
translated_labels:
fr: Demande de validation de la mise en forme
isForward: true
demandeVisa:
@@ -144,7 +160,8 @@ framework:
- attenteTraitement
to: attenteVisa
metadata:
label:
label: Demande de visa
translated_labels:
fr: Demande de visa
isForward: true
demandeSignature:
@@ -157,14 +174,18 @@ framework:
- attenteTraitement
to: attenteSignature
metadata:
label: {fr: Demande de signature}
label: Demande de signature
translated_labels:
fr: Demande de signature
isForward: true
signatureApplied:
from:
- attenteSignature
to: postSignature
metadata:
label: {fr: Signatures appliquées}
label: Signatures appliquées
translated_labels:
fr: Signatures appliquées
isForward: true
transitionGuard: 'system' # can be 'system+only-dest' or 'only-dest' (only-dest is default)
demandeTraitement:
@@ -177,7 +198,9 @@ framework:
- postSignature
to: attenteTraitement
metadata:
label: {fr: Demande de traitement}
label: Demande de traitement
translated_labels:
fr: Demande de traitement
isForward: true
demandeEnvoi:
from:
@@ -190,7 +213,9 @@ framework:
- attenteTraitement
to: attenteEnvoi
metadata:
label: {fr: Demande d'envoi}
label: Demande d'envoi
translated_labels:
fr: Demande d'envoi
isForward: true
demandeEnvoiExterne:
from:
@@ -203,7 +228,9 @@ framework:
- attenteTraitement
to: attenteReceptionExternal
metadata:
label: {fr: Envoi sécurisé par courrier électronique}
label: Envoi sécurisé par courrier électronique
translated_labels:
fr: Envoi sécurisé par courrier électronique
isForward: true
clotureApresLectureEnvoiExterne:
from:
@@ -213,7 +240,9 @@ framework:
metadata:
transitionGuard: system
isForward: true
label: {fr: Consultation de l'envoi sécurisé}
label: Consultation de l'envoi sécurisé
translated_labels:
fr: Consultation de l'envoi sécurisé
annulation:
from:
- initial
@@ -227,7 +256,9 @@ framework:
- attenteEnvoi
to: annule
metadata:
label: {fr: Annulation}
label: Annulation
translated_labels:
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
@@ -237,27 +268,35 @@ framework:
- attenteValidationMiseEnForme
to: attenteMiseEnForme
metadata:
label: {fr: Demande de mise en forme supplémentaire}
label: Demande de mise en forme supplémentaire
translated_labels:
fr: Demande de mise en forme supplémentaire
demandeVisaSupplementaire:
from:
- attenteVisa
to: attenteVisa
metadata:
label: {fr: Demande de visa supplémentaire}
label: Demande de visa supplémentaire
translated_labels:
fr: Demande de visa supplémentaire
isForward: true
demandeSignatureSupplementaire:
from:
- postSignature
to: attenteSignature
metadata:
label: {fr: Demande de signature supplémentaire}
label: Demande de signature supplémentaire
translated_labels:
fr: Demande de signature supplémentaire
isForward: true
demandeTraitementSupplementaire:
from:
- attenteTraitement
to: attenteTraitement
metadata:
label: {fr: Demande de traitement supplémentaire}
label: Demande de traitement supplémentaire
translated_labels:
fr: Demande de traitement supplémentaire
# transitions qui renvoient vers une étape précédente
refusEtModificationDocument:
from:
@@ -267,7 +306,8 @@ framework:
- attenteEnvoi
to: attenteModification
metadata:
label:
label: Refus et demande de modification du document
translated_labels:
fr: Refus et demande de modification du document
isForward: false
refusEtDemandeMiseEnForme:
@@ -277,7 +317,9 @@ framework:
- attenteEnvoi
to: attenteMiseEnForme
metadata:
label: {fr: Refus et demande de mise en forme}
label: Refus et demande de mise en forme
translated_labels:
fr: Refus et demande de mise en forme
isForward: false
refusEtDemandeVisa:
from:
@@ -285,21 +327,27 @@ framework:
- attenteEnvoi
to: attenteVisa
metadata:
label: {fr: Refus et demande de visa}
label: Refus et demande de visa
translated_labels:
fr: Refus et demande de visa
isForward: false
refusEtDemandeSignature:
from:
- attenteEnvoi
to: attenteSignature
metadata:
label: {fr: Refus et demande de signature}
label: Refus et demande de signature
translated_labels:
fr: Refus et demande de signature
isForward: false
refusEtDemandeTraitement:
from:
- attenteEnvoi
to: attenteTraitement
metadata:
label: {fr: Refus et demande de traitement}
label: Refus et demande de traitement
translated_labels:
fr: Refus et demande de traitement
isForward: false
# transition vers final
initialToFinal:
@@ -307,7 +355,9 @@ framework:
- initial
to: final
metadata:
label: {fr: Clotûre immédiate et cloture positive}
label: Clotûre immédiate et cloture positive
translated_labels:
fr: Clotûre immédiate et cloture positive
isForward: true
attenteMiseEnFormeToFinal:
from:
@@ -315,33 +365,43 @@ framework:
- attenteValidationMiseEnForme
to: final
metadata:
label: {fr: Mise en forme terminée et cloture positive}
label: Mise en forme terminée et cloture positive
translated_labels:
fr: Mise en forme terminée et cloture positive
isForward: true
attenteVisaToFinal:
from:
- attenteVisa
to: final
metadata:
label: {fr: Accorde le visa et cloture positive}
label: Accorde le visa et cloture positive
translated_labels:
fr: Accorde le visa et cloture positive
isForward: true
postSignatureToFinal:
from:
- postSignature
to: final
metadata:
label: {fr: Cloture positive}
label: Cloture positive
translated_labels:
fr: Cloture positive
isForward: true
attenteTraitementToFinal:
from:
- attenteTraitement
to: final
metadata:
label: {fr: Traitement terminé et cloture positive}
label: Traitement terminé et cloture positive
translated_labels:
fr: Traitement terminé et cloture positive
isForward: true
attenteEnvoiToFinal:
from:
- attenteEnvoi
to: final
metadata:
label: {fr: Envoyé et cloture positive}
label: Envoyé et cloture positive
translated_labels:
fr: Envoyé et cloture positive
isForward: true

View File

@@ -1,3 +0,0 @@
kernel:
resource: ../../src/app/Kernel.php
type: annotation

View File

@@ -0,0 +1,3 @@
_security_logout:
resource: security.route_loader.logout
type: service

View File

@@ -6,8 +6,15 @@
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 }

View File

@@ -14,7 +14,6 @@ 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;
@@ -22,6 +21,7 @@ use Symfony\Component\Validator\Context\ExecutionContextInterface;
class BirthdateFilter implements ExportElementValidatedInterface, FilterInterface
{
use \Chill\MainBundle\Export\ExportDataNormalizerTrait;
// add specific role for this filter
public function addRole(): ?string
{
@@ -30,7 +30,7 @@ class BirthdateFilter implements ExportElementValidatedInterface, FilterInterfac
}
// here, we alter the query created by Export
public function alterQuery(\Doctrine\ORM\QueryBuilder $qb, $data, \Chill\MainBundle\Export\ExportGenerationContext $exportGenerationContext): void
public function alterQuery(\Doctrine\ORM\QueryBuilder $qb, $data, ExportGenerationContext $exportGenerationContext): void
{
$where = $qb->getDQLPart('where');
// we create the clause here
@@ -76,21 +76,25 @@ 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
@@ -98,7 +102,7 @@ class BirthdateFilter implements ExportElementValidatedInterface, FilterInterfac
public function describeAction($data, ExportGenerationContext $context): string|\Symfony\Contracts\Translation\TranslatableInterface|array
{
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'),
], ];
@@ -120,13 +124,13 @@ class BirthdateFilter implements ExportElementValidatedInterface, FilterInterfac
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();
}
@@ -135,7 +139,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();
}
}

View File

@@ -32,7 +32,7 @@ class CountPerson implements ExportInterface
$this->entityManager = $em;
}
public function buildForm(FormBuilderInterface $builder)
public function buildForm(FormBuilderInterface $builder): void
{
// this export does not add any form
}

View File

@@ -18,7 +18,7 @@ class example extends \Symfony\Bundle\FrameworkBundle\Controller\AbstractControl
public function __construct(private readonly \Doctrine\Persistence\ManagerRegistry $managerRegistry)
{
}
public function yourAction()
public function yourAction(): \Symfony\Component\HttpFoundation\Response
{
$em = $this->managerRegistry->getManager();
// first, get the number of total item are available

View File

@@ -28,7 +28,7 @@ class ConsultationController extends \Symfony\Bundle\FrameworkBundle\Controller\
*
* @return \Symfony\Component\HttpFoundation\Response
*/
public function listAction($id)
public function listAction($id): \Symfony\Component\HttpFoundation\Response
{
/** @var \Chill\PersonBundle\Entity\Person $person */
$person = $this->get('chill.person.repository.person')

View File

@@ -31,7 +31,7 @@ class ChillMainConfiguration implements ConfigurationInterface
$this->setWidgetFactories($widgetFactories);
}
public function getConfigTreeBuilder()
public function getConfigTreeBuilder(): \Symfony\Component\Config\Definition\Builder\TreeBuilder
{
$treeBuilder = new TreeBuilder('chill_main');
$rootNode = $treeBuilder->getRootNode();

View File

@@ -27,12 +27,12 @@ class ChillMainExtension extends Extension implements Widget\HasWidgetFactoriesE
*/
protected $widgetFactories = [];
public function addWidgetFactory(WidgetFactoryInterface $factory)
public function addWidgetFactory(WidgetFactoryInterface $factory): void
{
$this->widgetFactories[] = $factory;
}
public function getConfiguration(array $config, ContainerBuilder $container)
public function getConfiguration(array $config, ContainerBuilder $container): ?\Symfony\Component\Config\Definition\ConfigurationInterface
{
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)
public function load(array $configs, ContainerBuilder $container): void
{
// configuration for main bundle
$configuration = $this->getConfiguration($configs, $container);

View File

@@ -25,7 +25,7 @@ class ChillPersonAddAPersonListWidgetFactory extends AbstractWidgetFactory
* see http://symfony.com/doc/current/components/config/definition.html
*
*/
public function configureOptions($place, NodeBuilder $node)
public function configureOptions($place, NodeBuilder $node): void
{
$node->booleanNode('only_active')
->defaultTrue()

View File

@@ -124,7 +124,7 @@ class ChillPersonAddAPersonWidget implements WidgetInterface
/**
* @return UserInterface
*/
private function getUser()
private function getUser(): void
{
// return a user
}

View File

@@ -22,7 +22,7 @@ use Symfony\Component\HttpKernel\DependencyInjection\Extension;
*/
class ChillPersonExtension extends Extension implements PrependExtensionInterface
{
public function load(array $configs, ContainerBuilder $container)
public function load(array $configs, ContainerBuilder $container): void
{
// ...
}
@@ -32,7 +32,7 @@ class ChillPersonExtension extends Extension implements PrependExtensionInterfac
*
* @param \Chill\PersonBundle\DependencyInjection\containerBuilder $container
*/
public function prepend(ContainerBuilder $container)
public function prepend(ContainerBuilder $container): void
{
$container->prependExtensionConfig('chill_main', [
'widgets' => [

View File

@@ -11,6 +11,7 @@
"@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",

View File

@@ -1,84 +1,34 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- https://phpunit.readthedocs.io/en/latest/configuration.html -->
<phpunit
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="vendor/phpunit/phpunit/phpunit.xsd"
backupGlobals="false"
colors="true"
bootstrap="tests/bootstrap.php"
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="vendor/phpunit/phpunit/phpunit.xsd"
backupGlobals="false"
colors="true"
failOnNotice="true"
failOnWarning="true"
bootstrap="tests/bootstrap.php"
cacheDirectory=".phpunit.cache"
>
<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&amp;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>
<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>
</testsuite>
-->
<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 -->
<!--
</testsuites>
<source ignoreSuppressionOfDeprecations="true" restrictNotices="true" restrictWarnings="true">
<include>
<directory>src</directory>
</include>
</source>
<extensions>
<extension class="Symfony\Component\Panther\ServerExtension" />
</extensions>
-->
</phpunit>

View File

@@ -13,23 +13,24 @@ 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 static function (RectorConfig $rectorConfig): void {
$rectorConfig->paths([
__DIR__ . '/docs',
__DIR__ . '/src',
__DIR__ . '/rector.php',
__DIR__.'/docs',
__DIR__.'/src',
__DIR__.'/rector.php',
]);
$rectorConfig->skip([
\Rector\Php55\Rector\String_\StringClassNameToClassConstantRector::class => __DIR__ . 'src/Bundle/ChillMainBundle/Service/Notifier/LegacyOvhCloudFactory.php'
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->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');
// $rectorConfig->cacheClass(\Rector\Caching\ValueObject\Storage\FileCacheStorage::class);
// $rectorConfig->cacheDirectory(__DIR__ . '/.cache/rector');
// register a single rule
$rectorConfig->rule(InlineConstructorDefaultToPropertyRector::class);
@@ -37,54 +38,72 @@ return static function (RectorConfig $rectorConfig): void {
$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();
// Add return types to controller methods
$rectorConfig->rule(Rector\TypeDeclaration\Rector\ClassMethod\AddVoidReturnTypeWhereNoReturnRector::class);
$rectorConfig->rule(Rector\TypeDeclaration\Rector\ClassMethod\ReturnTypeFromReturnNewRector::class);
$rectorConfig->rule(Rector\TypeDeclaration\Rector\ClassMethod\ReturnTypeFromStrictTypedCallRector::class);
$rectorConfig->rule(Rector\TypeDeclaration\Rector\ClassMethod\ReturnTypeFromStrictTypedPropertyRector::class);
//define sets of rules
// 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\Doctrine\Set\DoctrineSetList::DOCTRINE_CODE_QUALITY,
\Rector\PHPUnit\Set\PHPUnitSetList::PHPUNIT_90,
// LevelSetList::UP_TO_PHP_82,
// SymfonySetList::SYMFONY_60,
// SymfonySetList::SYMFONY_61,
// SymfonySetList::SYMFONY_62,
// SymfonySetList::SYMFONY_63,
// SymfonySetList::SYMFONY_64,
// SymfonySetList::SYMFONY_70,
// SymfonySetList::SYMFONY_71,
Rector\Doctrine\Set\DoctrineSetList::DOCTRINE_ORM_29,
Rector\Doctrine\Set\DoctrineSetList::DOCTRINE_DBAL_30,
Rector\Doctrine\Set\DoctrineSetList::DOCTRINE_CODE_QUALITY,
Rector\Doctrine\Set\DoctrineSetList::ANNOTATIONS_TO_ATTRIBUTES,
]);
$rectorConfig->ruleWithConfiguration(\Rector\Php80\Rector\Class_\AnnotationToAttributeRector::class, [
new \Rector\Php80\ValueObject\AnnotationToAttribute('Symfony\Component\Serializer\Annotation\Context'),
$rectorConfig->ruleWithConfiguration(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
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,
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'),
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'),
]);
};

View File

@@ -74,8 +74,8 @@ final class ActivityController extends AbstractController
/**
* Deletes a Activity entity.
*/
#[\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)
#[\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|\Symfony\Component\HttpFoundation\Response
{
$view = null;
@@ -104,7 +104,7 @@ final class ActivityController extends AbstractController
if ($form->isSubmitted() && $form->isValid()) {
$this->logger->notice('An activity has been removed', [
'by_user' => $this->getUser()->getUsername(),
'by_user' => $this->getUser()->getUserIdentifier(),
'activity_id' => $activity->getId(),
'person_id' => $activity->getPerson() ? $activity->getPerson()->getId() : null,
'comment' => $activity->getComment()->getComment(),
@@ -134,7 +134,7 @@ final class ActivityController extends AbstractController
return $this->render($view, [
'activity' => $activity,
'delete_form' => $form->createView(),
'delete_form' => $form,
'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\Annotation\Route(path: '/{_locale}/activity/{id}/edit', name: 'chill_activity_activity_edit', methods: ['GET', 'POST', 'PUT'])]
#[\Symfony\Component\Routing\Attribute\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->createView(),
'delete_form' => $deleteForm->createView(),
'edit_form' => $form,
'delete_form' => $deleteForm,
'person' => $person,
'accompanyingCourse' => $accompanyingPeriod,
'activity_json' => $activity_array,
@@ -237,7 +237,7 @@ final class ActivityController extends AbstractController
/**
* Lists all Activity entities.
*/
#[\Symfony\Component\Routing\Annotation\Route(path: '/{_locale}/activity/', name: 'chill_activity_activity_list')]
#[\Symfony\Component\Routing\Attribute\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\Annotation\Route(path: '/{_locale}/activity/new', name: 'chill_activity_activity_new', methods: ['POST', 'GET'])]
#[\Symfony\Component\Routing\Attribute\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->get('activityData');
$activityData = $request->query->all('activityData');
}
if (
@@ -516,13 +516,13 @@ final class ActivityController extends AbstractController
'person' => $person,
'accompanyingCourse' => $accompanyingPeriod,
'entity' => $entity,
'form' => $form->createView(),
'form' => $form,
'activity_json' => $activity_array,
'default_location' => $defaultLocation,
]);
}
#[\Symfony\Component\Routing\Annotation\Route(path: '/{_locale}/activity/select-type', name: 'chill_activity_activity_select_type')]
#[\Symfony\Component\Routing\Attribute\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\Annotation\Route(path: '/{_locale}/activity/{id}/show', name: 'chill_activity_activity_show')]
#[\Symfony\Component\Routing\Attribute\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->createView(),
'delete_form' => $deleteForm,
]);
}

View File

@@ -27,8 +27,8 @@ class ActivityReasonCategoryController extends AbstractController
/**
* Creates a new ActivityReasonCategory entity.
*/
#[\Symfony\Component\Routing\Annotation\Route(path: '/{_locale}/admin/activityreasoncategory/create', name: 'chill_activity_activityreasoncategory_create', methods: ['POST'])]
public function createAction(Request $request)
#[\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
{
$entity = new ActivityReasonCategory();
$form = $this->createCreateForm($entity);
@@ -44,15 +44,15 @@ class ActivityReasonCategoryController extends AbstractController
return $this->render('@ChillActivity/ActivityReasonCategory/new.html.twig', [
'entity' => $entity,
'form' => $form->createView(),
'form' => $form,
]);
}
/**
* Lists all ActivityReasonCategory entities.
*/
#[\Symfony\Component\Routing\Annotation\Route(path: '/{_locale}/admin/activityreasoncategory/', name: 'chill_activity_activityreasoncategory')]
public function indexAction()
#[\Symfony\Component\Routing\Attribute\Route(path: '/{_locale}/admin/activityreasoncategory/', name: 'chill_activity_activityreasoncategory')]
public function indexAction(): \Symfony\Component\HttpFoundation\Response
{
$em = $this->managerRegistry->getManager();
@@ -66,23 +66,23 @@ class ActivityReasonCategoryController extends AbstractController
/**
* Displays a form to create a new ActivityReasonCategory entity.
*/
#[\Symfony\Component\Routing\Annotation\Route(path: '/{_locale}/admin/activityreasoncategory/new', name: 'chill_activity_activityreasoncategory_new')]
public function newAction()
#[\Symfony\Component\Routing\Attribute\Route(path: '/{_locale}/admin/activityreasoncategory/new', name: 'chill_activity_activityreasoncategory_new')]
public function newAction(): \Symfony\Component\HttpFoundation\Response
{
$entity = new ActivityReasonCategory();
$form = $this->createCreateForm($entity);
return $this->render('@ChillActivity/ActivityReasonCategory/new.html.twig', [
'entity' => $entity,
'form' => $form->createView(),
'form' => $form,
]);
}
/**
* Edits an existing ActivityReasonCategory entity.
*/
#[\Symfony\Component\Routing\Annotation\Route(path: '/{_locale}/admin/activityreasoncategory/{id}/update', name: 'chill_activity_activityreasoncategory_update')]
public function updateAction(Request $request, mixed $id)
#[\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
{
$em = $this->managerRegistry->getManager();
@@ -103,7 +103,7 @@ class ActivityReasonCategoryController extends AbstractController
return $this->render('@ChillActivity/ActivityReasonCategory/edit.html.twig', [
'entity' => $entity,
'edit_form' => $editForm->createView(),
'edit_form' => $editForm,
]);
}

View File

@@ -28,8 +28,8 @@ class ActivityReasonController extends AbstractController
/**
* Creates a new ActivityReason entity.
*/
#[\Symfony\Component\Routing\Annotation\Route(path: '/{_locale}/admin/activityreason/create', name: 'chill_activity_activityreason_create', methods: ['POST'])]
public function createAction(Request $request)
#[\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
{
$entity = new ActivityReason();
$form = $this->createCreateForm($entity);
@@ -45,15 +45,15 @@ class ActivityReasonController extends AbstractController
return $this->render('@ChillActivity/ActivityReason/new.html.twig', [
'entity' => $entity,
'form' => $form->createView(),
'form' => $form,
]);
}
/**
* Lists all ActivityReason entities.
*/
#[\Symfony\Component\Routing\Annotation\Route(path: '/{_locale}/admin/activityreason/', name: 'chill_activity_activityreason')]
public function indexAction()
#[\Symfony\Component\Routing\Attribute\Route(path: '/{_locale}/admin/activityreason/', name: 'chill_activity_activityreason')]
public function indexAction(): \Symfony\Component\HttpFoundation\Response
{
$em = $this->managerRegistry->getManager();
@@ -67,23 +67,23 @@ class ActivityReasonController extends AbstractController
/**
* Displays a form to create a new ActivityReason entity.
*/
#[\Symfony\Component\Routing\Annotation\Route(path: '/{_locale}/admin/activityreason/new', name: 'chill_activity_activityreason_new')]
public function newAction()
#[\Symfony\Component\Routing\Attribute\Route(path: '/{_locale}/admin/activityreason/new', name: 'chill_activity_activityreason_new')]
public function newAction(): \Symfony\Component\HttpFoundation\Response
{
$entity = new ActivityReason();
$form = $this->createCreateForm($entity);
return $this->render('@ChillActivity/ActivityReason/new.html.twig', [
'entity' => $entity,
'form' => $form->createView(),
'form' => $form,
]);
}
/**
* Edits an existing ActivityReason entity.
*/
#[\Symfony\Component\Routing\Annotation\Route(path: '/{_locale}/admin/activityreason/{id}/update', name: 'chill_activity_activityreason_update')]
public function updateAction(Request $request, mixed $id)
#[\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
{
$em = $this->managerRegistry->getManager();
@@ -104,7 +104,7 @@ class ActivityReasonController extends AbstractController
return $this->render('@ChillActivity/ActivityReason/edit.html.twig', [
'entity' => $entity,
'edit_form' => $editForm->createView(),
'edit_form' => $editForm,
]);
}

View File

@@ -18,15 +18,15 @@ use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
*/
class AdminController extends AbstractController
{
#[\Symfony\Component\Routing\Annotation\Route(path: '/{_locale}/admin/activity', name: 'chill_activity_admin_index')]
public function indexActivityAction()
#[\Symfony\Component\Routing\Attribute\Route(path: '/{_locale}/admin/activity', name: 'chill_activity_admin_index')]
public function indexActivityAction(): \Symfony\Component\HttpFoundation\Response
{
return $this->render('@ChillActivity/Admin/layout_activity.html.twig');
}
#[\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()
#[\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
{
return $this->redirectToRoute('chill_main_admin_central');
}

View File

@@ -27,8 +27,6 @@ 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)

View File

@@ -25,7 +25,7 @@ use Symfony\Component\HttpKernel\DependencyInjection\Extension;
*/
class ChillActivityExtension extends Extension implements PrependExtensionInterface
{
public function load(array $configs, ContainerBuilder $container)
public function load(array $configs, ContainerBuilder $container): void
{
$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)
public function prepend(ContainerBuilder $container): void
{
$this->prependRoutes($container);
$this->prependAuthorization($container);
$this->prependCruds($container);
}
public function prependAuthorization(ContainerBuilder $container)
public function prependAuthorization(ContainerBuilder $container): void
{
$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)
public function prependRoutes(ContainerBuilder $container): void
{
// add routes for custom bundle
$container->prependExtensionConfig('chill_main', [

View File

@@ -22,7 +22,7 @@ use function is_int;
*/
class Configuration implements ConfigurationInterface
{
public function getConfigTreeBuilder()
public function getConfigTreeBuilder(): \Symfony\Component\Config\Definition\Builder\TreeBuilder
{
$treeBuilder = new TreeBuilder('chill_activity');
$rootNode = $treeBuilder->getRootNode();

View File

@@ -40,7 +40,7 @@ class ActivityReason
*
* @return bool
*/
public function getActive()
public function getActive(): bool
{
return $this->active;
}
@@ -58,7 +58,7 @@ class ActivityReason
*
* @return int
*/
public function getId()
public function getId(): ?int
{
return $this->id;
}

View File

@@ -61,7 +61,7 @@ class ActivityReasonCategory implements \Stringable
*
* @return bool
*/
public function getActive()
public function getActive(): bool
{
return $this->active;
}
@@ -71,7 +71,7 @@ class ActivityReasonCategory implements \Stringable
*
* @return int
*/
public function getId()
public function getId(): ?int
{
return $this->id;
}

View File

@@ -188,7 +188,7 @@ class ActivityType
private int $userVisible = self::FIELD_REQUIRED;
#[Assert\Callback]
public function checkSocialActionsVisibility(ExecutionContextInterface $context, mixed $payload)
public function checkSocialActionsVisibility(ExecutionContextInterface $context, mixed $payload): void
{
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,11 +461,17 @@ class ActivityType
{
$property = $field.'Visible';
if (!property_exists($this, $property)) {
// Get the real class name (not the proxy)
$class = get_class($this);
if (str_contains($class, '__CG__')) {
$class = get_parent_class($this);
}
$realClass = $class;
if (!property_exists($realClass, $property)) {
throw new \InvalidArgumentException('Field "'.$field.'" not found');
}
/* @phpstan-ignore-next-line */
return self::FIELD_INVISIBLE !== $this->{$property};
}

View File

@@ -21,7 +21,7 @@ class ActivityEntityListener
{
public function __construct(private readonly EntityManagerInterface $em, private readonly AccompanyingPeriodWorkRepository $workRepository) {}
public function persistActionToCourse(Activity $activity)
public function persistActionToCourse(Activity $activity): void
{
if ($activity->getAccompanyingPeriod() instanceof AccompanyingPeriod) {
$period = $activity->getAccompanyingPeriod();

View File

@@ -53,7 +53,7 @@ final readonly class ByActivityTypeAggregator implements AggregatorInterface
public function normalizeFormData(array $formData): array
{
return ['after_date' => $formData['after_date']->normalize(), 'before_date' => $formData['before_date']->normalize()];
return ['after_date' => $formData['after_date']?->normalize(), 'before_date' => $formData['before_date']?->normalize()];
}
public function denormalizeFormData(array $formData, int $fromVersion): array

View File

@@ -42,7 +42,7 @@ class AvgActivityVisitDuration implements ExportInterface, GroupedExportInterfac
$this->filterStatsByCenters = $parameterBag->get('chill_main')['acl']['filter_stats_by_center'];
}
public function buildForm(FormBuilderInterface $builder)
public function buildForm(FormBuilderInterface $builder): void
{
// TODO: Implement buildForm() method.
}

View File

@@ -42,7 +42,7 @@ final readonly class CountHouseholdOnActivity implements ExportInterface, Groupe
$this->filterStatsByCenters = $parameterBag->get('chill_main')['acl']['filter_stats_by_center'];
}
public function buildForm(FormBuilderInterface $builder) {}
public function buildForm(FormBuilderInterface $builder): void {}
public function getNormalizationVersion(): int
{

View File

@@ -34,7 +34,7 @@ final readonly class ListActivity implements ListInterface, GroupedExportInterfa
private FilterListAccompanyingPeriodHelperInterface $filterListAccompanyingPeriodHelper,
) {}
public function buildForm(FormBuilderInterface $builder)
public function buildForm(FormBuilderInterface $builder): void
{
$this->helper->buildForm($builder);
}
@@ -154,7 +154,7 @@ final readonly class ListActivity implements ListInterface, GroupedExportInterfa
return ActivityStatsVoter::LISTS;
}
public function supportsModifiers()
public function supportsModifiers(): array
{
return array_merge(
$this->helper->supportsModifiers(),

View File

@@ -34,7 +34,7 @@ final readonly class CountHouseholdOnActivity implements ExportInterface, Groupe
$this->filterStatsByCenters = $parameterBag->get('chill_main')['acl']['filter_stats_by_center'];
}
public function buildForm(FormBuilderInterface $builder) {}
public function buildForm(FormBuilderInterface $builder): void {}
public function getNormalizationVersion(): int
{

View File

@@ -11,6 +11,7 @@ declare(strict_types=1);
namespace Chill\ActivityBundle\Export\Export\LinkedToPerson;
use Chill\ActivityBundle\Entity\Activity;
use Chill\ActivityBundle\Entity\ActivityReason;
use Chill\ActivityBundle\Export\Declarations;
use Chill\ActivityBundle\Repository\ActivityRepository;
@@ -59,7 +60,7 @@ class ListActivity implements ListInterface, GroupedExportInterface
$this->filterStatsByCenters = $parameterBag->get('chill_main')['acl']['filter_stats_by_center'];
}
public function buildForm(FormBuilderInterface $builder)
public function buildForm(FormBuilderInterface $builder): void
{
$builder->add('fields', ChoiceType::class, [
'multiple' => true,
@@ -214,7 +215,7 @@ class ListActivity implements ListInterface, GroupedExportInterface
$qb = $this->entityManager->createQueryBuilder();
$qb
->from('ChillActivityBundle:Activity', 'activity')
->from(Activity::class, 'activity')
->join('activity.person', 'person')
->join(
HouseholdMember::class,

View File

@@ -19,7 +19,7 @@ use Symfony\Component\OptionsResolver\OptionsResolver;
class ActivityReasonCategoryType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add('name', TranslatableStringFormType::class)
@@ -29,7 +29,7 @@ class ActivityReasonCategoryType extends AbstractType
/**
* @param OptionsResolverInterface $resolver
*/
public function configureOptions(OptionsResolver $resolver)
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'data_class' => \Chill\ActivityBundle\Entity\ActivityReasonCategory::class,
@@ -39,7 +39,7 @@ class ActivityReasonCategoryType extends AbstractType
/**
* @return string
*/
public function getBlockPrefix()
public function getBlockPrefix(): string
{
return 'chill_activitybundle_activityreasoncategory';
}

View File

@@ -21,7 +21,7 @@ use Symfony\Component\OptionsResolver\OptionsResolver;
class ActivityReasonType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add('name', TranslatableStringFormType::class)
@@ -29,7 +29,7 @@ class ActivityReasonType extends AbstractType
->add('category', TranslatableActivityReasonCategoryType::class);
}
public function configureOptions(OptionsResolver $resolver)
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'data_class' => ActivityReason::class,
@@ -39,7 +39,7 @@ class ActivityReasonType extends AbstractType
/**
* @return string
*/
public function getBlockPrefix()
public function getBlockPrefix(): string
{
return 'chill_activitybundle_activityreason';
}

View File

@@ -27,7 +27,7 @@ class ActivityTypeType extends AbstractType
{
public function __construct(private readonly TranslatableStringHelper $translatableStringHelper) {}
public function buildForm(FormBuilderInterface $builder, array $options)
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add('name', TranslatableStringFormType::class)
@@ -67,7 +67,7 @@ class ActivityTypeType extends AbstractType
->add('commentVisible', ActivityFieldPresence::class);
}
public function configureOptions(OptionsResolver $resolver)
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'data_class' => \Chill\ActivityBundle\Entity\ActivityType::class,

View File

@@ -18,7 +18,7 @@ use Symfony\Component\OptionsResolver\OptionsResolver;
class ActivityFieldPresence extends AbstractType
{
public function configureOptions(OptionsResolver $resolver)
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults(
[
@@ -31,7 +31,7 @@ class ActivityFieldPresence extends AbstractType
);
}
public function getParent()
public function getParent(): ?string
{
return ChoiceType::class;
}

View File

@@ -30,7 +30,7 @@ class PickActivityReasonType extends AbstractType
private readonly TranslatableStringHelperInterface $translatableStringHelper,
) {}
public function configureOptions(OptionsResolver $resolver)
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults(
[
@@ -49,12 +49,12 @@ class PickActivityReasonType extends AbstractType
);
}
public function getBlockPrefix()
public function getBlockPrefix(): string
{
return 'translatable_activity_reason';
}
public function getParent()
public function getParent(): ?string
{
return EntityType::class;
}

View File

@@ -25,7 +25,7 @@ class TranslatableActivityReasonCategoryType extends AbstractType
{
public function __construct(private readonly TranslatableStringHelperInterface $translatableStringHelper, private readonly TranslatorInterface $translator) {}
public function configureOptions(OptionsResolver $resolver)
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults(
[
@@ -36,7 +36,7 @@ class TranslatableActivityReasonCategoryType extends AbstractType
);
}
public function getParent()
public function getParent(): ?string
{
return EntityType::class;
}

View File

@@ -22,7 +22,7 @@ class TranslatableActivityType extends AbstractType
{
public function __construct(protected TranslatableStringHelperInterface $translatableStringHelper, protected ActivityTypeRepositoryInterface $activityTypeRepository) {}
public function configureOptions(OptionsResolver $resolver)
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults(
[
@@ -34,12 +34,12 @@ class TranslatableActivityType extends AbstractType
);
}
public function getBlockPrefix()
public function getBlockPrefix(): string
{
return 'translatable_activity_type';
}
public function getParent()
public function getParent(): ?string
{
return EntityType::class;
}

View File

@@ -16,7 +16,7 @@ use Chill\ActivityBundle\Security\Authorization\ActivityVoter;
use Chill\MainBundle\Routing\LocalMenuBuilderInterface;
use Chill\PersonBundle\Entity\AccompanyingPeriod;
use Knp\Menu\MenuItem;
use Symfony\Component\Security\Core\Security;
use Symfony\Bundle\SecurityBundle\Security;
use Symfony\Contracts\Translation\TranslatorInterface;
/**
@@ -30,7 +30,7 @@ class AccompanyingCourseMenuBuilder implements LocalMenuBuilderInterface
private readonly \Doctrine\Persistence\ManagerRegistry $managerRegistry,
) {}
public function buildMenu($menuId, MenuItem $menu, array $parameters)
public function buildMenu($menuId, MenuItem $menu, array $parameters): void
{
$period = $parameters['accompanyingCourse'];

View File

@@ -14,7 +14,7 @@ namespace Chill\ActivityBundle\Menu;
use Chill\ActivityBundle\Security\Authorization\ActivityVoter;
use Chill\MainBundle\Routing\LocalMenuBuilderInterface;
use Knp\Menu\MenuItem;
use Symfony\Component\Security\Core\Security;
use Symfony\Bundle\SecurityBundle\Security;
final readonly class AccompanyingCourseQuickMenuBuilder implements LocalMenuBuilderInterface
{
@@ -25,7 +25,7 @@ final readonly class AccompanyingCourseQuickMenuBuilder implements LocalMenuBuil
return ['accompanying_course_quick_menu'];
}
public function buildMenu($menuId, MenuItem $menu, array $parameters)
public function buildMenu($menuId, MenuItem $menu, array $parameters): void
{
/** @var \Chill\PersonBundle\Entity\AccompanyingPeriod $accompanyingCourse */
$accompanyingCourse = $parameters['accompanying-course'];

View File

@@ -13,7 +13,7 @@ namespace Chill\ActivityBundle\Menu;
use Chill\MainBundle\Routing\LocalMenuBuilderInterface;
use Knp\Menu\MenuItem;
use Symfony\Component\Security\Core\Security;
use Symfony\Bundle\SecurityBundle\Security;
/**
* @implements LocalMenuBuilderInterface<array>
@@ -22,7 +22,7 @@ final readonly class AdminMenuBuilder implements LocalMenuBuilderInterface
{
public function __construct(private Security $security) {}
public function buildMenu($menuId, MenuItem $menu, array $parameters)
public function buildMenu($menuId, MenuItem $menu, array $parameters): void
{
if (!$this->security->isGranted('ROLE_ADMIN')) {
return;

View File

@@ -30,7 +30,7 @@ final readonly class PersonMenuBuilder implements LocalMenuBuilderInterface
private TranslatorInterface $translator,
) {}
public function buildMenu($menuId, MenuItem $menu, array $parameters)
public function buildMenu($menuId, MenuItem $menu, array $parameters): void
{
/** @var Person $person */
$person = $parameters['person'];

View File

@@ -33,7 +33,7 @@ use Doctrine\ORM\Query\Expr\Join;
use Doctrine\ORM\Query\ResultSetMappingBuilder;
use Doctrine\ORM\QueryBuilder;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\Security\Core\Security;
use Symfony\Bundle\SecurityBundle\Security;
final readonly class ActivityACLAwareRepository implements ActivityACLAwareRepositoryInterface
{

View File

@@ -24,7 +24,7 @@ use Chill\MainBundle\Security\Resolver\CenterResolverManagerInterface;
use Chill\PersonBundle\Entity\Person;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\Security\Core\Security;
use Symfony\Bundle\SecurityBundle\Security;
final readonly class ActivityDocumentACLAwareRepository implements ActivityDocumentACLAwareRepositoryInterface
{

View File

@@ -49,17 +49,17 @@ class ActivityStatsVoter extends AbstractChillVoter implements ProvideRoleHierar
return $this->getAttributes();
}
protected function supports($attribute, $subject)
protected function supports(string $attribute, mixed $subject): bool
{
return $this->helper->supports($attribute, $subject);
}
protected function voteOnAttribute($attribute, $subject, TokenInterface $token)
protected function voteOnAttribute(string $attribute, mixed $subject, TokenInterface $token): bool
{
return $this->helper->voteOnAttribute($attribute, $subject, $token);
}
private function getAttributes()
private function getAttributes(): array
{
return [self::STATS, self::LISTS];
}

View File

@@ -17,7 +17,7 @@ use Chill\DocStoreBundle\Repository\AssociatedEntityToStoredObjectInterface;
use Chill\DocStoreBundle\Security\Authorization\StoredObjectRoleEnum;
use Chill\DocStoreBundle\Security\Authorization\StoredObjectVoter\AbstractStoredObjectVoter;
use Chill\MainBundle\Workflow\Helper\WorkflowRelatedEntityPermissionHelper;
use Symfony\Component\Security\Core\Security;
use Symfony\Bundle\SecurityBundle\Security;
class ActivityStoredObjectVoter extends AbstractStoredObjectVoter
{

View File

@@ -22,7 +22,7 @@ use Chill\PersonBundle\Entity\Person;
use Chill\PersonBundle\Security\Authorization\AccompanyingPeriodVoter;
use Chill\PersonBundle\Security\Authorization\PersonVoter;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Component\Security\Core\Security;
use Symfony\Bundle\SecurityBundle\Security;
class ActivityVoter extends AbstractChillVoter implements ProvideRoleHierarchyInterface
{

View File

@@ -26,7 +26,7 @@ use Chill\PersonBundle\Entity\Person;
use Chill\PersonBundle\Security\Authorization\AccompanyingPeriodVoter;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\Security\Core\Security;
use Symfony\Bundle\SecurityBundle\Security;
final readonly class AccompanyingPeriodActivityGenericDocProvider implements GenericDocForAccompanyingPeriodProviderInterface, GenericDocForPersonProviderInterface
{

View File

@@ -16,7 +16,7 @@ use Chill\ActivityBundle\Security\Authorization\ActivityVoter;
use Chill\DocStoreBundle\GenericDoc\FetchQueryInterface;
use Chill\DocStoreBundle\GenericDoc\GenericDocForPersonProviderInterface;
use Chill\PersonBundle\Entity\Person;
use Symfony\Component\Security\Core\Security;
use Symfony\Bundle\SecurityBundle\Security;
final readonly class PersonActivityGenericDocProvider implements GenericDocForPersonProviderInterface
{

View File

@@ -25,7 +25,7 @@ trait PrepareActivityTrait
*
* @return Activity
*/
public function prepareActivity(Scope $scope, Person $person)
public function prepareActivity(Scope $scope, Person $person): \Chill\ActivityBundle\Entity\Activity
{
return (new Activity())
->setScope($scope)

View File

@@ -25,7 +25,7 @@ final class ActivityControllerTest extends WebTestCase
/**
* @dataProvider getSecuredPagesUnauthenticated
*/
public function testAccessIsDeniedForUnauthenticated(mixed $url)
public function testAccessIsDeniedForUnauthenticated(mixed $url): void
{
$client = $this->createClient();
@@ -61,7 +61,7 @@ final class ActivityControllerTest extends WebTestCase
* @param type $client
* @param type $url
*/
public function testAccessIsDeniedForUnauthorized($client, $url)
public function testAccessIsDeniedForUnauthorized($client, $url): void
{
$client->request('GET', $url);
@@ -101,7 +101,7 @@ final class ActivityControllerTest extends WebTestCase
];
}
public function testCompleteScenario()
public function testCompleteScenario(): void
{
// Create a new client to browse the application
$client = $this->getAuthenticatedClient();
@@ -199,7 +199,7 @@ final class ActivityControllerTest extends WebTestCase
*
* @return \Chill\MainBundle\Entity\User a fake user within a group without activity
*/
private function createFakeUser()
private function createFakeUser(): \Chill\MainBundle\Entity\User
{
$container = self::$kernel->getContainer();
$em = $container->get('doctrine.orm.entity_manager');
@@ -259,7 +259,7 @@ final class ActivityControllerTest extends WebTestCase
/**
* @return \Symfony\Component\BrowserKit\AbstractBrowser
*/
private function getAuthenticatedClient(mixed $username = 'center a_social')
private function getAuthenticatedClient(mixed $username = 'center a_social'): \Symfony\Bundle\FrameworkBundle\KernelBrowser
{
return self::createClient([], [
'PHP_AUTH_USER' => $username,

View File

@@ -16,7 +16,6 @@ use Chill\PersonBundle\AccompanyingPeriod\SocialIssueConsistency\AccompanyingPer
use Chill\PersonBundle\Entity\AccompanyingPeriod;
use Chill\PersonBundle\Entity\SocialWork\SocialAction;
use Chill\PersonBundle\Entity\SocialWork\SocialIssue;
use Doctrine\ORM\Event\LifecycleEventArgs;
use PHPUnit\Framework\TestCase;
use Prophecy\PhpUnit\ProphecyTrait;
@@ -70,33 +69,32 @@ final class ActivityTest extends TestCase
public function testHierarchySocialIssues(): void
{
$listener = new AccompanyingPeriodSocialIssueConsistencyEntityListener();
$event = $this->prophesize(LifecycleEventArgs::class)->reveal();
$parent = new SocialIssue();
$child = new SocialIssue();
$parent->addChild($child);
$child->setParent($parent);
$grandChild = new SocialIssue();
$child->addChild($grandChild);
$grandChild->setParent($child);
$activity = new Activity();
$activity->setAccompanyingPeriod(new AccompanyingPeriod());
$activity->addSocialIssue($parent);
$listener->preUpdate($activity, $event);
$listener->preUpdate($activity);
$this->assertCount(1, $activity->getSocialIssues());
$this->assertContains($parent, $activity->getSocialIssues());
$activity->addSocialIssue($grandChild);
$listener->preUpdate($activity, $event);
$listener->preUpdate($activity);
$this->assertCount(1, $activity->getSocialIssues());
$this->assertContains($grandChild, $activity->getSocialIssues());
$this->assertNotContains($parent, $activity->getSocialIssues());
$activity->addSocialIssue($child);
$listener->preUpdate($activity, $event);
$listener->preUpdate($activity);
$this->assertCount(1, $activity->getSocialIssues());
$this->assertContains($grandChild, $activity->getSocialIssues());
@@ -104,7 +102,7 @@ final class ActivityTest extends TestCase
$this->assertNotContains($child, $activity->getSocialIssues());
$activity->addSocialIssue($another = new SocialIssue());
$listener->preUpdate($activity, $event);
$listener->preUpdate($activity);
$this->assertCount(2, $activity->getSocialIssues());
$this->assertContains($grandChild, $activity->getSocialIssues());

View File

@@ -41,7 +41,7 @@ class ByActivityTypeAggregatorTest extends AbstractAggregatorTest
$this->translatableStringHelper = self::getContainer()->get(TranslatableStringHelperInterface::class);
}
public function getAggregator()
public function getAggregator(): \Chill\ActivityBundle\Export\Aggregator\ACPAggregators\ByActivityTypeAggregator
{
return new ByActivityTypeAggregator(
$this->rollingDateConverter,

View File

@@ -32,7 +32,7 @@ final class BySocialActionAggregatorTest extends AbstractAggregatorTest
$this->aggregator = self::getContainer()->get('chill.activity.export.bysocialaction_aggregator');
}
public function getAggregator()
public function getAggregator(): \Chill\ActivityBundle\Export\Aggregator\ACPAggregators\BySocialActionAggregator
{
return $this->aggregator;
}

View File

@@ -32,7 +32,7 @@ final class BySocialIssueAggregatorTest extends AbstractAggregatorTest
$this->aggregator = self::getContainer()->get('chill.activity.export.bysocialissue_aggregator');
}
public function getAggregator()
public function getAggregator(): \Chill\ActivityBundle\Export\Aggregator\ACPAggregators\BySocialIssueAggregator
{
return $this->aggregator;
}

View File

@@ -35,7 +35,7 @@ class ActivityPresenceAggregatorTest extends AbstractAggregatorTest
$this->activityPresenceRepository = self::getContainer()->get(ActivityPresenceRepositoryInterface::class);
}
public function getAggregator()
public function getAggregator(): \Chill\ActivityBundle\Export\Aggregator\ActivityPresenceAggregator
{
return new ActivityPresenceAggregator($this->activityPresenceRepository, $this->translatableStringHelper);
}

View File

@@ -44,7 +44,7 @@ final class ActivityReasonAggregatorTest extends AbstractAggregatorTest
->push($request->reveal());*/
}
public function getAggregator()
public function getAggregator(): \Chill\ActivityBundle\Export\Aggregator\ActivityReasonAggregator
{
return $this->aggregator;
}

View File

@@ -45,7 +45,7 @@ final class ActivityTypeAggregatorTest extends AbstractAggregatorTest
->push($request->reveal());
}
public function getAggregator()
public function getAggregator(): \Chill\ActivityBundle\Export\Aggregator\ActivityTypeAggregator
{
return $this->aggregator;
}

View File

@@ -45,7 +45,7 @@ final class ActivityUserAggregatorTest extends AbstractAggregatorTest
->push($request->reveal());
}
public function getAggregator()
public function getAggregator(): \Chill\ActivityBundle\Export\Aggregator\ActivityUserAggregator
{
return $this->aggregator;
}

View File

@@ -32,7 +32,7 @@ final class ByThirdpartyAggregatorTest extends AbstractAggregatorTest
$this->aggregator = self::getContainer()->get(ByThirdpartyAggregator::class);
}
public function getAggregator()
public function getAggregator(): \Chill\ActivityBundle\Export\Aggregator\ByThirdpartyAggregator
{
return $this->aggregator;
}

View File

@@ -32,7 +32,7 @@ final class ByUserAggregatorTest extends AbstractAggregatorTest
$this->aggregator = self::getContainer()->get(ByCreatorAggregator::class);
}
public function getAggregator()
public function getAggregator(): \Chill\ActivityBundle\Export\Aggregator\ByCreatorAggregator
{
return $this->aggregator;
}

View File

@@ -32,7 +32,7 @@ final class CreatorJobAggregatorTest extends AbstractAggregatorTest
$this->aggregator = self::getContainer()->get(CreatorJobAggregator::class);
}
public function getAggregator()
public function getAggregator(): \Chill\ActivityBundle\Export\Aggregator\CreatorJobAggregator
{
return $this->aggregator;
}

View File

@@ -32,7 +32,7 @@ final class CreatorScopeAggregatorTest extends AbstractAggregatorTest
$this->aggregator = self::getContainer()->get(CreatorScopeAggregator::class);
}
public function getAggregator()
public function getAggregator(): \Chill\ActivityBundle\Export\Aggregator\CreatorScopeAggregator
{
return $this->aggregator;
}

View File

@@ -32,7 +32,7 @@ final class DateAggregatorTest extends AbstractAggregatorTest
$this->aggregator = self::getContainer()->get(DateAggregator::class);
}
public function getAggregator()
public function getAggregator(): \Chill\ActivityBundle\Export\Aggregator\DateAggregator
{
return $this->aggregator;
}

View File

@@ -32,7 +32,7 @@ final class LocationTypeAggregatorTest extends AbstractAggregatorTest
$this->aggregator = self::getContainer()->get(LocationTypeAggregator::class);
}
public function getAggregator()
public function getAggregator(): \Chill\ActivityBundle\Export\Aggregator\LocationTypeAggregator
{
return $this->aggregator;
}

View File

@@ -32,7 +32,7 @@ class PersonAggregatorTest extends AbstractAggregatorTest
$this->labelPersonHelper = self::getContainer()->get(LabelPersonHelper::class);
}
public function getAggregator()
public function getAggregator(): \Chill\ActivityBundle\Export\Aggregator\PersonAggregators\PersonAggregator
{
return new PersonAggregator($this->labelPersonHelper);
}

View File

@@ -33,7 +33,7 @@ class PersonsAggregatorTest extends AbstractAggregatorTest
$this->labelPersonHelper = self::getContainer()->get(LabelPersonHelper::class);
}
public function getAggregator()
public function getAggregator(): \Chill\ActivityBundle\Export\Aggregator\PersonsAggregator
{
return new PersonsAggregator($this->labelPersonHelper);
}

View File

@@ -36,7 +36,7 @@ final class ActivityTypeFilterTest extends AbstractFilterTest
$this->filter = self::getContainer()->get(\Chill\ActivityBundle\Export\Filter\ACPFilters\ActivityTypeFilter::class);
}
public function getFilter()
public function getFilter(): \Chill\ActivityBundle\Export\Filter\ACPFilters\ActivityTypeFilter
{
return $this->filter;
}

View File

@@ -33,7 +33,7 @@ final class ByCreatorFilterTest extends AbstractFilterTest
$this->filter = self::getContainer()->get(ByCreatorFilter::class);
}
public function getFilter()
public function getFilter(): \Chill\ActivityBundle\Export\Filter\ByCreatorFilter
{
return $this->filter;
}

View File

@@ -33,7 +33,7 @@ final class BySocialActionFilterTest extends AbstractFilterTest
$this->filter = self::getContainer()->get(\Chill\ActivityBundle\Export\Filter\ACPFilters\BySocialActionFilter::class);
}
public function getFilter()
public function getFilter(): \Chill\ActivityBundle\Export\Filter\ACPFilters\BySocialActionFilter
{
return $this->filter;
}

View File

@@ -34,7 +34,7 @@ final class BySocialIssueFilterTest extends AbstractFilterTest
$this->filter = self::getContainer()->get(BySocialIssueFilter::class);
}
public function getFilter()
public function getFilter(): \Chill\ActivityBundle\Export\Filter\ACPFilters\BySocialIssueFilter
{
return $this->filter;
}

View File

@@ -33,7 +33,7 @@ final class ActivityDateFilterTest extends AbstractFilterTest
$this->filter = self::getContainer()->get(ActivityDateFilter::class);
}
public function getFilter()
public function getFilter(): \Chill\ActivityBundle\Export\Filter\ActivityDateFilter
{
return $this->filter;
}

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