Jump to content
Latest News: (loading..)
Olof Larsson

[Contribution] U HTML Emails

Recommended Posts

I installed this today and really like it. I need to add the code to my MVS contrib but i'm not clear on how to do it. Any ideas?

 

lyonsperf,

 

I'm not familiar with the MVS contribution as I don't use it myself - however, which files does it particularly affect? You mentioned that you have the UHTML contribution installed and working, therefore, which files do you require UHTML for it to work with the MVS contribution?

 

As a starting point, locate the affected files and search (cntrl F) for tep_mail - this is the function that sends the mail once all the data has been gathered. Usually above the tep_mail function you will find $email or $email_ it's at this point you will need to include the UHTML email if - else statement.

 

If you poost your code, I'll have a quick look for you.

 

James

Share this post


Link to post
Share on other sites

Hello,

 

I have installed this great contribution, but for my shop it has a bug, I think :(

 

Sometimes a cell, from the products table, is blank making the rest from the same row being postponed.

 

If I make again the same order (with the same products in the same order), this bug may not occur, but can occur to the next order. It's quite random :(

 

Anyone can help, please? :huh:

 

Thanks in advance.

 

Picture attached.

 

displayerror.th.jpg

Edited by ultras.nick

Share this post


Link to post
Share on other sites

Just congratulations for the Addon... It was a little messy because of my ultramodified OsCommerce Web, but at last, Forest Green layout is great for me!.

Keep the hard work and thanks!!

 

Jorge.

Share this post


Link to post
Share on other sites
Hi All.

 

I have been trying to integrate this excellent module with my PayPal Standard payment module and am not having any joy at all! I'm running off osCommerce 2.2rc2a and was wondering whether anyone else has had problems getting PayPal Standard and UHTML Emails working together?

 

I've got UHTML working fine with 'Moneyorder', so it's installed correctly in /chekout_process.php - however I'm not generating HTML emails through PayPal Standard. My search has lead me to the /includes/modules/payment/paypal_standard.php file which seems to run the chekout_process script itself. But on inserting the UHTML ifelse statement in there, it breaks the process... so I'm a little lost!

 

If anyone has got it working and could give me some pointers, I'd be very greatful!

 

Regards,

James

 

I had problems but I got there in the end - of course, my problems may not be the same as yours.

 

This is what I have done (I think!):

 

/catalog/includes/modules/payment/

 

edit paypal_standard.php

 

find around line 560

 

//------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";
  }

 

and under this insert:

 

// lets start with the email confirmation
//---  Beginning of addition: Ultimate HTML Emails  ---//
if (EMAIL_USE_HTML == 'true') {
require(DIR_WS_MODULES . 'UHtmlEmails/'. ULTIMATE_HTML_EMAIL_LAYOUT .'/checkout_process_paypal.php');
$email_order = $html_email;
}else{//Send text email
//---  End of addition: Ultimate HTML Emails  ---//

 

find this at around line 620:

 

	  tep_mail($order->customer['firstname'] . ' ' . $order->customer['lastname'], $order->customer['email_address'], EMAIL_TEXT_SUBJECT, $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, $email_order, STORE_OWNER, STORE_OWNER_EMAIL_ADDRESS);
  }

 

and ABOVE it insert this:

 

//---  Beginning of addition: Ultimate HTML Emails  ---//
}

if(ULTIMATE_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_checkout_process.php.htm';
$TheFileHandle = fopen($TheFileName, 'w') or die("can't open error log file");
fwrite($TheFileHandle, $email_order);
fclose($TheFileHandle);
}
//---  End of addition: Ultimate HTML Emails  ---//

 

close and save this now.

 

Goto /public_html/catalog/includes/modules/UHtmlEmails/xxxxxxx/

 

where xxxxx is the template folder you are using.

 

create a duplicate of checkout_process and call it 'checkout_process_paypal.php'

 

open the file and change line 15:

 

require(DIR_WS_LANGUAGES . $language . '/modules/UHtmlEmails/Standard/checkout_process.php');

change to :

require(DIR_WS_LANGUAGES . 'english/modules/UHtmlEmails/Standard/checkout_process.php');

 

Seems to be working OK for me at the moment, I've gone through checkout quite a few times now with no problems that I know of yet.

 

Don't ask me how or why it works, it just works for me.

Share this post


Link to post
Share on other sites

Andrew,

 

Thank you so much for posting your findings! I've sunk so many hours into trying to get this to work wioth paypal_standard! I shall amend the code this evening (when I get home from my day job) and get back to you with whether it works. If it does, I'd probably recommend adding it to the contribution thread!

 

Thanks once again for taking the time to post your code... it's good to see that there are helpful people out there!

 

Have a good day

James

Share this post


Link to post
Share on other sites

Hi All,

I use this contribute already for a long time and it is a great one !!

 

Now i started to build a new shop ...

 

I have use now also the contribute Imprint Text Options

 

The problem is :

 

When i place an order in my webshop , i see the extra text i did add with Imprint,

i can type some extra tekst that is needed for this order ( example the text what my custumors want to have printed on the article)

 

when i place in my own shop a order , everything goes fine

Till i recieve the E-mail ,,

i cant find anything back from the extra added text ?

If i look back in my shop and via my admin to "placed orders" i see the text without problems

 

so it has to do somewhere with U HTML Email ,

 

WHERE or WHAT do i need to change so the extra text is also added in the emails ?

 

Hope someone can help me with this

 

Many thanks

 

Mandy

Edited by mandynl

Share this post


Link to post
Share on other sites
Ok, after much toying around I finally decided that I should put something into the created database table for the mod. Everything works wonderfully now.

 

If you get this error, it probably means that the database table did not get any information inserted into it during the SQL installation.

 

All things come to those who wait. Or mess with stuff till they figure it out. Or break things and put them back together again. Or...

 

I get the same exact error

 

1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'EXISTS(SELECT * FROM uhtml_newsletters_sent WHERE customers_id=

