Refactor ExportManager integration and remove ExportsCompilerPass

Replaced direct ExportManager dependencies in formatters with an ExportManagerAwareTrait to decouple components and enhance flexibility. Removed the ExportsCompilerPass as it is no longer required, and adjusted service configurations to improve reliability and consistency.
This commit is contained in:
Julien Fastré 2025-04-07 12:42:28 +02:00
parent f9a55a1bfd
commit 2482dcc62e
Signed by: julienfastre
GPG Key ID: BDE2190974723FCB
13 changed files with 128 additions and 230 deletions

View File

@ -14,7 +14,6 @@ namespace Chill\MainBundle;
use Chill\MainBundle\Cron\CronJobInterface;
use Chill\MainBundle\CRUD\CompilerPass\CRUDControllerCompilerPass;
use Chill\MainBundle\DependencyInjection\CompilerPass\ACLFlagsCompilerPass;
use Chill\MainBundle\DependencyInjection\CompilerPass\ExportsCompilerPass;
use Chill\MainBundle\DependencyInjection\CompilerPass\MenuCompilerPass;
use Chill\MainBundle\DependencyInjection\CompilerPass\NotificationCounterCompilerPass;
use Chill\MainBundle\DependencyInjection\CompilerPass\SearchableServicesCompilerPass;
@ -66,7 +65,6 @@ class ChillMainBundle extends Bundle
$container->addCompilerPass(new SearchableServicesCompilerPass(), \Symfony\Component\DependencyInjection\Compiler\PassConfig::TYPE_BEFORE_OPTIMIZATION, 0);
$container->addCompilerPass(new ConfigConsistencyCompilerPass(), \Symfony\Component\DependencyInjection\Compiler\PassConfig::TYPE_BEFORE_OPTIMIZATION, 0);
$container->addCompilerPass(new TimelineCompilerClass(), \Symfony\Component\DependencyInjection\Compiler\PassConfig::TYPE_BEFORE_OPTIMIZATION, 0);
$container->addCompilerPass(new ExportsCompilerPass(), \Symfony\Component\DependencyInjection\Compiler\PassConfig::TYPE_BEFORE_OPTIMIZATION, 0);
$container->addCompilerPass(new WidgetsCompilerPass(), \Symfony\Component\DependencyInjection\Compiler\PassConfig::TYPE_BEFORE_OPTIMIZATION, 0);
$container->addCompilerPass(new NotificationCounterCompilerPass(), \Symfony\Component\DependencyInjection\Compiler\PassConfig::TYPE_BEFORE_OPTIMIZATION, 0);
$container->addCompilerPass(new MenuCompilerPass(), \Symfony\Component\DependencyInjection\Compiler\PassConfig::TYPE_BEFORE_OPTIMIZATION, 0);

View File

