/** * Function to add a new product into the product table * * @param array $d The input vars * @return boolean True, when the product was added, false when not */ function add( &$d ) { global $perm, $vmLogger, $VM_LANG; $database = new ps_DB(); if (!$this->validate($d)) { return false; } if (!vmImageTools::process_images($d)) { return false; } $timestamp = time(); $db = new ps_DB; $ps_vendor_id = $_SESSION["ps_vendor_id"]; if( $perm->check( 'admin' )) { $vendor_id = $d['vendor_id']; } else { $vendor_id = $ps_vendor_id; } // Insert into DB $fields = array ( 'vendor_id' => $vendor_id, 'product_parent_id' => vmRequest::getInt('product_parent_id'), 'product_sku' => vmGet($d,'product_sku'), 'product_name' => vmGet($d,'product_name'), 'product_desc' => vmRequest::getVar('product_desc', '', 'default', '', VMREQUEST_ALLOWHTML), 'product_s_desc' => vmRequest::getVar('product_s_desc', '', 'default', '', VMREQUEST_ALLOWHTML), 'product_thumb_image' => vmGet($d,'product_thumb_image'), 'product_full_image' => vmGet($d,'product_full_image'), 'product_publish' => $d['product_publish'], 'product_weight' => vmRequest::getFloat('product_weight'), 'product_weight_uom' => vmGet($d,'product_weight_uom'), 'product_length' => vmRequest::getFloat('product_length'), 'product_width' => vmRequest::getFloat('product_width'), 'product_height' => vmRequest::getFloat('product_height'), 'product_lwh_uom' => vmGet($d,'product_lwh_uom'), 'product_unit' => vmGet($d,'product_unit'), 'product_packaging' => (($d["product_box"] << 16) | ($d["product_packaging"]&0xFFFF)), 'product_url' => vmGet($d,'product_url'), 'product_in_stock' => vmRequest::getInt('product_in_stock'), 'attribute' => ps_product_attribute::formatAttributeX(), 'custom_attribute' => vmGet($d,'product_custom_attribute'), 'product_available_date' => $d['product_available_date_timestamp'], 'product_availability' => vmGet($d,'product_availability'), 'product_special' => $d['product_special'], 'child_options' => $d['child_options'], 'quantity_options' => $d['quantity_options'], 'product_discount_id' => vmRequest::getInt('product_discount_id'), 'cdate' => $timestamp, 'mdate' => $timestamp, 'product_tax_id' => vmRequest::getInt('product_tax_id'), 'child_option_ids' => vmGet($d,'included_product_id'), 'product_order_levels' => $d['order_levels'] ); $db->buildQuery('INSERT', '#__{vm}_product', $fields ); if( $db->query() === false ) { $vmLogger->err( $VM_LANG->_('VM_PRODUCT_ADDING_FAILED',false) ); return false; } $d["product_id"] = $_REQUEST['product_id'] = $db->last_insert_id(); // If is Item, add attributes from parent // if ($d["product_parent_id"]) { $q = "SELECT attribute_name FROM #__{vm}_product_attribute_sku "; $q .= "WHERE product_id='" . vmRequest::getInt('product_parent_id') . "' "; $q .= "ORDER BY attribute_list,attribute_name"; $db->query($q); $db2 = new ps_DB; $i = 0; while($db->next_record()) { $i++; $q = "INSERT INTO #__{vm}_product_attribute (`product_id`,`attribute_name`,`attribute_value`) VALUES "; $q .= "('".$d["product_id"]."', '".$db->f("attribute_name", false)."', '".vmGet($d,'attribute_'.$i )."')"; $db2->query( $q ); } } else { // If is Product, Insert category ids if( empty( $d['product_categories']) || !is_array(@$d['product_categories'])) { $d['product_categories'] = explode('|', $d['category_ids'] ); } foreach( $d["product_categories"] as $category_id ) { $db->query('SELECT MAX(`product_list`) as list_order FROM `#__{vm}_product_category_xref` WHERE `category_id`='.$category_id ); $db->next_record(); $q = "INSERT INTO #__{vm}_product_category_xref "; $q .= "(category_id,product_id,product_list) "; $q .= "VALUES ('$category_id','". $d["product_id"] . "', ".intval($db->f('max') +1 ) . ")"; $db->setQuery($q); $db->query(); } } $q = "INSERT INTO #__{vm}_product_mf_xref VALUES ("; $q .= "'".$d['product_id']."', '".vmRequest::getInt('manufacturer_id')."')"; $db->setQuery($q); $db->query(); if( !empty($d["related_products"])) { /* Insert Pipe separated Related Product IDs */ $related_products = vmGet( $d, "related_products" ); $q = "INSERT INTO #__{vm}_product_relations "; $q .= "(product_id, related_products) "; $q .= "VALUES ('".$d["product_id"]."','".$db->getEscaped($related_products)."')"; $db->setQuery($q); $db->query(); } // ADD A PRICE, IF NOT EMPTY ADD 0 if (!empty($d['product_price'])) { if(empty($d['product_currency'])) { $d['product_currency'] = $_SESSION['vendor_currency']; } $d["price_quantity_start"] = 0; $d["price_quantity_end"] = ""; require_once ( CLASSPATH. 'ps_product_price.php'); $my_price = new ps_product_price; $my_price->add($d); } if( !empty( $d['product_type_id'])) { require_once( CLASSPATH.'ps_product_product_type.php' ); $ps_product_product_type = new ps_product_product_type(); $ps_product_product_type->add( $d ); // Product Type Parameters! $this->handleParameters( $d ); } // CLONE PRODUCT additional code if( $d["clone_product"] == "Y" ) { // Clone Parent Product's Attributes $q = "INSERT INTO #__{vm}_product_attribute_sku SELECT '".$d["product_id"]."', attribute_name, attribute_list FROM #__{vm}_product_attribute_sku WHERE product_id='" . (int)$d["old_product_id"] . "' "; $db->query( $q ); if( !empty( $d["child_items"] )) { $database->query( "SHOW COLUMNS FROM #__{vm}_product" ); $rows = $database->record; while(list(,$Field) = each( $rows) ) { $product_fields[$Field->Field] = $Field->Field; } // Change the Field Names // leave empty for auto_increment $product_fields["product_id"] = "''"; // Update Product Parent ID to the new one $product_fields["product_parent_id"] = "'".$d["product_id"]."'"; // Rename the SKU $product_fields["product_sku"] = "CONCAT(product_sku,'_".$d["product_id"]."')"; $rows = Array(); $database->query( "SHOW COLUMNS FROM #__{vm}_product_price" ); $rows = $database->record; while(list(,$Field) = each( $rows) ) { $price_fields[$Field->Field] = $Field->Field; } foreach( $d["child_items"] as $child_id ) { $q = "INSERT INTO #__{vm}_product "; $q .= "SELECT ".implode(",", $product_fields )." FROM #__{vm}_product WHERE product_id='$child_id'"; $db->query( $q ); $new_product_id = $db->last_insert_id(); $q = "INSERT INTO #__{vm}_product_attribute SELECT NULL, '$new_product_id', attribute_name, attribute_value FROM #__{vm}_product_attribute WHERE product_id='$child_id'"; $db->query( $q ); $price_fields["product_price_id"] = "''"; $price_fields["product_id"] = "'$new_product_id'"; $q = "INSERT INTO #__{vm}_product_price "; $q .= "SELECT ".implode(",", $price_fields )." FROM #__{vm}_product_price WHERE product_id='$child_id'"; $db->query( $q ); } } // End Cloning } if( $d['clone_product'] == 'Y') { $vmLogger->info( $VM_LANG->_('VM_PRODUCT_CLONED',false) ); } else { $vmLogger->info( $VM_LANG->_('VM_PRODUCT_ADDED',false) ); } return true; }