mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-09-12 01:34:58 +00:00
Compare commits
125 Commits
rector/rul
...
2.6.2
Author | SHA1 | Date | |
---|---|---|---|
f609bb0645 | |||
bdee637c9f | |||
722026b768 | |||
8ed899a9c4 | |||
da3c6f2dd1 | |||
c72af4d7db | |||
370c9c6d74 | |||
80ea712475 | |||
0e47a1cf59 | |||
6a554c1c8c | |||
0bd8ad84a8 | |||
115d71ad34 | |||
7ca2380dad | |||
ac9704f154 | |||
87ea841aaa | |||
dccc2bf4a5 | |||
599510c3b9 | |||
18971b3204 | |||
735a4aa97c | |||
7cdbee2d0f | |||
95dfb4ba52 | |||
22241ca7b1 | |||
13faa572ef | |||
72f0c460ab | |||
c546c4a207 | |||
5cea4a647d | |||
207e109d1e | |||
758ad9bc87 | |||
90c8f1e3cf | |||
05d86f1a70 | |||
99cf7b8e8d | |||
68f2c7df25 | |||
6f1dd5b3f2 | |||
e7a9b10d0d | |||
b4f8c7d261 | |||
65b585d4a9 | |||
2cec4a770e | |||
52c5807cd5 | |||
bf7f375daf | |||
cd85e37c1b | |||
67e9127f8e | |||
754515f185 | |||
15fbfbb621 | |||
cf294541ae | |||
b4f9501af5 | |||
c1a586dfb9 | |||
57a1a49fac | |||
19789acbbe | |||
77180ebb0c | |||
6e2377b7ee | |||
4d111cd6cf | |||
9600543fec | |||
86315b1579 | |||
0355699a69 | |||
efd43c3791 | |||
f770664798 | |||
74645c065b | |||
c1d70ec63e | |||
36ca0fcbfc | |||
91c4c3c270 | |||
92b1b17679 | |||
c19d1ff0c7 | |||
94f26df81e | |||
ae9f1e3905 | |||
b6fe830f1e
|
|||
665f0b4ccb
|
|||
30fa57b999
|
|||
0a6131abcc
|
|||
bd4f3e38eb
|
|||
75bca46b98
|
|||
fe1fe31b68
|
|||
46a5464429
|
|||
67ea62f33d
|
|||
0e16ab4c18
|
|||
a68fef8547
|
|||
fe89e527e6 | |||
7b28bb7561
|
|||
8f793d8985
|
|||
264e19e20a
|
|||
f30b4ff452 | |||
f3a37d435f | |||
f0c6d00953
|
|||
fe5e1e5557
|
|||
16fcd03a02
|
|||
34ee2b3ba5
|
|||
03baee4286 | |||
bc5c420f92 | |||
b256c3176e | |||
53cc43f8d3
|
|||
40a72d9fca
|
|||
82b3025842 | |||
7c7c5862c6 | |||
6301505563 | |||
ba41ab98f7 | |||
fa47dcd5b6 | |||
f3fbd5314a
|
|||
e9f90e2dd2 | |||
dcae15e8d8 | |||
9ccbba2deb | |||
87cdf2e53b | |||
bf27e81e35 | |||
6275623f5e | |||
bc4af576bc | |||
01e9a15bd7 | |||
256579af89 | |||
3af065e530 | |||
fd79692f6d | |||
7758d62f86 | |||
2921073da3 | |||
f02d97ddb0 | |||
95b3933650 | |||
b7a6a88e70 | |||
9846cd5acb | |||
032eed0424 | |||
767ed89f80 | |||
15bf4d6d6d | |||
c7cdb3a092 | |||
bb187f5463 | |||
860e076b89 | |||
e0cdf06e99 | |||
0423540976 | |||
fcd4c3b92e | |||
7c109d909a | |||
d825a8509b | |||
e8690d249f |
3
.changes/v2.5.3.md
Normal file
3
.changes/v2.5.3.md
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
## v2.5.3 - 2023-07-20
|
||||||
|
### Fixed
|
||||||
|
* ([#132](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/132)) Rendez-vous documents created would appear in all documents lists of all persons with an accompanying period. Or statements are now added to the where clause to filter out documents that come from unrelated accompanying period/ or person rendez-vous.
|
21
.changes/v2.6.0.md
Normal file
21
.changes/v2.6.0.md
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
## v2.6.0 - 2023-09-14
|
||||||
|
### Feature
|
||||||
|
* ([#133](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/133)) Add locations in Aside Activity. By default, suggest user location, otherwise a select with all locations.
|
||||||
|
* ([#133](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/133)) Adapt Aside Activity exports: display location, filter by location, group by location
|
||||||
|
* Use the CRUD controller for center entity + add the isActive property to be able to mask instances of Center that are no longer in use.
|
||||||
|
### Fixed
|
||||||
|
* ([#107](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/107)) reinstate the fusion of duplicate persons
|
||||||
|
* Missing translation in Work Actions exports
|
||||||
|
* Reimplement the mission type filter on tasks, only for instances that have a config parameter indicating true for this.
|
||||||
|
* ([#135](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/135)) Corrects a typing error in 2 filters, which caused an
|
||||||
|
error when trying to reedit a saved export
|
||||||
|
|
||||||
|
|
||||||
|
* ([#136](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/136)) [household] when moving a person to a sharing position to a not-sharing position on the same household on the same date, remove the previous household membership on the same household. This fix duplicate member.
|
||||||
|
* Add missing translation for comment field placeholder in repositionning household editor.
|
||||||
|
|
||||||
|
* Do not send an email to creator twice when adding a comment to a notification
|
||||||
|
* ([#107](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/107)) Fix gestion doublon functionality to work with chill bundles v2
|
||||||
|
### UX
|
||||||
|
* Uniformize badge-person in household banner (background, size)
|
||||||
|
|
3
.changes/v2.6.1.md
Normal file
3
.changes/v2.6.1.md
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
## v2.6.1 - 2023-09-14
|
||||||
|
### Fixed
|
||||||
|
* Filter out active centers in exports, which uses a different PickCenterType.
|
3
.changes/v2.6.2.md
Normal file
3
.changes/v2.6.2.md
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
## v2.6.2 - 2023-09-18
|
||||||
|
### Fixed
|
||||||
|
* Fix doctrine mapping of AbstractTaskPlaceEvent and SingleTaskPlaceEvent: id property moved.
|
34
CHANGELOG.md
34
CHANGELOG.md
@@ -6,6 +6,40 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html),
|
|||||||
and is generated by [Changie](https://github.com/miniscruff/changie).
|
and is generated by [Changie](https://github.com/miniscruff/changie).
|
||||||
|
|
||||||
|
|
||||||
|
## v2.6.2 - 2023-09-18
|
||||||
|
### Fixed
|
||||||
|
* Fix doctrine mapping of AbstractTaskPlaceEvent and SingleTaskPlaceEvent: id property moved.
|
||||||
|
|
||||||
|
## v2.6.1 - 2023-09-14
|
||||||
|
### Fixed
|
||||||
|
* Filter out active centers in exports, which uses a different PickCenterType.
|
||||||
|
|
||||||
|
## v2.6.0 - 2023-09-14
|
||||||
|
### Feature
|
||||||
|
* ([#133](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/133)) Add locations in Aside Activity. By default, suggest user location, otherwise a select with all locations.
|
||||||
|
* ([#133](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/133)) Adapt Aside Activity exports: display location, filter by location, group by location
|
||||||
|
* Use the CRUD controller for center entity + add the isActive property to be able to mask instances of Center that are no longer in use.
|
||||||
|
### Fixed
|
||||||
|
* ([#107](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/107)) reinstate the fusion of duplicate persons
|
||||||
|
* Missing translation in Work Actions exports
|
||||||
|
* Reimplement the mission type filter on tasks, only for instances that have a config parameter indicating true for this.
|
||||||
|
* ([#135](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/135)) Corrects a typing error in 2 filters, which caused an
|
||||||
|
error when trying to reedit a saved export
|
||||||
|
|
||||||
|
|
||||||
|
* ([#136](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/136)) [household] when moving a person to a sharing position to a not-sharing position on the same household on the same date, remove the previous household membership on the same household. This fix duplicate member.
|
||||||
|
* Add missing translation for comment field placeholder in repositionning household editor.
|
||||||
|
|
||||||
|
* Do not send an email to creator twice when adding a comment to a notification
|
||||||
|
* ([#107](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/107)) Fix gestion doublon functionality to work with chill bundles v2
|
||||||
|
### UX
|
||||||
|
* Uniformize badge-person in household banner (background, size)
|
||||||
|
|
||||||
|
|
||||||
|
## v2.5.3 - 2023-07-20
|
||||||
|
### Fixed
|
||||||
|
* ([#132](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/132)) Rendez-vous documents created would appear in all documents lists of all persons with an accompanying period. Or statements are now added to the where clause to filter out documents that come from unrelated accompanying period/ or person rendez-vous.
|
||||||
|
|
||||||
## v2.5.2 - 2023-07-15
|
## v2.5.2 - 2023-07-15
|
||||||
### Fixed
|
### Fixed
|
||||||
* [Collate Address] when updating address point, do not use the point's address reference if the similarity is below the requirement for associating the address reference and the address (it uses the postcode's center instead)
|
* [Collate Address] when updating address point, do not use the point's address reference if the similarity is below the requirement for associating the address reference and the address (it uses the postcode's center instead)
|
||||||
|
80
CONTRIBUTING.md
Normal file
80
CONTRIBUTING.md
Normal file
@@ -0,0 +1,80 @@
|
|||||||
|
# Contributing
|
||||||
|
|
||||||
|
Chill is an open source, community-driven project.
|
||||||
|
|
||||||
|
If you'd like to contribute, please read the following.
|
||||||
|
|
||||||
|
## What can you do ?
|
||||||
|
|
||||||
|
Chill is an open-source project driven by a community of developers, users and social workers. If you don't feel ready to contribute code or patches, reviewing issues and pull requests (PRs) can be a great start to get involved and give back.
|
||||||
|
|
||||||
|
If you don't have your own instance or don't want to use it, you can try to reproduce bugs using the instance https://demo.chill.social
|
||||||
|
|
||||||
|
## Core team
|
||||||
|
|
||||||
|
The core team is the group of developers that determine the direction and evolution of the Chill project. Their votes rule if the features and patches proposed by the community are approved or rejected.
|
||||||
|
|
||||||
|
All the Chill Core members are long-time contributors with solid technical expertise and they have demonstrated a strong commitment to drive the project forward.
|
||||||
|
|
||||||
|
The core team:
|
||||||
|
|
||||||
|
- elects his own members;
|
||||||
|
- merge pull requests;
|
||||||
|
|
||||||
|
### members
|
||||||
|
|
||||||
|
Project leader: [julienfastre](https://gitlab.com/julienfastre)
|
||||||
|
|
||||||
|
Core members:
|
||||||
|
|
||||||
|
- [tchama](https://gitlab.com/tchama)
|
||||||
|
- [LenaertsJ](https://gitlab.com/LenaertsJ)
|
||||||
|
- [nobohan](https://gitlab.com/nobohan)
|
||||||
|
|
||||||
|
### Becoming a project member
|
||||||
|
|
||||||
|
About once a year, the core team discusses the opportunity to invite new members. To become a core team member, you must:
|
||||||
|
|
||||||
|
- take part on the development for at least 6 month: propose multiple merge requests and participate to the peer review process;
|
||||||
|
- through this participation, demonstrate your technical skills and your knowledge of the software and any of their dependencies;
|
||||||
|
|
||||||
|
### Core Membership Revocation
|
||||||
|
|
||||||
|
A Symfony Core membership can be revoked for any of the following reasons:
|
||||||
|
|
||||||
|
- Refusal to follow the rules and policies stated in this document;
|
||||||
|
- Lack of activity for the past six months;
|
||||||
|
- Willful negligence or intent to harm the Chill project;
|
||||||
|
|
||||||
|
The decision is taken by the majority of project members.
|
||||||
|
|
||||||
|
## Code development rules
|
||||||
|
|
||||||
|
### Merge requests
|
||||||
|
|
||||||
|
Every merge request must contains:
|
||||||
|
|
||||||
|
- one more entries suitable for generating a changelog. This is done using the [changie utility](https://changie.dev);
|
||||||
|
- a comprehensible description of the changes;
|
||||||
|
- if applicable, automated tests should be adapted or created;
|
||||||
|
- the code style must pass the project's rules, and non phpstan errors must be raised nor rector refactoring suggestion.
|
||||||
|
|
||||||
|
The pipelines must pass.
|
||||||
|
|
||||||
|
In case of emergency, some rules may be temporarily ignored.
|
||||||
|
|
||||||
|
### Merge Request Voting Policy
|
||||||
|
|
||||||
|
- -1 votes must always be justified by technical and objective reasons;
|
||||||
|
- +1 (technically: approbation on the merge request) votes do not require justification, unless there is at least one -1 vote;
|
||||||
|
- Core members can change their votes as many times as they desire during the course of a merge request discussion;
|
||||||
|
- Core members are not allowed to vote on their own merge requests.
|
||||||
|
|
||||||
|
### Merge Request Merging Process
|
||||||
|
|
||||||
|
All code must be committed to the repository through merge requests, except for minor changes which can be committed directly to the repository.
|
||||||
|
|
||||||
|
### Release Policy
|
||||||
|
|
||||||
|
The Core members are also the release manager for every Chill version.
|
||||||
|
|
@@ -94,7 +94,7 @@ class CountPerson implements ExportInterface
|
|||||||
public function initiateQuery(array $requiredModifiers, array $acl, array $data = [])
|
public function initiateQuery(array $requiredModifiers, array $acl, array $data = [])
|
||||||
{
|
{
|
||||||
// we gather all center the user choose.
|
// we gather all center the user choose.
|
||||||
$centers = array_map(static fn($el) => $el['center'], $acl);
|
$centers = array_map(static fn ($el) => $el['center'], $acl);
|
||||||
|
|
||||||
$qb = $this->entityManager->createQueryBuilder();
|
$qb = $this->entityManager->createQueryBuilder();
|
||||||
|
|
||||||
|
36
docs/source/development/FAQ.rst
Normal file
36
docs/source/development/FAQ.rst
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
.. Copyright (C) 2014 Champs Libres Cooperative SCRLFS
|
||||||
|
Permission is granted to copy, distribute and/or modify this document
|
||||||
|
under the terms of the GNU Free Documentation License, Version 1.3
|
||||||
|
or any later version published by the Free Software Foundation;
|
||||||
|
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
|
||||||
|
A copy of the license is included in the section entitled "GNU
|
||||||
|
Free Documentation License".
|
||||||
|
|
||||||
|
.. _faq:
|
||||||
|
|
||||||
|
|
||||||
|
Frequently asked questions
|
||||||
|
####################
|
||||||
|
|
||||||
|
Continuous integration
|
||||||
|
***********
|
||||||
|
|
||||||
|
Pipeline fails, but php-cs-fixer doesn't alert me when running it locally ?
|
||||||
|
========================================
|
||||||
|
|
||||||
|
It is possible that you run php-cs-fixer on your local instance of chill and no fixes are made.
|
||||||
|
Everything seems fine, so you push. However once the pipeline is run in gitlab, you're notified that it failed due to php
|
||||||
|
cs errors.
|
||||||
|
|
||||||
|
In this case it's likely that you have to update your version of php-cs-fixer.
|
||||||
|
php-cs-fixer is installed when building the docker image: https://gitea.champs-libres.be/Chill-project/chill-skeleton-basic/src/branch/main/Dockerfile#L50
|
||||||
|
|
||||||
|
Consequently, to update php-cs-fixer we have to update the image by building it again.
|
||||||
|
|
||||||
|
For this the following commands can be used,
|
||||||
|
|
||||||
|
.. code-block:: php
|
||||||
|
|
||||||
|
docker compose build --pull php
|
||||||
|
# replace existing containers
|
||||||
|
docker compose up -d --force-recreate php
|
@@ -9,7 +9,7 @@
|
|||||||
Development
|
Development
|
||||||
###########
|
###########
|
||||||
|
|
||||||
As Chill rely on the `symfony <http://symfony.com>`_ framework, reading the framework's documentation should answer most of your questions. We are explaining here some tips to work with Chill, and things we provide to encounter our needs.
|
As Chill relies on the `symfony <http://symfony.com>`_ framework, reading the framework's documentation should answer most of your questions. We are explaining here some tips to work with Chill, and help with things we've encountered.
|
||||||
|
|
||||||
.. toctree::
|
.. toctree::
|
||||||
:maxdepth: 2
|
:maxdepth: 2
|
||||||
@@ -37,6 +37,7 @@ As Chill rely on the `symfony <http://symfony.com>`_ framework, reading the fram
|
|||||||
Cron Jobs <cronjob.rst>
|
Cron Jobs <cronjob.rst>
|
||||||
Info about entities <entity-info.rst>
|
Info about entities <entity-info.rst>
|
||||||
Info about database (in French) <database-principles.rst>
|
Info about database (in French) <database-principles.rst>
|
||||||
|
Developer FAQ <FAQ.rst>
|
||||||
|
|
||||||
Layout and UI
|
Layout and UI
|
||||||
**************
|
**************
|
||||||
|
@@ -56,7 +56,7 @@ class ChillMainConfiguration implements ConfigurationInterface
|
|||||||
->end() // end of widgets
|
->end() // end of widgets
|
||||||
->end() // end of root/children
|
->end() // end of root/children
|
||||||
->end() // end of root
|
->end() // end of root
|
||||||
;
|
;
|
||||||
|
|
||||||
return $treeBuilder;
|
return $treeBuilder;
|
||||||
}
|
}
|
||||||
|
@@ -2,6 +2,13 @@
|
|||||||
|
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Chill is a software for social workers
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view
|
||||||
|
* the LICENSE file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
use Rector\CodeQuality\Rector\Class_\InlineConstructorDefaultToPropertyRector;
|
use Rector\CodeQuality\Rector\Class_\InlineConstructorDefaultToPropertyRector;
|
||||||
use Rector\Config\RectorConfig;
|
use Rector\Config\RectorConfig;
|
||||||
use Rector\Set\ValueObject\LevelSetList;
|
use Rector\Set\ValueObject\LevelSetList;
|
||||||
|
@@ -13,6 +13,4 @@ namespace Chill\ActivityBundle;
|
|||||||
|
|
||||||
use Symfony\Component\HttpKernel\Bundle\Bundle;
|
use Symfony\Component\HttpKernel\Bundle\Bundle;
|
||||||
|
|
||||||
class ChillActivityBundle extends Bundle
|
class ChillActivityBundle extends Bundle {}
|
||||||
{
|
|
||||||
}
|
|
||||||
|
@@ -72,8 +72,7 @@ final class ActivityController extends AbstractController
|
|||||||
private readonly FilterOrderHelperFactoryInterface $filterOrderHelperFactory,
|
private readonly FilterOrderHelperFactoryInterface $filterOrderHelperFactory,
|
||||||
private readonly TranslatableStringHelperInterface $translatableStringHelper,
|
private readonly TranslatableStringHelperInterface $translatableStringHelper,
|
||||||
private readonly PaginatorFactory $paginatorFactory,
|
private readonly PaginatorFactory $paginatorFactory,
|
||||||
) {
|
) {}
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Deletes a Activity entity.
|
* Deletes a Activity entity.
|
||||||
@@ -320,7 +319,6 @@ final class ActivityController extends AbstractController
|
|||||||
|
|
||||||
private function buildFilterOrder(AccompanyingPeriod|Person $associated): FilterOrderHelper
|
private function buildFilterOrder(AccompanyingPeriod|Person $associated): FilterOrderHelper
|
||||||
{
|
{
|
||||||
|
|
||||||
$filterBuilder = $this->filterOrderHelperFactory->create(self::class);
|
$filterBuilder = $this->filterOrderHelperFactory->create(self::class);
|
||||||
$types = $this->activityACLAwareRepository->findActivityTypeByAssociated($associated);
|
$types = $this->activityACLAwareRepository->findActivityTypeByAssociated($associated);
|
||||||
$jobs = $this->activityACLAwareRepository->findUserJobByAssociated($associated);
|
$jobs = $this->activityACLAwareRepository->findUserJobByAssociated($associated);
|
||||||
|
@@ -36,9 +36,7 @@ class AvgActivityDuration implements ExportInterface, GroupedExportInterface
|
|||||||
$this->repository = $em->getRepository(Activity::class);
|
$this->repository = $em->getRepository(Activity::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function buildForm(FormBuilderInterface $builder)
|
public function buildForm(FormBuilderInterface $builder) {}
|
||||||
{
|
|
||||||
}
|
|
||||||
public function getFormDefaultData(): array
|
public function getFormDefaultData(): array
|
||||||
{
|
{
|
||||||
return [];
|
return [];
|
||||||
|
@@ -36,9 +36,7 @@ class CountActivity implements ExportInterface, GroupedExportInterface
|
|||||||
$this->repository = $em->getRepository(Activity::class);
|
$this->repository = $em->getRepository(Activity::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function buildForm(FormBuilderInterface $builder)
|
public function buildForm(FormBuilderInterface $builder) {}
|
||||||
{
|
|
||||||
}
|
|
||||||
public function getFormDefaultData(): array
|
public function getFormDefaultData(): array
|
||||||
{
|
{
|
||||||
return [];
|
return [];
|
||||||
|
@@ -32,9 +32,7 @@ class CountActivity implements ExportInterface, GroupedExportInterface
|
|||||||
$this->activityRepository = $activityRepository;
|
$this->activityRepository = $activityRepository;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function buildForm(FormBuilderInterface $builder)
|
public function buildForm(FormBuilderInterface $builder) {}
|
||||||
{
|
|
||||||
}
|
|
||||||
public function getFormDefaultData(): array
|
public function getFormDefaultData(): array
|
||||||
{
|
{
|
||||||
return [];
|
return [];
|
||||||
|
@@ -50,9 +50,7 @@ class StatActivityDuration implements ExportInterface, GroupedExportInterface
|
|||||||
$this->activityRepository = $activityRepository;
|
$this->activityRepository = $activityRepository;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function buildForm(FormBuilderInterface $builder)
|
public function buildForm(FormBuilderInterface $builder) {}
|
||||||
{
|
|
||||||
}
|
|
||||||
public function getFormDefaultData(): array
|
public function getFormDefaultData(): array
|
||||||
{
|
{
|
||||||
return [];
|
return [];
|
||||||
|
@@ -104,9 +104,7 @@ class ListActivityHelper
|
|||||||
->addGroupBy('location.id');
|
->addGroupBy('location.id');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function buildForm(FormBuilderInterface $builder)
|
public function buildForm(FormBuilderInterface $builder) {}
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getAllowedFormattersTypes()
|
public function getAllowedFormattersTypes()
|
||||||
{
|
{
|
||||||
|
@@ -22,11 +22,11 @@ use Symfony\Contracts\Translation\TranslatorInterface;
|
|||||||
class EmergencyFilter implements FilterInterface
|
class EmergencyFilter implements FilterInterface
|
||||||
{
|
{
|
||||||
private const CHOICES = [
|
private const CHOICES = [
|
||||||
'activity is emergency' => true,
|
'activity is emergency' => 'true',
|
||||||
'activity is not emergency' => false,
|
'activity is not emergency' => 'false',
|
||||||
];
|
];
|
||||||
|
|
||||||
private const DEFAULT_CHOICE = false;
|
private const DEFAULT_CHOICE = 'false';
|
||||||
|
|
||||||
private TranslatorInterface $translator;
|
private TranslatorInterface $translator;
|
||||||
|
|
||||||
|
@@ -23,8 +23,7 @@ final readonly class PeriodHavingActivityBetweenDatesFilter implements FilterInt
|
|||||||
{
|
{
|
||||||
public function __construct(
|
public function __construct(
|
||||||
private RollingDateConverterInterface $rollingDateConverter,
|
private RollingDateConverterInterface $rollingDateConverter,
|
||||||
) {
|
) {}
|
||||||
}
|
|
||||||
|
|
||||||
public function getTitle()
|
public function getTitle()
|
||||||
{
|
{
|
||||||
|
@@ -47,8 +47,7 @@ final readonly class ActivityACLAwareRepository implements ActivityACLAwareRepos
|
|||||||
private EntityManagerInterface $em,
|
private EntityManagerInterface $em,
|
||||||
private Security $security,
|
private Security $security,
|
||||||
private RequestStack $requestStack,
|
private RequestStack $requestStack,
|
||||||
) {
|
) {}
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @throws NonUniqueResultException
|
* @throws NonUniqueResultException
|
||||||
@@ -322,7 +321,7 @@ final readonly class ActivityACLAwareRepository implements ActivityACLAwareRepos
|
|||||||
$counter++;
|
$counter++;
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($person->getAccompanyingPeriodParticipations() as $participation) {
|
foreach ($person->getAccompanyingPeriodParticipations() as $participation) {
|
||||||
if (!$this->security->isGranted(ActivityVoter::SEE, $participation->getAccompanyingPeriod())) {
|
if (!$this->security->isGranted(ActivityVoter::SEE, $participation->getAccompanyingPeriod())) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@@ -43,8 +43,7 @@ final readonly class ActivityDocumentACLAwareRepository implements ActivityDocum
|
|||||||
private CenterResolverManagerInterface $centerResolverManager,
|
private CenterResolverManagerInterface $centerResolverManager,
|
||||||
private AuthorizationHelperForCurrentUserInterface $authorizationHelperForCurrentUser,
|
private AuthorizationHelperForCurrentUserInterface $authorizationHelperForCurrentUser,
|
||||||
private Security $security
|
private Security $security
|
||||||
) {
|
) {}
|
||||||
}
|
|
||||||
|
|
||||||
public function buildFetchQueryActivityDocumentLinkedToPersonFromPersonContext(Person $person, ?DateTimeImmutable $startDate = null, ?DateTimeImmutable $endDate = null, ?string $content = null): FetchQueryInterface
|
public function buildFetchQueryActivityDocumentLinkedToPersonFromPersonContext(Person $person, ?DateTimeImmutable $startDate = null, ?DateTimeImmutable $endDate = null, ?string $content = null): FetchQueryInterface
|
||||||
{
|
{
|
||||||
|
@@ -36,8 +36,7 @@ final class AccompanyingPeriodActivityGenericDocProvider implements GenericDocFo
|
|||||||
private EntityManagerInterface $em,
|
private EntityManagerInterface $em,
|
||||||
private Security $security,
|
private Security $security,
|
||||||
private ActivityDocumentACLAwareRepositoryInterface $activityDocumentACLAwareRepository,
|
private ActivityDocumentACLAwareRepositoryInterface $activityDocumentACLAwareRepository,
|
||||||
) {
|
) {}
|
||||||
}
|
|
||||||
|
|
||||||
public function buildFetchQueryForAccompanyingPeriod(AccompanyingPeriod $accompanyingPeriod, ?DateTimeImmutable $startDate = null, ?DateTimeImmutable $endDate = null, ?string $content = null, ?string $origin = null): FetchQueryInterface
|
public function buildFetchQueryForAccompanyingPeriod(AccompanyingPeriod $accompanyingPeriod, ?DateTimeImmutable $startDate = null, ?DateTimeImmutable $endDate = null, ?string $content = null, ?string $origin = null): FetchQueryInterface
|
||||||
{
|
{
|
||||||
|
@@ -29,8 +29,7 @@ final readonly class PersonActivityGenericDocProvider implements GenericDocForPe
|
|||||||
public function __construct(
|
public function __construct(
|
||||||
private Security $security,
|
private Security $security,
|
||||||
private ActivityDocumentACLAwareRepositoryInterface $personActivityDocumentACLAwareRepository,
|
private ActivityDocumentACLAwareRepositoryInterface $personActivityDocumentACLAwareRepository,
|
||||||
) {
|
) {}
|
||||||
}
|
|
||||||
|
|
||||||
public function buildFetchQueryForPerson(Person $person, ?DateTimeImmutable $startDate = null, ?DateTimeImmutable $endDate = null, ?string $content = null, ?string $origin = null): FetchQueryInterface
|
public function buildFetchQueryForPerson(Person $person, ?DateTimeImmutable $startDate = null, ?DateTimeImmutable $endDate = null, ?string $content = null, ?string $origin = null): FetchQueryInterface
|
||||||
{
|
{
|
||||||
|
@@ -122,5 +122,4 @@ class ActivityDocumentACLAwareRepositoryTest extends KernelTestCase
|
|||||||
yield [$person, $scopes, true, null, new \DateTimeImmutable("1 week ago"), "content"];
|
yield [$person, $scopes, true, null, new \DateTimeImmutable("1 week ago"), "content"];
|
||||||
yield [$person, [], true, new \DateTimeImmutable("1 month ago"), new \DateTimeImmutable("1 week ago"), "content"];
|
yield [$person, [], true, new \DateTimeImmutable("1 month ago"), new \DateTimeImmutable("1 week ago"), "content"];
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -13,6 +13,4 @@ namespace Chill\AsideActivityBundle;
|
|||||||
|
|
||||||
use Symfony\Component\HttpKernel\Bundle\Bundle;
|
use Symfony\Component\HttpKernel\Bundle\Bundle;
|
||||||
|
|
||||||
class ChillAsideActivityBundle extends Bundle
|
class ChillAsideActivityBundle extends Bundle {}
|
||||||
{
|
|
||||||
}
|
|
||||||
|
@@ -33,6 +33,7 @@ final class AsideActivityController extends CRUDController
|
|||||||
$asideActivity = new AsideActivity();
|
$asideActivity = new AsideActivity();
|
||||||
|
|
||||||
$asideActivity->setAgent($this->getUser());
|
$asideActivity->setAgent($this->getUser());
|
||||||
|
$asideActivity->setLocation($this->getUser()->getCurrentLocation());
|
||||||
|
|
||||||
$duration = $request->query->get('duration', '300');
|
$duration = $request->query->get('duration', '300');
|
||||||
$duration = DateTime::createFromFormat('U', $duration);
|
$duration = DateTime::createFromFormat('U', $duration);
|
||||||
|
@@ -14,6 +14,7 @@ namespace Chill\AsideActivityBundle\Entity;
|
|||||||
use Chill\MainBundle\Doctrine\Model\TrackCreationInterface;
|
use Chill\MainBundle\Doctrine\Model\TrackCreationInterface;
|
||||||
use Chill\MainBundle\Doctrine\Model\TrackUpdateInterface;
|
use Chill\MainBundle\Doctrine\Model\TrackUpdateInterface;
|
||||||
use Chill\MainBundle\Entity\User;
|
use Chill\MainBundle\Entity\User;
|
||||||
|
use Chill\MainBundle\Entity\Location;
|
||||||
use DateTimeInterface;
|
use DateTimeInterface;
|
||||||
use Doctrine\ORM\Mapping as ORM;
|
use Doctrine\ORM\Mapping as ORM;
|
||||||
use Symfony\Component\Validator\Constraints as Assert;
|
use Symfony\Component\Validator\Constraints as Assert;
|
||||||
@@ -60,9 +61,10 @@ class AsideActivity implements TrackCreationInterface, TrackUpdateInterface
|
|||||||
private ?int $id = null;
|
private ?int $id = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @ORM\Column(type="string", length=100, nullable=true)
|
* @ORM\ManyToOne(targetEntity=Location::class)
|
||||||
|
* @ORM\JoinColumn(nullable=true)
|
||||||
*/
|
*/
|
||||||
private $location;
|
private ?Location $location = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @ORM\Column(type="text", nullable=true)
|
* @ORM\Column(type="text", nullable=true)
|
||||||
@@ -115,7 +117,7 @@ class AsideActivity implements TrackCreationInterface, TrackUpdateInterface
|
|||||||
return $this->id;
|
return $this->id;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getLocation(): ?string
|
public function getLocation(): ?Location
|
||||||
{
|
{
|
||||||
return $this->location;
|
return $this->location;
|
||||||
}
|
}
|
||||||
@@ -175,7 +177,7 @@ class AsideActivity implements TrackCreationInterface, TrackUpdateInterface
|
|||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function setLocation(?string $location): self
|
public function setLocation(?Location $location): self
|
||||||
{
|
{
|
||||||
$this->location = $location;
|
$this->location = $location;
|
||||||
|
|
||||||
|
@@ -0,0 +1,98 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Chill is a software for social workers
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view
|
||||||
|
* the LICENSE file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Chill\AsideActivityBundle\Export\Aggregator;
|
||||||
|
|
||||||
|
use Chill\AsideActivityBundle\Export\Declarations;
|
||||||
|
use Chill\MainBundle\Export\AggregatorInterface;
|
||||||
|
use Chill\MainBundle\Repository\LocationRepository;
|
||||||
|
use Closure;
|
||||||
|
use Doctrine\ORM\QueryBuilder;
|
||||||
|
use Symfony\Component\Form\FormBuilderInterface;
|
||||||
|
|
||||||
|
class ByLocationAggregator implements AggregatorInterface
|
||||||
|
{
|
||||||
|
public function __construct(private LocationRepository $locationRepository) {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
public function buildForm(FormBuilderInterface $builder): void
|
||||||
|
{
|
||||||
|
// no form
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
public function getFormDefaultData(): array
|
||||||
|
{
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
public function getLabels($key, array $values, $data)
|
||||||
|
{
|
||||||
|
return function ($value): string {
|
||||||
|
if ('_header' === $value) {
|
||||||
|
return 'export.aggregator.Aside activity localisation';
|
||||||
|
}
|
||||||
|
if (null === $value || '' === $value || null === $l = $this->locationRepository->find($value)) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
return $l->getName();
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
public function getQueryKeys($data): array
|
||||||
|
{
|
||||||
|
return ['by_aside_activity_location_aggregator'];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
public function getTitle(): string
|
||||||
|
{
|
||||||
|
return 'export.aggregator.Group by aside activity location';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
public function addRole(): ?string
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
public function alterQuery(QueryBuilder $qb, $data): void
|
||||||
|
{
|
||||||
|
$qb->addSelect('IDENTITY(aside.location) AS by_aside_activity_location_aggregator')
|
||||||
|
->addGroupBy('by_aside_activity_location_aggregator');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
public function applyOn(): string
|
||||||
|
{
|
||||||
|
return Declarations::ASIDE_ACTIVITY_TYPE;
|
||||||
|
}
|
||||||
|
}
|
@@ -31,9 +31,7 @@ class AvgAsideActivityDuration implements ExportInterface, GroupedExportInterfac
|
|||||||
$this->repository = $repository;
|
$this->repository = $repository;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function buildForm(FormBuilderInterface $builder)
|
public function buildForm(FormBuilderInterface $builder) {}
|
||||||
{
|
|
||||||
}
|
|
||||||
public function getFormDefaultData(): array
|
public function getFormDefaultData(): array
|
||||||
{
|
{
|
||||||
return [];
|
return [];
|
||||||
|
@@ -31,9 +31,7 @@ class CountAsideActivity implements ExportInterface, GroupedExportInterface
|
|||||||
$this->repository = $repository;
|
$this->repository = $repository;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function buildForm(FormBuilderInterface $builder)
|
public function buildForm(FormBuilderInterface $builder) {}
|
||||||
{
|
|
||||||
}
|
|
||||||
public function getFormDefaultData(): array
|
public function getFormDefaultData(): array
|
||||||
{
|
{
|
||||||
return [];
|
return [];
|
||||||
|
@@ -23,6 +23,7 @@ use Chill\MainBundle\Export\Helper\DateTimeHelper;
|
|||||||
use Chill\MainBundle\Export\Helper\UserHelper;
|
use Chill\MainBundle\Export\Helper\UserHelper;
|
||||||
use Chill\MainBundle\Export\ListInterface;
|
use Chill\MainBundle\Export\ListInterface;
|
||||||
use Chill\MainBundle\Repository\CenterRepositoryInterface;
|
use Chill\MainBundle\Repository\CenterRepositoryInterface;
|
||||||
|
use Chill\MainBundle\Repository\LocationRepository;
|
||||||
use Chill\MainBundle\Repository\ScopeRepositoryInterface;
|
use Chill\MainBundle\Repository\ScopeRepositoryInterface;
|
||||||
use Chill\MainBundle\Templating\TranslatableStringHelperInterface;
|
use Chill\MainBundle\Templating\TranslatableStringHelperInterface;
|
||||||
use DateTimeInterface;
|
use DateTimeInterface;
|
||||||
@@ -58,6 +59,7 @@ final class ListAsideActivity implements ListInterface, GroupedExportInterface
|
|||||||
CenterRepositoryInterface $centerRepository,
|
CenterRepositoryInterface $centerRepository,
|
||||||
AsideActivityCategoryRepository $asideActivityCategoryRepository,
|
AsideActivityCategoryRepository $asideActivityCategoryRepository,
|
||||||
CategoryRender $categoryRender,
|
CategoryRender $categoryRender,
|
||||||
|
private LocationRepository $locationRepository,
|
||||||
TranslatableStringHelperInterface $translatableStringHelper
|
TranslatableStringHelperInterface $translatableStringHelper
|
||||||
) {
|
) {
|
||||||
$this->em = $em;
|
$this->em = $em;
|
||||||
@@ -70,9 +72,8 @@ final class ListAsideActivity implements ListInterface, GroupedExportInterface
|
|||||||
$this->translatableStringHelper = $translatableStringHelper;
|
$this->translatableStringHelper = $translatableStringHelper;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function buildForm(FormBuilderInterface $builder)
|
public function buildForm(FormBuilderInterface $builder) {}
|
||||||
{
|
|
||||||
}
|
|
||||||
public function getFormDefaultData(): array
|
public function getFormDefaultData(): array
|
||||||
{
|
{
|
||||||
return [];
|
return [];
|
||||||
@@ -145,6 +146,19 @@ final class ListAsideActivity implements ListInterface, GroupedExportInterface
|
|||||||
return $this->categoryRender->renderString($c, []);
|
return $this->categoryRender->renderString($c, []);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
case 'location':
|
||||||
|
return function ($value) {
|
||||||
|
if ('_header' === $value) {
|
||||||
|
return 'export.aside_activity.location';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (null === $value || '' === $value || null === $l = $this->locationRepository->find($value)) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
return $l->getName();
|
||||||
|
};
|
||||||
|
|
||||||
case 'main_scope':
|
case 'main_scope':
|
||||||
return function ($value) {
|
return function ($value) {
|
||||||
if ('_header' === $value) {
|
if ('_header' === $value) {
|
||||||
@@ -191,6 +205,7 @@ final class ListAsideActivity implements ListInterface, GroupedExportInterface
|
|||||||
'date',
|
'date',
|
||||||
'duration',
|
'duration',
|
||||||
'note',
|
'note',
|
||||||
|
'location',
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -226,6 +241,7 @@ final class ListAsideActivity implements ListInterface, GroupedExportInterface
|
|||||||
->addSelect('IDENTITY(aside.type) AS aside_activity_type')
|
->addSelect('IDENTITY(aside.type) AS aside_activity_type')
|
||||||
->addSelect('aside.date')
|
->addSelect('aside.date')
|
||||||
->addSelect('aside.duration')
|
->addSelect('aside.duration')
|
||||||
|
->addSelect('IDENTITY(aside.location) AS location')
|
||||||
->addSelect('aside.note');
|
->addSelect('aside.note');
|
||||||
|
|
||||||
return $qb;
|
return $qb;
|
||||||
|
@@ -31,9 +31,7 @@ class SumAsideActivityDuration implements ExportInterface, GroupedExportInterfac
|
|||||||
$this->repository = $repository;
|
$this->repository = $repository;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function buildForm(FormBuilderInterface $builder)
|
public function buildForm(FormBuilderInterface $builder) {}
|
||||||
{
|
|
||||||
}
|
|
||||||
public function getFormDefaultData(): array
|
public function getFormDefaultData(): array
|
||||||
{
|
{
|
||||||
return [];
|
return [];
|
||||||
|
@@ -0,0 +1,104 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Chill is a software for social workers
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view
|
||||||
|
* the LICENSE file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Chill\AsideActivityBundle\Export\Filter;
|
||||||
|
|
||||||
|
use Chill\AsideActivityBundle\Export\Declarations;
|
||||||
|
use Chill\MainBundle\Entity\Location;
|
||||||
|
use Chill\MainBundle\Entity\User;
|
||||||
|
use Chill\MainBundle\Export\FilterInterface;
|
||||||
|
use Chill\MainBundle\Form\Type\PickUserLocationType;
|
||||||
|
use Chill\MainBundle\Repository\LocationRepository;
|
||||||
|
use Doctrine\ORM\QueryBuilder;
|
||||||
|
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
|
||||||
|
use Symfony\Component\Form\FormBuilderInterface;
|
||||||
|
use Symfony\Component\Security\Core\Security;
|
||||||
|
|
||||||
|
final readonly class ByLocationFilter implements FilterInterface
|
||||||
|
{
|
||||||
|
public function __construct(
|
||||||
|
private Security $security
|
||||||
|
) {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
public function getTitle(): string
|
||||||
|
{
|
||||||
|
return 'export.filter.Filter by aside activity location';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
public function buildForm(FormBuilderInterface $builder): void
|
||||||
|
{
|
||||||
|
$builder
|
||||||
|
->add('locations', PickUserLocationType::class);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
public function getFormDefaultData(): array
|
||||||
|
{
|
||||||
|
$user = $this->security->getUser();
|
||||||
|
|
||||||
|
if ($user instanceof User) {
|
||||||
|
return [
|
||||||
|
'locations' => $user->getCurrentLocation(),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
return [
|
||||||
|
'locations' => null,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
public function describeAction($data, $format = 'string'): array
|
||||||
|
{
|
||||||
|
$locations = $data['locations']->map(fn (Location $l): string => $l->getName());
|
||||||
|
|
||||||
|
return ['export.filter.Filtered by aside activity location: only %location%', [
|
||||||
|
'%location%' => implode(', ', $locations),
|
||||||
|
]];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
public function addRole(): ?string
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
public function alterQuery(QueryBuilder $qb, $data): void
|
||||||
|
{
|
||||||
|
$clause = $qb->expr()->in('aside.location', ':locations');
|
||||||
|
|
||||||
|
$qb->andWhere($clause);
|
||||||
|
$qb->setParameter('locations', $data['locations']);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
public function applyOn(): string
|
||||||
|
{
|
||||||
|
return Declarations::ASIDE_ACTIVITY_TYPE;
|
||||||
|
}
|
||||||
|
}
|
@@ -13,13 +13,16 @@ namespace Chill\AsideActivityBundle\Form;
|
|||||||
|
|
||||||
use Chill\AsideActivityBundle\Entity\AsideActivity;
|
use Chill\AsideActivityBundle\Entity\AsideActivity;
|
||||||
use Chill\AsideActivityBundle\Form\Type\PickAsideActivityCategoryType;
|
use Chill\AsideActivityBundle\Form\Type\PickAsideActivityCategoryType;
|
||||||
|
use Chill\MainBundle\Entity\Location;
|
||||||
use Chill\MainBundle\Form\Type\ChillDateType;
|
use Chill\MainBundle\Form\Type\ChillDateType;
|
||||||
use Chill\MainBundle\Form\Type\ChillTextareaType;
|
use Chill\MainBundle\Form\Type\ChillTextareaType;
|
||||||
use Chill\MainBundle\Form\Type\PickUserDynamicType;
|
use Chill\MainBundle\Form\Type\PickUserDynamicType;
|
||||||
|
use Chill\MainBundle\Form\Type\PickUserLocationType;
|
||||||
use DateInterval;
|
use DateInterval;
|
||||||
use DateTime;
|
use DateTime;
|
||||||
use DateTimeImmutable;
|
use DateTimeImmutable;
|
||||||
use DateTimeZone;
|
use DateTimeZone;
|
||||||
|
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
|
||||||
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
|
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
|
||||||
use Symfony\Component\Form\AbstractType;
|
use Symfony\Component\Form\AbstractType;
|
||||||
use Symfony\Component\Form\Extension\Core\DataTransformer\DateTimeToTimestampTransformer;
|
use Symfony\Component\Form\Extension\Core\DataTransformer\DateTimeToTimestampTransformer;
|
||||||
@@ -77,7 +80,9 @@ final class AsideActivityFormType extends AbstractType
|
|||||||
->add('note', ChillTextareaType::class, [
|
->add('note', ChillTextareaType::class, [
|
||||||
'label' => 'Note',
|
'label' => 'Note',
|
||||||
'required' => false,
|
'required' => false,
|
||||||
]);
|
])
|
||||||
|
->add('location', PickUserLocationType::class)
|
||||||
|
;
|
||||||
|
|
||||||
foreach (['duration'] as $fieldName) {
|
foreach (['duration'] as $fieldName) {
|
||||||
$builder->get($fieldName)
|
$builder->get($fieldName)
|
||||||
|
@@ -39,6 +39,9 @@
|
|||||||
</span>
|
</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
|
{%- if entity.location.name is defined -%}
|
||||||
|
<div><i class="fa fa-fw fa-map-marker"></i>{{ entity.location.name }}</div>
|
||||||
|
{%- endif -%}
|
||||||
</div>
|
</div>
|
||||||
<div class="item-col" style="justify-content: flex-end;">
|
<div class="item-col" style="justify-content: flex-end;">
|
||||||
<div class="box">
|
<div class="box">
|
||||||
|
@@ -23,6 +23,13 @@
|
|||||||
<dt class="inline">{{ 'Created for'|trans }}</dt>
|
<dt class="inline">{{ 'Created for'|trans }}</dt>
|
||||||
<dd>{{ entity.agent }}</dd>
|
<dd>{{ entity.agent }}</dd>
|
||||||
|
|
||||||
|
<dt class="inline">{{ 'Asideactivity location'|trans }}</dt>
|
||||||
|
{%- if entity.location.name is defined -%}
|
||||||
|
<dd>{{ entity.location.name }}</dd>
|
||||||
|
{%- else -%}
|
||||||
|
<dd><span class="chill-no-data-statement">{{ 'No data given'|trans }}</span></dd>
|
||||||
|
{%- endif -%}
|
||||||
|
|
||||||
<h2 class="chill-red">{{ 'Activity data'|trans }}</h2>
|
<h2 class="chill-red">{{ 'Activity data'|trans }}</h2>
|
||||||
|
|
||||||
<dt class="inline">{{ 'Date'|trans }}</dt>
|
<dt class="inline">{{ 'Date'|trans }}</dt>
|
||||||
|
@@ -46,19 +46,27 @@ services:
|
|||||||
tags:
|
tags:
|
||||||
- { name: chill.export_filter, alias: 'aside_activity_user_filter' }
|
- { name: chill.export_filter, alias: 'aside_activity_user_filter' }
|
||||||
|
|
||||||
|
Chill\AsideActivityBundle\Export\Filter\ByLocationFilter:
|
||||||
|
tags:
|
||||||
|
- { name: chill.export_filter, alias: 'aside_activity_location_filter' }
|
||||||
|
|
||||||
## Aggregators
|
## Aggregators
|
||||||
|
|
||||||
chill.aside_activity.export.type_aggregator:
|
chill.aside_activity.export.type_aggregator:
|
||||||
class: Chill\AsideActivityBundle\Export\Aggregator\ByActivityTypeAggregator
|
class: Chill\AsideActivityBundle\Export\Aggregator\ByActivityTypeAggregator
|
||||||
tags:
|
tags:
|
||||||
- { name: chill.export_aggregator, alias: activity_type_aggregator }
|
- { name: chill.export_aggregator, alias: 'activity_type_aggregator' }
|
||||||
|
|
||||||
chill.aside_activity.export.user_job_aggregator:
|
chill.aside_activity.export.user_job_aggregator:
|
||||||
class: Chill\AsideActivityBundle\Export\Aggregator\ByUserJobAggregator
|
class: Chill\AsideActivityBundle\Export\Aggregator\ByUserJobAggregator
|
||||||
tags:
|
tags:
|
||||||
- { name: chill.export_aggregator, alias: aside_activity_user_job_aggregator }
|
- { name: chill.export_aggregator, alias: 'aside_activity_user_job_aggregator' }
|
||||||
|
|
||||||
chill.aside_activity.export.user_scope_aggregator:
|
chill.aside_activity.export.user_scope_aggregator:
|
||||||
class: Chill\AsideActivityBundle\Export\Aggregator\ByUserScopeAggregator
|
class: Chill\AsideActivityBundle\Export\Aggregator\ByUserScopeAggregator
|
||||||
tags:
|
tags:
|
||||||
- { name: chill.export_aggregator, alias: aside_activity_user_scope_aggregator }
|
- { name: chill.export_aggregator, alias: 'aside_activity_user_scope_aggregator' }
|
||||||
|
|
||||||
|
Chill\AsideActivityBundle\Export\Aggregator\ByLocationAggregator:
|
||||||
|
tags:
|
||||||
|
- { name: chill.export_aggregator, alias: 'aside_activity_location_aggregator' }
|
||||||
|
@@ -0,0 +1,39 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Chill is a software for social workers
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view
|
||||||
|
* the LICENSE file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Chill\Migrations\AsideActivity;
|
||||||
|
|
||||||
|
use Doctrine\DBAL\Schema\Schema;
|
||||||
|
use Doctrine\Migrations\AbstractMigration;
|
||||||
|
|
||||||
|
final class Version20230816112809 extends AbstractMigration
|
||||||
|
{
|
||||||
|
public function getDescription(): string
|
||||||
|
{
|
||||||
|
return 'Update location attribute in asideactivity';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function down(Schema $schema): void
|
||||||
|
{
|
||||||
|
$this->addSql('DROP INDEX chill_asideactivity.IDX_A866DA0E64D218E');
|
||||||
|
$this->addSql('ALTER TABLE chill_asideactivity.AsideActivity DROP CONSTRAINT FK_A866DA0E64D218E');
|
||||||
|
$this->addSql('ALTER TABLE chill_asideactivity.AsideActivity DROP location_id');
|
||||||
|
$this->addSql('ALTER TABLE chill_asideactivity.AsideActivity ADD location VARCHAR(100) DEFAULT NULL');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function up(Schema $schema): void
|
||||||
|
{
|
||||||
|
$this->addSql('ALTER TABLE chill_asideactivity.asideactivity ADD location_id INT DEFAULT NULL');
|
||||||
|
$this->addSql('ALTER TABLE chill_asideactivity.asideactivity DROP location');
|
||||||
|
$this->addSql('ALTER TABLE chill_asideactivity.asideactivity ADD CONSTRAINT FK_A866DA0E64D218E FOREIGN KEY (location_id) REFERENCES chill_main_location (id) NOT DEFERRABLE INITIALLY IMMEDIATE');
|
||||||
|
$this->addSql('CREATE INDEX IDX_A866DA0E64D218E ON chill_asideactivity.asideactivity (location_id)');
|
||||||
|
}
|
||||||
|
}
|
@@ -26,6 +26,7 @@ Users: Utilisateurs
|
|||||||
Emergency: Urgent
|
Emergency: Urgent
|
||||||
by: "Par "
|
by: "Par "
|
||||||
location: Lieu
|
location: Lieu
|
||||||
|
Asideactivity location: Localisation de l'activité
|
||||||
|
|
||||||
# Crud
|
# Crud
|
||||||
crud:
|
crud:
|
||||||
@@ -182,6 +183,7 @@ export:
|
|||||||
duration: Durée
|
duration: Durée
|
||||||
note: Note
|
note: Note
|
||||||
id: Identifiant
|
id: Identifiant
|
||||||
|
location: Localisation
|
||||||
|
|
||||||
Exports of aside activities: Exports des activités annexes
|
Exports of aside activities: Exports des activités annexes
|
||||||
Count aside activities: Nombre d'activités annexes
|
Count aside activities: Nombre d'activités annexes
|
||||||
@@ -202,11 +204,16 @@ export:
|
|||||||
Filter by user jobs: Filtrer les activités annexes par métier des utilisateurs
|
Filter by user jobs: Filtrer les activités annexes par métier des utilisateurs
|
||||||
'Filtered aside activities by user scope: only %scopes%': "Filtré par service des utilisateur: uniquement %scopes%"
|
'Filtered aside activities by user scope: only %scopes%': "Filtré par service des utilisateur: uniquement %scopes%"
|
||||||
Filter by user scope: Filtrer les activités annexes par service d'utilisateur
|
Filter by user scope: Filtrer les activités annexes par service d'utilisateur
|
||||||
|
Filter by aside activity location: Filtrer les activités annexes par localisation
|
||||||
|
'Filtered by aside activity location: only %location%': "Filtré par localisation: uniquement %location%"
|
||||||
aggregator:
|
aggregator:
|
||||||
Group by aside activity type: Grouper les activités annexes par type d'activité
|
Group by aside activity type: Grouper les activités annexes par type d'activité
|
||||||
Aside activity type: Type d'activité annexe
|
Aside activity type: Type d'activité annexe
|
||||||
Aggregate by user job: Grouper les activités annexes par métier des utilisateurs
|
Aggregate by user job: Grouper les activités annexes par métier des utilisateurs
|
||||||
Aggregate by user scope: Grouper les activités annexes par service des utilisateurs
|
Aggregate by user scope: Grouper les activités annexes par service des utilisateurs
|
||||||
|
Aside activity location: Localisation des activités annexe
|
||||||
|
Group by aside activity location: Grouper les activités annexes par localisation
|
||||||
|
Aside activity localisation: Localisation
|
||||||
|
|
||||||
# ROLES
|
# ROLES
|
||||||
CHILL_ASIDE_ACTIVITY_STATS: Statistiques pour les activités annexes
|
CHILL_ASIDE_ACTIVITY_STATS: Statistiques pour les activités annexes
|
||||||
|
@@ -29,11 +29,11 @@ use Symfony\Contracts\Translation\TranslatorInterface;
|
|||||||
class CalendarRangeFilter implements FilterInterface
|
class CalendarRangeFilter implements FilterInterface
|
||||||
{
|
{
|
||||||
private const CHOICES = [
|
private const CHOICES = [
|
||||||
'Not made within a calendar range' => true,
|
'Not made within a calendar range' => 'true',
|
||||||
'Made within a calendar range' => false,
|
'Made within a calendar range' => 'false',
|
||||||
];
|
];
|
||||||
|
|
||||||
private const DEFAULT_CHOICE = false;
|
private const DEFAULT_CHOICE = 'false';
|
||||||
|
|
||||||
private TranslatorInterface $translator;
|
private TranslatorInterface $translator;
|
||||||
|
|
||||||
|
@@ -28,8 +28,7 @@ final readonly class MSUserAbsenceReader implements MSUserAbsenceReaderInterface
|
|||||||
private HttpClientInterface $machineHttpClient,
|
private HttpClientInterface $machineHttpClient,
|
||||||
private MapCalendarToUser $mapCalendarToUser,
|
private MapCalendarToUser $mapCalendarToUser,
|
||||||
private ClockInterface $clock,
|
private ClockInterface $clock,
|
||||||
) {
|
) {}
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @throw UserAbsenceSyncException when the data cannot be reached or is not valid from microsoft
|
* @throw UserAbsenceSyncException when the data cannot be reached or is not valid from microsoft
|
||||||
@@ -65,5 +64,4 @@ final readonly class MSUserAbsenceReader implements MSUserAbsenceReaderInterface
|
|||||||
default => throw new UserAbsenceSyncException("this status is not documented by Microsoft")
|
default => throw new UserAbsenceSyncException("this status is not documented by Microsoft")
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -21,8 +21,7 @@ readonly class MSUserAbsenceSync
|
|||||||
private MSUserAbsenceReaderInterface $absenceReader,
|
private MSUserAbsenceReaderInterface $absenceReader,
|
||||||
private ClockInterface $clock,
|
private ClockInterface $clock,
|
||||||
private LoggerInterface $logger,
|
private LoggerInterface $logger,
|
||||||
) {
|
) {}
|
||||||
}
|
|
||||||
|
|
||||||
public function syncUserAbsence(User $user): void
|
public function syncUserAbsence(User $user): void
|
||||||
{
|
{
|
||||||
|
@@ -48,23 +48,13 @@ class NullRemoteCalendarConnector implements RemoteCalendarConnectorInterface
|
|||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
public function removeCalendar(string $remoteId, array $remoteAttributes, User $user, ?CalendarRange $associatedCalendarRange = null): void
|
public function removeCalendar(string $remoteId, array $remoteAttributes, User $user, ?CalendarRange $associatedCalendarRange = null): void {}
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public function removeCalendarRange(string $remoteId, array $remoteAttributes, User $user): void
|
public function removeCalendarRange(string $remoteId, array $remoteAttributes, User $user): void {}
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public function syncCalendar(Calendar $calendar, string $action, ?CalendarRange $previousCalendarRange, ?User $previousMainUser, ?array $oldInvites, ?array $newInvites): void
|
public function syncCalendar(Calendar $calendar, string $action, ?CalendarRange $previousCalendarRange, ?User $previousMainUser, ?array $oldInvites, ?array $newInvites): void {}
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public function syncCalendarRange(CalendarRange $calendarRange): void
|
public function syncCalendarRange(CalendarRange $calendarRange): void {}
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public function syncInvite(Invite $invite): void
|
public function syncInvite(Invite $invite): void {}
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@@ -23,6 +23,4 @@ use Symfony\Component\Form\FormBuilderInterface;
|
|||||||
* @extends DocGeneratorContextWithPublicFormInterface<Calendar>
|
* @extends DocGeneratorContextWithPublicFormInterface<Calendar>
|
||||||
* @extends DocGeneratorContextWithAdminFormInterface<Calendar>
|
* @extends DocGeneratorContextWithAdminFormInterface<Calendar>
|
||||||
*/
|
*/
|
||||||
interface CalendarContextInterface extends DocGeneratorContextWithPublicFormInterface, DocGeneratorContextWithAdminFormInterface
|
interface CalendarContextInterface extends DocGeneratorContextWithPublicFormInterface, DocGeneratorContextWithAdminFormInterface {}
|
||||||
{
|
|
||||||
}
|
|
||||||
|
@@ -39,8 +39,7 @@ final readonly class AccompanyingPeriodCalendarGenericDocProvider implements Gen
|
|||||||
public function __construct(
|
public function __construct(
|
||||||
private Security $security,
|
private Security $security,
|
||||||
private EntityManagerInterface $em
|
private EntityManagerInterface $em
|
||||||
) {
|
) {}
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @throws MappingException
|
* @throws MappingException
|
||||||
@@ -147,6 +146,9 @@ final readonly class AccompanyingPeriodCalendarGenericDocProvider implements Gen
|
|||||||
|
|
||||||
return $query;
|
return $query;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$query->addWhereClause(implode(" OR ", $or), $orParams, $orTypes);
|
||||||
|
|
||||||
return $this->addWhereClausesToQuery($query, $startDate, $endDate, $content);
|
return $this->addWhereClausesToQuery($query, $startDate, $endDate, $content);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -187,6 +189,4 @@ final readonly class AccompanyingPeriodCalendarGenericDocProvider implements Gen
|
|||||||
|
|
||||||
return $query;
|
return $query;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -39,8 +39,7 @@ final readonly class PersonCalendarGenericDocProvider implements GenericDocForPe
|
|||||||
public function __construct(
|
public function __construct(
|
||||||
private Security $security,
|
private Security $security,
|
||||||
private EntityManagerInterface $em
|
private EntityManagerInterface $em
|
||||||
) {
|
) {}
|
||||||
}
|
|
||||||
|
|
||||||
private function addWhereClausesToQuery(FetchQuery $query, ?\DateTimeImmutable $startDate = null, ?\DateTimeImmutable $endDate = null, ?string $content = null): FetchQuery
|
private function addWhereClausesToQuery(FetchQuery $query, ?\DateTimeImmutable $startDate = null, ?\DateTimeImmutable $endDate = null, ?string $content = null): FetchQuery
|
||||||
{
|
{
|
||||||
|
@@ -172,5 +172,4 @@ class MSUserAbsenceReaderTest extends TestCase
|
|||||||
"User is absent: absence is always enabled"
|
"User is absent: absence is always enabled"
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -16,9 +16,7 @@ use Symfony\Component\Form\FormBuilderInterface;
|
|||||||
|
|
||||||
class CustomFieldsTitleType extends AbstractType
|
class CustomFieldsTitleType extends AbstractType
|
||||||
{
|
{
|
||||||
public function buildForm(FormBuilderInterface $builder, array $options)
|
public function buildForm(FormBuilderInterface $builder, array $options) {}
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getBlockPrefix()
|
public function getBlockPrefix()
|
||||||
{
|
{
|
||||||
|
@@ -31,8 +31,7 @@ final readonly class GenericDocForAccompanyingPeriodController
|
|||||||
private PaginatorFactory $paginator,
|
private PaginatorFactory $paginator,
|
||||||
private Security $security,
|
private Security $security,
|
||||||
private EngineInterface $twig,
|
private EngineInterface $twig,
|
||||||
) {
|
) {}
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param AccompanyingPeriod $accompanyingPeriod
|
* @param AccompanyingPeriod $accompanyingPeriod
|
||||||
@@ -94,5 +93,4 @@ final readonly class GenericDocForAccompanyingPeriodController
|
|||||||
]
|
]
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -30,8 +30,7 @@ final readonly class GenericDocForPerson
|
|||||||
private PaginatorFactory $paginator,
|
private PaginatorFactory $paginator,
|
||||||
private Security $security,
|
private Security $security,
|
||||||
private EngineInterface $twig,
|
private EngineInterface $twig,
|
||||||
) {
|
) {}
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @throws \Doctrine\DBAL\Exception
|
* @throws \Doctrine\DBAL\Exception
|
||||||
@@ -91,5 +90,4 @@ final readonly class GenericDocForPerson
|
|||||||
]
|
]
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -54,8 +54,7 @@ class FetchQuery implements FetchQueryInterface
|
|||||||
private array $selectIdentifierTypes = [],
|
private array $selectIdentifierTypes = [],
|
||||||
private array $selectDateParams = [],
|
private array $selectDateParams = [],
|
||||||
private array $selectDateTypes = [],
|
private array $selectDateTypes = [],
|
||||||
) {
|
) {}
|
||||||
}
|
|
||||||
|
|
||||||
public function addJoinClause(string $sql, array $params = [], array $types = []): int
|
public function addJoinClause(string $sql, array $params = [], array $types = []): int
|
||||||
{
|
{
|
||||||
@@ -82,7 +81,6 @@ class FetchQuery implements FetchQueryInterface
|
|||||||
}
|
}
|
||||||
|
|
||||||
unset($this->wheres[$index], $this->whereParams[$index], $this->whereTypes[$index]);
|
unset($this->wheres[$index], $this->whereParams[$index], $this->whereTypes[$index]);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function removeJoinClause(int $index): void
|
public function removeJoinClause(int $index): void
|
||||||
@@ -92,7 +90,6 @@ class FetchQuery implements FetchQueryInterface
|
|||||||
}
|
}
|
||||||
|
|
||||||
unset($this->joins[$index], $this->joinParams[$index], $this->joinTypes[$index]);
|
unset($this->joins[$index], $this->joinParams[$index], $this->joinTypes[$index]);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getSelectKeyString(): string
|
public function getSelectKeyString(): string
|
||||||
|
@@ -21,8 +21,7 @@ final readonly class GenericDocDTO
|
|||||||
public array $identifiers,
|
public array $identifiers,
|
||||||
public \DateTimeImmutable $docDate,
|
public \DateTimeImmutable $docDate,
|
||||||
public AccompanyingPeriod|Person $linked,
|
public AccompanyingPeriod|Person $linked,
|
||||||
) {
|
) {}
|
||||||
}
|
|
||||||
|
|
||||||
public function getContext(): string
|
public function getContext(): string
|
||||||
{
|
{
|
||||||
|
@@ -27,5 +27,4 @@ interface GenericDocForAccompanyingPeriodProviderInterface
|
|||||||
* Return true if the user is allowed to see some documents for this provider.
|
* Return true if the user is allowed to see some documents for this provider.
|
||||||
*/
|
*/
|
||||||
public function isAllowedForAccompanyingPeriod(AccompanyingPeriod $accompanyingPeriod): bool;
|
public function isAllowedForAccompanyingPeriod(AccompanyingPeriod $accompanyingPeriod): bool;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -32,8 +32,7 @@ final readonly class AccompanyingCourseDocumentGenericDocProvider implements Gen
|
|||||||
public function __construct(
|
public function __construct(
|
||||||
private Security $security,
|
private Security $security,
|
||||||
private EntityManagerInterface $entityManager,
|
private EntityManagerInterface $entityManager,
|
||||||
) {
|
) {}
|
||||||
}
|
|
||||||
|
|
||||||
public function buildFetchQueryForAccompanyingPeriod(AccompanyingPeriod $accompanyingPeriod, ?\DateTimeImmutable $startDate = null, ?\DateTimeImmutable $endDate = null, ?string $content = null, ?string $origin = null): FetchQueryInterface
|
public function buildFetchQueryForAccompanyingPeriod(AccompanyingPeriod $accompanyingPeriod, ?\DateTimeImmutable $startDate = null, ?\DateTimeImmutable $endDate = null, ?string $content = null, ?string $origin = null): FetchQueryInterface
|
||||||
{
|
{
|
||||||
@@ -143,5 +142,4 @@ final readonly class AccompanyingCourseDocumentGenericDocProvider implements Gen
|
|||||||
|
|
||||||
return $query;
|
return $query;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -28,8 +28,7 @@ final readonly class PersonDocumentGenericDocProvider implements GenericDocForPe
|
|||||||
public function __construct(
|
public function __construct(
|
||||||
private Security $security,
|
private Security $security,
|
||||||
private PersonDocumentACLAwareRepositoryInterface $personDocumentACLAwareRepository,
|
private PersonDocumentACLAwareRepositoryInterface $personDocumentACLAwareRepository,
|
||||||
) {
|
) {}
|
||||||
}
|
|
||||||
|
|
||||||
public function buildFetchQueryForPerson(
|
public function buildFetchQueryForPerson(
|
||||||
Person $person,
|
Person $person,
|
||||||
|
@@ -24,8 +24,7 @@ final readonly class AccompanyingCourseDocumentGenericDocRenderer implements Gen
|
|||||||
public function __construct(
|
public function __construct(
|
||||||
private AccompanyingCourseDocumentRepository $accompanyingCourseDocumentRepository,
|
private AccompanyingCourseDocumentRepository $accompanyingCourseDocumentRepository,
|
||||||
private PersonDocumentRepository $personDocumentRepository,
|
private PersonDocumentRepository $personDocumentRepository,
|
||||||
) {
|
) {}
|
||||||
}
|
|
||||||
|
|
||||||
public function supports(GenericDocDTO $genericDocDTO, $options = []): bool
|
public function supports(GenericDocDTO $genericDocDTO, $options = []): bool
|
||||||
{
|
{
|
||||||
|
@@ -25,8 +25,7 @@ final readonly class GenericDocExtensionRuntime implements RuntimeExtensionInter
|
|||||||
* @var list<GenericDocRendererInterface>
|
* @var list<GenericDocRendererInterface>
|
||||||
*/
|
*/
|
||||||
private iterable $renderers,
|
private iterable $renderers,
|
||||||
) {
|
) {}
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @throws RuntimeError
|
* @throws RuntimeError
|
||||||
@@ -46,5 +45,4 @@ final readonly class GenericDocExtensionRuntime implements RuntimeExtensionInter
|
|||||||
|
|
||||||
throw new \LogicException("no renderer found");
|
throw new \LogicException("no renderer found");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -20,5 +20,4 @@ interface GenericDocRendererInterface
|
|||||||
public function getTemplate(GenericDocDTO $genericDocDTO, $options = []): string;
|
public function getTemplate(GenericDocDTO $genericDocDTO, $options = []): string;
|
||||||
|
|
||||||
public function getTemplateData(GenericDocDTO $genericDocDTO, $options = []): array;
|
public function getTemplateData(GenericDocDTO $genericDocDTO, $options = []): array;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -38,8 +38,7 @@ final readonly class PersonDocumentACLAwareRepository implements PersonDocumentA
|
|||||||
private CenterResolverManagerInterface $centerResolverManager,
|
private CenterResolverManagerInterface $centerResolverManager,
|
||||||
private AuthorizationHelperForCurrentUserInterface $authorizationHelperForCurrentUser,
|
private AuthorizationHelperForCurrentUserInterface $authorizationHelperForCurrentUser,
|
||||||
private Security $security,
|
private Security $security,
|
||||||
) {
|
) {}
|
||||||
}
|
|
||||||
|
|
||||||
public function buildQueryByPerson(Person $person): QueryBuilder
|
public function buildQueryByPerson(Person $person): QueryBuilder
|
||||||
{
|
{
|
||||||
@@ -98,7 +97,6 @@ final readonly class PersonDocumentACLAwareRepository implements PersonDocumentA
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
$orPersonId[] = $participation->getPerson()->getId();
|
$orPersonId[] = $participation->getPerson()->getId();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ([] === $orPersonId) {
|
if ([] === $orPersonId) {
|
||||||
|
@@ -54,9 +54,6 @@ class FetchQueryToSqlBuilderTest extends KernelTestCase
|
|||||||
);
|
);
|
||||||
self::assertEquals(['foo', 'bar_baz', 'baz'], $params);
|
self::assertEquals(['foo', 'bar_baz', 'baz'], $params);
|
||||||
self::assertEquals([Types::STRING, Types::STRING, Types::STRING], $types);
|
self::assertEquals([Types::STRING, Types::STRING, Types::STRING], $types);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testToSqlWithoutWhere(): void
|
public function testToSqlWithoutWhere(): void
|
||||||
@@ -85,5 +82,4 @@ class FetchQueryToSqlBuilderTest extends KernelTestCase
|
|||||||
self::assertEquals([], $params);
|
self::assertEquals([], $params);
|
||||||
self::assertEquals([], $types);
|
self::assertEquals([], $types);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -142,7 +142,6 @@ class PersonDocumentACLAwareRepositoryTest extends KernelTestCase
|
|||||||
yield [$period, new DateTimeImmutable('2 years ago'), new DateTimeImmutable('1 year ago'), null];
|
yield [$period, new DateTimeImmutable('2 years ago'), new DateTimeImmutable('1 year ago'), null];
|
||||||
yield [$period, null, null, 'test'];
|
yield [$period, null, null, 'test'];
|
||||||
yield [$period, new DateTimeImmutable('2 years ago'), new DateTimeImmutable('1 year ago'), 'test'];
|
yield [$period, new DateTimeImmutable('2 years ago'), new DateTimeImmutable('1 year ago'), 'test'];
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function provideDataBuildFetchQueryForPerson(): iterable
|
public function provideDataBuildFetchQueryForPerson(): iterable
|
||||||
@@ -154,5 +153,4 @@ class PersonDocumentACLAwareRepositoryTest extends KernelTestCase
|
|||||||
yield [null, null, 'test'];
|
yield [null, null, 'test'];
|
||||||
yield [new DateTimeImmutable('2 years ago'), new DateTimeImmutable('1 year ago'), 'test'];
|
yield [new DateTimeImmutable('2 years ago'), new DateTimeImmutable('1 year ago'), 'test'];
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -13,6 +13,4 @@ namespace Chill\EventBundle;
|
|||||||
|
|
||||||
use Symfony\Component\HttpKernel\Bundle\Bundle;
|
use Symfony\Component\HttpKernel\Bundle\Bundle;
|
||||||
|
|
||||||
class ChillEventBundle extends Bundle
|
class ChillEventBundle extends Bundle {}
|
||||||
{
|
|
||||||
}
|
|
||||||
|
@@ -16,6 +16,4 @@ use Doctrine\ORM\EntityRepository;
|
|||||||
/**
|
/**
|
||||||
* Class EventRepository.
|
* Class EventRepository.
|
||||||
*/
|
*/
|
||||||
class EventRepository extends EntityRepository
|
class EventRepository extends EntityRepository {}
|
||||||
{
|
|
||||||
}
|
|
||||||
|
@@ -152,7 +152,7 @@ class EventSearch extends AbstractSearch
|
|||||||
$orWhere = $qb->expr()->orX();
|
$orWhere = $qb->expr()->orX();
|
||||||
|
|
||||||
foreach ($reachableCenters as $center) {
|
foreach ($reachableCenters as $center) {
|
||||||
$n = $n+1;
|
$n = $n + 1;
|
||||||
$circles = $this->authorizationHelper->getReachableScopes(
|
$circles = $this->authorizationHelper->getReachableScopes(
|
||||||
$this->security->getUser(),
|
$this->security->getUser(),
|
||||||
'CHILL_EVENT_SEE',
|
'CHILL_EVENT_SEE',
|
||||||
|
@@ -13,6 +13,4 @@ namespace Chill\FamilyMembersBundle;
|
|||||||
|
|
||||||
use Symfony\Component\HttpKernel\Bundle\Bundle;
|
use Symfony\Component\HttpKernel\Bundle\Bundle;
|
||||||
|
|
||||||
class ChillAMLIFamilyMembersBundle extends Bundle
|
class ChillAMLIFamilyMembersBundle extends Bundle {}
|
||||||
{
|
|
||||||
}
|
|
||||||
|
@@ -150,9 +150,7 @@ abstract class AbstractCRUDController extends AbstractController
|
|||||||
return new $class();
|
return new $class();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function customizeQuery(string $action, Request $request, $query): void
|
protected function customizeQuery(string $action, Request $request, $query): void {}
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function getActionConfig(string $action)
|
protected function getActionConfig(string $action)
|
||||||
{
|
{
|
||||||
|
@@ -242,13 +242,9 @@ class CRUDController extends AbstractController
|
|||||||
/**
|
/**
|
||||||
* Customize the form created by createFormFor.
|
* Customize the form created by createFormFor.
|
||||||
*/
|
*/
|
||||||
protected function customizeForm(string $action, FormInterface $form)
|
protected function customizeForm(string $action, FormInterface $form) {}
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function customizeQuery(string $action, Request $request, $query): void
|
protected function customizeQuery(string $action, Request $request, $query): void {}
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param $id
|
* @param $id
|
||||||
@@ -927,9 +923,7 @@ class CRUDController extends AbstractController
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function onFormValid(string $action, object $entity, FormInterface $form, Request $request)
|
protected function onFormValid(string $action, object $entity, FormInterface $form, Request $request) {}
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param $action
|
* @param $action
|
||||||
@@ -952,77 +946,55 @@ class CRUDController extends AbstractController
|
|||||||
/**
|
/**
|
||||||
* @param $entity
|
* @param $entity
|
||||||
*/
|
*/
|
||||||
protected function onPostFlush(string $action, $entity, FormInterface $form, Request $request)
|
protected function onPostFlush(string $action, $entity, FormInterface $form, Request $request) {}
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* method used by indexAction.
|
* method used by indexAction.
|
||||||
*
|
*
|
||||||
* @param mixed $query
|
* @param mixed $query
|
||||||
*/
|
*/
|
||||||
protected function onPostIndexBuildQuery(string $action, Request $request, int $totalItems, PaginatorInterface $paginator, $query)
|
protected function onPostIndexBuildQuery(string $action, Request $request, int $totalItems, PaginatorInterface $paginator, $query) {}
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* method used by indexAction.
|
* method used by indexAction.
|
||||||
*
|
*
|
||||||
* @param mixed $entities
|
* @param mixed $entities
|
||||||
*/
|
*/
|
||||||
protected function onPostIndexFetchQuery(string $action, Request $request, int $totalItems, PaginatorInterface $paginator, $entities)
|
protected function onPostIndexFetchQuery(string $action, Request $request, int $totalItems, PaginatorInterface $paginator, $entities) {}
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param $entity
|
* @param $entity
|
||||||
*/
|
*/
|
||||||
protected function onPostPersist(string $action, $entity, FormInterface $form, Request $request)
|
protected function onPostPersist(string $action, $entity, FormInterface $form, Request $request) {}
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param $entity
|
* @param $entity
|
||||||
*/
|
*/
|
||||||
protected function onPostRemove(string $action, $entity, FormInterface $form, Request $request)
|
protected function onPostRemove(string $action, $entity, FormInterface $form, Request $request) {}
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function onPreDelete(string $action, Request $request)
|
protected function onPreDelete(string $action, Request $request) {}
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param $entity
|
* @param $entity
|
||||||
*/
|
*/
|
||||||
protected function onPreFlush(string $action, $entity, FormInterface $form, Request $request)
|
protected function onPreFlush(string $action, $entity, FormInterface $form, Request $request) {}
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function onPreIndex(string $action, Request $request)
|
protected function onPreIndex(string $action, Request $request) {}
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* method used by indexAction.
|
* method used by indexAction.
|
||||||
*/
|
*/
|
||||||
protected function onPreIndexBuildQuery(string $action, Request $request, int $totalItems, PaginatorInterface $paginator)
|
protected function onPreIndexBuildQuery(string $action, Request $request, int $totalItems, PaginatorInterface $paginator) {}
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param $entity
|
* @param $entity
|
||||||
*/
|
*/
|
||||||
protected function onPrePersist(string $action, $entity, FormInterface $form, Request $request)
|
protected function onPrePersist(string $action, $entity, FormInterface $form, Request $request) {}
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param $entity
|
* @param $entity
|
||||||
*/
|
*/
|
||||||
protected function onPreRemove(string $action, $entity, FormInterface $form, Request $request)
|
protected function onPreRemove(string $action, $entity, FormInterface $form, Request $request) {}
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add ordering fields in the query build by self::queryEntities.
|
* Add ordering fields in the query build by self::queryEntities.
|
||||||
|
@@ -16,6 +16,4 @@ use Symfony\Component\Form\AbstractType;
|
|||||||
/**
|
/**
|
||||||
* Class CRUDDeleteEntityForm.
|
* Class CRUDDeleteEntityForm.
|
||||||
*/
|
*/
|
||||||
class CRUDDeleteEntityForm extends AbstractType
|
class CRUDDeleteEntityForm extends AbstractType {}
|
||||||
{
|
|
||||||
}
|
|
||||||
|
@@ -213,14 +213,8 @@ class LoadPostalCodesCommand extends Command
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class ExistingPostalCodeException extends Exception
|
class ExistingPostalCodeException extends Exception {}
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
class CountryCodeNotFoundException extends Exception
|
class CountryCodeNotFoundException extends Exception {}
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
class PostalCodeNotValidException extends Exception
|
class PostalCodeNotValidException extends Exception {}
|
||||||
{
|
|
||||||
}
|
|
||||||
|
@@ -11,176 +11,22 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace Chill\MainBundle\Controller;
|
namespace Chill\MainBundle\Controller;
|
||||||
|
|
||||||
|
use Chill\MainBundle\CRUD\Controller\CRUDController;
|
||||||
use Chill\MainBundle\Entity\Center;
|
use Chill\MainBundle\Entity\Center;
|
||||||
use Chill\MainBundle\Form\CenterType;
|
use Chill\MainBundle\Form\CenterType;
|
||||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
use Chill\MainBundle\Pagination\PaginatorInterface;
|
||||||
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
|
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
|
||||||
use Symfony\Component\HttpFoundation\Request;
|
use Symfony\Component\HttpFoundation\Request;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class CenterController.
|
* Class CenterController.
|
||||||
*/
|
*/
|
||||||
class CenterController extends AbstractController
|
class CenterController extends CRUDController
|
||||||
{
|
{
|
||||||
/**
|
protected function orderQuery(string $action, $query, Request $request, PaginatorInterface $paginator)
|
||||||
* Creates a new Center entity.
|
|
||||||
*/
|
|
||||||
public function createAction(Request $request)
|
|
||||||
{
|
{
|
||||||
$center = new Center();
|
$query->addOrderBy('e.name', 'ASC');
|
||||||
$form = $this->createCreateForm($center);
|
|
||||||
$form->handleRequest($request);
|
|
||||||
|
|
||||||
if ($form->isValid()) {
|
return parent::orderQuery($action, $query, $request, $paginator);
|
||||||
$em = $this->getDoctrine()->getManager();
|
|
||||||
$em->persist($center);
|
|
||||||
$em->flush();
|
|
||||||
|
|
||||||
return $this->redirect($this->generateUrl('admin_center'));
|
|
||||||
}
|
|
||||||
|
|
||||||
return $this->render('@ChillMain/Center/new.html.twig', [
|
|
||||||
'entity' => $center,
|
|
||||||
'form' => $form->createView(),
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Displays a form to edit an existing Center entity.
|
|
||||||
*
|
|
||||||
* @param mixed $id
|
|
||||||
*/
|
|
||||||
public function editAction($id)
|
|
||||||
{
|
|
||||||
$em = $this->getDoctrine()->getManager();
|
|
||||||
|
|
||||||
$center = $em->getRepository(\Chill\MainBundle\Entity\Center::class)->find($id);
|
|
||||||
|
|
||||||
if (!$center) {
|
|
||||||
throw $this->createNotFoundException('Unable to find Center entity.');
|
|
||||||
}
|
|
||||||
|
|
||||||
$editForm = $this->createEditForm($center);
|
|
||||||
|
|
||||||
return $this->render('@ChillMain/Center/edit.html.twig', [
|
|
||||||
'entity' => $center,
|
|
||||||
'edit_form' => $editForm->createView(),
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Lists all Center entities.
|
|
||||||
*/
|
|
||||||
public function indexAction()
|
|
||||||
{
|
|
||||||
$em = $this->getDoctrine()->getManager();
|
|
||||||
|
|
||||||
$entities = $em->getRepository(\Chill\MainBundle\Entity\Center::class)->findAll();
|
|
||||||
|
|
||||||
return $this->render('@ChillMain/Center/index.html.twig', [
|
|
||||||
'entities' => $entities,
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Displays a form to create a new Center entity.
|
|
||||||
*/
|
|
||||||
public function newAction()
|
|
||||||
{
|
|
||||||
$center = new Center();
|
|
||||||
$form = $this->createCreateForm($center);
|
|
||||||
|
|
||||||
return $this->render('@ChillMain/Center/new.html.twig', [
|
|
||||||
'entity' => $center,
|
|
||||||
'form' => $form->createView(),
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Finds and displays a Center entity.
|
|
||||||
*
|
|
||||||
* @param mixed $id
|
|
||||||
*/
|
|
||||||
public function showAction($id)
|
|
||||||
{
|
|
||||||
$em = $this->getDoctrine()->getManager();
|
|
||||||
|
|
||||||
$center = $em->getRepository(\Chill\MainBundle\Entity\Center::class)->find($id);
|
|
||||||
|
|
||||||
if (!$center) {
|
|
||||||
throw $this->createNotFoundException('Unable to find Center entity.');
|
|
||||||
}
|
|
||||||
|
|
||||||
return $this->render('@ChillMain/Center/show.html.twig', [
|
|
||||||
'entity' => $center,
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Edits an existing Center entity.
|
|
||||||
*
|
|
||||||
* @param mixed $id
|
|
||||||
*/
|
|
||||||
public function updateAction(Request $request, $id)
|
|
||||||
{
|
|
||||||
$em = $this->getDoctrine()->getManager();
|
|
||||||
|
|
||||||
$center = $em->getRepository(\Chill\MainBundle\Entity\Center::class)->find($id);
|
|
||||||
|
|
||||||
if (!$center) {
|
|
||||||
throw $this->createNotFoundException('Unable to find Center entity.');
|
|
||||||
}
|
|
||||||
|
|
||||||
$editForm = $this->createEditForm($center);
|
|
||||||
$editForm->handleRequest($request);
|
|
||||||
|
|
||||||
if ($editForm->isValid()) {
|
|
||||||
$em->flush();
|
|
||||||
|
|
||||||
return $this->redirect($this->generateUrl('admin_center_edit', ['id' => $id]));
|
|
||||||
}
|
|
||||||
|
|
||||||
return $this->render('@ChillMain/Center/edit.html.twig', [
|
|
||||||
'entity' => $center,
|
|
||||||
'edit_form' => $editForm->createView(),
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a form to create a Center entity.
|
|
||||||
*
|
|
||||||
* @param Center $center The entity
|
|
||||||
*
|
|
||||||
* @return \Symfony\Component\Form\Form The form
|
|
||||||
*/
|
|
||||||
private function createCreateForm(Center $center)
|
|
||||||
{
|
|
||||||
$form = $this->createForm(CenterType::class, $center, [
|
|
||||||
'action' => $this->generateUrl('admin_center_create'),
|
|
||||||
'method' => 'POST',
|
|
||||||
]);
|
|
||||||
|
|
||||||
$form->add('submit', SubmitType::class, ['label' => 'Create']);
|
|
||||||
|
|
||||||
return $form;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a form to edit a Center entity.
|
|
||||||
*
|
|
||||||
* @param Center $center The entity
|
|
||||||
*
|
|
||||||
* @return \Symfony\Component\Form\Form The form
|
|
||||||
*/
|
|
||||||
private function createEditForm(Center $center)
|
|
||||||
{
|
|
||||||
$form = $this->createForm(CenterType::class, $center, [
|
|
||||||
'action' => $this->generateUrl('admin_center_update', ['id' => $center->getId()]),
|
|
||||||
'method' => 'PUT',
|
|
||||||
]);
|
|
||||||
|
|
||||||
$form->add('submit', SubmitType::class, ['label' => 'Update']);
|
|
||||||
|
|
||||||
return $form;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -13,6 +13,4 @@ namespace Chill\MainBundle\Controller;
|
|||||||
|
|
||||||
use Chill\MainBundle\CRUD\Controller\CRUDController;
|
use Chill\MainBundle\CRUD\Controller\CRUDController;
|
||||||
|
|
||||||
class LocationTypeController extends CRUDController
|
class LocationTypeController extends CRUDController {}
|
||||||
{
|
|
||||||
}
|
|
||||||
|
@@ -44,7 +44,5 @@ class LoginController extends AbstractController
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function LoginCheckAction(Request $request)
|
public function LoginCheckAction(Request $request) {}
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@@ -50,8 +50,7 @@ final class PermissionsGroupController extends AbstractController
|
|||||||
private readonly EntityManagerInterface $em,
|
private readonly EntityManagerInterface $em,
|
||||||
private readonly PermissionsGroupRepository $permissionsGroupRepository,
|
private readonly PermissionsGroupRepository $permissionsGroupRepository,
|
||||||
private readonly RoleScopeRepository $roleScopeRepository,
|
private readonly RoleScopeRepository $roleScopeRepository,
|
||||||
) {
|
) {}
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*/
|
*/
|
||||||
|
@@ -27,8 +27,7 @@ final readonly class UserExportController
|
|||||||
private UserRepositoryInterface $userRepository,
|
private UserRepositoryInterface $userRepository,
|
||||||
private Security $security,
|
private Security $security,
|
||||||
private TranslatorInterface $translator,
|
private TranslatorInterface $translator,
|
||||||
) {
|
) {}
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @throws \League\Csv\CannotInsertRecord
|
* @throws \League\Csv\CannotInsertRecord
|
||||||
|
@@ -88,7 +88,6 @@ class CronManager implements CronManagerInterface
|
|||||||
foreach ($orderedJobs as $job) {
|
foreach ($orderedJobs as $job) {
|
||||||
if ($job->canRun($lasts[$job->getKey()] ?? null)) {
|
if ($job->canRun($lasts[$job->getKey()] ?? null)) {
|
||||||
if (array_key_exists($job->getKey(), $lasts)) {
|
if (array_key_exists($job->getKey(), $lasts)) {
|
||||||
|
|
||||||
$executionData = $lasts[$job->getKey()]->getLastExecutionData();
|
$executionData = $lasts[$job->getKey()]->getLastExecutionData();
|
||||||
|
|
||||||
$this->entityManager
|
$this->entityManager
|
||||||
|
@@ -12,6 +12,7 @@ declare(strict_types=1);
|
|||||||
namespace Chill\MainBundle\DependencyInjection;
|
namespace Chill\MainBundle\DependencyInjection;
|
||||||
|
|
||||||
use Chill\MainBundle\Controller\AddressApiController;
|
use Chill\MainBundle\Controller\AddressApiController;
|
||||||
|
use Chill\MainBundle\Controller\CenterController;
|
||||||
use Chill\MainBundle\Controller\CivilityApiController;
|
use Chill\MainBundle\Controller\CivilityApiController;
|
||||||
use Chill\MainBundle\Controller\CivilityController;
|
use Chill\MainBundle\Controller\CivilityController;
|
||||||
use Chill\MainBundle\Controller\CountryController;
|
use Chill\MainBundle\Controller\CountryController;
|
||||||
@@ -44,6 +45,7 @@ use Chill\MainBundle\Doctrine\DQL\Unaccent;
|
|||||||
use Chill\MainBundle\Doctrine\ORM\Hydration\FlatHierarchyEntityHydrator;
|
use Chill\MainBundle\Doctrine\ORM\Hydration\FlatHierarchyEntityHydrator;
|
||||||
use Chill\MainBundle\Doctrine\Type\NativeDateIntervalType;
|
use Chill\MainBundle\Doctrine\Type\NativeDateIntervalType;
|
||||||
use Chill\MainBundle\Doctrine\Type\PointType;
|
use Chill\MainBundle\Doctrine\Type\PointType;
|
||||||
|
use Chill\MainBundle\Entity\Center;
|
||||||
use Chill\MainBundle\Entity\Civility;
|
use Chill\MainBundle\Entity\Civility;
|
||||||
use Chill\MainBundle\Entity\Country;
|
use Chill\MainBundle\Entity\Country;
|
||||||
use Chill\MainBundle\Entity\GeographicalUnitLayer;
|
use Chill\MainBundle\Entity\GeographicalUnitLayer;
|
||||||
@@ -53,6 +55,7 @@ use Chill\MainBundle\Entity\LocationType;
|
|||||||
use Chill\MainBundle\Entity\Regroupment;
|
use Chill\MainBundle\Entity\Regroupment;
|
||||||
use Chill\MainBundle\Entity\User;
|
use Chill\MainBundle\Entity\User;
|
||||||
use Chill\MainBundle\Entity\UserJob;
|
use Chill\MainBundle\Entity\UserJob;
|
||||||
|
use Chill\MainBundle\Form\CenterType;
|
||||||
use Chill\MainBundle\Form\CivilityType;
|
use Chill\MainBundle\Form\CivilityType;
|
||||||
use Chill\MainBundle\Form\CountryType;
|
use Chill\MainBundle\Form\CountryType;
|
||||||
use Chill\MainBundle\Form\LanguageType;
|
use Chill\MainBundle\Form\LanguageType;
|
||||||
@@ -524,6 +527,27 @@ class ChillMainExtension extends Extension implements
|
|||||||
],
|
],
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
|
[
|
||||||
|
'class' => Center::class,
|
||||||
|
'name' => 'center',
|
||||||
|
'base_path' => '/admin/center',
|
||||||
|
'form_class' => CenterType::class,
|
||||||
|
'controller' => CenterController::class,
|
||||||
|
'actions' => [
|
||||||
|
'index' => [
|
||||||
|
'role' => 'ROLE_ADMIN',
|
||||||
|
'template' => '@ChillMain/Admin/Center/index.html.twig',
|
||||||
|
],
|
||||||
|
'new' => [
|
||||||
|
'role' => 'ROLE_ADMIN',
|
||||||
|
'template' => '@ChillMain/Admin/Center/new.html.twig',
|
||||||
|
],
|
||||||
|
'edit' => [
|
||||||
|
'role' => 'ROLE_ADMIN',
|
||||||
|
'template' => '@ChillMain/Admin/Center/edit.html.twig',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
],
|
||||||
],
|
],
|
||||||
'apis' => [
|
'apis' => [
|
||||||
[
|
[
|
||||||
|
@@ -48,6 +48,11 @@ class Center implements HasCenterInterface
|
|||||||
*/
|
*/
|
||||||
private string $name = '';
|
private string $name = '';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ORM\Column(type="boolean")
|
||||||
|
*/
|
||||||
|
private bool $isActive = true;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var Collection<Regroupment>
|
* @var Collection<Regroupment>
|
||||||
* @ORM\ManyToMany(targetEntity=Regroupment::class, mappedBy="centers")
|
* @ORM\ManyToMany(targetEntity=Regroupment::class, mappedBy="centers")
|
||||||
@@ -121,6 +126,11 @@ class Center implements HasCenterInterface
|
|||||||
return $this->regroupments;
|
return $this->regroupments;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getIsActive(): bool
|
||||||
|
{
|
||||||
|
return $this->isActive;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param $name
|
* @param $name
|
||||||
*
|
*
|
||||||
@@ -132,4 +142,11 @@ class Center implements HasCenterInterface
|
|||||||
|
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function setIsActive(bool $isActive): self
|
||||||
|
{
|
||||||
|
$this->isActive = $isActive;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -175,9 +175,7 @@ class User implements UserInterface
|
|||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function eraseCredentials()
|
public function eraseCredentials() {}
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getAbsenceStart(): ?DateTimeImmutable
|
public function getAbsenceStart(): ?DateTimeImmutable
|
||||||
{
|
{
|
||||||
|
@@ -26,8 +26,7 @@ final readonly class ExportFormHelper
|
|||||||
private AuthorizationHelperForCurrentUserInterface $authorizationHelper,
|
private AuthorizationHelperForCurrentUserInterface $authorizationHelper,
|
||||||
private ExportManager $exportManager,
|
private ExportManager $exportManager,
|
||||||
private FormFactoryInterface $formFactory,
|
private FormFactoryInterface $formFactory,
|
||||||
) {
|
) {}
|
||||||
}
|
|
||||||
|
|
||||||
public function getDefaultData(string $step, ExportInterface|DirectExportInterface $export, array $options = []): array
|
public function getDefaultData(string $step, ExportInterface|DirectExportInterface $export, array $options = []): array
|
||||||
{
|
{
|
||||||
|
@@ -20,6 +20,4 @@ namespace Chill\MainBundle\Export;
|
|||||||
*
|
*
|
||||||
* When used, the `ExportManager` will not handle aggregator for this class.
|
* When used, the `ExportManager` will not handle aggregator for this class.
|
||||||
*/
|
*/
|
||||||
interface ListInterface extends ExportInterface
|
interface ListInterface extends ExportInterface {}
|
||||||
{
|
|
||||||
}
|
|
||||||
|
@@ -11,7 +11,10 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace Chill\MainBundle\Form;
|
namespace Chill\MainBundle\Form;
|
||||||
|
|
||||||
|
use Chill\MainBundle\Entity\Center;
|
||||||
|
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
|
||||||
use Symfony\Component\Form\AbstractType;
|
use Symfony\Component\Form\AbstractType;
|
||||||
|
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
|
||||||
use Symfony\Component\Form\Extension\Core\Type\TextType;
|
use Symfony\Component\Form\Extension\Core\Type\TextType;
|
||||||
use Symfony\Component\Form\FormBuilderInterface;
|
use Symfony\Component\Form\FormBuilderInterface;
|
||||||
use Symfony\Component\OptionsResolver\OptionsResolver;
|
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||||
@@ -21,24 +24,18 @@ class CenterType extends AbstractType
|
|||||||
public function buildForm(FormBuilderInterface $builder, array $options)
|
public function buildForm(FormBuilderInterface $builder, array $options)
|
||||||
{
|
{
|
||||||
$builder
|
$builder
|
||||||
->add('name', TextType::class);
|
->add('name', TextType::class, [
|
||||||
|
'label' => 'Nom',
|
||||||
|
])
|
||||||
|
->add('isActive', CheckboxType::class, [
|
||||||
|
'label' => 'Actif ?',
|
||||||
|
'required' => false,
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @param OptionsResolverInterface $resolver
|
|
||||||
*/
|
|
||||||
public function configureOptions(OptionsResolver $resolver)
|
public function configureOptions(OptionsResolver $resolver)
|
||||||
{
|
{
|
||||||
$resolver->setDefaults([
|
$resolver
|
||||||
'data_class' => \Chill\MainBundle\Entity\Center::class,
|
->setDefault('class', Center::class);
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public function getBlockPrefix()
|
|
||||||
{
|
|
||||||
return 'chill_mainbundle_center';
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -19,9 +19,7 @@ use Symfony\Component\OptionsResolver\OptionsResolver;
|
|||||||
|
|
||||||
class AggregatorType extends AbstractType
|
class AggregatorType extends AbstractType
|
||||||
{
|
{
|
||||||
public function __construct()
|
public function __construct() {}
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public function buildForm(FormBuilderInterface $builder, array $options)
|
public function buildForm(FormBuilderInterface $builder, array $options)
|
||||||
{
|
{
|
||||||
|
@@ -21,9 +21,7 @@ class FilterType extends AbstractType
|
|||||||
{
|
{
|
||||||
public const ENABLED_FIELD = 'enabled';
|
public const ENABLED_FIELD = 'enabled';
|
||||||
|
|
||||||
public function __construct()
|
public function __construct() {}
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public function buildForm(FormBuilderInterface $builder, array $options)
|
public function buildForm(FormBuilderInterface $builder, array $options)
|
||||||
{
|
{
|
||||||
|
@@ -57,12 +57,14 @@ final class PickCenterType extends AbstractType
|
|||||||
$export->requiredRole()
|
$export->requiredRole()
|
||||||
);
|
);
|
||||||
|
|
||||||
|
$centersActive = array_filter($centers, fn (Center $c) => $c->getIsActive());
|
||||||
|
|
||||||
// order alphabetically
|
// order alphabetically
|
||||||
usort($centers, fn (Center $a, Center $b) => $a->getCenter() <=> $b->getName());
|
usort($centersActive, fn (Center $a, Center $b) => $a->getCenter() <=> $b->getName());
|
||||||
|
|
||||||
$builder->add('center', EntityType::class, [
|
$builder->add('center', EntityType::class, [
|
||||||
'class' => Center::class,
|
'class' => Center::class,
|
||||||
'choices' => $centers,
|
'choices' => $centersActive,
|
||||||
'label' => 'center',
|
'label' => 'center',
|
||||||
'multiple' => true,
|
'multiple' => true,
|
||||||
'expanded' => true,
|
'expanded' => true,
|
||||||
|
@@ -122,7 +122,6 @@ final class FilterOrderType extends \Symfony\Component\Form\AbstractType
|
|||||||
foreach ($helper->getUserPickers() as $name => [
|
foreach ($helper->getUserPickers() as $name => [
|
||||||
'label' => $label, 'options' => $opts
|
'label' => $label, 'options' => $opts
|
||||||
]) {
|
]) {
|
||||||
|
|
||||||
$userPickersBuilder->add(
|
$userPickersBuilder->add(
|
||||||
$name,
|
$name,
|
||||||
PickUserDynamicType::class,
|
PickUserDynamicType::class,
|
||||||
@@ -136,7 +135,6 @@ final class FilterOrderType extends \Symfony\Component\Form\AbstractType
|
|||||||
|
|
||||||
$builder->add($userPickersBuilder);
|
$builder->add($userPickersBuilder);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function buildCheckboxChoices(array $choices, array $trans = []): array
|
public static function buildCheckboxChoices(array $choices, array $trans = []): array
|
||||||
|
@@ -61,6 +61,8 @@ class PickCenterType extends AbstractType
|
|||||||
{
|
{
|
||||||
$centers = $this->getReachableCenters($options['role'], $options['scopes']);
|
$centers = $this->getReachableCenters($options['role'], $options['scopes']);
|
||||||
|
|
||||||
|
$centersActive = array_filter($centers, fn (Center $c) => $c->getIsActive());
|
||||||
|
|
||||||
if (count($centers) <= 1) {
|
if (count($centers) <= 1) {
|
||||||
$multiple = $options['choice_options']['multiple'] ?? false;
|
$multiple = $options['choice_options']['multiple'] ?? false;
|
||||||
$builder->add('center', HiddenType::class);
|
$builder->add('center', HiddenType::class);
|
||||||
@@ -75,7 +77,7 @@ class PickCenterType extends AbstractType
|
|||||||
$options['choice_options'],
|
$options['choice_options'],
|
||||||
[
|
[
|
||||||
'class' => Center::class,
|
'class' => Center::class,
|
||||||
'choices' => $centers,
|
'choices' => $centersActive,
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
@@ -67,6 +67,7 @@ class UserType extends AbstractType
|
|||||||
'class' => Center::class,
|
'class' => Center::class,
|
||||||
'query_builder' => static function (EntityRepository $er) {
|
'query_builder' => static function (EntityRepository $er) {
|
||||||
$qb = $er->createQueryBuilder('c');
|
$qb = $er->createQueryBuilder('c');
|
||||||
|
$qb->where($qb->expr()->eq('c.isActive', 'true'));
|
||||||
$qb->addOrderBy('c.name');
|
$qb->addOrderBy('c.name');
|
||||||
|
|
||||||
return $qb;
|
return $qb;
|
||||||
|
@@ -40,13 +40,18 @@ class NotificationMailer
|
|||||||
|
|
||||||
public function postPersistComment(NotificationComment $comment, PostPersistEventArgs $eventArgs): void
|
public function postPersistComment(NotificationComment $comment, PostPersistEventArgs $eventArgs): void
|
||||||
{
|
{
|
||||||
foreach (
|
$dests = [$comment->getNotification()->getSender(), ...$comment->getNotification()->getAddressees()->toArray()];
|
||||||
array_merge(
|
|
||||||
$comment->getNotification()->getAddressees()->toArray(),
|
$uniqueDests = [];
|
||||||
[$comment->getNotification()->getSender()]
|
foreach ($dests as $dest) {
|
||||||
) as $dest
|
// avoid duplication
|
||||||
) {
|
if (in_array(spl_object_hash($dest), $uniqueDests, true)) {
|
||||||
if (null === $dest->getEmail() || $comment->getCreatedBy() !== $dest) {
|
continue;
|
||||||
|
}
|
||||||
|
$uniqueDests[] = spl_object_hash($dest);
|
||||||
|
|
||||||
|
// do not send if the sender does not have any email, nor to the creator of the comment
|
||||||
|
if (null === $dest->getEmail() || $comment->getCreatedBy() === $dest) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
$email = new TemplatedEmail();
|
$email = new TemplatedEmail();
|
||||||
|
@@ -13,6 +13,4 @@ namespace Chill\MainBundle\Notification\Exception;
|
|||||||
|
|
||||||
use RuntimeException;
|
use RuntimeException;
|
||||||
|
|
||||||
class NotificationHandlerNotFound extends RuntimeException
|
class NotificationHandlerNotFound extends RuntimeException {}
|
||||||
{
|
|
||||||
}
|
|
||||||
|
@@ -16,6 +16,4 @@ use Redis;
|
|||||||
/**
|
/**
|
||||||
* Redis client configured by chill main.
|
* Redis client configured by chill main.
|
||||||
*/
|
*/
|
||||||
class ChillRedis extends Redis
|
class ChillRedis extends Redis {}
|
||||||
{
|
|
||||||
}
|
|
||||||
|
@@ -29,9 +29,12 @@ final class CenterRepository implements CenterRepositoryInterface
|
|||||||
return $this->repository->find($id, $lockMode, $lockVersion);
|
return $this->repository->find($id, $lockMode, $lockVersion);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Center[]
|
||||||
|
*/
|
||||||
public function findActive(): array
|
public function findActive(): array
|
||||||
{
|
{
|
||||||
return $this->findAll();
|
return $this->repository->findBy(['isActive' => true], ['name' => 'ASC']);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -0,0 +1,11 @@
|
|||||||
|
{% extends '@ChillMain/CRUD/Admin/index.html.twig' %}
|
||||||
|
|
||||||
|
{% block title %}
|
||||||
|
{% include('@ChillMain/CRUD/_edit_title.html.twig') %}
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block admin_content %}
|
||||||
|
{% embed '@ChillMain/CRUD/_edit_content.html.twig' %}
|
||||||
|
{% block content_form_actions_save_and_show %}{% endblock %}
|
||||||
|
{% endembed %}
|
||||||
|
{% endblock admin_content %}
|
@@ -0,0 +1,39 @@
|
|||||||
|
{% extends '@ChillMain/CRUD/Admin/index.html.twig' %}
|
||||||
|
|
||||||
|
{% block admin_content %}
|
||||||
|
{% embed '@ChillMain/CRUD/_index.html.twig' %}
|
||||||
|
{% block table_entities_thead_tr %}
|
||||||
|
<th>{{ 'Label'|trans }}</th>
|
||||||
|
<th>{{ 'Active'|trans }}</th>
|
||||||
|
<th> </th>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block table_entities_tbody %}
|
||||||
|
{% for entity in entities %}
|
||||||
|
<tr>
|
||||||
|
<td>{{ entity.name }}</td>
|
||||||
|
<td style="text-align:center">
|
||||||
|
{% if entity.isActive %}
|
||||||
|
<i class="fa fa-check-square-o"></i>
|
||||||
|
{% else %}
|
||||||
|
<i class="fa fa-square-o"></i>
|
||||||
|
{% endif %}
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<ul class="record_actions">
|
||||||
|
<li>
|
||||||
|
<a href="{{ chill_path_add_return_path('chill_crud_center_edit', { 'id': entity.id }) }}" class="btn btn-edit"></a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block actions_before %}
|
||||||
|
<li class='cancel'>
|
||||||
|
<a href="{{ path('chill_main_admin_central') }}" class="btn btn-cancel">{{'Back to the admin'|trans}}</a>
|
||||||
|
</li>
|
||||||
|
{% endblock %}
|
||||||
|
{% endembed %}
|
||||||
|
{% endblock %}
|
@@ -0,0 +1,11 @@
|
|||||||
|
{% extends '@ChillMain/CRUD/Admin/index.html.twig' %}
|
||||||
|
|
||||||
|
{% block title %}
|
||||||
|
{% include('@ChillMain/CRUD/_new_title.html.twig') %}
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block admin_content %}
|
||||||
|
{% embed '@ChillMain/CRUD/_new_content.html.twig' %}
|
||||||
|
{% block content_form_actions_save_and_show %}{% endblock %}
|
||||||
|
{% endembed %}
|
||||||
|
{% endblock admin_content %}
|
@@ -1,23 +0,0 @@
|
|||||||
{% extends '@ChillMain/Admin/layoutWithVerticalMenu.html.twig' %}
|
|
||||||
|
|
||||||
{% block title %}{{ 'Center edit'|trans }}{% endblock %}
|
|
||||||
|
|
||||||
{% block admin_content -%}
|
|
||||||
<h1>{{ 'Center edit'|trans }}</h1>
|
|
||||||
|
|
||||||
{{ form_start(edit_form) }}
|
|
||||||
{{ form_row(edit_form.name) }}
|
|
||||||
|
|
||||||
<ul class="record_actions sticky-form-buttons">
|
|
||||||
<li class='cancel'>
|
|
||||||
<a href="{{ path('admin_center') }}" class="btn btn-cancel">
|
|
||||||
{{ 'Back to the list'|trans }}
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
{{ form_widget(edit_form.submit, { 'attr' : { 'class' : 'btn btn-update' }}) }}
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
{{ form_end(edit_form) }}
|
|
||||||
{% endblock %}
|
|
@@ -1,50 +0,0 @@
|
|||||||
{% extends '@ChillMain/CRUD/Admin/index.html.twig' %}
|
|
||||||
|
|
||||||
{% block title %}{{ 'Center list'|trans }}{% endblock %}
|
|
||||||
|
|
||||||
{% block admin_content -%}
|
|
||||||
{% embed '@ChillMain/CRUD/_index.html.twig' %}
|
|
||||||
|
|
||||||
{% block index_header %}
|
|
||||||
<h1>{{ 'Center list'|trans }}</h1>
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block filter_order %}{% endblock %}
|
|
||||||
|
|
||||||
{% block table_entities_thead_tr %}
|
|
||||||
<th>id</th>
|
|
||||||
<th>{{ 'Name'|trans }}</th>
|
|
||||||
<th>{{ 'Actions'|trans }}</th>
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block table_entities_tbody %}
|
|
||||||
{% for entity in entities %}
|
|
||||||
<tr>
|
|
||||||
<td>{{ entity.id }}</td>
|
|
||||||
<td>{{ entity.name }}</td>
|
|
||||||
<td>
|
|
||||||
<ul class="record_actions">
|
|
||||||
<li>
|
|
||||||
<a href="{{ path('admin_center_edit', { 'id': entity.id }) }}" class="btn btn-edit">{{ 'edit'|trans }}</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
{% endfor %}
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block pagination %}{% endblock %}
|
|
||||||
|
|
||||||
{% block list_actions %}
|
|
||||||
<ul class="record_actions sticky-form-buttons">
|
|
||||||
<li class='cancel'>
|
|
||||||
<a href="{{ path('chill_main_admin_central') }}" class="btn btn-cancel">{{'Back to the admin'|trans}}</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a href="{{ path('admin_center_new') }}" class="btn btn-create">{{ 'Create a new center'|trans }}</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
{% endblock list_actions %}
|
|
||||||
|
|
||||||
{% endembed %}
|
|
||||||
{% endblock %}
|
|
@@ -1,23 +0,0 @@
|
|||||||
{% extends '@ChillMain/Admin/layoutWithVerticalMenu.html.twig' %}
|
|
||||||
|
|
||||||
{% block title %}{{ 'Center creation'|trans }}{% endblock %}
|
|
||||||
|
|
||||||
{% block admin_content -%}
|
|
||||||
<h1>{{ 'Center creation'|trans }}</h1>
|
|
||||||
|
|
||||||
{{ form_start(form) }}
|
|
||||||
{{ form_row(form.name) }}
|
|
||||||
|
|
||||||
<ul class="record_actions sticky-form-buttons">
|
|
||||||
<li class='cancel'>
|
|
||||||
<a href="{{ path('admin_center') }}" class="btn btn-cancel">
|
|
||||||
{{ 'Back to the list'|trans }}
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
{{ form_widget(form.submit, { 'attr' : { 'class' : 'btn btn-save' }}) }}
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
{{ form_end(form) }}
|
|
||||||
{% endblock %}
|
|
@@ -49,7 +49,7 @@ class AdminUserMenuBuilder implements LocalMenuBuilderInterface
|
|||||||
]);
|
]);
|
||||||
|
|
||||||
$menu->addChild('Center list', [
|
$menu->addChild('Center list', [
|
||||||
'route' => 'admin_center',
|
'route' => 'chill_crud_center_index',
|
||||||
])->setExtras(['order' => 1010]);
|
])->setExtras(['order' => 1010]);
|
||||||
|
|
||||||
$menu->addChild('Regroupements des centres', [
|
$menu->addChild('Regroupements des centres', [
|
||||||
|
@@ -13,6 +13,4 @@ namespace Chill\MainBundle\Search;
|
|||||||
|
|
||||||
use Exception;
|
use Exception;
|
||||||
|
|
||||||
class ParsingException extends Exception
|
class ParsingException extends Exception {}
|
||||||
{
|
|
||||||
}
|
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user