Jump to content


Corporate Sponsors


Latest News: (loading..)

* * * - - 2 votes

[Contribution] U HTML Emails


224 replies to this topic

#201 Picto

  • Community Member
  • 5 posts
  • Real Name:Gerard v/d Vegt (nl)

Posted 26 February 2011, 18:39

Hi Olaf,

i have been busy with this contrib and it is working great with images, links, backgrounds.
At the moment i want to add html email to other mails that are provided from other modules.
Now i am busy with tho admin/customers.php file with the contrib control login (http://addons.oscommerce.com/info/1154). Here an email will be send when customer account is approved by admin. I added UHtmlEmails/customers.php and the language file as needed. I also added the lines needed on admin/customers.php. The email can be send and received. But i only see hardcore html in the mail. No images or backgrounds!
I have seen this problem ones before but i can't find the solution again how i solved it at that time.

Hope you can give that little advice i need.

Thanks, Gerard

p.s. in order editor it works fine where i installed uhtml emails to.

Here is a piece of the lines from admin/customers.php
// BOF Control Login
		case 'setflag':
        	if ( ($HTTP_GET_VARS['flag'] == '0') || ($HTTP_GET_VARS['flag'] == '1') ) {
              if ($HTTP_GET_VARS['cID']) {
            tep_set_customers_status($HTTP_GET_VARS['cID'], $HTTP_GET_VARS['flag']);
			}
  if(CONTROL_LOGIN == 'true') {
	// BOF Control Login email mod to notify customers when their account has been activated - by Martin Mills March 05
	if ($HTTP_GET_VARS['flag'] == '1') {
		//selects user's profile based on the URL parameter used to reset status
    	$query = 'SELECT * from customers where customers_id='.$HTTP_GET_VARS['cID'];
		$result = mysql_query($query);
				if (!$result) {
	//this will show you any errors in the query - for testing purposes
   $message  = 'Invalid query: ' . mysql_error() . "\n";
   $message .= 'Whole query: ' . $query;
   die($message);
				}
	$row = mysql_fetch_assoc($result);
//define recipient's email address
	$email=$row{'customers_email_address'};
//define recipient's first name
	$firstname=$row{'customers_firstname'};
//define return address
	$headers  = EMAIL_ACTIVATE_FROM;
			   mail;
//define your message
	//---  Beginning of addition: Ultimate HTML Emails  ---//
	if (EMAIL_USE_HTML == 'true') {
		require(DIR_FS_CATALOG_MODULES . 'html_mail/'. HTML_EMAIL_LAYOUT .'/control_login.php');
		$message = $html_email;
		}else{
	//---  End of addition: Ultimate HTML Emails  ---//
	
	$message = EMAIL_ACTIVATE_GREETING. ' ' .$firstname. ",\n\n".EMAIL_ACTIVATE_MESSAGE."\n\n".STORE_OWNER_EMAIL_ADDRESS."\n\n".STORE_NAME_ADDRESS."\n\n".EMAIL_ACTIVATE_SIGNOFF."\n\n".STORE_OWNER.", ".STORE_NAME;

	//---  Beginning of addition: Ultimate HTML Emails  ---//
	}
	if(HTML_EMAIL_DEVELOPMENT_MODE === 'true'){
		//Save the contents of the generated html email to the harddrive in .htm file. This can be practical when developing a new layout.
		$TheFileName = 'Last_mail_from_control_login.php.htm';
		$TheFileHandle = fopen($TheFileName, 'w') or die("can't open error log file");
		fwrite($TheFileHandle, $message);
		fclose($TheFileHandle);
		}
	//---  End of addition: Ultimate HTML Emails  ---//
mail ($email, EMAIL_ACTIVATE_SUBJECT, $message, $headers);
			}
  }
// EOF Control Login email mod
		}
        tep_redirect(tep_href_link(FILENAME_CUSTOMERS, '', 'NONSSL'));
        break;
// EOF Control Login


#202 martinsnestor@hotmail.com

  • Community Member
  • 2 posts
  • Real Name:Nestor Martins
  • Gender:Male

Posted 10 May 2011, 19:42

hi there:
Well it looks like I am the only one with this question.
The files I need to modify like checkout_process.php are a bunch of define statements, Where do I insert the code?
Help please

#203 Swingy

  • Community Member
  • 29 posts
  • Real Name:Jaccie

Posted 06 July 2011, 23:51

Hello, I'm using this mod without any problems in my 2.3.1 shop exept for the newsletter. This one isn't send in HTML. Can you please tell what I have to change to also send the newsletter in HTML?

Thx

Edited by Swingy, 07 July 2011, 00:05.


#204 gfasal

  • Community Member
  • 342 posts
  • Real Name:George
  • Gender:Male
  • Location:Sevilla, Spain

Posted 14 July 2011, 16:13

Has anyone had trouble with this once the google the capatcha mod is added??? -
OSC 2.3.1
INSTALLED:Document Manager / Monthly Sales and Tax Returns / Batch Print Invoices / Ultimate HTML EMAILs / AJAX Attribute Manager / OSC PDF Catalog / Move Bookmarks / Sort Order / Easy Populate / Sales Reports / Low Stock Report / Admin: Model # on Category / Product Administration Screen / Mini images in admin / SLiCK reCaptcha / Google + / Beautiful Breadcrumbs / 2.3.1 - Banner Language Mod / ADD New Page / EASY MAP (google) v.3.0 / Who's Online Enhancement for 2.3.1 / Admin Notes / scrambled order number / remove_unused_images / Quantity Select / Unit Weight / Product Specifions (filter results) / AJAX Product Attributes/ Attribute Codes/ Date & Order No. to Invoice/ O.P.I. 2.0 / Attribute Images / Manual Order Editor / Attributes Clone / Order Editor / Create Order / Company VAT No. / Add customer/ CKEditor 2.3.1 / Page Manager / Default images via admin / Percentage Shipping Price / QTPro / Scroll to Top / PDF Invoice / Featured Products / Product Listing Enhancements / AutoBackups / ..Custom Admin Mods /

#205 gfasal

  • Community Member
  • 342 posts
  • Real Name:George
  • Gender:Male
  • Location:Sevilla, Spain

Posted 15 July 2011, 10:36

View Postgfasal, on 14 July 2011, 16:13, said:

Has anyone had trouble with this once the google the capatcha mod is added??? -


ISSUE SOLVED - Was an error in my databsase
OSC 2.3.1
INSTALLED:Document Manager / Monthly Sales and Tax Returns / Batch Print Invoices / Ultimate HTML EMAILs / AJAX Attribute Manager / OSC PDF Catalog / Move Bookmarks / Sort Order / Easy Populate / Sales Reports / Low Stock Report / Admin: Model # on Category / Product Administration Screen / Mini images in admin / SLiCK reCaptcha / Google + / Beautiful Breadcrumbs / 2.3.1 - Banner Language Mod / ADD New Page / EASY MAP (google) v.3.0 / Who's Online Enhancement for 2.3.1 / Admin Notes / scrambled order number / remove_unused_images / Quantity Select / Unit Weight / Product Specifions (filter results) / AJAX Product Attributes/ Attribute Codes/ Date & Order No. to Invoice/ O.P.I. 2.0 / Attribute Images / Manual Order Editor / Attributes Clone / Order Editor / Create Order / Company VAT No. / Add customer/ CKEditor 2.3.1 / Page Manager / Default images via admin / Percentage Shipping Price / QTPro / Scroll to Top / PDF Invoice / Featured Products / Product Listing Enhancements / AutoBackups / ..Custom Admin Mods /

#206 gfasal

  • Community Member
  • 342 posts
  • Real Name:George
  • Gender:Male
  • Location:Sevilla, Spain

Posted 19 July 2011, 10:33

Is there a CONTACT US - html version floating around?
OSC 2.3.1
INSTALLED:Document Manager / Monthly Sales and Tax Returns / Batch Print Invoices / Ultimate HTML EMAILs / AJAX Attribute Manager / OSC PDF Catalog / Move Bookmarks / Sort Order / Easy Populate / Sales Reports / Low Stock Report / Admin: Model # on Category / Product Administration Screen / Mini images in admin / SLiCK reCaptcha / Google + / Beautiful Breadcrumbs / 2.3.1 - Banner Language Mod / ADD New Page / EASY MAP (google) v.3.0 / Who's Online Enhancement for 2.3.1 / Admin Notes / scrambled order number / remove_unused_images / Quantity Select / Unit Weight / Product Specifions (filter results) / AJAX Product Attributes/ Attribute Codes/ Date & Order No. to Invoice/ O.P.I. 2.0 / Attribute Images / Manual Order Editor / Attributes Clone / Order Editor / Create Order / Company VAT No. / Add customer/ CKEditor 2.3.1 / Page Manager / Default images via admin / Percentage Shipping Price / QTPro / Scroll to Top / PDF Invoice / Featured Products / Product Listing Enhancements / AutoBackups / ..Custom Admin Mods /

#207 Swingy

  • Community Member
  • 29 posts
  • Real Name:Jaccie

Posted 27 July 2011, 14:36

Is there nobody who can help with the newsletter? (see 3 posts above)

#208 gfasal

  • Community Member
  • 342 posts
  • Real Name:George
  • Gender:Male
  • Location:Sevilla, Spain

Posted 28 July 2011, 08:39

the newsletter is easy, just paste html code into the newletter area in the Admin -
OSC 2.3.1
INSTALLED:Document Manager / Monthly Sales and Tax Returns / Batch Print Invoices / Ultimate HTML EMAILs / AJAX Attribute Manager / OSC PDF Catalog / Move Bookmarks / Sort Order / Easy Populate / Sales Reports / Low Stock Report / Admin: Model # on Category / Product Administration Screen / Mini images in admin / SLiCK reCaptcha / Google + / Beautiful Breadcrumbs / 2.3.1 - Banner Language Mod / ADD New Page / EASY MAP (google) v.3.0 / Who's Online Enhancement for 2.3.1 / Admin Notes / scrambled order number / remove_unused_images / Quantity Select / Unit Weight / Product Specifions (filter results) / AJAX Product Attributes/ Attribute Codes/ Date & Order No. to Invoice/ O.P.I. 2.0 / Attribute Images / Manual Order Editor / Attributes Clone / Order Editor / Create Order / Company VAT No. / Add customer/ CKEditor 2.3.1 / Page Manager / Default images via admin / Percentage Shipping Price / QTPro / Scroll to Top / PDF Invoice / Featured Products / Product Listing Enhancements / AutoBackups / ..Custom Admin Mods /

#209 Swingy

  • Community Member
  • 29 posts
  • Real Name:Jaccie

Posted 28 July 2011, 09:23

Yes for someone who knows html. But the person who have to send the newsletter doesn't know html so it has to be a template for sending de newsletter.

#210 Tom172

  • Community Member
  • 55 posts
  • Real Name:Thomas
  • Gender:Male

Posted 06 August 2011, 07:53

View Postmixit, on 25 December 2008, 13:42, said:

[update text/plain has no linefeeds]

.. alternative 2.

Solution is relative simple without any heavy modifications (as far I can see).

Modification IN ADDITION to U HTML v2.1 (2008/08/02):

--- step 1 modify admin/includes/functions/general.php AND catalog/includes/functions/general.php ---
Find:
  function tep_mail($to_name, $to_email_address, $email_subject, $email_text, $from_email_name, $from_email_address) {
	if (SEND_EMAILS != 'true') return false;

	// Instantiate a new mail object
	$message = new email(array('X-Mailer: osCommerce'));

	// Build the text version
	$text = strip_tags($email_text);
	if (EMAIL_USE_HTML == 'true') {
	  $message->add_html($email_text, $text);
Add after:
//---  Beginning of addition: Ultimate HTML Emails  ---//	  
	  global $UHTML_html_text;
	  if (tep_not_null($UHTML_html_text) ){
		  $message->html_text = $UHTML_html_text;
	  }
//---  End of addition: Ultimate HTML Emails  ---//
--- step 2 add text/plain ---
For the e-mail you want to modify the text/plain go to:
catalog/includes/modules/UHtmlEmails/LAYOUT_NAME/FILENAME.php
At the end of the file, before '?>' insert:
$UHTML_html_text = "This is the text/plain code\nwith linefeeds.\n\nYou can also use the variables used in the $html_email.";

That's all...

This code is also added to the ADDONS-page.

Kind regards, Patrick


I also had the problem with text displaying as one block without any linefeeds for users that allow emails as text only. So I tried the above fix on a 2.2rca - without ANY result actually although I am sure that I have applied the above fix as directed.


So I was wondering if anyone ever figured out another way of displaying the email correctly for those users accepting only text emails?
Regards
tom

Edited by Tom172, 06 August 2011, 07:54.


#211 sakkiotto

  • Community Member
  • 50 posts
  • Real Name:manuel

Posted 08 August 2011, 21:47

Hi.
it possible change subject email like "OUR STORE: YOUR ORDER Nr:" + 'The Order Number' + 'The Status of the order with oID'...

update orders and when a customer confir order

Edited by sakkiotto, 08 August 2011, 21:51.


#212 kalkal

  • Community Member
  • 92 posts
  • Real Name:Kurt

Posted 04 September 2011, 17:47

There is only one thing I cant get to work with this contrib.

The order totals dont show up in the order confirmation email. Ive had to change the variables to work with Paypal IPN but cant get the order totals variable to work.

Anyone resolved this?
Any help would be greatly appreciated!

#213 spiralspiral

  • Community Member
  • 12 posts
  • Real Name:xxx

Posted 22 September 2011, 12:38

hi

on oscommerce 2.3.1 everything works great except for the orders status update, there is no instruction for that.


any help please?

#214 gfasal

  • Community Member
  • 342 posts
  • Real Name:George
  • Gender:Male
  • Location:Sevilla, Spain

Posted 26 September 2011, 09:12

View Postspiralspiral, on 22 September 2011, 12:38, said:

hi

on oscommerce 2.3.1 everything works great except for the orders status update, there is no instruction for that.


any help please?


edit ADMIN/ORDERS.php

at :
$email = STORE_NAME . "\n" . EMAIL_SEPARATOR . "\n" . EMAIL_TEXT_ORDER_NUMBER . ' ' . $oID . "\n" . EMAIL_TEXT_INVOICE_URL . ' ' . tep_catalog_href_link(FILENAME_CATALOG_ACCOUNT_HISTORY_INFO, 'order_id=' . $oID, 'SSL') . "\n" . EMAIL_TEXT_DATE_ORDERED . ' ' . tep_date_long($check_status['date_purchased']) . "\n\n" . $notify_comments . sprintf(EMAIL_TEXT_STATUS_UPDATE, $orders_status_array[$status]);

add above:

//--- Beginning of addition: Ultimate HTML Emails ---//
if (EMAIL_USE_HTML == 'true') {
require(DIR_FS_CATALOG . DIR_WS_MODULES . 'UHtmlEmails/Green/orders_update.php');
$email = $html_email;
}else{//Send text email
//--- End of addition: Ultimate HTML Emails ---//

add below:

}

----------------------------------

NOW - in UTHML EMIALS---- includes/modules/uhtml emails/orders.php, copy and and save as orders_update.php

------------------------------

Now edit orders_update.php accordingly!!

----------------------------

WORKS FINE!
OSC 2.3.1
INSTALLED:Document Manager / Monthly Sales and Tax Returns / Batch Print Invoices / Ultimate HTML EMAILs / AJAX Attribute Manager / OSC PDF Catalog / Move Bookmarks / Sort Order / Easy Populate / Sales Reports / Low Stock Report / Admin: Model # on Category / Product Administration Screen / Mini images in admin / SLiCK reCaptcha / Google + / Beautiful Breadcrumbs / 2.3.1 - Banner Language Mod / ADD New Page / EASY MAP (google) v.3.0 / Who's Online Enhancement for 2.3.1 / Admin Notes / scrambled order number / remove_unused_images / Quantity Select / Unit Weight / Product Specifions (filter results) / AJAX Product Attributes/ Attribute Codes/ Date & Order No. to Invoice/ O.P.I. 2.0 / Attribute Images / Manual Order Editor / Attributes Clone / Order Editor / Create Order / Company VAT No. / Add customer/ CKEditor 2.3.1 / Page Manager / Default images via admin / Percentage Shipping Price / QTPro / Scroll to Top / PDF Invoice / Featured Products / Product Listing Enhancements / AutoBackups / ..Custom Admin Mods /

#215 MolnárZoltán

  • Community Member
  • 7 posts
  • Real Name:Molnár Zoltán
  • Gender:Male

Posted 28 October 2011, 05:43

Hi!
I followed the install.txt from line-by-line. It works fine.
My only problem is, that i cant change the layout. This green background isnt good for my shop. How can it be changed?
Please help me!
I have 2.3.1 version.

#216 gfasal

  • Community Member
  • 342 posts
  • Real Name:George
  • Gender:Male
  • Location:Sevilla, Spain

Posted 29 October 2011, 20:34

simply go online and find a nice loking html email template you like-

copy and paste this code into the relevant $html =

i have attached a sample, copy and paste his into the green folder - you will need to do your own langaue bits but this my help. test and see.


populate as you wish with the php strongs that pull db info. etc etc...

Edited by gfasal, 29 October 2011, 20:34.

OSC 2.3.1
INSTALLED:Document Manager / Monthly Sales and Tax Returns / Batch Print Invoices / Ultimate HTML EMAILs / AJAX Attribute Manager / OSC PDF Catalog / Move Bookmarks / Sort Order / Easy Populate / Sales Reports / Low Stock Report / Admin: Model # on Category / Product Administration Screen / Mini images in admin / SLiCK reCaptcha / Google + / Beautiful Breadcrumbs / 2.3.1 - Banner Language Mod / ADD New Page / EASY MAP (google) v.3.0 / Who's Online Enhancement for 2.3.1 / Admin Notes / scrambled order number / remove_unused_images / Quantity Select / Unit Weight / Product Specifions (filter results) / AJAX Product Attributes/ Attribute Codes/ Date & Order No. to Invoice/ O.P.I. 2.0 / Attribute Images / Manual Order Editor / Attributes Clone / Order Editor / Create Order / Company VAT No. / Add customer/ CKEditor 2.3.1 / Page Manager / Default images via admin / Percentage Shipping Price / QTPro / Scroll to Top / PDF Invoice / Featured Products / Product Listing Enhancements / AutoBackups / ..Custom Admin Mods /

#217 Peper

  • Community Member
  • 343 posts
  • Real Name:Pierre
  • Gender:Male
  • Location:South Africa

Posted 04 January 2012, 16:14

Hope to fix the following if someone can please give me advice to correct it

When customer orders something with attributes the description and models gets all mixed up.
I narrowed it down to the line 303 - $products_ordered_attributes .= "\n\t" . $attributes_values['products_options_name'] . ' ' . $attributes_values['products_options_values_name'];
I think it's in the wrong place or not even sure

Any help will be very much appreciated.

My checkout_process.php file.
<?php
/*
  $Id: checkout_process.php 1750 2007-12-21 05:20:28Z hpdl $
  adapted for Separate Pricing Per Customer 2006/09/09 (attribute prices for groups, hide attributes from groups
  osCommerce, Open Source E-Commerce Solutions
  http://www.oscommerce.com
  Copyright (c) 2007 osCommerce
  Released under the GNU General Public License
*/
  include('includes/application_top.php');
// 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 there is nothing in the customers cart, redirect them to the shopping cart page
  if ($cart->count_contents() < 1) {
    tep_redirect(tep_href_link(FILENAME_SHOPPING_CART));
  }
// if no shipping method has been selected, redirect the customer to the shipping method selection page
  if (!tep_session_is_registered('shipping') || !tep_session_is_registered('sendto')) {
    tep_redirect(tep_href_link(FILENAME_CHECKOUT_SHIPPING, '', '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');
  $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;
 
// 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));
    }
  }
  $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));
  $payment_modules->update_status();
  if ( ( is_array($payment_modules->modules) && (sizeof($payment_modules->modules) > 1) && !is_object($$payment) ) || (is_object($$payment) && ($$payment->enabled == false)) ) {
    tep_redirect(tep_href_link(FILENAME_CHECKOUT_PAYMENT, 'error_message=' . urlencode(ERROR_NO_PAYMENT_MODULE_SELECTED), 'SSL'));
  }
  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' => trim($order->delivery['firstname'] . ' ' . $order->delivery['lastname']),
						  'delivery_company' => $order->delivery['company'],
						  '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'],
						  'shipping_module' => $shipping['id'],
						  '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()',
						  'last_modified' => 'now()',
						  'orders_status' => $order->info['order_status'],
						  '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, $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);
 
   //kgt - discount coupons
  if( tep_session_is_registered( 'coupon' ) && is_object( $order->coupon ) ) {
   $sql_data_array = array( 'coupons_id' => $order->coupon->coupon['coupons_id'],
							 'orders_id' => $insert_id );
   tep_db_perform( TABLE_DISCOUNT_COUPONS_TO_ORDERS, $sql_data_array );
  }
  //end kgt - discount coupons
