|
- <?php
-
- namespace Lc\SovBundle\EventSubscriber;
-
- use Doctrine\ORM\EntityManagerInterface;
-
- use Lc\SovBundle\Doctrine\EntityInterface;
- use Lc\SovBundle\Doctrine\Extension\SortableInterface;
- use Lc\SovBundle\Doctrine\Extension\StatusInterface;
- use Lc\SovBundle\Doctrine\Extension\TreeInterface;
- use Lc\SovBundle\Event\EntityManager\EntityManagerEvent;
- use Lc\SovBundle\Repository\AbstractRepositoryInterface;
- use Symfony\Component\EventDispatcher\EventSubscriberInterface;
-
- class SortablePropertyEventSubscriber implements EventSubscriberInterface
- {
- protected $em;
- protected $adminUrlGenerator;
-
- public function __construct(EntityManagerInterface $entityManager)
- {
- $this->em = $entityManager;
- }
-
- public static function getSubscribedEvents()
- {
- return [
- EntityManagerEvent::PRE_CREATE_EVENT => ['setCommonProperty'],
- ];
- }
-
- public function setCommonProperty(EntityManagerEvent $event)
- {
- $entity = $event->getEntity();
- $entityRepository = $this->em->getRepository(get_class($entity));
- if ($entity instanceof SortableInterface) {
- $this->setSortableProperty($entity, $entityRepository);
- }
- }
-
-
- private function setSortableProperty(EntityInterface $entity, AbstractRepositoryInterface $entityRepository)
- {
- $countParam = array();
- if ($entity instanceof StatusInterface) {
- $countParam['status'] = 1;
- }
-
- if ($entity instanceof TreeInterface) {
- if ($entity->getParent()) {
- $countParam['parent'] = $entity->getParent()->getId();
- } else {
- $countParam['parent'] = null;
- }
- }
-
- $total = $entityRepository->count($countParam);
-
- $entity->setPosition($total);
- }
-
-
- }
|