<?php namespace Lc\ShopBundle\EventSubscriber; use Lc\ShopBundle\Context\FilterMerchantInterface; use Lc\ShopBundle\Context\FilterMultipleMerchantsInterface; use Lc\ShopBundle\Context\MerchantUtilsInterface; use Lc\ShopBundle\Context\SortableInterface; use Lc\ShopBundle\Context\StatusInterface; use Lc\ShopBundle\Context\TreeInterface; use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Component\EventDispatcher\GenericEvent; class EditEventSubscriber implements EventSubscriberInterface { public $merchantUtils; public function __construct(MerchantUtilsInterface $merchantUtils) { $this->merchantUtils = $merchantUtils; } public static function getSubscribedEvents() { return array( 'easy_admin.pre_persist' => array('persistCommonProperty'), 'easy_admin.post_update' => array('updateCommonProperty'), ); } public function persistCommonProperty(GenericEvent $event) { $entity = $event->getSubject(); $em = $event->getArgument('em'); $entityRepo = $em->getRepository(get_class($entity)); if ($entity instanceof StatusInterface) { $this->setStatusProperty($entity); } if ($entity instanceof SortableInterface) { $this->setSortableProperty($entity, $entityRepo); } if ($entity instanceof FilterMerchantInterface) { $this->setMerchantProperty($entity); } if ($entity instanceof FilterMultipleMerchantsInterface) { $this->setMultipleMerchantProperty($entity); } } public function updateCommonProperty(GenericEvent $event) { /* $this->setUpdated($entity); $this->setAddressCreatedBy($entity) ;*/ } private function setStatusProperty($entity){ $entity->setStatus(1); return $entity; } private function setSortableProperty($entity, $entityRepo) { if ($entity instanceof TreeInterface) { if ($entity->getParent()) { $total = $entityRepo->count(array('status' => 1, 'parent' => $entity->getParent()->getId())); $entity->setPosition((float) $entity->getParent()->getId() . '.' . str_pad($total, 2, '0', STR_PAD_LEFT)); } else { if ($entity instanceof FilterMerchantInterface) { $total = $entityRepo->count(array('status' => 1, 'parent' => null, 'merchant' => $this->merchantUtils->getMerchantCurrent())); }else{ $total = $entityRepo->count(array('status' => 1, 'parent' => null)); } $entity->setPosition($total); } } else { if ($entity instanceof FilterMerchantInterface) { $total = $entityRepo->count(array('status' => 1, 'merchant' => $this->merchantUtils->getMerchantCurrent())); } else { $total = $entityRepo->count(array('status' => 1)); } $entity->setPosition($total); } return $entity; } private function setMerchantProperty($entity) { $entity->setMerchant($this->merchantUtils->getMerchantCurrent()); } private function setMultipleMerchantProperty($entity) { if ($entity->getMerchants()->isEmpty()) { $entity->addMerchant($this->merchantUtils->getMerchantCurrent()); } } }