Aodhan Posted November 18, 2002 Posted November 18, 2002 Hey all- Ok, I've gotten the system to create an array and hold all data for purchases from each store. It will also create an email for each store owner, showing purchases from their store only. The only problem that remains for me before I can beta release it, is that the emails never get to the destination. I write out the email to a text file, and everything looks copacetic, but it never arrives. As soon as that is figured out, I'll clean up the code and present it as a beta package for people to play with. As usual, any and all help is appreciated. Aodhan Here is the code for the page checkout_process.php <?php /* $Id: checkout_process.php,v 1.112 2002/08/19 11:06:01 hpdl Exp $ osCommerce, Open Source E-Commerce Solutions http://www.oscommerce.com Copyright (c) 2002 osCommerce Released under the GNU General Public License */ include('includes/application_top.php'); // check for essential variables (payment module could lose them) 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')); } include(DIR_WS_LANGUAGES . $language . '/' . FILENAME_CHECKOUT_PROCESS); // load payment modules as objects require(DIR_WS_CLASSES . 'payment.php'); $payment_modules = new payment; // load the before_process function from the payment modules $payment_modules->before_process(); require(DIR_WS_CLASSES . 'order.php'); require(DIR_WS_CLASSES . 'order_total.php'); $order = new order; $order_total_modules = new order_total; $store_raw = array('store_products' => '', 'store_id' => 0, 'store_weight' => 0, 'store_tax' => 0, 'store_cost' => 0); $order_totals = $order_total_modules->process(); $sql_data_array = array('customers_id' => $customer_id, 'customers_name' => $order->customer['firstname'] . ' ' . $order->customer['lastname'], '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_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'], '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' => DEFAULT_ORDERS_STATUS_ID, 'comments' => $order->info['comments'], 'currency' => $order->info['currency'], 'currency_value' => $order->info['currency_value']); tep_db_perform(TABLE_ORDERS, $sql_data_array); $insert_id = tep_db_insert_id(); for ($i=0; $i<sizeof($order_totals); $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, 'new_value' => DEFAULT_ORDERS_STATUS_ID, 'date_added' => 'now()', 'customer_notified' => $customer_notification); tep_db_perform(TABLE_ORDERS_STATUS_HISTORY, $sql_data_array); // initialized for the email confirmation $products_ordered = ''; $subtotal = 0; $total_tax = 0; for ($i=0; $i<sizeof($order->products); $i++) { // Stock Update - Joao Correia if (STOCK_LIMITED == 'true') { if (DOWNLOAD_ENABLED == 'true') { $stock_query_raw = "SELECT products_quantity, pad.products_attributes_filename FROM " . TABLE_PRODUCTS . " p LEFT JOIN " . TABLE_PRODUCTS_ATTRIBUTES . " pa ON p.products_id=pa.products_id LEFT JOIN " . TABLE_PRODUCTS_ATTRIBUTES_DOWNLOAD . " pad ON pa.products_attributes_id=pad.products_attributes_id WHERE p.products_id = '" . tep_get_prid($order->products[$i]['id']) . "'"; // Will work with only one option for downloadable products // otherwise, we have to build the query dynamically with a loop $products_attributes = $order->products[$i]['attributes']; if (is_array($products_attributes)) { $stock_query_raw .= " AND pa.options_id = '" . $products_attributes[$i]['option_id'] . "' AND pa.options_values_id = '" . $products_attributes[$i]['value_id'] . "'"; } $stock_query = tep_db_query($stock_query_raw); } else { $stock_query = tep_db_query("select products_quantity from " . TABLE_PRODUCTS . " where products_id = '" . tep_get_prid($order->products[$i]['id']) . "'"); } $stock_values = tep_db_fetch_array($stock_query); // do not decrement quantities if products_attributes_filename exists if ((DOWNLOAD_ENABLED != 'true') || (!$stock_values['products_attributes_filename'])) { $stock_left = $stock_values['products_quantity'] - $order->products[$i]['qty']; } else { $stock_left = $stock_values['products_quantity']; } tep_db_query("update " . TABLE_PRODUCTS . " set products_quantity = '" . $stock_left . "' where products_id = '" . tep_get_prid($order->products[$i]['id']) . "'"); if ($stock_left < 1) { tep_db_query("update " . TABLE_PRODUCTS . " set products_status = '0' where products_id = '" . tep_get_prid($order->products[$i]['id']) . "'"); } } // Update products_ordered (for bestsellers list) tep_db_query("update " . TABLE_PRODUCTS . " set products_ordered = products_ordered + " . sprintf('%d', $order->products[$i]['qty']) . " where products_id = '" . tep_get_prid($order->products[$i]['id']) . "'"); $sql_data_array = array('orders_id' => $insert_id, 'products_id' => tep_get_prid($order->products[$i]['id']), 'products_model' => $order->products[$i]['model'], 'products_name' => $order->products[$i]['name'], 'products_price' => $order->products[$i]['price'], 'final_price' => $order->products[$i]['final_price'], 'products_tax' => $order->products[$i]['tax'], 'store_id' => $order->products[$i]['store_id'], 'products_quantity' => $order->products[$i]['qty']); tep_db_perform(TABLE_ORDERS_PRODUCTS, $sql_data_array); $order_products_id = tep_db_insert_id(); //------insert customer choosen option to order-------- $attributes_exist = '0'; $products_ordered_attributes = ''; if ($order->products[$i]['attributes']) { $attributes_exist = '1'; for ($j=0; $j<sizeof($order->products[$i]['attributes']); $j++) { if (DOWNLOAD_ENABLED == 'true') { $attributes_query = "select popt.products_options_name, poval.products_options_values_name, pa.options_values_price, pa.price_prefix, pad.products_attributes_maxdays, pad.products_attributes_maxcount , pad.products_attributes_filename from " . TABLE_PRODUCTS_OPTIONS . " popt, " . TABLE_PRODUCTS_OPTIONS_VALUES . " poval, " . TABLE_PRODUCTS_ATTRIBUTES . " pa left join " . TABLE_PRODUCTS_ATTRIBUTES_DOWNLOAD . " pad on pa.products_attributes_id=pad.products_attributes_id where pa.products_id = '" . $order->products[$i]['id'] . "' and pa.options_id = '" . $order->products[$i]['attributes'][$j]['option_id'] . "' and pa.options_id = popt.products_options_id and pa.options_values_id = '" . $order->products[$i]['attributes'][$j]['value_id'] . "' and pa.options_values_id = poval.products_options_values_id and popt.language_id = '" . $languages_id . "' and poval.language_id = '" . $languages_id . "'"; $attributes = tep_db_query($attributes_query); } else { $attributes = tep_db_query("select popt.products_options_name, poval.products_options_values_name, pa.options_values_price, pa.price_prefix from " . TABLE_PRODUCTS_OPTIONS . " popt, " . TABLE_PRODUCTS_OPTIONS_VALUES . " poval, " . TABLE_PRODUCTS_ATTRIBUTES . " pa where pa.products_id = '" . $order->products[$i]['id'] . "' and pa.options_id = '" . $order->products[$i]['attributes'][$j]['option_id'] . "' and pa.options_id = popt.products_options_id and pa.options_values_id = '" . $order->products[$i]['attributes'][$j]['value_id'] . "' and pa.options_values_id = poval.products_options_values_id and popt.language_id = '" . $languages_id . "' and poval.language_id = '" . $languages_id . "'"); } $attributes_values = tep_db_fetch_array($attributes); $sql_data_array = array('orders_id' => $insert_id, 'orders_products_id' => $order_products_id, 'products_options' => $attributes_values['products_options_name'], 'products_options_values' => $attributes_values['products_options_values_name'], 'options_values_price' => $attributes_values['options_values_price'], 'price_prefix' => $attributes_values['price_prefix']); tep_db_perform(TABLE_ORDERS_PRODUCTS_ATTRIBUTES, $sql_data_array); if (DOWNLOAD_ENABLED == 'true') { $sql_data_array = array('orders_id' => $insert_id, 'orders_products_id' => $order_products_id, 'orders_products_filename' => $attributes_values['products_attributes_filename'], 'download_maxdays' => $attributes_values['products_attributes_maxdays'], 'download_count' => $attributes_values['products_attributes_maxcount']); tep_db_perform(TABLE_ORDERS_PRODUCTS_DOWNLOAD, $sql_data_array); } $products_ordered_attributes .= "nt" . $attributes_values['products_options_name'] . ' ' . $attributes_values['products_options_values_name']; } } //------insert customer choosen option eof ---- $total_weight += ($order->products[$i]['qty'] * $order->products[$i]['weight']); $total_tax += tep_calculate_tax($total_products_price, $products_tax) * $order->products[$i]['qty']; $total_cost += $total_products_price; $products_ordered .= $order->products[$i]['qty'] . ' x ' . $order->products[$i]['name'] . ' (' . $order->products[$i]['model'] . ') = ' . $currencies->display_price($order->products[$i]['final_price'], $order->products[$i]['tax'], $order->products[$i]['qty']) . $products_ordered_attributes . "n"; $store_index = $order->products[$i]['store_id']; $fp = fopen("./stores.txt", "a+"); fwrite($fp, $store_index . " - store index variable n"); fwrite($fp, $order->products[$i]['store_id'] . " - products store id n"); fwrite($fp, "array validation check" . is_array($store_totals[$store_index]) . "n"); fclose($fp); if (is_array($store_totals[$store_index])) { //------- Stuff the store array with the data needed to create individual store emails------ $store_totals[$store_index]['store_products'] .= $order->products[$i]['qty'] . ' x ' . $order->products[$i]['name'] . ' (' . $order->products[$i]['model'] . ') = ' . $currencies->display_price($order->products[$i]['final_price'], $order->products[$i]['tax'], $order->products[$i]['qty']) . $products_ordered_attributes . "n"; $store_totals[$store_index]['store_weight'] += ($order->products[$i]['qty'] * $order->products[$i]['weight']); $store_totals[$store_index]['store_tax'] += tep_calculate_tax($total_products_price, $products_tax) * $order->products[$i]['qty']; $store_totals[$store_index]['store_cost'] += $total_products_price; } else { $store_totals[$store_index]['store_id'] = $order->products[$i]['store_id']; $store_totals[$store_index]['store_products'] .= $order->products[$i]['qty'] . ' x ' . $order->products[$i]['name'] . ' (' . $order->products[$i]['model'] . ') = ' . $currencies->display_price($order->products[$i]['final_price'], $order->products[$i]['tax'], $order->products[$i]['qty']) . $products_ordered_attributes . "n"; $store_totals[$store_index]['store_weight'] += ($order->products[$i]['qty'] * $order->products[$i]['weight']); $store_totals[$store_index]['store_tax'] += tep_calculate_tax($total_products_price, $products_tax) * $order->products[$i]['qty']; $store_totals[$store_index]['store_cost'] += $total_products_price; } } $fp = fopen("./diag.txt", "w+"); while(list($index) = each($store_totals)) { fwrite($fp, "Loop Index : " . $index . "n"); fwrite($fp, "Store Index : " . $store_totals[$index]['store_id'] . "n"); fwrite($fp, "Store Products : " . $store_totals[$index]['store_products'] . "n"); fwrite($fp, "Store Weight : " . $store_totals[$index]['store_weight'] . "n"); fwrite($fp, "Store Tax : " . $store_totals[$index]['store_tax'] . "n"); fwrite($fp, "Store Ttl Cost : " . $store_totals[$index]['store_cost'] . "n"); fwrite($fp, "--------------------------------------------------------n"); } fclose($fp); // lets start with the email confirmation $email_order = STORE_NAME . "n" . EMAIL_SEPARATOR . "n" . EMAIL_TEXT_ORDER_NUMBER . ' ' . $insert_id . "n" . EMAIL_TEXT_INVOICE_URL . ' ' . tep_href_link(FILENAME_ACCOUNT_HISTORY_INFO, 'order_id=' . $insert_id, 'SSL', false) . "n" . EMAIL_TEXT_DATE_ORDERED . ' ' . strftime(DATE_FORMAT_LONG) . "nn"; if ($order->info['comments']) { $email_order .= $order->info['comments'] . "nn"; } $email_order .= EMAIL_TEXT_PRODUCTS . "n" . EMAIL_SEPARATOR . "n" . $products_ordered . EMAIL_SEPARATOR . "n"; for ($i=0; $i<sizeof($order_totals); $i++) { $email_order .= strip_tags($order_totals[$i]['title']) . ' ' . strip_tags($order_totals[$i]['text']) . "n"; } $email_order .= "n" . EMAIL_TEXT_DELIVERY_ADDRESS . "n" . EMAIL_SEPARATOR . "n" . tep_address_label($customer_id, $sendto, 0, '', "n") . "nn"; if (is_object($$payment)) { $email_order .= EMAIL_TEXT_PAYMENT_METHOD . "n" . EMAIL_SEPARATOR . "n"; $payment_class = $$payment; $email_order .= $payment_class->title . "nn"; if ($payment_class->email_footer) { $email_order .= $payment_class->email_footer . "nn"; } } tep_mail($order->customer['firstname'] . ' ' . $order->customer['lastname'], $order->customer['email_address'], EMAIL_TEXT_SUBJECT, nl2br($email_order), STORE_OWNER, STORE_OWNER_EMAIL_ADDRESS, ''); // send emails to other people if (SEND_EXTRA_ORDER_EMAILS_TO != '') { tep_mail('', SEND_EXTRA_ORDER_EMAILS_TO, EMAIL_TEXT_SUBJECT, nl2br($email_order), STORE_OWNER, STORE_OWNER_EMAIL_ADDRESS, ''); } // now send emails to each individual store owner showing purchases from their shops reset($store_totals); while(list($si) = each($store_totals)){ $store_info_query = tep_db_query("SELECT store_owner_fname, store_owner_lname, store_email_address FROM " . TABLE_STORES . " where store_id = '" . $store_totals[$si]['store_id'] . "'"); $store_info = tep_db_fetch_array($store_info_query); if (is_array($store_info)) { $email_order = STORE_NAME . "n" . EMAIL_SEPARATOR . "n" . EMAIL_TEXT_ORDER_NUMBER . ' ' . $insert_id . "n" . EMAIL_TEXT_DATE_ORDERED . ' ' . strftime(DATE_FORMAT_LONG) . "nn"; if ($order->info['comments']) { $email_order .= $order->info['comments'] . "nn"; } $email_order .= EMAIL_TEXT_PRODUCTS . "n" . EMAIL_SEPARATOR . "n" . $store_totals[$si]['store_products'] . EMAIL_SEPARATOR . "n"; // for ($i=0; $i<sizeof($order_totals); $i++) { // $email_order .= strip_tags($order_totals[$i]['title']) . ' ' . strip_tags($order_totals[$i]['text']) . "n"; // } $email_order .= "n" . EMAIL_TEXT_DELIVERY_ADDRESS . "n" . EMAIL_SEPARATOR . "n" . tep_address_label($customer_id, $sendto, 0, '', "n") . "nn"; if (is_object($$payment)) { $email_order .= EMAIL_TEXT_PAYMENT_METHOD . "n" . EMAIL_SEPARATOR . "n"; $payment_class = $$payment; $email_order .= $payment_class->title . "nn"; if ($payment_class->email_footer) { $email_order .= $payment_class->email_footer . "nn"; } } $fp = fopen("./sent.txt", "a+"); fwrite($fp, $store_info['store_owner_fname'] . ' ' . $store_info['store_owner_lname'] . ' '. $store_info['store_email_address'] . "n"); fwrite($fp, $store_totals[$si]['store_id'] . "n"); fwrite($fp, $store_totals[$si]['store_products'] . "n"); fwrite($fp, $email_order); fwrite($fp, "-----------------------------------------------n"); fclose($fp); tep_mail('', $store_info['owner_email_address'], EMAIL_TEXT_SUBJECT, nl2br($email_order), STORE_OWNER, STORE_OWNER_EMAIL_ADDRESS, ''); // tep_mail($store_info['store_owner_fname'] . ' ' . $store_info['store_owner_lname'], $store_info['owner_email_address'], EMAIL_TEXT_SUBJECT, nl2br($email_order), STORE_OWNER, STORE_OWNER_EMAIL_ADDRESS, ''); } else { $fp = fopen("./mailit.txt", "a+"); fwrite($fp, "No query retrieved for order " . $si . "n"); fwrite($fp, "Store ID: " . $store_totals[$si]['store_id'] . "n"); fwrite($fp, $store_info_query . "n"); fclose($fp); } } // load the after_process function from the payment modules $payment_modules->after_process(); $cart->reset(TRUE); // unregister session variables used during checkout tep_session_unregister('sendto'); tep_session_unregister('comments'); tep_session_unregister('payment'); tep_session_unregister('shipping_selected'); tep_session_unregister('shipping_cost'); tep_session_unregister('shipping_method'); tep_redirect(tep_href_link(FILENAME_CHECKOUT_SUCCESS, '', 'SSL')); require(DIR_WS_INCLUDES . 'application_bottom.php'); ?> And, each of the text files that gets created: diag.txt, sent.txt. stores.txt (Mailit.txt is not created, so there are no queries that fail) Diag.txt: Loop Index : 1 Store Index : 1 Store Products : 1 x 20 long aquarium () = $20.00 1 x Blade Runner - Director's Cut (DVD-BLDRNDC) = $30.00 Store Weight : 22 Store Tax : 0 Store Ttl Cost : 0 -------------------------------------------------------- Loop Index : 4 Store Index : 4 Store Products : 1 x Small Belt Pouch () = $25.00 Store Weight : 1 Store Tax : 0 Store Ttl Cost : 0 -------------------------------------------------------- sent.txt: Thomas Doe [email protected] 1 1 x 20 long aquarium () = $20.00 1 x Blade Runner - Director's Cut (DVD-BLDRNDC) = $30.00 osCommerce ------------------------------------------------------ Order Number: 47 Date Ordered: Monday 18 November, 2002 Products ------------------------------------------------------ ------------------------------------------------------ Delivery Address ------------------------------------------------------ Tom Thumb 1234 Anywhere St. Mesa, AZ 85202 United States Payment Method ------------------------------------------------------ Cash on Delivery ----------------------------------------------- Geir Sverdrup [email protected] 4 1 x Small Belt Pouch () = $25.00 osCommerce ------------------------------------------------------ Order Number: 47 Date Ordered: Monday 18 November, 2002 Products ------------------------------------------------------ ------------------------------------------------------ Delivery Address ------------------------------------------------------ Tom Thumb 1234 Anywhere St. Mesa, AZ 85202 United States Payment Method ------------------------------------------------------ Cash on Delivery ----------------------------------------------- stores.txt: 1 - store index variable 1 - products store id array validation check 4 - store index variable 4 - products store id array validation check 1 - store index variable 1 - products store id array validation check1
Aodhan Posted November 22, 2002 Author Posted November 22, 2002 bump, I really need help on this one. This is the last step before I can beta it. Aodhan
tradenet Posted November 22, 2002 Posted November 22, 2002 I would if I could...but I am so new to this PHP stuff. :cry:
wizardsandwars Posted November 22, 2002 Posted November 22, 2002 I can see that the syntax for creating the txt files is correct, but I wouldn't mind looking at what your are trying to do when you include it in the $email_order variable. ------------------------------------------------------------------------------------------------------------------------- NOTE: As of Oct 2006, I'm not as active in this forum as I used to be, but I still work with osC quite a bit. If you have a question about any of my posts here, your best bet is to contact me though either Email or PM in my profile, and I'll be happy to help.
Aodhan Posted November 22, 2002 Author Posted November 22, 2002 I can see that the syntax for creating the txt files is correct, but I wouldn't mind looking at what your are trying to do when you include it in the $email_order variable. Do you mean a printout of $store_totals[$si]['store_products'] each time through the loop? I guess I'm not sure which part you are talking about... Aodhan
tradenet Posted November 22, 2002 Posted November 22, 2002 I'm cheering you on John! At least we have lookers!!
tradenet Posted November 23, 2002 Posted November 23, 2002 John, You might want to look at the new checkout code: ?php /* $Id: checkout_process.php,v 1.115 2002/11/17 14:09:24 project3000 Exp $ osCommerce, Open Source E-Commerce Solutions http://www.oscommerce.com Copyright (c) 2002 osCommerce Released under the GNU General Public License */ [....snip] Seems everyone is gearing for this.
tradenet Posted November 23, 2002 Posted November 23, 2002 See if you can catch one of the guru's here: http://www.oscommerce.com/community.php/irc Some of them hang around there. I'd love to see this Mall thing fly!
Recommended Posts
Archived
This topic is now archived and is closed to further replies.