namespace Lc\CaracoleBundle\Controller\Dashboard; | namespace Lc\CaracoleBundle\Controller\Dashboard; | ||||
use EasyCorp\Bundle\EasyAdminBundle\Config\Assets; | |||||
use EasyCorp\Bundle\EasyAdminBundle\Config\Crud; | use EasyCorp\Bundle\EasyAdminBundle\Config\Crud; | ||||
use Lc\SovBundle\Controller\Dashboard\DashboardController as SovDashboardController ; | use Lc\SovBundle\Controller\Dashboard\DashboardController as SovDashboardController ; | ||||
return $crud ; | return $crud ; | ||||
} | } | ||||
public function configureAssets(): Assets | |||||
{ | |||||
$assets = parent::configureAssets(); // TODO: Change the autogenerated stub | |||||
$assets->addWebpackEncoreEntry('common-switch-merchant') ; | |||||
return $assets ; | |||||
} | |||||
} | } |
<?php | |||||
namespace Lc\CaracoleBundle\Controller\Merchant; | |||||
use Lc\CaracoleBundle\Form\Merchant\SwitchMerchantFormType; | |||||
use Lc\SovBundle\Doctrine\EntityManager; | |||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; | |||||
use Symfony\Component\HttpFoundation\Request; | |||||
use Symfony\Component\Security\Core\Security; | |||||
class SwitchMerchantController extends AbstractController | |||||
{ | |||||
public function switchMerchant(Request $request, Security $security, EntityManager $em) | |||||
{ | |||||
$user = $security->getUser() ; | |||||
if($user) { | |||||
$form = $this->createForm(SwitchMerchantFormType::class); | |||||
$form->handleRequest($request); | |||||
if ($form->isSubmitted() && $form->isValid()) { | |||||
$merchant = $form->get('merchants')->getData(); | |||||
$user->setFavoriteMerchant($merchant) ; | |||||
$em->update($user) ; | |||||
$em->flush() ; | |||||
return $this->redirectToRoute('admin_dashboard') ; | |||||
} | |||||
} | |||||
else { | |||||
} | |||||
} | |||||
} |
namespace Lc\CaracoleBundle\Form\Merchant; | namespace Lc\CaracoleBundle\Form\Merchant; | ||||
use Lc\CaracoleBundle\Model\Merchant\MerchantInterface; | use Lc\CaracoleBundle\Model\Merchant\MerchantInterface; | ||||
use Lc\SovBundle\DataTransformer\FileManagerTypeToDataTransformer; | |||||
use Lc\CaracoleBundle\Resolver\MerchantResolver; | |||||
use Lc\SovBundle\Doctrine\EntityManager; | use Lc\SovBundle\Doctrine\EntityManager; | ||||
use Lc\SovBundle\Model\User\UserInterface; | |||||
use Lc\SovBundle\Translation\TranslatorAdmin; | use Lc\SovBundle\Translation\TranslatorAdmin; | ||||
use Symfony\Bridge\Doctrine\Form\Type\EntityType; | use Symfony\Bridge\Doctrine\Form\Type\EntityType; | ||||
use Symfony\Component\Form\AbstractType; | use Symfony\Component\Form\AbstractType; | ||||
use Symfony\Component\Form\FormBuilderInterface; | use Symfony\Component\Form\FormBuilderInterface; | ||||
use Symfony\Component\OptionsResolver\OptionsResolver; | |||||
class SwitchMerchantFormType extends AbstractType | class SwitchMerchantFormType extends AbstractType | ||||
{ | { | ||||
protected $em; | protected $em; | ||||
protected $translatorAdmin; | protected $translatorAdmin; | ||||
protected $merchantResolver; | |||||
public function __construct(EntityManager $em, TranslatorAdmin $translatorAdmin) | |||||
public function __construct(EntityManager $em, TranslatorAdmin $translatorAdmin, MerchantResolver $merchantResolver) | |||||
{ | { | ||||
$this->em = $em; | $this->em = $em; | ||||
$this->translatorAdmin = $translatorAdmin; | $this->translatorAdmin = $translatorAdmin; | ||||
$this->merchantResolver = $merchantResolver; | |||||
} | } | ||||
public function buildForm(FormBuilderInterface $builder, array $options) | public function buildForm(FormBuilderInterface $builder, array $options) | ||||
{ | { | ||||
$entityName = $this->em->getEntityName(MerchantInterface::class); | |||||
$builder->add( | $builder->add( | ||||
'merchants', | 'merchants', | ||||
EntityType::class, | EntityType::class, | ||||
[ | [ | ||||
'class' => $entityName, | |||||
'choice_label' => 'title' | |||||
'class' => $this->em->getEntityName(MerchantInterface::class), | |||||
'choice_label' => 'title', | |||||
'data' => $options['current_merchant'] | |||||
] | |||||
); | |||||
} | |||||
/** | |||||
* {@inheritdoc} | |||||
*/ | |||||
public function configureOptions(OptionsResolver $resolver) | |||||
{ | |||||
$resolver->setDefaults( | |||||
[ | |||||
'current_merchant' => $this->merchantResolver->getCurrent(), | |||||
] | ] | ||||
); | ); | ||||
} | } | ||||
} | } |
/** | /** | ||||
* @ORM\ManyToOne(targetEntity="Lc\CaracoleBundle\Model\Merchant\MerchantInterface") | * @ORM\ManyToOne(targetEntity="Lc\CaracoleBundle\Model\Merchant\MerchantInterface") | ||||
*/ | */ | ||||
protected $merchant; | |||||
protected $favoriteMerchant; | |||||
/** | /** | ||||
* @ORM\OneToMany(targetEntity="Lc\CaracoleBundle\Model\Address\AddressInterface", mappedBy="user", cascade={"persist"}) | * @ORM\OneToMany(targetEntity="Lc\CaracoleBundle\Model\Address\AddressInterface", mappedBy="user", cascade={"persist"}) | ||||
return $this; | return $this; | ||||
} | } | ||||
public function getMerchant(): ?MerchantInterface | |||||
public function getFavoriteMerchant(): ?MerchantInterface | |||||
{ | { | ||||
return $this->merchant; | |||||
return $this->favoriteMerchant; | |||||
} | } | ||||
public function setMerchant(?MerchantInterface $merchant): self | |||||
public function setFavoriteMerchant(?MerchantInterface $merchant): self | |||||
{ | { | ||||
$this->merchant = $merchant; | |||||
$this->favoriteMerchant = $merchant; | |||||
return $this; | return $this; | ||||
} | } |
import './switchmerchant.js' ; | |||||
$(document).ready(function() { | |||||
initSwitchMerchant() ; | |||||
}) ; | |||||
function initSwitchMerchant() { | |||||
let $form = $('form.switch-merchant') ; | |||||
$form.find('select').change(function() { | |||||
$form.submit() ; | |||||
}) ; | |||||
} |
carac_switch_merchant: | |||||
path: /switch-merchant | |||||
controller: Lc\CaracoleBundle\Controller\Merchant\SwitchMerchantController::switchMerchant | |||||
use Symfony\Component\Form\FormFactoryInterface; | use Symfony\Component\Form\FormFactoryInterface; | ||||
use Symfony\Component\HttpFoundation\RequestStack; | use Symfony\Component\HttpFoundation\RequestStack; | ||||
use Symfony\Component\HttpKernel\KernelInterface; | use Symfony\Component\HttpKernel\KernelInterface; | ||||
use Symfony\Component\Routing\Generator\UrlGenerator; | |||||
use Symfony\Component\Routing\Generator\UrlGeneratorInterface; | use Symfony\Component\Routing\Generator\UrlGeneratorInterface; | ||||
use Symfony\Contracts\Translation\TranslatorInterface; | use Symfony\Contracts\Translation\TranslatorInterface; | ||||
use Twig\Extension\AbstractExtension; | use Twig\Extension\AbstractExtension; | ||||
class TwigExtension extends AbstractExtension | class TwigExtension extends AbstractExtension | ||||
{ | { | ||||
protected $em; | |||||
protected $kernel; | |||||
protected $parameterBag; | |||||
protected $cacheManager; | |||||
protected $requestStack; | |||||
protected $router; | |||||
protected $translator; | |||||
protected $translatorAdmin; | |||||
protected $merchantRepository; | protected $merchantRepository; | ||||
protected $sectionRepository; | protected $sectionRepository; | ||||
protected $formFactory; | protected $formFactory; | ||||
protected $urlGenerator; | |||||
public function __construct( | public function __construct( | ||||
KernelInterface $kernel, | |||||
ParameterBagInterface $parameterBag, | |||||
CacheManager $cacheManager, | |||||
EntityManagerInterface $entityManager, | |||||
RequestStack $requestStack, | |||||
UrlGeneratorInterface $router, | |||||
TranslatorInterface $translator, | |||||
TranslatorAdmin $translatorAdmin, | |||||
MerchantRepository $merchantRepository, | MerchantRepository $merchantRepository, | ||||
SectionRepository $sectionRepository, | SectionRepository $sectionRepository, | ||||
FormFactoryInterface $formFactory | |||||
FormFactoryInterface $formFactory, | |||||
UrlGeneratorInterface $urlGenerator | |||||
) { | ) { | ||||
$this->kernel = $kernel; | |||||
$this->parameterBag = $parameterBag; | |||||
$this->cacheManager = $cacheManager; | |||||
$this->em = $entityManager; | |||||
$this->requestStack = $requestStack; | |||||
$this->router = $router; | |||||
$this->translator = $translator; | |||||
$this->translatorAdmin = $translatorAdmin; | |||||
$this->merchantRepository = $merchantRepository; | $this->merchantRepository = $merchantRepository; | ||||
$this->sectionRepository = $sectionRepository; | $this->sectionRepository = $sectionRepository; | ||||
$this->formFactory = $formFactory; | $this->formFactory = $formFactory; | ||||
$this->urlGenerator = $urlGenerator; | |||||
} | } | ||||
public function getFunctions() | public function getFunctions() | ||||
public function getFormSwitchMerchant() | public function getFormSwitchMerchant() | ||||
{ | { | ||||
$form = $this->formFactory->create(SwitchMerchantFormType::class, null, ['action' => '#']); | |||||
$form = $this->formFactory->create( | |||||
SwitchMerchantFormType::class, | |||||
null, | |||||
[ | |||||
'action' => $this->urlGenerator->generate('carac_switch_merchant'), | |||||
'attr' => ['class' => 'switch-merchant'] | |||||
] | |||||
); | |||||
return $form->createView(); | return $form->createView(); | ||||
} | } | ||||
} | } |