Elcodi\Admin\ProductBundle\EventListener\NewCategoryPositionEventListener::preFlush PHP Method

preFlush() public method

Before the flush we check if we are inserting new categories and in this case we set a correct position.
public preFlush ( Doctrine\ORM\Event\PreFlushEventArgs $args )
$args Doctrine\ORM\Event\PreFlushEventArgs The pre flush event arguments.
    public function preFlush(PreFlushEventArgs $args)
    {
        $entityManager = $args->getEntityManager();
        $scheduledInsertions = $entityManager->getUnitOfWork()->getScheduledEntityInsertions();
        foreach ($scheduledInsertions as $entity) {
            if ($entity instanceof Category) {
                /**
                 * @var Category $entity
                 */
                $entityRepository = $entityManager->getRepository(get_class($entity));
                if ($entity->isRoot()) {
                    $parentCategoriesNumber = count($entityRepository->getParentCategories());
                    $entity->setPosition($parentCategoriesNumber);
                } else {
                    $categoriesOnThisParentCategory = count($entityRepository->getChildrenCategories($entity->getParent()));
                    $entity->setPosition($categoriesOnThisParentCategory);
                }
            }
        }
    }
NewCategoryPositionEventListener