// initialized for the email confirmation
  $products_ordered = '';
  $subtotal = 0;
  $total_tax = 0;
// begin product bundles
  function reduce_bundle_stock($bundle_id, $qty_sold) {
    $bundle_query = tep_db_query('select pb.subproduct_id, pb.subproduct_qty, p.products_bundle, p.products_quantity from ' . TABLE_PRODUCTS_BUNDLES . ' pb, ' . TABLE_PRODUCTS . ' p where p.products_id = pb.subproduct_id and bundle_id = ' . (int)tep_get_prid($bundle_id));
    while ($bundle_info = tep_db_fetch_array($bundle_query)) {
	  if ($bundle_info['products_bundle'] == 'yes') {
	    reduce_bundle_stock($bundle_info['subproduct_id'], ($qty_sold * $bundle_info['subproduct_qty']));
	    // update quantity of nested bundle sold
	    tep_db_query("update " . TABLE_PRODUCTS . " set products_ordered = products_ordered + " . sprintf('%d', ($qty_sold * $bundle_info['subproduct_qty'])) . " where products_id = " . (int)$bundle_info['subproduct_id']);
	  } else {
	    $bundle_stock_left = $bundle_info['products_quantity'] - ($qty_sold * $bundle_info['subproduct_qty']);
	    tep_db_query("update " . TABLE_PRODUCTS . " set products_quantity = " . (int)$bundle_stock_left . ", products_ordered = products_ordered + " . (int)($qty_sold * $bundle_info['subproduct_qty']) . " where products_id = " . (int)$bundle_info['subproduct_id']);
	    if ( ($bundle_stock_left < 1) && (STOCK_ALLOW_CHECKOUT == 'false') ) {
		  tep_db_query("update " . TABLE_PRODUCTS . " set products_status = '0' where products_id = " . (int)$bundle_info['subproduct_id']);
	    }
	  }
    }
  }
  for ($i=0, $n=sizeof($order->products); $i<$n; $i++) {
// Stock Update - Joao Correia
    if (STOCK_LIMITED == 'true') {
	  if (DOWNLOAD_ENABLED == 'true') {
	    $stock_query_raw = "SELECT products_quantity, pad.products_attributes_filename, products_bundle
						    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[0]['option_id'] . "' AND pa.options_values_id = '" . $products_attributes[0]['value_id'] . "'";
	    }
	    $stock_query = tep_db_query($stock_query_raw);
	  } else {
	    $stock_query = tep_db_query("select products_quantity, products_bundle from " . TABLE_PRODUCTS . " where products_id = '" . tep_get_prid($order->products[$i]['id']) . "'");
	  }
	  if (tep_db_num_rows($stock_query) > 0) {
	    $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'])) {
		  if ($stock_values['products_bundle'] == 'yes') {
		    reduce_bundle_stock($order->products[$i]['id'], $order->products[$i]['qty']);
		    $stock_left = 1; // products_quantity has no meaning for bundles but must be at least one for bundle to sell, bundle quantity check is done by other means
		  } else {
		    $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) && (STOCK_ALLOW_CHECKOUT == 'false') ) {
		  tep_db_query("update " . TABLE_PRODUCTS . " set products_status = '0' where products_id = '" . tep_get_prid($order->products[$i]['id']) . "'");
	    }
	  }
    }
  // end product bundles