@ -1,102 +0,0 @@
<?php
declare(strict_types=1);
/*
* Chill is a software for social workers
*
* For the full copyright and license information, please view
* the LICENSE file that was distributed with this source code.
*/
namespace Chill\MainBundle\DependencyInjection\CompilerPass;
use Chill\MainBundle\Export\ExportManager;
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Definition;
use Symfony\Component\DependencyInjection\Reference;
/**
* Compiles the services tagged with :.
*
* - chill.export
* - chill.export_formatter
* - chill.export_aggregator
* - chill.export_filter
* - chill.export_elements_provider
*/
class ExportsCompilerPass implements CompilerPassInterface
{
public function process(ContainerBuilder $container)
{
if (!$container->has(ExportManager::class)) {
throw new \LogicException('service '.ExportManager::class.' is not defined. It is required by ExportsCompilerPass');
}
$chillManagerDefinition = $container->findDefinition(
ExportManager::class
);
$this->compileFormatters($chillManagerDefinition, $container);
$this->compileExportElementsProvider($chillManagerDefinition, $container);
}
private function compileExportElementsProvider(
Definition $chillManagerDefinition,
ContainerBuilder $container,
) {
$taggedServices = $container->findTaggedServiceIds(
'chill.export_elements_provider'
);
$knownAliases = [];
foreach ($taggedServices as $id => $tagAttributes) {
foreach ($tagAttributes as $attributes) {
if (!isset($attributes['prefix'])) {
throw new \LogicException("the 'prefix' attribute is missing in your service '{$id}' definition");
}
if (array_search($attributes['prefix'], $knownAliases, true)) {
throw new \LogicException('There is already a chill.export_elements_provider service with prefix '.$attributes['prefix'].'. Choose another prefix.');
}
$knownAliases[] = $attributes['prefix'];
$chillManagerDefinition->addMethodCall(
'addExportElementsProvider',
[new Reference($id), $attributes['prefix']]
);
}
}
}
private function compileFormatters(
Definition $chillManagerDefinition,
ContainerBuilder $container,
) {
$taggedServices = $container->findTaggedServiceIds(
'chill.export_formatter'
);
$knownAliases = [];
foreach ($taggedServices as $id => $tagAttributes) {
foreach ($tagAttributes as $attributes) {
if (!isset($attributes['alias'])) {
throw new \LogicException("the 'alias' attribute is missing in your service '{$id}' definition");
}
if (array_search($attributes['alias'], $knownAliases, true)) {
throw new \LogicException('There is already a chill.export_formatter service with alias '.$attributes['alias'].'. Choose another alias.');
}
$knownAliases[] = $attributes['alias'];
$chillManagerDefinition->addMethodCall(
'addFormatter',
[new Reference($id), $attributes['alias']]
);
}
}
}
}

View File

