Jump to content
  • Checkout
  • Login
  • Get in touch

osCommerce

The e-commerce.

daddyrabbit

Archived
  • Posts

    117
  • Joined

  • Last visited

Posts posted by daddyrabbit

  1. please help

     

    im having problems installing it and i have created /catalog/temp and chmod 777

     

    also added the code in catalog.php in admin

     

    but it doesn't display in admin panel

     

    Please help

     

    Daz

     

     

    For adding link to the Admin, edit file admin/includes/boxes/catalog.php by adding this line:

     

    '<a href="' . tep_href_link('easypopulate.php', '', 'NONSSL') . '" class="menuBoxContentLink">Easy Populate</a><br>'.

     

    After:

    '<a href="' . tep_href_link(FILENAME_PRODUCTS_ATTRIBUTES, '', 'NONSSL') . '"

    class="menuBoxContentLink">' . BOX_CATALOG_CATEGORIES_PRODUCTS_ATTRIBUTES .

    '</a><br>' .

  2. If you are loading osC onto the root of your web server (under the public_html folder for example) then make sure you have a temp directory chmod 777 there...if you created a folder then extracted to osC files in that folder, create your temp dir there.

     

    When Fantastico started the setup, it asked you name a folder to install into...this folder is where you make your temp file...

  3. I have a question about installation. On step #4, it says create a /catalogue/temp directory. But I don't have a catalogue directory. I'm not sure where my catalogue is stored so I'm kinda stumped here. I got my installation of OSCommerce from Fantastico if that helps any. Any assistance would be really appreciated. Thanks.

     

     

    If you are loading osC onto the root of your web server (under the public_html folder for example) then make sure you have a temp directory chmod 777 there...if you created a folder then extracted to osC files in that folder, create your temp dir there.

  4. ok,

    i read the readme's included with this contribution, however the one example that is in there about the automobile, doesnt really help me in the least. i see there are "headers", however, i am not sure how to go about creating the excel file with the headers i need to use. i? have 3000+ books, the books are in a sequential file, (txt). as i can see this is not very beneficial to what i am trying to do, so what i need is to know how to create the appropriate headers in excel, so that i can add the data from the txt file into the excel file.

     

    the files records consist of:

    Title, Author, Description,Book_ID,Retail_Cost, Special_Cost, Discount %.

     

    could somebody please point me in the direction i need to go in in order to create the excel file, so that i may be able to use the easy populate contribution.

     

    thanks all in advance,

    dosdawgs

     

     

    Manually input one or two products, download the EP file and open it in Excel. The headers will be there.

  5. >_< /

    Ok I have the latest version of oscommere installed on my website, I tried adding the STS 2.01 and followed the readme and this is what error i got

     

    http://firstlinestudios.com/shop/

    Warning: main(STS_START_CAPTURE): failed to open stream: No such file or directory in /home/firstlin/public_html/shop/includes/application_top.php on line 511

     

    Fatal error: main(): Failed opening required 'STS_START_CAPTURE' (include_path='.:/usr/lib/php:/usr/local/lib/php') in /home/firstlin/public_html/shop/includes/application_top.php on line 511

     

    Someone help please!!

     

    1. /php:/usr/ should be /php/usr

     

    2. You need to find where on your server the directory /usr/lib/ is located...

  6. I want to download with EZ Populate without the attributes due to the column limits in Excel.  I changed the line to false:

     

    // 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 = false;

     

    Is there something else I need to do?  I didn't change anything else.

     

    I've read this 79 page thread, loaded a fresh file and started over and tried again and I can't get this to work.    If anyone has any ideas, I'd be most grateful!!!

     

    This forum has saved my life countless times and I really appreciate everyone here.

     

     

    Try switching to Works spreadsheet or Quattro Pro...they do not have the column limits...

  7. Everything working fine on download.  But upload I get this error.  My permissions are set to 777 on temp file.  I have tried every conceivable path in easypopulate.php

    $tempdir = "/catalog/temp";

    $tempdir2 = "/catalog/temp";

    and not matter what path I put here the path in the error is exactly the same.

    PLease help!!!

    Warning: move_uploaded_file(/home/diamondn/public_html/ecommerce/os/catalog//catalog/temp/EP2005Mar27-1111.txt): failed to open stream: No such file or directory in /home/diamondn/public_html/ecommerce/os/catalog/admin/easypopulate_functions.php on line 32

     

    Warning: move_uploaded_file(): Unable to move '/var/tmp/phpKXr6iI' to '/home/diamondn/public_html/ecommerce/os/catalog//catalog/temp/EP2005Mar27-1111.txt' in /home/diamondn/public_html/ecommerce/os/catalog/admin/easypopulate_functions.php on line 32

    File uploaded.

    Temporary filename: /var/tmp/phpKXr6iI

    User filename: EP2005Mar27-1111.txt

    Size: 900

     

    Warning: file(/home/diamondn/public_html/ecommerce/os/catalog//catalog/temp/EP2005Mar27-1111.txt): failed to open stream: No such file or directory in /home/diamondn/public_html/ecommerce/os/catalog/admin/easypopulate.php on line 657

     

    Warning: Invalid argument supplied for foreach() in /home/diamondn/public_html/ecommerce/os/catalog/admin/easypopulate.php on line 680

     

     

    Here is the problem:

     

    catalog//catalog/temp

     

     

    Change lines 20 and 21 should read

     

    $tempdir = "temp/";

    $tempdir2 = "temp/";

     

    And should be CHMOD 777

  8. I have tried to upload a txt fle in easypopulate.  I got this error.

     

    Warning: move_uploaded_file(/home/mblindk/public_html/cart//home/mblindk/public_html/cart/Temp/EP2005Mar23-2008.txt): failed to open stream: No such file or directory in /home/mblindk/public_html/cart/admin/easypopulate_functions.php on line 32

     

    Warning: move_uploaded_file(): Unable to move '/tmp/phpVYpxWC' to '/home/mblindk/public_html/cart//home/mblindk/public_html/cart/Temp/EP2005Mar23-2008.txt' in /home/mblindk/public_html/cart/admin/easypopulate_functions.php on line 32

    File uploaded.

    Temporary filename: /tmp/phpVYpxWC

    User filename: EP2005Mar23-2008.txt

    Size: 31515

     

    Warning: file(/home/mblindk/public_html/cart//home/mblindk/public_html/cart/Temp/EP2005Mar23-2008.txt): failed to open stream: No such file or directory in /home/mblindk/public_html/cart/admin/easypopulate.php on line 657

     

    Warning: Invalid argument supplied for foreach() in /home/mblindk/public_html/cart/admin/easypopulate.php on line 680

    This is my path in easypopulate.php

    $tempdir = "/public_html/cart/Temp/";

    $tempdir2 = "/public_html/cart/temp/";

     

    When I go into tools and look at the path this is what shows up.

     

    /home/mblindk/public_html/cart//temp

     

    I see that the double backshash is the problem.  My question is what file do I go to in order to eliminate the double backshash.

     

    David

     

     

    $tempdir = "/public_html/cart/Temp/";

    $tempdir2 = "/public_html/cart/temp/";

     

    Change to:

     

    $tempdir = "/temp/";

    $tempdir2 = "/temp/";

  9. Tried uploading the txt file and got this error.  Is this symptomatic of having my Temp file in the wrong place.  I have done the 777 change of permissions..

    Warning: move_uploaded_file(/home/mblindk/public_html/cart//home/mblindk/public_html/cart/Temp/EP2005Mar23-2008.txt): failed to open stream: No such file or directory in /home/mblindk/public_html/cart/admin/easypopulate_functions.php on line 32

     

    Warning: move_uploaded_file(): Unable to move '/tmp/phpVYpxWC' to '/home/mblindk/public_html/cart//home/mblindk/public_html/cart/Temp/EP2005Mar23-2008.txt' in /home/mblindk/public_html/cart/admin/easypopulate_functions.php on line 32

    File uploaded.

    Temporary filename: /tmp/phpVYpxWC

    User filename: EP2005Mar23-2008.txt

    Size: 31515

     

    Warning: file(/home/mblindk/public_html/cart//home/mblindk/public_html/cart/Temp/EP2005Mar23-2008.txt): failed to open stream: No such file or directory in /home/mblindk/public_html/cart/admin/easypopulate.php on line 657

     

    Warning: Invalid argument supplied for foreach() in /home/mblindk/public_html/cart/admin/easypopulate.php on line 680

    Thks

     

    David

     

     

    /cart//home/ should be /cart/home no double slash

  10. Help!

     

    For some reason EP returns blank data when I download a file...

     

    Here is the ep file:

     

    <?php

     

    // Current EP Version

    $curver = '2.74-MS2';

     

    /*

    $Id: easypopulate.php,v 2.74 2004/05/03 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 = "/temp/";

    $tempdir2 = "/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 = true;

     

    //**** 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 = 12;

     

    //**** 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 =true;

     

    // **** 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 = 50; // 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://www.sri-suplies.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://www.sri-supplies.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_products_mimage',

    #'v_products_bimage',

    #'v_products_subimage1',

    #'v_products_bsubimage1',

    #'v_products_subimage2',

    #'v_products_bsubimage2',

    #'v_products_subimage3',

    #'v_products_bsubimage3',

    'v_categories_id',

    'v_products_price',

    'v_products_quantity',

    'v_products_weight',

    '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'

    );

     

    //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){

     

     

    // 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'] = round($row['v_products_price'] +

    ($price_with_tax * $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");

    // Changed if using SSL, helps prevent program delay/timeout (add to backup.php also)

    // header("Pragma: no-cache");

    if ($request_type== 'NONSSL'){

    header("Pragma: no-cache");

    } else {

    header("Pragma: ");

    }

    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++,

    );

     

    $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.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_tax_class_id as v_tax_class_id,

    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 headers,

    // The file layout is dynamically made depending on the number of languages

    $iii = 0;

    $filelayout = array(

    'v_froogle_products_url_1' => $iii++,

    );

    //

    // here we need to get the default language and put

    $l_id = 1; // dummy it in for now.

    // foreach ($langcode as $key => $lang){

    // $l_id = $lang['id'];

    $filelayout = array_merge($filelayout , array(

    'v_froogle_products_name_' . $l_id => $iii++,

    'v_froogle_products_description_' . $l_id => $iii++,

    ));

    // }

    $filelayout = array_merge($filelayout , array(

    'v_products_price' => $iii++,

    'v_products_fullpath_image' => $iii++,

    'v_category_fullpath' => $iii++,

    'v_froogle_offer_id' => $iii++,

    'v_froogle_instock' => $iii++,

    'v_froogle_ shipping' => $iii++,

    'v_manufacturers_name' => $iii++,

    'v_froogle_ upc' => $iii++,

    'v_froogle_color' => $iii++,

    'v_froogle_size' => $iii++,

    'v_froogle_quantitylevel' => $iii++,

    'v_froogle_product_id' => $iii++,

    'v_froogle_manufacturer_id' => $iii++,

    'v_froogle_exp_date' => $iii++,

    'v_froogle_product_type' => $iii++,

    'v_froogle_delete' => $iii++,

    'v_froogle_currency' => $iii++,

    ));

    $iii=0;

    $fileheaders = array(

    'product_url' => $iii++,

    'name' => $iii++,

    'description' => $iii++,

    'price' => $iii++,

    'image_url' => $iii++,

    'category' => $iii++,

    'offer_id' => $iii++,

    'instock' => $iii++,

    'shipping' => $iii++,

    'brand' => $iii++,

    'upc' => $iii++,

    'color' => $iii++,

    'size' => $iii++,

    'quantity' => $iii++,

    'product_id' => $iii++,

    'manufacturer_id' => $iii++,

    'exp_date' => $iii++,

    'product_type' => $iii++,

    'delete' => $iii++,

    'currency' => $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.products_date_added as v_date_avail,

    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

    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;

     

    // VJ product attributes begin

    case 'attrib':

    $iii = 0;

    $filelayout = array(

    'v_products_model' => $iii++

    );

     

    $header_array = array();

     

    $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++;

    }

     

    $filelayout = array_merge($filelayout, $header_array);

     

    $filelayout_sql = "SELECT

    p.products_id as v_products_id,

    p.products_model as v_products_model

    FROM

    ".TABLE_PRODUCTS." as p

    ";

     

    break;

    // VJ product attributes end

    }

    $filelayout_count = count($filelayout);

     

    }

     

     

    function walk( $item1 ) {

    global $filelayout, $filelayout_count, $modelsize;

    global $active, $inactive, $langcode, $default_these, $deleteit, $zero_qty_inactive;

    global $epdlanguage_id, $price_with_tax, $replace_quotes;

    global $default_images, $default_image_manufacturer, $default_image_product, $default_image_category;

    global $separator, $max_categories;

    // first we clean up the row of data

     

    // chop blanks from each end

    $item1 = ltrim(rtrim($item1));

     

    // blow it into an array, splitting on the tabs

    $items = explode($separator, $item1);

     

    // make sure all non-set things are set to '';

    // and strip the quotes from the start and end of the stings.

    // escape any special chars for the database.

    foreach( $filelayout as $key=> $value){

    $i = $filelayout[$key];

    if (isset($items[$i]) == false) {

    $items[$i]='';

    } else {

    // Check to see if either of the magic_quotes are turned on or off;

    // And apply filtering accordingly.

    if (function_exists('ini_get')) {

    //echo "Getting ready to check magic quotes<br>";

    if (ini_get('magic_quotes_runtime') == 1){

    // The magic_quotes_runtime are on, so lets account for them

    // check if the last character is a quote;

    // if it is, chop off the quotes.

    if (substr($items[$i],-1) == '"'){

    $items[$i] = substr($items[$i],2,strlen($items[$i])-4);

    }

    // now any remaining doubled double quotes should be converted to one doublequote

    $items[$i] = str_replace('\"\"',""",$items[$i]);

    if ($replace_quotes){

    $items[$i] = str_replace('\"',""",$items[$i]);

    $items[$i] = str_replace("\'","'",$items[$i]);

    }

    } else { // no magic_quotes are on

    // check if the last character is a quote;

    // if it is, chop off the 1st and last character of the string.

    if (substr($items[$i],-1) == '"'){

    $items[$i] = substr($items[$i],1,strlen($items[$i])-2);

    }

    // now any remaining doubled double quotes should be converted to one doublequote

    $items[$i] = str_replace('""',""",$items[$i]);

    if ($replace_quotes){

    $items[$i] = str_replace('"',""",$items[$i]);

    $items[$i] = str_replace("'","'",$items[$i]);

    }

    }

    }

    }

    }

    /*

    if ( $items['v_status'] == $deleteit ){

    // they want to delete this product.

    echo "Deleting product " . $items['v_products_model'] . " from the database<br>";

    // Get the ID

     

    // kill in the products_to_categories

     

    // Kill in the products table

     

    return; // we're done deleteing!

    }

    */

    // now do a query to get the record's current contents

    $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.products_date_added as v_date_avail,

    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

    FROM

    ".TABLE_PRODUCTS." as p,

    ".TABLE_CATEGORIES.&quo

  11. Most of my products are sold by the stem, and  there are 100 stems per box.  I only want to sell per box, but show the per stem price. That way the customer can only order a minumin of one box (or 100 stems) But some items are bigger, so I sell 50 stems per box, so there has to be a way to set the amount per box per item. Is there any way or contribution that does that?

     

     

    You can set attributes for individual products through the Attributes section of the admin control panel.

  12. I have got easy populate 2.74 installed and have clicked on the link to download the completed tab delimited file.  When I get it into excel,  use the text import wizard and get click on the finish button.  I get an error saying the file is not completely loaded.  I looked up this error on the internet and it talks about how many rows can be loaded but I have only one product listed and it takes one row. 

     

    I am trying to set up a site for selling mini blinds and each product may have 600 attributes.  (lenght, width, color, mount etc.).  I saw in one of the posts that excel has a limit on how many columns it can display.  Can you expand excels limit on columns and if not is there a way to handle single products with hundreds of attributes. 

     

    Thanks

    David

     

    Excel has a limit to the number of rows it can display...I had the same problem and switched to Quattro Pro (Wordperfect Suite)...also, I think Works spreadsheet works as well.

     

    Good luck!

  13. Hi guys, I am new to oscommerce, and have just started getting gribs with some of these excellent scripts.

     

    I have installed easypopulate, and can access it from my admin

    The problem I have is when trying to download the existing database info...

     

    I have a temp folder, but not sure it it has the chmod 777 temp executed. I use dreamweaver mx, and i cannot find this option anywhere??? though i right clicked the folder to make it not read only... but it is still read only on my server...

     

    I get the following errors: please help Regards Alex!!

     

    Warning: fopen(/home/xmodzweb/public_html//catalog/temp/EP2005Mar15-1301.txt): failed to open stream: No such file or directory in /home/xmodzweb/public_html/admin/easypopulate.php on line 603

     

    Warning: fwrite(): supplied argument is not a valid stream resource in /home/xmodzweb/public_html/admin/easypopulate.php on line 604

     

    Warning: fclose(): supplied argument is not a valid stream resource in /home/xmodzweb/public_html/admin/easypopulate.php on line 605

    You can get your file in the Tools/Files under /catalog/temp/EPEP2005Mar15-1301.txt

     

    Do you have an FTP program? If not, you need one, like WS_FTP...that is one way to change permissions on files...

  14. I have had no problems with EP until recently...here is my EP file:

     

    <?php

     

    // Current EP Version

    $curver = '2.74-MS2';

     

    /*

      $Id: easypopulate.php,v 2.74 2004/05/03 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 = "/temp/";

    $tempdir2 = "/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 = true;

     

    //**** 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 = 12;

     

    //**** 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 =true;

     

    // **** 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 = 50; // 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://www.sri-suplies.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://www.sri-supplies.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_products_mimage',

    #'v_products_bimage',

    #'v_products_subimage1',

    #'v_products_bsubimage1',

    #'v_products_subimage2',

    #'v_products_bsubimage2',

    #'v_products_subimage3',

    #'v_products_bsubimage3',

    'v_categories_id',

    'v_products_price',

    'v_products_quantity',

    'v_products_weight',

    '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'

    );

     

    //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){

      // 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']  = round($row['v_products_price'] +

        ($price_with_tax * $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");

    // Changed if using SSL, helps prevent program delay/timeout (add to backup.php also)

    // header("Pragma: no-cache");

    if ($request_type== 'NONSSL'){

    header("Pragma: no-cache");

    } else {

    header("Pragma: ");

    }

      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++,

      );

     

      $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.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_tax_class_id as v_tax_class_id,

      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 headers,

      // The file layout is dynamically made depending on the number of languages

      $iii = 0;

      $filelayout = array(

      'v_froogle_products_url_1'  => $iii++,

      );

      //

      // here we need to get the default language and put

      $l_id = 1; // dummy it in for now.

    //  foreach ($langcode as $key => $lang){

    //  $l_id = $lang['id'];

      $filelayout  = array_merge($filelayout , array(

        'v_froogle_products_name_' . $l_id  => $iii++,

        'v_froogle_products_description_' . $l_id => $iii++,

        ));

    //  }

      $filelayout  = array_merge($filelayout , array(

      'v_products_price'  => $iii++,

      'v_products_fullpath_image' => $iii++,

      'v_category_fullpath'  => $iii++,

      'v_froogle_offer_id'  => $iii++,

      'v_froogle_instock'  => $iii++,

      'v_froogle_ shipping'  => $iii++,

      'v_manufacturers_name'  => $iii++,

      'v_froogle_ upc'  => $iii++,

      'v_froogle_color'  => $iii++,

      'v_froogle_size'  => $iii++,

      'v_froogle_quantitylevel' => $iii++,

      'v_froogle_product_id'  => $iii++,

      'v_froogle_manufacturer_id' => $iii++,

      'v_froogle_exp_date'  => $iii++,

      'v_froogle_product_type' => $iii++,

      'v_froogle_delete'  => $iii++,

      'v_froogle_currency'  => $iii++,

        ));

      $iii=0;

      $fileheaders = array(

      'product_url'  => $iii++,

      'name'  => $iii++,

      'description'  => $iii++,

      'price'  => $iii++,

      'image_url'  => $iii++,

      'category'  => $iii++,

      'offer_id'  => $iii++,

      'instock'  => $iii++,

      'shipping'  => $iii++,

      'brand'  => $iii++,

      'upc'  => $iii++,

      'color'  => $iii++,

      'size'  => $iii++,

      'quantity'  => $iii++,

      'product_id'  => $iii++,

      'manufacturer_id' => $iii++,

      'exp_date'  => $iii++,

      'product_type'  => $iii++,

      'delete'  => $iii++,

      'currency'  => $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.products_date_added as v_date_avail,

      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

      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;

     

    // VJ product attributes begin

    case 'attrib':

      $iii = 0;

      $filelayout = array(

      'v_products_model'  => $iii++

      );

     

        $header_array = array();

     

      $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 . &q

  15. I have learned a lot in the last few weeks and you are right, I have a long way to go. I have html pretty good, but php is really confusing. I have read most of the KB and I read forum posts twice daily to see what others are doing and having problems with. I have found a lot of good info before I needed it!

     

    I have also tried searching google for php tutorials, but most are written over my head. Not that I am unable to learn it, it just seems like the authors expect the reader to have more knowledge of the subject than I do. Does anybody have a php learning site or even a book that they would recommend? I have installed several contributions and made a few css changes, but I don't know how to use } or ,)' . I have no idea where to begin making actual code changes unless the contrib spells it out for me. PMs are welcome.

     

    Tim

     

    PHP and MySQL For Dummies...it works for me!

  16. OMG ... another f******g whiner.

     

    "I've helped sooo much and now I want help NOW.  Drop everything and HELP ME!"

     

    Come to find out this punk only helped once out of his measley 10 posts and 9 of those posts are from this same topic he started.

     

    STFU!

     

     

    I don't think that was necessary. In fact I think it was totally uncalled for and absolutely without any value in this discussion.

  17. I have had no problems with EP until recently...here is my EP file:

     

    <?php

     

    // Current EP Version

    $curver = '2.74-MS2';

     

    /*

    $Id: easypopulate.php,v 2.74 2004/05/03 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 = "/temp/";

    $tempdir2 = "/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 = true;

     

    //**** 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 = 12;

     

    //**** 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 =true;

     

    // **** 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 = 50; // 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://www.sri-suplies.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://www.sri-supplies.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_products_mimage',

    #'v_products_bimage',

    #'v_products_subimage1',

    #'v_products_bsubimage1',

    #'v_products_subimage2',

    #'v_products_bsubimage2',

    #'v_products_subimage3',

    #'v_products_bsubimage3',

    'v_categories_id',

    'v_products_price',

    'v_products_quantity',

    'v_products_weight',

    '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'

    );

     

    //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){

     

     

    // 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'] = round($row['v_products_price'] +

    ($price_with_tax * $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");

    // Changed if using SSL, helps prevent program delay/timeout (add to backup.php also)

    // header("Pragma: no-cache");

    if ($request_type== 'NONSSL'){

    header("Pragma: no-cache");

    } else {

    header("Pragma: ");

    }

    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++,

    );

     

    $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.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_tax_class_id as v_tax_class_id,

    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 headers,

    // The file layout is dynamically made depending on the number of languages

    $iii = 0;

    $filelayout = array(

    'v_froogle_products_url_1' => $iii++,

    );

    //

    // here we need to get the default language and put

    $l_id = 1; // dummy it in for now.

    // foreach ($langcode as $key => $lang){

    // $l_id = $lang['id'];

    $filelayout = array_merge($filelayout , array(

    'v_froogle_products_name_' . $l_id => $iii++,

    'v_froogle_products_description_' . $l_id => $iii++,

    ));

    // }

    $filelayout = array_merge($filelayout , array(

    'v_products_price' => $iii++,

    'v_products_fullpath_image' => $iii++,

    'v_category_fullpath' => $iii++,

    'v_froogle_offer_id' => $iii++,

    'v_froogle_instock' => $iii++,

    'v_froogle_ shipping' => $iii++,

    'v_manufacturers_name' => $iii++,

    'v_froogle_ upc' => $iii++,

    'v_froogle_color' => $iii++,

    'v_froogle_size' => $iii++,

    'v_froogle_quantitylevel' => $iii++,

    'v_froogle_product_id' => $iii++,

    'v_froogle_manufacturer_id' => $iii++,

    'v_froogle_exp_date' => $iii++,

    'v_froogle_product_type' => $iii++,

    'v_froogle_delete' => $iii++,

    'v_froogle_currency' => $iii++,

    ));

    $iii=0;

    $fileheaders = array(

    'product_url' => $iii++,

    'name' => $iii++,

    'description' => $iii++,

    'price' => $iii++,

    'image_url' => $iii++,

    'category' => $iii++,

    'offer_id' => $iii++,

    'instock' => $iii++,

    'shipping' => $iii++,

    'brand' => $iii++,

    'upc' => $iii++,

    'color' => $iii++,

    'size' => $iii++,

    'quantity' => $iii++,

    'product_id' => $iii++,

    'manufacturer_id' => $iii++,

    'exp_date' => $iii++,

    'product_type' => $iii++,

    'delete' => $iii++,

    'currency' => $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.products_date_added as v_date_avail,

    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

    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;

     

    // VJ product attributes begin

    case 'attrib':

    $iii = 0;

    $filelayout = array(

    'v_products_model' => $iii++

    );

     

    $header_array = array();

     

    $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++;

    }

     

    $filelayout = array_merge($filelayout, $header_array);

     

    $filelayout_sql = "SELECT

    p.products_id as v_products_id,

    p.products_model as v_products_model

    FROM

    ".TABLE_PRODUCTS." as p

    ";

     

    break;

    // VJ product attributes end

    }

    $filelayout_count = count($filelayout);

     

    }

     

     

    function walk( $item1 ) {

    global $filelayout, $filelayout_count, $modelsize;

    global $active, $inactive, $langcode, $default_these, $deleteit, $zero_qty_inactive;

    global $epdlanguage_id, $price_with_tax, $replace_quotes;

    global $default_images, $default_image_manufacturer, $default_image_product, $default_image_category;

    global $separator, $max_categories;

    // first we clean up the row of data

     

    // chop blanks from each end

    $item1 = ltrim(rtrim($item1));

     

    // blow it into an array, splitting on the tabs

    $items = explode($separator, $item1);

     

    // make sure all non-set things are set to '';

    // and strip the quotes from the start and end of the stings.

    // escape any special chars for the database.

    foreach( $filelayout as $key=> $value){

    $i = $filelayout[$key];

    if (isset($items[$i]) == false) {

    $items[$i]='';

    } else {

    // Check to see if either of the magic_quotes are turned on or off;

    // And apply filtering accordingly.

    if (function_exists('ini_get')) {

    //echo "Getting ready to check magic quotes<br>";

    if (ini_get('magic_quotes_runtime') == 1){

    // The magic_quotes_runtime are on, so lets account for them

    // check if the last character is a quote;

    // if it is, chop off the quotes.

    if (substr($items[$i],-1) == '"'){

    $items[$i] = substr($items[$i],2,strlen($items[$i])-4);

    }

    // now any remaining doubled double quotes should be converted to one doublequote

    $items[$i] = str_replace('\"\"',""",$items[$i]);

    if ($replace_quotes){

    $items[$i] = str_replace('\"',""",$items[$i]);

    $items[$i] = str_replace("\'","'",$items[$i]);

    }

    } else { // no magic_quotes are on

    // check if the last character is a quote;

    // if it is, chop off the 1st and last character of the string.

    if (substr($items[$i],-1) == '"'){

    $items[$i] = substr($items[$i],1,strlen($items[$i])-2);

    }

    // now any remaining doubled double quotes should be converted to one doublequote

    $items[$i] = str_replace('""',""",$items[$i]);

    if ($replace_quotes){

    $items[$i] = str_replace('"',""",$items[$i]);

    $items[$i] = str_replace("'","'",$items[$i]);

    }

    }

    }

    }

    }

    /*

    if ( $items['v_status'] == $deleteit ){

    // they want to delete this product.

    echo "Deleting product " . $items['v_products_model'] . " from the database<br>";

    // Get the ID

     

    // kill in the products_to_categories

     

    // Kill in the products table

     

    return; // we're done deleteing!

    }

    */

    // now do a query to get the record's current contents

    $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.products_date_added as v_date_avail,

    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

    FROM

    ".TABLE_PRODUCTS." as p,

    ".TABLE_CATEGORIES." as subc,

    ".TABLE_PRODUCTS_TO_CATEG

×
×
  • Create New...