// 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'],
						    '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 (isset($order->products[$i]['attributes'])) {
	  $attributes_exist = '1';
	  for ($j=0, $n2=sizeof($order->products[$i]['attributes']); $j<$n2; $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);
// BOF Separate Pricing Per Customer attribute_groups mod
  if (isset($_SESSION['sppc_customer_group_id']) && $_SESSION['sppc_customer_group_id'] != '0') {
    $attributes_group_query = tep_db_query("select pag.options_values_price, pag.price_prefix from " . TABLE_PRODUCTS_ATTRIBUTES . " pa left join " . TABLE_PRODUCTS_ATTRIBUTES_GROUPS . " pag using(products_attributes_id) where pa.products_id = '" . tep_get_prid($order->products[$i]['id']) . "' and pa.options_id = '" . $order->products[$i]['attributes'][$j]['option_id'] . "' and pa.options_values_id = '" . $order->products[$i]['attributes'][$j]['value_id'] . "' and pag.customers_group_id = '" . (int)$_SESSION['sppc_customer_group_id'] . "'");
   if ($attributes_group = tep_db_fetch_array($attributes_group_query)) {
    $attributes_values['options_values_price'] = $attributes_group['options_values_price'];
    $attributes_values['price_prefix'] = $attributes_group['price_prefix'];
   }
  }
