Product Duplication function

7 views
Skip to first unread message

jnewman67

unread,
Dec 10, 2009, 3:15:19 PM12/10/09
to phpShop
okay, i added a new product function: productDupe

this will duplicate a product, adding "Copy" to the sku and name of
the product. it will copy all attributes and prices, and will set the
category too. for products that have product_items, it will duplicate
those too, in the same manner.

here's the stuff - it's also been added to my 0.8.2 version as well.

in product_list.ihtml, add a 5th column to the list:

1st column:
[code]
<td align="center" class="RecordsTableHeader">Function</td>
[/code]

2nd column:
[code]
<td align="center">
<form method="post" action="<?php $sess->purl(SECUREURL) ?>"
name="" enctype="multipart/form-data">
<input type="hidden" name="product_id" value="<?php echo $db->f
("product_id"); ?>" />
<input type="hidden" name="category_id" value="<?php echo
$category_id; ?>" />
<input type="hidden" name="func" value="productDupe" />
<input type="hidden" name="page" value="product/product_list" />
<input type="submit" name="Duplicate" value="Duplicate">
</form>
</td>
[/code]



in ps_product.inc, add this function:
[code]
/
**************************************************************************
** name: duplicate()
** created by: jnewman67
** description: duplicates a product and it's associated
information
** parameters: product_id to copy

