function sendMessage($func_messagename, $func_id, $extra = "", $displayresult = "", $attachments = "") { global $whmcs; global $CONFIG; global $_LANG; global $encryption_key; global $currency; global $downloads_dir; global $fromname; global $fromemail; global $whmcs; $sysurl = $CONFIG['SystemSSLURL'] ? $CONFIG['SystemSSLURL'] : $CONFIG['SystemURL']; $nosavemaillog = false; $email_merge_fields = array(); if ($func_messagename == "defaultnewacc") { $result = select_query("tblproducts", "tblproducts.welcomeemail", array("tblhosting.id" => $func_id), "", "", "", "tblhosting ON tblhosting.packageid=tblproducts.id"); $data = mysql_fetch_array($result); if (!$data['welcomeemail']) { return false; } $result = select_query("tblemailtemplates", "name", array("id" => $data['welcomeemail'])); $data = mysql_fetch_array($result); $func_messagename = $data['name']; } if ($func_messagename == "Order Confirmation") { $userid = $func_id; } $result = select_query("tblemailtemplates", "", array("name" => $func_messagename, "language" => "")); $data = mysql_fetch_array($result); $emailtplid = $data['id']; $type = $data['type']; $subject = $data['subject']; $message = $data['message']; $tplattachments = $data['attachments']; $fromname = $data['fromname']; $fromemail = $data['fromemail']; $disabled = $data['disabled']; $copyto = $data['copyto']; $plaintext = $data['plaintext']; if (!$emailtplid) { logActivity("EMAILERROR: Email Template " . $func_messagename . " Not Found"); return false; } if (!$func_id && $type != "support") { return false; } if ($disabled) { if ($displayresult) { echo "<p>The '" . $func_messagename . "' email template has been disabled (" . $subject . ")</p>"; } return false; } if ($type == "invoice") { $invoice = new WHMCS_Invoice($func_id); $valid = $invoice->loadData(); if (!$valid) { return false; } $data = $invoice->getOutput(); $userid = $data['userid']; $invoicedescription = ""; $invoiceitems = $invoice->getLineItems(); foreach ($invoiceitems as $item) { $invoicedescription .= $item['description'] . " " . $item['amount'] . "<br>\r\n"; } $invoicedescription .= "------------------------------------------------------<br>\r\n"; $invoicedescription .= $_LANG['invoicessubtotal'] . ": " . $data['subtotal'] . "<br>\r\n"; if (0 < $data['taxrate']) { $invoicedescription .= $data['taxrate'] . "% " . $data['taxname'] . ": " . $data['tax'] . "<br>\r\n"; } if (0 < $data['taxrate2']) { $invoicedescription .= $data['taxrate2'] . "% " . $data['taxname2'] . ": " . $data['tax2'] . "<br>\r\n"; } $invoicedescription .= $_LANG['invoicescredit'] . ": " . $data['credit'] . "<br>\r\n"; $invoicedescription .= $_LANG['invoicestotal'] . ": " . $data['total'] . ""; $paymentbutton = $invoice->getPaymentLink(); $email_merge_fields['invoice_id'] = $data['invoiceid']; $email_merge_fields['invoice_num'] = $data['invoicenum']; $email_merge_fields['invoice_date_created'] = $data['date']; $email_merge_fields['invoice_date_due'] = $data['duedate']; $email_merge_fields['invoice_date_paid'] = $data['datepaid']; $email_merge_fields['invoice_items'] = $invoiceitems; $email_merge_fields['invoice_html_contents'] = $invoicedescription; $email_merge_fields['invoice_subtotal'] = $data['subtotal']; $email_merge_fields['invoice_credit'] = $data['credit']; $email_merge_fields['invoice_tax'] = $data['tax']; $email_merge_fields['invoice_tax_rate'] = $data['taxrate'] . "%"; $email_merge_fields['invoice_tax2'] = $data['tax2']; $email_merge_fields['invoice_tax_rate2'] = $data['taxrate2'] . "%"; $email_merge_fields['invoice_total'] = $data['total']; $email_merge_fields['invoice_amount_paid'] = $data['amountpaid']; $email_merge_fields['invoice_balance'] = $data['balance']; $email_merge_fields['invoice_status'] = $data['statuslocale']; $email_merge_fields['invoice_last_payment_amount'] = $data['lastpaymentamount']; $email_merge_fields['invoice_last_payment_transid'] = $data['lastpaymenttransid']; $email_merge_fields['invoice_payment_link'] = $paymentbutton; $email_merge_fields['invoice_payment_method'] = $data['paymentmethod']; $email_merge_fields['invoice_link'] = "<a href=\"" . $sysurl . "/viewinvoice.php?id=" . $data['id'] . "\">" . $sysurl . "/viewinvoice.php?id=" . $data['id'] . "</a>"; $email_merge_fields['invoice_notes'] = $data['notes']; $email_merge_fields['invoice_subscription_id'] = $data['subscrid']; $email_merge_fields['invoice_previous_balance'] = $data['clientpreviousbalance']; $email_merge_fields['invoice_all_due_total'] = $data['clienttotaldue']; $email_merge_fields['invoice_total_balance_due'] = $data['clientbalancedue']; if ($CONFIG['EnablePDFInvoices']) { $invoice->pdfCreate(); $invoice->pdfInvoicePage(); $attachmentdata = $invoice->pdfOutput(); $attachmentfilename = $_LANG['invoicefilename'] . $data['invoicenum'] . ".pdf"; } } else { if ($type == "support") { if ($func_messagename == "Bounce Message") { $firstname = $extra[0]; $email = $extra[1]; } else { $result = select_query("tbltickets", "", array("id" => $func_id)); $data = mysql_fetch_array($result); $id = $data['id']; $deptid = $data['did']; $tid = $data['tid']; $ticketcc = $data['cc']; $c = $data['c']; $userid = $data['userid']; $date = $data['date']; $title = $data['title']; $tmessage = $data['message']; $status = $data['status']; $urgency = $data['urgency']; $attachment = $data['attachment']; if ($userid) { getUsersLang($userid); } else { $whmcs->loadLanguage($_SESSION['Language']); } $urgency = $_LANG["supportticketsticketurgency" . strtolower($urgency)]; if (function_exists("getStatusColour")) { $status = getStatusColour($status); } if ($userid == "0") { $firstname = $data['name']; $email = $data['email']; } $result = select_query("tblticketdepartments", "", array("id" => $deptid)); $data = mysql_fetch_array($result); $fromname = $CONFIG['CompanyName'] . " " . $data['name']; $fromemail = $data['email']; $departmentname = $data['name']; $replyid = 0; if ($extra) { $result = select_query("tblticketreplies", "", array("id" => $extra)); $data = mysql_fetch_array($result); $replyid = $data['id']; $tmessage = $data['message']; $attachment = $data['attachment']; } if ($attachment) { global $attachments_dir; $attachment = explode("|", $attachment); $attachments = array(); foreach ($attachment as $file) { $attachments[$attachments_dir . $file] = substr($file, 7); } } $date = fromMySQLDate($date, 0, 1); if ($func_messagename != "Support Ticket Feedback Request") { $subject = "[Ticket ID: {\$ticket_id}] {\$ticket_subject}"; } $tmessage = strip_tags($tmessage); if (!function_exists("getKBAutoSuggestions")) { require ROOTDIR . "/includes/ticketfunctions.php"; } $kbarticles = getKBAutoSuggestions($tmessage); $kb_auto_suggestions = ""; foreach ($kbarticles as $kbarticle) { $kb_auto_suggestions .= "<a href=\"" . $CONFIG['SystemURL'] . "/knowledgebase.php?action=displayarticle&id=" . $kbarticle['id'] . "\" target=\"_blank\">" . $kbarticle['title'] . "</a> - " . $kbarticle['article'] . "...<br />\r\n"; } $tmessage = nl2br($tmessage); if (!function_exists("ticketAutoHyperlinks")) { require ROOTDIR . "/includes/ticketfunctions.php"; } $tmessage = ticketAutoHyperlinks($tmessage); $email_merge_fields['ticket_id'] = $tid; $email_merge_fields['ticket_reply_id'] = $replyid; $email_merge_fields['ticket_department'] = $departmentname; $email_merge_fields['ticket_date_opened'] = $date; $email_merge_fields['ticket_subject'] = $title; $email_merge_fields['ticket_message'] = $tmessage; $email_merge_fields['ticket_status'] = $status; $email_merge_fields['ticket_priority'] = $urgency; $email_merge_fields['ticket_url'] = $sysurl . ("/viewticket.php?tid=" . $tid . "&c=" . $c); $email_merge_fields['ticket_link'] = "<a href=\"" . $sysurl . ("/viewticket.php?tid=" . $tid . "&c=" . $c . "\">") . $sysurl . ("/viewticket.php?tid=" . $tid . "&c=" . $c . "</a>"); $email_merge_fields['ticket_auto_close_time'] = $CONFIG['CloseInactiveTickets']; $email_merge_fields['ticket_kb_auto_suggestions'] = $kb_auto_suggestions; if ($CONFIG['DisableSupportTicketReplyEmailsLogging'] && $func_messagename == "Support Ticket Reply") { $nosavemaillog = true; } } } else { if ($type == "domain") { $result = select_query("tbldomains", "", array("id" => $func_id)); $data = mysql_fetch_array($result); $id = $data['id']; $userid = $data['userid']; $orderid = $data['orderid']; $registrationdate = $data['registrationdate']; $status = $data['status']; $domain = $data['domain']; $firstpaymentamount = $data['firstpaymentamount']; $recurringamount = $data['recurringamount']; $registrar = $data['registrar']; $registrationperiod = $data['registrationperiod']; $expirydate = $data['expirydate']; $nextduedate = $data['nextduedate']; $gateway = $data['paymentmethod']; $dnsmanagement = $data['dnsmanagement']; $emailforwarding = $data['emailforwarding']; $idprotection = $data['idprotection']; $donotrenew = $data['donotrenew']; getUsersLang($userid); $currency = getCurrency($userid); $status = $_LANG["clientarea" . strtolower(str_replace(" ", "", $status))]; $expirydays_todaysdate = date("Ymd"); $expirydays_todaysdate = strtotime($expirydays_todaysdate); $expirydays_expirydate = strtotime($expirydate); $expirydays = round(($expirydays_expirydate - $expirydays_todaysdate) / 86400); $expirydays_nextduedate = strtotime($nextduedate); $nextduedays = round(($expirydays_nextduedate - $expirydays_todaysdate) / 86400); if ($expirydays < 0) { $expirydays = $nextduedays; } if ($expirydays < 0) { $expirydays = 0; $nextduedays = 0; } $registrationdate = fromMySQLDate($registrationdate, 0, 1); $expirydate = fromMySQLDate($expirydate, 0, 1); $nextduedate = fromMySQLDate($nextduedate, 0, 1); $domainparts = explode(".", $domain, 2); $email_merge_fields['domain_id'] = $id; $email_merge_fields['domain_order_id'] = $orderid; $email_merge_fields['domain_reg_date'] = $registrationdate; $email_merge_fields['domain_status'] = $status; $email_merge_fields['domain_name'] = $domain; $email_merge_fields['domain_sld'] = $domainparts[0]; $email_merge_fields['domain_tld'] = $domainparts[1]; $email_merge_fields['domain_first_payment_amount'] = formatCurrency($firstpaymentamount); $email_merge_fields['domain_recurring_amount'] = formatCurrency($recurringamount); $email_merge_fields['domain_registrar'] = $registrar; $email_merge_fields['domain_reg_period'] = $registrationperiod . " " . $_LANG['orderyears']; $email_merge_fields['domain_expiry_date'] = $expirydate; $email_merge_fields['domain_next_due_date'] = $nextduedate; $email_merge_fields['domain_days_until_expiry'] = $expirydays; $email_merge_fields['domain_days_until_nextdue'] = $nextduedays; $email_merge_fields['domain_dns_management'] = $dnsmanagement ? "1" : "0"; $email_merge_fields['domain_email_forwarding'] = $emailforwarding ? "1" : "0"; $email_merge_fields['domain_id_protection'] = $idprotection ? "1" : "0"; $email_merge_fields['domain_do_not_renew'] = $donotrenew ? "1" : "0"; } else { if ($type == "product") { $gatewaysarray = array(); $result = select_query("tblpaymentgateways", "gateway,value", array("setting" => "name"), "order", "ASC"); while ($data = mysql_fetch_array($result)) { $gatewaysarray[$data['gateway']] = $data['value']; } $result = select_query("tblhosting", "tblhosting.*,tblproducts.name,tblproducts.description", array("tblhosting.id" => $func_id), "", "", "", "tblproducts ON tblproducts.id=tblhosting.packageid"); $data = mysql_fetch_array($result); $id = $data['id']; $userid = $data['userid']; $orderid = $data['orderid']; $regdate = $data['regdate']; $nextduedate = $data['nextduedate']; $orderno = $data['orderno']; $domain = $data['domain']; $server = $data['server']; $package = $data['name']; $productdescription = $data['description']; $packageid = $data['packageid']; $upgrades = $data['upgrades']; $paymentmethod = $data['paymentmethod']; $paymentmethod = $gatewaysarray[$paymentmethod]; if ($regdate == $nextduedate) { $amount = $data['firstpaymentamount']; } else { $amount = $data['amount']; } $firstpaymentamount = $data['firstpaymentamount']; $recurringamount = $data['amount']; $billingcycle = $data['billingcycle']; $domainstatus = $data['domainstatus']; $username = $data['username']; $password = decrypt($data['password']); $dedicatedip = $data['dedicatedip']; $assignedips = nl2br($data['assignedips']); $dedi_ns1 = $data['ns1']; $dedi_ns2 = $data['ns2']; $subscriptionid = $data['subscriptionid']; $suspendreason = $data['suspendreason']; $canceltype = get_query_val("tblcancelrequests", "type", array("relid" => $data['id']), "id", "DESC"); $regdate = fromMySQLDate($regdate, 0, 1); if ($nextduedate != "-") { $nextduedate = fromMySQLDate($nextduedate, 0, 1); } getUsersLang($userid); $currency = getCurrency($userid); if ($domainstatus == "Suspended" && !$suspendreason) { $suspendreason = $_LANG['suspendreasonoverdue']; } $domainstatus = $_LANG["clientarea" . strtolower(str_replace(" ", "", $domainstatus))]; $canceltype = $_LANG["clientareacancellation" . strtolower(str_replace(" ", "", $canceltype))]; if ($server) { $result3 = select_query("tblservers", "", array("id" => $server)); $data3 = mysql_fetch_array($result3); $servername = $data3['name']; $serverip = $data3['ipaddress']; $serverhostname = $data3['hostname']; $ns1 = $data3['nameserver1']; $ns1ip = $data3['nameserver1ip']; $ns2 = $data3['nameserver2']; $ns2ip = $data3['nameserver2ip']; $ns3 = $data3['nameserver3']; $ns3ip = $data3['nameserver3ip']; $ns4 = $data3['nameserver4']; $ns4ip = $data3['nameserver4ip']; } $billingcycleforconfigoptions = strtolower($billingcycle); $billingcycleforconfigoptions = preg_replace("/[^a-z]/i", "", $billingcycleforconfigoptions); $langbillingcycle = $billingcycleforconfigoptions; $billingcycleforconfigoptions = str_replace("lly", "l", $billingcycleforconfigoptions); if ($billingcycleforconfigoptions == "free account") { $billingcycleforconfigoptions = "monthly"; } $configoptions = array(); $configoptionshtml = ""; $query4 = "SELECT tblproductconfigoptions.id, tblproductconfigoptions.optionname AS confoption, tblproductconfigoptions.optiontype AS conftype, tblproductconfigoptionssub.optionname, tblhostingconfigoptions.qty FROM tblhostingconfigoptions INNER JOIN tblproductconfigoptions ON tblproductconfigoptions.id = tblhostingconfigoptions.configid INNER JOIN tblproductconfigoptionssub ON tblproductconfigoptionssub.id = tblhostingconfigoptions.optionid INNER JOIN tblhosting ON tblhosting.id=tblhostingconfigoptions.relid INNER JOIN tblproductconfiglinks ON tblproductconfiglinks.gid=tblproductconfigoptions.gid WHERE tblhostingconfigoptions.relid='" . (int) $id . "' AND tblproductconfiglinks.pid=tblhosting.packageid ORDER BY tblproductconfigoptions.`order`,tblproductconfigoptions.id ASC"; $result4 = full_query($query4); while ($data4 = mysql_fetch_array($result4)) { $confoption = $data4['confoption']; $conftype = $data4['conftype']; if (strpos($confoption, "|")) { $confoption = explode("|", $confoption); $confoption = trim($confoption[1]); } $optionname = $data4['optionname']; $optionqty = $data4['qty']; if (strpos($optionname, "|")) { $optionname = explode("|", $optionname); $optionname = trim($optionname[1]); } if ($conftype == 3) { if ($optionqty) { $optionname = $_LANG['yes']; } else { $optionname = $_LANG['no']; } } else { if ($conftype == 4) { $optionname = "" . $optionqty . " x " . $optionname; } } $configoptions[] = array("id" => $data4['id'], "option" => $confoption, "type" => $conftype, "value" => $optionname, "qty" => $optionqty, "setup" => $CONFIG['CurrencySymbol'] . $data4['setup'], "recurring" => $CONFIG['CurrencySymbol'] . $data4['recurring']); $configoptionshtml .= "" . $confoption . ": " . $optionname . " " . $CONFIG['CurrencySymbol'] . $data4['recurring'] . "<br>\n"; } $email_merge_fields['service_order_id'] = $orderid; $email_merge_fields['service_id'] = $id; $email_merge_fields['service_reg_date'] = $regdate; $email_merge_fields['service_product_name'] = $package; $email_merge_fields['service_product_description'] = $productdescription; $email_merge_fields['service_config_options'] = $configoptions; $email_merge_fields['service_config_options_html'] = $configoptionshtml; $email_merge_fields['service_domain'] = $domain; $email_merge_fields['service_server_name'] = $servername; $email_merge_fields['service_server_hostname'] = $serverhostname; $email_merge_fields['service_server_ip'] = $serverip; $email_merge_fields['service_dedicated_ip'] = $dedicatedip; $email_merge_fields['service_assigned_ips'] = $assignedips; if ($dedi_ns1 != "") { $email_merge_fields['service_ns1'] = $dedi_ns1; $email_merge_fields['service_ns2'] = $dedi_ns2; } else { $email_merge_fields['service_ns1'] = $ns1; $email_merge_fields['service_ns2'] = $ns2; $email_merge_fields['service_ns3'] = $ns3; $email_merge_fields['service_ns4'] = $ns4; } $email_merge_fields['service_ns1_ip'] = $ns1ip; $email_merge_fields['service_ns2_ip'] = $ns2ip; $email_merge_fields['service_ns3_ip'] = $ns3ip; $email_merge_fields['service_ns4_ip'] = $ns4ip; $email_merge_fields['service_payment_method'] = $paymentmethod; $email_merge_fields['service_first_payment_amount'] = formatCurrency($firstpaymentamount); $email_merge_fields['service_recurring_amount'] = formatCurrency($recurringamount); $email_merge_fields['service_billing_cycle'] = $_LANG["orderpaymentterm" . $langbillingcycle]; $email_merge_fields['service_next_due_date'] = $nextduedate; $email_merge_fields['service_status'] = $domainstatus; $email_merge_fields['service_username'] = $username; $email_merge_fields['service_password'] = $password; $email_merge_fields['service_subscription_id'] = $subscriptionid; $email_merge_fields['service_suspension_reason'] = $suspendreason; $email_merge_fields['service_cancellation_type'] = $canceltype; if (!function_exists("getCustomFields")) { require dirname(__FILE__) . "/customfieldfunctions.php"; } $customfields = getCustomFields("product", $packageid, $func_id, true, ""); $email_merge_fields['service_custom_fields'] = array(); foreach ($customfields as $customfield) { $customfieldname = preg_replace("/[^0-9a-z]/", "", strtolower($customfield['name'])); $email_merge_fields["service_custom_field_" . $customfieldname] = $customfield['value']; $email_merge_fields['service_custom_fields'][] = $customfield['value']; } } else { if ($type == "affiliate") { $result = select_query("tblaffiliates", "", array("id" => $func_id)); $data = mysql_fetch_array($result); $id = $affiliateid = $data['id']; $userid = $data['clientid']; $visitors = $data['visitors']; $balance = $data['balance']; $withdrawn = $data['withdrawn']; $currency = getCurrency($userid); $balance = formatCurrency($balance); $withdrawn = formatCurrency($withdrawn); getUsersLang($userid); $referralstable .= "<table cellspacing=\"1\" bgcolor=\"#cccccc\" width=\"100%\"><tr bgcolor=\"#efefef\" style=\"text-align:center;font-weight:bold;\"><td>" . $_LANG['affiliatessignupdate'] . "</td><td>" . $_LANG['orderproduct'] . "</td><td>" . $_LANG['affiliatesamount'] . "</td><td>" . $_LANG['orderbillingcycle'] . "</td><td>" . $_LANG['affiliatescommission'] . "</td><td>" . $_LANG['affiliatesstatus'] . "</td></tr>"; $service = ""; $result = select_query("tblaffiliatesaccounts", "tblaffiliatesaccounts.*,tblproducts.name,tblhosting.userid,tblhosting.domainstatus,tblhosting.amount,tblhosting.firstpaymentamount,tblhosting.regdate,tblhosting.billingcycle", array("affiliateid" => $affiliateid), "regdate", "DESC", "", "tblhosting ON tblhosting.id=tblaffiliatesaccounts.relid INNER JOIN tblproducts ON tblproducts.id=tblhosting.packageid INNER JOIN tblclients ON tblclients.id=tblhosting.userid"); while ($data = mysql_fetch_array($result)) { $affaccid = $data['id']; $lastpaid = $data['lastpaid']; $relid = $data['relid']; $ref_userid = $data['userid']; $amount = $data['amount']; $date = $data['regdate']; $service = $data['name']; $billingcycle = $data['billingcycle']; $status = $data['domainstatus']; if ($billingcycle == "One Time") { $amount = $data['firstpaymentamount']; } $commission = calculateAffiliateCommission($affiliateid, $relid); $currency = getCurrency($ref_userid); $amount = formatCurrency($amount); $commission = formatCurrency($commission); $date = fromMySQLDate($date, 0, 1); if ($status == "Active") { $status = $_LANG['clientareaactive']; } else { if ($status == "Pending") { $status = $_LANG['clientareapending']; } else { if ($status == "Suspended") { $status = $_LANG['clientareasuspended']; } else { if ($status == "Terminated") { $status = $_LANG['clientareaterminated']; } else { if ($status == "Cancelled") { $status = $_LANG['clientareacancelled']; } else { if ($status == "Fraud") { $status = $_LANG['clientareafraud']; } } } } } } $billingcycle = strtolower($billingcycle); $billingcycle = str_replace(" ", "", $billingcycle); $billingcycle = str_replace("-", "", $billingcycle); $billingcycle = $_LANG["orderpaymentterm" . $billingcycle]; $referralstable .= "<tr bgcolor=\"#ffffff\" style=\"text-align:center;\"><td>" . $date . "</td><td>" . $service . "</td><td>" . $amount . "</td><td>" . $billingcycle . "</td><td>" . $commission . "</td><td>" . $status . "</td></tr>"; } if (!$service) { $referralstable .= "<tr bgcolor=\"#ffffff\"><td colspan=\"6\" align=\"center\">" . $_LANG['affiliatesnosignups'] . "</td></tr>"; } $referralstable .= "</table>"; $email_merge_fields['affiliate_total_visits'] = $visitors; $email_merge_fields['affiliate_balance'] = $balance; $email_merge_fields['affiliate_withdrawn'] = $withdrawn; $email_merge_fields['affiliate_referrals_table'] = $referralstable; $email_merge_fields['affiliate_referral_url'] = $CONFIG['SystemURL'] . ("/aff.php?aff=" . $id); } } } } } $contactid = ""; if ($type == "general") { $userid = $func_id; } if (in_array($func_messagename, array("Password Reset Validation", "Password Reset Confirmation", "Automated Password Reset")) && $extra['contactid']) { $contactid = $extra['contactid']; } if ($userid || $contactid) { if ($contactid) { $result2 = select_query("tblcontacts", "tblcontacts.*,(SELECT groupid FROM tblclients WHERE id=tblcontacts.userid) AS clgroupid,(SELECT groupname FROM tblclientgroups WHERE id=clgroupid) AS clgroupname,(SELECT language FROM tblclients WHERE id=tblcontacts.userid) AS language", array("id" => $contactid)); } else { $result2 = select_query("tblclients", "tblclients.*,tblclients.groupid AS clgroupid,(SELECT groupname FROM tblclientgroups WHERE id=tblclients.groupid) AS clgroupname", array("id" => $userid)); } $data2 = mysql_fetch_array($result2); if (!$firstname && !$email) { $firstname = $data2['firstname']; $email = $data2['email']; } $lastname = $data2['lastname']; $companyname = $data2['companyname']; $address1 = $data2['address1']; $address2 = $data2['address2']; $city = $data2['city']; $state = $data2['state']; $postcode = $data2['postcode']; $country = $data2['country']; $phonenumber = $data2['phonenumber']; $language = $data2['language']; $credit = $data2['credit']; $status = $data2['status']; $language = $data2['language']; $clgroupid = $data2['clgroupid']; $clgroupname = $data2['clgroupname']; $gatewayid = $data2['gatewayid']; $datecreated = fromMySQLDate($data2['datecreated'], 0, 1); $password = "******"; if ($CONFIG['NOMD5']) { $password = decrypt($data2['password']); } $cardtype = $data2['cardtype']; $cardnum = $data2['cardlastfour']; if (!function_exists("getCCDetails")) { require_once dirname(__FILE__) . "/ccfunctions.php"; } $carddetails = getCCDetails($userid); $cardexp = $carddetails['expdate']; unset($carddetails); $currency = getCurrency($userid); $balance = get_query_val("tblinvoices", "SUM(total)-COALESCE((SELECT SUM(amountin-amountout) FROM tblaccounts WHERE tblaccounts.invoiceid=tblinvoices.id),0)", array("userid" => $userid, "status" => "Unpaid")); $email_merge_fields['client_due_invoices_balance'] = formatCurrency($balance); if ($func_messagename == "Automated Password Reset" && !$CONFIG['NOMD5']) { $length = 10; $seeds = "ABCDEFGHIJKLMNPQRSTUVYXYZ0123456789abcdefghijklmnopqrstuvwxyz"; $seeds_count = strlen($seeds) - 1; $password = ""; $i = 0; while ($i < $length) { $password .= $seeds[rand(0, $seeds_count)]; ++$i; } if (!function_exists("generateClientPW")) { require_once dirname(__FILE__) . "/clientfunctions.php"; } $passwordhash = generateClientPW($password); if ($contactid) { update_query("tblcontacts", array("password" => $passwordhash), array("id" => $contactid)); } else { update_query("tblclients", array("password" => $passwordhash), array("id" => $userid)); } run_hook("ClientChangePassword", array("userid" => $userid, "password" => $password)); } if ($extra['emailquote']) { $userid = $extra['client_id']; $firstname = $extra['client_first_name']; $lastname = $extra['client_last_name']; $companyname = $extra['client_company_name']; $email = $extra['client_email']; $address1 = $extra['client_address1']; $address2 = $extra['client_address2']; $city = $extra['client_city']; $state = $extra['client_state']; $postcode = $extra['client_postcode']; $country = $extra['client_country']; $phonenumber = $extra['client_phonenumber']; $language = $extra['client_language']; $attachmentfilename = $_LANG['quotefilename'] . $extra['quote_number'] . ".pdf"; $attachmentdata = $extra['quoteattachmentdata']; $extra['quoteattachmentdata'] = ""; } } if (!$email) { return false; } $fname = trim($firstname . " " . $lastname); if ($companyname) { $fname .= " (" . $companyname . ")"; } $email_merge_fields['client_id'] = $userid; $email_merge_fields['client_name'] = $fname; $email_merge_fields['client_first_name'] = $firstname; $email_merge_fields['client_last_name'] = $lastname; $email_merge_fields['client_company_name'] = $companyname; $email_merge_fields['client_email'] = $email; $email_merge_fields['client_address1'] = $address1; $email_merge_fields['client_address2'] = $address2; $email_merge_fields['client_city'] = $city; $email_merge_fields['client_state'] = $state; $email_merge_fields['client_postcode'] = $postcode; $email_merge_fields['client_country'] = $country; $email_merge_fields['client_phonenumber'] = $phonenumber; $email_merge_fields['client_password'] = $password; $email_merge_fields['client_signup_date'] = $datecreated; $email_merge_fields['client_credit'] = formatCurrency($credit); $email_merge_fields['client_cc_type'] = $cardtype; $email_merge_fields['client_cc_number'] = $cardnum; $email_merge_fields['client_cc_expiry'] = $cardexp; $email_merge_fields['client_language'] = $language; $email_merge_fields['client_status'] = $status; $email_merge_fields['client_group_id'] = $clgroupid; $email_merge_fields['client_group_name'] = $clgroupname; $email_merge_fields['client_gateway_id'] = $gatewayid; $email_merge_fields['unsubscribe_url'] = $CONFIG['SystemURL'] . "/unsubscribe.php?email=" . $email . "&key=" . sha1($email . $userid . $cc_encryption_hash); if (!function_exists("getCustomFields")) { require dirname(__FILE__) . "/customfieldfunctions.php"; } $customfields = getCustomFields("client", "", $userid, true, ""); $email_merge_fields['client_custom_fields'] = array(); foreach ($customfields as $customfield) { $customfieldname = preg_replace("/[^0-9a-z]/", "", strtolower($customfield['name'])); $email_merge_fields["client_custom_field_" . $customfieldname] = $customfield['value']; $email_merge_fields['client_custom_fields'][] = $customfield['value']; } if (is_array($extra)) { foreach ($extra as $k => $v) { $email_merge_fields[$k] = $v; } } $email_merge_fields['company_name'] = $CONFIG['CompanyName']; $email_merge_fields['company_domain'] = $CONFIG['Domain']; $email_merge_fields['company_logo_url'] = $CONFIG['LogoURL']; $email_merge_fields['whmcs_url'] = $CONFIG['SystemURL']; $email_merge_fields['whmcs_link'] = "<a href=\"" . $CONFIG['SystemURL'] . "\">" . $CONFIG['SystemURL'] . "</a>"; $email_merge_fields['signature'] = nl2br(html_entity_decode($CONFIG['Signature'], ENT_QUOTES)); $email_merge_fields['date'] = date("l, jS F Y"); $email_merge_fields['time'] = date("g:ia"); $result = select_query("tblemailtemplates", "", array("name" => $func_messagename, "language" => $language)); $data = mysql_fetch_array($result); if (substr($subject, 0, 10) != "[Ticket ID" && $data['subject']) { $subject = $data['subject']; } if ($data['message']) { $message = $data['message']; } $emailglobalheader = html_entity_decode($CONFIG['EmailGlobalHeader'], ENT_QUOTES); $emailglobalfooter = html_entity_decode($CONFIG['EmailGlobalFooter'], ENT_QUOTES); if ($emailglobalheader) { $message = $emailglobalheader . "\r\n" . $message; } if ($emailglobalfooter) { $message = $message . "\r\n" . $emailglobalfooter; } $hookresults = run_hook("EmailPreSend", array("messagename" => $func_messagename, "relid" => $func_id)); foreach ($hookresults as $hookmergefields) { foreach ($hookmergefields as $k => $v) { if ($k == "abortsend" && $v == true) { return false; } $email_merge_fields[$k] = $v; } } if (!$fromname) { $fromname = $CONFIG['CompanyName']; } if (!$fromemail) { $fromemail = $CONFIG['Email']; } global $templates_compiledir; if (!class_exists("Smarty")) { require ROOTDIR . "/includes/smarty/Smarty.class.php"; } $smarty = new Smarty(); $smarty->caching = 0; $smarty->compile_dir = $templates_compiledir; $smarty->compile_id = md5($subject . $message); $smarty->register_resource("emailtpl", array("emailtpl_template", "emailtpl_timestamp", "emailtpl_secure", "emailtpl_trusted")); $smarty->assign("emailsubject", $subject); $smarty->assign("emailmessage", $message); foreach ($email_merge_fields as $mergefield => $mergevalue) { $smarty->assign($mergefield, $mergevalue); } $subject = $smarty->fetch("emailtpl:emailsubject"); $message = $smarty->fetch("emailtpl:emailmessage"); if (!trim($subject) && !trim($message)) { logActivity("EMAILERROR: Email Message Empty so Aborting Sending - Template Name " . $func_messagename . " ID " . $func_id); return false; } $whmcs->load_class("phpmailer"); $mail = new PHPMailer(true); try { $mail->From = $fromemail; $mail->FromName = html_entity_decode($fromname, ENT_QUOTES); if ($CONFIG['MailType'] == "mail") { $mail->Mailer = "mail"; } else { if ($CONFIG['MailType'] == "smtp") { $mail->IsSMTP(); $mail->Host = $CONFIG['SMTPHost']; $mail->Port = $CONFIG['SMTPPort']; $mail->Hostname = $_SERVER['SERVER_NAME']; if ($CONFIG['SMTPSSL']) { $mail->SMTPSecure = $CONFIG['SMTPSSL']; } if ($CONFIG['SMTPUsername']) { $mail->SMTPAuth = true; $mail->Username = $CONFIG['SMTPUsername']; $mail->Password = decrypt($CONFIG['SMTPPassword']); } $mail->Sender = $mail->From; if ($fromemail != $CONFIG['SMTPUsername']) { $mail->AddReplyTo($fromemail, html_entity_decode($fromname, ENT_QUOTES)); } } } $mail->XMailer = $whmcs->get_config("CompanyName"); $mail->CharSet = $CONFIG['Charset']; $mail->AddAddress(trim($email), html_entity_decode($firstname . " " . $lastname, ENT_QUOTES)); if ($CONFIG['BCCMessages']) { $bcc = $CONFIG['BCCMessages'] . ","; $bcc = explode(",", $bcc); foreach ($bcc as $value) { $ccaddress = trim($value); if ($ccaddress) { $mail->AddBCC($ccaddress); continue; } } } $additionalccs = ""; if ($type == "support") { if ($ticketcc) { $ticketcc = explode(",", $ticketcc); foreach ($ticketcc as $ccaddress) { $ccaddress = trim($ccaddress); if ($ccaddress) { $mail->AddAddress($ccaddress); $additionalccs .= $ccaddress . ","; continue; } } } } else { $result = select_query("tblcontacts", "", array("userid" => $userid, $type . "emails" => "1")); while ($data = mysql_fetch_array($result)) { $ccaddress = trim($data['email']); $mail->AddAddress($ccaddress, html_entity_decode($data['firstname'] . " " . $data['lastname'], ENT_QUOTES)); $additionalccs .= $ccaddress . ","; } } if ($copyto) { $copytoarray = explode(",", $copyto); if ($CONFIG['MailType'] == "mail") { foreach ($copytoarray as $copytoemail) { $mail->AddBCC(trim($copytoemail)); } } else { foreach ($copytoarray as $copytoemail) { $mail->AddCC(trim($copytoemail)); } } } if ($additionalccs) { if ($copyto) { $copyto .= ","; } $copyto = substr($additionalccs, 0, 0 - 1); } $mail->Subject = html_entity_decode($subject, ENT_QUOTES); if ($plaintext) { $message = str_replace("<br>", "", $message); $message = str_replace("<br />", "", $message); $message = strip_tags($message); $mail->Body = html_entity_decode($message, ENT_QUOTES); $message = nl2br($message); } else { $message_text = str_replace("<p>", "", $message); $message_text = str_replace("</p>", "\r\n\r\n", $message_text); $message_text = str_replace("<br>", "\r\n", $message_text); $message_text = str_replace("<br />", "\r\n", $message_text); $message_text = strip_tags($message_text); $cssdata = ""; if ($CONFIG['EmailCSS']) { $cssdata = "<style>\r\n" . $CONFIG['EmailCSS'] . "\r\n</style>"; } $message = $cssdata . "\r\n" . $message; $mail->Body = $message; $mail->AltBody = html_entity_decode($message_text, ENT_QUOTES); } if ($tplattachments) { $tplattachments = explode(",", $tplattachments); foreach ($tplattachments as $attachment) { $filename = $downloads_dir . $attachment; $displayname = substr($attachment, 7); $mail->AddAttachment($filename, $displayname); } } if ($attachmentfilename) { if (is_array($attachmentfilename)) { $count = 0; foreach ($attachmentfilename as $filelist) { $mail->AddStringAttachment($attachmentdata[$count], $filelist); ++$count; } } else { $mail->AddStringAttachment($attachmentdata, $attachmentfilename); } } if (is_array($attachments)) { foreach ($attachments as $filename => $displayname) { $mail->AddAttachment($filename, $displayname); } } global $smtp_debug; global $email_debug; global $email_preview; if ($smtp_debug) { $mail->SMTPDebug = true; } if ($email_debug) { echo "Email: " . $email . "<br>Subject: " . $subject . "<br>Message: " . $message . "<br>Attachment: " . $attachmentfilename . "<br><br>"; return false; } if ($email_preview) { echo $message; return false; } $mail->Send(); if ($displayresult) { echo "<p>Email Sent Successfully to <a href=\"clientssummary.php?userid=" . $userid . "\">" . $firstname . " " . $lastname . "</a></p>"; } if ($userid && !$nosavemaillog) { insert_query("tblemails", array("userid" => $userid, "subject" => $subject, "message" => $message, "date" => "now()", "to" => $email, "cc" => $copyto, "bcc" => $CONFIG['BCCMessages'])); } logActivity("Email Sent to " . $firstname . " " . $lastname . " (" . $subject . ")"); $mail->ClearAddresses(); } catch (phpmailerException $e) { logActivity("Email Sending Failed - " . $e->getMessage() . (" (User ID: " . $userid . " - Subject: " . $subject . ")"), "none"); if ($displayresult) { echo "<p>Email Sending Failed - " . $e->errorMessage() . "</p>"; } } catch (Exception $e) { logActivity("Email Sending Failed - " . $e->getMessage() . (" (User ID: " . $userid . " - Subject: " . $subject . ")"), "none"); if ($displayresult) { echo "<p>Email Sending Failed - " . $e->getMessage() . "</p>"; } return null; } }
} else { applyCredit($invoiceid, $invoice->getData("userid"), $creditamount); } } redir("id=" . $invoiceid); } $smartyvalues['manualapplycredit'] = true; $smartyvalues['totalcredit'] = formatCurrency($creditbal) . generate_token("form"); if (!$creditamount) { $creditamount = $balance <= $creditbal ? $balance : $creditbal; } $smartyvalues['creditamount'] = $creditamount; } $outputvars = $invoice->getOutput(); $smartyvalues = array_merge($smartyvalues, $outputvars); $invoiceitems = $invoice->getLineItems(); $smartyvalues['invoiceitems'] = $invoiceitems; $transactions = $invoice->getTransactions(); $smartyvalues['transactions'] = $transactions; $paymentbutton = $invoice->getData("status") == "Unpaid" && 0 < $invoice->getData("balance") ? $invoice->getPaymentLink() : ""; $smartyvalues['paymentbutton'] = $paymentbutton; $smartyvalues['offlinepaid'] = $whmcs->get_req_var("offlinepaid"); if ($whmcs->get_config("AllowCustomerChangeInvoiceGateway")) { $smartyvalues['allowchangegateway'] = true; $gateways = new WHMCS_Gateways(); $availablegateways = $gateways->getAvailableGateways($invoiceid); $frm = new WHMCS_Form(); $gatewaydropdown = generate_token("form") . $frm->dropdown("gateway", $availablegateways, $invoice->getData("paymentmodule"), "submit()"); $smartyvalues['gatewaydropdown'] = $gatewaydropdown; } else { $smartyvalues['allowchangegateway'] = false;