// EOF Separate Pricing Per Customer attribute_groups mod

	    $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') && isset($attributes_values['products_attributes_filename']) && tep_not_null($attributes_values['products_attributes_filename'])) {
// BOF Super Download Shop v1.0 mod
		  if (DOWNLOADS_CONTROLLER_FILEGROUP_STATUS != 'Yes' || !strstr($attributes_values['products_attributes_filename'], 'Group_Files-')) {
		    $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);
		  } else {
		    $filegroup_array = explode('Group_Files-', $attributes_values['products_attributes_filename']);
		    $filegroup_id = $filegroup_array[1];
		    $groupfiles_query = tep_db_query("select download_group_filename
											  from " . TABLE_PRODUCTS_ATTRIBUTES_DOWNLOAD_GROUPS_FILES . "
											  where download_group_id = '" . (int)$filegroup_id . "'");
		    while ($groupfile_array = tep_db_fetch_array($groupfiles_query)) {
			  $sql_data_array = array('orders_id' => $insert_id,
									  'orders_products_id' => $order_products_id,
									  'orders_products_filename' => $groupfile_array['download_group_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);
		    }
		  }
// EOF Super Download Shop v1.0 mod
	    }
	    $products_ordered_attributes .= "\n\t" . $attributes_values['products_options_name'] . ' ' . $attributes_values['products_options_values_name'];
	  }
    }
