Jump to content

djmonkey1

Members
  • Content count

    2,114
  • Joined

  • Last visited

Everything posted by djmonkey1

  1. djmonkey1

    Order Editor for MVS

    This is the support thread for Order Editor for MVS. The contribution will be available shortly; I wanted to have the URL for this thread in the package.
  2. Some people have emailed me about problems with this contribution, so I decided to open a support thread for it. First off, there's a bug in the current release (v2.0). Under certain conditions product attributes will not be passed to the cart correctly. To fix this perform the following steps: In application_top.php change // customer adds multiple products from the products_listing page case 'add_multiple' : while ( list( $key, $val ) = each( $HTTP_POST_VARS ) ) { if (substr($key,0,11) == "Qty_ProdId_" || substr($key,0,11) == "Qty_NPrdId_") { $prodId = substr($key, 11); $qty = $val; if ($qty <= 0 ) continue; // Choose here whether or not you want ot replace the quantity, or add to. IMPORTANT CHOOSE ONLY ONE METHOD!!! // uncomment the following line to allow incrementing the quantity $cart->add_cart($prodId, $cart->get_quantity(tep_get_uprid($prodId, $HTTP_POST_VARS['id']))+($qty), $HTTP_POST_VARS['id']); // uncomment the following line to disallow incrementing the quantity //$cart->add_cart($prodId, $qty, $HTTP_POST_VARS['id']); } } tep_redirect(tep_href_link($goto, tep_get_all_get_params($parameters))); break; to this: // customer adds multiple products from the products_listing page case 'add_multiple' : while ( list( $key, $val ) = each( $HTTP_POST_VARS ) ) { if (substr($key,0,11) == "Qty_ProdId_" || substr($key,0,11) == "Qty_NPrdId_") { $prodId = substr($key, 11); $qty = $val; if ($qty <= 0 ) continue; if(isset($HTTP_POST_VARS["id_$prodId"]) && is_array($HTTP_POST_VARS["id_$prodId"])) { // We have attributes $cart->add_cart($prodId, $cart->get_quantity(tep_get_uprid($prodId,$HTTP_POST_VARS["id_$prodId"]))+$qty, $HTTP_POST_VARS["id_$prodId"]); } else { // No attributes $cart->add_cart($prodId, $cart->get_quantity($prodId)+$qty); } } } tep_redirect(tep_href_link($goto, tep_get_all_get_params($parameters))); break; Note in this second step shown below it's just a matter of commenting out line 153 and uncommenting out line 152 in product_listing_col.php. Make sure the change you make is under case 'PRODUCT_LIST_MULTIPLE': (lines 128-157). In product_listing_col.php change //$lc_text .= tep_draw_pull_down_menu('id_'.$listing['products_id'].'[' . $products_options_name['products_options_id'] . ']', $products_options_array, $cart->contents[$HTTP_GET_VARS['products_id']]['attributes'][$products_options_name['products_options_id']]); $lc_text .= tep_draw_pull_down_menu('id[' . $products_options_name['products_options_id'] . ']', $products_options_array, $cart->contents[$HTTP_GET_VARS['products_id']]['attributes'][$products_options_name['products_options_id']]); to this: $lc_text .= tep_draw_pull_down_menu('id_'.$listing['products_id'].'[' . $products_options_name['products_options_id'] . ']', $products_options_array, $cart->contents[$HTTP_GET_VARS['products_id']]['attributes'][$products_options_name['products_options_id']]); //$lc_text .= tep_draw_pull_down_menu('id[' . $products_options_name['products_options_id'] . ']', $products_options_array, $cart->contents[$HTTP_GET_VARS['products_id']]['attributes'][$products_options_name['products_options_id']]);
  3. Hi- I'm currently working on the contribution Add Multiple Products to Cart, in columns, for SPPC http://www.oscommerce.com/community/contributions,3606/ although what I'm trying to accomplish would apply to a number of contributions in the Add Multiple Products line. The problem is simple: in it's current form, the contribution doesn't display product attributes through the product_listing module (the file for this contrib is actually called product_listing_multi_col.php), though this is a requirement to get it to be completely useful. I've been playing around with it trying to add in product attributes with little success. Basically I don't know what I'm doing- it was no problem to make this contribution by merging different existing mods together, but adding something new is another story. In it's current form the file doesn't break the page but it doesn't work either. Also it's weird because the first line is a <form> tag. I picked this up from one of the original contributions and haven't done away with it yet, but it does need to change. Here's the whole page: <form name="cart_multi" method="post" action="<?php echo tep_href_link(FILENAME_SHOPPING_CART, tep_get_all_get_params(array('action')) . 'action=add_multi', 'NONSSL'); ?>"> <?php /* original: $Id: product_listing.php,v 1.44 2003/06/09 22:49:43 hpdl Exp $ new: product_listing_col.php modified for SPPC 2005/03/10 Adam Bradley corrected for proper HTML 2005/07/10 JanZ merged with/adpapted for product_listing_multi mod- djmonkey1 2005/09/30 (this is being used as product_listing_multi_col) osCommerce, Open Source E-Commerce Solutions http://www.oscommerce.com Copyright (c) 2003 osCommerce Released under the GNU General Public License */ $listing_split = new splitPageResults($listing_sql, MAX_DISPLAY_SEARCH_RESULTS, 'p.products_id'); if ( ($listing_split->number_of_rows > 0) && ( (PREV_NEXT_BAR_LOCATION == '1') || (PREV_NEXT_BAR_LOCATION == '3') ) ) { ?> <table border="0" width="100%" cellspacing="0" cellpadding="2"> <tr><td> <table border="0" width="100%" cellspacing="0" cellpadding="0"> <tr> <td align="right" class="main"><?php echo tep_image_submit('button_in_cart.gif', IMAGE_BUTTON_IN_CART); ?></td> </tr> </table> </td></tr> <tr> <td class="smallText"><?php echo $listing_split->display_count(TEXT_DISPLAY_NUMBER_OF_PRODUCTS); ?></td> <td class="smallText" align="right"><?php echo TEXT_RESULT_PAGE . ' ' . $listing_split->display_links(MAX_DISPLAY_PAGE_LINKS, tep_get_all_get_params(array('page', 'info', 'x', 'y'))); ?></td> </tr> </table> <?php } $list_box_contents = array(); for ($col=0, $n=sizeof($column_list); $col<$n; $col++) { switch ($column_list[$col]) { case 'PRODUCT_LIST_MODEL': $lc_text = TABLE_HEADING_MODEL; $lc_align = ''; break; case 'PRODUCT_LIST_NAME': $lc_text = TABLE_HEADING_PRODUCTS; $lc_align = ''; break; case 'PRODUCT_LIST_MANUFACTURER': $lc_text = TABLE_HEADING_MANUFACTURER; $lc_align = ''; break; case 'PRODUCT_LIST_PRICE': $lc_text = TABLE_HEADING_PRICE; $lc_align = 'right'; break; case 'PRODUCT_LIST_QUANTITY': $lc_text = TABLE_HEADING_QUANTITY; $lc_align = 'right'; break; // START: display min. order. qty. mod case 'PRODUCT_LIST_MIN_ORDER_QTY': $lc_align = 'center'; $lc_text = ' ' . TABLE_HEADING_MIN_ORDER_QTY . ' '; break; // END: display min. order. qty. mod case 'PRODUCT_LIST_WEIGHT': $lc_text = TABLE_HEADING_WEIGHT; $lc_align = 'right'; break; case 'PRODUCT_LIST_IMAGE': $lc_text = TABLE_HEADING_IMAGE; $lc_align = 'center'; break; case 'PRODUCT_LIST_BUY_NOW': $lc_text = TABLE_HEADING_BUY_NOW; $lc_align = 'center'; break; case 'PRODUCT_LIST_ATTRIBUTES': $lc_text = TABLE_HEADING_PRODUCTS_OPTIONS; $lc_align = 'center'; break; } if ( ($column_list[$col] != 'PRODUCT_LIST_BUY_NOW') && ($column_list[$col] != 'PRODUCT_LIST_IMAGE') ) { $lc_text = tep_create_sort_heading($HTTP_GET_VARS['sort'], $col+1, $lc_text); } $list_box_contents[0][] = array('align' => $lc_align, 'params' => 'class="productListing-heading"', 'text' => ' ' . $lc_text . ' '); } if ($listing_split->number_of_rows > 0) { $row = 0; $rows = 0; $column = 0; $listing_query = tep_db_query($listing_split->sql_query); // BOF Separate Pricing per Customer $no_of_listings = tep_db_num_rows($listing_query); // global variable (session) $sppc_customer_group_id -> local variable customer_group_id if(!tep_session_is_registered('sppc_customer_group_id')) { $customer_group_id = '0'; } else { $customer_group_id = $sppc_customer_group_id; } while ($_listing = tep_db_fetch_array($listing_query)) { $listing[] = $_listing; $list_of_prdct_ids[] = $_listing['products_id']; } // next part is a debug feature, when uncommented it will print the info that this module receives /* echo '<pre>'; print_r($listing); echo '</pre>'; */ $select_list_of_prdct_ids = "products_id = '".$list_of_prdct_ids[0]."' "; if ($no_of_listings > 1) { for ($n = 1; $n < count($list_of_prdct_ids); $n++) { $select_list_of_prdct_ids .= "or products_id = '".$list_of_prdct_ids[$n]."' "; } } // get all product prices for products with the particular customer_group_id // however not necessary for customer_group_id = 0 if ($customer_group_id != '0') { $pg_query = tep_db_query("select pg.products_id, customers_group_price as price from " . TABLE_PRODUCTS_GROUPS . " pg where (".$select_list_of_prdct_ids.") and pg.customers_group_id = '".$customer_group_id."' "); // $no_of_pg_products = tep_db_num_rows($pg_query); while ($pg_array = tep_db_fetch_array($pg_query)) { $new_prices[] = array ('products_id' => $pg_array['products_id'], 'products_price' => $pg_array['price'], 'specials_new_products_price' => '', 'final_price' => $pg_array['price']); } for ($x = 0; $x < $no_of_listings; $x++) { // replace products prices with those from customers_group table if(!empty($new_prices)) { for ($i = 0; $i < count($new_prices); $i++) { if( $listing[$x]['products_id'] == $new_prices[$i]['products_id'] ) { $listing[$x]['products_price'] = $new_prices[$i]['products_price']; $listing[$x]['specials_new_products_price'] = $new_prices[$i]['specials_new_products_price']; $listing[$x]['final_price'] = $new_prices[$i]['final_price']; } } } // end if(!empty($new_prices) $listing[$x]['specials_new_products_price'] = ''; // makes sure that a retail specials price doesn't carry over to another customer group $listing[$x]['final_price'] = $listing[$x]['products_price']; // final price should not be the retail special price } // end for ($x = 0; $x < $no_of_listings; $x++) } // end if ($customer_group_id != '0') // an extra query is needed for all the specials $specials_query = tep_db_query("select products_id, specials_new_products_price from " . TABLE_SPECIALS . " where (".$select_list_of_prdct_ids.") and status = '1' and customers_group_id = '" .$customer_group_id. "'"); while ($specials_array = tep_db_fetch_array($specials_query)) { $new_s_prices[] = array ('products_id' => $specials_array['products_id'], 'products_price' => '', 'specials_new_products_price' => $specials_array['specials_new_products_price'] , 'final_price' => $specials_array['specials_new_products_price']); } // add the correct specials_new_products_price and replace final_price for ($x = 0; $x < $no_of_listings; $x++) { if(!empty($new_s_prices)) { for ($i = 0; $i < count($new_s_prices); $i++) { if( $listing[$x]['products_id'] == $new_s_prices[$i]['products_id'] ) { $listing[$x]['specials_new_products_price'] = $new_s_prices[$i]['specials_new_products_price']; $listing[$x]['final_price'] = $new_s_prices[$i]['final_price']; } } } // end if(!empty($new_s_prices) } // end for ($x = 0; $x < $no_of_listings; $x++) // while ($listing = tep_db_fetch_array($listing_query)) { (was original code) // WARNING the code assumes there are three products per row. To use a different number change the number // at line 195: if ($column >= 3) and the code to fill up the table row below that accordingly $counter = $row; $class_for_buy_now = 'class="productListing-odd"'; $list_box_contents[$row] = array('params' => 'class="productListing-odd"'); for ($x = 0; $x < $no_of_listings; $x++) { $rows++; if (($rows/2) == floor($rows/2) && ($row > $counter)) { $list_box_contents[$row] = array('params' => 'class="productListing-even"'); $class_for_buy_now = 'class="productListing-even"'; $counter = $row; } else { if ($row > $counter) { $list_box_contents[$row] = array('params' => 'class="productListing-odd"'); $class_for_buy_now = 'class="productListing-odd"'; $counter = $row; } } $product_contents = array(); for ($col=0, $n=sizeof($column_list); $col<$n; $col++) { $lc_align = ''; switch ($column_list[$col]) { case 'PRODUCT_LIST_MODEL': $lc_align = ''; $lc_text = ' ' . $listing[$x]['products_model'] . ' '; break; case 'PRODUCT_LIST_NAME': $lc_align = ''; if (isset($HTTP_GET_VARS['manufacturers_id'])) { $lc_text = '<a href="' . tep_href_link(FILENAME_PRODUCT_INFO, 'manufacturers_id=' . $HTTP_GET_VARS['manufacturers_id'] . '&products_id=' . $listing[$x]['products_id']) . '">' . $listing[$x]['products_name'] . '</a>'; } else { $lc_text = ' <a href="' . tep_href_link(FILENAME_PRODUCT_INFO, ($cPath ? 'cPath=' . $cPath . '&' : '') . 'products_id=' . $listing[$x]['products_id']) . '">' . $listing[$x]['products_name'] . '</a> '; } break; case 'PRODUCT_LIST_MANUFACTURER': $lc_align = ''; $lc_text = ' <a href="' . tep_href_link(FILENAME_DEFAULT, 'manufacturers_id=' . $listing[$x]['manufacturers_id']) . '">' . $listing[$x]['manufacturers_name'] . '</a> '; break; case 'PRODUCT_LIST_PRICE': $lc_align = 'right'; if (tep_not_null($listing[$x]['specials_new_products_price'])) { $lc_text = ' <s>' . $currencies->display_price($listing[$x]['products_price'], tep_get_tax_rate($listing[$x]['products_tax_class_id'])) . '</s> <span class="productSpecialPrice">' . $currencies->display_price($listing[$x]['specials_new_products_price'], tep_get_tax_rate($listing[$x]['products_tax_class_id'])) . '</span> '; } else { $lc_text = ' ' . $currencies->display_price($listing[$x]['products_price'], tep_get_tax_rate($listing[$x]['products_tax_class_id'])) . ' '; } break; case 'PRODUCT_LIST_QUANTITY': $lc_align = 'right'; $lc_text = ' ' . $listing[$x]['products_quantity'] . ' '; break; // START: display min. order. qty. mod case 'PRODUCT_LIST_MIN_ORDER_QTY': $lc_align = ''; $lc_text = ' ' . $listing[$x]['products_min_order_qty'] . ' '; break; // END: display min. order. qty. mod case 'PRODUCT_LIST_WEIGHT': $lc_align = 'right'; $lc_text = ' ' . $listing[$x]['products_weight'] . ' '; break; case 'PRODUCT_LIST_IMAGE': $lc_align = 'center'; if (isset($HTTP_GET_VARS['manufacturers_id'])) { $lc_text = '<a href="' . tep_href_link(FILENAME_PRODUCT_INFO, 'manufacturers_id=' . $HTTP_GET_VARS['manufacturers_id'] . '&products_id=' . $listing[$x]['products_id']) . '">' . tep_image(DIR_WS_IMAGES . $listing[$x]['products_image'], $listing[$x]['products_name'], SMALL_IMAGE_WIDTH, SMALL_IMAGE_HEIGHT) . '</a>'; } else { $lc_text = ' <a href="' . tep_href_link(FILENAME_PRODUCT_INFO, ($cPath ? 'cPath=' . $cPath . '&' : '') . 'products_id=' . $listing[$x]['products_id']) . '">' . tep_image(DIR_WS_IMAGES . $listing[$x]['products_image'], $listing[$x]['products_name'], SMALL_IMAGE_WIDTH, SMALL_IMAGE_HEIGHT) . '</a> '; } break; // EOF Separate Pricing per Customer case 'PRODUCT_LIST_BUY_NOW': $lc_align = 'center'; //$lc_text = '<a href="' . tep_href_link(basename($PHP_SELF), tep_get_all_get_params(array('action')) . 'action=buy_now&products_id=' . $listing['products_id']) . '">' . tep_image_button('button_buy_now.gif', IMAGE_BUTTON_BUY_NOW) . '</a> '; $lc_text = '<input type="text" name="add_id['.$number_of_products.']" value="0" size="4">'; $lc_text .= '<input type="hidden" name="products_id['.$number_of_products.']" value="'.$listing[$x]['products_id'].'">'; break; case 'PRODUCT_LIST_ATTRIBUTES': $lc_align = 'center'; $lc_text = '<select name="products_options_name['.$products_options_name.']">'; $lc_text = '<option value="products_options_name['.$products_options_id.']">'; break; break; } $product_contents[] = $lc_text; } $lc_text = implode('<br>', $product_contents); $list_box_contents[$row][$column] = array('align' => 'center', 'params' => 'class="productListing-data"', 'text' => $lc_text); $column ++; if ($x == ($no_of_listings -1)) { // fill up the remainder of the table row with empty cells, assumes three products per row! if ($column == '1') { $list_box_contents[$row][$column + 1] = array('align' => 'center', 'params' => 'class="productListing-data"', 'text' => " "); $column ++; } if ($column == '2') { $list_box_contents[$row][$column + 1] = array('align' => 'center', 'params' => 'class="productListing-data"', 'text' => " "); } } if ($column >= 3 || $x == ($no_of_listings -1) ) { $row ++; // we start a new tr here with $list_box_contents $list_box_contents[$row] = array('params' => $class_for_buy_now); $column = 0; // make sure three tables per row are filled if (sizeof($buy_now_button_array) == 1) { $buy_now_button_array[] = " "; } if (sizeof($buy_now_button_array) == 2) { $buy_now_button_array[] = " "; } /* foreach ($buy_now_button_array as $column1 => $lc_text1) { $list_box_contents[$row][$column1] = array('align' => 'center', 'params' => 'class="productListing-data"', 'text' => $lc_text1); } */ unset($buy_now_button_array); $column = 0; $row ++; // $counter is now smaller than $row, a new $list_box_contents[] (table row) will be started } } // end for ($x = 0; $x < $no_of_listings; $x++) new productListingBox($list_box_contents); } else { $list_box_contents = array(); $list_box_contents[0] = array('params' => 'class="productListing-odd"'); $list_box_contents[0][] = array('params' => 'class="productListing-data"', 'text' => TEXT_NO_PRODUCTS); new productListingBox($list_box_contents); } if ( ($listing_split->number_of_rows > 0) && ((PREV_NEXT_BAR_LOCATION == '2') || (PREV_NEXT_BAR_LOCATION == '3')) ) { ?> <table border="0" width="100%" cellspacing="0" cellpadding="2"> <tr> <td class="smallText"><?php echo $listing_split->display_count(TEXT_DISPLAY_NUMBER_OF_PRODUCTS); ?></td> <td class="smallText" align="right"><?php echo TEXT_RESULT_PAGE . ' ' . $listing_split->display_links(MAX_DISPLAY_PAGE_LINKS, tep_get_all_get_params(array('page', 'info', 'x', 'y'))); ?></td> </tr> </table> <br> <table border="0" width="100%" cellspacing="0" cellpadding="0"> <tr> <td align="right" class="main"><?php echo tep_image_submit('button_in_cart.gif', IMAGE_BUTTON_IN_CART); ?></td> </tr> </table> </form> <?php } ?> I'm stumped- if anyone out there can add to this that would be great (in my opinion this is an awesome modification and I give many thanks to the original contributor Ian C. Wilson, whereever he may be).
  4. djmonkey1

    Orders at-a-glance

    I have just installed the contribution "Orders at-a-glance", available at http://www.oscommerce.com/community/contributions,3454 However I would like to also include product attributes in the pop-up bubble. Product attributes, as you may know, are my favorite topic. In any case, the code that I believe needs to be modified is here: <?php // ====> BOF: ORDERS AT-A-GLANCE <==== ?> <td class="dataTableContent" align="center"><b><?php echo $orders['orders_id']; $artikel = ""; $num = 1; $result_artikels = tep_db_query("select products_name, products_quantity from " . TABLE_ORDERS_PRODUCTS . " where orders_id = '" . tep_db_input($orders['orders_id']) . "' "); while($row_artikels = tep_db_fetch_array($result_artikels)) { $artikel .= ($row_artikels["products_quantity"]) . "x " . ($row_artikels["products_name"]) . "<br>"; $num++; } { $parsedComment = explode("\r", $artikel); $cleanComment = ""; $i=0; while($i < count($parsedComment)) { $cleanComment .= trim($parsedComment[$i]); $i++; if ($i < count($parsedComment)) $cleanComment .= '<br \> '; } ?> <script language="javascript"><!-- document.write('<?php echo '<a href="javascript:void(0);" onmouseover="return overlib(\\\'' . $cleanComment . '\\\');" onmouseout="return nd();"><img src="images/icons/comment2.gif" align="top" border=0></a> '; ?>'); --></script> <?php } ?></b></a> <?php // ====> EOF: ORDERS AT-A-GLANCE <==== ?> I've modified the middle of it slightly to look like this: $artikel = ""; $num = 1; $result_artikels = tep_db_query("select products_name, products_quantity from " . TABLE_ORDERS_PRODUCTS . " where orders_id = '" . tep_db_input($orders['orders_id']) . "' "); $result_attributes = tep_db_query("select products_options, products_options_values from " . TABLE_ORDERS_PRODUCTS_ATTRIBUTES . " where orders_id = '" . (int)$oID . "' and orders_products_id = '" . (int)$vendor_orders_products['orders_products_id'] . "'"); while($row_artikels = tep_db_fetch_array($result_artikels)) { $artikel .= ($row_artikels["products_quantity"]) . "x " . ($row_artikels["products_name"]) . "<br>"; $attributes .= ($row_attributes["products_options"]) . ": " . ($row_attributes["products_options_values"]) . "<br>"; $num++; } But of course this doesn't work as it's far too simple and $row_attributes is not defined. So, I'm looking for someone smarter than me to crack this one.
  5. djmonkey1

    NEW! Complete Order Editing Tool!

    As far as I know Order Editor doesn't do anything to the delete button or it's functionality. All of that is contained within admin/orders.php which is only changed minimally. Undo the changes that you made and start over.
  6. djmonkey1

    NEW! Complete Order Editing Tool!

    Excellent! You're welcome!
  7. djmonkey1

    NEW! Complete Order Editing Tool!

    Have you modified anything at all in the file or is it fresh out of the contribution package?
  8. djmonkey1

    NEW! Complete Order Editing Tool!

    Do you get the error from every tooltip, a few of them, or just one?
  9. djmonkey1

    NEW! Complete Order Editing Tool!

    There are all sorts of things that you can mess up- that's what backups are for. :) Everybody makes mistakes. You'll learn a lot as you go.
  10. djmonkey1

    NEW! Complete Order Editing Tool!

    The installation instructions include steps for upgrading from previous versions. Look for this header:
  11. djmonkey1

    NEW! Complete Order Editing Tool!

    At the top of the file admin/edit_orders.php there should be a line similar to this: $Id: edit_orders.php v5.0.5 08/27/2007 djmonkey1 Exp $ where v5.0.5 is the version number. Unfortunately that is not always updated with every revision, but it should give you a fairly good idea of what you have.
  12. djmonkey1

    Order Editor for MVS

    Not that I'm aware of. I've been concentrating on the standard version.
  13. djmonkey1

    NEW! Complete Order Editing Tool!

    Yes, that's correct, admin/edit_orders_ajax.php
  14. djmonkey1

    NEW! Complete Order Editing Tool!

    There is nothing to remove per se. Just follow the instructions that I've posted.
  15. djmonkey1

    NEW! Complete Order Editing Tool!

    Find the following code in both edit_orders.php and edit_orders_ajax.php: for ($i=0, $n=sizeof($order->totals); $i<$n; $i++) { $email_order .= strip_tags($order->totals[$i]['title']) . ' ' . strip_tags($order->totals[$i]['text']) . "\n"; } and edit it to make it exclude any undesired elements; I recommend using the ot_class value of the component to do this. For instance if you wanted to exclude the the subtotal you would change it to for ($i=0, $n=sizeof($order->totals); $i<$n; $i++) { if (strstr($order->totals[$i]['class'], 'ot_subtotal')) continue; $email_order .= strip_tags($order->totals[$i]['title']) . ' ' . strip_tags($order->totals[$i]['text']) . "\n"; } You can find the class value of each component stored in the orders_total table.
  16. djmonkey1

    NEW! Complete Order Editing Tool!

    Open admin/edit_orders_ajax.php, find '" . oe_iconv($_GET['comments']) . "')"); change it to '" . tep_db_input(oe_iconv($_GET['comments'])) . "')"); and see if it works any better.
  17. djmonkey1

    NEW! Complete Order Editing Tool!

    What I would do is take the function count_store_contents() as it is defined in that file: function count_store_contents() { $count = 0; foreach($this->internal_get_store_products() as $key => $product) $count += $product['quantity']; return $count; } and add it to admin/order_editor/cart.php. Then you can test it out and see what you get, most likely a similar error identifying another missing function. Add that one in the same manner and continue in this way until the errors dry up. It will take some fiddling with to get it right. You will probably have to mess with the variable names used as well, for instance I don't think $product['quantity'] has any value in the Order Editor cart.php file, I believe it's actually $this->contents[$products_id]['qty'].
  18. djmonkey1

    NEW! Complete Order Editing Tool!

    I cannot recreate this problem on my testing server. Are you using AJAX to submit the new comments?
  19. djmonkey1

    NEW! Complete Order Editing Tool!

    Find in admin/edit_orders.php all three instances of <?php if (ORDER_EDITOR_USE_AJAX != 'true') { ?> <!-- Begin Update Block, only for non-ajax use --> <div class="updateBlock"> <div class="update1"><?php echo HINT_PRESS_UPDATE; ?></div> <div class="update2"> </div> <div class="update3"> </div> <div class="update4" align="center"><?php echo ENTRY_SEND_NEW_ORDER_CONFIRMATION; ?> <?php echo tep_draw_checkbox_field('nC1', '', false); ?></div> <div class="update5" align="center"><?php echo tep_image_submit('button_update.gif', IMAGE_UPDATE); ?></div> </div> <br> <br> <!-- End of Update Block --> <?php } ?> and change each to <!-- Begin Update Block, only for non-ajax use --> <div class="updateBlock"> <div class="update1"><?php echo HINT_PRESS_UPDATE; ?></div> <div class="update2"> </div> <div class="update3"> </div> <div class="update4" align="center"><?php echo ENTRY_SEND_NEW_ORDER_CONFIRMATION; ?> <?php echo tep_draw_checkbox_field('nC1', '', false); ?></div> <div class="update5" align="center"><?php echo tep_image_submit('button_update.gif', IMAGE_UPDATE); ?></div> </div> <br> <br> <!-- End of Update Block --> Be careful when editing the third instance as the php tag <?php } //end if (ORDER_EDITOR_USE_AJAX == 'false') { echo '</form>'; } ?> that closes the if statement "if (ORDER_EDITOR_USE_AJAX != 'true')" is used for other purposes, so you would not delete the php tag, just the first curly brace }.
  20. djmonkey1

    NEW! Complete Order Editing Tool!

    I have no idea how that one change to checkout_process.php could possibly cause the problem you're describing, but if it works for you that way that's great. If you don't charge tax on shipping you will never know the difference.
  21. djmonkey1

    NEW! Complete Order Editing Tool!

    You should see an update button. Is there anything there at all, a blue bar, "Please click on "Update" to save all changes", etc?
  22. djmonkey1

    NEW! Complete Order Editing Tool!

    Well, that's the problem then: you do not have iconv() compiled on your server. Contact your webhost and see if they can/will install it. It is my understanding that it is a very simple procedure. You should undo the change that was made to admin/order_editor/functions.php. As a workaround you can disable AJAX use in Order Editor by going to Admin->Configuration->Order Editor->Allow use of AJAX to update order information?->Set to 'false'
  23. djmonkey1

    NEW! Complete Order Editing Tool!

    What happens if you open admin/order_editor/functions.php and change function oe_iconv($string) { if (function_exists('iconv')) { return iconv('UTF-8', CHARSET . '//TRANSLIT', $string); } else { return $string; } } to function oe_iconv($string) { return iconv('UTF-8', CHARSET . '//TRANSLIT', $string); }
  24. djmonkey1

    NEW! Complete Order Editing Tool!

    I am unable to re-create this problem on my testing server. Make sure that you have iconv() compiled on your server; go to Admin->Tools->Server Info->check for "with iconv" listed in the "Configure command" section near the top.
  25. djmonkey1

    NEW! Complete Order Editing Tool!

    Does this module provide instructions for modifying the file catalog/includes/classes/shopping_cart.php?
×