mirror of
				https://gitlab.com/Chill-Projet/chill-bundles.git
				synced 2025-11-04 03:08:25 +00:00 
			
		
		
		
	Compare commits
	
		
			5 Commits
		
	
	
		
			#361-impro
			...
			upgrade-sf
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| e70c8feb16 | |||
| 0e9c5090d0 | |||
| 72a91d0864 | |||
| 8251587288 | |||
| f3ac864233 | 
@@ -8,7 +8,7 @@
 | 
			
		||||
        "social worker"
 | 
			
		||||
    ],
 | 
			
		||||
    "require": {
 | 
			
		||||
        "php": "^8.2",
 | 
			
		||||
        "php": "^8.3",
 | 
			
		||||
        "ext-dom": "*",
 | 
			
		||||
        "ext-json": "*",
 | 
			
		||||
        "ext-openssl": "*",
 | 
			
		||||
@@ -30,49 +30,48 @@
 | 
			
		||||
        "ovh/ovh": "^3.0",
 | 
			
		||||
        "phpoffice/phpspreadsheet": "^1.16",
 | 
			
		||||
        "ramsey/uuid-doctrine": "^1.7",
 | 
			
		||||
        "sensio/framework-extra-bundle": "^5.5",
 | 
			
		||||
        "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.4.*",
 | 
			
		||||
        "symfony/browser-kit": "6.4.*",
 | 
			
		||||
        "symfony/cache": "6.4.*",
 | 
			
		||||
        "symfony/clock": "^6.2",
 | 
			
		||||
        "symfony/config": "^5.4",
 | 
			
		||||
        "symfony/console": "^5.4",
 | 
			
		||||
        "symfony/css-selector": "^5.4",
 | 
			
		||||
        "symfony/dom-crawler": "^5.4",
 | 
			
		||||
        "symfony/error-handler": "^5.4",
 | 
			
		||||
        "symfony/event-dispatcher": "^5.4",
 | 
			
		||||
        "symfony/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.4",
 | 
			
		||||
        "symfony/console": "6.4.*",
 | 
			
		||||
        "symfony/css-selector": "6.4.*",
 | 
			
		||||
        "symfony/dom-crawler": "6.4.*",
 | 
			
		||||
        "symfony/error-handler": "6.4.*",
 | 
			
		||||
        "symfony/event-dispatcher": "6.4.*",
 | 
			
		||||
        "symfony/expression-language": "6.4.*",
 | 
			
		||||
        "symfony/filesystem": "6.4.*",
 | 
			
		||||
        "symfony/finder": "6.4.*",
 | 
			
		||||
        "symfony/form": "6.4.*",
 | 
			
		||||
        "symfony/framework-bundle": "6.4.*",
 | 
			
		||||
        "symfony/http-client": "6.4.*",
 | 
			
		||||
        "symfony/http-foundation": "6.4.*",
 | 
			
		||||
        "symfony/intl": "6.4.*",
 | 
			
		||||
        "symfony/mailer": "6.4.*",
 | 
			
		||||
        "symfony/messenger": "6.4.*",
 | 
			
		||||
        "symfony/mime": "6.4.*",
 | 
			
		||||
        "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.4.*",
 | 
			
		||||
        "symfony/process": "6.4.*",
 | 
			
		||||
        "symfony/property-access": "6.4.*",
 | 
			
		||||
        "symfony/property-info": "6.4.*",
 | 
			
		||||
        "symfony/routing": "6.4.*",
 | 
			
		||||
        "symfony/security-bundle": "^6.4",
 | 
			
		||||
        "symfony/security-core": "6.4.*",
 | 
			
		||||
        "symfony/security-csrf": "6.4.*",
 | 
			
		||||
        "symfony/security-http": "6.4.*",
 | 
			
		||||
        "symfony/serializer": "6.4.*",
 | 
			
		||||
        "symfony/string": "6.4.*",
 | 
			
		||||
        "symfony/templating": "6.4.*",
 | 
			
		||||
        "symfony/translation": "6.4.*",
 | 
			
		||||
        "symfony/twig-bundle": "6.4.*",
 | 
			
		||||
        "symfony/validator": "6.4.*",
 | 
			
		||||
        "symfony/webpack-encore-bundle": "^1.11",
 | 
			
		||||
        "symfony/workflow": "^5.4",
 | 
			
		||||
        "symfony/yaml": "^5.4",
 | 
			
		||||
        "symfony/workflow": "6.4.*",
 | 
			
		||||
        "symfony/yaml": "6.4.*",
 | 
			
		||||
        "thenetworg/oauth2-azure": "^2.0",
 | 
			
		||||
        "twig/extra-bundle": "^3.0",
 | 
			
		||||
        "twig/intl-extra": "^3.0",
 | 
			
		||||
@@ -93,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.4.*",
 | 
			
		||||
        "symfony/dotenv": "6.4.*",
 | 
			
		||||
        "symfony/maker-bundle": "^1.20",
 | 
			
		||||
        "symfony/phpunit-bridge": "^7.1",
 | 
			
		||||
        "symfony/runtime": "^5.4",
 | 
			
		||||
        "symfony/stopwatch": "^5.4",
 | 
			
		||||
        "symfony/var-dumper": "^5.4"
 | 
			
		||||
        "symfony/runtime": "6.4.*",
 | 
			
		||||
        "symfony/stopwatch": "6.4.*",
 | 
			
		||||
        "symfony/var-dumper": "6.4.*"
 | 
			
		||||
    },
 | 
			
		||||
    "conflict": {
 | 
			
		||||
        "symfony/symfony": "*"
 | 
			
		||||
@@ -152,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.4.*"
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -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'];
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
 
 | 
			
		||||
@@ -31,6 +31,7 @@ class ChillMainConfiguration implements ConfigurationInterface
 | 
			
		||||
        $this->setWidgetFactories($widgetFactories);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[\Override]
 | 
			
		||||
    public function getConfigTreeBuilder()
 | 
			
		||||
    {
 | 
			
		||||
        $treeBuilder = new TreeBuilder('chill_main');
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
 
 | 
			
		||||
@@ -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';
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
 
 | 
			
		||||
@@ -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', [
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										21
									
								
								rector.php
									
									
									
									
									
								
							
							
						
						
									
										21
									
								
								rector.php
									
									
									
									
									
								
							@@ -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, [
 | 
			
		||||
 
 | 
			
		||||
@@ -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 */
 | 
			
		||||
 
 | 
			
		||||
@@ -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 */
 | 
			
		||||
 
 | 
			
		||||
@@ -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 */
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
 
 | 
			
		||||
@@ -38,6 +38,7 @@ class LoadActivityNotifications extends AbstractFixture implements DependentFixt
 | 
			
		||||
        ],
 | 
			
		||||
    ];
 | 
			
		||||
 | 
			
		||||
    #[\Override]
 | 
			
		||||
    public function getDependencies()
 | 
			
		||||
    {
 | 
			
		||||
        return [
 | 
			
		||||
 
 | 
			
		||||
@@ -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 = [
 | 
			
		||||
 
 | 
			
		||||
@@ -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 = [
 | 
			
		||||
 
 | 
			
		||||
@@ -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 = [
 | 
			
		||||
 
 | 
			
		||||
@@ -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 = [
 | 
			
		||||
 
 | 
			
		||||
@@ -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) {
 | 
			
		||||
 
 | 
			
		||||
@@ -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);
 | 
			
		||||
 
 | 
			
		||||
@@ -22,6 +22,7 @@ use function is_int;
 | 
			
		||||
 */
 | 
			
		||||
class Configuration implements ConfigurationInterface
 | 
			
		||||
{
 | 
			
		||||
    #[\Override]
 | 
			
		||||
    public function getConfigTreeBuilder()
 | 
			
		||||
    {
 | 
			
		||||
        $treeBuilder = new TreeBuilder('chill_activity');
 | 
			
		||||
 
 | 
			
		||||
@@ -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)]
 | 
			
		||||
@@ -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);
 | 
			
		||||
 
 | 
			
		||||
@@ -53,6 +53,7 @@ class ActivityReasonCategory implements \Stringable
 | 
			
		||||
        $this->reasons = new ArrayCollection();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[\Override]
 | 
			
		||||
    public function __toString(): string
 | 
			
		||||
    {
 | 
			
		||||
        return 'ActivityReasonCategory('.$this->getName('x').')';
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
 
 | 
			
		||||
@@ -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';
 | 
			
		||||
 
 | 
			
		||||
@@ -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;
 | 
			
		||||
 
 | 
			
		||||
@@ -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';
 | 
			
		||||
 
 | 
			
		||||
@@ -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';
 | 
			
		||||
 
 | 
			
		||||
@@ -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';
 | 
			
		||||
 
 | 
			
		||||
@@ -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;
 | 
			
		||||
 
 | 
			
		||||
@@ -31,11 +31,13 @@ class ActivityReasonAggregator implements AggregatorInterface, ExportElementVali
 | 
			
		||||
        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']) {
 | 
			
		||||
 
 | 
			
		||||
@@ -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';
 | 
			
		||||
 
 | 
			
		||||
@@ -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';
 | 
			
		||||
 
 | 
			
		||||
@@ -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';
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
    ) {}
 | 
			
		||||
 | 
			
		||||
    #[\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';
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
    ) {}
 | 
			
		||||
 | 
			
		||||
    #[\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';
 | 
			
		||||
 
 | 
			
		||||
@@ -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';
 | 
			
		||||
 
 | 
			
		||||
@@ -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';
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
    ) {}
 | 
			
		||||
 | 
			
		||||
    #[\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';
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
    ) {}
 | 
			
		||||
 | 
			
		||||
    #[\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';
 | 
			
		||||
 
 | 
			
		||||
@@ -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';
 | 
			
		||||
 
 | 
			
		||||
@@ -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';
 | 
			
		||||
 
 | 
			
		||||
@@ -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;
 | 
			
		||||
 
 | 
			
		||||
@@ -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;
 | 
			
		||||
 
 | 
			
		||||
@@ -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';
 | 
			
		||||
 
 | 
			
		||||
@@ -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 [
 | 
			
		||||
 
 | 
			
		||||
@@ -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 [
 | 
			
		||||
 
 | 
			
		||||
@@ -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 [
 | 
			
		||||
 
 | 
			
		||||
@@ -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 [
 | 
			
		||||
 
 | 
			
		||||
@@ -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 [
 | 
			
		||||
 
 | 
			
		||||
@@ -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(
 | 
			
		||||
 
 | 
			
		||||
@@ -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 [
 | 
			
		||||
 
 | 
			
		||||
@@ -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 [
 | 
			
		||||
 
 | 
			
		||||
@@ -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 [
 | 
			
		||||
 
 | 
			
		||||
@@ -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 [
 | 
			
		||||
 
 | 
			
		||||
@@ -57,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, [
 | 
			
		||||
@@ -76,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) {
 | 
			
		||||
@@ -165,26 +171,31 @@ 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);
 | 
			
		||||
@@ -279,11 +290,13 @@ class ListActivity implements ListInterface, GroupedExportInterface
 | 
			
		||||
        return $qb;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[\Override]
 | 
			
		||||
    public function requiredRole(): string
 | 
			
		||||
    {
 | 
			
		||||
        return ActivityStatsVoter::LISTS;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[\Override]
 | 
			
		||||
    public function supportsModifiers()
 | 
			
		||||
    {
 | 
			
		||||
        return [
 | 
			
		||||
 
 | 
			
		||||
@@ -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;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
@@ -47,18 +47,22 @@ class StatActivityDuration 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()
 | 
			
		||||
    {
 | 
			
		||||
        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 [
 | 
			
		||||
 
 | 
			
		||||
@@ -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,
 | 
			
		||||
 
 | 
			
		||||
@@ -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';
 | 
			
		||||
 
 | 
			
		||||
@@ -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';
 | 
			
		||||
 
 | 
			
		||||
@@ -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';
 | 
			
		||||
 
 | 
			
		||||
@@ -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';
 | 
			
		||||
 
 | 
			
		||||
@@ -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';
 | 
			
		||||
@@ -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;
 | 
			
		||||
 
 | 
			
		||||
@@ -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';
 | 
			
		||||
 
 | 
			
		||||
@@ -28,11 +28,13 @@ final readonly class ActivityPresenceFilter implements FilterInterface
 | 
			
		||||
        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;
 | 
			
		||||
 
 | 
			
		||||
@@ -29,11 +29,13 @@ class ActivityTypeFilter implements ExportElementValidatedInterface, FilterInter
 | 
			
		||||
        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'])) {
 | 
			
		||||
 
 | 
			
		||||
@@ -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';
 | 
			
		||||
 
 | 
			
		||||
@@ -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';
 | 
			
		||||
 
 | 
			
		||||
@@ -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';
 | 
			
		||||
 
 | 
			
		||||
@@ -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';
 | 
			
		||||
 
 | 
			
		||||
@@ -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';
 | 
			
		||||
 
 | 
			
		||||
@@ -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';
 | 
			
		||||
 
 | 
			
		||||
@@ -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';
 | 
			
		||||
 
 | 
			
		||||
@@ -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'])) {
 | 
			
		||||
 
 | 
			
		||||
@@ -34,11 +34,13 @@ final readonly class PersonHavingActivityBetweenDateFilter implements ExportElem
 | 
			
		||||
        private RollingDateConverterInterface $rollingDateConverter,
 | 
			
		||||
    ) {}
 | 
			
		||||
 | 
			
		||||
    #[\Override]
 | 
			
		||||
    public function addRole(): ?string
 | 
			
		||||
    {
 | 
			
		||||
        return null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[\Override]
 | 
			
		||||
    public function alterQuery(QueryBuilder $qb, $data)
 | 
			
		||||
    {
 | 
			
		||||
        // create a subquery for activity
 | 
			
		||||
@@ -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,6 +126,7 @@ final readonly class PersonHavingActivityBetweenDateFilter implements ExportElem
 | 
			
		||||
        ];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[\Override]
 | 
			
		||||
    public function describeAction($data, $format = 'string')
 | 
			
		||||
    {
 | 
			
		||||
        return [
 | 
			
		||||
@@ -141,11 +147,13 @@ final readonly class PersonHavingActivityBetweenDateFilter implements ExportElem
 | 
			
		||||
        ];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[\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'])
 | 
			
		||||
 
 | 
			
		||||
@@ -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';
 | 
			
		||||
 
 | 
			
		||||
@@ -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';
 | 
			
		||||
 
 | 
			
		||||
@@ -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';
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
    ) {}
 | 
			
		||||
 | 
			
		||||
    #[\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';
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
    ) {}
 | 
			
		||||
 | 
			
		||||
    #[\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';
 | 
			
		||||
 
 | 
			
		||||
@@ -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([
 | 
			
		||||
 
 | 
			
		||||
@@ -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';
 | 
			
		||||
 
 | 
			
		||||
@@ -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';
 | 
			
		||||
 
 | 
			
		||||
@@ -68,6 +68,7 @@ class ActivityType extends AbstractType
 | 
			
		||||
        $this->user = $tokenStorage->getToken()->getUser();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[\Override]
 | 
			
		||||
    public function buildForm(FormBuilderInterface $builder, array $options): void
 | 
			
		||||
    {
 | 
			
		||||
        // handle times choices
 | 
			
		||||
@@ -386,6 +387,7 @@ class ActivityType extends AbstractType
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[\Override]
 | 
			
		||||
    public function configureOptions(OptionsResolver $resolver): void
 | 
			
		||||
    {
 | 
			
		||||
        $resolver->setDefaults([
 | 
			
		||||
@@ -400,6 +402,7 @@ class ActivityType extends AbstractType
 | 
			
		||||
            ->setAllowedTypes('accompanyingPeriod', [AccompanyingPeriod::class, 'null']);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[\Override]
 | 
			
		||||
    public function getBlockPrefix(): string
 | 
			
		||||
    {
 | 
			
		||||
        return 'chill_activitybundle_activity';
 | 
			
		||||
 
 | 
			
		||||
@@ -21,6 +21,7 @@ use Symfony\Component\OptionsResolver\OptionsResolver;
 | 
			
		||||
 | 
			
		||||
class ActivityTypeCategoryType extends AbstractType
 | 
			
		||||
{
 | 
			
		||||
    #[\Override]
 | 
			
		||||
    public function buildForm(FormBuilderInterface $builder, array $options): void
 | 
			
		||||
    {
 | 
			
		||||
        $builder
 | 
			
		||||
@@ -38,6 +39,7 @@ class ActivityTypeCategoryType extends AbstractType
 | 
			
		||||
            ]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[\Override]
 | 
			
		||||
    public function configureOptions(OptionsResolver $resolver): void
 | 
			
		||||
    {
 | 
			
		||||
        $resolver->setDefaults([
 | 
			
		||||
 
 | 
			
		||||
@@ -27,6 +27,7 @@ class ActivityTypeType extends AbstractType
 | 
			
		||||
{
 | 
			
		||||
    public function __construct(private readonly TranslatableStringHelper $translatableStringHelper) {}
 | 
			
		||||
 | 
			
		||||
    #[\Override]
 | 
			
		||||
    public function buildForm(FormBuilderInterface $builder, array $options)
 | 
			
		||||
    {
 | 
			
		||||
        $builder
 | 
			
		||||
@@ -67,6 +68,7 @@ class ActivityTypeType extends AbstractType
 | 
			
		||||
            ->add('commentVisible', ActivityFieldPresence::class);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[\Override]
 | 
			
		||||
    public function configureOptions(OptionsResolver $resolver)
 | 
			
		||||
    {
 | 
			
		||||
        $resolver->setDefaults([
 | 
			
		||||
 
 | 
			
		||||
@@ -18,6 +18,7 @@ use Symfony\Component\OptionsResolver\OptionsResolver;
 | 
			
		||||
 | 
			
		||||
class ActivityFieldPresence extends AbstractType
 | 
			
		||||
{
 | 
			
		||||
    #[\Override]
 | 
			
		||||
    public function configureOptions(OptionsResolver $resolver)
 | 
			
		||||
    {
 | 
			
		||||
        $resolver->setDefaults(
 | 
			
		||||
@@ -31,6 +32,7 @@ class ActivityFieldPresence extends AbstractType
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[\Override]
 | 
			
		||||
    public function getParent()
 | 
			
		||||
    {
 | 
			
		||||
        return ChoiceType::class;
 | 
			
		||||
 
 | 
			
		||||
@@ -30,6 +30,7 @@ class PickActivityReasonType extends AbstractType
 | 
			
		||||
        private readonly TranslatableStringHelperInterface $translatableStringHelper
 | 
			
		||||
    ) {}
 | 
			
		||||
 | 
			
		||||
    #[\Override]
 | 
			
		||||
    public function configureOptions(OptionsResolver $resolver)
 | 
			
		||||
    {
 | 
			
		||||
        $resolver->setDefaults(
 | 
			
		||||
@@ -49,11 +50,13 @@ class PickActivityReasonType extends AbstractType
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[\Override]
 | 
			
		||||
    public function getBlockPrefix()
 | 
			
		||||
    {
 | 
			
		||||
        return 'translatable_activity_reason';
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[\Override]
 | 
			
		||||
    public function getParent()
 | 
			
		||||
    {
 | 
			
		||||
        return EntityType::class;
 | 
			
		||||
 
 | 
			
		||||
@@ -25,6 +25,7 @@ class TranslatableActivityReasonCategoryType extends AbstractType
 | 
			
		||||
{
 | 
			
		||||
    public function __construct(private readonly TranslatableStringHelperInterface $translatableStringHelper, private readonly TranslatorInterface $translator) {}
 | 
			
		||||
 | 
			
		||||
    #[\Override]
 | 
			
		||||
    public function configureOptions(OptionsResolver $resolver)
 | 
			
		||||
    {
 | 
			
		||||
        $resolver->setDefaults(
 | 
			
		||||
@@ -36,6 +37,7 @@ class TranslatableActivityReasonCategoryType extends AbstractType
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[\Override]
 | 
			
		||||
    public function getParent()
 | 
			
		||||
    {
 | 
			
		||||
        return EntityType::class;
 | 
			
		||||
 
 | 
			
		||||
@@ -22,6 +22,7 @@ class TranslatableActivityType extends AbstractType
 | 
			
		||||
{
 | 
			
		||||
    public function __construct(protected TranslatableStringHelperInterface $translatableStringHelper, protected ActivityTypeRepositoryInterface $activityTypeRepository) {}
 | 
			
		||||
 | 
			
		||||
    #[\Override]
 | 
			
		||||
    public function configureOptions(OptionsResolver $resolver)
 | 
			
		||||
    {
 | 
			
		||||
        $resolver->setDefaults(
 | 
			
		||||
@@ -34,11 +35,13 @@ class TranslatableActivityType extends AbstractType
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[\Override]
 | 
			
		||||
    public function getBlockPrefix()
 | 
			
		||||
    {
 | 
			
		||||
        return 'translatable_activity_type';
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[\Override]
 | 
			
		||||
    public function getParent()
 | 
			
		||||
    {
 | 
			
		||||
        return EntityType::class;
 | 
			
		||||
 
 | 
			
		||||
@@ -25,6 +25,7 @@ class AccompanyingCourseMenuBuilder implements LocalMenuBuilderInterface
 | 
			
		||||
{
 | 
			
		||||
    public function __construct(protected Security $security, protected TranslatorInterface $translator) {}
 | 
			
		||||
 | 
			
		||||
    #[\Override]
 | 
			
		||||
    public function buildMenu($menuId, MenuItem $menu, array $parameters)
 | 
			
		||||
    {
 | 
			
		||||
        $period = $parameters['accompanyingCourse'];
 | 
			
		||||
@@ -42,6 +43,7 @@ class AccompanyingCourseMenuBuilder implements LocalMenuBuilderInterface
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[\Override]
 | 
			
		||||
    public static function getMenuIds(): array
 | 
			
		||||
    {
 | 
			
		||||
        return ['accompanyingCourse'];
 | 
			
		||||
 
 | 
			
		||||
@@ -20,11 +20,13 @@ final readonly class AccompanyingCourseQuickMenuBuilder implements LocalMenuBuil
 | 
			
		||||
{
 | 
			
		||||
    public function __construct(private Security $security) {}
 | 
			
		||||
 | 
			
		||||
    #[\Override]
 | 
			
		||||
    public static function getMenuIds(): array
 | 
			
		||||
    {
 | 
			
		||||
        return ['accompanying_course_quick_menu'];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[\Override]
 | 
			
		||||
    public function buildMenu($menuId, MenuItem $menu, array $parameters)
 | 
			
		||||
    {
 | 
			
		||||
        /** @var \Chill\PersonBundle\Entity\AccompanyingPeriod $accompanyingCourse */
 | 
			
		||||
 
 | 
			
		||||
@@ -22,6 +22,7 @@ final readonly class AdminMenuBuilder implements LocalMenuBuilderInterface
 | 
			
		||||
{
 | 
			
		||||
    public function __construct(private Security $security) {}
 | 
			
		||||
 | 
			
		||||
    #[\Override]
 | 
			
		||||
    public function buildMenu($menuId, MenuItem $menu, array $parameters)
 | 
			
		||||
    {
 | 
			
		||||
        if (!$this->security->isGranted('ROLE_ADMIN')) {
 | 
			
		||||
@@ -57,6 +58,7 @@ final readonly class AdminMenuBuilder implements LocalMenuBuilderInterface
 | 
			
		||||
        ])->setExtras(['order' => 5050]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[\Override]
 | 
			
		||||
    public static function getMenuIds(): array
 | 
			
		||||
    {
 | 
			
		||||
        return ['admin_section', 'admin_activity'];
 | 
			
		||||
 
 | 
			
		||||
@@ -25,6 +25,7 @@ final readonly class PersonMenuBuilder implements LocalMenuBuilderInterface
 | 
			
		||||
{
 | 
			
		||||
    public function __construct(private AuthorizationCheckerInterface $authorizationChecker, private TranslatorInterface $translator) {}
 | 
			
		||||
 | 
			
		||||
    #[\Override]
 | 
			
		||||
    public function buildMenu($menuId, MenuItem $menu, array $parameters)
 | 
			
		||||
    {
 | 
			
		||||
        /** @var Person $person */
 | 
			
		||||
@@ -42,6 +43,7 @@ final readonly class PersonMenuBuilder implements LocalMenuBuilderInterface
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[\Override]
 | 
			
		||||
    public static function getMenuIds(): array
 | 
			
		||||
    {
 | 
			
		||||
        return ['person'];
 | 
			
		||||
 
 | 
			
		||||
@@ -20,11 +20,13 @@ final readonly class ActivityNotificationHandler implements NotificationHandlerI
 | 
			
		||||
{
 | 
			
		||||
    public function __construct(private ActivityRepository $activityRepository) {}
 | 
			
		||||
 | 
			
		||||
    #[\Override]
 | 
			
		||||
    public function getTemplate(Notification $notification, array $options = []): string
 | 
			
		||||
    {
 | 
			
		||||
        return '@ChillActivity/Activity/showInNotification.html.twig';
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[\Override]
 | 
			
		||||
    public function getTemplateData(Notification $notification, array $options = []): array
 | 
			
		||||
    {
 | 
			
		||||
        return [
 | 
			
		||||
@@ -33,6 +35,7 @@ final readonly class ActivityNotificationHandler implements NotificationHandlerI
 | 
			
		||||
        ];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[\Override]
 | 
			
		||||
    public function supports(Notification $notification, array $options = []): bool
 | 
			
		||||
    {
 | 
			
		||||
        return Activity::class === $notification->getRelatedEntityClass();
 | 
			
		||||
 
 | 
			
		||||
@@ -50,6 +50,7 @@ final readonly class ActivityACLAwareRepository implements ActivityACLAwareRepos
 | 
			
		||||
     * @throws NonUniqueResultException
 | 
			
		||||
     * @throws NoResultException
 | 
			
		||||
     */
 | 
			
		||||
    #[\Override]
 | 
			
		||||
    public function countByAccompanyingPeriod(AccompanyingPeriod $period, string $role, array $filters = []): int
 | 
			
		||||
    {
 | 
			
		||||
        $qb = $this->buildBaseQuery($filters);
 | 
			
		||||
@@ -61,6 +62,7 @@ final readonly class ActivityACLAwareRepository implements ActivityACLAwareRepos
 | 
			
		||||
        return $qb->getQuery()->getSingleScalarResult();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[\Override]
 | 
			
		||||
    public function countByPerson(Person $person, string $role, array $filters = []): int
 | 
			
		||||
    {
 | 
			
		||||
        $qb = $this->buildBaseQuery($filters);
 | 
			
		||||
@@ -72,6 +74,7 @@ final readonly class ActivityACLAwareRepository implements ActivityACLAwareRepos
 | 
			
		||||
        return $qb->getQuery()->getSingleScalarResult();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[\Override]
 | 
			
		||||
    public function findByAccompanyingPeriod(AccompanyingPeriod $period, string $role, ?int $start = 0, ?int $limit = 1000, array $orderBy = ['date' => 'DESC'], array $filters = []): array
 | 
			
		||||
    {
 | 
			
		||||
        $qb = $this->buildBaseQuery($filters);
 | 
			
		||||
@@ -161,6 +164,7 @@ final readonly class ActivityACLAwareRepository implements ActivityACLAwareRepos
 | 
			
		||||
    /**
 | 
			
		||||
     * @return array<ActivityType>
 | 
			
		||||
     */
 | 
			
		||||
    #[\Override]
 | 
			
		||||
    public function findActivityTypeByAssociated(AccompanyingPeriod|Person $associated): array
 | 
			
		||||
    {
 | 
			
		||||
        $in = $this->em->createQueryBuilder();
 | 
			
		||||
@@ -188,6 +192,7 @@ final readonly class ActivityACLAwareRepository implements ActivityACLAwareRepos
 | 
			
		||||
        return $qb->getQuery()->getResult();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[\Override]
 | 
			
		||||
    public function findUserJobByAssociated(AccompanyingPeriod|Person $associated): array
 | 
			
		||||
    {
 | 
			
		||||
        $in = $this->em->createQueryBuilder();
 | 
			
		||||
@@ -220,6 +225,7 @@ final readonly class ActivityACLAwareRepository implements ActivityACLAwareRepos
 | 
			
		||||
        return $qb->getQuery()->getResult();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[\Override]
 | 
			
		||||
    public function findByAccompanyingPeriodSimplified(AccompanyingPeriod $period, ?int $limit = 1000): array
 | 
			
		||||
    {
 | 
			
		||||
        $rsm = new ResultSetMappingBuilder($this->em);
 | 
			
		||||
@@ -302,6 +308,7 @@ final readonly class ActivityACLAwareRepository implements ActivityACLAwareRepos
 | 
			
		||||
        return $nq->getResult(AbstractQuery::HYDRATE_ARRAY);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[\Override]
 | 
			
		||||
    public function findByPerson(Person $person, string $role, ?int $start = 0, ?int $limit = 1000, ?array $orderBy = [], array $filters = []): array
 | 
			
		||||
    {
 | 
			
		||||
        $qb = $this->buildBaseQuery($filters);
 | 
			
		||||
 
 | 
			
		||||
@@ -35,6 +35,7 @@ final readonly class ActivityDocumentACLAwareRepository implements ActivityDocum
 | 
			
		||||
        private Security $security
 | 
			
		||||
    ) {}
 | 
			
		||||
 | 
			
		||||
    #[\Override]
 | 
			
		||||
    public function buildFetchQueryActivityDocumentLinkedToPersonFromPersonContext(Person $person, ?\DateTimeImmutable $startDate = null, ?\DateTimeImmutable $endDate = null, ?string $content = null): FetchQueryInterface
 | 
			
		||||
    {
 | 
			
		||||
        $query = $this->buildBaseFetchQueryActivityDocumentLinkedToPersonFromPersonContext($person, $startDate, $endDate, $content);
 | 
			
		||||
@@ -71,6 +72,7 @@ final readonly class ActivityDocumentACLAwareRepository implements ActivityDocum
 | 
			
		||||
        return $this->addWhereClauses($query, $startDate, $endDate, $content);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[\Override]
 | 
			
		||||
    public function buildFetchQueryActivityDocumentLinkedToAccompanyingPeriodFromPersonContext(Person $person, ?\DateTimeImmutable $startDate = null, ?\DateTimeImmutable $endDate = null, ?string $content = null): FetchQuery
 | 
			
		||||
    {
 | 
			
		||||
        $storedObjectMetadata = $this->em->getClassMetadata(StoredObject::class);
 | 
			
		||||
 
 | 
			
		||||
@@ -24,26 +24,31 @@ class ActivityPresenceRepository implements ActivityPresenceRepositoryInterface
 | 
			
		||||
        $this->repository = $entityManager->getRepository($this->getClassName());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[\Override]
 | 
			
		||||
    public function find($id): ?ActivityPresence
 | 
			
		||||
    {
 | 
			
		||||
        return $this->repository->find($id);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[\Override]
 | 
			
		||||
    public function findAll(): array
 | 
			
		||||
    {
 | 
			
		||||
        return $this->repository->findAll();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[\Override]
 | 
			
		||||
    public function findBy(array $criteria, ?array $orderBy = null, ?int $limit = null, ?int $offset = null): array
 | 
			
		||||
    {
 | 
			
		||||
        return $this->findBy($criteria, $orderBy, $limit, $offset);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[\Override]
 | 
			
		||||
    public function findOneBy(array $criteria): ?ActivityPresence
 | 
			
		||||
    {
 | 
			
		||||
        return $this->findOneBy($criteria);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[\Override]
 | 
			
		||||
    public function getClassName(): string
 | 
			
		||||
    {
 | 
			
		||||
        return ActivityPresence::class;
 | 
			
		||||
 
 | 
			
		||||
@@ -33,6 +33,7 @@ class ActivityReasonRepository extends ServiceEntityRepository
 | 
			
		||||
    /**
 | 
			
		||||
     * @return ActivityReason[]
 | 
			
		||||
     */
 | 
			
		||||
    #[\Override]
 | 
			
		||||
    public function findAll(): array
 | 
			
		||||
    {
 | 
			
		||||
        $qb = $this->createQueryBuilder('ar');
 | 
			
		||||
 
 | 
			
		||||
@@ -24,6 +24,7 @@ final readonly class ActivityTypeRepository implements ActivityTypeRepositoryInt
 | 
			
		||||
        $this->repository = $em->getRepository(ActivityType::class);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[\Override]
 | 
			
		||||
    public function find($id): ?ActivityType
 | 
			
		||||
    {
 | 
			
		||||
        return $this->repository->find($id);
 | 
			
		||||
@@ -32,6 +33,7 @@ final readonly class ActivityTypeRepository implements ActivityTypeRepositoryInt
 | 
			
		||||
    /**
 | 
			
		||||
     * @return array|ActivityType[]
 | 
			
		||||
     */
 | 
			
		||||
    #[\Override]
 | 
			
		||||
    public function findAll(): array
 | 
			
		||||
    {
 | 
			
		||||
        return $this->repository->findAll();
 | 
			
		||||
@@ -40,6 +42,7 @@ final readonly class ActivityTypeRepository implements ActivityTypeRepositoryInt
 | 
			
		||||
    /**
 | 
			
		||||
     * @return array|ActivityType[]
 | 
			
		||||
     */
 | 
			
		||||
    #[\Override]
 | 
			
		||||
    public function findAllActive(): array
 | 
			
		||||
    {
 | 
			
		||||
        return $this->findBy(['active' => true]);
 | 
			
		||||
@@ -48,16 +51,19 @@ final readonly class ActivityTypeRepository implements ActivityTypeRepositoryInt
 | 
			
		||||
    /**
 | 
			
		||||
     * @return array|ActivityType[]
 | 
			
		||||
     */
 | 
			
		||||
    #[\Override]
 | 
			
		||||
    public function findBy(array $criteria, ?array $orderBy = null, ?int $limit = null, ?int $offset = null): array
 | 
			
		||||
    {
 | 
			
		||||
        return $this->repository->findBy($criteria, $orderBy, $limit, $offset);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[\Override]
 | 
			
		||||
    public function findOneBy(array $criteria): ?ActivityType
 | 
			
		||||
    {
 | 
			
		||||
        return $this->repository->findOneBy($criteria);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[\Override]
 | 
			
		||||
    public function getClassName(): string
 | 
			
		||||
    {
 | 
			
		||||
        return ActivityType::class;
 | 
			
		||||
 
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user