|
- <?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)
- {
-
-
- }
-
- 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());
- }
- }
-
- }
|