/**
  * Remove associated product from a single product
  *
  * @param RemoveEvent $event
  */
 public function removeAssociatedProduct(RemoveEvent $event)
 {
     /** @var \Pim\Bundle\CatalogBundle\Model\ProductInterface $product */
     $product = $event->getSubject();
     $assocTypeCount = $this->assocTypeRepository->countAll();
     $this->productRepository->removeAssociatedProduct($event->getSubjectId(), $assocTypeCount);
 }
 function it_applies_on_related_products($saver, RemoveEvent $event, CategoryInterface $object, ProductInterface $product)
 {
     $saver->saveAll([$product])->shouldBeCalled();
     $event->getSubject()->willReturn($object);
     $object->getProducts()->willReturn([$product]);
     $product->removeCategory($object)->shouldBeCalled();
     $this->postRemove($event)->shouldReturn(null);
 }
 function it_applies_on_related_products($saver, RemoveEvent $event, CategoryInterface $object, ProductInterface $product)
 {
     $saver->saveAll([$product], ['flush' => 'expected_flush_value', 'recalculate' => false, 'schedule' => false])->shouldBeCalled();
     $event->getSubject()->willReturn($object);
     $event->getArgument('flush')->willReturn('expected_flush_value');
     $object->getProducts()->willReturn([$product]);
     $product->removeCategory($object)->shouldBeCalled();
     $this->postRemove($event)->shouldReturn(null);
 }
 function it_removed_associated_products_on_many_products($productRepository, $assocTypeRepository, RemoveEvent $event)
 {
     $event->getSubject()->willReturn([1, 2, 3]);
     $assocTypeRepository->countAll()->willReturn(5);
     $productRepository->removeAssociatedProduct(1, 5)->shouldBeCalled();
     $productRepository->removeAssociatedProduct(2, 5)->shouldBeCalled();
     $productRepository->removeAssociatedProduct(3, 5)->shouldBeCalled();
     $this->removeAssociatedProducts($event);
 }
 /**
  * Remove associated product from a single product
  *
  * @param RemoveEvent $event
  */
 public function removeAssociatedProduct(RemoveEvent $event)
 {
     $subject = $event->getSubject();
     if (!$subject instanceof ProductInterface) {
         return;
     }
     $assocTypeCount = $this->assocTypeRepository->countAll();
     $this->productRepository->removeAssociatedProduct($event->getSubjectId(), $assocTypeCount);
 }
 function it_does_not_create_a_version_on_not_versionable_object_deletion($tokenStorage, $authorizationChecker, $versionSaver, VersionInterface $removeVersion, TokenInterface $token, UserInterface $admin, $notVersionableObject, RemoveEvent $event)
 {
     $tokenStorage->getToken()->willReturn($token);
     $token->getUser()->willReturn($admin);
     $admin->getUsername()->willReturn('admin');
     $authorizationChecker->isGranted('IS_AUTHENTICATED_REMEMBERED')->willReturn(true);
     $versionSaver->save($removeVersion, Argument::any())->shouldNotBeCalled();
     $event->getSubject()->willReturn($notVersionableObject);
     $this->addRemoveVersion($event);
 }
 /**
  * @param RemoveEvent $event
  */
 public function postRemove(RemoveEvent $event)
 {
     $author = '';
     $subject = $event->getSubject();
     if (null !== ($token = $this->tokenStorage->getToken()) && $this->authorizationChecker->isGranted('IS_AUTHENTICATED_REMEMBERED')) {
         $author = $token->getUser()->getUsername();
     }
     $previousVersion = $this->versionRepository->getNewestLogEntry(ClassUtils::getClass($subject), $event->getSubjectId());
     $version = $this->versionFactory->create(ClassUtils::getClass($subject), $event->getSubjectId(), $author, 'Deleted');
     $version->setVersion(null !== $previousVersion ? $previousVersion->getVersion() + 1 : 1)->setSnapshot(null !== $previousVersion ? $previousVersion->getSnapshot() : [])->setChangeset([]);
     $this->versionSaver->save($version);
 }
 function it_applies_on_product_templates_containing_attribute_value($objectManager, $productTplBuilder, $productTplRepository, RemoveEvent $event, AttributeInterface $object, ProductTemplateInterface $productTemplate1, ProductTemplateInterface $productTemplate2)
 {
     $objectManager->persist($productTemplate2)->shouldBeCalled();
     $objectManager->remove($productTemplate1)->shouldBeCalled();
     $productTemplate1->getAttributeCodes()->willReturn([]);
     $productTemplate2->getAttributeCodes()->willReturn(['code']);
     $productTplRepository->findByAttribute($object)->willReturn([$productTemplate1, $productTemplate2]);
     $productTplBuilder->removeAttribute($productTemplate1, $object)->shouldBeCalled();
     $productTplBuilder->removeAttribute($productTemplate2, $object)->shouldBeCalled();
     $event->getSubject()->willReturn($object);
     $this->preRemove($event)->shouldReturn(null);
 }
 /**
  * @param RemoveEvent $event
  */
 public function postRemove(RemoveEvent $event)
 {
     $subject = $event->getSubject();
     if (!$subject instanceof CategoryInterface) {
         return;
     }
     $productsToUpdate = [];
     foreach ($subject->getProducts() as $product) {
         $product->removeCategory($subject);
         $productsToUpdate[] = $product;
     }
     if (count($productsToUpdate) > 0) {
         $this->saver->saveAll($productsToUpdate);
     }
 }
 /**
  * @param RemoveEvent $event
  */
 public function postRemove(RemoveEvent $event)
 {
     $subject = $event->getSubject();
     if (!$subject instanceof CategoryInterface) {
         return;
     }
     $productsToUpdate = [];
     foreach ($subject->getProducts() as $product) {
         $product->removeCategory($subject);
         $productsToUpdate[] = $product;
     }
     if (count($productsToUpdate) > 0) {
         $this->saver->saveAll($productsToUpdate, ['flush' => $event->getArgument('flush'), 'recalculate' => false, 'schedule' => false]);
     }
 }
 /**
  * @param RemoveEvent $event
  */
 public function preRemove(RemoveEvent $event)
 {
     $subject = $event->getSubject();
     if (!$subject instanceof AttributeInterface) {
         return;
     }
     $productTemplates = $this->productTplRepository->findByAttribute($subject);
     foreach ($productTemplates as $productTemplate) {
         $this->productTplBuilder->removeAttribute($productTemplate, $subject);
         $attributeCodes = $productTemplate->getAttributeCodes();
         if (empty($attributeCodes)) {
             $this->objectManager->remove($productTemplate);
         } else {
             $this->objectManager->persist($productTemplate);
         }
     }
 }
 function it_creates_a_version_on_object_deletion($versionFactory, $versionRepository, $tokenStorage, $authorizationChecker, $versionSaver, Version $previousVersion, Version $removeVersion, TokenInterface $token, UserInterface $admin, VersionableInterface $price, RemoveEvent $event)
 {
     $tokenStorage->getToken()->willReturn($token);
     $token->getUser()->willReturn($admin);
     $admin->getUsername()->willReturn('admin');
     $authorizationChecker->isGranted('IS_AUTHENTICATED_REMEMBERED')->willReturn(true);
     $versionRepository->getNewestLogEntry(Argument::any(), 12)->willReturn($previousVersion);
     $previousVersion->getVersion()->willReturn(11);
     $previousVersion->getSnapshot()->willReturn(['foo' => 'bar']);
     $versionFactory->create(Argument::Any(), 12, 'admin', 'Deleted')->willReturn($removeVersion);
     $removeVersion->setVersion(12)->willReturn($removeVersion);
     $removeVersion->setSnapshot(['foo' => 'bar'])->willReturn($removeVersion);
     $removeVersion->setChangeset([])->willReturn($removeVersion);
     $versionSaver->save($removeVersion)->shouldBeCalled();
     $event->getSubject()->willReturn($price);
     $event->getSubjectId()->willReturn(12);
     $this->postRemove($event);
 }