/**
  * 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'];
     }
 }