/** * Proccess a file and store the files elements in a DobaProduts object * @static method * @return * @param $file string : full path to file on server * @param $type string : "tab" or "csv" */ function processFile($file, $type) { $delm = ''; $DobaProds = new DobaProducts(); $headers; $fp = fopen($file, 'r'); $delm = $type == 'csv' ? ',' : "\t"; if (!feof($fp)) { $data = fgets($fp); $tHeaders = explode($delm, $data); foreach ($tHeaders as $item) { $headers[] = DobaProductFile::pruneQuotes(strtoupper(trim($item))); } } while (!feof($fp)) { $values = DobaProductFile::parseLine(fgets($fp), $delm); /* Fields to fill in on the osCommerce add product page * Products Status: In Stock, Out of Stock . Passing the current available in the object, needs to be processed before being added to database * Date Available / * Products Manufacturer / * Products Name (English, Spanish, Ducth) / * Tax Class: none, taxable goods . Default to Taxable, will need setting in the osCommerce config files * Products Price (Net) . Will use the MSRP for now. * Products Description (English, Spanish, Ducth) / * Products Quantity . Will just use the amount in the file till a better solution is found * Products Model / = Product SKU * Products Image . Will need more processing while the object in being added to the database * Products URL (English, Spanish, Ducth) / Leaveing blank * Products Weight / */ $tempDPD = new DobaProductData(); $temp = array_keys($headers, 'PRODUCT_ID'); $tempDPD->product_id($values[$temp[0]]); $temp = array_keys($headers, 'ITEM_ID'); $tempDPD->item_id($values[$temp[0]]); $temp = array_keys($headers, 'TITLE'); $tempDPD->title(DobaProductFile::pruneQuotes($values[$temp[0]])); $temp = array_keys($headers, 'DESCRIPTION'); $descr = DobaProductFile::pruneQuotes($values[$temp[0]]); $temp = array_keys($headers, 'DETAILS'); $details = DobaProductFile::pruneQuotes($values[$temp[0]]); if (!empty($descr) && !empty($details)) { $descr .= '<br><br>' . $details; } else { $descr .= $details; } $tempDPD->description($descr); $temp = array_keys($headers, 'QTY_AVAIL'); $supplied_qty = $values[$temp[0]]; $temp = array_keys($headers, 'IMAGE_URL'); $tempDPD->image_url(DobaProductFile::pruneQuotes($values[$temp[0]])); $temp = array_keys($headers, 'WEIGHT'); $tempDPD->ship_weight($values[$temp[0]]); $temp = array_keys($headers, 'SKU'); $tempDPD->product_sku(DobaProductFile::pruneQuotes($values[$temp[0]])); $temp = array_keys($headers, 'PRICE'); $wholesale = $values[$temp[0]]; $temp = array_keys($headers, 'MAP'); $map = $values[$temp[0]]; $temp = array_keys($headers, 'MSRP'); $msrp = $values[$temp[0]]; /* * This set of if statements checks if the specified pricing manipulation fields exist * in the file. If they do, the column header name and the value of the field are sent * as parameters to DobaInteraction::setPrice(). The supplied wholesale cost, the map price * and the msrp are also sent as parameters and used in setPrice() to ensure the correct * price is calculated. */ if (in_array('OSC_WHOLESALE_MARKUP_PERCENT', $headers)) { $temp = array_keys($headers, 'OSC_WHOLESALE_MARKUP_PERCENT'); if (isset($values[$temp[0]]) && !empty($values[$temp[0]])) { $tempDPD->price(DobaInteraction::setPrice(PRICE_FMT_WHOLESALE_PERCENT, $values[$temp[0]], $wholesale, $map, $msrp)); } else { $tempDPD->price(DobaInteraction::setPrice(PRICE_FMT_NONE, $wholesale, $wholesale, $map, $msrp)); } } elseif (in_array('OSC_WHOLESALE_MARKUP_DOLLAR', $headers)) { $temp = array_keys($headers, 'OSC_WHOLESALE_MARKUP_DOLLAR'); if (isset($values[$temp[0]]) && !empty($values[$temp[0]])) { $tempDPD->price(DobaInteraction::setPrice(PRICE_FMT_WHOLESALE_DOLLAR, $values[$temp[0]], $wholesale, $map, $msrp)); } else { $tempDPD->price(DobaInteraction::setPrice(PRICE_FMT_NONE, $wholesale, $wholesale, $map, $msrp)); } } elseif (in_array('OSC_MARKUP_EXACT', $headers)) { $temp = array_keys($headers, 'OSC_MARKUP_EXACT'); if (isset($values[$temp[0]]) && !empty($values[$temp[0]])) { $tempDPD->price(DobaInteraction::setPrice(PRICE_FMT_EXACT, $values[$temp[0]], $wholesale, $map, $msrp)); } else { $tempDPD->price(DobaInteraction::setPrice(PRICE_FMT_NONE, $wholesale, $wholesale, $map, $msrp)); } } elseif (in_array('OSC_MSRP_MARKUP_PERCENT', $headers)) { $temp = array_keys($headers, 'OSC_MSRP_MARKUP_PERCENT'); if (isset($values[$temp[0]]) && !empty($values[$temp[0]])) { $tempDPD->price(DobaInteraction::setPrice(PRICE_FMT_MSRP_PERCENT, $values[$temp[0]], $wholesale, $map, $msrp)); } else { $tempDPD->price(DobaInteraction::setPrice(PRICE_FMT_NONE, $wholesale, $wholesale, $map, $msrp)); } } elseif (in_array('OSC_MSRP_MARKUP_DOLLAR', $headers)) { $temp = array_keys($headers, 'OSC_MSRP_MARKUP_DOLLAR'); if (isset($values[$temp[0]]) && !empty($values[$temp[0]])) { $tempDPD->price(DobaInteraction::setPrice(PRICE_FMT_MSRP_DOLLAR, $values[$temp[0]], $wholesale, $map, $msrp)); } else { $tempDPD->price(DobaInteraction::setPrice(PRICE_FMT_NONE, $wholesale, $wholesale, $map, $msrp)); } } else { $tempDPD->price(DobaInteraction::setPrice(PRICE_FMT_NONE, $wholesale, $wholesale, $map, $msrp)); } /* * This set of if statements checks if the specified quantity manipulation fields exist * in the file. If they do, the column header name and the value of the field are sent * as parameters to DobaInteraction::setQuantity(). The supplied quantity is also * sent as a parameter and used in setQuantity() to ensure the correct quantity is calculated. */ if (in_array('OSC_QUANTITY_AUTOADJUST', $headers)) { $temp = array_keys($headers, 'OSC_QUANTITY_AUTOADJUST'); if (isset($values[$temp[0]]) && !empty($values[$temp[0]])) { $tempDPD->quantity(DobaInteraction::setQuantity(QTY_FMT_AUTOADJUST, $values[$temp[0]], $supplied_qty)); } else { $tempDPD->quantity(DobaInteraction::setQuantity(QTY_FMT_NONE, $supplied_qty, $supplied_qty)); } } elseif (in_array('OSC_QUANTITY_EXACT', $headers)) { $temp = array_keys($headers, 'OSC_QUANTITY_EXACT'); if (isset($values[$temp[0]]) && !empty($values[$temp[0]])) { $tempDPD->quantity(DobaInteraction::setQuantity(QTY_FMT_EXACT, $values[$temp[0]], $supplied_qty)); } else { $tempDPD->quantity(DobaInteraction::setQuantity(QTY_FMT_NONE, $supplied_qty, $supplied_qty)); } } else { $tempDPD->quantity(DobaInteraction::setQuantity(QTY_FMT_NONE, $supplied_qty, $supplied_qty)); } /* * if the OSC_CATEGORY field exists, the category name is loaded into the DobaProductsData * object so that it can be processed. */ if (in_array('OSC_CATEGORY', $headers)) { $tempCategory = array_keys($headers, 'OSC_CATEGORY'); if (isset($values[$tempCategory[0]]) && !empty($values[$tempCategory[0]])) { $tempDPD->category_name(DobaProductFile::pruneQuotes($values[$tempCategory[0]])); } } $temp = array_keys($headers, 'BRAND'); $tempDPD->brand(DobaProductFile::pruneQuotes($values[$temp[0]])); /* * if the OSC_BRAND field exists, the brand name is loaded into the DobaProductsData * object so that it can be processed. */ if (in_array('OSC_BRAND', $headers)) { $tempBrand = array_keys($headers, 'OSC_BRAND'); if (isset($values[$tempBrand[0]]) && !empty($values[$tempBrand[0]])) { $tempDPD->brand(DobaProductFile::pruneQuotes($values[$tempBrand[0]])); } } /* * if the OSC_PRODUCT_LINK field exists, the brand name is loaded into the DobaProductsData * object so that it can be processed. */ if (in_array('OSC_PRODUCT_LINK', $headers)) { $temp = array_keys($headers, 'OSC_PRODUCT_LINK'); if (isset($values[$temp[0]]) && !empty($values[$temp[0]])) { $tempDPD->product_url(DobaProductFile::pruneQuotes($values[$temp[0]])); } } $DobaProds->addProduct($tempDPD); } fclose($fp); return $DobaProds; }
Released under the GNU General Public License */ require 'includes/application_top.php'; require_once 'doba/DobaProductFile.php'; require_once 'doba/DobaProducts.php'; require_once 'doba/DobaLog.php'; include_once 'doba/DobaApi.php'; $msg = ''; if (isset($_POST['submit'])) { require_once 'doba/DobaInteraction.php'; $filename = isset($_FILES['product_file']['name']) ? $_FILES['product_file']['name'] : ''; $tmpfile = isset($_FILES['product_file']['tmp_name']) ? $_FILES['product_file']['tmp_name'] : ''; $file_type = isset($_POST['file_type']) ? $_POST['file_type'] : ''; $objDobaProducts = DobaProductFile::processFile($tmpfile, $file_type); if (is_a($objDobaProducts, 'DobaProducts') && DobaInteraction::loadDobaProductsIntoDB($objDobaProducts)) { DobaLog::logProductUpload($objDobaProducts, $filename); $msg = $filename . UPLOAD_SUCCESS_MSG; } else { $MSG = UPLOAD_FAILURE_MSG; } } else { if (isset($_GET['api'])) { if ($_GET['api'] == 'success') { $msg = 'Your products were successfully loaded from Doba'; } else { $msg = 'There were problems loading your products from Doba. Please try again later.'; } } } $upload_history = DobaLog::getLogHistorySummary('product');
- the product doesn\'t exist on Doba<br> - the product does not have enough stock to complete the order<br> Please log into Doba to verify.'; } } else { // this was an unrecognized action } } } if (!$downloaded) { $msg = FILE_DOWNLOAD_ERROR; } $order_cnt_new = DobaInteraction::getOrderCount('new'); $order_cnt_all = DobaInteraction::getOrderCount('all'); $order_cnt_submitted = DobaInteraction::getOrderCount('submitted'); $order_cnt_unsubmitted = DobaInteraction::getOrderCount('unsubmitted'); $download_history = DobaLog::getLogHistorySummary('order'); ?> <!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN"> <html <?php echo HTML_PARAMS; ?> > <head> <meta http-equiv="Content-Type" content="text/html; charset=<?php echo CHARSET; ?> "> <title><?php echo TITLE; ?>
/** * Load all of the supplied products into the database. This will update any * existing entries and add any new entries. It is up to the user to manage * the discontinuance of products. * @static : this is a static method * @return bool : True if the products were succssfully loaded. * @param $products DobaProducts */ function loadDobaProductsIntoDB($products) { if (is_a($products, 'DobaProducts')) { $sql_prod = 'replace into ' . TABLE_PRODUCTS . ' (products_id, products_quantity, products_model, products_image, products_price, products_last_modified, products_weight, products_status, products_tax_class_id, manufacturers_id) values '; $sql_cat = 'replace into ' . TABLE_PRODUCTS_TO_CATEGORIES . ' (products_id, categories_id) values'; $sql_descr = 'replace into ' . TABLE_PRODUCTS_DESCRIPTION . ' (products_id, language_id, products_name, products_description) values '; $can_insert = false; foreach ($products->products as $prod) { if ($can_insert) { $sql_prod .= ', '; $sql_cat .= ', '; $sql_descr .= ', '; } $can_insert = true; $products_id = $prod->item_id(); $products_quantity = intval($prod->quantity()); $products_model = $prod->product_sku(); $img_url = $prod->image_url(); if (empty($img_url)) { $img_url = $prod->thumb_url(); } $products_image = DobaInteraction::processImage($img_url, $products_id); $products_price = floatval($prod->price()); $products_last_modified = 'now()'; $products_weight = $prod->ship_weight(); $products_status = $prod->quantity() > 0 ? 1 : 0; $products_tax_class_id = 1; $manufacturers_id = DobaInteraction::setBrandName($prod->brand()); $categories_id = DobaInteraction::setCategoryName($prod->category_name()); $language_id = 1; $products_name = $prod->title(); $products_description = $prod->description(); $sql_prod .= '(' . $products_id . ', ' . $products_quantity . ', "' . addslashes(tep_db_prepare_input($products_model)) . '", "' . addslashes(tep_db_prepare_input($products_image)) . '", ' . $products_price . ', ' . $products_last_modified . ', ' . $products_weight . ', ' . $products_status . ', ' . $products_tax_class_id . ', ' . $manufacturers_id . ')'; $sql_cat .= '(' . $products_id . ', ' . $categories_id . ')'; $sql_descr .= '(' . $products_id . ', ' . $language_id . ', "' . addslashes(tep_db_prepare_input($products_name)) . '", "' . addslashes(tep_db_prepare_input($products_description)) . '")'; } if ($can_insert) { tep_db_query($sql_prod); tep_db_query($sql_cat); tep_db_query($sql_descr); $sql = 'update ' . TABLE_PRODUCTS . ' set products_date_added=now(), products_date_available=now() where products_date_added is NULL'; tep_db_query($sql); return true; } } return false; }
function parseProductDetails($data) { $productList = new DobaProducts(); $p = new XMLParser($data); $ProdDetails = $p->getOutput(); if ($ProdDetails['dce']['response']['outcome'] == 'success') { if (array_key_exists('product', $ProdDetails['dce']['response']['products'])) { //Only 1 product; $prod = $ProdDetails['dce']['response']['products']['product']; $tempDPDArray = DobaProductAPI::findItems($prod); foreach ($tempDPDArray as $currProd) { $currProd->product_id($prod['product_id']); $currProd->title($prod['title']); $currProd->description($prod['description']); DobaProductAPI::findImage($prod, $currProd); $currProd->product_sku($prod['product_sku']); $currProd->ship_weight($prod['ship_weight']); $currProd->ship_cost($prod['ship_cost']); $currProd->upc($prod['upc']); $currProd->brand($prod['brand']); if (isset($prod['OSC_BRAND'])) { $currProd->brand($prod['OSC_BRAND']); } $currProd->category_name(''); if (isset($prod['OSC_CATEGORY'])) { $currProd->category_name($prod['OSC_CATEGORY']); } //Set Price if (isset($prod['OSC_WHOLESALE_MARKUP_PERCENT'])) { $currProd->price(DobaInteraction::setPrice('osc_wholesale_markup_percent', $prod['OSC_WHOLESALE_MARKUP_PERCENT'], $currProd->wholesale_price(), $currProd->map(), $currProd->msrp())); } elseif (isset($prod['OSC_WHOLESALE_MARKUP_DOLLAR'])) { $currProd->price(DobaInteraction::setPrice('osc_wholesale_markup_dollar', $prod['OSC_WHOLESALE_MARKUP_DOLLAR'], $currProd->wholesale_price(), $currProd->map(), $currProd->msrp())); } elseif (isset($prod['OSC_MARKUP_EXACT'])) { $currProd->price(DobaInteraction::setPrice('osc_markup_exact', $prod['OSC_MARKUP_EXACT'], $currProd->wholesale_price(), $currProd->map(), $currProd->msrp())); } elseif (isset($prod['OSC_MSRP_MARKUP_PERCENT'])) { $currProd->price(DobaInteraction::setPrice('osc_msrp_markup_percent', $prod['OSC_MSRP_MARKUP_PERCENT'], $currProd->wholesale_price(), $currProd->map(), $currProd->msrp())); } elseif (isset($prod['OSC_MSRP_MARKUP_DOLLAR'])) { $currProd->price(DobaInteraction::setPrice('osc_msrp_markup_dollar', $prod['OSC_MSRP_MARKUP_DOLLAR'], $currProd->wholesale_price(), $currProd->map(), $currProd->msrp())); } else { $currProd->price(DobaInteraction::setPrice('none', $currProd->wholesale_price(), $currProd->wholesale_price(), $currProd->map(), $currProd->msrp())); } //Set Quantity if (isset($prod['OSC_QUANTITY_AUTOADJUST'])) { $currProd->quantity(DobaInteraction::setQuantity('osc_quantity_autoadjust', $prod['OSC_QUANTITY_AUTOADJUST'], $currProd->quantity)); } elseif (isset($prod['OSC_QUANTITY_EXACT'])) { $currProd->quantity(DobaInteraction::setQuantity('osc_quantity_exact', $prod['OSC_QUANTITY_EXACT'], $currProd->quantity)); } else { $currProd->quantity(DobaInteraction::setQuantity('none', $currProd->quantity, $currProd->quantity)); } $productList->addProduct($currProd); } } else { foreach ($ProdDetails['dce']['response']['products'] as $prod) { $tempDPDArray = DobaProductAPI::findItems($prod); foreach ($tempDPDArray as $currProd) { $currProd->product_id($prod['product_id']); $currProd->title($prod['title']); $currProd->description($prod['description']); DobaProductAPI::findImage($prod, $currProd); $currProd->product_sku($prod['product_sku']); $currProd->ship_weight($prod['ship_weight']); $currProd->ship_cost($prod['ship_cost']); $currProd->upc($prod['upc']); $currProd->brand($prod['brand']); if (isset($prod['OSC_BRAND'])) { $currProd->brand($prod['OSC_BRAND']); } else { if (isset($prod['osc_brand'])) { $currProd->brand($prod['osc_brand']); } } $currProd->category_name(''); if (isset($prod['OSC_CATEGORY'])) { $currProd->category_name($prod['OSC_CATEGORY']); } else { if (isset($prod['osc_category'])) { $currProd->category_name($prod['osc_category']); } } //Set Price if (isset($prod['OSC_WHOLESALE_MARKUP_PERCENT'])) { $currProd->price(DobaInteraction::setPrice('osc_wholesale_markup_percent', $prod['OSC_WHOLESALE_MARKUP_PERCENT'], $currProd->wholesale_price(), $currProd->map(), $currProd->msrp())); } elseif (isset($prod['OSC_WHOLESALE_MARKUP_DOLLAR'])) { $currProd->price(DobaInteraction::setPrice('osc_wholesale_markup_dollar', $prod['OSC_WHOLESALE_MARKUP_DOLLAR'], $currProd->wholesale_price(), $currProd->map(), $currProd->msrp())); } elseif (isset($prod['OSC_MARKUP_EXACT'])) { $currProd->price(DobaInteraction::setPrice('osc_markup_exact', $prod['OSC_MARKUP_EXACT'], $currProd->wholesale_price(), $currProd->map(), $currProd->msrp())); } elseif (isset($prod['OSC_MSRP_MARKUP_PERCENT'])) { $currProd->price(DobaInteraction::setPrice('osc_msrp_markup_percent', $prod['OSC_MSRP_MARKUP_PERCENT'], $currProd->wholesale_price(), $currProd->map(), $currProd->msrp())); } elseif (isset($prod['OSC_MSRP_MARKUP_DOLLAR'])) { $currProd->price(DobaInteraction::setPrice('osc_msrp_markup_dollar', $prod['OSC_MSRP_MARKUP_DOLLAR'], $currProd->wholesale_price(), $currProd->map(), $currProd->msrp())); } else { $currProd->price(DobaInteraction::setPrice('none', $currProd->wholesale_price(), $currProd->wholesale_price(), $currProd->map(), $currProd->msrp())); } //Set Quantity if (isset($prod['OSC_QUANTITY_AUTOADJUST'])) { $currProd->quantity(DobaInteraction::setQuantity('osc_quantity_autoadjust', $prod['OSC_QUANTITY_AUTOADJUST'], $currProd->quantity)); } elseif (isset($prod['OSC_QUANTITY_EXACT'])) { $currProd->quantity(DobaInteraction::setQuantity('osc_quantity_exact', $prod['OSC_QUANTITY_EXACT'], $currProd->quantity)); } else { $currProd->quantity(DobaInteraction::setQuantity('none', $currProd->quantity, $currProd->quantity)); } $productList->addProduct($currProd); } } } return $productList; } else { return $ProdDetails['dce']['response']['outcome']; } }