public static function addVariations(array $data, StoreProduct $product) { $optItems = $product->getProductOptionItems(); $optionArrays = array(); foreach ($optItems as $optItem) { $optionArrays[$optItem->getProductOptionGroupID()][] = $optItem->getID(); } $comboOptions = self::combinations(array_values($optionArrays)); $variationIDs = array(); if (!empty($comboOptions)) { foreach ($comboOptions as $key => $optioncombo) { if (!is_array($optioncombo)) { $optioncomboarray = array(); $optioncomboarray[] = $optioncombo; $optioncombo = $optioncomboarray; } $variation = self::getByOptionItemIDs($optioncombo); if (!$variation) { $variation = self::add($product->getProductID(), array('pvSKU' => '', 'pvPrice' => '', 'pvSalePrice' => '', 'pvQty' => '', 'pvQtyUnlim' => '', 'pvfID' => '', 'pvWeight' => '', 'pvNumberItems' => '', 'pvWidth' => '', 'pvHeight' => '', 'pvLength' => '')); foreach ($optioncombo as $optionvalue) { $option = StoreProductOptionItem::getByID($optionvalue); if ($option) { $variationoption = new StoreProductVariationOptionItem(); $variationoption->setOption($option); $variationoption->setVariation($variation); $variationoption->save(); } } } else { $key = $variation->getID(); $variation->setVariationSKU($data['pvSKU'][$key]); $variation->setVariationPrice($data['pvPrice'][$key]); $variation->setVariationSalePrice($data['pvSalePrice'][$key]); $variation->setVariationQty($data['pvQty'][$key]); $variation->setVariationQtyUnlim($data['pvQtyUnlim'][$key]); $variation->setVariationFID($data['pvfID'][$key]); $variation->setVariationWidth($data['pvWeight'][$key]); $variation->setVariationNumberItems($data['pvNumberItems'][$key]); $variation->setVariationWeight($data['pvWidth'][$key]); $variation->setVariationHeight($data['pvHeight'][$key]); $variation->setVariationLength($data['pvLength'][$key]); $variation->save(); } $variationIDs[] = $variation->getID(); } } $db = Database::connection(); if (!empty($variationIDs)) { $options = implode(',', $variationIDs); $pvIDstoDelete = $db->getAll("SELECT pvID FROM VividStoreProductVariations WHERE pID = ? and pvID not in ({$options})", array($product->getProductID())); } else { $pvIDstoDelete = $db->getAll("SELECT pvID FROM VividStoreProductVariations WHERE pID = ?", array($product->getProductID())); } if (!empty($pvIDstoDelete)) { foreach ($pvIDstoDelete as $pvID) { $variation = self::getByID($pvID); if ($variation) { $variation->delete(); } } } }