SELECT c.customers_id, c.customers_firstname, c.customers_lastname, c.customers_email_address FROM customers c WHERE customers_newsletter = '1' AND NOT EXISTS(SELECT * FROM uhtml_newsletters_sent WHERE customers_id=c.customers_id AND newsletters_id='3') LIMIT 10

 

Does anyone know how to fix this?

Share this post


Link to post
Share on other sites

Yeah this is working, but when you have multi language installed...all orders proceceed by paypal will have emails sent in english (or whatever language u decide to write in

 

require(DIR_WS_LANGUAGES . $language . '/modules/UHtmlEmails/Standard/checkout_process.php');

change to :

require(DIR_WS_LANGUAGES . 'english/modules/UHtmlEmails/Standard/checkout_process.php');

 

so a french customer will have an english mail....it's a bit tricky :(

 

basically the problem is when returning from paypal on site, it doesn't creat good patch so you end with errors..

 

it search for includes/languages/modules/UHtmlEmails/Standard/checkout_process.php

instead of where it's

includes/languages/YOURLANGUAGE/modules/UHtmlEmails/Standard/checkout_process.php

 

thats' why it creat a "failed to open stream: No such file or directory"

 

i can't find out why...because the line is correct

 

require(DIR_WS_LANGUAGES . $language . '/modules/UHtmlEmails/Standard/checkout_process.php');

 

my only guess is that paypal is losing lauguage or something from time you click confirm and time it goes back to site after payment.

 

ONE more issue with paypal and his bypass of checkout_process.....

 

No one found at alternative change working without define a fixed language??

 

i would love to hear it.

 

Thanx

 

I had problems but I got there in the end - of course, my problems may not be the same as yours.

 

This is what I have done (I think!):

 

/catalog/includes/modules/payment/

 

edit paypal_standard.php

 

find around line 560

 

//------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";
  }

 

and under this insert:

 

// lets start with the email confirmation
//---  Beginning of addition: Ultimate HTML Emails  ---//
if (EMAIL_USE_HTML == 'true') {
require(DIR_WS_MODULES . 'UHtmlEmails/'. ULTIMATE_HTML_EMAIL_LAYOUT .'/checkout_process_paypal.php');
$email_order = $html_email;
}else{//Send text email
//---  End of addition: Ultimate HTML Emails  ---//

 

find this at around line 620:

 

	  tep_mail($order->customer['firstname'] . ' ' . $order->customer['lastname'], $order->customer['email_address'], EMAIL_TEXT_SUBJECT, $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, $email_order, STORE_OWNER, STORE_OWNER_EMAIL_ADDRESS);
  }

 

and ABOVE it insert this:

 

//---  Beginning of addition: Ultimate HTML Emails  ---//
}

if(ULTIMATE_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_checkout_process.php.htm';
$TheFileHandle = fopen($TheFileName, 'w') or die("can't open error log file");
fwrite($TheFileHandle, $email_order);
fclose($TheFileHandle);
}
//---  End of addition: Ultimate HTML Emails  ---//

 

close and save this now.

 

Goto /public_html/catalog/includes/modules/UHtmlEmails/xxxxxxx/

 

where xxxxx is the template folder you are using.

 

create a duplicate of checkout_process and call it 'checkout_process_paypal.php'

 

open the file and change line 15:

 

require(DIR_WS_LANGUAGES . $language . '/modules/UHtmlEmails/Standard/checkout_process.php');

change to :

require(DIR_WS_LANGUAGES . 'english/modules/UHtmlEmails/Standard/checkout_process.php');

 

Seems to be working OK for me at the moment, I've gone through checkout quite a few times now with no problems that I know of yet.

 

Don't ask me how or why it works, it just works for me.

Share this post


Link to post
Share on other sites

Hi all.

 

I have a small problem with this addon. I have a webshop and I use the Customer Discount addon there. When people buy a product and the person has a discount. The price mentioned in the email has the discount subtracted two times!

 

Example,

 

Product real cost is 10,-

Customer has a 10% discount

