jnewman67
unread,Dec 10, 2009, 3:15:19 PM12/10/09Sign in to reply to author
Sign in to forward
You do not have permission to delete messages in this group
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
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