//------insert customer choosen option eof ----
//BEGIN SEND HTML MAIL//
    $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";
    $products_quantity .= nl2br($order->products[$i]['qty'] . "\n");
$products_name .= nl2br("" . $order->products[$i]['name'] . $products_ordered_attributes . "\n");

if (!tep_not_null($order->products[$i]['model'])) {
	   $products_model .= ''.EMAIL_NO_MODEL.'' ;
		 }
    else
	   $products_model .= nl2br($order->products[$i]['model'] . "\n");
			  
	
    $products_price .= nl2br($currencies->format($order->products[$i]['final_price'] * $order->products[$i]['qty']) . "\n");
}
 
for ($i=0; $i<sizeof($order_totals); $i++) {
    $Vartaxe .= strip_tags($order_totals[$i]['title']) . ' ' . strip_tags($order_totals[$i]['text']) . "\n";
  }

if ($order->content_type != 'virtual') {
    $Varaddress .= tep_address_label($customer_id, $sendto, 0, '', "\n") ;
  }
    if (is_object($$payment)) {
    $Varmodepay .= EMAIL_TEXT_PAYMENT_METHOD . "\n" .
				    EMAIL_SEPARATOR . "\n";
    $payment_class = $$payment;
    $Varmodpay .= $payment_class->title . "\n";
    if ($payment_class->email_footer) {
	  $Varmodpay .= $payment_class->email_footer . "\n\n";
    }
  }