***************************************************************************/
function duplicate(&$d) {
$timestamp = time();
$db = new ps_DB;
$dbn = new ps_DB;
$product_id = $d["product_id"];
$product_parent_id = $d["product_parent_id"];

$q = "SELECT * from product where product_id = $product_id";
$db->query($q);
$db->next_record();

// check to see if new product_sku already exists //
$q = "SELECT product_sku FROM product ";
$q .= "WHERE product_sku = '" . $db->f("product_sku") . "Copy' ";
$dbn->query($q);
if($dbn->next_record()) {
$d["error"] = "Product " . $dbn->f("product_sku") . " already
exists. No duplication performed";
return false;
}

if ($db->num_rows()) {
$d["vendor_id"] = $db->f("vendor_id");
$d["product_sku"] = $db->f("product_sku") . "Copy";
$d["product_name"] = $db->f("product_name") . "Copy";
$d["product_s_desc"] = $db->f("product_s_desc");
$d["product_desc"] = $db->f("product_desc");
$d["product_thumb_image"] = $db->f("product_thumb_image");
$d["product_full_image"] = $db->f("product_full_image");
$d["product_publish"] = $db->f("product_publish");
$d["product_weight"] = $db->f("product_weight");
$d["product_weight_uom"] = $db->f("product_weight_uom");
$d["product_length"] = $db->f("product_length");
$d["product_width"] = $db->f("product_width");
$d["product_height"] = $db->f("product_height");
$d["product_lwh_uom"] = $db->f("product_lwh_uom");
$d["product_url"] = $db->f("product_url");
$d["product_in_stock"] = $db->f("product_in_stock");
$d["product_available_date"] = $db->f("product_available_date");
$d["product_special"] = $db->f("product_special");
$d["product_discount_id"] = $db->f("product_discount_id");
if ($d["product_publish"] == "") {
$d["product_publish"] = "N";
}
if ($d["product_special"] == "") {
$d["product_special"] = "N";
}

$q = "INSERT INTO product
(vendor_id,product_parent_id,product_sku,";
$q .= "product_name,product_desc,product_s_desc,";
$q .= "product_thumb_image,product_full_image,";
$q .= "product_publish,product_weight,product_weight_uom,";
$q .=
"product_length,product_width,product_height,product_lwh_uom,";
$q .= "product_url,product_in_stock,";
$q .=
"product_available_date,product_special,product_discount_id,";
$q .= "cdate,mdate) ";
$q .= "VALUES ('";
$q .= $d["vendor_id"] . "','" . $d["product_parent_id"] . "','";
$q .= $d["product_sku"] . "','" . $d["product_name"] . "','";
$q .= $d["product_desc"] . "','" . $d["product_s_desc"] . "','";
$q .= $d["product_thumb_image"] . "','";
$q .= $d["product_full_image"] . "','" . $d["product_publish"] .
"','";
$q .= $d["product_weight"] . "','" . $d["product_weight_uom"] .
"','";
$q .= $d["product_length"] . "','" . $d["product_width"] . "','";
$q .= $d["product_height"] . "','" . $d["product_lwh_uom"] . "','";
$q .= $d["product_url"] . "','" . $d["product_in_stock"] . "','";
$q .= $d["product_available_date"] . "','";
$q .= $d["product_special"] . "','";
$q .= $d["product_discount_id"] . "','$timestamp','$timestamp')";
$db->query($q);

// Get the assigned product_id //
$q = "SELECT product_id FROM product ";
$q .= "WHERE product_sku = '" . $d["product_sku"] . "' ";
$q .= "AND vendor_id = '" . $d["vendor_id"] . "' ";
$q .= "AND cdate = $timestamp";
$db->query($q);
$db->next_record();
$d["product_id"] = $db->f("product_id");

/* duplicate pricing */
$q = "SELECT * FROM product_price ";
$q .= "WHERE product_id='" . $product_id . "' ";
$db->query($q);
while($db->next_record()) {
$q = "INSERT INTO product_price (product_id,shopper_group_id,";
$q .= "product_price,product_currency,product_price_vdate,";
$q .= "product_price_edate,cdate,mdate) ";
$q .= "VALUES ('" . $d["product_id"] . "','" . $db->f
("shopper_group_id");
$q .= "','" . $db->f("product_price") . "','" . $db->f
("product_currency") . "','";
$q .= $db->f("product_price_vdate") . "','" . $db->f
("product_price_edate") . "',";
$q .= "'$timestamp','$timestamp')";
$dbn->query($q);
}

if ($d["product_parent_id"]) {
/* it's a product_item - duplicate attributes */
$q = "SELECT * FROM product_attribute ";
$q .= "WHERE product_id='" . $product_id . "' ";
$db->query($q);
while($db->next_record()) {
$q = "INSERT INTO product_attribute (product_id, attribute_name,
attribute_value) ";
$q .= "VALUES ('" . $d["product_id"] . "','" . $db->f
("attribute_name");
$q .= "','" . $db->f("attribute_value") . "')";
$dbn->query($q);
}
} else {
/* it's a master product - duplicate the attribute list */
$q = "SELECT * FROM product_attribute_sku ";
$q .= "WHERE product_id='" . $product_id . "' ";
$db->query($q);
while($db->next_record()) {
$q = "INSERT INTO product_attribute_sku (product_id,
attribute_name, attribute_list) ";
$q .= "VALUES ('" . $d["product_id"] . "','" . $db->f
("attribute_name");
$q .= "','" . $db->f("attribute_list") . "')";
$dbn->query($q);
}

/* duplicate the product items if they exist */
$q = "SELECT * FROM product ";
$q .= "WHERE product_parent_id='" . $product_id . "' ";
$db->query($q);
while($db->next_record()) {
$dn["product_id"] = $db->f("product_id");
$dn["product_parent_id"] = $d["product_id"];
$this->duplicate($dn);
}
}

/* duplicate category_xref */
$q = "SELECT * FROM product_category_xref ";
$q .= "WHERE product_id='" . $product_id . "' ";
$db->query($q);
if($db->next_record()) {
$q = "INSERT INTO product_category_xref (product_id, category_id,
product_list) ";
$q .= "VALUES ('" . $d["product_id"] . "','" . $db->f
("category_id");
$q .= "','" . $db->f("product_list") . "')";
$dbn->query($q);
}
}

}
[/code]



in admin.css, set the FORM margins = 0 so that the product rows stay
short and neat:
[code]
FORM {
margin:0px 0px 0px 0px;
padding:0px 0px 0px 0px;
}

[/code]

that should be all. in the product listing, you'll see a Duplicate
button. pressing it will create the new item and take you back to the
list you were looking at, with the new item added

jnewman67

unread,
Dec 10, 2009, 7:21:33 PM12/10/09
to phpShop
forgot one thing. you need to add a function to the product module

Function Name: productDupe
Class Name: ps_product
Class Method: duplicate
Function Perms: admin,storeadmin

that should do it.
Reply all
Reply to author
Forward
0 new messages