Exemplo n.º 1
0
 /**
  * doActionAddUpselling
  *
  * @return void
  */
 protected function doActionAdd()
 {
     if (isset(\XLite\Core\Request::getInstance()->select)) {
         $pids = \XLite\Core\Request::getInstance()->select;
         $products = \XLite\Core\Database::getRepo('\\XLite\\Model\\Product')->findByIds($pids);
         $this->id = \XLite\Core\Request::getInstance()->parent_product_id;
         $parentProduct = \XLite\Core\Database::getRepo('\\XLite\\Model\\Product')->find($this->id);
         $existingLinksIds = array();
         $existingLinks = $this->getUpsellingList();
         if ($existingLinks) {
             foreach ($existingLinks as $k => $v) {
                 $existingLinksIds[] = $v->getProduct()->getProductId();
             }
         }
         if ($products) {
             foreach ($products as $product) {
                 if (in_array($product->getProductId(), $existingLinksIds)) {
                     \XLite\Core\TopMessage::addWarning('The product SKU#"X" is already set as Related for the product', array('SKU' => $product->getSku()));
                 } else {
                     $up = new \XLite\Module\XC\Upselling\Model\UpsellingProduct();
                     $up->setProduct($product);
                     $up->setParentProduct($parentProduct);
                     \XLite\Core\Database::getEM()->persist($up);
                     \XLite\Core\Database::getEM()->flush($up);
                     \XLite\Core\Database::getRepo('XLite\\Module\\XC\\Upselling\\Model\\UpsellingProduct')->addBidirectionalLink($up);
                 }
             }
         }
     }
     $this->setReturnURL($this->buildURL('product', '', array('page' => 'upselling_products', 'product_id' => $this->id)));
 }
Exemplo n.º 2
0
 /**
  * Import 'relatedProducts' value
  *
  * @param \XLite\Model\Product $model  Product
  * @param array                $value  Value (array of related products SKUs)
  * @param array                $column Column info
  *
  * @return void
  */
 protected function importRelatedProductsColumn(\XLite\Model\Product $model, array $value, array $column)
 {
     $currentRelations = \XLite\Core\Database::getRepo('XLite\\Module\\XC\\Upselling\\Model\\UpsellingProduct')->getUpsellingProducts($model->getProductId());
     $relSku = array();
     if ($currentRelations) {
         // Get SKU cache of currently assigned related products
         // and remove related products which are not in new values list
         $toDelete = array();
         foreach ($currentRelations as $rel) {
             $relSku[] = $rel->getProduct()->getSku();
             if ($rel->getProduct() && !in_array($rel->getProduct()->getSku(), $value)) {
                 $toDelete[] = $rel;
             }
         }
         if ($toDelete) {
             \XLite\Core\Database::getRepo('XLite\\Module\\XC\\Upselling\\Model\\UpsellingProduct')->deleteInBatch($toDelete);
         }
     }
     if ($value) {
         // Add current product SKU to avoid creations of the related product with the same SKU
         $relSku[] = $model->getSku();
         foreach ($value as $relProductSku) {
             if (!in_array($relProductSku, $relSku)) {
                 // Create new relation
                 $relProduct = \XLite\Core\Database::getRepo('XLite\\Model\\Product')->findOneBySku($relProductSku);
                 if ($relProduct) {
                     $up = new \XLite\Module\XC\Upselling\Model\UpsellingProduct();
                     $up->setProduct($relProduct);
                     $up->setParentProduct($model);
                     \XLite\Core\Database::getEM()->persist($up);
                 }
             }
         }
     }
 }
Exemplo n.º 3
0
 /**
  * Clone upselling links
  *
  * @param \XLite\Model\Product $product   Cloned product object
  * @param boolean              $backLinks Flag: true - create back links, false - direct links
  *
  * @return void
  */
 protected function cloneUpsellingLinks($product, $backLinks = false)
 {
     $upsellingLinks = $backLinks ? $this->getUpsellingParentProducts() : $this->getUpsellingProducts();
     foreach ($upsellingLinks as $up) {
         $newUp = new \XLite\Module\XC\Upselling\Model\UpsellingProduct();
         if ($backLinks) {
             $newUp->setProduct($product);
             $newUp->setParentProduct($up->getParentProduct());
         } else {
             $newUp->setProduct($up->getProduct());
             $newUp->setParentProduct($product);
         }
         $newUp->setOrderBy($up->getOrderBy());
         \XLite\Core\Database::getEM()->persist($newUp);
     }
 }