diff --git a/Controller/ExportController.php b/Controller/ExportController.php index 241749033..5db47b3c4 100644 --- a/Controller/ExportController.php +++ b/Controller/ExportController.php @@ -410,7 +410,7 @@ class ExportController extends Controller $dataFormatter = $this->session->get('formatter_step_raw', null); $dataExport = $this->session->get('export_step_raw', null); - if ($dataFormatter === NULL) { + if ($dataFormatter === NULL and $export instanceof \Chill\MainBundle\Export\ExportInterface) { return $this->redirectToRoute('chill_main_export_new', array( 'alias' => $alias, 'step' => $this->getNextStep('generate', $export, true) )); @@ -423,9 +423,9 @@ class ExportController extends Controller $this->session->remove('formatter_step'); $redirectParameters = array_merge( - $dataFormatter, - $dataExport, - $dataCenters, + $dataFormatter ?? [], + $dataExport ?? [], + $dataCenters ?? [], array('alias' => $alias) ); unset($redirectParameters['_token']); @@ -447,6 +447,7 @@ class ExportController extends Controller { /* @var $exportManager \Chill\MainBundle\Export\ExportManager */ $exportManager = $this->exportManager; + $export = $exportManager->getExport($alias); $formCenters = $this->createCreateFormExport($alias, 'generate_centers'); $formCenters->handleRequest($request); @@ -456,13 +457,19 @@ class ExportController extends Controller $formExport->handleRequest($request); $dataExport = $formExport->getData(); - $formFormatter = $this->createCreateFormExport($alias, 'generate_formatter', - $dataExport); - $formFormatter->handleRequest($request); - $dataFormatter = $formFormatter->getData(); + if ($export instanceof \Chill\MainBundle\Export\ExportInterface) { + $formFormatter = $this->createCreateFormExport($alias, 'generate_formatter', + $dataExport); + $formFormatter->handleRequest($request); + $dataFormatter = $formFormatter->getData(); + } - $r = $exportManager->generate($alias, $dataCenters['centers'], - $dataExport['export'], $dataFormatter['formatter']); + $r = $exportManager->generate( + $alias, + $dataCenters['centers'], + $dataExport['export'], + isset($dataFormatter) ? $dataFormatter['formatter'] : [] + ); return $r; } @@ -480,7 +487,11 @@ class ExportController extends Controller $dataExport = $formExport->getData(); $formatterAlias = $exportManager->getFormatterAlias($dataExport['export']); - $formater = $exportManager->getFormatter($formatterAlias); + if ($formatterAlias !== null) { + $formater = $exportManager->getFormatter($formatterAlias); + } else { + $formater = null; + } $viewVariables = [ 'alias' => $alias diff --git a/Export/DirectExportInterface.php b/Export/DirectExportInterface.php index f2071e112..ebbda3240 100644 --- a/Export/DirectExportInterface.php +++ b/Export/DirectExportInterface.php @@ -11,5 +11,5 @@ use Symfony\Component\HttpFoundation\Response; */ interface DirectExportInterface extends ExportElementInterface { - //put your code here + } diff --git a/Export/ExportManager.php b/Export/ExportManager.php index 54682b2ec..49458b4ec 100644 --- a/Export/ExportManager.php +++ b/Export/ExportManager.php @@ -348,12 +348,13 @@ class ExportManager * center, false if the user hasn't access to element for at least one center. * * @param \Chill\MainBundle\Export\ExportElementInterface $element + * @param ExportInterface|DirectExportInterface $export * @param array|null $centers, if null, the function take into account all the reachables centers for the current user and the role given by element::requiredRole * @return boolean */ - public function isGrantedForElement(ExportElementInterface $element, ExportInterface $export = NULL, array $centers = null) + public function isGrantedForElement(ExportElementInterface $element, ExportElementInterface $export = NULL, array $centers = null) { - if ($element instanceof ExportInterface) { + if ($element instanceof ExportInterface || $element instanceof DirectExportInterface) { $role = $element->requiredRole(); } elseif ($element instanceof ModifierInterface ) { if (is_null($element->addRole())) { @@ -433,8 +434,10 @@ class ExportManager $centers = $this->getPickedCenters($pickedCentersData); if ($export instanceof DirectExportInterface) { - return $export->generate($this->buildCenterReachableScopes($centers, $export), - $data[ExportType::EXPORT_KEY]); + return $export->generate( + $this->buildCenterReachableScopes($centers, $export), + $data[ExportType::EXPORT_KEY] + ); } $query = $export->initiateQuery( @@ -571,6 +574,10 @@ class ExportManager */ private function retrieveUsedModifiers($data) { + if ($data === null) { + return []; + } + $usedTypes = array_merge( $this->retrieveUsedFiltersType($data[ExportType::FILTER_KEY]), $this->retrieveUsedAggregatorsType($data[ExportType::AGGREGATOR_KEY]) @@ -590,6 +597,10 @@ class ExportManager */ private function retrieveUsedFiltersType($data) { + if ($data === null) { + return []; + } + $usedTypes = array(); foreach($data as $alias => $filterData) { if ($filterData['enabled'] == true){ @@ -610,6 +621,10 @@ class ExportManager */ private function retrieveUsedAggregatorsType($data) { + if ($data === null) { + return []; + } + $usedTypes = array(); foreach($this->retrieveUsedAggregators($data) as $alias => $aggregator) { if (!in_array($aggregator->applyOn(), $usedTypes)) { @@ -627,6 +642,10 @@ class ExportManager */ private function retrieveUsedAggregators($data) { + if ($data === null) { + return []; + } + foreach ($data as $alias => $aggregatorData) { if ($aggregatorData['enabled'] === true){ yield $alias => $this->getAggregator($alias); @@ -640,6 +659,10 @@ class ExportManager */ private function retrieveUsedFilters($data) { + if ($data === null) { + return []; + } + foreach ($data as $alias => $filterData) { if ($filterData['enabled'] === true) { yield $alias => $this->getFilter($alias); diff --git a/Form/Type/Export/ExportType.php b/Form/Type/Export/ExportType.php index c8410f231..24dd63dd3 100644 --- a/Form/Type/Export/ExportType.php +++ b/Form/Type/Export/ExportType.php @@ -75,51 +75,55 @@ class ExportType extends AbstractType $builder->add($exportBuilder, null, $exportOptions); - //add filters - $filters = $this->exportManager->getFiltersApplyingOn($export, $options['picked_centers']); - $filterBuilder = $builder->create(self::FILTER_KEY, FormType::class, array('compound' => true)); + if ($export instanceof \Chill\MainBundle\Export\ExportInterface) { + //add filters + $filters = $this->exportManager->getFiltersApplyingOn($export, $options['picked_centers']); + $filterBuilder = $builder->create(self::FILTER_KEY, FormType::class, array('compound' => true)); - foreach($filters as $alias => $filter) { - $filterBuilder->add($alias, FilterType::class, array( - 'filter_alias' => $alias, - 'export_manager' => $this->exportManager, - 'label' => $filter->getTitle(), - 'constraints' => array( - new ExportElementConstraint(['element' => $filter]) - ) - )); + foreach($filters as $alias => $filter) { + $filterBuilder->add($alias, FilterType::class, array( + 'filter_alias' => $alias, + 'export_manager' => $this->exportManager, + 'label' => $filter->getTitle(), + 'constraints' => array( + new ExportElementConstraint(['element' => $filter]) + ) + )); + } + + $builder->add($filterBuilder); + + //add aggregators + $aggregators = $this->exportManager + ->getAggregatorsApplyingOn($export, $options['picked_centers']); + $aggregatorBuilder = $builder->create(self::AGGREGATOR_KEY, FormType::class, + array('compound' => true)); + + foreach($aggregators as $alias => $aggregator) { + $aggregatorBuilder->add($alias, AggregatorType::class, array( + 'aggregator_alias' => $alias, + 'export_manager' => $this->exportManager, + 'label' => $aggregator->getTitle(), + 'constraints' => array( + new ExportElementConstraint(['element' => $aggregator]) + ) + )); + } + + $builder->add($aggregatorBuilder); } - $builder->add($filterBuilder); - - //add aggregators - $aggregators = $this->exportManager - ->getAggregatorsApplyingOn($export, $options['picked_centers']); - $aggregatorBuilder = $builder->create(self::AGGREGATOR_KEY, FormType::class, - array('compound' => true)); - - foreach($aggregators as $alias => $aggregator) { - $aggregatorBuilder->add($alias, AggregatorType::class, array( - 'aggregator_alias' => $alias, - 'export_manager' => $this->exportManager, - 'label' => $aggregator->getTitle(), - 'constraints' => array( - new ExportElementConstraint(['element' => $aggregator]) - ) - )); - } - - $builder->add($aggregatorBuilder); - // add export form $exportBuilder = $builder->create(self::EXPORT_KEY, FormType::class, array('compound' => true)); $this->exportManager->getExport($options['export_alias']) ->buildForm($exportBuilder); $builder->add($exportBuilder); - $builder->add(self::PICK_FORMATTER_KEY, PickFormatterType::class, array( - 'export_alias' => $options['export_alias'] - )); + if ($export instanceof \Chill\MainBundle\Export\ExportInterface) { + $builder->add(self::PICK_FORMATTER_KEY, PickFormatterType::class, array( + 'export_alias' => $options['export_alias'] + )); + } } diff --git a/Resources/views/Export/new.html.twig b/Resources/views/Export/new.html.twig index 42f952085..a6527cac9 100644 --- a/Resources/views/Export/new.html.twig +++ b/Resources/views/Export/new.html.twig @@ -34,50 +34,54 @@ {{ form_start(form) }} - {% if form.children.export.children.filters is not empty%} -
- {{ form_widget(filter_form.enabled, { 'attr' : { 'style' : 'vertical-align: middle;', 'data-display-target': filter_form.vars.id } }) }} - {{ form_label(filter_form) }} -
- -+ {{ form_widget(filter_form.enabled, { 'attr' : { 'style' : 'vertical-align: middle;', 'data-display-target': filter_form.vars.id } }) }} + {{ form_label(filter_form) }} +
+ +- {{ form_widget(aggregator_form.enabled, { 'attr' : { 'style' : 'vertical-align: middle;', 'data-display-target': aggregator_form.vars.id } }) }} - {{ form_label(aggregator_form) }} -
- -+ {{ form_widget(aggregator_form.enabled, { 'attr' : { 'style' : 'vertical-align: middle;', 'data-display-target': aggregator_form.vars.id } }) }} + {{ form_label(aggregator_form) }} +
+ +{{ 'Choose the formatter'|trans }}
- - {{ form_row(form.children.export.children.pick_formatter.children.alias, { 'label' : 'Formatter' }) }} -{{ 'Choose the formatter'|trans }}
+ + {{ form_row(form.children.export.children.pick_formatter.children.alias, { 'label' : 'Formatter' }) }} +{{ form_widget(form.submit, { 'attr' : { 'class' : 'sc-button btn-create' }, 'label' : 'Go to formatter options' } ) }}
{{ form_end(form) }}