Cust sees on the shop that the product costs 9,- (that's with the 10% off)

Cust make order, I see in the admin part also that the product is 9,-

When I check the mail, the product costs 8,10 (again 10% was taken off)

 

The total price in the order is correct.

 

Hoe can I solve this?

Share this post


Link to post
Share on other sites

Hi,

 

hope you can help, I have the UHTML mod in place and I am trying to get the CCGV information to display in an email generated by create_account.php but no matter what I do I appear to get it wrong.

 

I have the file create_account.php working, in that it will send the ccgv information top the customer only when the the uhtml is switched off.

 

my code is as follows for the create_account.php

 

<?php
/*
 $Id: create_account.php 1739 2007-12-20 00:52:16Z hpdl $

 osCommerce, Open Source E-Commerce Solutions
 http://www.oscommerce.com

 Copyright (c) 2003 osCommerce

 Released under the GNU General Public License
*/

 require('includes/application_top.php');

// needs to be included earlier to set the success message in the messageStack
 require(DIR_WS_LANGUAGES . $language . '/' . FILENAME_CREATE_ACCOUNT);

 $process = false;
 if (isset($HTTP_POST_VARS['action']) && ($HTTP_POST_VARS['action'] == 'process')) {
   $process = true;

   if (ACCOUNT_GENDER == 'true') {
     if (isset($HTTP_POST_VARS['gender'])) {
       $gender = tep_db_prepare_input($HTTP_POST_VARS['gender']);
     } else {
       $gender = false;
     }
   }
   $firstname = tep_db_prepare_input($HTTP_POST_VARS['firstname']);
   $lastname = tep_db_prepare_input($HTTP_POST_VARS['lastname']);
   if (ACCOUNT_DOB == 'true') $dob = tep_db_prepare_input($HTTP_POST_VARS['dob']);
   $email_address = tep_db_prepare_input($HTTP_POST_VARS['email_address']);
   if (ACCOUNT_COMPANY == 'true') $company = tep_db_prepare_input($HTTP_POST_VARS['company']);
   $street_address = tep_db_prepare_input($HTTP_POST_VARS['street_address']);
   if (ACCOUNT_SUBURB == 'true') $suburb = tep_db_prepare_input($HTTP_POST_VARS['suburb']);
   $postcode = tep_db_prepare_input($HTTP_POST_VARS['postcode']);
   $city = tep_db_prepare_input($HTTP_POST_VARS['city']);
   if (ACCOUNT_STATE == 'true') {
     $state = tep_db_prepare_input($HTTP_POST_VARS['state']);
     if (isset($HTTP_POST_VARS['zone_id'])) {
       $zone_id = tep_db_prepare_input($HTTP_POST_VARS['zone_id']);
     } else {
       $zone_id = false;
     }
   }
   $country = tep_db_prepare_input($HTTP_POST_VARS['country']);
   $telephone = tep_db_prepare_input($HTTP_POST_VARS['telephone']);
   $fax = tep_db_prepare_input($HTTP_POST_VARS['fax']);
   if (isset($HTTP_POST_VARS['newsletter'])) {
     $newsletter = tep_db_prepare_input($HTTP_POST_VARS['newsletter']);
   } else {
     $newsletter = false;
   }
   $password = tep_db_prepare_input($HTTP_POST_VARS['password']);
   $confirmation = tep_db_prepare_input($HTTP_POST_VARS['confirmation']);

   $error = false;

   if (ACCOUNT_GENDER == 'true') {
     if ( ($gender != 'm') && ($gender != 'f') ) {
       $error = true;

       $messageStack->add('create_account', ENTRY_GENDER_ERROR);
     }
   }

   if (strlen($firstname) < ENTRY_FIRST_NAME_MIN_LENGTH) {
     $error = true;

     $messageStack->add('create_account', ENTRY_FIRST_NAME_ERROR);
   }

   if (strlen($lastname) < ENTRY_LAST_NAME_MIN_LENGTH) {
     $error = true;

     $messageStack->add('create_account', ENTRY_LAST_NAME_ERROR);
   }

   if (ACCOUNT_DOB == 'true') {
     if (checkdate(substr(tep_date_raw($dob), 4, 2), substr(tep_date_raw($dob), 6, 2), substr(tep_date_raw($dob), 0, 4)) == false) {
       $error = true;

       $messageStack->add('create_account', ENTRY_DATE_OF_BIRTH_ERROR);
     }
   }

   if (strlen($email_address) < ENTRY_EMAIL_ADDRESS_MIN_LENGTH) {
     $error = true;

     $messageStack->add('create_account', ENTRY_EMAIL_ADDRESS_ERROR);
   } elseif (tep_validate_email($email_address) == false) {
     $error = true;

     $messageStack->add('create_account', ENTRY_EMAIL_ADDRESS_CHECK_ERROR);
   } else {
     $check_email_query = tep_db_query("select count(*) as total from " . TABLE_CUSTOMERS . " where customers_email_address = '" . tep_db_input($email_address) . "'");
     $check_email = tep_db_fetch_array($check_email_query);
     if ($check_email['total'] > 0) {
       $error = true;

       $messageStack->add('create_account', ENTRY_EMAIL_ADDRESS_ERROR_EXISTS);
     }
   }

   if (strlen($street_address) < ENTRY_STREET_ADDRESS_MIN_LENGTH) {
     $error = true;

     $messageStack->add('create_account', ENTRY_STREET_ADDRESS_ERROR);
   }

   if (strlen($postcode) < ENTRY_POSTCODE_MIN_LENGTH) {
     $error = true;

     $messageStack->add('create_account', ENTRY_POST_CODE_ERROR);
   }

   if (strlen($city) < ENTRY_CITY_MIN_LENGTH) {
     $error = true;

     $messageStack->add('create_account', ENTRY_CITY_ERROR);
   }

   if (is_numeric($country) == false) {
     $error = true;

     $messageStack->add('create_account', ENTRY_COUNTRY_ERROR);
   }

   if (ACCOUNT_STATE == 'true') {
     $zone_id = 0;
     $check_query = tep_db_query("select count(*) as total from " . TABLE_ZONES . " where zone_country_id = '" . (int)$country . "'");
     $check = tep_db_fetch_array($check_query);
     $entry_state_has_zones = ($check['total'] > 0);
     if ($entry_state_has_zones == true) {
       $zone_query = tep_db_query("select distinct zone_id from " . TABLE_ZONES . " where zone_country_id = '" . (int)$country . "' and (zone_name = '" . tep_db_input($state) . "' or zone_code = '" . tep_db_input($state) . "')");
       if (tep_db_num_rows($zone_query) == 1) {
         $zone = tep_db_fetch_array($zone_query);
         $zone_id = $zone['zone_id'];
       } else {
         $error = true;

         $messageStack->add('create_account', ENTRY_STATE_ERROR_SELECT);
       }
     } else {
       if (strlen($state) < ENTRY_STATE_MIN_LENGTH) {
         $error = true;

         $messageStack->add('create_account', ENTRY_STATE_ERROR);
       }
     }
   }

   if (strlen($telephone) < ENTRY_TELEPHONE_MIN_LENGTH) {
     $error = true;

     $messageStack->add('create_account', ENTRY_TELEPHONE_NUMBER_ERROR);
   }


   if (strlen($password) < ENTRY_PASSWORD_MIN_LENGTH) {
     $error = true;

     $messageStack->add('create_account', ENTRY_PASSWORD_ERROR);
   } elseif ($password != $confirmation) {
     $error = true;

     $messageStack->add('create_account', ENTRY_PASSWORD_ERROR_NOT_MATCHING);
   }

   if ($error == false) {
     $sql_data_array = array('customers_firstname' => $firstname,
                             'customers_lastname' => $lastname,
                             'customers_email_address' => $email_address,
                             'customers_telephone' => $telephone,
                             'customers_fax' => $fax,
                             'customers_newsletter' => $newsletter,
                             'customers_password' => tep_encrypt_password($password));

     if (ACCOUNT_GENDER == 'true') $sql_data_array['customers_gender'] = $gender;
     if (ACCOUNT_DOB == 'true') $sql_data_array['customers_dob'] = tep_date_raw($dob);

     tep_db_perform(TABLE_CUSTOMERS, $sql_data_array);

     $customer_id = tep_db_insert_id();

     $sql_data_array = array('customers_id' => $customer_id,
                             'entry_firstname' => $firstname,
                             'entry_lastname' => $lastname,
                             'entry_street_address' => $street_address,
                             'entry_postcode' => $postcode,
                             'entry_city' => $city,
                             'entry_country_id' => $country);

     if (ACCOUNT_GENDER == 'true') $sql_data_array['entry_gender'] = $gender;
     if (ACCOUNT_COMPANY == 'true') $sql_data_array['entry_company'] = $company;
     if (ACCOUNT_SUBURB == 'true') $sql_data_array['entry_suburb'] = $suburb;
     if (ACCOUNT_STATE == 'true') {
       if ($zone_id > 0) {
         $sql_data_array['entry_zone_id'] = $zone_id;
         $sql_data_array['entry_state'] = '';
       } else {
         $sql_data_array['entry_zone_id'] = '0';
         $sql_data_array['entry_state'] = $state;
       }
     }

     tep_db_perform(TABLE_ADDRESS_BOOK, $sql_data_array);

     $address_id = tep_db_insert_id();

     tep_db_query("update " . TABLE_CUSTOMERS . " set customers_default_address_id = '" . (int)$address_id . "' where customers_id = '" . (int)$customer_id . "'");

     tep_db_query("insert into " . TABLE_CUSTOMERS_INFO . " (customers_info_id, customers_info_number_of_logons, customers_info_date_account_created) values ('" . (int)$customer_id . "', '0', now())");

     if (SESSION_RECREATE == 'True') {
       tep_session_recreate();
     }

     $customer_first_name = $firstname;
     $customer_default_address_id = $address_id;
     $customer_country_id = $country;
     $customer_zone_id = $zone_id;
     tep_session_register('customer_id');
     tep_session_register('customer_first_name');
     tep_session_register('customer_default_address_id');
     tep_session_register('customer_country_id');
     tep_session_register('customer_zone_id');

// restore cart contents
     $cart->restore_contents();
// restore wishlist to sesssion
       $wishList->restore_wishlist();
// build the message content
//---  Beginning of addition: Ultimate HTML Emails  ---//
if (EMAIL_USE_HTML == 'true') {
require(DIR_WS_MODULES . 'UHtmlEmails/'. ULTIMATE_HTML_EMAIL_LAYOUT .'/create_account.php');
$email_text = $html_email;
}else{
//---  End of addition: Ultimate HTML Emails  ---//
     $name = $firstname . ' ' . $lastname;

     if (ACCOUNT_GENDER == 'true') {
        if ($gender == 'm') {
          $email_text = sprintf(EMAIL_GREET_MR, $lastname);
        } else {
          $email_text = sprintf(EMAIL_GREET_MS, $lastname);
        }
     } else {
       $email_text = sprintf(EMAIL_GREET_NONE, $firstname);
     }

     $email_text .= EMAIL_WELCOME . EMAIL_TEXT . EMAIL_CONTACT . EMAIL_WARNING;
// Start - CREDIT CLASS Gift Voucher Contribution
     if (NEW_SIGNUP_GIFT_VOUCHER_AMOUNT > 0) {
       $coupon_code = create_coupon_code();
       $insert_query = tep_db_query("insert into " . TABLE_COUPONS . " (coupon_code, coupon_type, coupon_amount, date_created) values ('" . $coupon_code . "', 'G', '" . NEW_SIGNUP_GIFT_VOUCHER_AMOUNT . "', now())");
       $insert_id = tep_db_insert_id();
       $insert_query = tep_db_query("insert into " . TABLE_COUPON_EMAIL_TRACK . " (coupon_id, customer_id_sent, sent_firstname, emailed_to, date_sent) values ('" . $insert_id ."', '0', 'Admin', '" . $email_address . "', now() )");

       $email_text .= sprintf(EMAIL_GV_INCENTIVE_HEADER, $currencies->format(NEW_SIGNUP_GIFT_VOUCHER_AMOUNT)) . "\n\n" .
                      sprintf(EMAIL_GV_REDEEM, $coupon_code) . "\n\n" .
                      EMAIL_GV_LINK . tep_href_link(FILENAME_GV_REDEEM, 'gv_no=' . $coupon_code,'NONSSL', false) .
                      "\n\n";
     }
     if (NEW_SIGNUP_DISCOUNT_COUPON != '') {
   		$coupon_code = NEW_SIGNUP_DISCOUNT_COUPON;
       $coupon_query = tep_db_query("select * from " . TABLE_COUPONS . " where coupon_code = '" . $coupon_code . "'");
       $coupon = tep_db_fetch_array($coupon_query);
   		$coupon_id = $coupon['coupon_id'];		
       $coupon_desc_query = tep_db_query("select * from " . TABLE_COUPONS_DESCRIPTION . " where coupon_id = '" . $coupon_id . "' and language_id = '" . (int)$languages_id . "'");
       $coupon_desc = tep_db_fetch_array($coupon_desc_query);
       $insert_query = tep_db_query("insert into " . TABLE_COUPON_EMAIL_TRACK . " (coupon_id, customer_id_sent, sent_firstname, emailed_to, date_sent) values ('" . $coupon_id ."', '0', 'Admin', '" . $email_address . "', now() )");
       $email_text .= EMAIL_COUPON_INCENTIVE_HEADER .  "\n" .
                      sprintf("%s", $coupon_desc['coupon_description']) ."\n\n" .
                      sprintf(EMAIL_COUPON_REDEEM, $coupon['coupon_code']) . "\n\n" .
                      "\n\n";
     }
// End - CREDIT CLASS Gift Voucher Contribution

//---  Beginning of addition: Ultimate HTML Emails  ---//
}

if(ULTIMATE_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_create_account.php.htm';
$TheFileHandle = fopen($TheFileName, 'w') or die("can't open error log file");
fwrite($TheFileHandle, $email_text);
fclose($TheFileHandle);
}
//---  End of addition: Ultimate HTML Emails  ---//
     tep_mail($name, $email_address, EMAIL_SUBJECT, $email_text, STORE_OWNER, STORE_OWNER_EMAIL_ADDRESS);

$owners_text = EMAIL_TEXT_OWNER_INFO . "\r\n" .EMAIL_TEXT_CUSTOMER_NAME . ' ' . $firstname . ' ' . $lastname . "\r\n" .  EMAIL_TEXT_CUSTOMER_EMAIL . ' ' .  $email_address . "\r\n" . EMAIL_TEXT_CUSTOMER_PHONE . ' ' . $telephone . "\r\n" . EMAIL_TEXT_CUSTOMER_ADDRESS . ' ' . $street_address . "\r\n" . EMAIL_TEXT_CUSTOMER_CITY . ' ' . $city . "\r\n" . EMAIL_TEXT_CUSTOMER_STATE . ' ' . $state . "\r\n" . EMAIL_TEXT_CUSTOMER_COUNTRY . ' ' . $country;

         if (SEND_EXTRA_ORDER_EMAILS_TO != '') {
       tep_mail('', SEND_EXTRA_ORDER_EMAILS_TO, EMAIL_OWNER_SUBJECT, $owners_text, STORE_OWNER, STORE_OWNER_EMAIL_ADDRESS);
        }
     tep_redirect(tep_href_link(FILENAME_CREATE_ACCOUNT_SUCCESS, '', 'SSL'));
   }
 }

 $breadcrumb->add(NAVBAR_TITLE, tep_href_link(FILENAME_CREATE_ACCOUNT, '', 'SSL'));
?>
<!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN">
<html <?php echo HTML_PARAMS; ?>>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=<?php echo CHARSET; ?>">
<title><?php echo TITLE; ?></title>
<base href="<?php echo (($request_type == 'SSL') ? HTTPS_SERVER : HTTP_SERVER) . DIR_WS_CATALOG; ?>">
<link rel="stylesheet" type="text/css" href="stylesheet.css">
<?php require('includes/form_check.js.php'); ?>
</head>
<body marginwidth="0" marginheight="0" topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0">
<!-- header //-->
<?php require(DIR_WS_INCLUDES . 'header.php'); ?>
<!-- header_eof //-->

<!-- body //-->
<table border="0" width="100%" cellspacing="3" cellpadding="3">
 <tr>
   <td width="<?php echo BOX_WIDTH; ?>" valign="top"><table border="0" width="<?php echo BOX_WIDTH; ?>" cellspacing="0" cellpadding="2">
<!-- left_navigation //-->
<?php require(DIR_WS_INCLUDES . 'column_left.php'); ?>
<!-- left_navigation_eof //-->
   </table></td>
<!-- body_text //-->
   <td width="100%" valign="top"><?php echo tep_draw_form('create_account', tep_href_link(FILENAME_CREATE_ACCOUNT, '', 'SSL'), 'post', 'onSubmit="return check_form(create_account);"') . tep_draw_hidden_field('action', 'process'); ?><table border="0" width="100%" cellspacing="0" cellpadding="0">
     <tr>
       <td><table border="0" width="100%" cellspacing="0" cellpadding="0">
         <tr>
           <td class="pageHeading"><?php echo HEADING_TITLE; ?></td>
           <td class="pageHeading" align="right"><?php echo tep_image(DIR_WS_IMAGES . 'table_background_account.gif', HEADING_TITLE, HEADING_IMAGE_WIDTH, HEADING_IMAGE_HEIGHT); ?></td>
         </tr>
       </table></td>
     </tr>
     <tr>
       <td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
     </tr>
     <tr>
       <td class="smallText"><br><?php echo sprintf(TEXT_ORIGIN_LOGIN, tep_href_link(FILENAME_LOGIN, tep_get_all_get_params(), 'SSL')); ?></td>
     </tr>
     <tr>
       <td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
     </tr>
<?php
 if ($messageStack->size('create_account') > 0) {
?>
     <tr>
       <td><?php echo $messageStack->output('create_account'); ?></td>
     </tr>
     <tr>
       <td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
     </tr>
<?php
 }
?>
     <tr>
       <td><table border="0" width="100%" cellspacing="0" cellpadding="2">
         <tr>
           <td class="main"><b><?php echo CATEGORY_PERSONAL; ?></b></td>
          <td class="inputRequirement" align="right"><?php echo FORM_REQUIRED_INFORMATION; ?></td>
         </tr>
       </table></td>
     </tr>
     <tr>
       <td><table border="0" width="100%" cellspacing="1" cellpadding="2" class="infoBox">
         <tr class="infoBoxContents">
           <td><table border="0" cellspacing="2" cellpadding="2">
<?php
 if (ACCOUNT_GENDER == 'true') {
?>
             <tr>
               <td class="main"><?php echo ENTRY_GENDER; ?></td>
               <td class="main"><?php echo tep_draw_radio_field('gender', 'm') . '  ' . MALE . '  ' . tep_draw_radio_field('gender', 'f') . '  ' . FEMALE . ' ' . (tep_not_null(ENTRY_GENDER_TEXT) ? '<span class="inputRequirement">' . ENTRY_GENDER_TEXT . '</span>': ''); ?></td>
             </tr>
<?php
 }
?>
             <tr>
               <td class="main"><?php echo ENTRY_FIRST_NAME; ?></td>
               <td class="main"><?php echo tep_draw_input_field('firstname') . ' ' . (tep_not_null(ENTRY_FIRST_NAME_TEXT) ? '<span class="inputRequirement">' . ENTRY_FIRST_NAME_TEXT . '</span>': ''); ?></td>
             </tr>
             <tr>
               <td class="main"><?php echo ENTRY_LAST_NAME; ?></td>
               <td class="main"><?php echo tep_draw_input_field('lastname') . ' ' . (tep_not_null(ENTRY_LAST_NAME_TEXT) ? '<span class="inputRequirement">' . ENTRY_LAST_NAME_TEXT . '</span>': ''); ?></td>
             </tr>
<?php
 if (ACCOUNT_DOB == 'true') {
?>
             <tr>
               <td class="main"><?php echo ENTRY_DATE_OF_BIRTH; ?></td>
               <td class="main"><?php echo tep_draw_input_field('dob') . ' ' . (tep_not_null(ENTRY_DATE_OF_BIRTH_TEXT) ? '<span class="inputRequirement">' . ENTRY_DATE_OF_BIRTH_TEXT . '</span>': ''); ?></td>
             </tr>
<?php
 }
?>
             <tr>
               <td class="main"><?php echo ENTRY_EMAIL_ADDRESS; ?></td>
               <td class="main"><?php echo tep_draw_input_field('email_address') . ' ' . (tep_not_null(ENTRY_EMAIL_ADDRESS_TEXT) ? '<span class="inputRequirement">' . ENTRY_EMAIL_ADDRESS_TEXT . '</span>': ''); ?></td>
             </tr>
           </table></td>
         </tr>
       </table></td>
     </tr>
<?php
 if (ACCOUNT_COMPANY == 'true') {
?>
     <tr>
       <td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
     </tr>
     <tr>
       <td class="main"><b><?php echo CATEGORY_COMPANY; ?></b></td>
     </tr>
     <tr>
       <td><table border="0" width="100%" cellspacing="1" cellpadding="2" class="infoBox">
         <tr class="infoBoxContents">
           <td><table border="0" cellspacing="2" cellpadding="2">
             <tr>
               <td class="main"><?php echo ENTRY_COMPANY; ?></td>
               <td class="main"><?php echo tep_draw_input_field('company') . ' ' . (tep_not_null(ENTRY_COMPANY_TEXT) ? '<span class="inputRequirement">' . ENTRY_COMPANY_TEXT . '</span>': ''); ?></td>
             </tr>
           </table></td>
         </tr>
       </table></td>
     </tr>
<?php
 }
?>
     <tr>
       <td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
     </tr>
     <tr>
       <td class="main"><b><?php echo CATEGORY_ADDRESS; ?></b></td>
     </tr>
     <tr>
       <td><table border="0" width="100%" cellspacing="1" cellpadding="2" class="infoBox">
         <tr class="infoBoxContents">
           <td><table border="0" cellspacing="2" cellpadding="2">
             <tr>
               <td class="main"><?php echo ENTRY_STREET_ADDRESS; ?></td>
               <td class="main"><?php echo tep_draw_input_field('street_address') . ' ' . (tep_not_null(ENTRY_STREET_ADDRESS_TEXT) ? '<span class="inputRequirement">' . ENTRY_STREET_ADDRESS_TEXT . '</span>': ''); ?></td>
             </tr>
<?php
 if (ACCOUNT_SUBURB == 'true') {
?>
             <tr>
               <td class="main"><?php echo ENTRY_SUBURB; ?></td>
               <td class="main"><?php echo tep_draw_input_field('suburb') . ' ' . (tep_not_null(ENTRY_SUBURB_TEXT) ? '<span class="inputRequirement">' . ENTRY_SUBURB_TEXT . '</span>': ''); ?></td>
             </tr>
<?php
 }
?>
             <tr>
               <td class="main"><?php echo ENTRY_POST_CODE; ?></td>
               <td class="main"><?php echo tep_draw_input_field('postcode') . ' ' . (tep_not_null(ENTRY_POST_CODE_TEXT) ? '<span class="inputRequirement">' . ENTRY_POST_CODE_TEXT . '</span>': ''); ?></td>
             </tr>
             <tr>
               <td class="main"><?php echo ENTRY_CITY; ?></td>
               <td class="main"><?php echo tep_draw_input_field('city') . ' ' . (tep_not_null(ENTRY_CITY_TEXT) ? '<span class="inputRequirement">' . ENTRY_CITY_TEXT . '</span>': ''); ?></td>
             </tr>
<?php
 if (ACCOUNT_STATE == 'true') {
?>
             <tr>
               <td class="main"><?php echo ENTRY_STATE; ?></td>
               <td class="main">
<?php
   if ($process == true) {
     if ($entry_state_has_zones == true) {
       $zones_array = array();
       $zones_query = tep_db_query("select zone_name from " . TABLE_ZONES . " where zone_country_id = '" . (int)$country . "' order by zone_name");
       while ($zones_values = tep_db_fetch_array($zones_query)) {
         $zones_array[] = array('id' => $zones_values['zone_name'], 'text' => $zones_values['zone_name']);
       }
       echo tep_draw_pull_down_menu('state', $zones_array);
     } else {
       echo tep_draw_input_field('state');
     }
   } else {
     echo tep_draw_input_field('state');
   }

   if (tep_not_null(ENTRY_STATE_TEXT)) echo ' <span class="inputRequirement">' . ENTRY_STATE_TEXT;
?>
               </td>
             </tr>
<?php
 }
?>
             <tr>
               <td class="main"><?php echo ENTRY_COUNTRY; ?></td>
               <td class="main"><?php echo tep_get_country_list('country') . ' ' . (tep_not_null(ENTRY_COUNTRY_TEXT) ? '<span class="inputRequirement">' . ENTRY_COUNTRY_TEXT . '</span>': ''); ?></td>
             </tr>
           </table></td>
         </tr>
       </table></td>
     </tr>
     <tr>
       <td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
     </tr>
     <tr>
       <td class="main"><b><?php echo CATEGORY_CONTACT; ?></b></td>
     </tr>
     <tr>
       <td><table border="0" width="100%" cellspacing="1" cellpadding="2" class="infoBox">
         <tr class="infoBoxContents">
           <td><table border="0" cellspacing="2" cellpadding="2">
             <tr>
               <td class="main"><?php echo ENTRY_TELEPHONE_NUMBER; ?></td>
               <td class="main"><?php echo tep_draw_input_field('telephone') . ' ' . (tep_not_null(ENTRY_TELEPHONE_NUMBER_TEXT) ? '<span class="inputRequirement">' . ENTRY_TELEPHONE_NUMBER_TEXT . '</span>': ''); ?></td>
             </tr>
             <tr>
               <td class="main"><?php echo ENTRY_FAX_NUMBER; ?></td>
               <td class="main"><?php echo tep_draw_input_field('fax') . ' ' . (tep_not_null(ENTRY_FAX_NUMBER_TEXT) ? '<span class="inputRequirement">' . ENTRY_FAX_NUMBER_TEXT . '</span>': ''); ?></td>
             </tr>
           </table></td>
         </tr>
       </table></td>
     </tr>
     <tr>
       <td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
     </tr>
     <tr>
       <td class="main"><b><?php echo CATEGORY_OPTIONS; ?></b></td>
     </tr>
     <tr>
       <td><table border="0" width="100%" cellspacing="1" cellpadding="2" class="infoBox">
         <tr class="infoBoxContents">
           <td><table border="0" cellspacing="2" cellpadding="2">
             <tr>
               <td class="main"><?php echo ENTRY_NEWSLETTER; ?></td>
               <td class="main"><?php echo tep_draw_checkbox_field('newsletter', '1') . ' ' . (tep_not_null(ENTRY_NEWSLETTER_TEXT) ? '<span class="inputRequirement">' . ENTRY_NEWSLETTER_TEXT . '</span>': ''); ?></td>
             </tr>
           </table></td>
         </tr>
       </table></td>
     </tr>
     <tr>
       <td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
     </tr>
     <tr>
       <td class="main"><b><?php echo CATEGORY_PASSWORD; ?></b></td>
     </tr>
     <tr>
       <td><table border="0" width="100%" cellspacing="1" cellpadding="2" class="infoBox">
         <tr class="infoBoxContents">
           <td><table border="0" cellspacing="2" cellpadding="2">
             <tr>
               <td class="main"><?php echo ENTRY_PASSWORD; ?></td>
               <td class="main"><?php echo tep_draw_password_field('password') . ' ' . (tep_not_null(ENTRY_PASSWORD_TEXT) ? '<span class="inputRequirement">' . ENTRY_PASSWORD_TEXT . '</span>': ''); ?></td>
             </tr>
             <tr>
               <td class="main"><?php echo ENTRY_PASSWORD_CONFIRMATION; ?></td>
               <td class="main"><?php echo tep_draw_password_field('confirmation') . ' ' . (tep_not_null(ENTRY_PASSWORD_CONFIRMATION_TEXT) ? '<span class="inputRequirement">' . ENTRY_PASSWORD_CONFIRMATION_TEXT . '</span>': ''); ?></td>
             </tr>
           </table></td>
         </tr>
       </table></td>
     </tr>
     <tr>
       <td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
     </tr>
     <tr>
       <td><table border="0" width="100%" cellspacing="1" cellpadding="2" class="infoBox">
         <tr class="infoBoxContents">
           <td><table border="0" width="100%" cellspacing="0" cellpadding="2">
             <tr>
               <td width="10"><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
               <td><?php echo tep_image_submit('button_continue.gif', IMAGE_BUTTON_CONTINUE); ?></td>
               <td width="10"><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
             </tr>
           </table></td>
         </tr>
       </table></td>
     </tr>
   </table></form></td>
<!-- body_text_eof //-->
   <td width="<?php echo BOX_WIDTH; ?>" valign="top"><table border="0" width="<?php echo BOX_WIDTH; ?>" cellspacing="0" cellpadding="2">
<!-- right_navigation //-->
<?php include(DIR_WS_INCLUDES . 'column_right.php'); ?>
<!-- right_navigation_eof //-->
   </table></td>
 </tr>
</table>
<!-- body_eof //-->

<!-- footer //-->
<?php include(DIR_WS_INCLUDES . 'footer.php'); ?>
<!-- footer_eof //-->
<br>
</body>
</html>
<?php require(DIR_WS_INCLUDES . 'application_bottom.php'); ?>

 

thanks, I am probably doing or missing soething simple but I cant work out what it is, so any help would be much appreciated.


Getting better with mods but no programmer am I.

Share this post


Link to post
Share on other sites

Ok, so I've spent the last two days trying to get UHTML to work properly with my PayPal IPN, and finally i have succeeded.

 

For those still fighting with it and can't get certain information to display (eg. customer name, order number, address etc), note the comment line in ipn.php that reads:

 

// $order variables have been changed from checkout_process to work with the variables from the function query () instead of cart () in the order class

 

First follow the instructions in a previous post by grgr here

 

Then open your newly created checkout_process_paypal.php and edit the variables that are causing trouble.

 

Here are the correct variables to use (in my version of IPN anyway...)

 

ORDER NUMBER

 

Find all instances of

$insert_id

 

And replace with

$_POST['invoice']

 

CUSTOMER NAME

 

Find

. $order->customer['firstname'] . ' ' . $order->customer['lastname'].

 

And replace with

. $order->customer['name'].

 

ADDRESSES

 

Find

. tep_address_label($customer_id, $sendto, 0, '', '<br />') .

 

Replace with

. tep_address_format($order->delivery['format_id'], $order->delivery,  0, '', '<br />') .

 

Find

. tep_address_label($customer_id, $billto, 0, '', '<br />') .

 

Replace with

. tep_address_format($order->billing['format_id'], $order->billing, 0, '', '<br />') .

 

I think i've covered everything.. I hope this saves some time for those either just starting to modify the contrib or those who have been pulling their hair out like me!

 

Cheers,

Dave

Share this post


Link to post
Share on other sites

hello,

 

Love this contrib !

 

So much, I would like to have something extra in it :rolleyes:

 

How can I add the Specials from my shop to the body of this email ?

Or the "what's new" products.

 

Thank you !

Greetings, Wim.

Share this post


Link to post
Share on other sites

I know this isn't to do with this contribution but I thought worth asking but when I switch on HTML e-mail with or with out this mod I get random charactors replaced with = signs. Such as

=ate Ordered: Tuesday 15 December, 2009

 

Has anyone seen this before? and if so how did you fix this.

Share this post


Link to post
Share on other sites

How do i uninstall it and roll everything back to my previous version. I had everything backed up but when i went back to version before i'm still not getting emails sent to customers or on order updates

Share this post


Link to post
Share on other sites

Couldn't roll the changes back so i decided to go ahead with the contribution again. It did work the first time for only 2 orders but now it doesn't send any email at all. No process order email, no update order email, even Send Email under Tools doesn't work.

 

I installed version: U HTML Emails 2.1

 

Please please please help me figure this out, very very very urgent!!!!!

 

Thank you!!!!

Edited by kotaro

Share this post


Link to post
Share on other sites

Please help, because of this contribution i can't uninstall it and i can't send and can't receive any emails, i think the problem is with tep_mail but i didn't change it and it seems the problem is with $email_text

and tep_mail function doesn't like it.

 

Help me anyone, please

Share this post


Link to post
Share on other sites

Hi Guys, I've been trying to add U HTML Emails to mail.php now for a couple days,, >_< and no can do.

Before I pull out the last couple hairs I have left in my head, PLEASE, if someone has this implemented in mail.php,,, Can you PLEASE post the file code on this thread or email it to me :'( ...

 

Thank you a MILL in advance.....

Share this post


Link to post
Share on other sites
.... if someone has this implemented in mail.php,,, Can you PLEASE post the file code on this thread or email it to me :'( ....

Did you add a template?

 

I successfully installed this add-on on my heavily-modified store.

 

I currently have these other mods installed:

Simple Visitor Newsletter with HTML Support

Activation Code

Newsletter Unsubscribe

Points and Rewards

 

Thanks to Olof Larsson for his hard work!

 

One thing he didn't mention is that many email providers strip certain html and css elements from emails. For example, background images.

 

By the way, there was an error in the forgot password file. $REMOTE_ADDR doesn't work, but that's an easy fix ;]

 

