527 lines
16 KiB
PHP
527 lines
16 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
|
|
*
|
|
* For questions, help, comments, discussion, etc., please join the
|
|
* Agileco community forums at http://forum.agileco.com/
|
|
*
|
|
* @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
|
|
* @version 1.4.93
|
|
*/
|
|
|
|
/**
|
|
* include_once(PATH_MODULES.'email_template/email_template.inc.php');
|
|
* $my = new email_template;
|
|
* $my->send('newsletter_subscribe', '4d1800b401f5d340f022688de0ac2687', 'f1714072da3c05a220ac3b60a3a57d88', '2', '3');
|
|
*/
|
|
class email_template
|
|
{
|
|
var $debug=false;
|
|
|
|
# Open the constructor for this mod
|
|
function construct()
|
|
{
|
|
# name of this module:
|
|
$this->module = "email_template";
|
|
|
|
# location of the construct XML file:
|
|
$this->xml_construct = PATH_MODULES . "" . $this->module . "/" . $this->module . "_construct.xml";
|
|
|
|
# open the construct file for parsing
|
|
$C_xml = new CORE_xml;
|
|
$construct = $C_xml->xml_to_array($this->xml_construct);
|
|
|
|
$this->method = $construct["construct"]["method"];
|
|
$this->trigger = $construct["construct"]["trigger"];
|
|
$this->field = $construct["construct"]["field"];
|
|
$this->table = $construct["construct"]["table"];
|
|
$this->module = $construct["construct"]["module"];
|
|
$this->cache = $construct["construct"]["cache"];
|
|
$this->order_by = $construct["construct"]["order_by"];
|
|
$this->limit = $construct["construct"]["limit"];
|
|
}
|
|
|
|
|
|
|
|
##############################
|
|
## ADD ##
|
|
##############################
|
|
function add($VAR)
|
|
{
|
|
$this->construct();
|
|
$type = "add";
|
|
$this->method["$type"] = split(",", $this->method["$type"]);
|
|
$db = new CORE_database;
|
|
$db->add($VAR, $this, $type);
|
|
}
|
|
|
|
##############################
|
|
## VIEW ##
|
|
##############################
|
|
function view($VAR)
|
|
{
|
|
$this->construct();
|
|
$type = "view";
|
|
$this->method["$type"] = split(",", $this->method["$type"]);
|
|
$db = new CORE_database;
|
|
$db->view($VAR, $this, $type);
|
|
}
|
|
|
|
##############################
|
|
## UPDATE ##
|
|
##############################
|
|
function update($VAR)
|
|
{
|
|
$this->construct();
|
|
$type = "update";
|
|
$this->method["$type"] = split(",", $this->method["$type"]);
|
|
$db = new CORE_database;
|
|
$db->update($VAR, $this, $type);
|
|
}
|
|
|
|
##############################
|
|
## DELETE ##
|
|
##############################
|
|
function delete($VAR)
|
|
{
|
|
$this->construct();
|
|
$this->associated_DELETE[] = Array( 'table' => 'email_template_translate',
|
|
'field' => 'email_template_id');
|
|
|
|
$db = new CORE_database;
|
|
$db->mass_delete($VAR, $this, "");
|
|
}
|
|
|
|
##############################
|
|
## SEARCH FORM ##
|
|
##############################
|
|
function search_form($VAR)
|
|
{
|
|
$this->construct();
|
|
$type = "search";
|
|
$this->method["$type"] = split(",", $this->method["$type"]);
|
|
$db = new CORE_database;
|
|
$db->search_form($VAR, $this, $type);
|
|
}
|
|
|
|
##############################
|
|
## SEARCH ##
|
|
##############################
|
|
function search($VAR)
|
|
{
|
|
$this->construct();
|
|
$type = "search";
|
|
$this->method["$type"] = split(",", $this->method["$type"]);
|
|
$db = new CORE_database;
|
|
$db->search($VAR, $this, $type);
|
|
}
|
|
|
|
##############################
|
|
## SEARCH SHOW ##
|
|
##############################
|
|
|
|
function search_show($VAR)
|
|
{
|
|
$this->construct();
|
|
$type = "search";
|
|
$this->method["$type"] = split(",", $this->method["$type"]);
|
|
$db = new CORE_database;
|
|
$db->search_show($VAR, $this, $type);
|
|
}
|
|
|
|
|
|
|
|
|
|
##############################
|
|
## SEND EMAIL TEMPLATE ##
|
|
##############################
|
|
|
|
function send($template, $acct, $sql1, $sql2, $sql3, $queue=true)
|
|
{
|
|
global $VAR, $C_debug;
|
|
$db = &DB();
|
|
|
|
# Send to admin only?
|
|
$admin_only = false;
|
|
if(eregi('admin->', $template)) {
|
|
$admin_only = true;
|
|
$template = eregi_replace('admin->', '', $template);
|
|
}
|
|
|
|
|
|
############################################################
|
|
### Get the template settings
|
|
|
|
$q = "SELECT * FROM ".AGILE_DB_PREFIX."email_template WHERE
|
|
site_id = ".$db->qstr(DEFAULT_SITE)." AND
|
|
name = ".$db->qstr($template);
|
|
$template = $db->Execute($q);
|
|
if($template->fields['status'] != '1')
|
|
return;
|
|
|
|
$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"];
|
|
|
|
$q = "SELECT * FROM ".AGILE_DB_PREFIX."setup_email WHERE
|
|
site_id = ".$db->qstr(DEFAULT_SITE)." AND
|
|
id = ".$db->qstr($setup_email_id);
|
|
$setup_email = $db->Execute($q);
|
|
|
|
### E-mail queue?
|
|
if($setup_email->fields['queue'] == 1 && $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(@$admin_only)
|
|
$sql_template = "admin->".$template->fields['name'];
|
|
else
|
|
$sql_template = $template->fields['name'];
|
|
|
|
# Check that this email is not already in the queue:
|
|
$q = "SELECT id FROM ".AGILE_DB_PREFIX."email_queue WHERE
|
|
site_id = ".$db->qstr(DEFAULT_SITE)." AND
|
|
status = 0 AND
|
|
account_id = '$acct' AND
|
|
email_template= ".$db->qstr($sql_template)." AND
|
|
sql1 = ".$db->qstr(@$sql1)." AND
|
|
sql2 = ".$db->qstr(@$sql2)." AND
|
|
sql3 = ".$db->qstr(@$sql3);
|
|
$duplicates = $db->Execute($q);
|
|
if($duplicates != false && $duplicates->RecordCount() > 0)
|
|
return;
|
|
|
|
# queue this e-mail:
|
|
$id = $db->GenID(AGILE_DB_PREFIX.'email_queue_id');
|
|
$sql = "INSERT INTO ".AGILE_DB_PREFIX."email_queue SET
|
|
id = $id,
|
|
site_id = ".DEFAULT_SITE.",
|
|
date_orig = ".time().",
|
|
date_last = ".time().",
|
|
status = 0,
|
|
account_id = '$acct',
|
|
email_template= ".$db->qstr($sql_template).",
|
|
sql1 = ".$db->qstr(@$sql1).",
|
|
sql2 = ".$db->qstr(@$sql2).",
|
|
sql3 = ".$db->qstr(@$sql3).",
|
|
var = ".$db->qstr(@$var);
|
|
$db->Execute($sql);
|
|
return;
|
|
}
|
|
|
|
if($setup_email->fields['type'] == 0) {
|
|
$type = 0;
|
|
} else {
|
|
$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'] = split(',', $setup_email->fields['cc_list']);
|
|
|
|
if($setup_email->fields['bcc_list'] != '')
|
|
$E['bcc_list'] = split(',', $setup_email->fields['bcc_list']);
|
|
|
|
|
|
|
|
############################################################
|
|
### Get the account settings
|
|
|
|
$q = "SELECT * FROM ".AGILE_DB_PREFIX."account WHERE
|
|
site_id = ".$db->qstr(DEFAULT_SITE)." AND
|
|
(
|
|
email = ".$db->qstr($acct)." OR
|
|
id = ".$db->qstr($acct). "
|
|
)";
|
|
$account = $db->Execute($q);
|
|
if($account == false)
|
|
{
|
|
$C_debug->error('email_template.inc.php','send1', $db->ErrorMsg() . " " . $sql);
|
|
return false;
|
|
}
|
|
else
|
|
{
|
|
if($admin_only == false)
|
|
{
|
|
if($account->RecordCount() > 0) {
|
|
$E['to_email'] = $account->fields['email'];
|
|
$E['to_name'] = $account->fields['first_name'] . ' ' . $account->fields['last_name'];
|
|
$this->ab_account = true;
|
|
} else {
|
|
$E['to_email'] = $acct;
|
|
$E['to_name'] = $acct;
|
|
$this->ab_account = false;
|
|
}
|
|
} else {
|
|
$E['to_email'] = $setup_email->fields['from_email'];
|
|
$E['to_name'] = $setup_email->fields['from_name'];
|
|
$this->ab_account = true;
|
|
}
|
|
}
|
|
|
|
|
|
############################################################
|
|
### Get the template translation for the specified account for text/htm
|
|
|
|
if(@$this->ab_account && @$account->fields["language_id"] != "")
|
|
$language_id = $account->fields["language_id"];
|
|
else
|
|
$language_id = DEFAULT_LANGUAGE;
|
|
|
|
$q = "SELECT * FROM ".AGILE_DB_PREFIX."email_template_translate WHERE
|
|
site_id = ".$db->qstr(DEFAULT_SITE)." AND
|
|
language_id = ".$db->qstr($language_id)." AND
|
|
email_template_id = ".$db->qstr($template->fields["id"]);
|
|
$setup_email = $db->Execute($q);
|
|
|
|
if(!$setup_email || !$setup_email->RecordCount()) {
|
|
# get the default translation for this email:
|
|
$q = "SELECT * FROM ".AGILE_DB_PREFIX."email_template_translate WHERE
|
|
site_id = ".$db->qstr(DEFAULT_SITE)." AND
|
|
language_id = ".$db->qstr(DEFAULT_LANGUAGE)." AND
|
|
email_template_id = ".$db->qstr($template->fields["id"]);
|
|
$setup_email = $db->Execute($q);
|
|
}
|
|
|
|
if(!$setup_email || !$setup_email->RecordCount()) {
|
|
# unable to locate translation!
|
|
global $C_debug;
|
|
$message = 'Unable to locate translation for Email Template "'.$template->fields['name'].'" and Language "'. $language_id .'" OR "' . DEFAULT_LANGUAGE . '"';
|
|
$C_debug->error('email_template.inc.php','send', $message);
|
|
return;
|
|
}
|
|
|
|
|
|
# set the subject:
|
|
$E['subject'] = $setup_email->fields['subject'];
|
|
|
|
# determine whether to send HTML or not...
|
|
if(@$this->ab_account && $account->fields['email_type'] == 1) {
|
|
if(!empty($setup_email->fields['message_html'])) {
|
|
$E['body_html'] = $setup_email->fields['message_html'];
|
|
$E['html'] = '1';
|
|
} else {
|
|
$E['body_html'] = false;
|
|
$E['html'] = '0';
|
|
}
|
|
} else {
|
|
$E['html'] = '0';
|
|
}
|
|
|
|
$E['body_text'] = $setup_email->fields['message_text'];
|
|
|
|
### Get the date-time
|
|
include_once(PATH_CORE.'list.inc.php');
|
|
$C_list = new CORE_list;
|
|
$date = $C_list->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);
|
|
|
|
### Get the replace vars from the $VAR variable:
|
|
reset($VAR);
|
|
while(list($key, $value) = each($VAR))
|
|
{
|
|
$re_this = "%var_".$key."%";
|
|
$replace[$re_this] = $value;
|
|
}
|
|
|
|
### Get the replace vars from the account:
|
|
$replace['%acct_id%'] = $acct;
|
|
if(@$this->ab_account) {
|
|
while(list($key, $value) = each($account->fields)) {
|
|
$re_this = "%acct_".$key."%";
|
|
$replace[$re_this] = $value;
|
|
}
|
|
}
|
|
|
|
############################################################
|
|
### Get the SQL1 Query/Arrays
|
|
if(!empty($template->fields["sql_1"]) && !empty($sql1) &&!is_array($sql1))
|
|
{
|
|
$sql = eregi_replace('%DB_PREFIX%', AGILE_DB_PREFIX, $template->fields["sql_1"]);
|
|
$sql = eregi_replace('%SQL1%', $db->qstr($sql1), $sql);
|
|
if(!is_array($sql2))
|
|
$sql = eregi_replace('%SQL2%', $db->qstr($sql2), $sql);
|
|
if(!is_array($sql3))
|
|
$sql = eregi_replace('%SQL3%', $db->qstr($sql3), $sql);
|
|
$sql .= " AND site_id = ". $db->qstr(DEFAULT_SITE);
|
|
$SQL_1 = $db->Execute($sql);
|
|
|
|
if($SQL_1 == false)
|
|
{
|
|
### return the error message
|
|
global $C_debug;
|
|
$C_debug->error('email_template.inc.php','send', $db->ErrorMsg() . " " . $sql);
|
|
}
|
|
else if($SQL_1->RecordCount() > 0)
|
|
{
|
|
### Get the replace vars from the sql results:
|
|
while(list($key, $value) = each($SQL_1->fields))
|
|
{
|
|
$re_this = "%sql1_".$key."%";
|
|
$replace[$re_this] = $value;
|
|
}
|
|
}
|
|
}
|
|
elseif (is_array($sql1))
|
|
{
|
|
while(list($key, $value) = each($sql1[$i]))
|
|
$replace[$key] = $value;
|
|
}
|
|
elseif (!empty($sql1))
|
|
{
|
|
$replace['%sql1%'] = $sql3;
|
|
}
|
|
|
|
|
|
############################################################
|
|
### Get the SQL2 Query/Arrays
|
|
if(!empty($template->fields["sql_2"]) && !empty($sql2) &&!is_array($sql2))
|
|
{
|
|
$sql = eregi_replace('%DB_PREFIX%', AGILE_DB_PREFIX, $template->fields["sql_2"]);
|
|
$sql = eregi_replace('%SQL1%', $db->qstr($sql1), $sql);
|
|
if(!is_array($sql2))
|
|
$sql = eregi_replace('%SQL2%', $db->qstr($sql2), $sql);
|
|
if(!is_array($sql3))
|
|
$sql = eregi_replace('%SQL3%', $db->qstr($sql3), $sql);
|
|
$sql .= " AND site_id = ".$db->qstr(DEFAULT_SITE);
|
|
$SQL_2 = $db->Execute($sql);
|
|
if($SQL_2 == false)
|
|
{
|
|
### return the error message
|
|
global $C_debug;
|
|
$C_debug->error('email_template.inc.php','send', $db->ErrorMsg() . " " . $sql);
|
|
}
|
|
else if($SQL_2->RecordCount() > 0)
|
|
{
|
|
### Get the replace vars from the sql results:
|
|
while(list($key, $value) = each($SQL_2->fields))
|
|
{
|
|
$re_this = "%sql2_".$key."%";
|
|
$replace[$re_this] = $value;
|
|
}
|
|
}
|
|
}
|
|
elseif (is_array($sql2))
|
|
{
|
|
while(list($key, $value) = each($sql2[$i]))
|
|
$replace[$key] = $value;
|
|
}
|
|
elseif (!empty($sql2))
|
|
{
|
|
$replace['%sql2%'] = $sql2;
|
|
}
|
|
|
|
|
|
############################################################
|
|
### Get the SQL3 Query/Arrays
|
|
if(!empty($template->fields["sql_3"]) && !empty($sql3) &&!is_array($sql3))
|
|
{
|
|
$sql = eregi_replace('%DB_PREFIX%', AGILE_DB_PREFIX, $template->fields["sql_3"]);
|
|
$sql = eregi_replace('%SQL1%', $db->qstr($sql1), $sql);
|
|
if(!is_array($sql2))
|
|
$sql = eregi_replace('%SQL2%', $db->qstr($sql2), $sql);
|
|
if(!is_array($sql3))
|
|
$sql = eregi_replace('%SQL3%', $db->qstr($sql3), $sql);
|
|
$sql .= " AND site_id = ".$db->qstr(DEFAULT_SITE);
|
|
$SQL_3 = $db->Execute($sql);
|
|
if($SQL_3 == false)
|
|
{
|
|
### return the error message
|
|
global $C_debug;
|
|
$C_debug->error('email_template.inc.php','send', $db->ErrorMsg() . " " . $sql);
|
|
}
|
|
else if($SQL_3->RecordCount() > 0)
|
|
{
|
|
### Get the replace vars from the sql results:
|
|
while(list($key, $value) = each($SQL_3->fields))
|
|
{
|
|
$re_this = "%sql3_".$key."%";
|
|
$replace[$re_this] = $value;
|
|
}
|
|
}
|
|
}
|
|
elseif (is_array($sql3))
|
|
{
|
|
while(list($key, $value) = each($sql3))
|
|
$replace[$key] = $value;
|
|
}
|
|
elseif (!empty($sql3))
|
|
{
|
|
$replace['%sql3%'] = $sql3;
|
|
}
|
|
|
|
### Replace the $replace vars in the body and subject
|
|
while(list($key, $value) = each($replace))
|
|
{
|
|
$E['subject'] = eregi_replace($key, $value, $E['subject']);
|
|
$E['body_text'] = eregi_replace($key, $value, $E['body_text']);
|
|
if(!empty($E['body_html']))
|
|
$E['body_html'] = eregi_replace($key, $value, $E['body_html']);
|
|
}
|
|
|
|
### Remove any unparsed vars from the body text and html:
|
|
if(!empty($E['body_html']) && ereg('%',$E['body_html']))
|
|
@$E['body_html'] = ereg_replace("%[a-zA-Z0-9_]{1,}%", '', $E['body_html']);
|
|
if(!empty($E['body_text']) && ereg("%",$E['body_text']))
|
|
@$E['body_text'] = ereg_replace("%[a-zA-Z0-9_]{1,}%", '', $E['body_text']);
|
|
|
|
### Set any attachments (not currently supported)
|
|
$E['attatchments'] = '';
|
|
|
|
/* email log? */
|
|
global $C_list;
|
|
if(is_object($C_list) && $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;
|
|
$email->debug=$this->debug;
|
|
if($type == 0)
|
|
return $email->PHP_Mail($E);
|
|
else
|
|
return $email->SMTP_Mail($E);
|
|
}
|
|
}
|
|
?>
|