$Varlogo = ''.VARLOGO.'' ;
$Vartable1 = ''.VARTABLE1.'' ;
$Vartable2 = ''.VARTABLE2.'' ;
$Vartext1 = ' <b>' . EMAIL_TEXT_DEAR . ' ' . $order->customer['firstname'] . ' ' . $order->customer['lastname'] .' </b><br>' . EMAIL_MESSAGE_GREETING ;
$Vartext2 = '    ' . EMAIL_TEXT_ORDER_NUMBER . ' <STRONG> ' . $insert_id . '</STRONG><br>' . EMAIL_TEXT_DATE_ORDERED . ': <strong>' . strftime(DATE_FORMAT_LONG) . '</strong><br><a href="' . HTTP_SERVER . DIR_WS_CATALOG . 'account_history_info.php?order_id=' . $insert_id .'">' . EMAIL_TEXT_INVOICE_URL . '</a>' ;
$Varmailfooter = ''.VARMAILFOOTER.'' ;
$VarArticles= ''.EMAIL_TEXT_PRODUCTS_ARTICLES.'' ;
$VarModele= ''.EMAIL_TEXT_PRODUCTS_MODELE.'' ;
$VarQte= ''.EMAIL_TEXT_PRODUCTS_QTY .'' ;
$VarTotal= ''.EMAIL_TEXT_TOTAL.'' ;
$VarAddresship = ''.EMAIL_TEXT_DELIVERY_ADDRESS.'' ;
$VarAddressbill = ''.EMAIL_TEXT_BILLING_ADDRESS.'' ;
$Varmetodpaye = ''.EMAIL_TEXT_PAYMENT_METHOD.'' ;
$Vardetail = ''.DETAIL .'' ;
$Varhttp = ''.VARHTTP.'';
$Varstyle = ''.VARSTYLE.'';
$Varshipaddress =''.tep_address_label($customer_id, $sendto).'';
require(DIR_WS_MODULES . 'email/html_checkout_process.php');
$email_order = $html_email_order ;
// lets start with the email confirmation
if (EMAIL_USE_HTML == 'true') {
$email_order;
}
else
{
$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) . "\n\n";
  if ($order->info['comments']) {
+    $email_order .= tep_db_output($order->info['comments']) . "\n\n";
  }
  $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";
  }
  if ($order->content_type != 'virtual') {
    $email_order .= "\n" . EMAIL_TEXT_DELIVERY_ADDRESS . "\n" .
				    EMAIL_SEPARATOR . "\n" .
				    tep_address_label($customer_id, $sendto, 0, '', "\n") . "\n";
  }
  $email_order .= "\n" . EMAIL_TEXT_BILLING_ADDRESS . "\n" .
				  EMAIL_SEPARATOR . "\n" .
				  tep_address_label($customer_id, $billto, 0, '', "\n") . "\n\n";
  if (is_object($$payment)) {
    $email_order .= EMAIL_TEXT_PAYMENT_METHOD . "\n" .
				    EMAIL_SEPARATOR . "\n";
    $payment_class = $$payment;
    $email_order .= $payment_class->title . "\n\n\n\n\n";
    if ($payment_class->email_footer) {
	  $email_order .= $payment_class->email_footer . "\n\n";
    }
  }
  $email_order .= "\n" . EMAIL_TEXT_FOOTER . "\n" .
					    HTTP_SERVER . DIR_WS_CATALOG . "\n" .
					    EMAIL_TEXT_FOOTERR . "\n" ;
}

  tep_mail($order->customer['firstname'] . ' ' . $order->customer['lastname'], $order->customer['email_address'], EMAIL_TEXT_SUBJECT, nl2br($email_order), STORE_OWNER, STORE_OWNER_EMAIL_ADDRESS, '');
  $email_order=preg_replace("/[[:alpha:]]+:\/\/[^<>[:space:]]+[[:alnum:]\/]/","<a href=\"\\0\">\\0</a>", $email_order);