If you want me to install this for you, pm me and we can talk.

Share this post


Link to post
Share on other sites

I know this isn't to do with this contribution but I thought worth asking but when I switch on HTML e-mail with or with out this mod I get random charactors replaced with = signs. Such as

=ate Ordered: Tuesday 15 December, 2009

 

Has anyone seen this before? and if so how did you fix this.

 

Sorry I only spotted this now, you probabally have it fixed by now. But for the record I fixed it by changing E-Mail Linefeeds from from LF to CrLf in the Configuration, E-Mail Options. I suspect this applies to Windows servers.

 

[order emails corrupted with equal sign randomly this breaks the emails]

 

I would reccomend this contribution to any OsCommerce user, well done to Olof and all others involved. :D

Share this post


Link to post
Share on other sites

Dear All,

 

I've installed this mod in our store and like it very much.

 

Would like the help of someone here in order to achieve two things:

 

1st: That the email subject could be "OUR STORE: YOUR ORDER Nr:" + 'The Order Number' + 'The Status of the order'...

Is that possible and there's anyone kind enough to help me figure this out?

 

2nd: The first email goes well to the customer, but the other ones, don't go with the same template... where does this mod makes that difference? Because i only see that we can modify the uhtml checkout_process.php so how come he does 2 different emails? And i'm not talking about the creat_account.php...

 

