Jump to content

alcova

Members
  • Content count

    55
  • Joined

  • Last visited

Everything posted by alcova

  1. alcova

    Bundled Products

    I'm trying to install this contribution. I got stuck at Step 8: I can't find // Stock Check $any_out_of_stock = false; if (STOCK_CHECK == 'true') { for ($i=0, $n=sizeof($order->products); $i<$n; $i++) { if (tep_check_stock($order->products[$i]['id'], $order->products[$i]['qty'])) { $any_out_of_stock = true; } } // Out of Stock if ( (STOCK_ALLOW_CHECKOUT != 'true') && ($any_out_of_stock == true) ) { tep_redirect(tep_href_link(FILENAME_SHOPPING_CART)); } } I've been trying to search even for single bits of that code but nothing... this is what I have in the file (it's the code until the second change in step 8) <?php /* $Id: checkout_process.php,v 1.128 2003/05/28 18:00:29 hpdl Exp $ osCommerce, Open Source E-Commerce Solutions http://www.oscommerce.com Copyright (c) 2003 osCommerce Released under the GNU General Public License */ include('includes/application_top.php'); //Order IP Record BEGIN $ip = $HTTP_SERVER_VARS["REMOTE_ADDR"]; $client = gethostbyaddr($HTTP_SERVER_VARS["REMOTE_ADDR"]); $str = preg_split("/\./", $client); $i = count($str); $x = $i - 1; $n = $i - 2; $isp = $str[$n] . "." . $str[$x]; //Order IP Record END //mod to set payment to default currency $currency = DEFAULT_CURRENCY; // if the customer is not logged on, redirect them to the login page if (!tep_session_is_registered('customer_id')) { $navigation->set_snapshot(array('mode' => 'SSL', 'page' => FILENAME_CHECKOUT_PAYMENT)); tep_redirect(tep_href_link(FILENAME_LOGIN, '', 'SSL')); } if (!tep_session_is_registered('sendto')) { tep_redirect(tep_href_link(FILENAME_CHECKOUT_PAYMENT, '', 'SSL')); } if ( (tep_not_null(MODULE_PAYMENT_INSTALLED)) && (!tep_session_is_registered('payment')) ) { tep_redirect(tep_href_link(FILENAME_CHECKOUT_PAYMENT, '', 'SSL')); } // avoid hack attempts during the checkout procedure by checking the internal cartID if (isset($cart->cartID) && tep_session_is_registered('cartID')) { if ($cart->cartID != $cartID) { tep_redirect(tep_href_link(FILENAME_CHECKOUT_SHIPPING, '', 'SSL')); } } include(DIR_WS_LANGUAGES . $language . '/' . FILENAME_CHECKOUT_PROCESS); // load selected payment module require(DIR_WS_CLASSES . 'payment.php'); if ($credit_covers) $payment=''; // CCGV $payment_modules = new payment($payment); // load the selected shipping module require(DIR_WS_CLASSES . 'shipping.php'); $shipping_modules = new shipping($shipping); require(DIR_WS_CLASSES . 'order.php'); $order = new order; require(DIR_WS_CLASSES . 'order_total.php'); $order_total_modules = new order_total; $order_totals = $order_total_modules->process(); // load the before_process function from the payment modules $payment_modules->before_process(); $sql_data_array = array('customers_id' => $customer_id, 'customers_name' => $order->customer['firstname'] . ' ' . $order->customer['lastname'], 'customers_company' => $order->customer['company'], 'customers_street_address' => $order->customer['street_address'], 'customers_suburb' => $order->customer['suburb'], 'customers_city' => $order->customer['city'], 'customers_postcode' => $order->customer['postcode'], 'customers_state' => $order->customer['state'], 'customers_country' => $order->customer['country']['title'], 'customers_telephone' => $order->customer['telephone'], 'customers_email_address' => $order->customer['email_address'], 'customers_address_format_id' => $order->customer['format_id'], 'delivery_name' => $order->delivery['firstname'] . ' ' . $order->delivery['lastname'], 'delivery_company' => $order->delivery['company'], //PIVACF start 'billing_piva' => $order->billing['piva'], 'billing_cf' => $order->billing['cf'], //PIVACF end 'delivery_street_address' => $order->delivery['street_address'], 'delivery_suburb' => $order->delivery['suburb'], 'delivery_city' => $order->delivery['city'], 'delivery_postcode' => $order->delivery['postcode'], 'delivery_state' => $order->delivery['state'], 'delivery_country' => $order->delivery['country']['title'], 'delivery_address_format_id' => $order->delivery['format_id'], 'billing_name' => $order->billing['firstname'] . ' ' . $order->billing['lastname'], 'billing_company' => $order->billing['company'], 'billing_street_address' => $order->billing['street_address'], 'billing_suburb' => $order->billing['suburb'], 'billing_city' => $order->billing['city'], 'billing_postcode' => $order->billing['postcode'], 'billing_state' => $order->billing['state'], 'billing_country' => $order->billing['country']['title'], 'billing_address_format_id' => $order->billing['format_id'], 'payment_method' => $order->info['payment_method'], 'cc_type' => $order->info['cc_type'], 'cc_owner' => $order->info['cc_owner'], 'cc_number' => $order->info['cc_number'], 'cc_expires' => $order->info['cc_expires'], 'date_purchased' => 'now()', 'orders_status' => $order->info['order_status'], 'currency' => $order->info['currency'], 'currency_value' => $order->info['currency_value'], //Order IP Record BEGIN 'ipaddy' => $ip, 'ipisp' => $isp); //Order IP Record END tep_db_perform(TABLE_ORDERS, $sql_data_array); $insert_id = tep_db_insert_id(); for ($i=0, $n=sizeof($order_totals); $i<$n; $i++) { $sql_data_array = array('orders_id' => $insert_id, 'title' => $order_totals[$i]['title'], 'text' => $order_totals[$i]['text'], 'value' => $order_totals[$i]['value'], 'class' => $order_totals[$i]['code'], 'sort_order' => $order_totals[$i]['sort_order']); tep_db_perform(TABLE_ORDERS_TOTAL, $sql_data_array); } $customer_notification = (SEND_EMAILS == 'true') ? '1' : '0'; $sql_data_array = array('orders_id' => $insert_id, 'orders_status_id' => $order->info['order_status'], 'date_added' => 'now()', 'customer_notified' => $customer_notification, 'comments' => $order->info['comments']); tep_db_perform(TABLE_ORDERS_STATUS_HISTORY, $sql_data_array); // initialized for the email confirmation $products_ordered = ''; $subtotal = 0; $total_tax = 0; // begin product bundles function reduce_bundle_stock($bundle_id, $qty_sold) { from then on there's the rest of change of step 8 any clue where I have to add: $any_bundle_only = false; $products = $cart->get_products(); for ($i=0, $n=sizeof($products); $i<$n; $i++) { if ($products[$i]['sold_in_bundle_only'] == 'yes') $any_bundle_only = true; } if ($any_bundle_only) tep_redirect(tep_href_link(FILENAME_SHOPPING_CART));
  2. alcova

    Search Tag Cloud

    Hi, I'm using this contribution on my website www.alcova.biz/index.php I don't know if the problem that Ident pointed out is real (counting the number of items found and not just a single search... ) the problem on my site is that apparently after just few days all the words have the same weight (more or less) and thus there's no real highlights on the most searched ones. is there a way to fix that? and have them regularly reset or just dropping the ones that haven't been searched in a while? thank you
  3. alcova

    Event Calender

    hi everyone.. I have a shop www.alcova.biz and I've been using the calendar in the past. lately my provider has upgraded to mysql 5 and today I just realized that the event manager doesn't insert new events. can someone help me sort this problem out?
  4. alcova

    Google XML Sitemap SEO

    ok I'll check and let you know. :)
  5. alcova

    Google XML Sitemap SEO

    Hi, I installed the contrib a couple of days ago and it works fine. I also followed the instructions about the crontab. what I get in the daily mail looks like this: /home/alcova/public_html/googlesitemap/index.php: line 2: /CmdTool.log: Permission denied /home/alcova/public_html/googlesitemap/index.php: line 3: access-logs: command not found /home/alcova/public_html/googlesitemap/index.php: line 4: access-logs: command not found /home/alcova/public_html/googlesitemap/index.php: line 5: access-logs: command not found /home/alcova/public_html/googlesitemap/index.php: line 6: access-logs: command not found /home/alcova/public_html/googlesitemap/index.php: line 7: access-logs: command not found /home/alcova/public_html/googlesitemap/index.php: line 8: access-logs: command not found /home/alcova/public_html/googlesitemap/index.php: line 9: access-logs: command not found /home/alcova/public_html/googlesitemap/index.php: line 10: access-logs: command not found /home/alcova/public_html/googlesitemap/index.php: line 11: access-logs: command not found /home/alcova/public_html/googlesitemap/index.php: line 12: access-logs: command not found /home/alcova/public_html/googlesitemap/index.php: line 13: access-logs: command not found /home/alcova/public_html/googlesitemap/index.php: line 14: access-logs: command not found /home/alcova/public_html/googlesitemap/index.php: line 15: access-logs: command not found /home/alcova/public_html/googlesitemap/index.php: line 16: access-logs: command not found /home/alcova/public_html/googlesitemap/index.php: line 17: access-logs: command not found /home/alcova/public_html/googlesitemap/index.php: line 18: access-logs/: is a directory /home/alcova/public_html/googlesitemap/index.php: line 20: syntax error near unexpected token `'../'' /home/alcova/public_html/googlesitemap/index.php: line 20: ` chdir('../');' I have no clue if that's what it should look like or if it means there are problems I'm not aware of. any suggestion?
  6. sorry if this topic has been discussed before, but I've searched the thread and couldn't find an answer. I'd like to add the product model to the url. how can this be done?
  7. alcova

    [CONTRIBUTION] CCGV (trad)

    Hi everybody, I have just realized that I have some problems with teh CCGV contribution. the shop is www.alcova.biz when you register the system sends you a welcome email with -among other stuff- a welcome discount code. It should entitle you for a 5% on your first order (I set it so that it can be used one time per each customer). But today I received an order and realized the discount was much higher than it should be. The total (without shipping) was 134.70 and the discount was 18.71!!! I've tried again, creating a new order with other stuff. Again, the total was 144.80 and the discount 14.48 (this time a "clean" 10%) Does anybody have any clue why is it happening? Could you try and tell me what happens when you create a new order? Is there someone able and willing to help me fix this (I'm happy to pay)? ciao
  8. I'm interested in getting instruction on how to update from a previous installation. where can I find them?
  9. jarvis, I made a mistake while writing the example here on the forum. All the columns in the excel file are named correctly. any clue?
  10. Nobody had this problem before?
  11. Hi everyone, I just encountered a problem using EP. I am building a shop that has products of different kind, this means that they can have various attributes each with 10 or more options. today it has happened for the first time that the excel file couldn't write all the option in a single row, so I thought "ok.. I will upload the attributes for the same product using 2 text file instead than just one". well.. I can't. I will make an example to simplify. I have a first file with a set of attributes (Colours) like this (I'll write in colums rather than lines to make it more readable): v_attribute_options_id_1 1 v_attribute_options_name_1_4 Colore v_attribute_options_name_1_5 Colour v_attribute_values_id_1_1 1080 v_attribute_values_price_1_1 0 v_attribute_values_name_1_1_4 Nero/Bianco v_attribute_values_name_1_1_5 Black/White and so on... Then I have a second file with a different set of attributes (sizes). The second file doesn't have the columns of the previous option/attributes. v_attribute_options_id_2 2 v_attribute_options_name_2_4 Taglia v_attribute_options_name_2_5 Size v_attribute_values_id_2_1 2005 v_attribute_values_price_2_1 0 v_attribute_values_name_2_1_4 S v_attribute_values_name_2_1_5 S and so on... I thought that the two files should "overlap" each other and add the second set of attributes to the first one. But when I do upload the 2 files I can only see the first set of attributes. I've deleted the products and tried inverting the files (loading the file #2 first) and -even more strange!- the second set would still not load!! The only way to make EP load the second file is to add in it also the columns v_attribute_options_id_1 1 v_attribute_options_name_1_4 Colore v_attribute_options_name_1_5 Colour Is that normal? I'm a bit afraid, as I think in the end I will have over 30 sets of attributes!! Does it mean that to add the 30th set I have to keep in the files all the 3 essential columns for each of the 29 previous attributes?? Gosh.. hope I was able to explain the problem... is there any way to fix this? If someone needs it I could post the code of my EP file. thanks for any help! Stefano
  12. alcova

    [CONTRIBUTION] CCGV (trad)

    if you need to see some of the code in the pages, regarding the problems mentioned above, just ask!!
  13. alcova

    [CONTRIBUTION] CCGV (trad)

    Hi everyone, I have installed CCGV (trad) and it works fine apart from some small problems I'd like to fix. 1) When I send a Gift Voucher I can't redeem it using the link provided in the email (I get an error message saying the code is invalid or has been already redeemed). The code works fine if I input it during the checkout process. 2) The system ALWAYS uses the credits in the gift voucher balance during the checkout of both virtual and non virtual products even when the box "Tick to use Gift Voucher account balance" is not selected. This can be a problem if a customer wants to save the balance for a later time (or use it to send a gift voucher to someone after the purchase). This problem has risen all of a sudden.. (after redeeming some gift vouchers using the code during the checkout process) and now it forces me to use the vouchers' balance to buy new vouchers... :-S anyone has had similar problems? thanks for the help. ciao Stefano
  14. Hi, sorry if I ask something that has already been solved, but browsing through over 100 pages would take too long and I couldn't find anything that could help me using the search engine. so here it is: I have SEO Urls installed but when I switch it on I get an HTTP 404 error on all pages. the links looks something like: http://www.mysite.com/cybermate-p-45.html?...36f2a2f201c039c any clue about what I have to check to make it work? thanks
  15. Anita, before upgrading to version 4 I wanted to know if this new version is able to show the products' code instead of just the name in the admin panel. I have several products with similar or identical name in my catalog, but they are very different products indeed.. so the only way for me to recognize them is by their code. in a previous thread you sent a change to products_options.php file to show the code and not the name. I hope that this improvement has been brought into version 4.0. if no, how can I do that in the new version? thanks Stefano
  16. surfalot, I just saw your reply. I will give it a try and will report to you. Only I don't know if I'll be able to do the test this week or next one... ciao
  17. hii, is it possible that no one else has the same problem I have, ie to have the product code in the drop down menus instead of the product name? I have too many products with similar -or identical- names and it would be an hazard every time. suggestions? solutions? thanks ciao
  18. alcova

    [Contribution] STS v4

    Iggy, I didn't like the default product_info page layout, so I modified its look and feel of the product_info page and I'd like to leave it that way. I didn't understand where I have to make the change you suggested. below you find the code of the file includes/sts_templates/test/content/product_info.php.html. Could you please tell me where do I have to make the changes? <?php DEFINE ('STS_CONTENT_END_CHAR', '$'); ?> <table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td valign="top" bgcolor="#FFFFFF">$startform$ <table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td width="4" rowspan="4"><img src="/images/spacer.gif" width="3" height="1"></td> <td colspan="3"><table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td valign="top" class="pageHeading"><div align="left">$productname$<br> <span class="smallText">[$productmodel$]</span></div></td> <td valign="top" class="pageHeading"><div align="right"> $regularprice$</div></td> </tr> </table></td> <td width="4" rowspan="4"><img src="/images/spacer.gif" width="3" height="1"></td> </tr> <tr> <td colspan="3" bgcolor="#CC0000"><img src="/images/spacer.gif" width="1" height="1"></td> </tr> <tr> <td colspan="3"><img src="/images/spacer.gif" width="1" height="10"></td> </tr> <tr> <td width="255" valign="top">$imagelarge$</td> <td width="4"><img src="/images/spacer.gif" width="3" height="1"></td> <td width="188" valign="top" class="main">$productdesc$<br> <br> </td> </tr> <tr> <td> </td> <td colspan="3"><img src="/images/spacer.gif" width="1" height="10"></td> <td> </td> </tr> <tr> <td> </td> <td colspan="3"><table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td colspan="2" class="main"><strong>$optionheader$</strong></td> </tr> <tr> <td width="20%" class="main">$optionnames$ </td> <td width="80%" class="main">$optionchoices$ </td> </tr> </table></td> <td> </td> </tr> <tr> <td><img src="/images/spacer.gif" width="1" height="10"></td> <td colspan="3"><img src="/images/spacer.gif" width="1" height="10"></td> <td><img src="/images/spacer.gif" width="1" height="10"></td> </tr> <tr> <td> </td> <td colspan="3"><table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td class="main">$reviews$</td> <td class="main"><div align="right"><a href="$moreinfourl">$moreinfolabel$</a></div></td> </tr> <tr> <td colspan="2"><img src="/images/spacer.gif" width="1" height="10"></td> </tr> <tr> <td><div align="left"><a href="$reviewsurl$">$reviewsbutton$</a></div></td> <td><div align="right">$addtocartbutton$</div></td> </tr> <tr> <td colspan="2"><img src="/images/spacer.gif" width="1" height="10"></td> </tr> <tr> <td colspan="2"> <table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td class="main">$relateditems$ </td> </tr> </table></td> </tr> <tr> <td colspan="2"><img src="/images/spacer.gif" width="1" height="10"></td> </tr> <tr> <td colspan="2" class="main">$alsopurchased$</td> </tr> <tr> <td colspan="2"><img src="/images/spacer.gif" width="1" height="10"></td> </tr> <tr> <td colspan="2" class="smallText">$productdatelabel$ $productdate$</td> </tr> <tr> <td> </td> <td> </td> </tr> </table></td> <td> </td> </tr> </table> $endform$</td> </tr> </table>
  19. so, no one is using Mopics and STS 4 together?? I have modified the STS template of the product page but I have no idea how to add the extra images to that page. SOmeone suggested to just use the $content$ placeholder, but that's strange, as the templates have a single placeholder for each block (image, description, price, options, etc). So I have to create a $morepics$ block that shows up only if there are extra images. any suggestions?
  20. alcova

    [Contribution] STS v4

    Hi Bill and everyone, I still can't find a solution to the 2 big (for me.. lol) problems I'm having with STS. 1) STS and More Pics 6 I have no idea how to create a placeholder for the extra images that More Pics generates. I've modified the L&F of the products' page, so it's not just a matter of using $content$. I would need a $morepics$ placeholder (to be displayed only IF there is any extra image). I'm sure someone has the solution somewhere... so if someone could please enlighten me I would appreciate the help. 2) As I modified the page layout I'm not able to show correctly the Special products. Or better, I show them correctly BUT the price. The page, as I have them now only show the original price. How do I create a template just for the Special products (where the original price is barred and the new special one is Red)? thanks to anyone who will help me with that..
  21. I don't think it's that simple.. :( shouldn't you have to tell STS to go and get the pics generated by mopics somewhere . or am I really missing something??
  22. alcova

    [Contribution] STS v4

    Hi, the date is either blank or set to 31 dec 2009 I see the prices correctly in the specials' box (original price and the new one) and in the category list of products but if I open the product's page I only get the original one (with the standard style and not with the barred one). Any suggestion? Do I have to put a placeholder in the product page to show the new price? if so, which one? And why doesn't the old price show up as barred?
  23. alcova

    [Contribution] STS v4

    I have a small problem: I have customized my product page and stylesheet to my needs, but I noticed that when I open a product that has a special price, I only see the regular price and not the special one. Moreover the orginal price should be barred, but it's shown with the regular style as always. What can I do to make specials work fine, with the 2 prices (barred original price and red discounted one?) do I have to create a specific template? if so, how do I tell STS to use it to create the specials page? thanks
  24. One more improvement to be done: how can I have the drop down menus in the admin display the Product model instead of the name? I have too many products with the same name (ie mini skirt) so I need a unique way to identify them. Anyone has a simple solution? here's the code that generates the drop downs. If someone can point out how to make one work I think I can fix the others too: <td class="smallText"> <select name="products_id_master"> <?php $products = tep_db_query("select p.products_id, pd.products_name from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd where pd.products_id = p.products_id and pd.language_id = '" . $languages_id . "' order by pd.products_name"); while($products_values = tep_db_fetch_array($products)) { if ($attributes_values['pop_products_id_master'] == $products_values['products_id']) { echo "\n" . '<option name="' . $products_values['products_name'] . '" value="' . $products_values['products_id'] . '" SELECTED>' . $products_values['products_name'] . '</option>'; } else { echo "\n" . '<option name="' . $products_values['products_name'] . '" value="' . $products_values['products_id'] . '">' . $products_values['products_name'] . '</option>'; } } ?> </select> </td>
  25. ok I finally did it. I've run through a number of problems trying to make Easy Populate and More Pics work together. Not because the contrib have problems by themselves, it's just that I'm not a php pro and sometimes the EP documentation is not error proof. So let's start from the beginning. The first error I got was after installing EP. When importing the same file I downloaded I got an error: the upload log in EP page ended with a [TEP STOP] After a while I found a post on an italian OSC forum that said it was due to apex characters in the text and that they had to replaced with \'. So if you run into such a problem simply do a search for all ' and replace them with \' it should work fine second problem I had was with finding exactly what to modify in the easypopulate file to insert the mopics fiels (products_subimage1, products_subimage2, products_subimage3, products_subimage4, products_subimage5, products_subimage6) After a lot of try-and-errors (mostly errors... LOL) I finally was able to put everything in the right place and make it work. I had to go through the file a few times to make sure I was able to download and the upload the changes. Infact the last problem I had was that I could download the extra files, but EP didn't make any changes when I uploaded the new file. All was because of a ; instead of a , So if anyone might appreciate it I will post "my" EP file with extra product fields. If you need your own fields you can look for products_subimage1 (and following) and change those fields with your own. Here it is: <?php // Current EP Version $curver = '2.76c-MS2'; /* $Id: easypopulate.php,v 2.75 2005/04/05 AL 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. // //t Please set DOCUMENT_ROOT to $DOCUMENT_ROOT in your /catalog/admin/includes/configure.php $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 = false; //**** Size of products_model in products table **** // set this to the size of your model number field in the db. We check to make sure all models are no longer than this value. // this prevents the database from getting fubared. Just making this number bigger won't help your database! They must match! global $modelsize; $modelsize = 20; //**** 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 = false; // **** 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 = 3; // 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 to true, if you use QTYpro and want to set attributes stock with EP. global $products_attributes_stock; $products_attributes_stock = false; // 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.alcova.biz/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.alcova.biz/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 = false; // **************************************** // 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', 'v_products_upc' ); //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 $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']; //// attributes stock add start if ( $products_attributes_stock == true ) { $stock_attributes = $attribute_options['products_options_id'].'-'.$attribute_values['products_options_values_id']; $stock_quantity_query = tep_db_query("select products_stock_quantity from " . TABLE_PRODUCTS_STOCK . " where products_id = '" . (int)$row['v_products_id'] . "' and products_stock_attributes = '" . $stock_attributes . "'"); $stock_quantity = tep_db_fetch_array($stock_quantity_query); $row['v_attribute_values_stock_' . $attribute_options_count . '_' . $attribute_values_count] = $stock_quantity['products_stock_quantity']; } //// attributes stock add end 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_subimage1' => $iii++, 'v_products_subimage2' => $iii++, 'v_products_subimage3' => $iii++, 'v_products_subimage4' => $iii++, 'v_products_subimage5' => $iii++, 'v_products_subimage6' => $iii++, '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++; for ($i=0, $n=sizeof($languages); $i<$n; $i++) { $l_id = $languages[$i]['id']; $key4 = 'v_attribute_values_name_' . $attribute_options_count . '_' . $attribute_values_count . '_' . $l_id; $header_array[$key4] = $iii++; } $key5 = 'v_attribute_values_price_' . $attribute_options_count . '_' . $attribute_values_count; $header_array[$key5] = $iii++; //// attributes stock add start if ( $products_attributes_stock == true ) { $key6 = 'v_attribute_values_stock_' . $attribute_options_count . '_' . $attribute_values_count; $header_array[$key6] = $iii++; } //// attributes stock add end $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_subimage1 as v_products_subimage1, p.products_subimage2 as v_products_subimage2, p.products_subimage3 as v_products_subimage3, p.products_subimage4 as v_products_subimage4, p.products_subimage5 as v_products_subimage5, p.products_subimage6 as v_products_subimage6, 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_subimage1 as v_products_subimage1, p.products_subimage2 as v_products_subimage2, p.products_subimage3 as v_products_subimage3, p.products_subimage4 as v_products_subimage4, p.products_subimage5 as v_products_subimage5, p.products_subimage6 as v_products_subimage6, 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++; for ($i=0, $n=sizeof($languages); $i<$n; $i++) { $l_id = $languages[$i]['id']; $key4 = 'v_attribute_values_name_' . $attribute_options_count . '_' . $attribute_values_count . '_' . $l_id; $header_array[$key4] = $iii++; } $key5 = 'v_attribute_values_price_' . $attribute_options_count . '_' . $attribute_values_count; $header_array[$key5] = $iii++; //// attributes stock add start if ( $products_attributes_stock == true ) { $key6 = 'v_attribute_values_stock_' . $attribute_options_count . '_' . $attribute_values_count; $header_array[$key6] = $iii++; } //// attributes stock add end $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(
×