MerchantResolver::class, 'section_resolver' => SectionResolver::class, 'user_factory' => UserFactory::class, 'user_merchant_factory' => UserMerchantFactory::class, ReductionCatalogStore::class => ReductionCatalogStore::class, ] ); } public function configureResponseParameters(KeyValueStore $responseParameters): KeyValueStore { $responseParameters = parent::configureResponseParameters($responseParameters); // affichage du filtre sur section if ($this->isInstanceOf(FilterSectionInterface::class)) { $responseParameters->set('display_switch_section', true); } return $responseParameters; } public function createIndexQueryBuilder( SearchDto $searchDto, EntityDto $entityDto, FieldCollection $fields, FilterCollection $filters ): QueryBuilder { $queryBuilder = parent::createIndexQueryBuilder( $searchDto, $entityDto, $fields, $filters ); //TODO Gérer depuis les événements if ($this->isInstanceOf(FilterMerchantInterface::class)) { $queryBuilder->andWhereMerchant('entity', $this->get('merchant_resolver')->getCurrent()); } if ($this->isInstanceOf(FilterMultipleMerchantsInterface::class)) { $queryBuilder->andWhere(':merchant MEMBER OF entity.merchants'); $queryBuilder->setParameter('merchant', $this->get('merchant_resolver')->getCurrent()); } if ($this->isInstanceOf(FilterSectionInterface::class)) { $queryBuilder->andWhereSection('entity', $this->get('section_resolver')->getCurrent()); } return $queryBuilder; } public function duplicateToOtherMerchant( AdminContext $context, EntityComponent $entityComponent, TranslatorAdmin $translatorAdmin, EntityManagerInterface $em ) { if (!$this->isGranted( Permission::EA_EXECUTE_ACTION, ['action' => "duplicate", 'entity' => $context->getEntity()] )) { throw new ForbiddenActionException($context); } if (!$context->getEntity()->isAccessible()) { throw new InsufficientEntityPermissionException($context); } if (!$this->isInstanceOf(FilterMerchantInterface::class)) { throw new \ErrorException('L\entité n\'est pas lié à un merchant.'); } $duplicateOtherMerchantForm = $this->createForm( DuplicateToOtherMerchantFormType::class, null, array( 'entityClass' => $context->getEntity()->getFqcn(), 'entityId' => $context->getEntity()->getInstance()->getId(), 'action' => $context->getRequest()->getUri(), 'attr' => ['id'=> 'duplicate-other-merchant-form'], ) ); $duplicateOtherMerchantForm->handleRequest($context->getRequest()); if ($duplicateOtherMerchantForm->isSubmitted() && $duplicateOtherMerchantForm->isValid()) { $newEntity = $entityComponent->duplicateEntity($context->getEntity()->getInstance()); $em->create($newEntity); $merchant = $duplicateOtherMerchantForm->get('merchants')->getData(); $newEntity->setMerchant($merchant); $em->update($newEntity); $em->flush(); $url = $this->get(AdminUrlGenerator::class) ->setAction(Action::EDIT) ->setEntityId($newEntity->getId()) ->generateUrl(); $this->addFlash( 'success', $translatorAdmin->transFlashMessage( 'duplicateToOtherMerchant', ['%merchant%' => $merchant->getTitle()] ), array() ); //TODO switch merchant route return $this->redirect($url); } if ($context->getRequest()->isXmlHttpRequest()) { $response['data'] = $this->renderView( '@LcCaracole/admin/merchant/modal/duplicate_entity_to_other_merchant.html.twig', array( 'form_duplicate_entity_to_other_merchant' => $duplicateOtherMerchantForm->createView(), ) ); return new Response(json_encode($response)); }else{ throw new \ErrorException('La requête doit être effectué en ajax'); } } public function duplicateToOtherSection( AdminContext $context, EntityComponent $entityComponent, TranslatorAdmin $translatorAdmin, EntityManagerInterface $em ) { if (!$this->isGranted( Permission::EA_EXECUTE_ACTION, ['action' => "duplicate", 'entity' => $context->getEntity()] )) { throw new ForbiddenActionException($context); } if (!$context->getEntity()->isAccessible()) { throw new InsufficientEntityPermissionException($context); } if (!$this->isInstanceOf(FilterSectionInterface::class)) { throw new \ErrorException('L\entité n\'est pas lié à un merchant.'); } $duplicateOtherSectionForm = $this->createForm( DuplicateToOtherSectionFormType::class, null, array( 'entityClass' => $context->getEntity()->getFqcn(), 'entityId' => $context->getEntity()->getInstance()->getId(), 'action' => $context->getRequest()->getUri(), 'attr' => ['id'=> 'duplicate-other-section-form'], ) ); $duplicateOtherSectionForm->handleRequest($context->getRequest()); if ($duplicateOtherSectionForm->isSubmitted() && $duplicateOtherSectionForm->isValid()) { $newEntity = $entityComponent->duplicateEntity($context->getEntity()->getInstance()); $em->create($newEntity); $section = $duplicateOtherSectionForm->get('sections')->getData(); $newEntity->setSection($section); $em->update($newEntity); $em->flush(); $url = $this->get(AdminUrlGenerator::class) ->setAction(Action::EDIT) ->setEntityId($newEntity->getId()) ->generateUrl(); $this->addFlash( 'success', $translatorAdmin->transFlashMessage( 'duplicateToOtherSection', ['%section%' => $section->getTitle()] ), array() ); //TODO switch merchant route return $this->redirect($url); } if ($context->getRequest()->isXmlHttpRequest()) { $response['data'] = $this->renderView( '@LcCaracole/admin/merchant/modal/duplicate_entity_to_other_section.html.twig', array( 'form_duplicate_entity_to_other_section' => $duplicateOtherSectionForm->createView(), ) ); return new Response(json_encode($response)); }else{ throw new \ErrorException('La requête doit être effectué en ajax'); } } public function buildIndexActions(Actions $actions): void { parent::buildIndexActions($actions); if ($this->isInstanceOf(FilterMerchantInterface::class)) { $actions->add(Crud::PAGE_INDEX, $this->getDuplicateToOhterMerchantAction()); } if ($this->isInstanceOf(FilterSectionInterface::class)) { $actions->add(Crud::PAGE_INDEX, $this->getDuplicateToOhterSectionAction()); } } public function getDuplicateToOhterMerchantAction(): Action { $duplicateAction = Action::new( 'duplicateToOtherMerchant', $this->get('translator_admin')->transAction('duplicateToOtherMerchant'), 'fa fa-fw fa-copy' ) ->linkToCrudAction('duplicateToOtherMerchant') ->setCssClass('text-info in-dropdown duplicate-to-other-merchant duplicate-modal-action'); return $duplicateAction; } public function getDuplicateToOhterSectionAction(): Action { $duplicateAction = Action::new( 'duplicateToOtherSection', $this->get('translator_admin')->transAction('duplicateToOtherSection'), 'fa fa-fw fa-copy' ) ->linkToCrudAction('duplicateToOtherSection') ->setCssClass('text-info in-dropdown duplicate-to-other-section duplicate-modal-action'); return $duplicateAction; } }