// send emails to other people
  if (SEND_EXTRA_ORDER_EMAILS_TO != '') {
$email_order = $html_email_order ;
if (EMAIL_USE_HTML == 'true') {
$email_order;
}
else
{
$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) . "\n\n";
  if ($order->info['comments']) {
+    $email_order .= tep_db_output($order->info['comments']) . "\n\n";
  }
  $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";
  }
  if ($order->content_type != 'virtual') {
    $email_order .= "\n" . EMAIL_TEXT_DELIVERY_ADDRESS . "\n" .
				    EMAIL_SEPARATOR . "\n" .
				    tep_address_label($customer_id, $sendto, 0, '', "\n") . "\n";
  }
  $email_order .= "\n" . EMAIL_TEXT_BILLING_ADDRESS . "\n" .
				  EMAIL_SEPARATOR . "\n" .
				  tep_address_label($customer_id, $billto, 0, '', "\n") . "\n\n";
  if (is_object($$payment)) {
    $email_order .= EMAIL_TEXT_PAYMENT_METHOD . "\n" .
				    EMAIL_SEPARATOR . "\n";
    $payment_class = $$payment;
    $email_order .= $payment_class->title . "\n\n\n\n\n";
    if ($payment_class->email_footer) {
	  $email_order .= $payment_class->email_footer . "\n\n";
    }
  }
  $email_order .= "\n" . EMAIL_TEXT_FOOTER . "\n" .
					    HTTP_SERVER . DIR_WS_CATALOG . "\n" .
					    EMAIL_TEXT_FOOTERR . "\n" ;
}
    tep_mail('', SEND_EXTRA_ORDER_EMAILS_TO, EMAIL_TEXT_SUBJECT, nl2br($email_order), STORE_OWNER, STORE_OWNER_EMAIL_ADDRESS, '');
    $email_order=preg_replace("/[[:alpha:]]+:\/\/[^<>[:space:]]+[[:alnum:]\/]/","<a href=\"\\0\">\\0</a>", $email_order);
  }
