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();
             }
         }
     }
 }