EasyPopulate and Image Mods
#1
Posted 19 April 2004 - 01:34 PM
I have been using easypopulate successfully on my site for a good period of time. Recently I added the small, medium, large image contribution.
Now I want to add those images to the new rows using easypopulate. I have been through the EP manual and through the forums and I am stuck. I uncommented the lines and uploaded the file to my site. Now I just get a period of wait, then a blank white screen. Any thoughts there?
Any help or pointing in the right direction is greatly appreciated.
Thanks
Ashley
#2
Posted 19 April 2004 - 04:40 PM
Parse error: parse error in /www.xxx.co.uk/xxx/easypopulate.php on line 1684
Can any one help us please.
#3
Posted 19 April 2004 - 05:16 PM
Did u get any Parse errors????
Jazz
#4
Posted 19 April 2004 - 05:48 PM
Contribution Support--EP and Image Mod
The blank screen went away. But when I tried to download the EP file, the new image rows were not present. Do I have to add them in myself?
A
#5
Posted 19 April 2004 - 06:34 PM
This is for EP 1.71
#6
Posted 19 April 2004 - 09:45 PM
A
#7
Posted 20 April 2004 - 01:29 AM
[code]<?php
// Current EP Version
$curver = '2.72-MS2';
/*
$Id: easypopulate.php,v 2.72 2003/12/28 VJ Exp $
*/
//
//*******************************
//*******************************
// C O N F I G U R A T I O N
// V A R I A B L E S
//*******************************
//*******************************
// **** Temp directory ****
// if you changed your directory structure from stock and do not have /catalog/temp/, then you'll need to change this accordingly.
//
$tempdir = "/catalog/temp/";
$tempdir2 = "/catalog/temp/";
//**** File Splitting Configuration ****
// we attempt to set the timeout limit longer for this script to avoid having to split the files
// NOTE: If your server is running in safe mode, this setting cannot override the timeout set in php.ini
// uncomment this if you are not on a safe mode server and you are getting timeouts
// set_time_limit(330);
// if you are splitting files, this will set the maximum number of records to put in each file.
// if you set your php.ini to a long time, you can make this number bigger
global $maxrecs;
$maxrecs = 300; // default, seems to work for most people. Reduce if you hit timeouts
//$maxrecs = 4; // for testing
//**** Image Defaulting ****
global $default_images, $default_image_manufacturer, $default_image_product, $default_image_category;
// set them to your own default "We don't have any picture" gif
//$default_image_manufacturer = 'no_image_manufacturer.gif';
//$default_image_product = 'no_image_product.gif';
//$default_image_category = 'no_image_category.gif';
// or let them get set to nothing
$default_image_manufacturer = '';
$default_image_product = '';
$default_image_category = '';
//**** Status Field Setting ****
// Set the v_status field to "Inactive" if you want the status=0 in the system
// Set the v_status field to "Delete" if you want to remove the item from the system <- THIS IS NOT WORKING YET!
// If zero_qty_inactive is true, then items with zero qty will automatically be inactive in the store.
global $active, $inactive, $zero_qty_inactive, $deleteit;
$active = 'Active';
$inactive = 'Inactive';
//$deleteit = 'Delete'; // not functional yet
$zero_qty_inactive = false;
//**** Size of products_model in products table ****
// set this to the size of your model number field in the db. We check to make sure all models are no longer than this value.
// this prevents the database from getting fubared. Just making this number bigger won't help your database! They must match!
global $modelsize;
$modelsize = 15;
//**** Price includes tax? ****
// Set the v_price_with_tax to
// 0 if you want the price without the tax included
// 1 if you want the price to be defined for import & export including tax.
global $price_with_tax;
$price_with_tax =false;
// **** Quote -> Escape character conversion ****
// If you have extensive html in your descriptions and it's getting mangled on upload, turn this off
// set to 1 = replace quotes with escape characters
// set to 0 = no quote replacement
global $replace_quotes;
$replace_quotes = true;
// **** Field Separator ****
// change this if you can't use the default of tabs
// Tab is the default, comma and semicolon are commonly supported by various progs
// Remember, if your descriptions contain this character, you will confuse EP!
global $separator;
$separator = "\t"; // tab is default
//$separator = ","; // comma
//$separator = ";"; // semi-colon
//$separator = "~"; // tilde
//$separator = "-"; // dash
//$separator = "*"; // splat
// **** Max Category Levels ****
// change this if you need more or fewer categories
global $max_categories;
$max_categories = 7; // 7 is default
// VJ product attributes begin
// **** Product Attributes ****
// change this to false, if do not want to download product attributes
global $products_with_attributes;
$products_with_attributes = true;
// change this if you want to download selected product options
// this might be handy, if you have a lot of product options, and your output file exceeds 256 columns (which is the max. limit MS Excel is able to handle)
global $attribute_options_select;
//$attribute_options_select = array('Size', 'Model'); // uncomment and fill with product options name you wish to download // comment this line, if you wish to download all product options
// VJ product attributes end
// ****************************************
// Froogle configuration variables
// -- YOU MUST CONFIGURE THIS! IT WON'T WORK OUT OF THE BOX!
// ****************************************
// **** Froogle product info page path ****
// We can't use the tep functions to create the link, because the links will point to the admin, since that's where we're at.
// So put the entire path to your product_info.php page here
global $froogle_product_info_path;
$froogle_product_info_path = "http://xxx.com/catalog/product_info.php";
// **** Froogle product image path ****
// Set this to the path to your images directory
global $froogle_image_path;
$froogle_image_path = "http://xxx.com/catalog/images/";
// **** Froogle - search engine friendly setting
// if your store has SEARCH ENGINE FRIENDLY URLS set, then turn this to true
// I did it this way because I'm having trouble with the code seeing the constants
// that are defined in other places.
global $froogle_SEF_urls;
$froogle_SEF_urls = true;
// ****************************************
// End Froogle configuration variables
// ****************************************
//*******************************
//*******************************
// E N D
// C O N F I G U R A T I O N
// V A R I A B L E S
//*******************************
//*******************************
//*******************************
//*******************************
// S T A R T
// INITIALIZATION
//*******************************
//*******************************
require('includes/application_top.php');
require('includes/database_tables.php');
//*******************************
// If you are running a pre-Nov1-2002 snapshot of OSC, then we need this include line to avoid
// errors like:
// undefined function tep_get_uploaded_file
if (!function_exists(tep_get_uploaded_file)){
include ('easypopulate_functions.php');
}
//*******************************
// VJ product attributes begin
global $attribute_options_array;
$attribute_options_array = array();
if ($products_with_attributes == true) {
if (is_array($attribute_options_select) && (count($attribute_options_select) > 0)) {
foreach ($attribute_options_select as $value) {
$attribute_options_query = "select distinct products_options_id from " . TABLE_PRODUCTS_OPTIONS . " where products_options_name = '" . $value . "'";
$attribute_options_values = tep_db_query($attribute_options_query);
if ($attribute_options = tep_db_fetch_array($attribute_options_values)){
$attribute_options_array[] = array('products_options_id' => $attribute_options['products_options_id']);
}
}
} else {
$attribute_options_query = "select distinct products_options_id from " . TABLE_PRODUCTS_OPTIONS . " order by products_options_id";
$attribute_options_values = tep_db_query($attribute_options_query);
while ($attribute_options = tep_db_fetch_array($attribute_options_values)){
$attribute_options_array[] = array('products_options_id' => $attribute_options['products_options_id']);
}
}
}
// VJ product attributes end
global $filelayout, $filelayout_count, $filelayout_sql, $langcode, $fileheaders;
// these are the fields that will be defaulted to the current values in the database if they are not found in the incoming file
global $default_these;
$default_these = array(
'v_products_image',
'v_categories_id',
'v_products_price',
'v_products_quantity',
'v_products_weight',
'v_dvd_star',
'v_dvd_director',
'v_dvd_release_date',
'v_dvd_type',
'v_dvd_features',
'v_dvd_studio',
'v_dvd_categories',
'v_dvd_movie_length',
'v_dvd_also_available',
'v_products_bimage',
'v_products_subimage1',
'v_products_bsubimage1',
'v_products_subimage2',
'v_products_bsubimage2',
'v_products_subimage3',
'v_products_bsubimage3',
'v_products_subimage4',
'v_products_bsubimage4',
'v_products_subimage5',
'v_products_bsubimage5',
'v_products_subimage6',
'v_products_bsubimage6',
'v_date_avail',
'v_instock',
'v_tax_class_title',
'v_manufacturers_name',
'v_manufacturers_id',
'v_products_dim_type',
'v_products_length',
'v_products_width',
'v_products_height'
);
// $new_fields_dvd = ", p.dvd_star, p.dvd_director, p.dvd_release_date, p.dvd_type, p.dvd_features, p.dvd_categories, p.dvd_studio, p.dvd_movie_length, p.dvd_also_available";
// $new_fields_mo_pics=", p.products_bimage, p.products_subimage1, p.products_subimage2, p.products_subimage3, p.products_subimage4, p.products_subimage5, p.products_subimage6";
//elari check default language_id from configuration table DEFAULT_LANGUAGE
$epdlanguage_query = tep_db_query("select languages_id, name from " . TABLE_LANGUAGES . " where code = '" . DEFAULT_LANGUAGE . "'");
if (tep_db_num_rows($epdlanguage_query)) {
$epdlanguage = tep_db_fetch_array($epdlanguage_query);
$epdlanguage_id = $epdlanguage['languages_id'];
$epdlanguage_name = $epdlanguage['name'];
} else {
Echo 'Strange but there is no default language to work... That may not happen, just in case... ';
}
$langcode = ep_get_languages();
if ( $dltype != '' ){
// if dltype is set, then create the filelayout. Otherwise it gets read from the uploaded file
ep_create_filelayout($dltype); // get the right filelayout for this download
}
//*******************************
//*******************************
// E N D
// INITIALIZATION
//*******************************
//*******************************
if ( $download == 'stream' or $download == 'tempfile' ){
//*******************************
//*******************************
// DOWNLOAD FILE
//*******************************
//*******************************
$filestring = ""; // this holds the csv file we want to download
if ( $dltype=='froogle' ){
// set the things froogle wants at the top of the file
$filestring .= "# html_escaped=YES\n";
$filestring .= "# updates_only=NO\n";
$filestring .= "# product_type=OTHER\n";
$filestring .= "# quoted=YES\n";
}
$result = tep_db_query($filelayout_sql);
$row = tep_db_fetch_array($result);
// Here we need to allow for the mapping of internal field names to external field names
// default to all headers named like the internal ones
// the field mapping array only needs to cover those fields that need to have their name changed
if ( count($fileheaders) != 0 ){
$filelayout_header = $fileheaders; // if they gave us fileheaders for the dl, then use them
} else {
$filelayout_header = $filelayout; // if no mapping was spec'd use the internal field names for header names
}
//We prepare the table heading with layout values
foreach( $filelayout_header as $key => $value ){
$filestring .= $key . $separator;
}
// now lop off the trailing tab
$filestring = substr($filestring, 0, strlen($filestring)-1);
// set the type
if ( $dltype == 'froogle' ){
$endofrow = "\n";
} else {
// default to normal end of row
$endofrow = $separator . 'EOREOR' . "\n";
}
$filestring .= $endofrow;
$num_of_langs = count($langcode);
while ($row){
print " ";
// if the filelayout says we need a products_name, get it
// build the long full froogle image path
$row['v_products_fullpath_image'] = $froogle_image_path . $row['v_products_image'];
// Other froogle defaults go here for now
$row['v_froogle_instock'] = 'Y';
$row['v_froogle_shipping'] = '';
$row['v_froogle_upc'] = '';
$row['v_froogle_color'] = '';
$row['v_froogle_size'] = '';
$row['v_froogle_quantitylevel'] = '';
$row['v_froogle_manufacturer_id'] = '';
$row['v_froogle_exp_date'] = '';
$row['v_froogle_product_type'] = 'OTHER';
$row['v_froogle_delete'] = '';
$row['v_froogle_currency'] = 'USD';
$row['v_froogle_offer_id'] = $row['v_products_model'];
$row['v_froogle_product_id'] = $row['v_products_model'];
// names and descriptions require that we loop thru all languages that are turned on in the store
foreach ($langcode as $key => $lang){
$lid = $lang['id'];
// for each language, get the description and set the vals
$sql2 = "SELECT *
FROM ".TABLE_PRODUCTS_DESCRIPTION."
WHERE
products_id = " . $row['v_products_id'] . " AND
language_id = '" . $lid . "'
";
$result2 = tep_db_query($sql2);
$row2 = tep_db_fetch_array($result2);
// I'm only doing this for the first language, since right now froogle is US only.. Fix later!
// adding url for froogle, but it should be available no matter what
if ($froogle_SEF_urls){
// if only one language
if ($num_of_langs == 1){
$row['v_froogle_products_url_' . $lid] = $froogle_product_info_path . '/products_id/' . $row['v_products_id'];
} else {
$row['v_froogle_products_url_' . $lid] = $froogle_product_info_path . '/products_id/' . $row['v_products_id'] . '/language/' . $lid;
}
} else {
if ($num_of_langs == 1){
$row['v_froogle_products_url_' . $lid] = $froogle_product_info_path . '?products_id=' . $row['v_products_id'];
} else {
$row['v_froogle_products_url_' . $lid] = $froogle_product_info_path . '?products_id=' . $row['v_products_id'] . '&language=' . $lid;
}
}
$row['v_products_name_' . $lid] = $row2['products_name'];
$row['v_products_description_' . $lid] = $row2['products_description'];
$row['v_products_url_' . $lid] = $row2['products_url'];
// froogle advanced format needs the quotes around the name and desc
$row['v_froogle_products_name_' . $lid] = '"' . strip_tags(str_replace('"','""',$row2['products_name'])) . '"';
$row['v_froogle_products_description_' . $lid] = '"' . strip_tags(str_replace('"','""',$row2['products_description'])) . '"';
// support for Linda's Header Controller 2.0 here
if(isset($filelayout['v_products_head_title_tag_' . $lid])){
$row['v_products_head_title_tag_' . $lid] = $row2['products_head_title_tag'];
$row['v_products_head_desc_tag_' . $lid] = $row2['products_head_desc_tag'];
$row['v_products_head_keywords_tag_' . $lid] = $row2['products_head_keywords_tag'];
}
// end support for Header Controller 2.0
}
// for the categories, we need to keep looping until we find the root category
// start with v_categories_id
// Get the category description
// set the appropriate variable name
// if parent_id is not null, then follow it up.
// we'll populate an aray first, then decide where it goes in the
$thecategory_id = $row['v_categories_id'];
$fullcategory = ''; // this will have the entire category stack for froogle
for( $categorylevel=1; $categorylevel<$max_categories+1; $categorylevel++){
if ($thecategory_id){
$sql2 = "SELECT categories_name
FROM ".TABLE_CATEGORIES_DESCRIPTION."
WHERE
categories_id = " . $thecategory_id . " AND
language_id = " . $epdlanguage_id;
$result2 = tep_db_query($sql2);
$row2 = tep_db_fetch_array($result2);
// only set it if we found something
$temprow['v_categories_name_' . $categorylevel] = $row2['categories_name'];
// now get the parent ID if there was one
$sql3 = "SELECT parent_id
FROM ".TABLE_CATEGORIES."
WHERE
categories_id = " . $thecategory_id;
$result3 = tep_db_query($sql3);
$row3 = tep_db_fetch_array($result3);
$theparent_id = $row3['parent_id'];
if ($theparent_id != ''){
// there was a parent ID, lets set thecategoryid to get the next level
$thecategory_id = $theparent_id;
} else {
// we have found the top level category for this item,
$thecategory_id = false;
}
//$fullcategory .= " > " . $row2['categories_name'];
$fullcategory = $row2['categories_name'] . " > " . $fullcategory;
} else {
$temprow['v_categories_name_' . $categorylevel] = '';
}
}
// now trim off the last ">" from the category stack
$row['v_category_fullpath'] = substr($fullcategory,0,strlen($fullcategory)-3);
// temprow has the old style low to high level categories.
$newlevel = 1;
// let's turn them into high to low level categories
for( $categorylevel=6; $categorylevel>0; $categorylevel--){
if ($temprow['v_categories_name_' . $categorylevel] != ''){
$row['v_categories_name_' . $newlevel++] = $temprow['v_categories_name_' . $categorylevel];
}
}
// if the filelayout says we need a manufacturers name, get it
if (isset($filelayout['v_manufacturers_name'])){
if ($row['v_manufacturers_id'] != ''){
$sql2 = "SELECT manufacturers_name
FROM ".TABLE_MANUFACTURERS."
WHERE
manufacturers_id = " . $row['v_manufacturers_id']
;
$result2 = tep_db_query($sql2);
$row2 = tep_db_fetch_array($result2);
$row['v_manufacturers_name'] = $row2['manufacturers_name'];
}
}
// If you have other modules that need to be available, put them here
// VJ product attribs begin
if (isset($filelayout['v_attribute_options_id_1'])){
$languages = tep_get_languages();
$attribute_options_count = 1;
foreach ($attribute_options_array as $attribute_options) {
$row['v_attribute_options_id_' . $attribute_options_count] = $attribute_options['products_options_id'];
for ($i=0, $n=sizeof($languages); $i<$n; $i++) {
$lid = $languages[$i]['id'];
$attribute_options_languages_query = "select products_options_name from " . TABLE_PRODUCTS_OPTIONS . " where products_options_id = '" . (int)$attribute_options['products_options_id'] . "' and language_id = '" . (int)$lid . "'";
$attribute_options_languages_values = tep_db_query($attribute_options_languages_query);
$attribute_options_languages = tep_db_fetch_array($attribute_options_languages_values);
$row['v_attribute_options_name_' . $attribute_options_count . '_' . $lid] = $attribute_options_languages['products_options_name'];
}
$attribute_values_query = "select products_options_values_id from " . TABLE_PRODUCTS_OPTIONS_VALUES_TO_PRODUCTS_OPTIONS . " where products_options_id = '" . (int)$attribute_options['products_options_id'] . "' order by products_options_values_id";
$attribute_values_values = tep_db_query($attribute_values_query);
$attribute_values_count = 1;
while ($attribute_values = tep_db_fetch_array($attribute_values_values)) {
$row['v_attribute_values_id_' . $attribute_options_count . '_' . $attribute_values_count] = $attribute_values['products_options_values_id'];
$attribute_values_price_query = "select options_values_price, price_prefix from " . TABLE_PRODUCTS_ATTRIBUTES . " where products_id = '" . (int)$row['v_products_id'] . "' and options_id = '" . (int)$attribute_options['products_options_id'] . "' and options_values_id = '" . (int)$attribute_values['products_options_values_id'] . "'";
$attribute_values_price_values = tep_db_query($attribute_values_price_query);
$attribute_values_price = tep_db_fetch_array($attribute_values_price_values);
$row['v_attribute_values_price_' . $attribute_options_count . '_' . $attribute_values_count] = $attribute_values_price['price_prefix'] . $attribute_values_price['options_values_price'];
for ($i=0, $n=sizeof($languages); $i<$n; $i++) {
$lid = $languages[$i]['id'];
$attribute_values_languages_query = "select products_options_values_name from " . TABLE_PRODUCTS_OPTIONS_VALUES . " where products_options_values_id = '" . (int)$attribute_values['products_options_values_id'] . "' and language_id = '" . (int)$lid . "'";
$attribute_values_languages_values = tep_db_query($attribute_values_languages_query);
$attribute_values_languages = tep_db_fetch_array($attribute_values_languages_values);
$row['v_attribute_values_name_' . $attribute_options_count . '_' . $attribute_values_count . '_' . $lid] = $attribute_values_languages['products_options_values_name'];
}
$attribute_values_count++;
}
$attribute_options_count++;
}
}
// VJ product attribs end
// this is for the separate price per customer module
if (isset($filelayout['v_customer_price_1'])){
$sql2 = "SELECT
customers_group_price,
customers_group_id
FROM
".TABLE_PRODUCTS_GROUPS."
WHERE
products_id = " . $row['v_products_id'] . "
ORDER BY
customers_group_id"
;
$result2 = tep_db_query($sql2);
$ll = 1;
$row2 = tep_db_fetch_array($result2);
while( $row2 ){
$row['v_customer_group_id_' . $ll] = $row2['customers_group_id'];
$row['v_customer_price_' . $ll] = $row2['customers_group_price'];
$row2 = tep_db_fetch_array($result2);
$ll++;
}
}
if ($dltype == 'froogle'){
// For froogle, we check the specials prices for any applicable specials, and use that price
// by grabbing the specials id descending, we always get the most recently added special price
// I'm checking status because I think you can turn off specials
$sql2 = "SELECT
specials_new_products_price
FROM
".TABLE_SPECIALS."
WHERE
products_id = " . $row['v_products_id'] . " and
status = 1 and
expires_date < CURRENT_TIMESTAMP
ORDER BY
specials_id DESC"
;
$result2 = tep_db_query($sql2);
$ll = 1;
$row2 = tep_db_fetch_array($result2);
if( $row2 ){
// reset the products price to our special price if there is one for this product
$row['v_products_price'] = $row2['specials_new_products_price'];
}
}
//elari -
//We check the value of tax class and title instead of the id
//Then we add the tax to price if $price_with_tax is set to 1
$row_tax_multiplier = tep_get_tax_class_rate($row['v_tax_class_id']);
$row['v_tax_class_title'] = tep_get_tax_class_title($row['v_tax_class_id']);
$row['v_products_price'] = $row['v_products_price'] +
($price_with_tax * round($row['v_products_price'] * $row_tax_multiplier / 100,2));
// Now set the status to a word the user specd in the config vars
if ( $row['v_status'] == '1' ){
$row['v_status'] = $active;
} else {
$row['v_status'] = $inactive;
}
// remove any bad things in the texts that could confuse EasyPopulate
$therow = '';
foreach( $filelayout as $key => $value ){
//echo "The field was $key<br>";
$thetext = $row[$key];
// kill the carriage returns and tabs in the descriptions, they're killing me!
$thetext = str_replace("\r",' ',$thetext);
$thetext = str_replace("\n",' ',$thetext);
$thetext = str_replace("\t",' ',$thetext);
// and put the text into the output separated by tabs
$therow .= $thetext . $separator;
}
// lop off the trailing tab, then append the end of row indicator
$therow = substr($therow,0,strlen($therow)-1) . $endofrow;
$filestring .= $therow;
// grab the next row from the db
$row = tep_db_fetch_array($result);
}
#$EXPORT_TIME=time();
$EXPORT_TIME = strftime('%Y%b%d-%H%I');
if ($dltype=="froogle"){
$EXPORT_TIME = "FroogleEP" . $EXPORT_TIME;
} else {
$EXPORT_TIME = "EP" . $EXPORT_TIME;
}
// now either stream it to them or put it in the temp directory
if ($download == 'stream'){
//*******************************
// STREAM FILE
//*******************************
header("Content-type: application/vnd.ms-excel");
header("Content-disposition: attachment; filename=$EXPORT_TIME.txt");
header("Pragma: no-cache");
header("Expires: 0");
echo $filestring;
die();
} else {
//*******************************
// PUT FILE IN TEMP DIR
//*******************************
$tmpfname = DIR_FS_DOCUMENT_ROOT . $tempdir . "$EXPORT_TIME.txt";
//unlink($tmpfname);
$fp = fopen( $tmpfname, "w+");
fwrite($fp, $filestring);
fclose($fp);
echo "You can get your file in the Tools/Files under " . $tempdir . "EP" . $EXPORT_TIME . ".txt";
die();
}
} // *** END *** download section
?>
<!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; ?></title>
<link rel="stylesheet" type="text/css" href="includes/stylesheet.css">
</head>
<body marginwidth="0" marginheight="0" topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0" bgcolor="#FFFFFF">
<?php require(DIR_WS_INCLUDES . 'header.php'); ?>
<table border="0" width="100%" cellspacing="2" cellpadding="2">
<tr>
<td width="<?php echo BOX_WIDTH; ?>" valign="top" height="27">
<table border="0" width="<?php echo BOX_WIDTH; ?>" cellspacing="1" cellpadding="1" class="columnLeft">
<?php require(DIR_WS_INCLUDES . 'column_left.php');?>
</table>
</td>
<td class="pageHeading" valign="top"><?php
echo "Easy Populate $curver - Default Language : " . $epdlanguage_name . '(' . $epdlanguage_id .')';
?>
<p class="smallText">
<?php
if ($localfile or (is_uploaded_file($usrfl) && $split==0)) {
//*******************************
//*******************************
// UPLOAD AND INSERT FILE
//*******************************
//*******************************
if ($usrfl){
// move the file to where we can work with it
$file = tep_get_uploaded_file('usrfl');
if (is_uploaded_file($file['tmp_name'])) {
tep_copy_uploaded_file($file, DIR_FS_DOCUMENT_ROOT . $tempdir);
}
echo "<p class=smallText>";
echo "File uploaded. <br>";
echo "Temporary filename: " . $usrfl . "<br>";
echo "User filename: " . $usrfl_name . "<br>";
echo "Size: " . $usrfl_size . "<br>";
// get the entire file into an array
$readed = file(DIR_FS_DOCUMENT_ROOT . $tempdir . $usrfl_name);
}
if ($localfile){
// move the file to where we can work with it
$file = tep_get_uploaded_file('usrfl'); $attribute_options_query = "select distinct products_options_id from " . TABLE_PRODUCTS_OPTIONS . " order by products_options_id";
$attribute_options_values = tep_db_query($attribute_options_query);
$attribute_options_count = 1;
//while ($attribute_options = tep_db_fetch_array($attribute_options_values)){
if (is_uploaded_file($file['tmp_name'])) {
tep_copy_uploaded_file($file, DIR_FS_DOCUMENT_ROOT . $tempdir);
}
echo "<p class=smallText>";
echo "Filename: " . $localfile . "<br>";
// get the entire file into an array
$readed = file(DIR_FS_DOCUMENT_ROOT . $tempdir . $localfile);
}
// now we string the entire thing together in case there were carriage returns in the data
$newreaded = "";
foreach ($readed as $read){
$newreaded .= $read;
}
// now newreaded has the entire file together without the carriage returns.
// if for some reason excel put qoutes around our EOREOR, remove them then split into rows
$newreaded = str_replace('"EOREOR"', 'EOREOR', $newreaded);
$readed = explode( $separator . 'EOREOR',$newreaded);
// Now we'll populate the filelayout based on the header row.
$theheaders_array = explode( $separator, $readed[0] ); // explode the first row, it will be our filelayout
$lll = 0;
$filelayout = array();
foreach( $theheaders_array as $header ){
$cleanheader = str_replace( '"', '', $header);
// echo "Fileheader was $header<br><br><br>";
$filelayout[ $cleanheader ] = $lll++; //
}
unset($readed[0]); // we don't want to process the headers with the data
// now we've got the array broken into parts by the expicit end-of-row marker.
array_walk($readed, 'walk');
}
if (is_uploaded_file($usrfl) && $split==1) {
//*******************************
//*******************************
// UPLOAD AND SPLIT FILE
//*******************************
//*******************************
// move the file to where we can work with it
$file = tep_get_uploaded_file('usrfl');
//echo "Trying to move file...";
if (is_uploaded_file($file['tmp_name'])) {
tep_copy_uploaded_file($file, DIR_FS_DOCUMENT_ROOT . $tempdir);
}
$infp = fopen(DIR_FS_DOCUMENT_ROOT . $tempdir . $usrfl_name, "r");
//toprow has the field headers
$toprow = fgets($infp,32768);
$filecount = 1;
echo "Creating file EP_Split" . $filecount . ".txt ... ";
$tmpfname = DIR_FS_DOCUMENT_ROOT . $tempdir . "EP_Split" . $filecount . ".txt";
$fp = fopen( $tmpfname, "w+");
fwrite($fp, $toprow);
$linecount = 0;
$line = fgets($infp,32768);
while ($line){
// walking the entire file one row at a time
// but a line is not necessarily a complete row, we need to split on rows that have "EOREOR" at the end
$line = str_replace('"EOREOR"', 'EOREOR', $line);
fwrite($fp, $line);
if (strpos($line, 'EOREOR')){
// we found the end of a line of data, store it
$linecount++; // increment our line counter
if ($linecount >= $maxrecs){
echo "Added $linecount records and closing file... <Br>";
$linecount = 0; // reset our line counter
// close the existing file and open another;
fclose($fp);
// increment filecount
$filecount++;
echo "Creating file EP_Split" . $filecount . ".txt ... ";
$tmpfname = DIR_FS_DOCUMENT_ROOT . $tempdir . "EP_Split" . $filecount . ".txt";
//Open next file name
$fp = fopen( $tmpfname, "w+");
fwrite($fp, $toprow);
}
}
$line=fgets($infp,32768);
}
echo "Added $linecount records and closing file...<br><br> ";
fclose($fp);
fclose($infp);
echo "You can download your split files in the Tools/Files under /catalog/temp/";
}
?>
</p>
<table width="75%" border="2">
<tr>
<td width="75%">
<FORM ENCTYPE="multipart/form-data" ACTION="easypopulate.php?split=0" METHOD=POST>
<p>
<div align = "left">
<p><b>Upload EP File</b></p>
<p>
<INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="100000000">
<p></p>
<input name="usrfl" type="file" size="50">
<input type="submit" name="buttoninsert" value="Insert into db">
<br>
</p>
</div>
</form>
<FORM ENCTYPE="multipart/form-data" ACTION="easypopulate.php?split=1" METHOD=POST>
<p>
<div align = "left">
<p><b>Split EP File</b></p>
<p>
<INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="1000000000">
<p></p>
<input name="usrfl" type="file" size="50">
<input type="submit" name="buttonsplit" value="Split file">
<br>
</p>
</div>
</form>
<FORM ENCTYPE="multipart/form-data" ACTION="easypopulate.php" METHOD=POST>
<p>
<div align = "left">
<p><b>Import from Temp Dir (<? echo $tempdir; ?>)</b></p>
<p class="smallText">
<INPUT TYPE="text" name="localfile" size="50">
<input type="submit" name="buttoninsert" value="Insert into db">
<br>
</p>
</div>
</form>
<p><b>Download EP and Froogle Files</b></p>
<!-- Download file links - Add your custom fields here -->
<a href="easypopulate.php?download=stream&dltype=full">Download <b>Complete</b> tab-delimited
.txt file to edit</a><br>
<a href="easypopulate.php?download=stream&dltype=priceqty">Download <b>Model/Price/Qty</b> tab-delimited
.txt file to edit</a><br>
<a href="easypopulate.php?download=stream&dltype=category">Download <b>Model/Category</b> tab-delimited
.txt file to edit</a><br>
<a href="easypopulate.php?download=stream&dltype=froogle">Download <b>Froogle</b> tab-delimited
.txt file</a><br>
<!-- VJ product attributes begin //-->
<?php
if ($products_with_attributes == true) {
?>
<a href="easypopulate.php?download=stream&dltype=attrib">Download <b>Model/Attributes</b> tab-delimited
.txt file</a><br>
<?php
}
?>
<!-- VJ product attributes end //-->
<p><b>Create EP and Froogle Files in Temp Dir (<? echo $tempdir; ?>)</b></p>
<a href="easypopulate.php?download=tempfile&dltype=full">Create Complete
tab-delimited .txt file in temp dir</a><br>
<a href="easypopulate.php?download=tempfile&dltype=priceqty"">Create
Model/Price/Qty tab-delimited .txt file in temp dir</a><br>
<a href="easypopulate.php?download=tempfile&dltype=category">Create
Model/Category tab-delimited .txt file in temp dir</a><br>
<a href="easypopulate.php?download=tempfile&dltype=froogle">Create
Froogle tab-delimited .txt file in temp dir</a><br>
<!-- VJ product attributes begin //-->
<a href="easypopulate.php?download=tempfile&dltype=attrib">Create
Model/Attributes tab-delimited .txt file in temp dir</a><br>
<!-- VJ product attributes end //-->
</td>
</tr>
</table>
</td>
</tr>
</table>
<?php require(DIR_WS_INCLUDES . 'footer.php'); ?>
<p> </p>
<p> </p>
<p><br>
</p>
</body>
</html>
<?php
function ep_get_languages() {
$languages_query = tep_db_query("select languages_id, code from " . TABLE_LANGUAGES . " order by sort_order");
// start array at one, the rest of the code expects it that way
$ll =1;
while ($ep_languages = tep_db_fetch_array($languages_query)) {
//will be used to return language_id en language code to report in product_name_code instead of product_name_id
$ep_languages_array[$ll++] = array(
'id' => $ep_languages['languages_id'],
'code' => $ep_languages['code']
);
}
return $ep_languages_array;
};
function tep_get_tax_class_rate($tax_class_id) {
$tax_multiplier = 0;
$tax_query = tep_db_query("select SUM(tax_rate) as tax_rate from " . TABLE_TAX_RATES . " WHERE tax_class_id = '" . $tax_class_id . "' GROUP BY tax_priority");
if (tep_db_num_rows($tax_query)) {
while ($tax = tep_db_fetch_array($tax_query)) {
$tax_multiplier += $tax['tax_rate'];
}
}
return $tax_multiplier;
};
function tep_get_tax_title_class_id($tax_class_title) {
$classes_query = tep_db_query("select tax_class_id from " . TABLE_TAX_CLASS . " WHERE tax_class_title = '" . $tax_class_title . "'" );
$tax_class_array = tep_db_fetch_array($classes_query);
$tax_class_id = $tax_class_array['tax_class_id'];
return $tax_class_id;
}
function print_el( $item2 ) {
echo " | " . substr(strip_tags($item2), 0, 10);
};
function print_el1( $item2 ) {
echo sprintf("| %'.4s ", substr(strip_tags($item2), 0, 80));
};
function ep_create_filelayout($dltype){
global $filelayout, $filelayout_count, $filelayout_sql, $langcode, $fileheaders, $max_categories;
// depending on the type of the download the user wanted, create a file layout for it.
$fieldmap = array(); // default to no mapping to change internal field names to external.
switch( $dltype ){
case 'full':
// The file layout is dynamically made depending on the number of languages
$iii = 0;
$filelayout = array(
'v_products_model' => $iii++,
'v_products_image' => $iii++,
);
foreach ($langcode as $key => $lang){
$l_id = $lang['id'];
// uncomment the head_title, head_desc, and head_keywords to use
// Linda's Header Tag Controller 2.0
//echo $langcode['id'] . $langcode['code'];
$filelayout = array_merge($filelayout , array(
'v_products_name_' . $l_id => $iii++,
'v_products_description_' . $l_id => $iii++,
'v_products_url_' . $l_id => $iii++,
'v_products_head_title_tag_'.$l_id => $iii++,
'v_products_head_desc_tag_'.$l_id => $iii++,
'v_products_head_keywords_tag_'.$l_id => $iii++,
));
}
// uncomment the customer_price and customer_group to support multi-price per product contrib
// VJ product attribs begin
$header_array = array(
'v_products_price' => $iii++,
'v_products_weight' => $iii++,
'v_date_avail' => $iii++,
'v_date_added' => $iii++,
'v_products_quantity' => $iii++,
'v_dvd_star' => $iii++,
'v_dvd_director' => $iii++,
'v_dvd_release_date' => $iii++,
'v_dvd_type' => $iii++,
'v_dvd_features' => $iii++,
'v_dvd_studio' => $iii++,
'v_dvd_categories' => $iii++,
'v_dvd_movie_length' => $iii++,
'v_dvd_also_available' => $iii++,
'v_products_bimage' => $iii++,
'v_products_subimage1' => $iii++,
'v_products_bsubimage1' => $iii++,
'v_products_subimage2' => $iii++,
'v_products_bsubimage2' => $iii++,
'v_products_subimage3' => $iii++,
'v_products_bsubimage3' => $iii++,
'v_products_subimage4' => $iii++,
'v_products_bsubimage4' => $iii++,
'v_products_subimage5' => $iii++,
'v_products_bsubimage5' => $iii++,
'v_products_subimage6' => $iii++,
'v_products_bsubimage6' => $iii++,
);
$languages = tep_get_languages();
global $attribute_options_array;
$attribute_options_count = 1;
foreach ($attribute_options_array as $attribute_options_values) {
$key1 = 'v_attribute_options_id_' . $attribute_options_count;
$header_array[$key1] = $iii++;
for ($i=0, $n=sizeof($languages); $i<$n; $i++) {
$l_id = $languages[$i]['id'];
$key2 = 'v_attribute_options_name_' . $attribute_options_count . '_' . $l_id;
$header_array[$key2] = $iii++;
}
$attribute_values_query = "select products_options_values_id from " . TABLE_PRODUCTS_OPTIONS_VALUES_TO_PRODUCTS_OPTIONS . " where products_options_id = '" . (int)$attribute_options_values['products_options_id'] . "' order by products_options_values_id";
$attribute_values_values = tep_db_query($attribute_values_query);
$attribute_values_count = 1;
while ($attribute_values = tep_db_fetch_array($attribute_values_values)) {
$key3 = 'v_attribute_values_id_' . $attribute_options_count . '_' . $attribute_values_count;
$header_array[$key3] = $iii++;
$key4 = 'v_attribute_values_price_' . $attribute_options_count . '_' . $attribute_values_count;
$header_array[$key4] = $iii++;
for ($i=0, $n=sizeof($languages); $i<$n; $i++) {
$l_id = $languages[$i]['id'];
$key5 = 'v_attribute_values_name_' . $attribute_options_count . '_' . $attribute_values_count . '_' . $l_id;
$header_array[$key5] = $iii++;
}
$attribute_values_count++;
}
$attribute_options_count++;
}
$header_array['v_manufacturers_name'] = $iii++;
$filelayout = array_merge($filelayout, $header_array);
// VJ product attribs end
// build the categories name section of the array based on the number of categores the user wants to have
for($i=1;$i<$max_categories+1;$i++){
$filelayout = array_merge($filelayout, array('v_categories_name_' . $i => $iii++));
}
$filelayout = array_merge($filelayout, array(
'v_tax_class_title' => $iii++,
'v_status' => $iii++,
));
$filelayout_sql = "SELECT
p.products_id as v_products_id,
p.products_model as v_products_model,
p.products_image as v_products_image,
p.products_price as v_products_price,
p.products_weight as v_products_weight,
p.dvd_star as v_dvd_star,
p.dvd_director as v_dvd_director,
p.dvd_release_date as v_dvd_release_date,
p.dvd_type as v_dvd_type,
p.dvd_features as v_dvd_features,
p.dvd_studio as v_dvd_studio,
p.dvd_categories as v_dvd_categories,
p.dvd_movie_length as v_dvd_movie_length,
p.dvd_also_available as v_dvd_also_available,
p.products_bimage as v_products_bimage,
p.products_subimage1 as v_products_subimage1,
p.products_bsubimage1 as v_products_bsubimage1,
p.products_subimage2 as v_products_subimage2,
p.products_bsubimage2 as v_products_bsubimage2,
p.products_subimage3 as v_products_subimage3,
p.products_bsubimage3 as v_products_bsubimage3,
p.products_subimage4 as v_products_subimage4,
p.products_bsubimage4 as v_products_bsubimage4,
p.products_subimage5 as v_products_subimage5,
p.products_bsubimage5 as v_products_bsubimage5,
p.products_subimage6 as v_products_subimage6,
p.products_bsubimage6 as v_products_bsubimage6,
p.products_date_available as v_date_avail,
p.products_date_added as v_date_added,
p.products_tax_class_id as v_tax_class_id,
p.products_quantity as v_products_quantity,
p.manufacturers_id as v_manufacturers_id,
subc.categories_id as v_categories_id,
p.products_status as v_status
FROM
".TABLE_PRODUCTS." as p,
".TABLE_CATEGORIES." as subc,
".TABLE_PRODUCTS_TO_CATEGORIES." as ptoc
WHERE
p.products_id = ptoc.products_id AND
ptoc.categories_id = subc.categories_id
";
break;
case 'priceqty':
$iii = 0;
// uncomment the customer_price and customer_group to support multi-price per product contrib
$filelayout = array(
'v_products_model' => $iii++,
'v_products_price' => $iii++,
'v_products_quantity' => $iii++,
#'v_customer_price_1' => $iii++,
#'v_customer_group_id_1' => $iii++,
#'v_customer_price_2' => $iii++,
#'v_customer_group_id_2' => $iii++,
#'v_customer_price_3' => $iii++,
#'v_customer_group_id_3' => $iii++,
#'v_customer_price_4' => $iii++,
#'v_customer_group_id_4' => $iii++,
);
$filelayout_sql = "SELECT
p.products_id as v_products_id,
p.products_model as v_products_model,
p.products_price as v_products_price,
p.products_quantity as v_products_quantity
FROM
".TABLE_PRODUCTS." as p
";
break;
case 'category':
// The file layout is dynamically made depending on the number of languages
$iii = 0;
$filelayout = array(
'v_products_model' => $iii++,
);
// build the categories name section of the array based on the number of categores the user wants to have
for($i=1;$i<$max_categories+1;$i++){
$filelayout = array_merge($filelayout, array('v_categories_name_' . $i => $iii++));
}
$filelayout_sql = "SELECT
p.products_id as v_products_id,
p.products_model as v_products_model,
subc.categories_id as v_categories_id
FROM
".TABLE_PRODUCTS." as p,
".TABLE_CATEGORIES." as subc,
".TABLE_PRODUCTS_TO_CATEGORIES." as ptoc
WHERE
p.products_id = ptoc.products_id AND
ptoc.categories_id = subc.categories_id
";
break;
case 'froogle':
// this is going to be a little interesting because we need
// a way to map from internal names to external names
//
// Before it didn't matter, but with froogle needing particular hea
#8
Posted 20 April 2004 - 04:57 AM
Quote
Temporary filename: /tmp/phpRSjqJJ
User filename: EP2004Apr19-1403.txt
Size: 26035
| CA-0024 | gt_interac | gt_interac | gt_interac | Calla Lill | Oil pastel | | | | | | | | 25 | 8 | 4/19/04 12 | 4/19/04 12 | 1 | 1 | Color | Farbe | Color | 2 | Size | Größe | Talla | 3 | Model | Modell | Modelo | 5 | | Value | Value Ausg | Value | 6 | | Premium | Premium Au | Premium | 7 | | Deluxe | Deluxe Aus | Deluxe | 8 | | PS/2 | PS/2 Ansch | PS/2 | 9 | | USB | USB Anschl | USB | 4 | Memory | Speicher | Memoria | 1 | | 4 mb | 4 MB | 4 mb | 2 | | 8 mb | 8 MB | 8 mb | 3 | | 16 mb | 16 MB | 16 mb | 4 | | 32 mb | 32 MB | 32 mb | 5 | Version | Version | Version | 10 | | Download: | Download: | Download: | 13 | | Box: Windo | Box: Windo | Box: Windo | The Bridge | Participat | $25 and un | | Taxable Go | Active Updated
1064 - You have an error in your SQL syntax near '" ,products_mimage="gt_interactive/disciples.gif" ,products_bimage="gt_interacti' at line 6
UPDATE products SET products_price="25" ,products_image="gt_interactive/disciples.gif", products_weight="8", products_tax_class_id="1", products_date_available= "4/19/04 12:38", products_date_added= "4/19/04 12:38", products_last_modified=CURRENT_TIMESTAMP , products_quantity="1" ,manufacturers_id=12 , products_status=1 WHERE (products_id = "78")" ,products_mimage="gt_interactive/disciples.gif" ,products_bimage="gt_interactive/disciples.gifUPDATE products SET products_price="25" ,products_image="gt_interactive/disciples.gif", products_weight="8", products_tax_class_id="1", products_date_available= "4/19/04 12:38", products_date_added= "4/19/04 12:38", products_last_modified=CURRENT_TIMESTAMP , products_quantity="1" ,manufacturers_id=12 , products_status=1 WHERE (products_id = "78")
Not a pretty sight. I have no idea what this means. I can download my file perfectly with the new fields. The problem happens when I try to put the new one up. I would post my easypopulate file, but it may be too big to quote.
Any ideas?
thanks
#9
Posted 20 April 2004 - 05:05 AM
reading the code seems this needs a space in it
to
interactive/disciples.gif UPDATE
#10
Posted 20 April 2004 - 03:26 PM
what did u do to get it to work
????
#11
Posted 20 April 2004 - 04:33 PM
You have to do more than just uncomment the image mod lines. You have to add references of the other images throughout the code.
I am posting the link to my modified file that works with the S,M,L image mod. Check it out.
EasyPopulate--my mod
A
#12
Posted 20 April 2004 - 06:34 PM
I dont know if u have the same problems but i am using this symble in teh categories "
EP Does not like it. It does matter if it is in the description but if it is in the categoreis, NO WAY
Any idea. If any thing I will change it to the word inch
example
WOOD > MDF > 1/4"
WOOD > MDF > 1"
WOOD > MDF > 2"
#13
Posted 20 April 2004 - 06:39 PM
#14
Posted 20 April 2004 - 08:00 PM
Ok
do u know what this is.
EP is not looking at the description for no reason.
1064 - You have an error in your SQL syntax near 's down. Its a feast for the eyes and operation is easier than ever before with t' at line 3
???????
I have tunred it off at the easypopulate file
Jazz
#15
Posted 20 April 2004 - 10:24 PM
Unfortunately, I have no ideas for your new dillema. I hope someone can post a solution.
A
#16
Posted 20 April 2004 - 11:17 PM
#17
Posted 21 April 2004 - 09:30 AM
EP is not starting to look at the content of the description.
Beofre it would ignore everything??????
So this menas that is cant use certain thing within the decription
Any know.
#18
Posted 21 April 2004 - 10:42 AM
1064 - You have an error in your SQL syntax near 's IP Bus headunits, and plays CD's, CD-R's, and CD-RW's. It remembers the name o' at line 3
UPDATE products_description SET products_name='12 Disc CD Changer', products_description='This 6-disc CD changer is compatible with Pioneer's IP Bus headunits, and plays CD's, CD-R's, and CD-RW's. It remembers the name of the last 100 CD's it's played, as well as any of your special track programming. Mount it in a variety of locations and angles in your vehicle, and control it via your headunit and a remote control.', products_url='' WHERE products_id = '262' AND language_id = '1'
Jazz
This is very strange
#19
Posted 21 April 2004 - 11:07 AM
With oout the BIMAGE mod it will upload the description with no problems. When the mod ison no joy. I get a SQL Sytx error..............
Thus i belive tha the database is searching throught the description text. Is there any marker I can put before the text to tell the database to ignore this text or is there another solution
Jazz
#20
Posted 21 April 2004 - 11:29 AM
Did u have any syntx errors within you description box.
Jazz









