notify('NOTIFY_HEADER_START_GV_SEND');
if (isset($_POST['message'])) $_POST['message'] = zen_output_string_protected($_POST['message']);
require_once('includes/classes/http_client.php');
// verify no timeout has occurred on the send or process
if (!$_SESSION['customer_id'] and ($_GET['action'] == 'send' or $_GET['action'] == 'process')) {
zen_redirect(zen_href_link(FILENAME_TIME_OUT));
}
// if the customer is not logged on, redirect them to the login page
if (!$_SESSION['customer_id']) {
$_SESSION['navigation']->set_snapshot();
zen_redirect(zen_href_link(FILENAME_LOGIN, '', 'SSL'));
}
require(DIR_WS_MODULES . zen_get_module_directory('require_languages.php'));
if (isset($_POST['edit_x']) || isset($_POST['edit_y'])) {
$_GET['action'] = 'send';
}
// extract sender's name+email from database, since logged-in customer is the one who is sending this GV email
$account_query = "SELECT customers_firstname, customers_lastname, customers_email_address
FROM " . TABLE_CUSTOMERS . "
WHERE customers_id = :customersID";
$account_query = $db->bindVars($account_query, ':customersID', $_SESSION['customer_id'], 'integer');
$account = $db->Execute($account_query);
$send_name = $account->fields['customers_firstname'] . ' ' . $account->fields['customers_lastname'];
$send_firstname = $account->fields['customers_firstname'];
$gv_query = "SELECT amount
FROM " . TABLE_COUPON_GV_CUSTOMER . "
WHERE customer_id = :customersID";
$gv_query = $db->bindVars($gv_query, ':customersID', $_SESSION['customer_id'], 'integer');
$gv_result = $db->Execute($gv_query);
// Sanity Check
// Some stuff for debugging
// First let's get the local and base for how much the customer has in his GV account
// The customer_gv account is always stored in the store's base currency
// $local_customer_gv = $currencies->value($gv_result->fields['amount']);
// $base_customer_gv = $gv_result->fields['amount'];
// Now let's get the amount that the customer wants to send.
// $local_customer_send = $_POST['amount'];
// $base_customer_send = $currencies->value($_POST['amount'], true, DEFAULT_CURRENCY);
if ($_GET['action'] == 'send') {
$_SESSION['complete'] = '';
$error = false;
if (isset($_POST['edit_x']) || isset($_POST['edit_y'])) {
$error = true;
}
if (!isset($_POST['to_name']) || trim($_POST['to_name']=='')) {
$error = true;
$messageStack->add('gv_send', ERROR_ENTRY_TO_NAME_CHECK, 'error');
}
if (!zen_validate_email(trim($_POST['email']))) {
$error = true;
$messageStack->add('gv_send', ERROR_ENTRY_EMAIL_ADDRESS_CHECK, 'error');
}
$customer_amount = $gv_result->fields['amount'];
$_POST['amount'] = str_replace('$', '', $_POST['amount']);
$gv_amount = trim($_POST['amount']);
if (preg_match('/[^0-9\.]/', $gv_amount)) {
$error = true;
$messageStack->add('gv_send', ERROR_ENTRY_AMOUNT_CHECK, 'error');
}
if ( $currencies->value($gv_amount, true,DEFAULT_CURRENCY) > $customer_amount || $gv_amount == 0) {
//echo $currencies->value($customer_amount, true,DEFAULT_CURRENCY);
$error = true;
$messageStack->add('gv_send', ERROR_ENTRY_AMOUNT_CHECK, 'error');
}
}
if ($_GET['action'] == 'process') {
if (!isset($_POST['back'])) { // customer didn't click the back button
$id1 = zen_create_coupon_code($mail['customers_email_address']);
// sanitize and remove non-numeric characters
$_POST['amount'] = preg_replace('/[^0-9.%]/', '', $_POST['amount']);
$new_amount = $gv_result->fields['amount'] - $currencies->value($_POST['amount'], true, DEFAULT_CURRENCY);
//die($currencies->value($_POST['amount'], true, $_SESSION['currency']));
$new_db_amount = $gv_result->fields['amount'] - $currencies->value($_POST['amount'], true, DEFAULT_CURRENCY);
if ($new_amount < 0) {
$error= true;
$messageStack->add('gv_send', ERROR_ENTRY_AMOUNT_CHECK, 'error');
$_GET['action'] = 'send';
} else {
$_GET['action'] = 'complete';
$gv_query="UPDATE " . TABLE_COUPON_GV_CUSTOMER . "
SET amount = '" . $new_amount . "'
WHERE customer_id = :customersID";
$gv_query = $db->bindVars($gv_query, ':customersID', $_SESSION['customer_id'], 'integer');
$db->Execute($gv_query);
$gv_query="INSERT INTO " . TABLE_COUPONS . " (coupon_type, coupon_code, date_created, coupon_amount)
VALUES ('G', :couponCode, NOW(), :amount)";
$gv_query = $db->bindVars($gv_query, ':couponCode', $id1, 'string');
$gv_query = $db->bindVars($gv_query, ':amount', $currencies->value($_POST['amount'], true, DEFAULT_CURRENCY), 'currency');
$gv = $db->Execute($gv_query);
$insert_id = $db->Insert_ID();
$gv_query="INSERT INTO " . TABLE_COUPON_EMAIL_TRACK . "(coupon_id, customer_id_sent, sent_firstname, sent_lastname, emailed_to, date_sent)
VALUES (:insertID, :customersID, :firstname, :lastname, :email, now())";
$gv_query = $db->bindVars($gv_query, ':insertID', $insert_id, 'integer');
$gv_query = $db->bindVars($gv_query, ':customersID', $_SESSION['customer_id'], 'integer');
$gv_query = $db->bindVars($gv_query, ':firstname', $account->fields['customers_firstname'], 'string');
$gv_query = $db->bindVars($gv_query, ':lastname', $account->fields['customers_lastname'], 'string');
$gv_query = $db->bindVars($gv_query, ':email', $_POST['email'], 'string');
$db->Execute($gv_query);
// build email content:
$gv_email = STORE_NAME . "\n" .
EMAIL_SEPARATOR . "\n" .
sprintf(EMAIL_GV_TEXT_HEADER, $currencies->format($_POST['amount'], false)) . "\n" .
EMAIL_SEPARATOR . "\n\n" .
sprintf(EMAIL_GV_FROM, $send_name) . "\n";
$html_msg['EMAIL_GV_TEXT_HEADER'] = sprintf(EMAIL_GV_TEXT_HEADER, '');
$html_msg['EMAIL_GV_AMOUNT'] = $currencies->format($_POST['amount'], false);
$html_msg['EMAIL_GV_FROM'] = sprintf(EMAIL_GV_FROM, $send_name) ;
if (isset($_POST['message'])) {
$gv_email .= EMAIL_GV_MESSAGE . "\n\n";
$html_msg['EMAIL_GV_MESSAGE'] = EMAIL_GV_MESSAGE . '
';
if (isset($_POST['to_name'])) {
$gv_email .= sprintf(EMAIL_GV_SEND_TO, $_POST['to_name']) . "\n\n";
$html_msg['EMAIL_GV_SEND_TO'] = ''.sprintf(EMAIL_GV_SEND_TO, $_POST['to_name']). '
';
}
$gv_email .= stripslashes($_POST['message']) . "\n\n";
$gv_email .= EMAIL_SEPARATOR . "\n\n";
$html_msg['EMAIL_MESSAGE_HTML'] = stripslashes($_POST['message']);
}
$html_msg['GV_REDEEM_HOW'] = sprintf(EMAIL_GV_REDEEM, '' . $id1 . '');
$html_msg['GV_REDEEM_URL'] = ''.EMAIL_GV_LINK.'';
$html_msg['GV_REDEEM_CODE'] = $id1;
$gv_email .= sprintf(EMAIL_GV_REDEEM, $id1) . "\n\n";
$gv_email .= EMAIL_GV_LINK . ' ' . zen_href_link(FILENAME_GV_REDEEM, 'gv_no=' . $id1, 'NONSSL', false);
$gv_email .= "\n\n";
$gv_email .= EMAIL_GV_FIXED_FOOTER . "\n\n";
$gv_email .= EMAIL_GV_SHOP_FOOTER;
$gv_email_subject = sprintf(EMAIL_GV_TEXT_SUBJECT, $send_name);
// include disclaimer
$gv_email .= "\n\n" . EMAIL_ADVISORY . "\n\n";
$html_msg['EMAIL_GV_FIXED_FOOTER'] = str_replace(array("\r\n", "\n", "\r", "-----"), '', EMAIL_GV_FIXED_FOOTER);
$html_msg['EMAIL_GV_SHOP_FOOTER'] = EMAIL_GV_SHOP_FOOTER;
// send the email
zen_mail($_POST['to_name'], $_POST['email'], $gv_email_subject, nl2br($gv_email), STORE_NAME, EMAIL_FROM, $html_msg, 'gv_send');
// send additional emails
if (SEND_EXTRA_GV_CUSTOMER_EMAILS_TO_STATUS == '1' and SEND_EXTRA_GV_CUSTOMER_EMAILS_TO !='') {
$extra_info = email_collect_extra_info(ENTRY_NAME . $_POST['to_name'], ENTRY_EMAIL . $_POST['email'], $send_name , $account->fields['customers_email_address']);
$html_msg['EXTRA_INFO'] = $extra_info['HTML'];
zen_mail('', SEND_EXTRA_GV_CUSTOMER_EMAILS_TO, SEND_EXTRA_GV_CUSTOMER_EMAILS_TO_SUBJECT . ' ' . $gv_email_subject,
$gv_email . $extra_info['TEXT'], STORE_NAME, EMAIL_FROM, $html_msg,'gv_send_extra');
}
// do a fresh calculation after sending an email
$gv_query = "SELECT amount
FROM " . TABLE_COUPON_GV_CUSTOMER . "
WHERE customer_id = :customersID";
$gv_query = $db->bindVars($gv_query, ':customersID', $_SESSION['customer_id'], 'integer');
$gv_result = $db->Execute($gv_query);
}
} else { // customer DID click the back button
$_GET['action'] = '';
}
}
$gv_current_balance = $currencies->format($gv_result->fields['amount']);
if ($_GET['action'] == 'complete') zen_redirect(zen_href_link(FILENAME_GV_SEND, 'action=doneprocess'));
$breadcrumb->add(NAVBAR_TITLE);
// validate entries
$gv_amount = (float)$gv_amount;
// This should be last line of the script:
$zco_notifier->notify('NOTIFY_HEADER_END_GV_SEND');