/** * Function copy. * * @param array $cid Array of IDs. * * @return bool */ public function copy($cid = array()) { $row = null; if (count($cid)) { $cids = implode(',', $cid); $query = 'SELECT * FROM ' . $this->table_prefix . 'product WHERE product_id IN ( ' . $cids . ' )'; $this->_db->setQuery($query); $this->copydata = $this->_db->loadObjectList(); } foreach ($this->copydata as $pdata) { $query = 'SELECT category_id FROM ' . $this->table_prefix . 'product_category_xref WHERE product_id IN ( ' . $pdata->product_id . ' )'; $this->_db->setQuery($query); $categorydata = $this->_db->loadObjectList(); $copycategory = array(); for ($i = 0; $i < count($categorydata); $i++) { $copycategory[$i] = $categorydata[$i]->category_id; } $query = 'SELECT related_id FROM ' . $this->table_prefix . 'product_related WHERE product_id IN ( ' . $pdata->product_id . ' )'; $this->_db->setQuery($query); $relatedproductdata = $this->_db->loadObjectList(); $copyrelatedproduct = array(); for ($i = 0; $i < count($relatedproductdata); $i++) { $copyrelatedproduct[$i] = $relatedproductdata[$i]->related_id; } $query = 'SELECT stockroom_id,quantity FROM ' . $this->table_prefix . 'product_stockroom_xref WHERE product_id IN ( ' . $pdata->product_id . ' )'; $this->_db->setQuery($query); $stockroomdata = $this->_db->loadObjectList(); $copystockroom = array(); $copyquantity = array(); for ($i = 0; $i < count($stockroomdata); $i++) { $copystockroom[$i] = $stockroomdata[$i]->stockroom_id; $copyquantity[$i] = $stockroomdata[$i]->quantity; } $query = 'SELECT * FROM ' . $this->table_prefix . 'product_accessory WHERE product_id IN ( ' . $pdata->product_id . ' )'; $this->_db->setQuery($query); $accessorydata = $this->_db->loadObjectList(); $copyaccessory = array(); // Accessory_product. for ($i = 0; $i < count($accessorydata); $i++) { $copyaccessory[$i] = (array) $accessorydata[$i]; } $query = 'SELECT * FROM ' . $this->table_prefix . 'product_price WHERE product_id IN ( ' . $pdata->product_id . ' )'; $this->_db->setQuery($query); $productpricedata = $this->_db->loadObjectList(); $query = 'SELECT * FROM ' . $this->table_prefix . 'media WHERE media_section = "product" AND section_id IN ( ' . $pdata->product_id . ' )'; $this->_db->setQuery($query); $mediadata = $this->_db->loadObjectList(); $post['copy_product'] = 1; $post['product_id'] = 0; $post['product_parent_id'] = $pdata->product_parent_id; $post['manufacturer_id'] = $pdata->manufacturer_id; $post['supplier_id'] = $pdata->supplier_id; $post['product_on_sale'] = $pdata->product_on_sale; $post['product_special'] = $pdata->product_special; $post['product_download'] = $pdata->product_download; $post['product_template'] = $pdata->product_template; $post['product_name'] = JText::_('COM_REDSHOP_COPY_OF') . ' ' . $pdata->product_name; $post['product_price'] = $pdata->product_price; $post['discount_price'] = $pdata->discount_price; $post['discount_stratdate'] = $pdata->discount_stratdate; $post['discount_enddate'] = $pdata->discount_enddate; $post['product_length'] = $pdata->product_length; $post['product_height'] = $pdata->product_height; $post['product_width'] = $pdata->product_width; $post['product_diameter'] = $pdata->product_diameter; $post['discount_calc_method'] = $pdata->discount_calc_method; $post['use_discount_calc'] = $pdata->use_discount_calc; $post['use_range'] = $pdata->use_range; $post['product_number'] = trim(JText::_('COM_REDSHOP_COPY_OF') . ' ' . $pdata->product_number); $post['product_type'] = $pdata->product_type; $post['product_s_desc'] = $pdata->product_s_desc; $post['product_desc'] = $pdata->product_desc; $post['product_volume'] = $pdata->product_volume; $post['product_tax_id'] = $pdata->product_tax_id; $post['attribute_set_id'] = $pdata->attribute_set_id; $post['product_tax_group_id'] = $pdata->product_tax_group_id; $post['min_order_product_quantity'] = $pdata->min_order_product_quantity; $post['max_order_product_quantity'] = $pdata->max_order_product_quantity; $post['accountgroup_id'] = $pdata->accountgroup_id; $post['quantity_selectbox_value'] = $pdata->quantity_selectbox_value; $post['not_for_sale'] = $pdata->not_for_sale; $post['product_availability_date'] = $pdata->product_availability_date; $post['published'] = 0; $post['product_thumb_image'] = ''; $post['product_full_image'] = ''; $new_product_thumb_image = null; $new_product_full_image = null; $new_product_back_full_image = null; $new_product_back_thumb_image = null; $new_product_preview_image = null; $new_product_preview_back_image = null; if (!empty($pdata->product_thumb_image)) { $new_product_thumb_image = strstr($pdata->product_thumb_image, '_') ? strstr($pdata->product_thumb_image, '_') : $pdata->product_thumb_image; $post['product_thumb_image'] = JPath::clean(time() . $new_product_thumb_image); } if (!empty($pdata->product_full_image)) { $new_product_full_image = strstr($pdata->product_full_image, '_') ? strstr($pdata->product_full_image, '_') : $pdata->product_full_image; $post['product_full_image'] = JPath::clean(time() . $new_product_full_image); } if (!empty($pdata->product_back_full_image)) { $new_product_back_full_image = strstr($pdata->product_back_full_image, '_') ? strstr($pdata->product_back_full_image, '_') : $pdata->product_back_full_image; $post['product_back_full_image'] = JPath::clean(time() . $new_product_back_full_image); } if (!empty($pdata->product_back_thumb_image)) { $new_product_back_thumb_image = strstr($pdata->product_back_thumb_image, '_') ? strstr($pdata->product_back_thumb_image, '_') : $pdata->product_back_thumb_image; $post['product_back_thumb_image'] = JPath::clean(time() . $new_product_back_thumb_image); } if (!empty($pdata->product_preview_image)) { $new_product_preview_image = strstr($pdata->product_preview_image, '_') ? strstr($pdata->product_preview_image, '_') : $pdata->product_preview_image; $post['product_preview_image'] = JPath::clean(time() . $new_product_preview_image); } if (!empty($pdata->product_preview_back_image)) { $new_product_preview_back_image = strstr($pdata->product_preview_back_image, '_') ? strstr($pdata->product_preview_back_image, '_') : $pdata->product_preview_back_image; $post['product_preview_back_image'] = JPath::clean(time() . $new_product_preview_back_image); } $post['publish_date'] = date("Y-m-d H:i:s"); $post['update_date'] = date("Y-m-d H:i:s"); $post['visited'] = $pdata->visited; $post['metakey'] = $pdata->metakey; $post['metadesc'] = $pdata->metadesc; $post['metalanguage_setting'] = $pdata->metalanguage_setting; $post['metarobot_info'] = $pdata->metarobot_info; $post['pagetitle'] = $pdata->pagetitle; $post['pageheading'] = $pdata->pageheading; $post['cat_in_sefurl'] = $pdata->cat_in_sefurl; $post['weight'] = $pdata->weight; $post['expired'] = $pdata->expired; $post['product_category'] = $copycategory; $post['related_product'] = $copyrelatedproduct; $post['quantity'] = $copyquantity; $post['stockroom_id'] = $copystockroom; $post['product_accessory'] = $copyaccessory; if ($row = $this->store($post)) { // Image Copy Start $old = REDSHOP_FRONT_IMAGES_RELPATH . 'product/' . $pdata->product_full_image; $new = REDSHOP_FRONT_IMAGES_RELPATH . 'product/' . JPath::clean(time() . $new_product_full_image); copy($old, $new); $old_thumb = REDSHOP_FRONT_IMAGES_RELPATH . 'product/' . $pdata->product_thumb_image; $new_thumb = REDSHOP_FRONT_IMAGES_RELPATH . 'product/' . JPath::clean(time() . $new_product_thumb_image); copy($old_thumb, $new_thumb); $old_preview = REDSHOP_FRONT_IMAGES_RELPATH . 'product/' . $pdata->product_preview_image; $new_preview = REDSHOP_FRONT_IMAGES_RELPATH . 'product/' . JPath::clean(time() . $new_product_preview_image); copy($old_preview, $new_preview); $old_back_preview = REDSHOP_FRONT_IMAGES_RELPATH . 'product/' . $pdata->product_preview_back_image; $new_back_preview = REDSHOP_FRONT_IMAGES_RELPATH . 'product/' . JPath::clean(time() . $new_product_preview_back_image); copy($old_back_preview, $new_back_preview); $old_prod_back_full = REDSHOP_FRONT_IMAGES_RELPATH . 'product/' . $pdata->product_back_full_image; $new_prod_back_full = REDSHOP_FRONT_IMAGES_RELPATH . 'product/' . JPath::clean(time() . $new_product_back_full_image); copy($old_prod_back_full, $new_prod_back_full); $old_prod_back_thumb = REDSHOP_FRONT_IMAGES_RELPATH . 'product/' . $pdata->product_back_thumb_image; $new_back_back_thumb = REDSHOP_FRONT_IMAGES_RELPATH . 'product/' . JPath::clean(time() . $new_product_back_thumb_image); copy($old_prod_back_thumb, $new_back_back_thumb); $field = new extra_field(); // Field_section 1 :Product. $field->copy_product_extra_field($pdata->product_id, $row->product_id); // End. $this->SaveStockroom($row->product_id, $post); $this->copyProductAttribute($pdata->product_id, $row->product_id); $this->copyDiscountCalcdata($pdata->product_id, $row->product_id, $pdata->discount_calc_method); for ($i = 0; $i < count($productpricedata); $i++) { $rowprices_detail =& $this->getTable('prices_detail'); $data['price_id '] = 0; $data['product_id'] = $row->product_id; $data['product_price'] = $productpricedata[$i]->product_price; $data['product_currency'] = $productpricedata[$i]->product_currency; $data['shopper_group_id'] = $productpricedata[$i]->shopper_group_id; $data['price_quantity_start'] = $productpricedata[$i]->price_quantity_start; $data['price_quantity_end'] = $productpricedata[$i]->price_quantity_end; if (!$rowprices_detail->bind($data)) { $this->setError($this->_db->getErrorMsg()); return false; } if (!$rowprices_detail->store()) { $this->setError($this->_db->getErrorMsg()); return false; } } for ($j = 0; $j < count($mediadata); $j++) { $old_img = $mediadata[$j]->media_name; $new_img = strstr($old_img, '_') ? strstr($old_img, '_') : $old_img; $old_media = REDSHOP_FRONT_IMAGES_RELPATH . 'product/' . $mediadata[$j]->media_name; $new_media = REDSHOP_FRONT_IMAGES_RELPATH . 'product/' . JPath::clean(time() . $new_img); copy($old_media, $new_media); $rowmedia =& $this->getTable('media_detail'); $data['media_id '] = 0; $data['media_name'] = JPath::clean(time() . $new_img); $data['media_alternate_text'] = $mediadata[$j]->media_alternate_text; $data['media_section'] = $mediadata[$j]->media_section; $data['section_id'] = $row->product_id; $data['media_type'] = $mediadata[$j]->media_type; $data['media_mimetype'] = $mediadata[$j]->media_mimetype; $data['published'] = $mediadata[$j]->published; if (!$rowmedia->bind($data)) { $this->setError($this->_db->getErrorMsg()); return false; } if (!$rowmedia->store()) { $this->setError($this->_db->getErrorMsg()); return false; } } } } return $row; }