/** * Duplicate custom options for product * * @param Mage_Catalog_Model_Product_Option $object * @param int $oldProductId * @param int $newProductId * @return Mage_Catalog_Model_Product_Option */ public function duplicate(Mage_Catalog_Model_Product_Option $object, $oldProductId, $newProductId) { $write = $this->_getWriteAdapter(); $read = $this->_getReadAdapter(); $optionsCond = array(); $optionsData = array(); // read and prepare original product options $select = $read->select()->from($this->getTable('catalog/product_option'))->where('product_id=?', $oldProductId); $query = $read->query($select); while ($row = $query->fetch()) { $optionsData[$row['option_id']] = $row; $optionsData[$row['option_id']]['product_id'] = $newProductId; unset($optionsData[$row['option_id']]['option_id']); } // insert options to duplicated product foreach ($optionsData as $oId => $data) { $write->insert($this->getMainTable(), $data); $optionsCond[$oId] = $write->lastInsertId(); } // copy options prefs foreach ($optionsCond as $oldOptionId => $newOptionId) { // title $table = $this->getTable('catalog/product_option_title'); $sql = 'REPLACE INTO `' . $table . '` ' . 'SELECT NULL, ' . $newOptionId . ', `store_id`, `title`' . 'FROM `' . $table . '` WHERE `option_id`=' . $oldOptionId; $this->_getWriteAdapter()->query($sql); // price $table = $this->getTable('catalog/product_option_price'); $sql = 'REPLACE INTO `' . $table . '` ' . 'SELECT NULL, ' . $newOptionId . ', `store_id`, `price`, `price_type`' . 'FROM `' . $table . '` WHERE `option_id`=' . $oldOptionId; $this->_getWriteAdapter()->query($sql); // description $table = $this->getTable('customoptiondescription/product_option_description'); $sql = 'REPLACE INTO `' . $table . '` ' . 'SELECT NULL, ' . $newOptionId . ', `store_id`, `description`' . 'FROM `' . $table . '` WHERE `option_id`=' . $oldOptionId; $this->_getWriteAdapter()->query($sql); $object->getValueInstance()->duplicate($oldOptionId, $newOptionId); } return $object; }
/** * Duplicate custom options for product * * @param Mage_Catalog_Model_Product_Option $object * @param int $oldProductId * @param int $newProductId * @return Mage_Catalog_Model_Product_Option */ public function duplicate(Mage_Catalog_Model_Product_Option $object, $oldProductId, $newProductId) { $write = $this->_getWriteAdapter(); $read = $this->_getReadAdapter(); $optionsCond = array(); $optionsData = array(); // read and prepare original product options $select = $read->select()->from($this->getTable('catalog/product_option'))->where('product_id = ?', $oldProductId); $query = $read->query($select); while ($row = $query->fetch()) { $optionsData[$row['option_id']] = $row; $optionsData[$row['option_id']]['product_id'] = $newProductId; unset($optionsData[$row['option_id']]['option_id']); } // insert options to duplicated product foreach ($optionsData as $oId => $data) { $write->insert($this->getMainTable(), $data); $optionsCond[$oId] = $write->lastInsertId($this->getMainTable()); } // copy options prefs foreach ($optionsCond as $oldOptionId => $newOptionId) { // title $table = $this->getTable('catalog/product_option_title'); $select = $this->_getReadAdapter()->select()->from($table, array(new Zend_Db_Expr($newOptionId), 'store_id', 'title'))->where('option_id = ?', $oldOptionId); $insertSelect = $write->insertFromSelect($select, $table, array('option_id', 'store_id', 'title'), Varien_Db_Adapter_Interface::INSERT_ON_DUPLICATE); $write->query($insertSelect); // price $table = $this->getTable('catalog/product_option_price'); $select = $read->select()->from($table, array(new Zend_Db_Expr($newOptionId), 'store_id', 'price', 'price_type'))->where('option_id = ?', $oldOptionId); $insertSelect = $write->insertFromSelect($select, $table, array('option_id', 'store_id', 'price', 'price_type'), Varien_Db_Adapter_Interface::INSERT_ON_DUPLICATE); $write->query($insertSelect); $object->getValueInstance()->duplicate($oldOptionId, $newOptionId); } return $object; }