Ejemplo n.º 1
0
    /**
     * 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;
    }