Compare commits

..

3 Commits

2265 changed files with 10202 additions and 24163 deletions

View File

@@ -1,8 +0,0 @@
kind: Feature
body: |-
Electronic signature
Implementation of the electronic signature for documents within chill.
time: 2024-06-14T15:32:36.875891692+02:00
custom:
Issue: ""

View File

@@ -1,7 +0,0 @@
kind: Feature
body: The behavoir of the voters for stored objects is adjusted so as to limit edit
and delete possibilities to users related to the activity, social action or workflow
entity.
time: 2024-06-14T15:35:37.582159301+02:00
custom:
Issue: "286"

View File

@@ -1,5 +0,0 @@
kind: Feature
body: Metadata form added for person signatures
time: 2024-07-18T15:12:33.8134266+02:00
custom:
Issue: "288"

View File

@@ -1,6 +0,0 @@
kind: Fixed
body: Show only the current referrer in the page "show" for an accompanying period
workf
time: 2024-09-16T15:18:43.017401122+02:00
custom:
Issue: "308"

View File

@@ -1,4 +1,4 @@
## v2.23.0 - 2024-07-23 & 2024-07-19
## v2.23.0 - 2024-07-23
### Feature
* ([#221](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/221)) [DX] move async-upload-bundle features into chill-bundles
* Add job bundle (module emploi)
@@ -6,25 +6,6 @@
* Upgrade CKEditor and refactor configuration with use of typescript
* ([#123](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/123)) Add a button to duplicate calendar ranges from a week to another one
* [admin] filter users by active / inactive in the admin user's list
* ([#273](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/273)) Add the possibility to mark all notifications as read
* Handle duplicate reference id in the import of reference addresses
* Do not update the "createdAt" column when importing postal code which does not change
* Display filename on file upload within the UI interface
### Fixed
* Fix resolving of centers for an household, which will fix in turn the access control
* Resolved type hinting error in activity list export
* ([#271](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/271)) Take into account the acp closing date in the acp works date filter
### Traduction française des principaux changements
- Ajout d'un bouton pour dupliquer les périodes de disponibilités d'une semaine à une autre;
- dans l'interface d'administration, filtre sur les utilisateurs actifs. Par défaut, seul les utilisateurs
actifs sont affichés;
- Nouveau bouton pour indiquer toutes les notifications comme lues;
- Améliorations sur l'import des adresses et des codes postaux;
- Affiche le nom du fichier déposé quand on téléverse un fichier depuis le poste de travail local;
- Agrandit l'icône du type de fichier dans l'interface de dépôt de fichier;
- correction: tient compte de la date de fermeture du parcours dans les filtres sur les actions d'accompagnement.

View File

@@ -1,3 +0,0 @@
## v2.24.0 - 2024-09-11
### Feature
* ([#306](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/306)) When a document is converted or downloaded in the browser, this document is removed from the browser memory after 45s. Future click on the button re-download the document.

View File

@@ -1,5 +0,0 @@
## v3.0.0 - 2024-08-26
### Fixed
* Fix delete action for accompanying periods in draft state
* Fix connection to azure when making an calendar event in chill
* CollectionType js fixes for remove button and adding multiple entries

View File

@@ -1,3 +0,0 @@
## v3.1.0 - 2024-08-30
### Feature
* Add export aggregator to aggregate activities by household + filter persons that are not part of an accompanyingperiod during a certain timeframe.

2
.env
View File

@@ -23,7 +23,7 @@ TRUSTED_HOSTS='^(localhost|example\.com|nginx)$'
###< symfony/framework-bundle ###
## Wopi server for editing documents online
EDITOR_SERVER=http://collabora:9980
WOPI_SERVER=http://collabora:9980
# must be manually set in .env.local
# ADMIN_PASSWORD=

View File

@@ -41,5 +41,3 @@ DATABASE_URL="postgresql://postgres:postgres@db:5432/test?serverVersion=14&chars
ASYNC_UPLOAD_TEMP_URL_KEY=
ASYNC_UPLOAD_TEMP_URL_BASE_PATH=
ASYNC_UPLOAD_TEMP_URL_CONTAINER=
EDITOR_SERVER=https://localhost:9980

View File

@@ -122,7 +122,7 @@ unit_tests:
- php tests/console chill:db:sync-views --env=test
- php -d memory_limit=2G tests/console cache:clear --env=test
- php -d memory_limit=3G tests/console doctrine:fixtures:load -n --env=test
- php -d memory_limit=4G bin/phpunit --colors=never --exclude-group dbIntensive,openstack-integration,collabora-integration
- php -d memory_limit=4G bin/phpunit --colors=never --exclude-group dbIntensive
artifacts:
expire_in: 1 day
paths:
@@ -138,4 +138,4 @@ release:
- echo "running release_job"
release:
tag_name: '$CI_COMMIT_TAG'
description: "./.changes/$CI_COMMIT_TAG.md"
description: "./.changes/v$CI_COMMIT_TAG.md"

View File

@@ -6,43 +6,8 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html),
and is generated by [Changie](https://github.com/miniscruff/changie).
## v3.1.0 - 2024-08-30
## v2.23.0 - 2024-07-23
### Feature
* Add export aggregator to aggregate activities by household + filter persons that are not part of an accompanyingperiod during a certain timeframe.
## v3.0.0 - 2024-08-26
### Fixed
* Fix delete action for accompanying periods in draft state
* Fix connection to azure when making an calendar event in chill
* CollectionType js fixes for remove button and adding multiple entries
## v2.24.0 - 2024-09-11
### Feature
* ([#306](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/306)) When a document is converted or downloaded in the browser, this document is removed from the browser memory after 45s. Future click on the button re-download the document.
## v2.23.0 - 2024-07-19 & 2024-07-23
### Feature
* ([#123](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/123)) Add a button to duplicate calendar ranges from a week to another one
* [admin] filter users by active / inactive in the admin user's list
* ([#273](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/273)) Add the possibility to mark all notifications as read
* Handle duplicate reference id in the import of reference addresses
* Do not update the "createdAt" column when importing postal code which does not change
* Display filename on file upload within the UI interface
### Fixed
* ([#271](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/271)) Take into account the acp closing date in the acp works date filter
### Traduction française des principaux changements
- Ajout d'un bouton pour dupliquer les périodes de disponibilités d'une semaine à une autre;
- dans l'interface d'administration, filtre sur les utilisateurs actifs. Par défaut, seul les utilisateurs
actifs sont affichés;
- Nouveau bouton pour indiquer toutes les notifications comme lues;
- Améliorations sur l'import des adresses et des codes postaux;
- Affiche le nom du fichier déposé quand on téléverse un fichier depuis le poste de travail local;
- Agrandit l'icône du type de fichier dans l'interface de dépôt de fichier;
- correction: tient compte de la date de fermeture du parcours dans les filtres sur les actions d'accompagnement.
* ([#221](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/221)) [DX] move async-upload-bundle features into chill-bundles
* Add job bundle (module emploi)
* Upgrade import of address list to the last version of compiled addresses of belgian-best-address

View File

@@ -8,7 +8,7 @@
"social worker"
],
"require": {
"php": "^8.2",
"php": "^8.3",
"ext-dom": "*",
"ext-json": "*",
"ext-openssl": "*",
@@ -30,51 +30,48 @@
"ovh/ovh": "^3.0",
"phpoffice/phpspreadsheet": "^1.16",
"ramsey/uuid-doctrine": "^1.7",
"sensio/framework-extra-bundle": "^5.5",
"smalot/pdfparser": "^2.10",
"sensio/framework-extra-bundle": "^6.0",
"spomky-labs/base64url": "^2.0",
"symfony/asset": "^5.4",
"symfony/browser-kit": "^5.4",
"symfony/cache": "^5.4",
"symfony/asset": "6.0.*",
"symfony/browser-kit": "6.0.*",
"symfony/cache": "6.0.*",
"symfony/clock": "^6.2",
"symfony/config": "^5.4",
"symfony/console": "^5.4",
"symfony/css-selector": "^5.4",
"symfony/dom-crawler": "^5.4",
"symfony/error-handler": "^5.4",
"symfony/event-dispatcher": "^5.4",
"symfony/event-dispatcher-contracts": "^2.4",
"symfony/expression-language": "^5.4",
"symfony/filesystem": "^5.4",
"symfony/finder": "^5.4",
"symfony/form": "^5.4",
"symfony/framework-bundle": "^5.4",
"symfony/http-client": "^5.4",
"symfony/http-foundation": "^5.4",
"symfony/intl": "^5.4",
"symfony/mailer": "^5.4",
"symfony/messenger": "^5.4",
"symfony/mime": "^5.4",
"symfony/config": "^6.0",
"symfony/console": "6.0.*",
"symfony/css-selector": "6.0.*",
"symfony/dom-crawler": "6.0.*",
"symfony/error-handler": "6.0.*",
"symfony/event-dispatcher": "6.0.*",
"symfony/expression-language": "6.0.*",
"symfony/filesystem": "6.0.*",
"symfony/finder": "6.0.*",
"symfony/form": "6.0.*",
"symfony/framework-bundle": "6.0.*",
"symfony/http-client": "6.0.*",
"symfony/http-foundation": "6.0.*",
"symfony/intl": "6.0.*",
"symfony/mailer": "6.0.*",
"symfony/messenger": "6.0.*",
"symfony/mime": "6.0.*",
"symfony/monolog-bundle": "^3.5",
"symfony/options-resolver": "^5.4",
"symfony/process": "^5.4",
"symfony/property-access": "^5.4",
"symfony/property-info": "^5.4",
"symfony/routing": "^5.4",
"symfony/security-bundle": "^5.4",
"symfony/security-core": "^5.4",
"symfony/security-csrf": "^5.4",
"symfony/security-guard": "^5.4",
"symfony/security-http": "^5.4",
"symfony/serializer": "^5.4",
"symfony/string": "^5.4",
"symfony/templating": "^5.4",
"symfony/translation": "^5.4",
"symfony/twig-bundle": "^5.4",
"symfony/validator": "^5.4",
"symfony/options-resolver": "6.0.*",
"symfony/process": "6.0.*",
"symfony/property-access": "6.0.*",
"symfony/property-info": "6.0.*",
"symfony/routing": "6.0.*",
"symfony/security-bundle": "^6.0",
"symfony/security-core": "6.0.*",
"symfony/security-csrf": "6.0.*",
"symfony/security-http": "6.0.*",
"symfony/serializer": "6.0.*",
"symfony/string": "6.0.*",
"symfony/templating": "6.0.*",
"symfony/translation": "6.0.*",
"symfony/twig-bundle": "6.0.*",
"symfony/validator": "6.0.*",
"symfony/webpack-encore-bundle": "^1.11",
"symfony/workflow": "^5.4",
"symfony/yaml": "^5.4",
"symfony/workflow": "6.0.*",
"symfony/yaml": "6.0.*",
"thenetworg/oauth2-azure": "^2.0",
"twig/extra-bundle": "^3.0",
"twig/intl-extra": "^3.0",
@@ -95,13 +92,13 @@
"phpstan/phpstan-strict-rules": "^1.0",
"phpunit/phpunit": "^10.5.24",
"rector/rector": "^1.1.0",
"symfony/debug-bundle": "^5.4",
"symfony/dotenv": "^5.4",
"symfony/debug-bundle": "6.0.*",
"symfony/dotenv": "6.0.*",
"symfony/maker-bundle": "^1.20",
"symfony/phpunit-bridge": "^7.1",
"symfony/runtime": "^5.4",
"symfony/stopwatch": "^5.4",
"symfony/var-dumper": "^5.4"
"symfony/runtime": "6.0.*",
"symfony/stopwatch": "6.0.*",
"symfony/var-dumper": "6.0.*"
},
"conflict": {
"symfony/symfony": "*"
@@ -154,5 +151,11 @@
"cache:clear": "symfony-cmd"
},
"php-cs-fixer": "php-cs-fixer fix --config=./.php-cs-fixer.dist.php --show-progress=none"
},
"extra": {
"symfony": {
"allow-contrib": false,
"require": "6.0.*"
}
}
}

View File

@@ -21,6 +21,7 @@ use Symfony\Component\Validator\Context\ExecutionContextInterface;
class BirthdateFilter implements ExportElementValidatedInterface, FilterInterface
{
// add specific role for this filter
#[\Override]
public function addRole(): ?string
{
// we do not need any new role for this filter, so we return null
@@ -28,6 +29,7 @@ class BirthdateFilter implements ExportElementValidatedInterface, FilterInterfac
}
// here, we alter the query created by Export
#[\Override]
public function alterQuery(\Doctrine\ORM\QueryBuilder $qb, $data)
{
$where = $qb->getDQLPart('where');
@@ -52,12 +54,14 @@ class BirthdateFilter implements ExportElementValidatedInterface, FilterInterfac
}
// we give information on which type of export this filter applies
#[\Override]
public function applyOn()
{
return 'person';
}
// we build a form to collect some parameters from the users
#[\Override]
public function buildForm(\Symfony\Component\Form\FormBuilderInterface $builder)
{
$builder->add('date_from', DateType::class, [
@@ -74,6 +78,7 @@ class BirthdateFilter implements ExportElementValidatedInterface, FilterInterfac
'format' => 'dd-MM-yyyy',
]);
}
#[\Override]
public function getFormDefaultData(): array
{
return ['date_from' => new DateTime(), 'date_to' => new DateTime()];
@@ -81,6 +86,7 @@ class BirthdateFilter implements ExportElementValidatedInterface, FilterInterfac
// here, we create a simple string which will describe the action of
// the filter in the Response
#[\Override]
public function describeAction($data, $format = 'string')
{
return ['Filtered by person\'s birtdate: '
@@ -90,6 +96,7 @@ class BirthdateFilter implements ExportElementValidatedInterface, FilterInterfac
], ];
}
#[\Override]
public function getTitle()
{
return 'Filter by person\'s birthdate';
@@ -99,6 +106,7 @@ class BirthdateFilter implements ExportElementValidatedInterface, FilterInterfac
// is executed here. This function is added by the interface
// `ExportElementValidatedInterface`, and can be ignore if there is
// no need for a validation
#[\Override]
public function validateForm($data, ExecutionContextInterface $context)
{
$date_from = $data['date_from'];

View File

@@ -32,25 +32,30 @@ class CountPerson implements ExportInterface
$this->entityManager = $em;
}
#[\Override]
public function buildForm(FormBuilderInterface $builder)
{
// this export does not add any form
}
#[\Override]
public function getFormDefaultData(): array
{
return [];
}
#[\Override]
public function getAllowedFormattersTypes()
{
return [FormatterInterface::TYPE_TABULAR];
}
#[\Override]
public function getDescription()
{
return 'Count peoples by various parameters.';
}
#[\Override]
public function getLabels($key, array $values, $data)
{
// the Closure which will be executed by the formatter.
@@ -60,6 +65,7 @@ class CountPerson implements ExportInterface
};
}
#[\Override]
public function getQueryKeys($data)
{
// this array match the result keys in the query. We have only
@@ -67,21 +73,25 @@ class CountPerson implements ExportInterface
return ['export_result'];
}
#[\Override]
public function getResult($query, $data)
{
return $query->getQuery()->getResult(Query::HYDRATE_SCALAR);
}
#[\Override]
public function getTitle()
{
return 'Count peoples';
}
#[\Override]
public function getType()
{
return Declarations::PERSON_TYPE;
}
#[\Override]
public function initiateQuery(array $requiredModifiers, array $acl, array $data = [])
{
// we gather all center the user choose.
@@ -98,11 +108,13 @@ class CountPerson implements ExportInterface
return $qb;
}
#[\Override]
public function requiredRole(): string
{
return PersonVoter::STATS;
}
#[\Override]
public function supportsModifiers()
{
// explain the export manager which formatters and filters are allowed

View File

@@ -39,12 +39,9 @@ Implements a :code:`Chill\MainBundle\Cron\CronJobInterface`. Here is an example:
use Chill\MainBundle\Entity\CronJobExecution;
use DateInterval;
use DateTimeImmutable;
use Symfony\Component\Clock\ClockInterface;
class MyCronJob implements CronJobInterface
{
function __construct(private ClockInterface $clock) {}
public function canRun(?CronJobExecution $cronJobExecution): bool
{
// the parameter $cronJobExecution contains data about the last execution of the cronjob
@@ -59,7 +56,7 @@ Implements a :code:`Chill\MainBundle\Cron\CronJobInterface`. Here is an example:
// this cron job should be executed if the last execution is greater than one day, but only during the night
$now = $clock->now();
$now = new DateTimeImmutable('now');
return $cronJobExecution->getLastStart() < $now->sub(new DateInterval('P1D'))
&& in_array($now->format('H'), self::ACCEPTED_HOURS, true)
@@ -72,14 +69,9 @@ Implements a :code:`Chill\MainBundle\Cron\CronJobInterface`. Here is an example:
return 'arbitrary-and-unique-key';
}
public function run(array $lastExecutionData): void
public function run(): void
{
// here, we execute the command
// we return execution data, which will be served for next execution
// this data should be easily serializable in a json column: it should contains
// only int, string, etc. Avoid storing object
return ['last-execution-id' => 0];
}
}

View File

@@ -31,6 +31,7 @@ class ChillMainConfiguration implements ConfigurationInterface
$this->setWidgetFactories($widgetFactories);
}
#[\Override]
public function getConfigTreeBuilder()
{
$treeBuilder = new TreeBuilder('chill_main');

View File

@@ -27,11 +27,13 @@ class ChillMainExtension extends Extension implements Widget\HasWidgetFactoriesE
*/
protected $widgetFactories = [];
#[\Override]
public function addWidgetFactory(WidgetFactoryInterface $factory)
{
$this->widgetFactories[] = $factory;
}
#[\Override]
public function getConfiguration(array $config, ContainerBuilder $container)
{
return new Configuration($this->widgetFactories, $container);
@@ -40,11 +42,13 @@ class ChillMainExtension extends Extension implements Widget\HasWidgetFactoriesE
/**
* @return WidgetFactoryInterface[]
*/
#[\Override]
public function getWidgetFactories()
{
return $this->widgetFactories;
}
#[\Override]
public function load(array $configs, ContainerBuilder $container)
{
// configuration for main bundle

View File

@@ -25,6 +25,7 @@ class ChillPersonAddAPersonListWidgetFactory extends AbstractWidgetFactory
* see http://symfony.com/doc/current/components/config/definition.html
*
*/
#[\Override]
public function configureOptions($place, NodeBuilder $node)
{
$node->booleanNode('only_active')
@@ -56,6 +57,7 @@ class ChillPersonAddAPersonListWidgetFactory extends AbstractWidgetFactory
* the service must exists in the container, and it is not required that the service
* has the `chill_main` tag.
*/
#[\Override]
public function getServiceId(ContainerBuilder $containerBuilder, $place, $order, array $config)
{
return 'chill_person.widget.person_list';
@@ -66,6 +68,7 @@ class ChillPersonAddAPersonListWidgetFactory extends AbstractWidgetFactory
*
* @return string
*/
#[\Override]
public function getWidgetAlias()
{
return 'person_list';

View File

@@ -79,6 +79,7 @@ class ChillPersonAddAPersonWidget implements WidgetInterface
*
* @return string
*/
#[\Override]
public function render(Twig_Environment $env, $place, array $context, array $config)
{
$qb = $this->personRepository

View File

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

View File

@@ -1,125 +0,0 @@
Enable CODE for development
===========================
For editing a document, there must be a way to communicate between the collabora server and the symfony server, in
both direction. The domain name should also be the same for collabora server and for the browser which access to the
online editor.
Using ngrok (or other http tunnel)
----------------------------------
One can configure a tunnel server to expose your local install to the web, and access to your local server using the
tunnel url.
Start ngrok
^^^^^^^^^^^
This can be achieve using `ngrok <https://ngrok.com/>`_.
.. note::
The configuration of ngrok is outside of the scope of this document. Refers to the ngrok's documentation.
.. code-block:: bash
# ensuring that your server is running through http and port 8000
ngrok http 8000
# then open the link given by the ngrok utility and you should reach your app
At this step, ensure that you can reach your local app using the ngrok url.
Configure Collabora
^^^^^^^^^^^^^^^^^^^
The collabora server must be executed online and configure to access to your ngrok installation. Ensure that the aliasgroup
exists for your ngrok application (`See the CODE documentation: <https://sdk.collaboraonline.com/docs/installation/Configuration.html#multihost-configuration>`_).
Configure your app
^^^^^^^^^^^^^^^^^^
Set the :code:`EDITOR_SERVER` variable to point to your collabora server, this should be done in your :code:`.env.local` file.
At this point, everything must be fine. In case of errors, watch the log from your collabora server, use the `profiler <https://symfony.com/doc/current/profiler.html>`_
to debug the requests.
.. note::
In case of error while validating proof (you'll see those message in the collabora's logs), you can temporarily disable
the proof validation adding this code snippet in `config/services.yaml`:
.. code-block:: yaml
when@dev:
# add only in dev environment, to avoid security problems
services:
ChampsLibres\WopiLib\Contract\Service\ProofValidatorInterface:
# this class will always validate proof
alias: Chill\WopiBundle\Service\Wopi\NullProofValidator
With a local CODE image
-----------------------
.. warning::
This configuration is not sure, and must be refined. The documentation does not seems to be entirely valid.
Use a local domain name and https for your app
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Use the proxy feature from embedded symfony server to run your app. `See the dedicated doc <https://symfony.com/doc/current/setup/symfony_server.html#local-domain-names>`
Configure also the `https certificate <https://symfony.com/doc/current/setup/symfony_server.html#enabling-tls>`_
In this example, your local domain name will be :code:`my-domain` and the url will be :code:`https://my-domain.wip`.
Ensure that the proxy is running.
Create a certificate database for collabora
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Collabora must validate your certificate generated by symfony console. For that, you need `to create a NSS database <https://sdk.collaboraonline.com/docs/installation/Configuration.html#validating-digital-signatures>`
and configure collabora to use it.
At first, export the certificate for symfony development. Use the graphical interface from your browser to get the
certificate as a PEM file.
.. code-block:: bash
# create your database in a custom directory
mkdir /path/to/your/directory
certutil -N -d /path/to/your/directory
cat /path/to/your/ca.crt | certutil -d . -A symfony -t -t C,P,C,u,w -a
Launch CODE properly configured
.. code-block:: yaml
collabora:
image: collabora/code:latest
environment:
- SLEEPFORDEBUGGER=0
- DONT_GEN_SSL_CERT="True"
# add path to the database
- extra_params=--o:ssl.enable=false --o:ssl.termination=false --o:logging.level=7 -o:certificates.database_path=/etc/custom-certificates/nss-database
- username=admin
- password=admin
- dictionaries=en_US
- aliasgroup1=https://my-domain.wip
ports:
- "127.0.0.1:9980:9980"
volumes:
- "/path/to/your/directory/nss-database:/etc/custom-certificates/nss-database"
extra_hosts:
- "my-domain.wip:host-gateway"
Configure your app
^^^^^^^^^^^^^^^^^^
Into your :code:`.env.local` file:
.. code-block:: env
EDITOR_SERVER=http://${COLLABORA_HOST}:${COLLABORA_PORT}
At this step, you should be able to edit a document through collabora.

View File

@@ -53,9 +53,9 @@
"marked": "^12.0.2",
"masonry-layout": "^4.2.2",
"mime": "^4.0.0",
"pdfjs-dist": "^4.3.136",
"swagger-ui": "^4.15.5",
"vis-network": "^9.1.0",
"vue": "^3.5.6",
"vue": "^3.2.37",
"vue-i18n": "^9.1.6",
"vue-multiselect": "3.0.0-alpha.2",
"vue-toast-notification": "^3.1.2",

View File

@@ -39,14 +39,19 @@ return static function (RectorConfig $rectorConfig): void {
//define sets of rules
$rectorConfig->sets([
LevelSetList::UP_TO_PHP_82,
\Rector\Symfony\Set\SymfonySetList::SYMFONY_40,
\Rector\Symfony\Set\SymfonySetList::SYMFONY_41,
\Rector\Symfony\Set\SymfonySetList::SYMFONY_42,
\Rector\Symfony\Set\SymfonySetList::SYMFONY_43,
\Rector\Symfony\Set\SymfonySetList::SYMFONY_44,
\Rector\Doctrine\Set\DoctrineSetList::DOCTRINE_CODE_QUALITY,
\Rector\PHPUnit\Set\PHPUnitSetList::PHPUNIT_90,
LevelSetList::UP_TO_PHP_83,
// \Rector\Symfony\Set\SymfonySetList::SYMFONY_40,
// \Rector\Symfony\Set\SymfonySetList::SYMFONY_41,
// \Rector\Symfony\Set\SymfonySetList::SYMFONY_42,
// \Rector\Symfony\Set\SymfonySetList::SYMFONY_43,
// \Rector\Symfony\Set\SymfonySetList::SYMFONY_44,
\Rector\Symfony\Set\SymfonySetList::SYMFONY_50,
\Rector\Symfony\Set\SymfonySetList::SYMFONY_51,
\Rector\Symfony\Set\SymfonySetList::SYMFONY_52,
\Rector\Symfony\Set\SymfonySetList::SYMFONY_53,
\Rector\Symfony\Set\SymfonySetList::SYMFONY_54,
// \Rector\Doctrine\Set\DoctrineSetList::DOCTRINE_CODE_QUALITY,
// \Rector\PHPUnit\Set\PHPUnitSetList::PHPUNIT_90,
]);
$rectorConfig->ruleWithConfiguration(\Rector\Php80\Rector\Class_\AnnotationToAttributeRector::class, [
@@ -69,8 +74,9 @@ return static function (RectorConfig $rectorConfig): void {
// skip some path...
$rectorConfig->skip([
// waiting for fixing this bug: https://github.com/rectorphp/rector-doctrine/issues/342
\Rector\Doctrine\CodeQuality\Rector\Property\ImproveDoctrineCollectionDocTypeInEntityRector::class,
// we must adapt service definition
\Rector\Symfony\Symfony28\Rector\MethodCall\GetToConstructorInjectionRector::class,
\Rector\Symfony\Symfony34\Rector\Closure\ContainerGetNameToTypeInTestsRector::class,
]);
$rectorConfig->ruleWithConfiguration(AnnotationToAttributeRector::class, [

View File

@@ -68,7 +68,7 @@ final class ActivityController extends AbstractController
private readonly FilterOrderHelperFactoryInterface $filterOrderHelperFactory,
private readonly TranslatableStringHelperInterface $translatableStringHelper,
private readonly PaginatorFactory $paginatorFactory,
private readonly ChillSecurity $security,
private readonly ChillSecurity $security
) {}
/**

View File

@@ -22,6 +22,7 @@ class AdminActivityPresenceController extends CRUDController
*
* @return \Doctrine\ORM\QueryBuilder|mixed
*/
#[\Override]
protected function orderQuery(string $action, $query, Request $request, PaginatorInterface $paginator)
{
/* @var \Doctrine\ORM\QueryBuilder $query */

View File

@@ -22,6 +22,7 @@ class AdminActivityTypeCategoryController extends CRUDController
*
* @return \Doctrine\ORM\QueryBuilder|mixed
*/
#[\Override]
protected function orderQuery(string $action, $query, Request $request, PaginatorInterface $paginator)
{
/* @var \Doctrine\ORM\QueryBuilder $query */

View File

@@ -22,6 +22,7 @@ class AdminActivityTypeController extends CRUDController
*
* @return \Doctrine\ORM\QueryBuilder|mixed
*/
#[\Override]
protected function orderQuery(string $action, $query, Request $request, PaginatorInterface $paginator)
{
/* @var \Doctrine\ORM\QueryBuilder $query */

View File

@@ -32,11 +32,13 @@ class LoadActivity extends AbstractFixture implements OrderedFixtureInterface
$this->faker = FakerFactory::create('fr_FR');
}
#[\Override]
public function getOrder()
{
return 16400;
}
#[\Override]
public function load(ObjectManager $manager)
{
$persons = $this->em

View File

@@ -38,6 +38,7 @@ class LoadActivityNotifications extends AbstractFixture implements DependentFixt
],
];
#[\Override]
public function getDependencies()
{
return [

View File

@@ -23,11 +23,13 @@ class LoadActivityReason extends AbstractFixture implements OrderedFixtureInterf
{
public static $references = [];
#[\Override]
public function getOrder()
{
return 16300;
}
#[\Override]
public function load(ObjectManager $manager)
{
$reasons = [

View File

@@ -21,11 +21,13 @@ use Doctrine\Persistence\ObjectManager;
*/
class LoadActivityReasonCategory extends AbstractFixture implements OrderedFixtureInterface
{
#[\Override]
public function getOrder()
{
return 16200;
}
#[\Override]
public function load(ObjectManager $manager)
{
$categs = [

View File

@@ -23,11 +23,13 @@ class LoadActivityType extends Fixture implements OrderedFixtureInterface
{
public static $references = [];
#[\Override]
public function getOrder()
{
return 16100;
}
#[\Override]
public function load(ObjectManager $manager)
{
$types = [

View File

@@ -23,11 +23,13 @@ class LoadActivityTypeCategory extends Fixture implements OrderedFixtureInterfac
{
public static $references = [];
#[\Override]
public function getOrder()
{
return 16050;
}
#[\Override]
public function load(ObjectManager $manager)
{
$categories = [

View File

@@ -26,11 +26,13 @@ use Doctrine\Persistence\ObjectManager;
*/
class LoadActivitytACL extends AbstractFixture implements OrderedFixtureInterface
{
#[\Override]
public function getOrder()
{
return 16000;
}
#[\Override]
public function load(ObjectManager $manager)
{
foreach (LoadPermissionsGroup::$refs as $permissionsGroupRef) {

View File

@@ -25,6 +25,7 @@ use Symfony\Component\HttpKernel\DependencyInjection\Extension;
*/
class ChillActivityExtension extends Extension implements PrependExtensionInterface
{
#[\Override]
public function load(array $configs, ContainerBuilder $container)
{
$configuration = new Configuration();
@@ -44,6 +45,7 @@ class ChillActivityExtension extends Extension implements PrependExtensionInterf
$loader->load('services/doctrine.entitylistener.yaml');
}
#[\Override]
public function prepend(ContainerBuilder $container)
{
$this->prependRoutes($container);

View File

@@ -22,6 +22,7 @@ use function is_int;
*/
class Configuration implements ConfigurationInterface
{
#[\Override]
public function getConfigTreeBuilder()
{
$treeBuilder = new TreeBuilder('chill_activity');

View File

@@ -53,9 +53,9 @@ class Activity implements AccompanyingPeriodLinkedWithSocialIssuesEntityInterfac
use TrackUpdateTrait;
final public const SENTRECEIVED_RECEIVED = 'received';
final public const string SENTRECEIVED_RECEIVED = 'received';
final public const SENTRECEIVED_SENT = 'sent';
final public const string SENTRECEIVED_SENT = 'sent';
#[Groups(['read'])]
#[ORM\ManyToOne(targetEntity: AccompanyingPeriod::class)]
@@ -80,7 +80,7 @@ class Activity implements AccompanyingPeriodLinkedWithSocialIssuesEntityInterfac
private \DateTime $date;
/**
* @var Collection<int, StoredObject>
* @var Collection<StoredObject>
*/
#[Assert\Valid(traverse: true)]
#[ORM\ManyToMany(targetEntity: StoredObject::class, cascade: ['persist'])]
@@ -107,7 +107,7 @@ class Activity implements AccompanyingPeriodLinkedWithSocialIssuesEntityInterfac
private ?Person $person = null;
/**
* @var Collection<int, \Chill\PersonBundle\Entity\Person>
* @var Collection<Person>
*/
#[Groups(['read', 'docgen:read'])]
#[ORM\ManyToMany(targetEntity: Person::class)]
@@ -117,7 +117,7 @@ class Activity implements AccompanyingPeriodLinkedWithSocialIssuesEntityInterfac
private PrivateCommentEmbeddable $privateComment;
/**
* @var Collection<int, ActivityReason>
* @var Collection<ActivityReason>
*/
#[Groups(['docgen:read'])]
#[ORM\ManyToMany(targetEntity: ActivityReason::class)]
@@ -132,7 +132,7 @@ class Activity implements AccompanyingPeriodLinkedWithSocialIssuesEntityInterfac
private string $sentReceived = '';
/**
* @var Collection<int, \Chill\PersonBundle\Entity\SocialWork\SocialAction>
* @var Collection<SocialAction>
*/
#[Groups(['read', 'docgen:read'])]
#[ORM\ManyToMany(targetEntity: SocialAction::class)]
@@ -140,7 +140,7 @@ class Activity implements AccompanyingPeriodLinkedWithSocialIssuesEntityInterfac
private Collection $socialActions;
/**
* @var Collection<int, SocialIssue>
* @var Collection<SocialIssue>
*/
#[Groups(['read', 'docgen:read'])]
#[ORM\ManyToMany(targetEntity: SocialIssue::class)]
@@ -148,7 +148,7 @@ class Activity implements AccompanyingPeriodLinkedWithSocialIssuesEntityInterfac
private Collection $socialIssues;
/**
* @var Collection<int, ThirdParty>
* @var Collection<ThirdParty>
*/
#[Groups(['read', 'docgen:read'])]
#[ORM\ManyToMany(targetEntity: ThirdParty::class)]
@@ -162,7 +162,7 @@ class Activity implements AccompanyingPeriodLinkedWithSocialIssuesEntityInterfac
private ?User $user = null;
/**
* @var Collection<int, User>
* @var Collection<User>
*/
#[Groups(['read', 'docgen:read'])]
#[ORM\ManyToMany(targetEntity: User::class)]
@@ -262,6 +262,7 @@ class Activity implements AccompanyingPeriodLinkedWithSocialIssuesEntityInterfac
return $this;
}
#[\Override]
public function getAccompanyingPeriod(): ?AccompanyingPeriod
{
return $this->accompanyingPeriod;
@@ -281,6 +282,7 @@ class Activity implements AccompanyingPeriodLinkedWithSocialIssuesEntityInterfac
* get the center
* center is extracted from person.
*/
#[\Override]
public function getCenters(): iterable
{
if ($this->person instanceof Person) {
@@ -399,6 +401,7 @@ class Activity implements AccompanyingPeriodLinkedWithSocialIssuesEntityInterfac
return $this->scope;
}
#[\Override]
public function getScopes(): iterable
{
if (null !== $this->getAccompanyingPeriod()) {
@@ -422,6 +425,7 @@ class Activity implements AccompanyingPeriodLinkedWithSocialIssuesEntityInterfac
return $this->socialActions;
}
#[\Override]
public function getSocialIssues(): Collection
{
return $this->socialIssues;
@@ -492,6 +496,7 @@ class Activity implements AccompanyingPeriodLinkedWithSocialIssuesEntityInterfac
return $this;
}
#[\Override]
public function removeSocialIssue(SocialIssue $socialIssue): self
{
$this->socialIssues->removeElement($socialIssue);

View File

@@ -40,9 +40,9 @@ class ActivityReasonCategory implements \Stringable
/**
* Array of ActivityReason.
*
* @var Collection<int, ActivityReason>
* @var Collection<ActivityReason>
*/
#[ORM\OneToMany(mappedBy: 'category', targetEntity: ActivityReason::class)]
#[ORM\OneToMany(targetEntity: ActivityReason::class, mappedBy: 'category')]
private Collection $reasons;
/**
@@ -53,6 +53,7 @@ class ActivityReasonCategory implements \Stringable
$this->reasons = new ArrayCollection();
}
#[\Override]
public function __toString(): string
{
return 'ActivityReasonCategory('.$this->getName('x').')';

View File

@@ -25,11 +25,11 @@ use Symfony\Component\Validator\Context\ExecutionContextInterface;
#[ORM\Table(name: 'activitytype')]
class ActivityType
{
final public const FIELD_INVISIBLE = 0;
final public const int FIELD_INVISIBLE = 0;
final public const FIELD_OPTIONAL = 1;
final public const int FIELD_OPTIONAL = 1;
final public const FIELD_REQUIRED = 2;
final public const int FIELD_REQUIRED = 2;
/**
* @deprecated not in use

View File

@@ -19,11 +19,13 @@ use Symfony\Component\Form\FormBuilderInterface;
class ByActivityNumberAggregator implements AggregatorInterface
{
#[\Override]
public function addRole(): ?string
{
return null;
}
#[\Override]
public function alterQuery(QueryBuilder $qb, $data): void
{
$qb
@@ -31,21 +33,25 @@ class ByActivityNumberAggregator implements AggregatorInterface
->addGroupBy('activity_by_number_aggregator');
}
#[\Override]
public function applyOn(): string
{
return Declarations::ACP_TYPE;
}
#[\Override]
public function buildForm(FormBuilderInterface $builder): void
{
// No form needed
}
#[\Override]
public function getFormDefaultData(): array
{
return [];
}
#[\Override]
public function getLabels($key, array $values, $data)
{
return static function ($value) {
@@ -61,11 +67,13 @@ class ByActivityNumberAggregator implements AggregatorInterface
};
}
#[\Override]
public function getQueryKeys($data): array
{
return ['activity_by_number_aggregator'];
}
#[\Override]
public function getTitle(): string
{
return 'Group acp by activity number';

View File

@@ -25,7 +25,7 @@ use Symfony\Component\Form\FormBuilderInterface;
final readonly class ByActivityTypeAggregator implements AggregatorInterface
{
private const PREFIX = 'acp_by_activity_type_agg';
private const string PREFIX = 'acp_by_activity_type_agg';
public function __construct(
private RollingDateConverterInterface $rollingDateConverter,
@@ -33,6 +33,7 @@ final readonly class ByActivityTypeAggregator implements AggregatorInterface
private TranslatableStringHelperInterface $translatableStringHelper,
) {}
#[\Override]
public function buildForm(FormBuilderInterface $builder)
{
$builder
@@ -46,6 +47,7 @@ final readonly class ByActivityTypeAggregator implements AggregatorInterface
]);
}
#[\Override]
public function getFormDefaultData(): array
{
return [
@@ -54,6 +56,7 @@ final readonly class ByActivityTypeAggregator implements AggregatorInterface
];
}
#[\Override]
public function getLabels($key, array $values, mixed $data)
{
return function (int|string|null $value): string {
@@ -69,21 +72,25 @@ final readonly class ByActivityTypeAggregator implements AggregatorInterface
};
}
#[\Override]
public function getQueryKeys($data)
{
return [self::PREFIX.'_actype_id'];
}
#[\Override]
public function getTitle()
{
return 'export.aggregator.acp.by_activity_type.title';
}
#[\Override]
public function addRole(): ?string
{
return null;
}
#[\Override]
public function alterQuery(QueryBuilder $qb, $data)
{
$p = self::PREFIX;
@@ -115,6 +122,7 @@ final readonly class ByActivityTypeAggregator implements AggregatorInterface
->addGroupBy("{$p}_actype_id");
}
#[\Override]
public function applyOn()
{
return Declarations::ACP_TYPE;

View File

@@ -22,11 +22,13 @@ class BySocialActionAggregator implements AggregatorInterface
{
public function __construct(private readonly SocialActionRender $actionRender, private readonly SocialActionRepository $actionRepository) {}
#[\Override]
public function addRole(): ?string
{
return null;
}
#[\Override]
public function alterQuery(QueryBuilder $qb, $data)
{
if (!\in_array('actsocialaction', $qb->getAllAliases(), true)) {
@@ -37,21 +39,25 @@ class BySocialActionAggregator implements AggregatorInterface
$qb->addGroupBy('socialaction_aggregator');
}
#[\Override]
public function applyOn(): string
{
return Declarations::ACTIVITY_ACP;
}
#[\Override]
public function buildForm(FormBuilderInterface $builder)
{
// no form
}
#[\Override]
public function getFormDefaultData(): array
{
return [];
}
#[\Override]
public function getLabels($key, array $values, $data)
{
return function ($value) {
@@ -69,11 +75,13 @@ class BySocialActionAggregator implements AggregatorInterface
};
}
#[\Override]
public function getQueryKeys($data): array
{
return ['socialaction_aggregator'];
}
#[\Override]
public function getTitle(): string
{
return 'Group activity by linked socialaction';

View File

@@ -22,11 +22,13 @@ class BySocialIssueAggregator implements AggregatorInterface
{
public function __construct(private readonly SocialIssueRepository $issueRepository, private readonly SocialIssueRender $issueRender) {}
#[\Override]
public function addRole(): ?string
{
return null;
}
#[\Override]
public function alterQuery(QueryBuilder $qb, $data)
{
if (!\in_array('actsocialissue', $qb->getAllAliases(), true)) {
@@ -37,21 +39,25 @@ class BySocialIssueAggregator implements AggregatorInterface
$qb->addGroupBy('socialissue_aggregator');
}
#[\Override]
public function applyOn(): string
{
return Declarations::ACTIVITY_ACP;
}
#[\Override]
public function buildForm(FormBuilderInterface $builder)
{
// no form
}
#[\Override]
public function getFormDefaultData(): array
{
return [];
}
#[\Override]
public function getLabels($key, array $values, $data)
{
return function ($value): string {
@@ -69,11 +75,13 @@ class BySocialIssueAggregator implements AggregatorInterface
};
}
#[\Override]
public function getQueryKeys($data): array
{
return ['socialissue_aggregator'];
}
#[\Override]
public function getTitle(): string
{
return 'Group activity by linked socialissue';

View File

@@ -18,13 +18,15 @@ use Symfony\Component\Form\FormBuilderInterface;
final readonly class ActivityLocationAggregator implements AggregatorInterface
{
public const KEY = 'activity_location_aggregator';
public const string KEY = 'activity_location_aggregator';
#[\Override]
public function addRole(): ?string
{
return null;
}
#[\Override]
public function alterQuery(QueryBuilder $qb, $data)
{
if (!\in_array('actloc', $qb->getAllAliases(), true)) {
@@ -34,21 +36,25 @@ final readonly class ActivityLocationAggregator implements AggregatorInterface
$qb->addGroupBy(self::KEY);
}
#[\Override]
public function applyOn(): string
{
return Declarations::ACTIVITY;
}
#[\Override]
public function buildForm(FormBuilderInterface $builder)
{
// no form required for this aggregator
}
#[\Override]
public function getFormDefaultData(): array
{
return [];
}
#[\Override]
public function getLabels($key, array $values, $data): \Closure
{
return function ($value): string {
@@ -64,11 +70,13 @@ final readonly class ActivityLocationAggregator implements AggregatorInterface
};
}
#[\Override]
public function getQueryKeys($data): array
{
return [self::KEY];
}
#[\Override]
public function getTitle()
{
return 'export.aggregator.activity.by_location.Title';

View File

@@ -22,13 +22,16 @@ final readonly class ActivityPresenceAggregator implements AggregatorInterface
{
public function __construct(private ActivityPresenceRepositoryInterface $activityPresenceRepository, private TranslatableStringHelperInterface $translatableStringHelper) {}
#[\Override]
public function buildForm(FormBuilderInterface $builder) {}
#[\Override]
public function getFormDefaultData(): array
{
return [];
}
#[\Override]
public function getLabels($key, array $values, mixed $data)
{
return function (int|string|null $value): string {
@@ -44,27 +47,32 @@ final readonly class ActivityPresenceAggregator implements AggregatorInterface
};
}
#[\Override]
public function getQueryKeys($data)
{
return ['activity_presence_aggregator_attendee'];
}
#[\Override]
public function getTitle(): string
{
return 'export.aggregator.activity.by_activity_presence.Group activity by presence';
}
#[\Override]
public function addRole(): ?string
{
return null;
}
#[\Override]
public function alterQuery(QueryBuilder $qb, $data): void
{
$qb->addSelect('IDENTITY(activity.attendee) AS activity_presence_aggregator_attendee');
$qb->addGroupBy('activity_presence_aggregator_attendee');
}
#[\Override]
public function applyOn()
{
return Declarations::ACTIVITY;

View File

@@ -28,14 +28,16 @@ class ActivityReasonAggregator implements AggregatorInterface, ExportElementVali
public function __construct(
protected ActivityReasonCategoryRepository $activityReasonCategoryRepository,
protected ActivityReasonRepository $activityReasonRepository,
protected TranslatableStringHelper $translatableStringHelper,
protected TranslatableStringHelper $translatableStringHelper
) {}
#[\Override]
public function addRole(): ?string
{
return null;
}
#[\Override]
public function alterQuery(QueryBuilder $qb, $data)
{
// add select element
@@ -67,11 +69,13 @@ class ActivityReasonAggregator implements AggregatorInterface, ExportElementVali
$qb->addGroupBy($alias);
}
#[\Override]
public function applyOn(): string
{
return Declarations::ACTIVITY;
}
#[\Override]
public function buildForm(FormBuilderInterface $builder)
{
$builder->add(
@@ -89,6 +93,7 @@ class ActivityReasonAggregator implements AggregatorInterface, ExportElementVali
);
}
#[\Override]
public function getFormDefaultData(): array
{
return [
@@ -96,6 +101,7 @@ class ActivityReasonAggregator implements AggregatorInterface, ExportElementVali
];
}
#[\Override]
public function getLabels($key, array $values, $data)
{
return function ($value) use ($data) {
@@ -125,6 +131,7 @@ class ActivityReasonAggregator implements AggregatorInterface, ExportElementVali
};
}
#[\Override]
public function getQueryKeys($data)
{
// add select element
@@ -139,11 +146,13 @@ class ActivityReasonAggregator implements AggregatorInterface, ExportElementVali
throw new \RuntimeException('The data provided are not recognised.');
}
#[\Override]
public function getTitle()
{
return 'Aggregate by activity reason';
}
#[\Override]
public function validateForm($data, ExecutionContextInterface $context)
{
if (null === $data['level']) {

View File

@@ -20,15 +20,17 @@ use Symfony\Component\Form\FormBuilderInterface;
class ActivityTypeAggregator implements AggregatorInterface
{
final public const KEY = 'activity_type_aggregator';
final public const string KEY = 'activity_type_aggregator';
public function __construct(protected ActivityTypeRepositoryInterface $activityTypeRepository, protected TranslatableStringHelperInterface $translatableStringHelper) {}
#[\Override]
public function addRole(): ?string
{
return null;
}
#[\Override]
public function alterQuery(QueryBuilder $qb, $data)
{
if (!\in_array('acttype', $qb->getAllAliases(), true)) {
@@ -39,21 +41,25 @@ class ActivityTypeAggregator implements AggregatorInterface
$qb->addGroupBy(self::KEY);
}
#[\Override]
public function applyOn(): string
{
return Declarations::ACTIVITY;
}
#[\Override]
public function buildForm(FormBuilderInterface $builder)
{
// no form required for this aggregator
}
#[\Override]
public function getFormDefaultData(): array
{
return [];
}
#[\Override]
public function getLabels($key, array $values, $data): \Closure
{
return function (int|string|null $value): string {
@@ -69,11 +75,13 @@ class ActivityTypeAggregator implements AggregatorInterface
};
}
#[\Override]
public function getQueryKeys($data): array
{
return [self::KEY];
}
#[\Override]
public function getTitle()
{
return 'Aggregate by activity type';

View File

@@ -20,15 +20,17 @@ use Symfony\Component\Form\FormBuilderInterface;
class ActivityUserAggregator implements AggregatorInterface
{
final public const KEY = 'activity_user_id';
final public const string KEY = 'activity_user_id';
public function __construct(private readonly UserRepository $userRepository, private readonly UserRender $userRender) {}
#[\Override]
public function addRole(): ?string
{
return null;
}
#[\Override]
public function alterQuery(QueryBuilder $qb, $data)
{
// add select element
@@ -38,21 +40,25 @@ class ActivityUserAggregator implements AggregatorInterface
$qb->addGroupBy(self::KEY);
}
#[\Override]
public function applyOn(): string
{
return Declarations::ACTIVITY;
}
#[\Override]
public function buildForm(FormBuilderInterface $builder)
{
// nothing to add
}
#[\Override]
public function getFormDefaultData(): array
{
return [];
}
#[\Override]
public function getLabels($key, $values, $data): \Closure
{
return function ($value) {
@@ -70,11 +76,13 @@ class ActivityUserAggregator implements AggregatorInterface
};
}
#[\Override]
public function getQueryKeys($data)
{
return [self::KEY];
}
#[\Override]
public function getTitle(): string
{
return 'Aggregate by activity user';

View File

@@ -22,11 +22,13 @@ class ActivityUsersAggregator implements AggregatorInterface
{
public function __construct(private readonly UserRepositoryInterface $userRepository, private readonly UserRender $userRender) {}
#[\Override]
public function addRole(): ?string
{
return null;
}
#[\Override]
public function alterQuery(QueryBuilder $qb, $data)
{
if (!\in_array('actusers', $qb->getAllAliases(), true)) {
@@ -38,21 +40,25 @@ class ActivityUsersAggregator implements AggregatorInterface
->addGroupBy('activity_users_aggregator');
}
#[\Override]
public function applyOn(): string
{
return Declarations::ACTIVITY;
}
#[\Override]
public function buildForm(FormBuilderInterface $builder)
{
// nothing to add on the form
}
#[\Override]
public function getFormDefaultData(): array
{
return [];
}
#[\Override]
public function getLabels($key, array $values, $data)
{
return function ($value) {
@@ -70,11 +76,13 @@ class ActivityUsersAggregator implements AggregatorInterface
};
}
#[\Override]
public function getQueryKeys($data)
{
return ['activity_users_aggregator'];
}
#[\Override]
public function getTitle()
{
return 'Aggregate by activity users';

View File

@@ -22,18 +22,20 @@ use Symfony\Component\Form\FormBuilderInterface;
class ActivityUsersJobAggregator implements AggregatorInterface
{
private const PREFIX = 'act_agg_user_job';
private const string PREFIX = 'act_agg_user_job';
public function __construct(
private readonly UserJobRepositoryInterface $userJobRepository,
private readonly TranslatableStringHelperInterface $translatableStringHelper,
private readonly TranslatableStringHelperInterface $translatableStringHelper
) {}
#[\Override]
public function addRole(): ?string
{
return null;
}
#[\Override]
public function alterQuery(QueryBuilder $qb, $data)
{
$p = self::PREFIX;
@@ -60,18 +62,22 @@ class ActivityUsersJobAggregator implements AggregatorInterface
->addGroupBy("{$p}_select");
}
#[\Override]
public function applyOn(): string
{
return Declarations::ACTIVITY;
}
#[\Override]
public function buildForm(FormBuilderInterface $builder) {}
#[\Override]
public function getFormDefaultData(): array
{
return [];
}
#[\Override]
public function getLabels($key, array $values, $data)
{
return function ($value): string {
@@ -91,11 +97,13 @@ class ActivityUsersJobAggregator implements AggregatorInterface
};
}
#[\Override]
public function getQueryKeys($data): array
{
return [self::PREFIX.'_select'];
}
#[\Override]
public function getTitle(): string
{
return 'export.aggregator.activity.by_user_job.Aggregate by users job';

View File

@@ -22,18 +22,20 @@ use Symfony\Component\Form\FormBuilderInterface;
class ActivityUsersScopeAggregator implements AggregatorInterface
{
private const PREFIX = 'act_agg_user_scope';
private const string PREFIX = 'act_agg_user_scope';
public function __construct(
private readonly ScopeRepositoryInterface $scopeRepository,
private readonly TranslatableStringHelperInterface $translatableStringHelper,
private readonly TranslatableStringHelperInterface $translatableStringHelper
) {}
#[\Override]
public function addRole(): ?string
{
return null;
}
#[\Override]
public function alterQuery(QueryBuilder $qb, $data)
{
$p = self::PREFIX;
@@ -60,18 +62,22 @@ class ActivityUsersScopeAggregator implements AggregatorInterface
->addGroupBy("{$p}_select");
}
#[\Override]
public function applyOn(): string
{
return Declarations::ACTIVITY;
}
#[\Override]
public function buildForm(FormBuilderInterface $builder) {}
#[\Override]
public function getFormDefaultData(): array
{
return [];
}
#[\Override]
public function getLabels($key, array $values, $data)
{
return function ($value): string {
@@ -91,11 +97,13 @@ class ActivityUsersScopeAggregator implements AggregatorInterface
};
}
#[\Override]
public function getQueryKeys($data): array
{
return [self::PREFIX.'_select'];
}
#[\Override]
public function getTitle(): string
{
return 'export.aggregator.activity.by_user_scope.Aggregate by users scope';

View File

@@ -22,32 +22,38 @@ class ByCreatorAggregator implements AggregatorInterface
{
public function __construct(private readonly UserRepositoryInterface $userRepository, private readonly UserRender $userRender) {}
#[\Override]
public function addRole(): ?string
{
return null;
}
#[\Override]
public function alterQuery(QueryBuilder $qb, $data)
{
$qb->addSelect('IDENTITY(activity.createdBy) AS creator_aggregator');
$qb->addGroupBy('creator_aggregator');
}
#[\Override]
public function applyOn(): string
{
return Declarations::ACTIVITY;
}
#[\Override]
public function buildForm(FormBuilderInterface $builder)
{
// no form
}
#[\Override]
public function getFormDefaultData(): array
{
return [];
}
#[\Override]
public function getLabels($key, array $values, $data)
{
return function ($value): string {
@@ -65,11 +71,13 @@ class ByCreatorAggregator implements AggregatorInterface
};
}
#[\Override]
public function getQueryKeys($data): array
{
return ['creator_aggregator'];
}
#[\Override]
public function getTitle(): string
{
return 'Group activity by creator';

View File

@@ -22,11 +22,13 @@ class ByThirdpartyAggregator implements AggregatorInterface
{
public function __construct(private readonly ThirdPartyRepository $thirdPartyRepository, private readonly ThirdPartyRender $thirdPartyRender) {}
#[\Override]
public function addRole(): ?string
{
return null;
}
#[\Override]
public function alterQuery(QueryBuilder $qb, $data)
{
if (!\in_array('acttparty', $qb->getAllAliases(), true)) {
@@ -37,21 +39,25 @@ class ByThirdpartyAggregator implements AggregatorInterface
$qb->addGroupBy('thirdparty_aggregator');
}
#[\Override]
public function applyOn(): string
{
return Declarations::ACTIVITY;
}
#[\Override]
public function buildForm(FormBuilderInterface $builder)
{
// no form
}
#[\Override]
public function getFormDefaultData(): array
{
return [];
}
#[\Override]
public function getLabels($key, array $values, $data)
{
return function ($value): string {
@@ -69,11 +75,13 @@ class ByThirdpartyAggregator implements AggregatorInterface
};
}
#[\Override]
public function getQueryKeys($data): array
{
return ['thirdparty_aggregator'];
}
#[\Override]
public function getTitle(): string
{
return 'Group activity by linked thirdparties';

View File

@@ -22,18 +22,20 @@ use Symfony\Component\Form\FormBuilderInterface;
class CreatorJobAggregator implements AggregatorInterface
{
private const PREFIX = 'acp_agg_creator_job';
private const string PREFIX = 'acp_agg_creator_job';
public function __construct(
private readonly UserJobRepositoryInterface $userJobRepository,
private readonly TranslatableStringHelper $translatableStringHelper,
private readonly TranslatableStringHelper $translatableStringHelper
) {}
#[\Override]
public function addRole(): ?string
{
return null;
}
#[\Override]
public function alterQuery(QueryBuilder $qb, $data)
{
$p = self::PREFIX;
@@ -60,18 +62,22 @@ class CreatorJobAggregator implements AggregatorInterface
->addGroupBy("{$p}_select");
}
#[\Override]
public function applyOn(): string
{
return Declarations::ACTIVITY;
}
#[\Override]
public function buildForm(FormBuilderInterface $builder) {}
#[\Override]
public function getFormDefaultData(): array
{
return [];
}
#[\Override]
public function getLabels($key, array $values, $data)
{
return function ($value): string {
@@ -89,11 +95,13 @@ class CreatorJobAggregator implements AggregatorInterface
};
}
#[\Override]
public function getQueryKeys($data): array
{
return [self::PREFIX.'_select'];
}
#[\Override]
public function getTitle(): string
{
return 'export.aggregator.activity.by_creator_job.Group activity by creator job';

View File

@@ -22,18 +22,20 @@ use Symfony\Component\Form\FormBuilderInterface;
class CreatorScopeAggregator implements AggregatorInterface
{
private const PREFIX = 'acp_agg_creator_scope';
private const string PREFIX = 'acp_agg_creator_scope';
public function __construct(
private readonly ScopeRepository $scopeRepository,
private readonly TranslatableStringHelper $translatableStringHelper,
private readonly TranslatableStringHelper $translatableStringHelper
) {}
#[\Override]
public function addRole(): ?string
{
return null;
}
#[\Override]
public function alterQuery(QueryBuilder $qb, $data)
{
$p = self::PREFIX;
@@ -60,18 +62,22 @@ class CreatorScopeAggregator implements AggregatorInterface
->addGroupBy("{$p}_select");
}
#[\Override]
public function applyOn(): string
{
return Declarations::ACTIVITY;
}
#[\Override]
public function buildForm(FormBuilderInterface $builder) {}
#[\Override]
public function getFormDefaultData(): array
{
return [];
}
#[\Override]
public function getLabels($key, array $values, $data)
{
return function ($value): string {
@@ -91,11 +97,13 @@ class CreatorScopeAggregator implements AggregatorInterface
};
}
#[\Override]
public function getQueryKeys($data): array
{
return [self::PREFIX.'_select'];
}
#[\Override]
public function getTitle(): string
{
return 'export.aggregator.activity.by_creator_scope.Group activity by creator scope';

View File

@@ -19,19 +19,21 @@ use Symfony\Component\Form\FormBuilderInterface;
class DateAggregator implements AggregatorInterface
{
private const CHOICES = [
private const array CHOICES = [
'by month' => 'month',
'by week' => 'week',
'by year' => 'year',
];
private const DEFAULT_CHOICE = 'year';
private const string DEFAULT_CHOICE = 'year';
#[\Override]
public function addRole(): ?string
{
return null;
}
#[\Override]
public function alterQuery(QueryBuilder $qb, $data)
{
$order = null;
@@ -62,11 +64,13 @@ class DateAggregator implements AggregatorInterface
$qb->addOrderBy('date_aggregator', $order);
}
#[\Override]
public function applyOn(): string
{
return Declarations::ACTIVITY;
}
#[\Override]
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('frequency', ChoiceType::class, [
@@ -76,11 +80,13 @@ class DateAggregator implements AggregatorInterface
]);
}
#[\Override]
public function getFormDefaultData(): array
{
return ['frequency' => self::DEFAULT_CHOICE];
}
#[\Override]
public function getLabels($key, array $values, $data)
{
return static function ($value) use ($data): string {
@@ -98,11 +104,13 @@ class DateAggregator implements AggregatorInterface
};
}
#[\Override]
public function getQueryKeys($data): array
{
return ['date_aggregator'];
}
#[\Override]
public function getTitle(): string
{
return 'Group activity by date';

View File

@@ -22,11 +22,13 @@ class LocationTypeAggregator implements AggregatorInterface
{
public function __construct(private readonly LocationTypeRepository $locationTypeRepository, private readonly TranslatableStringHelper $translatableStringHelper) {}
#[\Override]
public function addRole(): ?string
{
return null;
}
#[\Override]
public function alterQuery(QueryBuilder $qb, $data)
{
if (!\in_array('actloc', $qb->getAllAliases(), true)) {
@@ -37,21 +39,25 @@ class LocationTypeAggregator implements AggregatorInterface
$qb->addGroupBy('locationtype_aggregator');
}
#[\Override]
public function applyOn(): string
{
return Declarations::ACTIVITY;
}
#[\Override]
public function buildForm(FormBuilderInterface $builder)
{
// no form
}
#[\Override]
public function getFormDefaultData(): array
{
return [];
}
#[\Override]
public function getLabels($key, array $values, $data)
{
return function ($value): string {
@@ -73,11 +79,13 @@ class LocationTypeAggregator implements AggregatorInterface
};
}
#[\Override]
public function getQueryKeys($data): array
{
return ['locationtype_aggregator'];
}
#[\Override]
public function getTitle(): string
{
return 'Group activity by locationtype';

View File

@@ -1,99 +0,0 @@
<?php
declare(strict_types=1);
/*
* Chill is a software for social workers
*
* For the full copyright and license information, please view
* the LICENSE file that was distributed with this source code.
*/
namespace Chill\ActivityBundle\Export\Aggregator\PersonAggregators;
use Chill\ActivityBundle\Export\Declarations;
use Chill\MainBundle\Export\AggregatorInterface;
use Chill\PersonBundle\Entity\Household\Household;
use Chill\PersonBundle\Entity\Household\HouseholdMember;
use Chill\PersonBundle\Repository\Household\HouseholdRepository;
use Doctrine\ORM\Query\Expr\Join;
use Doctrine\ORM\QueryBuilder;
use Symfony\Component\Form\FormBuilderInterface;
final readonly class HouseholdAggregator implements AggregatorInterface
{
public function __construct(private HouseholdRepository $householdRepository) {}
public function buildForm(FormBuilderInterface $builder)
{
// nothing to add here
}
public function getFormDefaultData(): array
{
return [];
}
public function getLabels($key, array $values, mixed $data)
{
return function (int|string|null $value): string|int {
if ('_header' === $value) {
return 'export.aggregator.person.by_household.household';
}
if ('' === $value || null === $value || null === $household = $this->householdRepository->find($value)) {
return '';
}
return $household->getId();
};
}
public function getQueryKeys($data)
{
return ['activity_household_agg'];
}
public function getTitle()
{
return 'export.aggregator.person.by_household.title';
}
public function addRole(): ?string
{
return null;
}
public function alterQuery(QueryBuilder $qb, $data)
{
$qb->join(
HouseholdMember::class,
'activity_household_agg_household_member',
Join::WITH,
$qb->expr()->andX(
$qb->expr()->eq('activity_household_agg_household_member.person', 'activity.person'),
$qb->expr()->lte('activity_household_agg_household_member.startDate', 'activity.date'),
$qb->expr()->orX(
$qb->expr()->gte('activity_household_agg_household_member.endDate', 'activity.date'),
$qb->expr()->isNull('activity_household_agg_household_member.endDate')
)
)
);
$qb->join(
Household::class,
'activity_household_agg_household',
Join::WITH,
$qb->expr()->eq('activity_household_agg_household_member.household', 'activity_household_agg_household')
);
$qb
->addSelect('activity_household_agg_household.id AS activity_household_agg')
->addGroupBy('activity_household_agg');
}
public function applyOn()
{
return Declarations::ACTIVITY_PERSON;
}
}

View File

@@ -21,36 +21,43 @@ final readonly class PersonAggregator implements AggregatorInterface
{
public function __construct(private LabelPersonHelper $labelPersonHelper) {}
#[\Override]
public function buildForm(FormBuilderInterface $builder)
{
// nothing to add here
}
#[\Override]
public function getFormDefaultData(): array
{
return [];
}
#[\Override]
public function getLabels($key, array $values, mixed $data)
{
return $this->labelPersonHelper->getLabel($key, $values, 'export.aggregator.person.by_person.person');
}
#[\Override]
public function getQueryKeys($data)
{
return ['activity_by_person_agg'];
}
#[\Override]
public function getTitle()
{
return 'export.aggregator.person.by_person.title';
}
#[\Override]
public function addRole(): ?string
{
return null;
}
#[\Override]
public function alterQuery(QueryBuilder $qb, $data)
{
$qb
@@ -58,6 +65,7 @@ final readonly class PersonAggregator implements AggregatorInterface
->addGroupBy('activity_by_person_agg');
}
#[\Override]
public function applyOn()
{
return Declarations::ACTIVITY_PERSON;

View File

@@ -23,20 +23,23 @@ use Symfony\Component\Form\FormBuilderInterface;
*/
final readonly class PersonsAggregator implements AggregatorInterface
{
private const PREFIX = 'act_persons_agg';
private const string PREFIX = 'act_persons_agg';
public function __construct(private LabelPersonHelper $labelPersonHelper) {}
#[\Override]
public function buildForm(FormBuilderInterface $builder)
{
// nothing to add here
}
#[\Override]
public function getFormDefaultData(): array
{
return [];
}
#[\Override]
public function getLabels($key, array $values, mixed $data)
{
if ($key !== self::PREFIX.'_pid') {
@@ -46,21 +49,25 @@ final readonly class PersonsAggregator implements AggregatorInterface
return $this->labelPersonHelper->getLabel($key, $values, 'export.aggregator.activity.by_persons.Persons');
}
#[\Override]
public function getQueryKeys($data)
{
return [self::PREFIX.'_pid'];
}
#[\Override]
public function getTitle()
{
return 'export.aggregator.activity.by_persons.Group activity by persons';
}
#[\Override]
public function addRole(): ?string
{
return null;
}
#[\Override]
public function alterQuery(QueryBuilder $qb, $data)
{
$p = self::PREFIX;
@@ -71,6 +78,7 @@ final readonly class PersonsAggregator implements AggregatorInterface
->addGroupBy("{$p}_pid");
}
#[\Override]
public function applyOn()
{
return Declarations::ACTIVITY;

View File

@@ -21,32 +21,38 @@ class SentReceivedAggregator implements AggregatorInterface
{
public function __construct(private readonly TranslatorInterface $translator) {}
#[\Override]
public function addRole(): ?string
{
return null;
}
#[\Override]
public function alterQuery(QueryBuilder $qb, $data): void
{
$qb->addSelect('activity.sentReceived AS activity_sentreceived_aggregator')
->addGroupBy('activity_sentreceived_aggregator');
}
#[\Override]
public function applyOn(): string
{
return Declarations::ACTIVITY;
}
#[\Override]
public function buildForm(FormBuilderInterface $builder): void
{
// No form needed
}
#[\Override]
public function getFormDefaultData(): array
{
return [];
}
#[\Override]
public function getLabels($key, array $values, $data): callable
{
return function (?string $value): string {
@@ -71,11 +77,13 @@ class SentReceivedAggregator implements AggregatorInterface
};
}
#[\Override]
public function getQueryKeys($data): array
{
return ['activity_sentreceived_aggregator'];
}
#[\Override]
public function getTitle(): string
{
return 'export.aggregator.activity.by_sent_received.Group activity by sentreceived';

View File

@@ -36,28 +36,34 @@ class AvgActivityDuration implements ExportInterface, GroupedExportInterface
$this->filterStatsByCenters = $parameterBag->get('chill_main')['acl']['filter_stats_by_center'];
}
#[\Override]
public function buildForm(FormBuilderInterface $builder) {}
#[\Override]
public function getFormDefaultData(): array
{
return [];
}
#[\Override]
public function getAllowedFormattersTypes(): array
{
return [FormatterInterface::TYPE_TABULAR];
}
#[\Override]
public function getDescription(): string
{
return 'Average activities linked to an accompanying period duration by various parameters.';
}
#[\Override]
public function getGroup(): string
{
return 'Exports of activities linked to an accompanying period';
}
#[\Override]
public function getLabels($key, array $values, $data)
{
if ('export_avg_activity_duration' !== $key) {
@@ -67,26 +73,31 @@ class AvgActivityDuration implements ExportInterface, GroupedExportInterface
return static fn ($value) => '_header' === $value ? 'Average activities linked to an accompanying period duration' : $value;
}
#[\Override]
public function getQueryKeys($data): array
{
return ['export_avg_activity_duration'];
}
#[\Override]
public function getResult($query, $data)
{
return $query->getQuery()->getResult(Query::HYDRATE_SCALAR);
}
#[\Override]
public function getTitle(): string
{
return 'Average activity linked to an accompanying period duration';
}
#[\Override]
public function getType(): string
{
return Declarations::ACTIVITY;
}
#[\Override]
public function initiateQuery(array $requiredModifiers, array $acl, array $data = [])
{
$centers = array_map(static fn ($el) => $el['center'], $acl);
@@ -116,11 +127,13 @@ class AvgActivityDuration implements ExportInterface, GroupedExportInterface
return $qb;
}
#[\Override]
public function requiredRole(): string
{
return ActivityStatsVoter::STATS;
}
#[\Override]
public function supportsModifiers(): array
{
return [

View File

@@ -41,31 +41,37 @@ class AvgActivityVisitDuration implements ExportInterface, GroupedExportInterfac
$this->filterStatsByCenters = $parameterBag->get('chill_main')['acl']['filter_stats_by_center'];
}
#[\Override]
public function buildForm(FormBuilderInterface $builder)
{
// TODO: Implement buildForm() method.
}
#[\Override]
public function getFormDefaultData(): array
{
return [];
}
#[\Override]
public function getAllowedFormattersTypes(): array
{
return [FormatterInterface::TYPE_TABULAR];
}
#[\Override]
public function getDescription(): string
{
return 'Average activities linked to an accompanying period visit duration by various parameters.';
}
#[\Override]
public function getGroup(): string
{
return 'Exports of activities linked to an accompanying period';
}
#[\Override]
public function getLabels($key, array $values, $data)
{
if ('export_avg_activity_visit_duration' !== $key) {
@@ -75,26 +81,31 @@ class AvgActivityVisitDuration implements ExportInterface, GroupedExportInterfac
return static fn ($value) => '_header' === $value ? 'Average activities linked to an accompanying period visit duration' : $value;
}
#[\Override]
public function getQueryKeys($data): array
{
return ['export_avg_activity_visit_duration'];
}
#[\Override]
public function getResult($query, $data)
{
return $query->getQuery()->getResult(Query::HYDRATE_SCALAR);
}
#[\Override]
public function getTitle(): string
{
return 'Average activity linked to an accompanying period visit duration';
}
#[\Override]
public function getType(): string
{
return Declarations::ACTIVITY;
}
#[\Override]
public function initiateQuery(array $requiredModifiers, array $acl, array $data = [])
{
$centers = array_map(static fn ($el) => $el['center'], $acl);
@@ -124,11 +135,13 @@ class AvgActivityVisitDuration implements ExportInterface, GroupedExportInterfac
return $qb;
}
#[\Override]
public function requiredRole(): string
{
return ActivityStatsVoter::STATS;
}
#[\Override]
public function supportsModifiers(): array
{
return [

View File

@@ -41,28 +41,34 @@ class CountActivity implements ExportInterface, GroupedExportInterface
$this->filterStatsByCenters = $parameterBag->get('chill_main')['acl']['filter_stats_by_center'];
}
#[\Override]
public function buildForm(FormBuilderInterface $builder) {}
#[\Override]
public function getFormDefaultData(): array
{
return [];
}
#[\Override]
public function getAllowedFormattersTypes(): array
{
return [FormatterInterface::TYPE_TABULAR];
}
#[\Override]
public function getDescription(): string
{
return 'Count activities linked to an accompanying period by various parameters.';
}
#[\Override]
public function getGroup(): string
{
return 'Exports of activities linked to an accompanying period';
}
#[\Override]
public function getLabels($key, array $values, $data)
{
if ('export_count_activity' !== $key) {
@@ -72,26 +78,31 @@ class CountActivity implements ExportInterface, GroupedExportInterface
return static fn ($value) => '_header' === $value ? 'Number of activities linked to an accompanying period' : $value;
}
#[\Override]
public function getQueryKeys($data): array
{
return ['export_count_activity'];
}
#[\Override]
public function getResult($query, $data)
{
return $query->getQuery()->getResult(Query::HYDRATE_SCALAR);
}
#[\Override]
public function getTitle(): string
{
return 'Count activities linked to an accompanying period';
}
#[\Override]
public function getType(): string
{
return Declarations::ACTIVITY;
}
#[\Override]
public function initiateQuery(array $requiredModifiers, array $acl, array $data = [])
{
$centers = array_map(static fn ($el) => $el['center'], $acl);
@@ -120,11 +131,13 @@ class CountActivity implements ExportInterface, GroupedExportInterface
return $qb;
}
#[\Override]
public function requiredRole(): string
{
return ActivityStatsVoter::STATS;
}
#[\Override]
public function supportsModifiers(): array
{
return [

View File

@@ -42,28 +42,34 @@ final readonly class CountHouseholdOnActivity implements ExportInterface, Groupe
$this->filterStatsByCenters = $parameterBag->get('chill_main')['acl']['filter_stats_by_center'];
}
#[\Override]
public function buildForm(FormBuilderInterface $builder) {}
#[\Override]
public function getFormDefaultData(): array
{
return [];
}
#[\Override]
public function getAllowedFormattersTypes(): array
{
return [FormatterInterface::TYPE_TABULAR];
}
#[\Override]
public function getDescription(): string
{
return 'export.export.count_household_on_activity.description';
}
#[\Override]
public function getGroup(): string
{
return 'Exports of activities linked to an accompanying period';
}
#[\Override]
public function getLabels($key, array $values, $data)
{
if ('export_count_activity' !== $key) {
@@ -73,26 +79,31 @@ final readonly class CountHouseholdOnActivity implements ExportInterface, Groupe
return static fn ($value) => '_header' === $value ? 'export.export.count_household_on_activity.header' : $value;
}
#[\Override]
public function getQueryKeys($data): array
{
return ['export_count_activity'];
}
#[\Override]
public function getResult($query, $data)
{
return $query->getQuery()->getResult(Query::HYDRATE_SCALAR);
}
#[\Override]
public function getTitle(): string
{
return 'export.export.count_household_on_activity.title';
}
#[\Override]
public function getType(): string
{
return Declarations::ACTIVITY;
}
#[\Override]
public function initiateQuery(array $requiredModifiers, array $acl, array $data = [])
{
$centers = array_map(static fn ($el) => $el['center'], $acl);
@@ -129,11 +140,13 @@ final readonly class CountHouseholdOnActivity implements ExportInterface, Groupe
return $qb;
}
#[\Override]
public function requiredRole(): string
{
return ActivityStatsVoter::STATS;
}
#[\Override]
public function supportsModifiers(): array
{
return [

View File

@@ -41,28 +41,34 @@ class CountPersonsOnActivity implements ExportInterface, GroupedExportInterface
$this->filterStatsByCenters = $parameterBag->get('chill_main')['acl']['filter_stats_by_center'];
}
#[\Override]
public function buildForm(FormBuilderInterface $builder) {}
#[\Override]
public function getFormDefaultData(): array
{
return [];
}
#[\Override]
public function getAllowedFormattersTypes(): array
{
return [FormatterInterface::TYPE_TABULAR];
}
#[\Override]
public function getDescription(): string
{
return 'export.export.count_person_on_activity.description';
}
#[\Override]
public function getGroup(): string
{
return 'Exports of activities linked to an accompanying period';
}
#[\Override]
public function getLabels($key, array $values, $data)
{
if ('export_count_activity' !== $key) {
@@ -72,26 +78,31 @@ class CountPersonsOnActivity implements ExportInterface, GroupedExportInterface
return static fn ($value) => '_header' === $value ? 'export.export.count_person_on_activity.header' : $value;
}
#[\Override]
public function getQueryKeys($data): array
{
return ['export_count_activity'];
}
#[\Override]
public function getResult($query, $data)
{
return $query->getQuery()->getResult(Query::HYDRATE_SCALAR);
}
#[\Override]
public function getTitle(): string
{
return 'export.export.count_person_on_activity.title';
}
#[\Override]
public function getType(): string
{
return Declarations::ACTIVITY;
}
#[\Override]
public function initiateQuery(array $requiredModifiers, array $acl, array $data = [])
{
$centers = array_map(static fn ($el) => $el['center'], $acl);
@@ -121,11 +132,13 @@ class CountPersonsOnActivity implements ExportInterface, GroupedExportInterface
return $qb;
}
#[\Override]
public function requiredRole(): string
{
return ActivityStatsVoter::STATS;
}
#[\Override]
public function supportsModifiers(): array
{
return [

View File

@@ -33,31 +33,37 @@ final readonly class ListActivity implements ListInterface, GroupedExportInterfa
private FilterListAccompanyingPeriodHelperInterface $filterListAccompanyingPeriodHelper,
) {}
#[\Override]
public function buildForm(FormBuilderInterface $builder)
{
$this->helper->buildForm($builder);
}
#[\Override]
public function getFormDefaultData(): array
{
return [];
}
#[\Override]
public function getAllowedFormattersTypes()
{
return $this->helper->getAllowedFormattersTypes();
}
#[\Override]
public function getDescription()
{
return ListActivityHelper::MSG_KEY.'List activities linked to an accompanying course';
}
#[\Override]
public function getGroup(): string
{
return 'Exports of activities linked to an accompanying period';
}
#[\Override]
public function getLabels($key, array $values, $data)
{
return match ($key) {
@@ -73,6 +79,7 @@ final readonly class ListActivity implements ListInterface, GroupedExportInterfa
};
}
#[\Override]
public function getQueryKeys($data)
{
return
@@ -85,21 +92,25 @@ final readonly class ListActivity implements ListInterface, GroupedExportInterfa
);
}
#[\Override]
public function getResult($query, $data)
{
return $this->helper->getResult($query, $data);
}
#[\Override]
public function getTitle()
{
return ListActivityHelper::MSG_KEY.'List activity linked to a course';
}
#[\Override]
public function getType()
{
return $this->helper->getType();
}
#[\Override]
public function initiateQuery(array $requiredModifiers, array $acl, array $data = [])
{
$centers = array_map(static fn ($el) => $el['center'], $acl);
@@ -135,11 +146,13 @@ final readonly class ListActivity implements ListInterface, GroupedExportInterfa
return $qb;
}
#[\Override]
public function requiredRole(): string
{
return ActivityStatsVoter::LISTS;
}
#[\Override]
public function supportsModifiers()
{
return array_merge(

View File

@@ -40,31 +40,37 @@ class SumActivityDuration implements ExportInterface, GroupedExportInterface
$this->filterStatsByCenters = $parameterBag->get('chill_main')['acl']['filter_stats_by_center'];
}
#[\Override]
public function buildForm(FormBuilderInterface $builder)
{
// TODO: Implement buildForm() method.
}
#[\Override]
public function getFormDefaultData(): array
{
return [];
}
#[\Override]
public function getAllowedFormattersTypes(): array
{
return [FormatterInterface::TYPE_TABULAR];
}
#[\Override]
public function getDescription(): string
{
return 'Sum activities linked to an accompanying period duration by various parameters.';
}
#[\Override]
public function getGroup(): string
{
return 'Exports of activities linked to an accompanying period';
}
#[\Override]
public function getLabels($key, array $values, $data)
{
if ('export_sum_activity_duration' !== $key) {
@@ -74,26 +80,31 @@ class SumActivityDuration implements ExportInterface, GroupedExportInterface
return static fn ($value) => '_header' === $value ? 'Sum activities linked to an accompanying period duration' : $value;
}
#[\Override]
public function getQueryKeys($data): array
{
return ['export_sum_activity_duration'];
}
#[\Override]
public function getResult($query, $data)
{
return $query->getQuery()->getResult(Query::HYDRATE_SCALAR);
}
#[\Override]
public function getTitle(): string
{
return 'Sum activity linked to an accompanying period duration';
}
#[\Override]
public function getType(): string
{
return Declarations::ACTIVITY;
}
#[\Override]
public function initiateQuery(array $requiredModifiers, array $acl, array $data = [])
{
$centers = array_map(static fn ($el) => $el['center'], $acl);
@@ -123,11 +134,13 @@ class SumActivityDuration implements ExportInterface, GroupedExportInterface
return $qb;
}
#[\Override]
public function requiredRole(): string
{
return ActivityStatsVoter::STATS;
}
#[\Override]
public function supportsModifiers(): array
{
return [

View File

@@ -40,31 +40,37 @@ class SumActivityVisitDuration implements ExportInterface, GroupedExportInterfac
$this->filterStatsByCenters = $parameterBag->get('chill_main')['acl']['filter_stats_by_center'];
}
#[\Override]
public function buildForm(FormBuilderInterface $builder)
{
// TODO: Implement buildForm() method.
}
#[\Override]
public function getFormDefaultData(): array
{
return [];
}
#[\Override]
public function getAllowedFormattersTypes(): array
{
return [FormatterInterface::TYPE_TABULAR];
}
#[\Override]
public function getDescription(): string
{
return 'Sum activities linked to an accompanying period visit duration by various parameters.';
}
#[\Override]
public function getGroup(): string
{
return 'Exports of activities linked to an accompanying period';
}
#[\Override]
public function getLabels($key, array $values, $data)
{
if ('export_sum_activity_visit_duration' !== $key) {
@@ -74,26 +80,31 @@ class SumActivityVisitDuration implements ExportInterface, GroupedExportInterfac
return static fn ($value) => '_header' === $value ? 'Sum activities linked to an accompanying period visit duration' : $value;
}
#[\Override]
public function getQueryKeys($data): array
{
return ['export_sum_activity_visit_duration'];
}
#[\Override]
public function getResult($query, $data)
{
return $query->getQuery()->getResult(Query::HYDRATE_SCALAR);
}
#[\Override]
public function getTitle(): string
{
return 'Sum activity linked to an accompanying period visit duration';
}
#[\Override]
public function getType(): string
{
return Declarations::ACTIVITY;
}
#[\Override]
public function initiateQuery(array $requiredModifiers, array $acl, array $data = [])
{
$centers = array_map(static fn ($el) => $el['center'], $acl);
@@ -123,11 +134,13 @@ class SumActivityVisitDuration implements ExportInterface, GroupedExportInterfac
return $qb;
}
#[\Override]
public function requiredRole(): string
{
return ActivityStatsVoter::STATS;
}
#[\Override]
public function supportsModifiers(): array
{
return [

View File

@@ -33,28 +33,34 @@ class CountActivity implements ExportInterface, GroupedExportInterface
$this->filterStatsByCenters = $parameterBag->get('chill_main')['acl']['filter_stats_by_center'];
}
#[\Override]
public function buildForm(FormBuilderInterface $builder) {}
#[\Override]
public function getFormDefaultData(): array
{
return [];
}
#[\Override]
public function getAllowedFormattersTypes()
{
return [FormatterInterface::TYPE_TABULAR];
}
#[\Override]
public function getDescription()
{
return 'Count activities linked to a person by various parameters.';
}
#[\Override]
public function getGroup(): string
{
return 'Exports of activities linked to a person';
}
#[\Override]
public function getLabels($key, array $values, $data)
{
if ('export_count_activity' !== $key) {
@@ -64,26 +70,31 @@ class CountActivity implements ExportInterface, GroupedExportInterface
return static fn ($value) => '_header' === $value ? 'Number of activities linked to a person' : $value;
}
#[\Override]
public function getQueryKeys($data)
{
return ['export_count_activity'];
}
#[\Override]
public function getResult($query, $data)
{
return $query->getQuery()->getResult(Query::HYDRATE_SCALAR);
}
#[\Override]
public function getTitle()
{
return 'Count activities linked to a person';
}
#[\Override]
public function getType(): string
{
return Declarations::ACTIVITY;
}
#[\Override]
public function initiateQuery(array $requiredModifiers, array $acl, array $data = [])
{
$centers = array_map(static fn ($el) => $el['center'], $acl);
@@ -113,11 +124,13 @@ class CountActivity implements ExportInterface, GroupedExportInterface
return $qb;
}
#[\Override]
public function requiredRole(): string
{
return ActivityStatsVoter::STATS;
}
#[\Override]
public function supportsModifiers()
{
return [

View File

@@ -34,28 +34,34 @@ final readonly class CountHouseholdOnActivity implements ExportInterface, Groupe
$this->filterStatsByCenters = $parameterBag->get('chill_main')['acl']['filter_stats_by_center'];
}
#[\Override]
public function buildForm(FormBuilderInterface $builder) {}
#[\Override]
public function getFormDefaultData(): array
{
return [];
}
#[\Override]
public function getAllowedFormattersTypes()
{
return [FormatterInterface::TYPE_TABULAR];
}
#[\Override]
public function getDescription()
{
return 'export.export.count_household_on_activity_person.description';
}
#[\Override]
public function getGroup(): string
{
return 'Exports of activities linked to a person';
}
#[\Override]
public function getLabels($key, array $values, $data)
{
if ('export_count_activity' !== $key) {
@@ -65,26 +71,31 @@ final readonly class CountHouseholdOnActivity implements ExportInterface, Groupe
return static fn ($value) => '_header' === $value ? 'export.export.count_household_on_activity_person.header' : $value;
}
#[\Override]
public function getQueryKeys($data)
{
return ['export_count_activity'];
}
#[\Override]
public function getResult($query, $data)
{
return $query->getQuery()->getResult(Query::HYDRATE_SCALAR);
}
#[\Override]
public function getTitle()
{
return 'export.export.count_household_on_activity_person.title';
}
#[\Override]
public function getType(): string
{
return Declarations::ACTIVITY;
}
#[\Override]
public function initiateQuery(array $requiredModifiers, array $acl, array $data = [])
{
$centers = array_map(static fn ($el) => $el['center'], $acl);
@@ -121,11 +132,13 @@ final readonly class CountHouseholdOnActivity implements ExportInterface, Groupe
return $qb;
}
#[\Override]
public function requiredRole(): string
{
return ActivityStatsVoter::STATS;
}
#[\Override]
public function supportsModifiers()
{
return [

View File

@@ -19,7 +19,6 @@ use Chill\MainBundle\Export\FormatterInterface;
use Chill\MainBundle\Export\GroupedExportInterface;
use Chill\MainBundle\Export\ListInterface;
use Chill\MainBundle\Templating\TranslatableStringHelperInterface;
use Chill\PersonBundle\Entity\Household\HouseholdMember;
use Chill\PersonBundle\Export\Declarations as PersonDeclarations;
use Doctrine\DBAL\Exception\InvalidArgumentException;
use Doctrine\ORM\EntityManagerInterface;
@@ -45,7 +44,6 @@ class ListActivity implements ListInterface, GroupedExportInterface
'person_firstname',
'person_lastname',
'person_id',
'household_id',
];
private readonly bool $filterStatsByCenters;
@@ -59,6 +57,7 @@ class ListActivity implements ListInterface, GroupedExportInterface
$this->filterStatsByCenters = $parameterBag->get('chill_main')['acl']['filter_stats_by_center'];
}
#[\Override]
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('fields', ChoiceType::class, [
@@ -78,26 +77,31 @@ class ListActivity implements ListInterface, GroupedExportInterface
]);
}
#[\Override]
public function getFormDefaultData(): array
{
return [];
}
#[\Override]
public function getAllowedFormattersTypes()
{
return [FormatterInterface::TYPE_LIST];
}
#[\Override]
public function getDescription()
{
return 'List activities linked to a person description';
}
#[\Override]
public function getGroup(): string
{
return 'Exports of activities linked to a person';
}
#[\Override]
public function getLabels($key, array $values, $data)
{
switch ($key) {
@@ -167,50 +171,48 @@ class ListActivity implements ListInterface, GroupedExportInterface
}
}
#[\Override]
public function getQueryKeys($data)
{
return $data['fields'];
}
#[\Override]
public function getResult($query, $data)
{
return $query->getQuery()->getResult(Query::HYDRATE_SCALAR);
}
#[\Override]
public function getTitle()
{
return 'List activity linked to a person';
}
#[\Override]
public function getType(): string
{
return Declarations::ACTIVITY;
}
#[\Override]
public function initiateQuery(array $requiredModifiers, array $acl, array $data = [])
{
$centers = array_map(static fn ($el) => $el['center'], $acl);
// throw an error if no fields are present
// throw an error if any fields are present
if (!\array_key_exists('fields', $data)) {
throw new InvalidArgumentException('No fields have been checked.');
throw new InvalidArgumentException('Any fields have been checked.');
}
$qb = $this->entityManager->createQueryBuilder();
$qb
->from('ChillActivityBundle:Activity', 'activity')
->join('activity.person', 'person')
->join(
HouseholdMember::class,
'householdmember',
Query\Expr\Join::WITH,
'person = householdmember.person AND householdmember.startDate <= activity.date AND (householdmember.endDate IS NULL OR householdmember.endDate > activity.date)'
)
->join('householdmember.household', 'household');
->join('activity.person', 'actperson');
if ($this->filterStatsByCenters) {
$qb->join('person.centerHistory', 'centerHistory');
$qb->join('actperson.centerHistory', 'centerHistory');
$qb->where(
$qb->expr()->andX(
$qb->expr()->lte('centerHistory.startDate', 'activity.date'),
@@ -233,22 +235,17 @@ class ListActivity implements ListInterface, GroupedExportInterface
break;
case 'person_firstname':
$qb->addSelect('person.firstName AS person_firstname');
$qb->addSelect('actperson.firstName AS person_firstname');
break;
case 'person_lastname':
$qb->addSelect('person.lastName AS person_lastname');
$qb->addSelect('actperson.lastName AS person_lastname');
break;
case 'person_id':
$qb->addSelect('person.id AS person_id');
break;
case 'household_id':
$qb->addSelect('household.id AS household_id');
$qb->addSelect('actperson.id AS person_id');
break;
@@ -293,12 +290,14 @@ class ListActivity implements ListInterface, GroupedExportInterface
return $qb;
}
#[\Override]
public function requiredRole(): string
{
return ActivityStatsVoter::LISTS;
}
public function supportsModifiers(): array
#[\Override]
public function supportsModifiers()
{
return [
Declarations::ACTIVITY,

View File

@@ -30,7 +30,7 @@ use Symfony\Component\Form\FormBuilderInterface;
*/
class StatActivityDuration implements ExportInterface, GroupedExportInterface
{
final public const SUM = 'sum';
final public const string SUM = 'sum';
private readonly bool $filterStatsByCenters;
/**
@@ -42,23 +42,27 @@ class StatActivityDuration implements ExportInterface, GroupedExportInterface
/**
* The action for this report.
*/
protected string $action = 'sum',
protected string $action = 'sum'
) {
$this->filterStatsByCenters = $parameterBag->get('chill_main')['acl']['filter_stats_by_center'];
}
#[\Override]
public function buildForm(FormBuilderInterface $builder) {}
#[\Override]
public function getFormDefaultData(): array
{
return [];
}
#[\Override]
public function getAllowedFormattersTypes()
{
return [FormatterInterface::TYPE_TABULAR];
}
#[\Override]
public function getDescription()
{
if (self::SUM === $this->action) {
@@ -68,11 +72,13 @@ class StatActivityDuration implements ExportInterface, GroupedExportInterface
throw new \LogicException('this action is not supported: '.$this->action);
}
#[\Override]
public function getGroup(): string
{
return 'Exports of activities linked to a person';
}
#[\Override]
public function getLabels($key, array $values, $data)
{
if ('export_stat_activity' !== $key) {
@@ -84,16 +90,19 @@ class StatActivityDuration implements ExportInterface, GroupedExportInterface
return static fn (string $value) => '_header' === $value ? $header : $value;
}
#[\Override]
public function getQueryKeys($data)
{
return ['export_stat_activity'];
}
#[\Override]
public function getResult($query, $data)
{
return $query->getQuery()->getResult(Query::HYDRATE_SCALAR);
}
#[\Override]
public function getTitle()
{
if (self::SUM === $this->action) {
@@ -103,11 +112,13 @@ class StatActivityDuration implements ExportInterface, GroupedExportInterface
throw new \LogicException('This action is not supported: '.$this->action);
}
#[\Override]
public function getType(): string
{
return Declarations::ACTIVITY;
}
#[\Override]
public function initiateQuery(array $requiredModifiers, array $acl, array $data = [])
{
$centers = array_map(
@@ -145,11 +156,13 @@ class StatActivityDuration implements ExportInterface, GroupedExportInterface
return $qb;
}
#[\Override]
public function requiredRole(): string
{
return ActivityStatsVoter::STATS;
}
#[\Override]
public function supportsModifiers()
{
return [

View File

@@ -28,7 +28,7 @@ use Symfony\Contracts\Translation\TranslatorInterface;
class ListActivityHelper
{
final public const MSG_KEY = 'export.list.activity.';
final public const string MSG_KEY = 'export.list.activity.';
public function __construct(
private readonly ActivityPresenceRepositoryInterface $activityPresenceRepository,
@@ -39,7 +39,7 @@ class ListActivityHelper
private readonly TranslatorInterface $translator,
private readonly TranslatableStringHelperInterface $translatableStringHelper,
private readonly TranslatableStringExportLabelHelper $translatableStringLabelHelper,
private readonly UserHelper $userHelper,
private readonly UserHelper $userHelper
) {}
public function addSelect(QueryBuilder $qb): void

View File

@@ -25,7 +25,7 @@ use Symfony\Component\Form\FormBuilderInterface;
final readonly class ActivityTypeFilter implements FilterInterface
{
private const BASE_EXISTS = 'SELECT 1 FROM '.Activity::class.' act_type_filter_activity WHERE act_type_filter_activity.accompanyingPeriod = acp';
private const string BASE_EXISTS = 'SELECT 1 FROM '.Activity::class.' act_type_filter_activity WHERE act_type_filter_activity.accompanyingPeriod = acp';
public function __construct(
private ActivityTypeRepositoryInterface $activityTypeRepository,
@@ -33,11 +33,13 @@ final readonly class ActivityTypeFilter implements FilterInterface
private RollingDateConverterInterface $rollingDateConverter,
) {}
#[\Override]
public function addRole(): ?string
{
return null;
}
#[\Override]
public function alterQuery(QueryBuilder $qb, $data)
{
$exists = self::BASE_EXISTS;
@@ -62,11 +64,13 @@ final readonly class ActivityTypeFilter implements FilterInterface
}
}
#[\Override]
public function applyOn()
{
return Declarations::ACP_TYPE;
}
#[\Override]
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('accepted_activitytypes', EntityType::class, [
@@ -92,6 +96,7 @@ final readonly class ActivityTypeFilter implements FilterInterface
]);
}
#[\Override]
public function getFormDefaultData(): array
{
return [
@@ -101,6 +106,7 @@ final readonly class ActivityTypeFilter implements FilterInterface
];
}
#[\Override]
public function describeAction($data, $format = 'string'): array
{
$types = [];
@@ -118,6 +124,7 @@ final readonly class ActivityTypeFilter implements FilterInterface
]];
}
#[\Override]
public function getTitle(): string
{
return 'Filter accompanying course by activity type';

View File

@@ -23,11 +23,13 @@ class BySocialActionFilter implements FilterInterface
{
public function __construct(private readonly SocialActionRender $actionRender) {}
#[\Override]
public function addRole(): ?string
{
return null;
}
#[\Override]
public function alterQuery(QueryBuilder $qb, $data)
{
if (!\in_array('actsocialaction', $qb->getAllAliases(), true)) {
@@ -43,11 +45,13 @@ class BySocialActionFilter implements FilterInterface
);
}
#[\Override]
public function applyOn(): string
{
return Declarations::ACTIVITY_ACP;
}
#[\Override]
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('accepted_socialactions', PickSocialActionType::class, [
@@ -55,11 +59,13 @@ class BySocialActionFilter implements FilterInterface
]);
}
#[\Override]
public function getFormDefaultData(): array
{
return [];
}
#[\Override]
public function describeAction($data, $format = 'string'): array
{
$actions = [];
@@ -75,6 +81,7 @@ class BySocialActionFilter implements FilterInterface
]];
}
#[\Override]
public function getTitle(): string
{
return 'Filter activity by linked socialaction';

View File

@@ -23,11 +23,13 @@ class BySocialIssueFilter implements FilterInterface
{
public function __construct(private readonly SocialIssueRender $issueRender) {}
#[\Override]
public function addRole(): ?string
{
return null;
}
#[\Override]
public function alterQuery(QueryBuilder $qb, $data)
{
if (!\in_array('actsocialissue', $qb->getAllAliases(), true)) {
@@ -43,11 +45,13 @@ class BySocialIssueFilter implements FilterInterface
);
}
#[\Override]
public function applyOn(): string
{
return Declarations::ACTIVITY_ACP;
}
#[\Override]
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('accepted_socialissues', PickSocialIssueType::class, [
@@ -55,11 +59,13 @@ class BySocialIssueFilter implements FilterInterface
]);
}
#[\Override]
public function getFormDefaultData(): array
{
return [];
}
#[\Override]
public function describeAction($data, $format = 'string'): array
{
$issues = [];
@@ -75,6 +81,7 @@ class BySocialIssueFilter implements FilterInterface
]];
}
#[\Override]
public function getTitle(): string
{
return 'Filter activity by linked socialissue';

View File

@@ -22,11 +22,13 @@ use Symfony\Component\Form\FormBuilderInterface;
*/
class HasNoActivityFilter implements FilterInterface
{
#[\Override]
public function addRole(): ?string
{
return null;
}
#[\Override]
public function alterQuery(QueryBuilder $qb, $data)
{
$qb
@@ -38,26 +40,31 @@ class HasNoActivityFilter implements FilterInterface
');
}
#[\Override]
public function applyOn(): string
{
return Declarations::ACP_TYPE;
}
#[\Override]
public function buildForm(FormBuilderInterface $builder)
{
// no form needed
}
#[\Override]
public function getFormDefaultData(): array
{
return [];
}
#[\Override]
public function describeAction($data, $format = 'string'): array
{
return ['Filtered acp which has no activities', []];
}
#[\Override]
public function getTitle(): string
{
return 'Filter acp which has no activity';

View File

@@ -25,11 +25,13 @@ final readonly class PeriodHavingActivityBetweenDatesFilter implements FilterInt
private RollingDateConverterInterface $rollingDateConverter,
) {}
#[\Override]
public function getTitle()
{
return 'export.filter.activity.course_having_activity_between_date.Title';
}
#[\Override]
public function buildForm(FormBuilderInterface $builder)
{
$builder
@@ -41,6 +43,7 @@ final readonly class PeriodHavingActivityBetweenDatesFilter implements FilterInt
]);
}
#[\Override]
public function getFormDefaultData(): array
{
return [
@@ -49,6 +52,7 @@ final readonly class PeriodHavingActivityBetweenDatesFilter implements FilterInt
];
}
#[\Override]
public function describeAction($data, $format = 'string')
{
return [
@@ -60,11 +64,13 @@ final readonly class PeriodHavingActivityBetweenDatesFilter implements FilterInt
];
}
#[\Override]
public function addRole(): ?string
{
return null;
}
#[\Override]
public function alterQuery(QueryBuilder $qb, $data)
{
$alias = 'act_period_having_act_betw_date_alias';
@@ -73,7 +79,7 @@ final readonly class PeriodHavingActivityBetweenDatesFilter implements FilterInt
$qb->andWhere(
$qb->expr()->exists(
'SELECT 1 FROM '.Activity::class." {$alias} WHERE {$alias}.date >= :{$from} AND {$alias}.date < :{$to} AND {$alias}.accompanyingPeriod = acp"
'SELECT 1 FROM '.Activity::class." {$alias} WHERE {$alias}.date >= :{$from} AND {$alias}.date < :{$to} AND {$alias}.accompanyingPeriod = activity.accompanyingPeriod"
)
);
@@ -82,6 +88,7 @@ final readonly class PeriodHavingActivityBetweenDatesFilter implements FilterInt
->setParameter($to, $this->rollingDateConverter->convert($data['end_date']));
}
#[\Override]
public function applyOn()
{
return \Chill\PersonBundle\Export\Declarations::ACP_TYPE;

View File

@@ -25,11 +25,13 @@ class ActivityDateFilter implements FilterInterface
{
public function __construct(protected TranslatorInterface $translator, private readonly RollingDateConverterInterface $rollingDateConverter) {}
#[\Override]
public function addRole(): ?string
{
return null;
}
#[\Override]
public function alterQuery(QueryBuilder $qb, $data)
{
$where = $qb->getDQLPart('where');
@@ -56,11 +58,13 @@ class ActivityDateFilter implements FilterInterface
);
}
#[\Override]
public function applyOn(): string
{
return Declarations::ACTIVITY;
}
#[\Override]
public function buildForm(FormBuilderInterface $builder)
{
$builder
@@ -72,11 +76,13 @@ class ActivityDateFilter implements FilterInterface
]);
}
#[\Override]
public function getFormDefaultData(): array
{
return ['date_from' => new RollingDate(RollingDate::T_YEAR_PREVIOUS_START), 'date_to' => new RollingDate(RollingDate::T_TODAY)];
}
#[\Override]
public function describeAction($data, $format = 'string')
{
return [
@@ -88,6 +94,7 @@ class ActivityDateFilter implements FilterInterface
];
}
#[\Override]
public function getTitle()
{
return 'Filtered by date activity';

View File

@@ -25,14 +25,16 @@ final readonly class ActivityPresenceFilter implements FilterInterface
{
public function __construct(
private TranslatableStringHelperInterface $translatableStringHelper,
private TranslatorInterface $translator,
private TranslatorInterface $translator
) {}
#[\Override]
public function getTitle()
{
return 'export.filter.activity.by_presence.Filter activity by activity presence';
}
#[\Override]
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('presences', EntityType::class, [
@@ -45,11 +47,13 @@ final readonly class ActivityPresenceFilter implements FilterInterface
]);
}
#[\Override]
public function getFormDefaultData(): array
{
return [];
}
#[\Override]
public function describeAction($data, $format = 'string')
{
$presences = array_map(
@@ -63,11 +67,13 @@ final readonly class ActivityPresenceFilter implements FilterInterface
];
}
#[\Override]
public function addRole(): ?string
{
return null;
}
#[\Override]
public function alterQuery(QueryBuilder $qb, $data)
{
$qb
@@ -75,6 +81,7 @@ final readonly class ActivityPresenceFilter implements FilterInterface
->setParameter('activity_presence_filter_presences', $data['presences']);
}
#[\Override]
public function applyOn()
{
return Declarations::ACTIVITY;

View File

@@ -26,14 +26,16 @@ class ActivityTypeFilter implements ExportElementValidatedInterface, FilterInter
{
public function __construct(
protected TranslatableStringHelperInterface $translatableStringHelper,
protected ActivityTypeRepositoryInterface $activityTypeRepository,
protected ActivityTypeRepositoryInterface $activityTypeRepository
) {}
#[\Override]
public function addRole(): ?string
{
return null;
}
#[\Override]
public function alterQuery(QueryBuilder $qb, $data)
{
$clause = $qb->expr()->in('activity.activityType', ':selected_activity_types');
@@ -42,11 +44,13 @@ class ActivityTypeFilter implements ExportElementValidatedInterface, FilterInter
$qb->setParameter('selected_activity_types', $data['types']);
}
#[\Override]
public function applyOn(): string
{
return Declarations::ACTIVITY;
}
#[\Override]
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('types', EntityType::class, [
@@ -70,11 +74,13 @@ class ActivityTypeFilter implements ExportElementValidatedInterface, FilterInter
]);
}
#[\Override]
public function getFormDefaultData(): array
{
return [];
}
#[\Override]
public function describeAction($data, $format = 'string')
{
// collect all the reasons'name used in this filter in one array
@@ -88,11 +94,13 @@ class ActivityTypeFilter implements ExportElementValidatedInterface, FilterInter
]];
}
#[\Override]
public function getTitle()
{
return 'Filter by activity type';
}
#[\Override]
public function validateForm($data, ExecutionContextInterface $context)
{
if (null === $data['types'] || 0 === \count($data['types'])) {

View File

@@ -22,11 +22,13 @@ class ActivityUsersFilter implements FilterInterface
{
public function __construct(private readonly UserRender $userRender) {}
#[\Override]
public function addRole(): ?string
{
return null;
}
#[\Override]
public function alterQuery(QueryBuilder $qb, $data)
{
$orX = $qb->expr()->orX();
@@ -39,11 +41,13 @@ class ActivityUsersFilter implements FilterInterface
$qb->andWhere($orX);
}
#[\Override]
public function applyOn()
{
return Declarations::ACTIVITY;
}
#[\Override]
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('accepted_users', PickUserDynamicType::class, [
@@ -52,11 +56,13 @@ class ActivityUsersFilter implements FilterInterface
]);
}
#[\Override]
public function getFormDefaultData(): array
{
return [];
}
#[\Override]
public function describeAction($data, $format = 'string')
{
$users = [];
@@ -70,6 +76,7 @@ class ActivityUsersFilter implements FilterInterface
]];
}
#[\Override]
public function getTitle(): string
{
return 'Filter activity by users';

View File

@@ -22,11 +22,13 @@ class ByCreatorFilter implements FilterInterface
{
public function __construct(private readonly UserRender $userRender) {}
#[\Override]
public function addRole(): ?string
{
return null;
}
#[\Override]
public function alterQuery(QueryBuilder $qb, $data)
{
$qb
@@ -36,11 +38,13 @@ class ByCreatorFilter implements FilterInterface
->setParameter('users', $data['accepted_users']);
}
#[\Override]
public function applyOn(): string
{
return Declarations::ACTIVITY;
}
#[\Override]
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('accepted_users', PickUserDynamicType::class, [
@@ -48,11 +52,13 @@ class ByCreatorFilter implements FilterInterface
]);
}
#[\Override]
public function getFormDefaultData(): array
{
return [];
}
#[\Override]
public function describeAction($data, $format = 'string'): array
{
$users = [];
@@ -66,6 +72,7 @@ class ByCreatorFilter implements FilterInterface
]];
}
#[\Override]
public function getTitle(): string
{
return 'Filter activity by creator';

View File

@@ -26,7 +26,7 @@ use Symfony\Contracts\Translation\TranslatorInterface;
final readonly class CreatorJobFilter implements FilterInterface
{
private const PREFIX = 'acp_act_filter_creator_job';
private const string PREFIX = 'acp_act_filter_creator_job';
public function __construct(
private TranslatableStringHelper $translatableStringHelper,
@@ -34,11 +34,13 @@ final readonly class CreatorJobFilter implements FilterInterface
private UserJobRepositoryInterface $userJobRepository,
) {}
#[\Override]
public function addRole(): ?string
{
return null;
}
#[\Override]
public function alterQuery(QueryBuilder $qb, $data)
{
$p = self::PREFIX;
@@ -70,11 +72,13 @@ final readonly class CreatorJobFilter implements FilterInterface
);
}
#[\Override]
public function applyOn(): string
{
return Declarations::ACTIVITY;
}
#[\Override]
public function buildForm(FormBuilderInterface $builder)
{
$builder
@@ -90,6 +94,7 @@ final readonly class CreatorJobFilter implements FilterInterface
]);
}
#[\Override]
public function describeAction($data, $format = 'string'): array
{
$jobs = array_map(
@@ -102,6 +107,7 @@ final readonly class CreatorJobFilter implements FilterInterface
]];
}
#[\Override]
public function getFormDefaultData(): array
{
return [
@@ -109,6 +115,7 @@ final readonly class CreatorJobFilter implements FilterInterface
];
}
#[\Override]
public function getTitle(): string
{
return 'export.filter.activity.by_creator_job.Filter activity by user job';

View File

@@ -24,18 +24,20 @@ use Symfony\Component\Form\FormBuilderInterface;
class CreatorScopeFilter implements FilterInterface
{
private const PREFIX = 'acp_act_filter_creator_scope';
private const string PREFIX = 'acp_act_filter_creator_scope';
public function __construct(
private readonly TranslatableStringHelper $translatableStringHelper,
private readonly ScopeRepositoryInterface $scopeRepository,
) {}
#[\Override]
public function addRole(): ?string
{
return null;
}
#[\Override]
public function alterQuery(QueryBuilder $qb, $data)
{
$p = self::PREFIX;
@@ -67,11 +69,13 @@ class CreatorScopeFilter implements FilterInterface
);
}
#[\Override]
public function applyOn(): string
{
return Declarations::ACTIVITY;
}
#[\Override]
public function buildForm(FormBuilderInterface $builder)
{
$builder
@@ -86,6 +90,7 @@ class CreatorScopeFilter implements FilterInterface
]);
}
#[\Override]
public function describeAction($data, $format = 'string'): array
{
$scopes = [];
@@ -101,6 +106,7 @@ class CreatorScopeFilter implements FilterInterface
]];
}
#[\Override]
public function getFormDefaultData(): array
{
return [
@@ -108,6 +114,7 @@ class CreatorScopeFilter implements FilterInterface
];
}
#[\Override]
public function getTitle(): string
{
return 'export.filter.activity.by_creator_scope.Filter activity by user scope';

View File

@@ -21,20 +21,22 @@ use Symfony\Contracts\Translation\TranslatorInterface;
class EmergencyFilter implements FilterInterface
{
private const CHOICES = [
private const array CHOICES = [
'activity is emergency' => 'true',
'activity is not emergency' => 'false',
];
private const DEFAULT_CHOICE = 'false';
private const string DEFAULT_CHOICE = 'false';
public function __construct(private readonly TranslatorInterface $translator) {}
#[\Override]
public function addRole(): ?string
{
return null;
}
#[\Override]
public function alterQuery(QueryBuilder $qb, $data)
{
$where = $qb->getDQLPart('where');
@@ -51,11 +53,13 @@ class EmergencyFilter implements FilterInterface
$qb->setParameter('emergency', $data['accepted_emergency']);
}
#[\Override]
public function applyOn(): string
{
return Declarations::ACTIVITY;
}
#[\Override]
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('accepted_emergency', ChoiceType::class, [
@@ -66,11 +70,13 @@ class EmergencyFilter implements FilterInterface
]);
}
#[\Override]
public function getFormDefaultData(): array
{
return ['accepted_emergency' => self::DEFAULT_CHOICE];
}
#[\Override]
public function describeAction($data, $format = 'string'): array
{
return [
@@ -82,6 +88,7 @@ class EmergencyFilter implements FilterInterface
];
}
#[\Override]
public function getTitle(): string
{
return 'Filter activity by emergency';

View File

@@ -19,11 +19,13 @@ use Symfony\Component\Form\FormBuilderInterface;
class LocationFilter implements FilterInterface
{
#[\Override]
public function addRole(): ?string
{
return null;
}
#[\Override]
public function alterQuery(QueryBuilder $qb, $data)
{
$qb->andWhere(
@@ -33,11 +35,13 @@ class LocationFilter implements FilterInterface
$qb->setParameter('location', $data['accepted_location']);
}
#[\Override]
public function applyOn(): string
{
return Declarations::ACTIVITY;
}
#[\Override]
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('accepted_location', PickUserLocationType::class, [
@@ -46,11 +50,13 @@ class LocationFilter implements FilterInterface
]);
}
#[\Override]
public function getFormDefaultData(): array
{
return [];
}
#[\Override]
public function describeAction($data, $format = 'string'): array
{
$locations = [];
@@ -64,6 +70,7 @@ class LocationFilter implements FilterInterface
]];
}
#[\Override]
public function getTitle(): string
{
return 'Filter activity by location';

View File

@@ -23,11 +23,13 @@ class LocationTypeFilter implements FilterInterface
{
public function __construct(private readonly TranslatableStringHelper $translatableStringHelper) {}
#[\Override]
public function addRole(): ?string
{
return null;
}
#[\Override]
public function alterQuery(QueryBuilder $qb, $data)
{
if (!\in_array('actloc', $qb->getAllAliases(), true)) {
@@ -47,11 +49,13 @@ class LocationTypeFilter implements FilterInterface
$qb->setParameter('locationtype', $data['accepted_locationtype']);
}
#[\Override]
public function applyOn(): string
{
return Declarations::ACTIVITY;
}
#[\Override]
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('accepted_locationtype', PickLocationTypeType::class, [
@@ -60,11 +64,13 @@ class LocationTypeFilter implements FilterInterface
]);
}
#[\Override]
public function getFormDefaultData(): array
{
return [];
}
#[\Override]
public function describeAction($data, $format = 'string'): array
{
$types = [];
@@ -80,6 +86,7 @@ class LocationTypeFilter implements FilterInterface
]];
}
#[\Override]
public function getTitle(): string
{
return 'Filter activity by locationtype';

View File

@@ -28,11 +28,13 @@ class ActivityReasonFilter implements ExportElementValidatedInterface, FilterInt
{
public function __construct(protected TranslatableStringHelper $translatableStringHelper, protected ActivityReasonRepository $activityReasonRepository) {}
#[\Override]
public function addRole(): ?string
{
return null;
}
#[\Override]
public function alterQuery(QueryBuilder $qb, $data)
{
$where = $qb->getDQLPart('where');
@@ -53,11 +55,13 @@ class ActivityReasonFilter implements ExportElementValidatedInterface, FilterInt
$qb->setParameter('selected_activity_reasons', $data['reasons']);
}
#[\Override]
public function applyOn(): string
{
return Declarations::ACTIVITY_PERSON;
}
#[\Override]
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('reasons', EntityType::class, [
@@ -70,11 +74,13 @@ class ActivityReasonFilter implements ExportElementValidatedInterface, FilterInt
]);
}
#[\Override]
public function getFormDefaultData(): array
{
return [];
}
#[\Override]
public function describeAction($data, $format = 'string')
{
// collect all the reasons'name used in this filter in one array
@@ -91,11 +97,13 @@ class ActivityReasonFilter implements ExportElementValidatedInterface, FilterInt
];
}
#[\Override]
public function getTitle()
{
return 'Filter by reason';
}
#[\Override]
public function validateForm($data, ExecutionContextInterface $context)
{
if (null === $data['reasons'] || 0 === \count($data['reasons'])) {

View File

@@ -34,12 +34,14 @@ final readonly class PersonHavingActivityBetweenDateFilter implements ExportElem
private RollingDateConverterInterface $rollingDateConverter,
) {}
#[\Override]
public function addRole(): ?string
{
return null;
}
public function alterQuery(QueryBuilder $qb, $data): void
#[\Override]
public function alterQuery(QueryBuilder $qb, $data)
{
// create a subquery for activity
$sqb = $qb->getEntityManager()->createQueryBuilder();
@@ -83,11 +85,13 @@ final readonly class PersonHavingActivityBetweenDateFilter implements ExportElem
);
}
#[\Override]
public function applyOn(): string
{
return Declarations::PERSON_TYPE;
}
#[\Override]
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('date_from_rolling', PickRollingDateType::class, [
@@ -112,6 +116,7 @@ final readonly class PersonHavingActivityBetweenDateFilter implements ExportElem
}
}
#[\Override]
public function getFormDefaultData(): array
{
return [
@@ -121,7 +126,8 @@ final readonly class PersonHavingActivityBetweenDateFilter implements ExportElem
];
}
public function describeAction($data, $format = 'string'): array
#[\Override]
public function describeAction($data, $format = 'string')
{
return [
[] === $data['reasons'] ?
@@ -141,11 +147,13 @@ final readonly class PersonHavingActivityBetweenDateFilter implements ExportElem
];
}
public function getTitle(): string
#[\Override]
public function getTitle()
{
return 'export.filter.activity.person_between_dates.title';
}
#[\Override]
public function validateForm($data, ExecutionContextInterface $context)
{
if ($this->rollingDateConverter->convert($data['date_from_rolling'])

View File

@@ -24,15 +24,17 @@ use Symfony\Component\Form\FormBuilderInterface;
*/
final readonly class PersonsFilter implements FilterInterface
{
private const PREFIX = 'act_persons_filter';
private const string PREFIX = 'act_persons_filter';
public function __construct(private PersonRenderInterface $personRender) {}
#[\Override]
public function addRole(): ?string
{
return null;
}
#[\Override]
public function alterQuery(QueryBuilder $qb, $data)
{
$p = self::PREFIX;
@@ -47,11 +49,13 @@ final readonly class PersonsFilter implements FilterInterface
$qb->andWhere($orX);
}
#[\Override]
public function applyOn()
{
return Declarations::ACTIVITY;
}
#[\Override]
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('accepted_persons', PickPersonDynamicType::class, [
@@ -60,6 +64,7 @@ final readonly class PersonsFilter implements FilterInterface
]);
}
#[\Override]
public function getFormDefaultData(): array
{
return [
@@ -67,6 +72,7 @@ final readonly class PersonsFilter implements FilterInterface
];
}
#[\Override]
public function describeAction($data, $format = 'string')
{
$users = [];
@@ -80,6 +86,7 @@ final readonly class PersonsFilter implements FilterInterface
]];
}
#[\Override]
public function getTitle(): string
{
return 'export.filter.activity.by_persons.Filter activity by persons';

View File

@@ -22,20 +22,22 @@ use Symfony\Contracts\Translation\TranslatorInterface;
class SentReceivedFilter implements FilterInterface
{
private const CHOICES = [
private const array CHOICES = [
'export.filter.activity.by_sent_received.is sent' => Activity::SENTRECEIVED_SENT,
'export.filter.activity.by_sent_received.is received' => Activity::SENTRECEIVED_RECEIVED,
];
private const DEFAULT_CHOICE = Activity::SENTRECEIVED_SENT;
private const string DEFAULT_CHOICE = Activity::SENTRECEIVED_SENT;
public function __construct(private readonly TranslatorInterface $translator) {}
#[\Override]
public function addRole(): ?string
{
return null;
}
#[\Override]
public function alterQuery(QueryBuilder $qb, $data)
{
$where = $qb->getDQLPart('where');
@@ -52,11 +54,13 @@ class SentReceivedFilter implements FilterInterface
$qb->setParameter('sentreceived', $data['accepted_sentreceived']);
}
#[\Override]
public function applyOn(): string
{
return Declarations::ACTIVITY;
}
#[\Override]
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('accepted_sentreceived', ChoiceType::class, [
@@ -68,11 +72,13 @@ class SentReceivedFilter implements FilterInterface
]);
}
#[\Override]
public function getFormDefaultData(): array
{
return ['accepted_sentreceived' => self::DEFAULT_CHOICE];
}
#[\Override]
public function describeAction($data, $format = 'string'): array
{
$sentreceived = array_flip(self::CHOICES)[$data['accepted_sentreceived']];
@@ -82,6 +88,7 @@ class SentReceivedFilter implements FilterInterface
]];
}
#[\Override]
public function getTitle(): string
{
return 'Filter activity by sentreceived';

View File

@@ -23,11 +23,13 @@ class UserFilter implements FilterInterface
{
public function __construct(private readonly UserRender $userRender) {}
#[\Override]
public function addRole(): ?string
{
return null;
}
#[\Override]
public function alterQuery(QueryBuilder $qb, $data)
{
$where = $qb->getDQLPart('where');
@@ -44,11 +46,13 @@ class UserFilter implements FilterInterface
$qb->setParameter('users', $data['accepted_users']);
}
#[\Override]
public function applyOn(): string
{
return Declarations::ACTIVITY;
}
#[\Override]
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('accepted_users', PickUserDynamicType::class, [
@@ -57,11 +61,13 @@ class UserFilter implements FilterInterface
]);
}
#[\Override]
public function getFormDefaultData(): array
{
return [];
}
#[\Override]
public function describeAction($data, $format = 'string'): array
{
$users = [];
@@ -75,6 +81,7 @@ class UserFilter implements FilterInterface
]];
}
#[\Override]
public function getTitle(): string
{
return 'Filter activity by user';

View File

@@ -25,18 +25,20 @@ use Symfony\Component\Form\FormBuilderInterface;
class UsersJobFilter implements FilterInterface
{
private const PREFIX = 'act_filter_user_job';
private const string PREFIX = 'act_filter_user_job';
public function __construct(
private readonly TranslatableStringHelperInterface $translatableStringHelper,
private readonly UserJobRepositoryInterface $userJobRepository,
private readonly UserJobRepositoryInterface $userJobRepository
) {}
#[\Override]
public function addRole(): ?string
{
return null;
}
#[\Override]
public function alterQuery(QueryBuilder $qb, $data)
{
$p = self::PREFIX;
@@ -60,11 +62,13 @@ class UsersJobFilter implements FilterInterface
);
}
#[\Override]
public function applyOn()
{
return Declarations::ACTIVITY;
}
#[\Override]
public function buildForm(FormBuilderInterface $builder)
{
$builder
@@ -77,6 +81,7 @@ class UsersJobFilter implements FilterInterface
]);
}
#[\Override]
public function describeAction($data, $format = 'string')
{
return ['export.filter.activity.by_users_job.Filtered activity by users job: only %jobs%', [
@@ -90,6 +95,7 @@ class UsersJobFilter implements FilterInterface
]];
}
#[\Override]
public function getFormDefaultData(): array
{
return [
@@ -97,6 +103,7 @@ class UsersJobFilter implements FilterInterface
];
}
#[\Override]
public function getTitle()
{
return 'export.filter.activity.by_users_job.Filter by users job';

View File

@@ -25,18 +25,20 @@ use Symfony\Component\Form\FormBuilderInterface;
class UsersScopeFilter implements FilterInterface
{
private const PREFIX = 'act_filter_user_scope';
private const string PREFIX = 'act_filter_user_scope';
public function __construct(
private readonly ScopeRepositoryInterface $scopeRepository,
private readonly TranslatableStringHelperInterface $translatableStringHelper,
private readonly TranslatableStringHelperInterface $translatableStringHelper
) {}
#[\Override]
public function addRole(): ?string
{
return null;
}
#[\Override]
public function alterQuery(QueryBuilder $qb, $data)
{
$p = self::PREFIX;
@@ -60,11 +62,13 @@ class UsersScopeFilter implements FilterInterface
);
}
#[\Override]
public function applyOn(): string
{
return Declarations::ACTIVITY;
}
#[\Override]
public function buildForm(FormBuilderInterface $builder)
{
$builder
@@ -77,6 +81,7 @@ class UsersScopeFilter implements FilterInterface
]);
}
#[\Override]
public function describeAction($data, $format = 'string'): array
{
return ['export.filter.activity.by_users_scope.Filtered activity by users scope: only %scopes%', [
@@ -90,6 +95,7 @@ class UsersScopeFilter implements FilterInterface
]];
}
#[\Override]
public function getFormDefaultData(): array
{
return [
@@ -97,6 +103,7 @@ class UsersScopeFilter implements FilterInterface
];
}
#[\Override]
public function getTitle(): string
{
return 'export.filter.activity.by_users_scope.Filter by users scope';

View File

@@ -20,6 +20,7 @@ use Symfony\Component\OptionsResolver\OptionsResolver;
class ActivityPresenceType extends AbstractType
{
#[\Override]
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
@@ -33,6 +34,7 @@ class ActivityPresenceType extends AbstractType
]);
}
#[\Override]
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([

View File

@@ -19,6 +19,7 @@ use Symfony\Component\OptionsResolver\OptionsResolver;
class ActivityReasonCategoryType extends AbstractType
{
#[\Override]
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
@@ -29,6 +30,7 @@ class ActivityReasonCategoryType extends AbstractType
/**
* @param OptionsResolverInterface $resolver
*/
#[\Override]
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
@@ -39,6 +41,7 @@ class ActivityReasonCategoryType extends AbstractType
/**
* @return string
*/
#[\Override]
public function getBlockPrefix()
{
return 'chill_activitybundle_activityreasoncategory';

View File

@@ -21,6 +21,7 @@ use Symfony\Component\OptionsResolver\OptionsResolver;
class ActivityReasonType extends AbstractType
{
#[\Override]
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
@@ -29,6 +30,7 @@ class ActivityReasonType extends AbstractType
->add('category', TranslatableActivityReasonCategoryType::class);
}
#[\Override]
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
@@ -39,6 +41,7 @@ class ActivityReasonType extends AbstractType
/**
* @return string
*/
#[\Override]
public function getBlockPrefix()
{
return 'chill_activitybundle_activityreason';

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