Jump to content
  • Checkout
  • Login
  • Get in touch

osCommerce

The e-commerce.

Mall system update - so close...


Aodhan

Recommended Posts

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

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...