Thank you all for your support.

 

Joao Carvalho

Portugal

Share this post


Link to post
Share on other sites

Ok, so I've spent the last two days trying to get UHTML to work properly with my PayPal IPN, and finally i have succeeded.

 

For those still fighting with it and can't get certain information to display (eg. customer name, order number, address etc), note the comment line in ipn.php that reads:

 

// $order variables have been changed from checkout_process to work with the variables from the function query () instead of cart () in the order class

 

First follow the instructions in a previous post by grgr here

 

Then open your newly created checkout_process_paypal.php and edit the variables that are causing trouble.

 

Here are the correct variables to use (in my version of IPN anyway...)

 

ORDER NUMBER

 

Find all instances of

$insert_id

 

And replace with

$_POST['invoice']

 

CUSTOMER NAME

 

Find

. $order->customer['firstname'] . ' ' . $order->customer['lastname'].

 

And replace with

. $order->customer['name'].

 

ADDRESSES

 

Find

. tep_address_label($customer_id, $sendto, 0, '', '<br />') .

 

Replace with

. tep_address_format($order->delivery['format_id'], $order->delivery,  0, '', '<br />') .

 

Find

. tep_address_label($customer_id, $billto, 0, '', '<br />') .

 

Replace with

. tep_address_format($order->billing['format_id'], $order->billing, 0, '', '<br />') .

 

I think i've covered everything.. I hope this saves some time for those either just starting to modify the contrib or those who have been pulling their hair out like me!

 

Cheers,

Dave

 

Very well done!

Could you release a new version of the plugin which is also compatible with paypal?

Share this post


Link to post
Share on other sites

Olof Larsson and others :)

 

Any chance U HTML will work for oscommerce 2.3 (2.3.1) series?

 

Will it come soon? Or are there other alternatives to get rid of the white/no layout emails?

 

Thanks in advance!

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×