/** Function and action for duplicating products, */ function wpsc_duplicate_product() { global $wpdb; $product_id = absint($_GET['product']); check_admin_referer('duplicate_product_' . $product_id); if ($product_id > 0) { $sql = " INSERT INTO " . WPSC_TABLE_PRODUCT_LIST . "( `name` , `description` , `additional_description` , `price` , `weight` , `weight_unit` , `pnp` , `international_pnp` , `file` , `image` , `quantity_limited` , `quantity` , `special` , `special_price` , `display_frontpage` , `notax` , `active` , `publish`, `donation` , `no_shipping` , `thumbnail_image` , `thumbnail_state` ) SELECT `name` , `description` , `additional_description` , `price` , `weight` , `weight_unit` , `pnp` , `international_pnp` , `file` , `image` , `quantity_limited` , `quantity` , `special` , `special_price` , `display_frontpage` , `notax` , `active` , `publish`, `donation` , `no_shipping` , `thumbnail_image` , `thumbnail_state` FROM " . WPSC_TABLE_PRODUCT_LIST . " WHERE id = '" . $product_id . "' "; // exit($sql); $wpdb->query($sql); $new_id = $wpdb->get_var("SELECT LAST_INSERT_ID() AS `id` FROM `" . WPSC_TABLE_PRODUCT_LIST . "` LIMIT 1"); //Inserting duplicated variations record. $nzshpcrt_variations = new nzshpcrt_variations(); $nzshpcrt_variations->duplicate_variation_values($new_id, $product_id); /* $variation_assocs = $wpdb->get_results("SELECT * FROM ".WPSC_TABLE_VARIATION_ASSOC." WHERE associated_id = ".$product_id, ARRAY_A); if(count($variation_assocs))foreach($variation_assocs as $variation_assoc){ $wpdb->query("INSERT INTO ".WPSC_TABLE_VARIATION_ASSOC." VALUES ('', '".$variation_assoc['type']."', '".$variation_assoc['name']."', '".$new_id."', '".$variation_assoc['variation_id']."');"); } $variation_combinations = $wpdb->get_results("SELECT * FROM ".WPSC_TABLE_VARIATION_COMBINATIONS." WHERE product_id = ".$product_id, ARRAY_A); if(count($variation_combinations))foreach($variation_combinations as $variation_combination){ $variation_properties = $wpdb->get_results("SELECT * FROM ".WPSC_TABLE_VARIATION_PROPERTIES." WHERE id = ".$variation_combination['priceandstock_id'], ARRAY_A); exit('<pre>'.print_r($variation_properties, true).'</pre>'); $wpdb->query("INSERT INTO ".WPSC_TABLE_VARIATION_PROPERTIES." VALUES ('', '".$new_id."', '".$variation_properties[0]['stock']."', '".$variation_properties[0]['price']."', '".$variation_properties[0]['weight']."', '".$variation_properties[0]['weight_unit']."', '".$variation_properties[0]['visibility']."', '".$variation_properties[0]['file']."');"); $new_prop_id= $wpdb->get_var("SELECT LAST_INSERT_ID() AS `id` FROM `".WPSC_TABLE_VARIATION_PROPERTIES."` LIMIT 1"); $wpdb->query("INSERT INTO ".WPSC_TABLE_VARIATION_COMBINATIONS." VALUES ('".$new_id."', '".$new_prop_id."', '".$variation_combination['value_id']."', '".$variation_combination['variation_id']."', '".$variation_combination['all_variation_ids']."');"); } $variation_values_assocs = $wpdb->get_results("SELECT * FROM ".WPSC_TABLE_VARIATION_VALUES_ASSOC." WHERE product_id = ".$product_id, ARRAY_A); if(count($variation_values_assocs))foreach($variation_values_assocs as $variation_values_assoc){ $wpdb->query("INSERT INTO ".WPSC_TABLE_VARIATION_VALUES_ASSOC." VALUES ('', '".$new_id."', '".$variation_values_assoc['value_id']."', '".$variation_values_assoc['visible']."', '".$variation_values_assoc['variation_id']."');"); } //end of variations */ //Inserting duplicated category record. $category_assoc = $wpdb->get_col("SELECT `category_id` FROM " . WPSC_TABLE_ITEM_CATEGORY_ASSOC . " WHERE product_id = '" . $product_id . "'"); $new_product_category = array(); if (count($category_assoc) > 0) { foreach ($category_assoc as $key => $category) { $new_product_category[] = "('" . $new_id . "','" . $category . "')"; $check_existing = $wpdb->get_results("SELECT * FROM `" . WPSC_TABLE_PRODUCT_ORDER . "` WHERE `category_id` IN('{$category}') AND `order` IN('0') LIMIT 1;", ARRAY_A); if ($wpdb->get_var("SELECT `id` FROM `" . WPSC_TABLE_PRODUCT_ORDER . "` WHERE `category_id` IN('{$category}') AND `product_id` IN('{$product_id}') LIMIT 1")) { $wpdb->query("UPDATE `" . WPSC_TABLE_PRODUCT_ORDER . "` SET `order` = '0' WHERE `category_id` IN('{$category}') AND `product_id` IN('{$product_id}') LIMIT 1;"); } else { $wpdb->query("INSERT INTO `" . WPSC_TABLE_PRODUCT_ORDER . "` (`category_id`, `product_id`, `order`) VALUES ('{$category}', '{$product_id}', 0)"); } if ($check_existing != null) { $wpdb->query("UPDATE `" . WPSC_TABLE_PRODUCT_ORDER . "` SET `order` = (`order` + 1) WHERE `category_id` IN('{$category}') AND `product_id` NOT IN('{$product_id}') AND `order` < '0'"); } } $wpdb->query("INSERT INTO " . WPSC_TABLE_ITEM_CATEGORY_ASSOC . " (product_id, category_id) VALUES " . implode(",", $new_product_category)); } //Inserting duplicated meta info $meta_values = $wpdb->get_results("SELECT `meta_key`, `meta_value`, `custom` FROM `" . WPSC_TABLE_PRODUCTMETA . "` WHERE product_id='" . $product_id . "' AND `meta_key` NOT IN ('url_name') ", ARRAY_A); $new_meta_value = array(); if (count($meta_values) > 0) { foreach ($meta_values as $key => $meta) { $new_meta_value[] = "('" . $new_id . "','" . $meta['meta_key'] . "','" . $meta['meta_value'] . "','" . $meta['custom'] . "')"; } $wpdb->query("INSERT INTO `" . WPSC_TABLE_PRODUCTMETA . "` (`product_id`, `meta_key`, `meta_value`, `custom`) VALUES " . implode(",", $new_meta_value)); } $product_name = $wpdb->get_var("SELECT `name` FROM `" . WPSC_TABLE_PRODUCT_LIST . "` WHERE `id` = '{$new_id}' LIMIT 1"); if ($product_name != '') { $tidied_name = strtolower(trim($product_name)); $url_name = sanitize_title($tidied_name); $similar_names = $wpdb->get_row("SELECT COUNT(*) AS `count`, MAX(REPLACE(`meta_value`, '{$url_name}', '')) AS `max_number` FROM `" . WPSC_TABLE_PRODUCTMETA . "` WHERE `meta_key` IN ('url_name') AND `meta_value` REGEXP '^({$url_name}){1}[[:digit:]]*\$' ", ARRAY_A); $extension_number = ''; if ($similar_names['count'] > 0) { $extension_number = (int) $similar_names['max_number'] + 1; } $url_name .= $extension_number; add_product_meta($new_id, 'url_name', $url_name, true); } $tags = wp_get_object_terms($product_id, 'product_tag', array('fields' => 'names')); wp_set_object_terms($new_id, $tags, 'product_tag'); //Inserting duplicated image info $image_values = $wpdb->get_results("SELECT `image`, `width`, `height`, `image_order`, `meta` FROM " . WPSC_TABLE_PRODUCT_IMAGES . " WHERE product_id='" . $product_id . "'", ARRAY_A); $new_image_value = array(); if (count($image_values) > 0) { foreach ($image_values as $key => $image) { if ($image['image'] != '') { if (is_numeric($image['width']) && is_numeric($image['height'])) { $image['width'] = absint($image['width']); $image['height'] = absint($image['height']); } else { $image['width'] = 'null'; $image['height'] = 'null'; } $new_image_value[] = "('" . $new_id . "','" . $image['image'] . "'," . $image['width'] . "," . $image['height'] . ",'" . $image['image_order'] . "','" . $image['meta'] . "')"; } } if (count($new_image_value) > 0) { $new_image_value = implode(",", $new_image_value); $sql = "INSERT INTO " . WPSC_TABLE_PRODUCT_IMAGES . " (`product_id`, `image`, `width`, `height`, `image_order`, `meta`) VALUES " . $new_image_value; $wpdb->query($sql); } } $duplicated = true; } $sendback = wp_get_referer(); if (isset($duplicated)) { $sendback = add_query_arg('duplicated', (int) $duplicated, $sendback); } wp_redirect($sendback); exit; }