@ -11,7 +11,6 @@ declare(strict_types=1);
namespace Chill\MainBundle\Export;
use Chill\MainBundle\Entity\User;
use Chill\MainBundle\Form\Type\Export\ExportType;
use Chill\MainBundle\Security\Authorization\AuthorizationHelperInterface;
use Psr\Log\LoggerInterface;
@ -60,14 +59,13 @@ class ExportManager
iterable $exports,
iterable $aggregators,
iterable $filters,
// iterable $formatters,
iterable $formatters,
// iterable $exportElementProvider
) {
$this->exports = iterator_to_array($exports);
$this->aggregators = iterator_to_array($aggregators);
$this->filters = iterator_to_array($filters);
// NOTE: PHP crashes on the next line (exit error code 11). This is desactivated until further investigation
// $this->formatters = iterator_to_array($formatters);
$this->formatters = iterator_to_array($formatters);
// foreach ($exportElementProvider as $prefix => $provider) {
// $this->addExportElementsProvider($provider, $prefix);
@ -99,7 +97,7 @@ class ExportManager
\in_array($filter->applyOn(), $export->supportsModifiers(), true)
&& $this->isGrantedForElement($filter, $export, $centers)
) {
$filters[$alias] = $filter;
$filters[$alias] = $this->getFilter($alias);
}
}
@ -133,25 +131,6 @@ class ExportManager
return $aggregators;
}
public function addExportElementsProvider(ExportElementsProviderInterface $provider, string $prefix): void
{
foreach ($provider->getExportElements() as $suffix => $element) {
$alias = $prefix.'_'.$suffix;
if ($element instanceof ExportInterface) {
$this->exports[$alias] = $element;
} elseif ($element instanceof FilterInterface) {
$this->filters[$alias] = $element;
} elseif ($element instanceof AggregatorInterface) {
$this->aggregators[$alias] = $element;
} elseif ($element instanceof FormatterInterface) {
$this->addFormatter($element, $alias);
} else {
throw new \LogicException('This element '.$element::class.' is not an instance of export element');
}
}
}
/**
* add a formatter.
*
@ -171,11 +150,15 @@ class ExportManager
*/
public function getAggregator($alias)
{
if (!\array_key_exists($alias, $this->aggregators)) {
if (null === $aggregator = $this->aggregators[$alias] ?? null) {
throw new \RuntimeException("The aggregator with alias {$alias} is not known.");
}
return $this->aggregators[$alias];
if ($aggregator instanceof ExportManagerAwareInterface) {
$aggregator->setExportManager($this);
}
return $aggregator;
}
/**
@ -234,10 +217,10 @@ class ExportManager
foreach ($this->exports as $alias => $export) {
if ($whereUserIsGranted) {
if ($this->isGrantedForElement($export, null, null)) {
yield $alias => $export;
yield $alias => $this->getExport($alias);
}
} else {
yield $alias => $export;
yield $alias => $this->getExport($alias);
}
}
}
@ -253,9 +236,9 @@ class ExportManager
foreach ($this->getExports($whereUserIsGranted) as $alias => $export) {
if ($export instanceof GroupedExportInterface) {
$groups[$export->getGroup()][$alias] = $export;
$groups[$export->getGroup()][$alias] = $this->getExport($alias);
} else {
$groups['_'][$alias] = $export;
$groups['_'][$alias] = $this->getExport($alias);
}
}
@ -267,11 +250,15 @@ class ExportManager
*/
public function getFilter(string $alias): FilterInterface
{
if (!\array_key_exists($alias, $this->filters)) {
if (null === $filter = $this->filters[$alias] ?? null) {
throw new \RuntimeException("The filter with alias {$alias} is not known.");
}
return $this->filters[$alias];
if ($filter instanceof ExportManagerAwareInterface) {
$filter->setExportManager($this);
}
return $filter;
}
public function hasFilter(string $alias): bool
@ -289,7 +276,7 @@ class ExportManager
$filters = [];
foreach ($this->filters as $alias => $filter) {
$filters[$alias] = $filter;
$filters[$alias] = $this->getFilter($alias);
}
return $filters;
@ -311,11 +298,15 @@ class ExportManager
public function getFormatter(string $alias): FormatterInterface
{
if (!\array_key_exists($alias, $this->formatters)) {
if (null === $formatter = $this->formatters[$alias] ?? null) {
throw new \RuntimeException("The formatter with alias {$alias} is not known.");
}
return $this->formatters[$alias];
if ($formatter instanceof ExportManagerAwareInterface) {
$formatter->setExportManager($this);
}
return $formatter;
}
/**
@ -343,7 +334,7 @@ class ExportManager
{
foreach ($this->formatters as $alias => $formatter) {
if (\in_array($formatter->getType(), $types, true)) {
yield $alias => $formatter;
yield $alias => $this->getFormatter($alias);
}
}
}

View File

@ -0,0 +1,20 @@
<?php
declare(strict_types=1);
/*
* Chill is a software for social workers
*
* For the full copyright and license information, please view
* the LICENSE file that was distributed with this source code.
*/
namespace Chill\MainBundle\Export;
/**
* Interface which is aware of the export manager.
*/
interface ExportManagerAwareInterface
{
public function setExportManager(ExportManager $exportManager): void;
}

View File

@ -11,8 +11,9 @@ declare(strict_types=1);
namespace Chill\MainBundle\Export\Formatter;
use Chill\MainBundle\Export\ExportManager;
use Chill\MainBundle\Export\ExportManagerAwareInterface;
use Chill\MainBundle\Export\FormatterInterface;
use Chill\MainBundle\Export\Helper\ExportManagerAwareTrait;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\FormType;
use Symfony\Component\Form\FormBuilderInterface;
@ -26,8 +27,10 @@ use function count;
*
* @deprecated this formatter is not used any more
*/
class CSVFormatter implements FormatterInterface
class CSVFormatter implements FormatterInterface, ExportManagerAwareInterface
{
use ExportManagerAwareTrait;
protected $aggregators;
protected $aggregatorsData;
@ -36,10 +39,6 @@ class CSVFormatter implements FormatterInterface
protected $exportData;
/**
* @var ExportManager
*/
protected $exportManager;
protected $filtersData;
@ -51,17 +50,14 @@ class CSVFormatter implements FormatterInterface
public function __construct(
protected TranslatorInterface $translator,
ExportManager $manager,
) {
$this->exportManager = $manager;
}
) {}
/**
* @uses appendAggregatorForm
*/
public function buildForm(FormBuilderInterface $builder, $exportAlias, array $aggregatorAliases)
{
$aggregators = $this->exportManager->getAggregators($aggregatorAliases);
$aggregators = $this->getExportManager()->getAggregators($aggregatorAliases);
$nb = \count($aggregatorAliases);
foreach ($aggregators as $alias => $aggregator) {
@ -99,7 +95,7 @@ class CSVFormatter implements FormatterInterface
$descriptions = [];
foreach ($this->filtersData as $key => $filterData) {
$statement = $this->exportManager
$statement = $this->getExportManager()
->getFilter($key)
->describeAction($filterData);
@ -137,8 +133,8 @@ class CSVFormatter implements FormatterInterface
) {
$this->result = $result;
$this->orderingHeaders($formatterData);
$this->export = $this->exportManager->getExport($exportAlias);
$this->aggregators = iterator_to_array($this->exportManager
$this->export = $this->getExportManager()->getExport($exportAlias);
$this->aggregators = iterator_to_array($this->getExportManager()
->getAggregators(array_keys($aggregatorsData)));
$this->exportData = $exportData;
$this->aggregatorsData = $aggregatorsData;

View File

@ -11,8 +11,9 @@ declare(strict_types=1);
namespace Chill\MainBundle\Export\Formatter;
use Chill\MainBundle\Export\ExportManager;
use Chill\MainBundle\Export\ExportManagerAwareInterface;
use Chill\MainBundle\Export\FormatterInterface;
use Chill\MainBundle\Export\Helper\ExportManagerAwareTrait;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\HttpFoundation\Response;
@ -24,16 +25,14 @@ use function count;
/**
* Create a CSV List for the export.
*/
class CSVListFormatter implements FormatterInterface
class CSVListFormatter implements FormatterInterface, ExportManagerAwareInterface
{
use ExportManagerAwareTrait;
protected $exportAlias;
protected $exportData;
/**
* @var ExportManager
*/
protected $exportManager;
protected $formatterData;
@ -51,10 +50,9 @@ class CSVListFormatter implements FormatterInterface
*/
protected $translator;
public function __construct(TranslatorInterface $translatorInterface, ExportManager $exportManager)
public function __construct(TranslatorInterface $translatorInterface)
{
$this->translator = $translatorInterface;
$this->exportManager = $exportManager;
}
/**
@ -199,7 +197,7 @@ class CSVListFormatter implements FormatterInterface
*/
protected function prepareCacheLabels()
{
$export = $this->exportManager->getExport($this->exportAlias);
$export = $this->getExportManager()->getExport($this->exportAlias);
$keys = $export->getQueryKeys($this->exportData);
foreach ($keys as $key) {
@ -217,7 +215,7 @@ class CSVListFormatter implements FormatterInterface
*/
protected function prepareHeaders($output)
{
$keys = $this->exportManager->getExport($this->exportAlias)->getQueryKeys($this->exportData);
$keys = $this->getExportManager()->getExport($this->exportAlias)->getQueryKeys($this->exportData);
// we want to keep the order of the first row. So we will iterate on the first row of the results
$first_row = \count($this->result) > 0 ? $this->result[0] : [];
$header_line = [];

View File

@ -11,8 +11,9 @@ declare(strict_types=1);
namespace Chill\MainBundle\Export\Formatter;
use Chill\MainBundle\Export\ExportManager;
use Chill\MainBundle\Export\ExportManagerAwareInterface;
use Chill\MainBundle\Export\FormatterInterface;
use Chill\MainBundle\Export\Helper\ExportManagerAwareTrait;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\HttpFoundation\Response;
@ -22,17 +23,14 @@ use Symfony\Contracts\Translation\TranslatorInterface;
* Create a CSV List for the export where the header are printed on the
* first column, and the result goes from left to right.
*/
class CSVPivotedListFormatter implements FormatterInterface
class CSVPivotedListFormatter implements FormatterInterface, ExportManagerAwareInterface
{
use ExportManagerAwareTrait;
protected $exportAlias;
protected $exportData;
/**
* @var ExportManager
*/
protected $exportManager;
protected $formatterData;
/**
@ -49,10 +47,9 @@ class CSVPivotedListFormatter implements FormatterInterface
*/
protected $translator;
public function __construct(TranslatorInterface $translatorInterface, ExportManager $exportManager)
public function __construct(TranslatorInterface $translatorInterface)
{
$this->translator = $translatorInterface;
$this->exportManager = $exportManager;
}
/**
@ -198,7 +195,7 @@ class CSVPivotedListFormatter implements FormatterInterface
*/
protected function prepareCacheLabels()
{
$export = $this->exportManager->getExport($this->exportAlias);
$export = $this->getExportManager()->getExport($this->exportAlias);
$keys = $export->getQueryKeys($this->exportData);
foreach ($keys as $key) {

View File

@ -11,8 +11,9 @@ declare(strict_types=1);
namespace Chill\MainBundle\Export\Formatter;
use Chill\MainBundle\Export\ExportManager;
use Chill\MainBundle\Export\ExportManagerAwareInterface;
use Chill\MainBundle\Export\FormatterInterface;
use Chill\MainBundle\Export\Helper\ExportManagerAwareTrait;
use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\FormType;
@ -20,17 +21,17 @@ use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Contracts\Translation\TranslatorInterface;
class SpreadSheetFormatter implements FormatterInterface
class SpreadSheetFormatter implements FormatterInterface, ExportManagerAwareInterface
{
use ExportManagerAwareTrait;
/**
* an array where keys are the aggregators aliases and
* values are the data.
*
* replaced when `getResponse` is called.
*
* @var type
*/
protected $aggregatorsData;
protected array $aggregatorsData;
/**
* The export.
@ -41,12 +42,6 @@ class SpreadSheetFormatter implements FormatterInterface
*/
protected $export;
/**
* replaced when `getResponse` is called.
*
* @var type
*/
// protected $aggregators;
/**
* array containing value of export form.
@ -57,11 +52,6 @@ class SpreadSheetFormatter implements FormatterInterface
*/
protected $exportData;
/**
* @var ExportManager
*/
protected $exportManager;
/**
* replaced when `getResponse` is called.
*
@ -72,7 +62,7 @@ class SpreadSheetFormatter implements FormatterInterface
/**
* replaced when `getResponse` is called.
*
* @var type
* @var array
*/
protected $formatterData;
@ -120,10 +110,9 @@ class SpreadSheetFormatter implements FormatterInterface
*/
private bool $cacheDisplayableResultIsInitialized = false;
public function __construct(TranslatorInterface $translatorInterface, ExportManager $exportManager)
public function __construct(TranslatorInterface $translatorInterface)
{
$this->translator = $translatorInterface;
$this->exportManager = $exportManager;
}
public function buildForm(
@ -142,7 +131,7 @@ class SpreadSheetFormatter implements FormatterInterface
]);
// ordering aggregators
$aggregators = $this->exportManager->getAggregators($aggregatorAliases);
$aggregators = $this->getExportManager()->getAggregators($aggregatorAliases);
$nb = \count($aggregatorAliases);
foreach ($aggregators as $alias => $aggregator) {
@ -174,7 +163,7 @@ class SpreadSheetFormatter implements FormatterInterface
{
$data = ['format' => 'xlsx'];
$aggregators = iterator_to_array($this->exportManager->getAggregators($aggregatorAliases));
$aggregators = iterator_to_array($this->getExportManager()->getAggregators($aggregatorAliases));
foreach (array_keys($aggregators) as $index => $alias) {
$data[$alias] = ['order' => $index + 1];
}
@ -198,7 +187,7 @@ class SpreadSheetFormatter implements FormatterInterface
// store all data when the process is initiated
$this->result = $result;
$this->formatterData = $formatterData;
$this->export = $this->exportManager->getExport($exportAlias);
$this->export = $this->getExportManager()->getExport($exportAlias);
$this->exportData = $exportData;
$this->filtersData = $filtersData;
$this->aggregatorsData = $aggregatorsData;
@ -258,7 +247,7 @@ class SpreadSheetFormatter implements FormatterInterface
$line = 3;
foreach ($this->filtersData as $alias => $data) {
$filter = $this->exportManager->getFilter($alias);
$filter = $this->getExportManager()->getFilter($alias);
$description = $filter->describeAction($data, 'string');
if (\is_array($description)) {
@ -474,7 +463,7 @@ class SpreadSheetFormatter implements FormatterInterface
}
// keys for aggregator
foreach ($this->aggregatorsData as $alias => $data) {
$aggregator = $this->exportManager->getAggregator($alias);
$aggregator = $this->getExportManager()->getAggregator($alias);
foreach ($aggregator->getQueryKeys($data) as $key) {
$keysExportElementAssociation[$key] = [$aggregator, $data];

View File

@ -11,8 +11,9 @@ declare(strict_types=1);
namespace Chill\MainBundle\Export\Formatter;
use Chill\MainBundle\Export\ExportManager;
use Chill\MainBundle\Export\ExportManagerAwareInterface;
use Chill\MainBundle\Export\FormatterInterface;
use Chill\MainBundle\Export\Helper\ExportManagerAwareTrait;
use PhpOffice\PhpSpreadsheet\Shared\Date;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
@ -21,24 +22,18 @@ use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Contracts\Translation\TranslatorInterface;
use function count;
// command to get the report with curl : curl --user "center a_social:password" "http://localhost:8000/fr/exports/generate/count_person?export[filters][person_gender_filter][enabled]=&export[filters][person_nationality_filter][enabled]=&export[filters][person_nationality_filter][form][nationalities]=&export[aggregators][person_nationality_aggregator][order]=1&export[aggregators][person_nationality_aggregator][form][group_by_level]=country&export[submit]=&export[_token]=RHpjHl389GrK-bd6iY5NsEqrD5UKOTHH40QKE9J1edU" --globoff
/**
* Create a CSV List for the export.
*/
class SpreadsheetListFormatter implements FormatterInterface
class SpreadsheetListFormatter implements FormatterInterface, ExportManagerAwareInterface
{
use ExportManagerAwareTrait;
protected $exportAlias;
protected $exportData;
/**
* @var ExportManager
*/
protected $exportManager;
protected $formatterData;
/**
@ -55,10 +50,9 @@ class SpreadsheetListFormatter implements FormatterInterface
*/
protected $translator;
public function __construct(TranslatorInterface $translatorInterface, ExportManager $exportManager)
public function __construct(TranslatorInterface $translatorInterface)
{
$this->translator = $translatorInterface;
$this->exportManager = $exportManager;
}
/**
@ -258,7 +252,7 @@ class SpreadsheetListFormatter implements FormatterInterface
*/
protected function prepareCacheLabels()
{
$export = $this->exportManager->getExport($this->exportAlias);
$export = $this->getExportManager()->getExport($this->exportAlias);
$keys = $export->getQueryKeys($this->exportData);
foreach ($keys as $key) {
@ -280,7 +274,7 @@ class SpreadsheetListFormatter implements FormatterInterface
*/
protected function prepareHeaders(Worksheet $worksheet)
{
$keys = $this->exportManager->getExport($this->exportAlias)->getQueryKeys($this->exportData);
$keys = $this->getExportManager()->getExport($this->exportAlias)->getQueryKeys($this->exportData);
// we want to keep the order of the first row. So we will iterate on the first row of the results
$first_row = \count($this->result) > 0 ? $this->result[0] : [];
$header_line = [];

View File

@ -0,0 +1,34 @@
<?php
declare(strict_types=1);
/*
* Chill is a software for social workers
*
* For the full copyright and license information, please view
* the LICENSE file that was distributed with this source code.
*/
namespace Chill\MainBundle\Export\Helper;
use Chill\MainBundle\Export\Exception\ExportRuntimeException;
use Chill\MainBundle\Export\ExportManager;
trait ExportManagerAwareTrait
{
private ?ExportManager $exportManager;
public function setExportManager(ExportManager $exportManager): void
{
$this->exportManager = $exportManager;
}
public function getExportManager(): ExportManager
{
if (null === $this->exportManager) {
throw new ExportRuntimeException('ExportManager not set');
}
return $this->exportManager;
}
}

View File

@ -89,10 +89,7 @@ services:
$exports: !tagged_iterator { tag: chill.export, index_by: alias }
$aggregators: !tagged_iterator { tag: chill.export_aggregator, index_by: alias }
$filters: !tagged_iterator { tag: chill.export_filter, index_by: alias }
# for an unknown reason, iterator_to_array($formatter) cause a segmentation fault error (php-fpm code 11). removed temporarily
# $formatters: !tagged_iterator { tag: chill.export_formatter, index_by: alias }
# remove until we can properly test it
# $exportElementProvider: !tagged_iterator { tag: chill.export_elements_provider, index_by: prefix }
$formatters: !tagged_iterator { tag: chill.export_formatter, index_by: alias }
Chill\MainBundle\Security\Resolver\CenterResolverDispatcherInterface: '@Chill\MainBundle\Security\Resolver\CenterResolverDispatcher'

View File

@ -31,33 +31,21 @@ services:
chill.main.export.spreadsheet_formatter:
class: Chill\MainBundle\Export\Formatter\SpreadSheetFormatter
arguments:
$translatorInterface: '@Symfony\Contracts\Translation\TranslatorInterface'
$exportManager: '@Chill\MainBundle\Export\ExportManager'
tags:
- { name: chill.export_formatter, alias: 'spreadsheet' }
chill.main.export.list_formatter:
class: Chill\MainBundle\Export\Formatter\CSVListFormatter
arguments:
$translatorInterface: '@Symfony\Contracts\Translation\TranslatorInterface'
$exportManager: '@Chill\MainBundle\Export\ExportManager'
tags:
- { name: chill.export_formatter, alias: 'csvlist' }
chill.main.export.list_spreadsheet_formatter:
class: Chill\MainBundle\Export\Formatter\SpreadsheetListFormatter
arguments:
$translatorInterface: '@Symfony\Contracts\Translation\TranslatorInterface'
$exportManager: '@Chill\MainBundle\Export\ExportManager'
tags:
- { name: chill.export_formatter, alias: 'spreadlist' }
chill.main.export.pivoted_list_formatter:
class: Chill\MainBundle\Export\Formatter\CSVPivotedListFormatter
arguments:
$translatorInterface: '@Symfony\Contracts\Translation\TranslatorInterface'
$exportManager: '@Chill\MainBundle\Export\ExportManager'
tags:
- { name: chill.export_formatter, alias: 'csv_pivoted_list' }

View File

@ -19,7 +19,6 @@ use Chill\PersonBundle\Entity\Person\PersonCenterHistory;
use Chill\PersonBundle\Security\Authorization\AccompanyingPeriodVoter;
use Doctrine\ORM\QueryBuilder;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use Symfony\Component\Security\Core\Security;
/**
* Filter accompanying period list and related, removing confidential ones
@ -30,7 +29,6 @@ final readonly class FilterListAccompanyingPeriodHelper implements FilterListAcc
private bool $filterStatsByCenters;
public function __construct(
private Security $security,
private CenterRepositoryInterface $centerRepository,
private AuthorizationHelperForCurrentUserInterface $authorizationHelperForCurrentUser,
ParameterBagInterface $parameterBag,