//END SEND HTML MAIL//
// 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('billto');
  tep_session_unregister('shipping');
  tep_session_unregister('payment');
  tep_session_unregister('comments');
  //kgt - discount coupons
  tep_session_unregister('coupon');
  //end kgt - discount coupons
  tep_redirect(tep_href_link(FILENAME_CHECKOUT_SUCCESS, '', 'SSL'));
  require(DIR_WS_INCLUDES . 'application_bottom.php');
?>

Contributions successfully installed : Header tags SEO, Scrolling new products, Customer testimonials, Support tickets, Polls, Link exchange, SPPC, X-sell, Master products, Dhtml menu, Image cache, Slide show, Product videos, Product custom sort, Product notes, Discount coupons, Ask question(review style + admin), CP builder, Customers also purchased, price list, // SEO URLS 5, and forgot the others and then a real admin setup.

#218 Mystefyer

  • Community Member
  • 8 posts
  • Real Name:Emile Lensink
  • Gender:Male
  • Location:The Netherlands

Posted 02 February 2012, 11:29

Hi all,

Love the contrib. But has anyone succesfully integrated it with sending newsletters in HTML, as in the version for 2.3.1 newsletters still get send in plain text. I would like to send newsletters in html using a uhtml template but can't figure out how to do it.

So if anyone knows, thanks in advance for the help.

Regards

#219 mamegaga

  • Community Member
  • 16 posts
  • Real Name:davy

Posted 06 February 2012, 15:58

Hello All !


How to encode mail order? my website is in UTF-8, I get the mail order with symbols like this:

€ = ≠¬
é = é
etc...

How to convert emails to UTF-8?

that this change in general.php ..??? :

// Instantiate a new mail object
    $message = new email(array('X-Mailer: osCommerce'));

    // Build the text version
    $text = strip_tags($email_text);
    if (EMAIL_USE_HTML == 'true') {
	  $message->add_html($email_text, $text);
    } else {
	  $message->add_text($text);
    }

Thank you ! :thumbsup:

#220 mamegaga

  • Community Member
  • 16 posts
  • Real Name:davy

Posted 06 February 2012, 21:14

I of course placed in:

module/UHtmlEmails/Forest Green/checkout_process.php

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

But this does not solved my problem :'(

Edited by mamegaga, 06 February 2012, 21:15.