330 lines
9.8 KiB
PHP
330 lines
9.8 KiB
PHP
<?php
|
|
/**
|
|
* AgileBill - Open Billing Software
|
|
*
|
|
* This body of work is free software; you can redistribute it and/or
|
|
* modify it under the terms of the Open AgileBill License
|
|
* License as published at http://www.agileco.com/agilebill/license1-4.txt
|
|
*
|
|
* Originally authored by Tony Landis, AgileBill LLC
|
|
*
|
|
* Recent modifications by Deon George
|
|
*
|
|
* @author Deon George <deonATleenooksDOTnet>
|
|
* @copyright 2009 Deon George
|
|
* @link http://osb.leenooks.net
|
|
*
|
|
* @link http://www.agileco.com/
|
|
* @copyright 2004-2008 Agileco, LLC.
|
|
* @license http://www.agileco.com/agilebill/license1-4.txt
|
|
* @author Tony Landis <tony@agileco.com>
|
|
* @package AgileBill
|
|
* @subpackage Module:Mail
|
|
*/
|
|
|
|
/**
|
|
* The main AgileBill Mail Template Class
|
|
*
|
|
* include_once(PATH_MODULES.'email_template/email_template.inc.php');
|
|
* $my = new email_template;
|
|
* $my->send('newsletter_subscribe','4d1800b401f5d340f022688de0ac2687','f1714072da3c05a220ac3b60a3a57d88','2','3');
|
|
*
|
|
* @package AgileBill
|
|
* @subpackage Module:Mail
|
|
*/
|
|
class email_template extends OSB_module {
|
|
/**
|
|
* Send or Queue template based email
|
|
*
|
|
* Prefixing the template with "admin->" will result in the mail being
|
|
* sent to the admin only.
|
|
*
|
|
* @param string $template_name Name of template to use
|
|
* @param int $acct Account ID or email address
|
|
*/
|
|
public function send($template_name,$acct,$sql1,$sql2,$sql3,$queue=true) {
|
|
global $VAR,$C_debug,$C_list;
|
|
$db = &DB();
|
|
|
|
# Send to admin only?
|
|
$admin_only = false;
|
|
if (preg_match('/^admin->/',$template_name)) {
|
|
$admin_only = true;
|
|
$template_name = preg_replace('/^admin->/','',$template_name);
|
|
}
|
|
|
|
$template = $db->Execute(sqlselect($db,'email_template','*',array('name'=>$template_name)));
|
|
|
|
# If the template is not active, return.
|
|
if (! $template || $template->fields['status'] != '1')
|
|
return;
|
|
|
|
# Setup our Email
|
|
$E = array();
|
|
|
|
# Email Priority
|
|
$E['priority'] = $template->fields['priority'];
|
|
|
|
# Get the setup_email settings
|
|
if (empty($template->fields['setup_email_id']))
|
|
$setup_email_id = DEFAULT_SETUP_EMAIL;
|
|
else
|
|
$setup_email_id = $template->fields['setup_email_id'];
|
|
|
|
$setup_email = $db->Execute(sqlSelect($db,'setup_email','*',array('id'=>$setup_email_id)));
|
|
|
|
# Queue the email
|
|
if ($queue && $C_list->is_installed('email_queue') && $setup_email->fields['queue']) {
|
|
# Set sql vars
|
|
if (is_array($sql1))
|
|
$sql1 = serialize($sql1);
|
|
if (is_array($sql2))
|
|
$sql2 = serialize($sql2);
|
|
if (is_array($sql3))
|
|
$sql3 = serialize($sql3);
|
|
if (is_array($VAR))
|
|
$var = serialize($VAR);
|
|
|
|
# If this was an admin only email, we need to rewrite the template name again.
|
|
if ($admin_only)
|
|
$sql_template = sprintf('admin->%s',$template->fields['name']);
|
|
else
|
|
$sql_template = $template->fields['name'];
|
|
|
|
# Check that this email is not already in the queue
|
|
$duplicates = $db->Execute(sqlSelect($db,'email_queue','id',
|
|
array('status'=>0,'account_id'=>$acct,'email_template'=>$sql_template,'sql1'=>$sql1,'sql2'=>$sql2,'sql3'=>$sql3)
|
|
));
|
|
if ($duplicates != false && $duplicates->RecordCount() > 0)
|
|
return;
|
|
|
|
# Queue this Email
|
|
$db->Execute(sqlInsert($db,'email_queue',array(
|
|
'date_orig'=>time(),
|
|
'date_last'=>time(),
|
|
'status'=>0,
|
|
'account_id'=>$acct,
|
|
'email_template'=>$sql_template,
|
|
'sql1'=>$sql1,
|
|
'sql2'=>$sql2,
|
|
'sql3'=>$sql3,
|
|
'var'=>$var)
|
|
));
|
|
return;
|
|
}
|
|
|
|
# Is this an SMTP connection
|
|
if ($setup_email->fields['type'] == 1) {
|
|
$E['server'] = $setup_email->fields['server'];
|
|
$E['account'] = $setup_email->fields['username'];
|
|
$E['password'] = $setup_email->fields['password'];
|
|
}
|
|
|
|
$E['from_name'] = $setup_email->fields['from_name'];
|
|
$E['from_email'] = $setup_email->fields['from_email'];
|
|
|
|
if ($setup_email->fields['cc_list'])
|
|
$E['cc_list'] = explode(',',$setup_email->fields['cc_list']);
|
|
|
|
if ($setup_email->fields['bcc_list'])
|
|
$E['bcc_list'] = explode(',',$setup_email->fields['bcc_list']);
|
|
|
|
# Get the account settings
|
|
$account = $db->Execute($q=sqlSelect($db,'account','*',sprintf('(email=::%s:: OR id=::%s::)',$acct,$acct)));
|
|
if (! $account) {
|
|
$C_debug->error(__FILE__,__METHOD__,sprintf('%s %s',$db->ErrorMsg(),$q));
|
|
|
|
return false;
|
|
}
|
|
|
|
if ($admin_only) {
|
|
$E['to_email'] = $setup_email->fields['from_email'];
|
|
$E['to_name'] = $setup_email->fields['from_name'];
|
|
$ab_account = true;
|
|
|
|
} else {
|
|
if ($account->RecordCount() > 0) {
|
|
$E['to_email'] = $account->fields['email'];
|
|
$E['to_name'] = sprintf('%s %s',$account->fields['first_name'],$account->fields['last_name']);
|
|
$ab_account = true;
|
|
|
|
} else {
|
|
$E['to_email'] = $acct;
|
|
$E['to_name'] = $acct;
|
|
$ab_account = false;
|
|
}
|
|
}
|
|
|
|
# Get the template translation for the specified account for text/htm
|
|
if ($ab_account && $account->fields['language_id'])
|
|
$language_id = $account->fields['language_id'];
|
|
else
|
|
$language_id = DEFAULT_LANGUAGE;
|
|
|
|
$email_template_translate = $db->Execute(sqlSelect($db,'email_template_translate','*',array('language_id'=>$language_id,'email_template_id'=>$template->fields['id'])));
|
|
|
|
# If there is no translation, get the default translation for this email
|
|
if (! $email_template_translate || ! $email_template_translate->RecordCount())
|
|
$email_template_translate = $db->Execute(sqlSelect($db,'email_template_translate','*',array('language_id'=>DEFAULT_LANGUAGE,'email_template_id'=>$template->fields['id'])));
|
|
|
|
# Unable to locate translation?
|
|
if (! $email_template_translate || ! $email_template_translate->RecordCount()) {
|
|
global $C_debug;
|
|
|
|
$C_debug->error(__FILE__,__METHOD__,
|
|
sprintf('Unable to locate translation for Email Template %s and Language %s OR %s',$template->fields['name'],$language_id,DEFAULT_LANGUAGE));
|
|
|
|
return;
|
|
}
|
|
|
|
# Set the subject:
|
|
$E['subject'] = $email_template_translate->fields['subject'];
|
|
|
|
# Determine whether to send HTML or not...
|
|
if ($ab_account && $account->fields['email_type'] == 1) {
|
|
if (! empty($email_template_translate->fields['message_html'])) {
|
|
$E['body_html'] = $email_template_translate->fields['message_html'];
|
|
$E['html'] = '1';
|
|
|
|
} else {
|
|
$E['body_html'] = false;
|
|
$E['html'] = '0';
|
|
}
|
|
|
|
} else {
|
|
$E['html'] = '0';
|
|
}
|
|
|
|
$E['body_text'] = $email_template_translate->fields['message_text'];
|
|
|
|
# Get the date-time
|
|
include_once(PATH_CORE.'list.inc.php');
|
|
$cl = new CORE_list;
|
|
|
|
$date = $cl->date_time(time());
|
|
|
|
# Url formatting.
|
|
if ($admin_only) {
|
|
$site_url = URL.'admin.php';
|
|
$site_ssl_url = SSL_URL.'admin.php';
|
|
|
|
} else {
|
|
$site_url = URL;
|
|
$site_ssl_url = SSL_URL;
|
|
}
|
|
|
|
# Get the replace vars from the email template:
|
|
$replace = array(
|
|
'%site_name%' => $E['from_name'],
|
|
'%site_email%' => $E['from_email'],
|
|
'%url%' => $site_url,
|
|
'%date%' => $date,
|
|
'%ssl_url%' => $site_ssl_url);
|
|
|
|
# Include the replace vars from the $VAR variable:
|
|
foreach ($VAR as $key => $value) {
|
|
$re_this = sprintf('%%var_%s%%',$key);
|
|
$replace[$re_this] = $value;
|
|
}
|
|
|
|
# Get the replace vars from the account
|
|
$replace['%acct_id%'] = $acct;
|
|
if ($ab_account)
|
|
foreach ($account->fields as $key => $value) {
|
|
$re_this = sprintf('%%acct_%s%%',$key);
|
|
$replace[$re_this] = $value;
|
|
}
|
|
|
|
# Get the SQL1/2/3 Query/Arrays
|
|
foreach (array(1,2,3) as $i)
|
|
if ($template->fields['sql_'.$i] && $sql1 && ! is_array($sql1)) {
|
|
# Set our DB prefix
|
|
$sql = str_replace('%DB_PREFIX%',AGILE_DB_PREFIX,$template->fields['sql_'.$i]);
|
|
|
|
# Set the SQL
|
|
$sql = str_replace('%SQL1%',$db->qstr($sql1),$sql);
|
|
if ($sql2 && ! is_array($sql2))
|
|
$sql = str_replace('%SQL2%',$db->qstr($sql2),$sql);
|
|
if ($sql3 && ! is_array($sql3))
|
|
$sql = str_replace('%SQL3%',$db->qstr($sql3),$sql);
|
|
|
|
$sql .= sprintf(' AND site_id=%s',DEFAULT_SITE);
|
|
|
|
$SQL = $db->Execute($sql);
|
|
|
|
if (! $SQL) {
|
|
# Return the error message
|
|
global $C_debug;
|
|
|
|
$C_debug->error(__FILE__,__METHOD__,sprintf('%s %s',$db->ErrorMsg(),$sql));
|
|
|
|
} elseif ($SQL->RecordCount() > 0) {
|
|
# Get the replace vars from the sql results:
|
|
foreach ($SQL->fields as $key => $value) {
|
|
$re_this = sprintf('%%sql%s_%s%%',$i,$key);
|
|
$replace[$re_this] = $value;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (is_array($sql1)) {
|
|
echo '<PRE>1a.HOW DID I GET HERE??? (WHAT SHOULD THIS DO??)';debug_print_backtrace();die();
|
|
while(list($key,$value) = each($sql1))
|
|
$replace[$key] = $value;
|
|
|
|
} elseif ($sql1 && ! $template->fields['sql_1']) {
|
|
$replace['%sql1%'] = $sql1;
|
|
}
|
|
|
|
if (is_array($sql2)) {
|
|
echo '<PRE>2a.HOW DID I GET HERE??? (WHAT SHOULD THIS DO??)';debug_print_backtrace();die();
|
|
while(list($key,$value) = each($sql2))
|
|
$replace[$key] = $value;
|
|
|
|
} elseif ($sql2 && ! $template->fields['sql_2']) {
|
|
$replace['%sql2%'] = $sql2;
|
|
}
|
|
|
|
if (is_array($sql3)) {
|
|
echo '<PRE>3a.HOW DID I GET HERE??? (WHAT SHOULD THIS DO??)';debug_print_backtrace();die();
|
|
while(list($key,$value) = each($sql3))
|
|
$replace[$key] = $value;
|
|
|
|
} elseif ($sql3 && ! $template->fields['sql_3']) {
|
|
$replace['%sql3%'] = $sql3;
|
|
}
|
|
|
|
foreach (array('subject','body_text','body_html') as $i)
|
|
if (! empty($E[$i])) {
|
|
# Replace the $replace vars in the body and subject
|
|
foreach ($replace as $key => $value)
|
|
$E[$i] = str_replace($key,$value,$E[$i]);
|
|
|
|
# Remove any unparsed vars from the body text and html:
|
|
if (preg_match('/%/',$E[$i]))
|
|
$E[$i] = preg_replace('/%[a-zA-Z0-9_]{1,}%/','',$E[$i]);
|
|
}
|
|
|
|
# Set any attachments (not currently supported)
|
|
$E['attatchments'] = '';
|
|
|
|
# Email log?
|
|
if ($C_list->is_installed('email_log')) {
|
|
include_once(PATH_MODULES.'email_log/email_log.inc.php');
|
|
$log = new email_log;
|
|
|
|
$log->add($acct,$E['subject'],$E['body_text'],$E['to_email'],false,$E['priority']);
|
|
}
|
|
|
|
# Call the mail class
|
|
require_once(PATH_CORE.'email.inc.php');
|
|
$email = new CORE_email;
|
|
|
|
if ($setup_email->fields['type'] == 1)
|
|
return $email->SMTP_Mail($E);
|
|
else
|
|
return $email->PHP_Mail($E);
|
|
}
|
|
}
|
|
?>
|