/**
  * @param    ProductDocument $productDocument The productDocument object to add.
  */
 protected function doAddProductDocument($productDocument)
 {
     $productSaleElementsProductDocument = new ChildProductSaleElementsProductDocument();
     $productSaleElementsProductDocument->setProductDocument($productDocument);
     $this->addProductSaleElementsProductDocument($productSaleElementsProductDocument);
     // set the back reference to this object directly as using provided method either results
     // in endless loop or in multiple relations
     if (!$productDocument->getProductSaleElementss()->contains($this)) {
         $foreignCollection = $productDocument->getProductSaleElementss();
         $foreignCollection[] = $this;
     }
 }
 public function getAssociationResponseData($pseId, $type, $typeId)
 {
     $responseData = [];
     if (null !== ($msg = $this->checkFileType($type))) {
         throw new \Exception($msg);
     }
     $responseData["product_sale_elements_id"] = $pseId;
     $pse = ProductSaleElementsQuery::create()->findPk($pseId);
     if (null === $pse) {
         throw new \Exception($this->getTranslator()->trans("The product sale elements id %id doesn't exists", ["%id" => $pseId]));
     }
     $assoc = null;
     if ($type === "image") {
         $image = ProductImageQuery::create()->findPk($typeId);
         if (null === $image) {
             throw new \Exception($this->getTranslator()->trans("The product image id %id doesn't exists", ["%id" => $typeId]));
         }
         $assoc = ProductSaleElementsProductImageQuery::create()->filterByProductSaleElementsId($pseId)->findOneByProductImageId($typeId);
         if (null === $assoc) {
             $assoc = new ProductSaleElementsProductImage();
             $assoc->setProductSaleElementsId($pseId)->setProductImageId($typeId)->save();
         } else {
             $assoc->delete();
         }
         $responseData["product_image_id"] = $typeId;
         $responseData["is-associated"] = (int) (!$assoc->isDeleted());
     } elseif ($type === "document") {
         $image = ProductDocumentQuery::create()->findPk($typeId);
         if (null === $image) {
             throw new \Exception($this->getTranslator()->trans("The product document id %id doesn't exists", ["%id" => $pseId]));
         }
         $assoc = ProductSaleElementsProductDocumentQuery::create()->filterByProductSaleElementsId($pseId)->findOneByProductDocumentId($typeId);
         if (null === $assoc) {
             $assoc = new ProductSaleElementsProductDocument();
             $assoc->setProductSaleElementsId($pseId)->setProductDocumentId($typeId)->save();
         } else {
             $assoc->delete();
         }
         $responseData["product_document_id"] = $typeId;
         $responseData["is-associated"] = (int) (!$assoc->isDeleted());
     } elseif ($type === "virtual") {
         $image = ProductDocumentQuery::create()->findPk($typeId);
         if (null === $image) {
             throw new \Exception($this->getTranslator()->trans("The product document id %id doesn't exists", ["%id" => $pseId]));
         }
         $documentId = intval(MetaDataQuery::getVal('virtual', MetaData::PSE_KEY, $pseId));
         if ($documentId === intval($typeId)) {
             $assocEvent = new MetaDataDeleteEvent('virtual', MetaData::PSE_KEY, $pseId);
             $this->dispatch(TheliaEvents::META_DATA_DELETE, $assocEvent);
             $responseData["is-associated"] = 0;
         } else {
             $assocEvent = new MetaDataCreateOrUpdateEvent('virtual', MetaData::PSE_KEY, $pseId, $typeId);
             $this->dispatch(TheliaEvents::META_DATA_UPDATE, $assocEvent);
             $responseData["is-associated"] = 1;
         }
         $responseData["product_document_id"] = $typeId;
     }
     return $responseData;
 }
 /**
  * Filter the query by a related \Thelia\Model\ProductSaleElementsProductDocument object
  *
  * @param \Thelia\Model\ProductSaleElementsProductDocument|ObjectCollection $productSaleElementsProductDocument  the related object to use as filter
  * @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL
  *
  * @return ChildProductDocumentQuery The current query, for fluid interface
  */
 public function filterByProductSaleElementsProductDocument($productSaleElementsProductDocument, $comparison = null)
 {
     if ($productSaleElementsProductDocument instanceof \Thelia\Model\ProductSaleElementsProductDocument) {
         return $this->addUsingAlias(ProductDocumentTableMap::ID, $productSaleElementsProductDocument->getProductDocumentId(), $comparison);
     } elseif ($productSaleElementsProductDocument instanceof ObjectCollection) {
         return $this->useProductSaleElementsProductDocumentQuery()->filterByPrimaryKeys($productSaleElementsProductDocument->getPrimaryKeys())->endUse();
     } else {
         throw new PropelException('filterByProductSaleElementsProductDocument() only accepts arguments of type \\Thelia\\Model\\ProductSaleElementsProductDocument or Collection');
     }
 }
 public function clonePSEAssociatedFiles($clonedProductId, $clonedProductPSEId, $originalProductPSEFiles, $type)
 {
     /** @var ProductSaleElementsDocument|ProductSaleElementsImage $originalProductPSEFile */
     foreach ($originalProductPSEFiles as $originalProductPSEFile) {
         $originalProductFilePositionQuery = [];
         $originalProductPSEFileId = null;
         // Get file's original position
         switch ($type) {
             case 'image':
                 $originalProductFilePositionQuery = ProductImageQuery::create();
                 $originalProductPSEFileId = $originalProductPSEFile->getProductImageId();
                 break;
             case 'document':
                 $originalProductFilePositionQuery = ProductDocumentQuery::create();
                 $originalProductPSEFileId = $originalProductPSEFile->getProductDocumentId();
                 break;
         }
         $originalProductFilePosition = $originalProductFilePositionQuery->select(['POSITION'])->findPk($originalProductPSEFileId);
         // Get cloned file ID to link to the cloned PSE
         switch ($type) {
             case 'image':
                 $clonedProductFileIdToLinkToPSEQuery = ProductImageQuery::create();
                 break;
             case 'document':
                 $clonedProductFileIdToLinkToPSEQuery = ProductDocumentQuery::create();
                 break;
         }
         $clonedProductFileIdToLinkToPSE = $clonedProductFileIdToLinkToPSEQuery->filterByProductId($clonedProductId)->filterByPosition($originalProductFilePosition)->select(['ID'])->findOne();
         // Save association
         switch ($type) {
             case 'image':
                 $assoc = new ProductSaleElementsProductImage();
                 $assoc->setProductImageId($clonedProductFileIdToLinkToPSE);
                 break;
             case 'document':
                 $assoc = new ProductSaleElementsProductDocument();
                 $assoc->setProductDocumentId($clonedProductFileIdToLinkToPSE);
                 break;
         }
         $assoc->setProductSaleElementsId($clonedProductPSEId)->save();
     }
 }
 /**
  * Exclude object from result
  *
  * @param   ChildProductSaleElementsProductDocument $productSaleElementsProductDocument Object to remove from the list of results
  *
  * @return ChildProductSaleElementsProductDocumentQuery The current query, for fluid interface
  */
 public function prune($productSaleElementsProductDocument = null)
 {
     if ($productSaleElementsProductDocument) {
         $this->addUsingAlias(ProductSaleElementsProductDocumentTableMap::ID, $productSaleElementsProductDocument->getId(), Criteria::NOT_EQUAL);
     }
     return $this;
 }