Diff
checker
Texto
Texto
Imagens
Documentos
Excel
Pastas
Legal
Enterprise
Aplicativo para desktop
Preços
Fazer login
Baixar o Diffchecker Desktop
Comparar texto
Encontre a diferença entre dois arquivos de texto
Ferramentas
Histórico
Editor live
Ocultar espaços em branco
Recolher inalteradas
Sem quebra de linha
Layout
Dividido
Unificado
Nível de detalhe
Inteligente
Palavra
Caractere
Estilos de texto
Alterar aparência
Realce de sintaxe
Escolher sintaxe
Ignorar
Transformar texto
Ir à primeira mudança
Editar entrada
Diffchecker Desktop
A maneira mais segura de usar o Diffchecker. Obtenha o aplicativo Diffchecker Desktop: seus diffs nunca saem do seu computador!
Obter Desktop
actionSendEmail.php
Criado
há 4 anos
O diff nunca expira
Limpar
Exportar
Compartilhar
Explicar
7 remoções
Linhas
Total
Removido
Caracteres
Total
Removido
Para continuar usando este recurso, atualize para
Diff
checker
Pro
Ver preços
546 linhas
Copiar tudo
10 adições
Linhas
Total
Adicionado
Caracteres
Total
Adicionado
Para continuar usando este recurso, atualize para
Diff
checker
Pro
Ver preços
548 linhas
Copiar tudo
<?php
<?php
/**
/**
* Advanced OpenWorkflow, Automating SugarCRM.
* Advanced OpenWorkflow, Automating SugarCRM.
* @package Advanced OpenWorkflow for SugarCRM
* @package Advanced OpenWorkflow for SugarCRM
* @copyright SalesAgility Ltd http://www.salesagility.com
* @copyright SalesAgility Ltd http://www.salesagility.com
*
*
* This program is free software; you can redistribute it and/or modify
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by
* it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by
* the Free Software Foundation; either version 3 of the License, or
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
* (at your option) any later version.
*
*
* This program is distributed in the hope that it will be useful,
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* GNU General Public License for more details.
*
*
* You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
* You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
* along with this program; if not, see http://www.gnu.org/licenses
* along with this program; if not, see http://www.gnu.org/licenses
* or write to the Free Software Foundation,Inc., 51 Franklin Street,
* or write to the Free Software Foundation,Inc., 51 Franklin Street,
* Fifth Floor, Boston, MA 02110-1301 USA
* Fifth Floor, Boston, MA 02110-1301 USA
*
*
* @author SalesAgility <info@salesagility.com>
* @author SalesAgility <info@salesagility.com>
*/
*/
require_once __DIR__ . '/../../AOW_Actions/actions/actionBase.php';
require_once __DIR__ . '/../../AOW_Actions/actions/actionBase.php';
require_once __DIR__ . '/../../AOW_WorkFlow/aow_utils.php';
require_once __DIR__ . '/../../AOW_WorkFlow/aow_utils.php';
class actionSendEmail extends actionBase
class actionSendEmail extends actionBase
{
{
private $emailableModules = array();
private $emailableModules = array();
/**
/**
*
*
* @var int
* @var int
*/
*/
protected $lastEmailsFailed;
protected $lastEmailsFailed;
/**
/**
*
*
* @var int
* @var int
*/
*/
protected $lastEmailsSuccess;
protected $lastEmailsSuccess;
public function __construct($id = '')
public function __construct($id = '')
{
{
parent::__construct($id);
parent::__construct($id);
$this->clearLastEmailsStatus();
$this->clearLastEmailsStatus();
}
}
public function loadJS()
public function loadJS()
{
{
return array('modules/AOW_Actions/actions/actionSendEmail.js');
return array('modules/AOW_Actions/actions/actionSendEmail.js');
}
}
public function edit_display($line, SugarBean $bean = null, $params = array())
public function edit_display($line, SugarBean $bean = null, $params = array())
{
{
global $app_list_strings;
global $app_list_strings;
$email_templates_arr = get_bean_select_array(true, 'EmailTemplate', 'name', '', 'name');
$email_templates_arr = get_bean_select_array(true, 'EmailTemplate', 'name', '', 'name');
if (!in_array($bean->module_dir, getEmailableModules())) {
if (!in_array($bean->module_dir, getEmailableModules())) {
unset($app_list_strings['aow_email_type_list']['Record Email']);
unset($app_list_strings['aow_email_type_list']['Record Email']);
}
}
$targetOptions = getRelatedEmailableFields($bean->module_dir);
$targetOptions = getRelatedEmailableFields($bean->module_dir);
if (empty($targetOptions)) {
if (empty($targetOptions)) {
unset($app_list_strings['aow_email_type_list']['Related Field']);
unset($app_list_strings['aow_email_type_list']['Related Field']);
}
}
$html = '<input type="hidden" name="aow_email_type_list" id="aow_email_type_list" value="'.get_select_options_with_id($app_list_strings['aow_email_type_list'], '').'">
$html = '<input type="hidden" name="aow_email_type_list" id="aow_email_type_list" value="'.get_select_options_with_id($app_list_strings['aow_email_type_list'], '').'">
<input type="hidden" name="aow_email_to_list" id="aow_email_to_list" value="'.get_select_options_with_id($app_list_strings['aow_email_to_list'], '').'">';
<input type="hidden" name="aow_email_to_list" id="aow_email_to_list" value="'.get_select_options_with_id($app_list_strings['aow_email_to_list'], '').'">';
$checked = '';
$checked = '';
if (isset($params['individual_email']) && $params['individual_email']) {
if (isset($params['individual_email']) && $params['individual_email']) {
$checked = 'CHECKED';
$checked = 'CHECKED';
}
}
$html .= "<table border='0' cellpadding='0' cellspacing='0' width='100%' data-workflow-action='send-email'>";
$html .= "<table border='0' cellpadding='0' cellspacing='0' width='100%' data-workflow-action='send-email'>";
$html .= "<tr>";
$html .= "<tr>";
$html .= '<td id="relate_label" scope="row" valign="top"><label>' . translate(
$html .= '<td id="relate_label" scope="row" valign="top"><label>' . translate(
"LBL_INDIVIDUAL_EMAILS",
"LBL_INDIVIDUAL_EMAILS",
"AOW_Actions"
"AOW_Actions"
) . ':</label>';
) . ':</label>';
$html .= '</td>';
$html .= '</td>';
$html .= "<td valign='top'>";
$html .= "<td valign='top'>";
$html .= "<input type='hidden' name='aow_actions_param[".$line."][individual_email]' value='0' >";
$html .= "<input type='hidden' name='aow_actions_param[".$line."][individual_email]' value='0' >";
$html .= "<input type='checkbox' id='aow_actions_param[".$line."][individual_email]' name='aow_actions_param[".$line."][individual_email]' value='1' $checked></td>";
$html .= "<input type='checkbox' id='aow_actions_param[".$line."][individual_email]' name='aow_actions_param[".$line."][individual_email]' value='1' $checked></td>";
$html .= '</td>';
$html .= '</td>';
if (!isset($params['email_template'])) {
if (!isset($params['email_template'])) {
$params['email_template'] = '';
$params['email_template'] = '';
}
}
$hidden = "style='visibility: hidden;'";
$hidden = "style='visibility: hidden;'";
if ($params['email_template'] != '') {
if ($params['email_template'] != '') {
$hidden = "";
$hidden = "";
}
}
$html .= '<td id="name_label" scope="row" valign="top"><label>' . translate(
$html .= '<td id="name_label" scope="row" valign="top"><label>' . translate(
"LBL_EMAIL_TEMPLATE",
"LBL_EMAIL_TEMPLATE",
"AOW_Actions"
"AOW_Actions"
) . ':<span class="required">*</span></label></td>';
) . ':<span class="required">*</span></label></td>';
$html .= "<td valign='top'>";
$html .= "<td valign='top'>";
$html .= "<select name='aow_actions_param[".$line."][email_template]' id='aow_actions_param_email_template".$line."' onchange='show_edit_template_link(this,".$line.");' >".get_select_options_with_id($email_templates_arr, $params['email_template'])."</select>";
$html .= "<select name='aow_actions_param[".$line."][email_template]' id='aow_actions_param_email_template".$line."' onchange='show_edit_template_link(this,".$line.");' >".get_select_options_with_id($email_templates_arr, $params['email_template'])."</select>";
$html .= " <a href='javascript:open_email_template_form(".$line.")' >".translate('LBL_CREATE_EMAIL_TEMPLATE', 'AOW_Actions')."</a>";
$html .= " <a href='javascript:open_email_template_form(".$line.")' >".translate('LBL_CREATE_EMAIL_TEMPLATE', 'AOW_Actions')."</a>";
$html .= " <span name='edit_template' id='aow_actions_edit_template_link".$line."' $hidden><a href='javascript:edit_email_template_form(".$line.")' >".translate('LBL_EDIT_EMAIL_TEMPLATE', 'AOW_Actions')."</a></span>";
$html .= " <span name='edit_template' id='aow_actions_edit_template_link".$line."' $hidden><a href='javascript:edit_email_template_form(".$line.")' >".translate('LBL_EDIT_EMAIL_TEMPLATE', 'AOW_Actions')."</a></span>";
$html .= "</td>";
$html .= "</td>";
$html .= "</tr>";
$html .= "</tr>";
$html .= "<tr>";
$html .= "<tr>";
$html .= '<td id="name_label" scope="row" valign="top"><label>' . translate(
$html .= '<td id="name_label" scope="row" valign="top"><label>' . translate(
"LBL_EMAIL",
"LBL_EMAIL",
"AOW_Actions"
"AOW_Actions"
) . ':<span class="required">*</span></label></td>';
) . ':<span class="required">*</span></label></td>';
$html .= '<td valign="top" scope="row">';
$html .= '<td valign="top" scope="row">';
$html .='<button type="button" onclick="add_emailLine('.$line.')"><img src="'.SugarThemeRegistry::current()->getImageURL('id-ff-add.png').'"></button>';
$html .='<button type="button" onclick="add_emailLine('.$line.')"><img src="'.SugarThemeRegistry::current()->getImageURL('id-ff-add.png').'"></button>';
$html .= '<table id="emailLine'.$line.'_table" width="100%" class="email-line"></table>';
$html .= '<table id="emailLine'.$line.'_table" width="100%" class="email-line"></table>';
$html .= '</td>';
$html .= '</td>';
$html .= "</tr>";
$html .= "</tr>";
$html .= "</table>";
$html .= "</table>";
$html .= "<script id ='aow_script".$line."'>";
$html .= "<script id ='aow_script".$line."'>";
//backward compatible
//backward compatible
if (isset($params['email_target_type']) && !is_array($params['email_target_type'])) {
if (isset($params['email_target_type']) && !is_array($params['email_target_type'])) {
$email = '';
$email = '';
switch ($params['email_target_type']) {
switch ($params['email_target_type']) {
case 'Email Address':
case 'Email Address':
$email = $params['email'];
$email = $params['email'];
break;
break;
case 'Specify User':
case 'Specify User':
$email = $params['email_user_id'];
$email = $params['email_user_id'];
break;
break;
case 'Related Field':
case 'Related Field':
$email = $params['email_target'];
$email = $params['email_target'];
break;
break;
}
}
$html .= "load_emailline('".$line."','to','".$params['email_target_type']."','".$email."');";
$html .= "load_emailline('".$line."','to','".$params['email_target_type']."','".$email."');";
}
}
//end backward compatible
//end backward compatible
if (isset($params['email_target_type'])) {
if (isset($params['email_target_type'])) {
foreach ($params['email_target_type'] as $key => $field) {
foreach ($params['email_target_type'] as $key => $field) {
if (is_array($params['email'][$key])) {
if (is_array($params['email'][$key])) {
$params['email'][$key] = json_encode($params['email'][$key]);
$params['email'][$key] = json_encode($params['email'][$key]);
}
}
$html .= "load_emailline('".$line."','".$params['email_to_type'][$key]."','".$params['email_target_type'][$key]."','".$params['email'][$key]."');";
$html .= "load_emailline('".$line."','".$params['email_to_type'][$key]."','".$params['email_target_type'][$key]."','".$params['email'][$key]."');";
}
}
}
}
$html .= "</script>";
$html .= "</script>";
return $html;
return $html;
}
}
private function getEmailsFromParams(SugarBean $bean, $params)
private function getEmailsFromParams(SugarBean $bean, $params)
{
{
$emails = array();
$emails = array();
//backward compatible
//backward compatible
if (isset($params['email_target_type']) && !is_array($params['email_target_type'])) {
if (isset($params['email_target_type']) && !is_array($params['email_target_type'])) {
$email = '';
$email = '';
switch ($params['email_target_type']) {
switch ($params['email_target_type']) {
case 'Email Address':
case 'Email Address':
$params['email'] = array($params['email']);
$params['email'] = array($params['email']);
break;
break;
case 'Specify User':
case 'Specify User':
$params['email'] = array($params['email_user_id']);
$params['email'] = array($params['email_user_id']);
break;
break;
case 'Related Field':
case 'Related Field':
$params['email'] = array($params['email_target']);
$params['email'] = array($params['email_target']);
break;
break;
}
}
$params['email_target_type'] = array($params['email_target_type']);
$params['email_target_type'] = array($params['email_target_type']);
$params['email_to_type'] = array('to');
$params['email_to_type'] = array('to');
}
}
//end backward compatible
//end backward compatible
if (isset($params['email_target_type'])) {
if (isset($params['email_target_type'])) {
foreach ($params['email_target_type'] as $key => $field) {
foreach ($params['email_target_type'] as $key => $field) {
switch ($field) {
switch ($field) {
case 'Email Address':
case 'Email Address':
if (trim($params['email'][$key]) != '') {
if (trim($params['email'][$key]) != '') {
$emails[$params['email_to_type'][$key]][] = $params['email'][$key];
$emails[$params['email_to_type'][$key]][] = $params['email'][$key];
}
}
break;
break;
case 'Specify User':
case 'Specify User':
$user = BeanFactory::newBean('Users');
$user = BeanFactory::newBean('Users');
$user->retrieve($params['email'][$key]);
$user->retrieve($params['email'][$key]);
$user_email = $user->emailAddress->getPrimaryAddress($user);
$user_email = $user->emailAddress->getPrimaryAddress($user);
if (trim($user_email) != '') {
if (trim($user_email) != '') {
$emails[$params['email_to_type'][$key]][] = $user_email;
$emails[$params['email_to_type'][$key]][] = $user_email;
$emails['template_override'][$user_email] = array('Users' => $user->id);
$emails['template_override'][$user_email] = array('Users' => $user->id);
}
}
break;
break;
case 'Users':
case 'Users':
$users = array();
$users = array();
switch ($params['email'][$key][0]) {
switch ($params['email'][$key][0]) {
case 'security_group':
case 'security_group':
if (file_exists('modules/SecurityGroups/SecurityGroup.php')) {
if (file_exists('modules/SecurityGroups/SecurityGroup.php')) {
require_once('modules/SecurityGroups/SecurityGroup.php');
require_once('modules/SecurityGroups/SecurityGroup.php');
$security_group = BeanFactory::newBean('SecurityGroups');
$security_group = BeanFactory::newBean('SecurityGroups');
$security_group->retrieve($params['email'][$key][1]);
$security_group->retrieve($params['email'][$key][1]);
$users = $security_group->get_linked_beans('users', 'User');
$users = $security_group->get_linked_beans('users', 'User');
$r_users = array();
$r_users = array();
if ($params['email'][$key][2] != '') {
if ($params['email'][$key][2] != '') {
require_once('modules/ACLRoles/ACLRole.php');
require_once('modules/ACLRoles/ACLRole.php');
$role = BeanFactory::newBean('ACLRoles');
$role = BeanFactory::newBean('ACLRoles');
$role->retrieve($params['email'][$key][2]);
$role->retrieve($params['email'][$key][2]);
$role_users = $role->get_linked_beans('users', 'User');
$role_users = $role->get_linked_beans('users', 'User');
foreach ($role_users as $role_user) {
foreach ($role_users as $role_user) {
$r_users[$role_user->id] = $role_user->name;
$r_users[$role_user->id] = $role_user->name;
}
}
}
}
foreach ($users as $user_id => $user) {
foreach ($users as $user_id => $user) {
if ($params['email'][$key][2] != '' && !isset($r_users[$user->id])) {
if ($params['email'][$key][2] != '' && !isset($r_users[$user->id])) {
unset($users[$user_id]);
unset($users[$user_id]);
}
}
}
}
break;
break;
}
}
//No Security Group module found - fall through.
//No Security Group module found - fall through.
// no break
// no break
case 'role':
case 'role':
require_once('modules/ACLRoles/ACLRole.php');
require_once('modules/ACLRoles/ACLRole.php');
$role = BeanFactory::newBean('ACLRoles');
$role = BeanFactory::newBean('ACLRoles');
$role->retrieve($params['email'][$key][2]);
$role->retrieve($params['email'][$key][2]);
$users = $role->get_linked_beans('users', 'User');
$users = $role->get_linked_beans('users', 'User');
break;
break;
case 'all':
case 'all':
default:
default:
$db = DBManagerFactory::getInstance();
$db = DBManagerFactory::getInstance();
$sql = "SELECT id from users WHERE status='Active' AND portal_only=0 ";
$sql = "SELECT id from users WHERE status='Active' AND portal_only=0 ";
$result = $db->query($sql);
$result = $db->query($sql);
while ($row = $db->fetchByAssoc($result)) {
while ($row = $db->fetchByAssoc($result)) {
$user = BeanFactory::newBean('Users');
$user = BeanFactory::newBean('Users');
$user->retrieve($row['id']);
$user->retrieve($row['id']);
$users[$user->id] = $user;
$users[$user->id] = $user;
}
}
break;
break;
}
}
foreach ($users as $user) {
foreach ($users as $user) {
$user_email = $user->emailAddress->getPrimaryAddress($user);
$user_email = $user->emailAddress->getPrimaryAddress($user);
if (trim($user_email) != '') {
if (trim($user_email) != '') {
$emails[$params['email_to_type'][$key]][] = $user_email;
$emails[$params['email_to_type'][$key]][] = $user_email;
$emails['template_override'][$user_email] = array('Users' => $user->id);
$emails['template_override'][$user_email] = array('Users' => $user->id);
}
}
}
}
break;
break;
case 'Related Field':
case 'Related Field':
$emailTarget = $params['email'][$key];
$emailTarget = $params['email'][$key];
$relatedFields = array_merge($bean->get_related_fields(), $bean->get_linked_fields());
$relatedFields = array_merge($bean->get_related_fields(), $bean->get_linked_fields());
$field = $relatedFields[$emailTarget];
$field = $relatedFields[$emailTarget];
if ($field['type'] == 'relate') {
if ($field['type'] == 'relate') {
$linkedBeans = array();
$linkedBeans = array();
$idName = $field['id_name'];
$idName = $field['id_name'];
$id = $bean->$idName;
$id = $bean->$idName;
$linkedBeans[] = BeanFactory::getBean($field['module'], $id);
$linkedBeans[] = BeanFactory::getBean($field['module'], $id);
} else {
} else {
if ($field['type'] == 'link') {
if ($field['type'] == 'link') {
$relField = $field['name'];
$relField = $field['name'];
if (isset($field['module']) && $field['module'] != '') {
if (isset($field['module']) && $field['module'] != '') {
$rel_module = $field['module'];
$rel_module = $field['module'];
} else {
} else {
if ($bean->load_relationship($relField)) {
if ($bean->load_relationship($relField)) {
$rel_module = $bean->$relField->getRelatedModuleName();
$rel_module = $bean->$relField->getRelatedModuleName();
}
}
}
}
$linkedBeans = $bean->get_linked_beans($relField, $rel_module);
$linkedBeans = $bean->get_linked_beans($relField, $rel_module);
} else {
} else {
$linkedBeans = $bean->get_linked_beans($field['link'], $field['module']);
$linkedBeans = $bean->get_linked_beans($field['link'], $field['module']);
}
}
}
}
if ($linkedBeans) {
if ($linkedBeans) {
foreach ($linkedBeans as $linkedBean) {
foreach ($linkedBeans as $linkedBean) {
if (!empty($linkedBean)) {
if (!empty($linkedBean)) {
$rel_email = $linkedBean->emailAddress->getPrimaryAddress($linkedBean);
$rel_email = $linkedBean->emailAddress->getPrimaryAddress($linkedBean);
if (trim($rel_email) != '') {
if (trim($rel_email) != '') {
$emails[$params['email_to_type'][$key]][] = $rel_email;
$emails[$params['email_to_type'][$key]][] = $rel_email;
$emails['template_override'][$rel_email] = array($linkedBean->module_dir => $linkedBean->id);
$emails['template_override'][$rel_email] = array($linkedBean->module_dir => $linkedBean->id);
}
}
}
}
}
}
}
}
break;
break;
case 'Record Email':
case 'Record Email':
$recordEmail = $bean->emailAddress->getPrimaryAddress($bean);
$recordEmail = $bean->emailAddress->getPrimaryAddress($bean);
if ($recordEmail == '' && isset($bean->email1)) {
if ($recordEmail == '' && isset($bean->email1)) {
$recordEmail = $bean->email1;
$recordEmail = $bean->email1;
}
}
if (trim($recordEmail) != '') {
if (trim($recordEmail) != '') {
$emails[$params['email_to_type'][$key]][] = $recordEmail;
$emails[$params['email_to_type'][$key]][] = $recordEmail;
}
}
break;
break;
}
}
}
}
}
}
return $emails;
return $emails;
}
}
/**
/**
* Return true on success otherwise false.
* Return true on success otherwise false.
* Use actionSendEmail::getLastEmailsSuccess() and actionSendEmail::getLastEmailsFailed()
* Use actionSendEmail::getLastEmailsSuccess() and actionSendEmail::getLastEmailsFailed()
* methods to get last email sending status
* methods to get last email sending status
*
*
* @param SugarBean $bean
* @param SugarBean $bean
* @param array $params
* @param array $params
* @param bool $in_save
* @param bool $in_save
* @return boolean
* @return boolean
*/
*/
public function run_action(SugarBean $bean, $params = array(), $in_save = false)
public function run_action(SugarBean $bean, $params = array(), $in_save = false)
{
{
include_once __DIR__ . '/../../EmailTemplates/EmailTemplate.php';
include_once __DIR__ . '/../../EmailTemplates/EmailTemplate.php';
$this->clearLastEmailsStatus();
$this->clearLastEmailsStatus();
$emailTemp = BeanFactory::newBean('EmailTemplates');
$emailTemp = BeanFactory::newBean('EmailTemplates');
$emailTemp->retrieve($params['email_template']);
$emailTemp->retrieve($params['email_template']);
if ($emailTemp->id == '') {
if ($emailTemp->id == '') {
return false;
return false;
}
}
$emails = $this->getEmailsFromParams($bean, $params);
$emails = $this->getEmailsFromParams($bean, $params);
if (!isset($emails['to']) || empty($emails['to'])) {
if (!isset($emails['to']) || empty($emails['to'])) {
return false;
return false;
}
}
$attachments = $this->getAttachments($emailTemp);
$attachments = $this->getAttachments($emailTemp);
$ret = true;
$ret = true;
if (isset($params['individual_email']) && $params['individual_email']) {
if (isset($params['individual_email']) && $params['individual_email']) {
foreach ($emails['to'] as $email_to) {
foreach ($emails['to'] as $email_to) {
$emailTemp = BeanFactory::newBean('EmailTemplates');
$emailTemp = BeanFactory::newBean('EmailTemplates');
$emailTemp->retrieve($params['email_template']);
$emailTemp->retrieve($params['email_template']);
$template_override = isset($emails['template_override'][$email_to]) ? $emails['template_override'][$email_to] : array();
$template_override = isset($emails['template_override'][$email_to]) ? $emails['template_override'][$email_to] : array();
$this->parse_template($bean, $emailTemp, $template_override);
$this->parse_template($bean, $emailTemp, $template_override);
if (!$this->sendEmail(array($email_to), $emailTemp->subject, $emailTemp->body_html, $emailTemp->body, $bean, $emails['cc'], $emails['bcc'], $attachments)) {
if (!$this->sendEmail(array($email_to), $emailTemp->subject, $emailTemp->body_html, $emailTemp->body, $bean, $emails['cc'], $emails['bcc'], $attachments)) {
$ret = false;
$ret = false;
$this->lastEmailsFailed++;
$this->lastEmailsFailed++;
} else {
} else {
$this->lastEmailsSuccess++;
$this->lastEmailsSuccess++;
}
}
}
}
} else {
} else {
$this->parse_template($bean, $emailTemp);
$this->parse_template($bean, $emailTemp);
if ($emailTemp->text_only == '1') {
if ($emailTemp->text_only == '1') {
Copiar
Copiado
Copiar
Copiado
$email_body
_html
= $emailTemp->body;
$email_body
= $emailTemp->body;
$email_body_alt = null;
} else {
} else {
Copiar
Copiado
Copiar
Copiado
$email_body
_html
= $emailTemp->body_html;
$email_body
= $emailTemp->body_html;
$email_body_alt = $emailTemp->body;
}
}
Copiar
Copiado
Copiar
Copiado
if (!$this->sendEmail($emails['to'], $emailTemp->subject, $email_body
_html
, $email
Temp->
body
, $bean, $emails['cc'], $emails['bcc'], $attachments)) {
if (!$this->sendEmail($emails['to'], $emailTemp->subject, $email_body
, $email
_
body
_alt
, $bean, $emails['cc'], $emails['bcc'], $attachments)) {
$ret = false;
$ret = false;
$this->lastEmailsFailed++;
$this->lastEmailsFailed++;
} else {
} else {
$this->lastEmailsSuccess++;
$this->lastEmailsSuccess++;
}
}
}
}
return $ret;
return $ret;
}
}
/**
/**
* clear last email sending status
* clear last email sending status
*/
*/
protected function clearLastEmailsStatus()
protected function clearLastEmailsStatus()
{
{
$this->lastEmailsFailed = 0;
$this->lastEmailsFailed = 0;
$this->lastEmailsSuccess = 0;
$this->lastEmailsSuccess = 0;
}
}
/**
/**
* failed emails count at last run_action
* failed emails count at last run_action
* @return int
* @return int
*/
*/
public function getLastEmailsFailed()
public function getLastEmailsFailed()
{
{
return $this->lastEmailsFailed;
return $this->lastEmailsFailed;
}
}
/**
/**
* successfully sent emails count at last run_action
* successfully sent emails count at last run_action
* @return type
* @return type
*/
*/
public function getLastEmailsSuccess()
public function getLastEmailsSuccess()
{
{
return $this->lastEmailsSuccess;
return $this->lastEmailsSuccess;
}
}
public function parse_template(SugarBean $bean, &$template, $object_override = array())
public function parse_template(SugarBean $bean, &$template, $object_override = array())
{
{
global $sugar_config;
global $sugar_config;
require_once __DIR__ . '/templateParser.php';
require_once __DIR__ . '/templateParser.php';
$object_arr[$bean->module_dir] = $bean->id;
$object_arr[$bean->module_dir] = $bean->id;
foreach ($bean->field_defs as $bean_arr) {
foreach ($bean->field_defs as $bean_arr) {
if ($bean_arr['type'] == 'relate') {
if ($bean_arr['type'] == 'relate') {
if (isset($bean_arr['module']) && $bean_arr['module'] != '' && isset($bean_arr['id_name']) && $bean_arr['id_name'] != '' && $bean_arr['module'] != 'EmailAddress') {
if (isset($bean_arr['module']) && $bean_arr['module'] != '' && isset($bean_arr['id_name']) && $bean_arr['id_name'] != '' && $bean_arr['module'] != 'EmailAddress') {
$idName = $bean_arr['id_name'];
$idName = $bean_arr['id_name'];
if (isset($bean->field_defs[$idName]) && $bean->field_defs[$idName]['source'] != 'non-db') {
if (isset($bean->field_defs[$idName]) && $bean->field_defs[$idName]['source'] != 'non-db') {
if (!isset($object_arr[$bean_arr['module']])) {
if (!isset($object_arr[$bean_arr['module']])) {
$object_arr[$bean_arr['module']] = $bean->$idName;
$object_arr[$bean_arr['module']] = $bean->$idName;
}
}
}
}
}
}
} else {
} else {
if ($bean_arr['type'] == 'link') {
if ($bean_arr['type'] == 'link') {
if (!isset($bean_arr['module']) || $bean_arr['module'] == '') {
if (!isset($bean_arr['module']) || $bean_arr['module'] == '') {
$bean_arr['module'] = getRelatedModule($bean->module_dir, $bean_arr['name']);
$bean_arr['module'] = getRelatedModule($bean->module_dir, $bean_arr['name']);
}
}
if (isset($bean_arr['module']) && $bean_arr['module'] != ''&& !isset($object_arr[$bean_arr['module']])&& $bean_arr['module'] != 'EmailAddress') {
if (isset($bean_arr['module']) && $bean_arr['module'] != ''&& !isset($object_arr[$bean_arr['module']])&& $bean_arr['module'] != 'EmailAddress') {
$linkedBeans = $bean->get_linked_beans($bean_arr['name'], $bean_arr['module'], array(), 0, 1);
$linkedBeans = $bean->get_linked_beans($bean_arr['name'], $bean_arr['module'], array(), 0, 1);
if ($linkedBeans) {
if ($linkedBeans) {
$linkedBean = $linkedBeans[0];
$linkedBean = $linkedBeans[0];
if (!isset($object_arr[$linkedBean->module_dir])) {
if (!isset($object_arr[$linkedBean->module_dir])) {
$object_arr[$linkedBean->module_dir] = $linkedBean->id;
$object_arr[$linkedBean->module_dir] = $linkedBean->id;
}
}
}
}
}
}
}
}
}
}
}
}
$object_arr['Users'] = is_a($bean, 'User') ? $bean->id : $bean->assigned_user_id;
$object_arr['Users'] = is_a($bean, 'User') ? $bean->id : $bean->assigned_user_id;
$object_arr = array_merge($object_arr, $object_override);
$object_arr = array_merge($object_arr, $object_override);
$parsedSiteUrl = parse_url($sugar_config['site_url']);
$parsedSiteUrl = parse_url($sugar_config['site_url']);
$host = $parsedSiteUrl['host'];
$host = $parsedSiteUrl['host'];
if (!isset($parsedSiteUrl['port'])) {
if (!isset($parsedSiteUrl['port'])) {
$parsedSiteUrl['port'] = 80;
$parsedSiteUrl['port'] = 80;
}
}
$port = ($parsedSiteUrl['port'] != 80) ? ":".$parsedSiteUrl['port'] : '';
$port = ($parsedSiteUrl['port'] != 80) ? ":".$parsedSiteUrl['port'] : '';
$path = !empty($parsedSiteUrl['path']) ? $parsedSiteUrl['path'] : "";
$path = !empty($parsedSiteUrl['path']) ? $parsedSiteUrl['path'] : "";
$cleanUrl = "{$parsedSiteUrl['scheme']}://{$host}{$port}{$path}";
$cleanUrl = "{$parsedSiteUrl['scheme']}://{$host}{$port}{$path}";
$url = $cleanUrl."/index.php?module={$bean->module_dir}&action=DetailView&record={$bean->id}";
$url = $cleanUrl."/index.php?module={$bean->module_dir}&action=DetailView&record={$bean->id}";
$template->subject = str_replace("\$contact_user", "\$user", $template->subject);
$template->subject = str_replace("\$contact_user", "\$user", $template->subject);
$template->body_html = str_replace("\$contact_user", "\$user", $template->body_html);
$template->body_html = str_replace("\$contact_user", "\$user", $template->body_html);
$template->body = str_replace("\$contact_user", "\$user", $template->body);
$template->body = str_replace("\$contact_user", "\$user", $template->body);
$template->subject = aowTemplateParser::parse_template($template->subject, $object_arr);
$template->subject = aowTemplateParser::parse_template($template->subject, $object_arr);
$template->body_html = aowTemplateParser::parse_template($template->body_html, $object_arr);
$template->body_html = aowTemplateParser::parse_template($template->body_html, $object_arr);
$template->body_html = str_replace("\$url", $url, $template->body_html);
$template->body_html = str_replace("\$url", $url, $template->body_html);
$template->body_html = str_replace('$sugarurl', $sugar_config['site_url'], $template->body_html);
$template->body_html = str_replace('$sugarurl', $sugar_config['site_url'], $template->body_html);
$template->body = aowTemplateParser::parse_template($template->body, $object_arr);
$template->body = aowTemplateParser::parse_template($template->body, $object_arr);
$template->body = str_replace("\$url", $url, $template->body);
$template->body = str_replace("\$url", $url, $template->body);
$template->body = str_replace('$sugarurl', $sugar_config['site_url'], $template->body);
$template->body = str_replace('$sugarurl', $sugar_config['site_url'], $template->body);
}
}
public function getAttachments(EmailTemplate $template)
public function getAttachments(EmailTemplate $template)
{
{
$attachments = array();
$attachments = array();
if ($template->id != '') {
if ($template->id != '') {
$note_bean = BeanFactory::newBean('Notes');
$note_bean = BeanFactory::newBean('Notes');
$notes = $note_bean->get_full_list('', "parent_type = 'Emails' AND parent_id = '".$template->id."'");
$notes = $note_bean->get_full_list('', "parent_type = 'Emails' AND parent_id = '".$template->id."'");
if ($notes != null) {
if ($notes != null) {
foreach ($notes as $note) {
foreach ($notes as $note) {
$attachments[] = $note;
$attachments[] = $note;
}
}
}
}
}
}
return $attachments;
return $attachments;
}
}
public function sendEmail($emailTo, $emailSubject, $emailBody, $altemailBody, SugarBean $relatedBean = null, $emailCc = array(), $emailBcc = array(), $attachments = array())
public function sendEmail($emailTo, $emailSubject, $emailBody, $altemailBody, SugarBean $relatedBean = null, $emailCc = array(), $emailBcc = array(), $attachments = array())
{
{
require_once('modules/Emails/Email.php');
require_once('modules/Emails/Email.php');
require_once('include/SugarPHPMailer.php');
require_once('include/SugarPHPMailer.php');
$emailObj = BeanFactory::newBean('Emails');
$emailObj = BeanFactory::newBean('Emails');
$defaults = $emailObj->getSystemDefaultEmail();
$defaults = $emailObj->getSystemDefaultEmail();
$mail = new SugarPHPMailer();
$mail = new SugarPHPMailer();
$mail->setMailerForSystem();
$mail->setMailerForSystem();
$mail->From = $defaults['email'];
$mail->From = $defaults['email'];
isValidEmailAddress($mail->From);
isValidEmailAddress($mail->From);
$mail->FromName = $defaults['name'];
$mail->FromName = $defaults['name'];
$mail->ClearAllRecipients();
$mail->ClearAllRecipients();
$mail->ClearReplyTos();
$mail->ClearReplyTos();
$mail->Subject=from_html($emailSubject);
$mail->Subject=from_html($emailSubject);
$mail->Body=$emailBody;
$mail->Body=$emailBody;
Copiar
Copiado
Copiar
Copiado
$mail->AltBody = $altemailBody;
if($altemailBody){
$mail->AltBody = $altemailBody;
}
$mail->handleAttachments($attachments);
$mail->handleAttachments($attachments);
$mail->prepForOutbound();
$mail->prepForOutbound();
if (empty($emailTo)) {
if (empty($emailTo)) {
return false;
return false;
}
}
foreach ($emailTo as $to) {
foreach ($emailTo as $to) {
$mail->AddAddress($to);
$mail->AddAddress($to);
}
}
if (!empty($emailCc)) {
if (!empty($emailCc)) {
foreach ($emailCc as $email) {
foreach ($emailCc as $email) {
$mail->AddCC($email);
$mail->AddCC($email);
}
}
}
}
if (!empty($emailBcc)) {
if (!empty($emailBcc)) {
foreach ($emailBcc as $email) {
foreach ($emailBcc as $email) {
$mail->AddBCC($email);
$mail->AddBCC($email);
}
}
}
}
//now create email
//now create email
if ($mail->Send()) {
if ($mail->Send()) {
$emailObj->to_addrs= implode(',', $emailTo);
$emailObj->to_addrs= implode(',', $emailTo);
$emailObj->cc_addrs= implode(',', $emailCc);
$emailObj->cc_addrs= implode(',', $emailCc);
$emailObj->bcc_addrs= implode(',', $emailBcc);
$emailObj->bcc_addrs= implode(',', $emailBcc);
$emailObj->type= 'out';
$emailObj->type= 'out';
$emailObj->deleted = '0';
$emailObj->deleted = '0';
$emailObj->name = $mail->Subject;
$emailObj->name = $mail->Subject;
$emailObj->description = $mail->AltBody;
$emailObj->description = $mail->AltBody;
$emailObj->description_html = $mail->Body;
$emailObj->description_html = $mail->Body;
$emailObj->from_addr = $mail->From;
$emailObj->from_addr = $mail->From;
isValidEmailAddress($emailObj->from_addr);
isValidEmailAddress($emailObj->from_addr);
if ($relatedBean instanceof SugarBean && !empty($relatedBean->id)) {
if ($relatedBean instanceof SugarBean && !empty($relatedBean->id)) {
$emailObj->parent_type = $relatedBean->module_dir;
$emailObj->parent_type = $relatedBean->module_dir;
$emailObj->parent_id = $relatedBean->id;
$emailObj->parent_id = $relatedBean->id;
}
}
$emailObj->date_sent_received = TimeDate::getInstance()->nowDb();
$emailObj->date_sent_received = TimeDate::getInstance()->nowDb();
$emailObj->modified_user_id = '1';
$emailObj->modified_user_id = '1';
$emailObj->created_by = '1';
$emailObj->created_by = '1';
$emailObj->status = 'sent';
$emailObj->status = 'sent';
$emailObj->save();
$emailObj->save();
// Fix for issue 1561 - Email Attachments Sent By Workflow Do Not Show In Related Activity.
// Fix for issue 1561 - Email Attachments Sent By Workflow Do Not Show In Related Activity.
foreach ($attachments as $attachment) {
foreach ($attachments as $attachment) {
$note = BeanFactory::newBean('Notes');
$note = BeanFactory::newBean('Notes');
$note->id = create_guid();
$note->id = create_guid();
$note->date_entered = $attachment->date_entered;
$note->date_entered = $attachment->date_entered;
$note->date_modified = $attachment->date_modified;
$note->date_modified = $attachment->date_modified;
$note->modified_user_id = $attachment->modified_user_id;
$note->modified_user_id = $attachment->modified_user_id;
$note->assigned_user_id = $attachment->assigned_user_id;
$note->assigned_user_id = $attachment->assigned_user_id;
$note->new_with_id = true;
$note->new_with_id = true;
$note->parent_id = $emailObj->id;
$note->parent_id = $emailObj->id;
$note->parent_type = $attachment->parent_type;
$note->parent_type = $attachment->parent_type;
$note->name = $attachment->name;
$note->name = $attachment->name;
;
;
$note->filename = $attachment->filename;
$note->filename = $attachment->filename;
$note->file_mime_type = $attachment->file_mime_type;
$note->file_mime_type = $attachment->file_mime_type;
$fileLocation = "upload://{$attachment->id}";
$fileLocation = "upload://{$attachment->id}";
$dest = "upload://{$note->id}";
$dest = "upload://{$note->id}";
if (!copy($fileLocation, $dest)) {
if (!copy($fileLocation, $dest)) {
Copiar
Copiado
Copiar
Copiado
$GLOBA
LS['log']->debug("EMAIL 2.0: could not copy attachment file to $fileLocation => $dest");
$GLOBA
}
Diferenças salvas
Texto original
Abrir arquivo
<?php /** * Advanced OpenWorkflow, Automating SugarCRM. * @package Advanced OpenWorkflow for SugarCRM * @copyright SalesAgility Ltd http://www.salesagility.com * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE * along with this program; if not, see http://www.gnu.org/licenses * or write to the Free Software Foundation,Inc., 51 Franklin Street, * Fifth Floor, Boston, MA 02110-1301 USA * * @author SalesAgility <info@salesagility.com> */ require_once __DIR__ . '/../../AOW_Actions/actions/actionBase.php'; require_once __DIR__ . '/../../AOW_WorkFlow/aow_utils.php'; class actionSendEmail extends actionBase { private $emailableModules = array(); /** * * @var int */ protected $lastEmailsFailed; /** * * @var int */ protected $lastEmailsSuccess; public function __construct($id = '') { parent::__construct($id); $this->clearLastEmailsStatus(); } public function loadJS() { return array('modules/AOW_Actions/actions/actionSendEmail.js'); } public function edit_display($line, SugarBean $bean = null, $params = array()) { global $app_list_strings; $email_templates_arr = get_bean_select_array(true, 'EmailTemplate', 'name', '', 'name'); if (!in_array($bean->module_dir, getEmailableModules())) { unset($app_list_strings['aow_email_type_list']['Record Email']); } $targetOptions = getRelatedEmailableFields($bean->module_dir); if (empty($targetOptions)) { unset($app_list_strings['aow_email_type_list']['Related Field']); } $html = '<input type="hidden" name="aow_email_type_list" id="aow_email_type_list" value="'.get_select_options_with_id($app_list_strings['aow_email_type_list'], '').'"> <input type="hidden" name="aow_email_to_list" id="aow_email_to_list" value="'.get_select_options_with_id($app_list_strings['aow_email_to_list'], '').'">'; $checked = ''; if (isset($params['individual_email']) && $params['individual_email']) { $checked = 'CHECKED'; } $html .= "<table border='0' cellpadding='0' cellspacing='0' width='100%' data-workflow-action='send-email'>"; $html .= "<tr>"; $html .= '<td id="relate_label" scope="row" valign="top"><label>' . translate( "LBL_INDIVIDUAL_EMAILS", "AOW_Actions" ) . ':</label>'; $html .= '</td>'; $html .= "<td valign='top'>"; $html .= "<input type='hidden' name='aow_actions_param[".$line."][individual_email]' value='0' >"; $html .= "<input type='checkbox' id='aow_actions_param[".$line."][individual_email]' name='aow_actions_param[".$line."][individual_email]' value='1' $checked></td>"; $html .= '</td>'; if (!isset($params['email_template'])) { $params['email_template'] = ''; } $hidden = "style='visibility: hidden;'"; if ($params['email_template'] != '') { $hidden = ""; } $html .= '<td id="name_label" scope="row" valign="top"><label>' . translate( "LBL_EMAIL_TEMPLATE", "AOW_Actions" ) . ':<span class="required">*</span></label></td>'; $html .= "<td valign='top'>"; $html .= "<select name='aow_actions_param[".$line."][email_template]' id='aow_actions_param_email_template".$line."' onchange='show_edit_template_link(this,".$line.");' >".get_select_options_with_id($email_templates_arr, $params['email_template'])."</select>"; $html .= " <a href='javascript:open_email_template_form(".$line.")' >".translate('LBL_CREATE_EMAIL_TEMPLATE', 'AOW_Actions')."</a>"; $html .= " <span name='edit_template' id='aow_actions_edit_template_link".$line."' $hidden><a href='javascript:edit_email_template_form(".$line.")' >".translate('LBL_EDIT_EMAIL_TEMPLATE', 'AOW_Actions')."</a></span>"; $html .= "</td>"; $html .= "</tr>"; $html .= "<tr>"; $html .= '<td id="name_label" scope="row" valign="top"><label>' . translate( "LBL_EMAIL", "AOW_Actions" ) . ':<span class="required">*</span></label></td>'; $html .= '<td valign="top" scope="row">'; $html .='<button type="button" onclick="add_emailLine('.$line.')"><img src="'.SugarThemeRegistry::current()->getImageURL('id-ff-add.png').'"></button>'; $html .= '<table id="emailLine'.$line.'_table" width="100%" class="email-line"></table>'; $html .= '</td>'; $html .= "</tr>"; $html .= "</table>"; $html .= "<script id ='aow_script".$line."'>"; //backward compatible if (isset($params['email_target_type']) && !is_array($params['email_target_type'])) { $email = ''; switch ($params['email_target_type']) { case 'Email Address': $email = $params['email']; break; case 'Specify User': $email = $params['email_user_id']; break; case 'Related Field': $email = $params['email_target']; break; } $html .= "load_emailline('".$line."','to','".$params['email_target_type']."','".$email."');"; } //end backward compatible if (isset($params['email_target_type'])) { foreach ($params['email_target_type'] as $key => $field) { if (is_array($params['email'][$key])) { $params['email'][$key] = json_encode($params['email'][$key]); } $html .= "load_emailline('".$line."','".$params['email_to_type'][$key]."','".$params['email_target_type'][$key]."','".$params['email'][$key]."');"; } } $html .= "</script>"; return $html; } private function getEmailsFromParams(SugarBean $bean, $params) { $emails = array(); //backward compatible if (isset($params['email_target_type']) && !is_array($params['email_target_type'])) { $email = ''; switch ($params['email_target_type']) { case 'Email Address': $params['email'] = array($params['email']); break; case 'Specify User': $params['email'] = array($params['email_user_id']); break; case 'Related Field': $params['email'] = array($params['email_target']); break; } $params['email_target_type'] = array($params['email_target_type']); $params['email_to_type'] = array('to'); } //end backward compatible if (isset($params['email_target_type'])) { foreach ($params['email_target_type'] as $key => $field) { switch ($field) { case 'Email Address': if (trim($params['email'][$key]) != '') { $emails[$params['email_to_type'][$key]][] = $params['email'][$key]; } break; case 'Specify User': $user = BeanFactory::newBean('Users'); $user->retrieve($params['email'][$key]); $user_email = $user->emailAddress->getPrimaryAddress($user); if (trim($user_email) != '') { $emails[$params['email_to_type'][$key]][] = $user_email; $emails['template_override'][$user_email] = array('Users' => $user->id); } break; case 'Users': $users = array(); switch ($params['email'][$key][0]) { case 'security_group': if (file_exists('modules/SecurityGroups/SecurityGroup.php')) { require_once('modules/SecurityGroups/SecurityGroup.php'); $security_group = BeanFactory::newBean('SecurityGroups'); $security_group->retrieve($params['email'][$key][1]); $users = $security_group->get_linked_beans('users', 'User'); $r_users = array(); if ($params['email'][$key][2] != '') { require_once('modules/ACLRoles/ACLRole.php'); $role = BeanFactory::newBean('ACLRoles'); $role->retrieve($params['email'][$key][2]); $role_users = $role->get_linked_beans('users', 'User'); foreach ($role_users as $role_user) { $r_users[$role_user->id] = $role_user->name; } } foreach ($users as $user_id => $user) { if ($params['email'][$key][2] != '' && !isset($r_users[$user->id])) { unset($users[$user_id]); } } break; } //No Security Group module found - fall through. // no break case 'role': require_once('modules/ACLRoles/ACLRole.php'); $role = BeanFactory::newBean('ACLRoles'); $role->retrieve($params['email'][$key][2]); $users = $role->get_linked_beans('users', 'User'); break; case 'all': default: $db = DBManagerFactory::getInstance(); $sql = "SELECT id from users WHERE status='Active' AND portal_only=0 "; $result = $db->query($sql); while ($row = $db->fetchByAssoc($result)) { $user = BeanFactory::newBean('Users'); $user->retrieve($row['id']); $users[$user->id] = $user; } break; } foreach ($users as $user) { $user_email = $user->emailAddress->getPrimaryAddress($user); if (trim($user_email) != '') { $emails[$params['email_to_type'][$key]][] = $user_email; $emails['template_override'][$user_email] = array('Users' => $user->id); } } break; case 'Related Field': $emailTarget = $params['email'][$key]; $relatedFields = array_merge($bean->get_related_fields(), $bean->get_linked_fields()); $field = $relatedFields[$emailTarget]; if ($field['type'] == 'relate') { $linkedBeans = array(); $idName = $field['id_name']; $id = $bean->$idName; $linkedBeans[] = BeanFactory::getBean($field['module'], $id); } else { if ($field['type'] == 'link') { $relField = $field['name']; if (isset($field['module']) && $field['module'] != '') { $rel_module = $field['module']; } else { if ($bean->load_relationship($relField)) { $rel_module = $bean->$relField->getRelatedModuleName(); } } $linkedBeans = $bean->get_linked_beans($relField, $rel_module); } else { $linkedBeans = $bean->get_linked_beans($field['link'], $field['module']); } } if ($linkedBeans) { foreach ($linkedBeans as $linkedBean) { if (!empty($linkedBean)) { $rel_email = $linkedBean->emailAddress->getPrimaryAddress($linkedBean); if (trim($rel_email) != '') { $emails[$params['email_to_type'][$key]][] = $rel_email; $emails['template_override'][$rel_email] = array($linkedBean->module_dir => $linkedBean->id); } } } } break; case 'Record Email': $recordEmail = $bean->emailAddress->getPrimaryAddress($bean); if ($recordEmail == '' && isset($bean->email1)) { $recordEmail = $bean->email1; } if (trim($recordEmail) != '') { $emails[$params['email_to_type'][$key]][] = $recordEmail; } break; } } } return $emails; } /** * Return true on success otherwise false. * Use actionSendEmail::getLastEmailsSuccess() and actionSendEmail::getLastEmailsFailed() * methods to get last email sending status * * @param SugarBean $bean * @param array $params * @param bool $in_save * @return boolean */ public function run_action(SugarBean $bean, $params = array(), $in_save = false) { include_once __DIR__ . '/../../EmailTemplates/EmailTemplate.php'; $this->clearLastEmailsStatus(); $emailTemp = BeanFactory::newBean('EmailTemplates'); $emailTemp->retrieve($params['email_template']); if ($emailTemp->id == '') { return false; } $emails = $this->getEmailsFromParams($bean, $params); if (!isset($emails['to']) || empty($emails['to'])) { return false; } $attachments = $this->getAttachments($emailTemp); $ret = true; if (isset($params['individual_email']) && $params['individual_email']) { foreach ($emails['to'] as $email_to) { $emailTemp = BeanFactory::newBean('EmailTemplates'); $emailTemp->retrieve($params['email_template']); $template_override = isset($emails['template_override'][$email_to]) ? $emails['template_override'][$email_to] : array(); $this->parse_template($bean, $emailTemp, $template_override); if (!$this->sendEmail(array($email_to), $emailTemp->subject, $emailTemp->body_html, $emailTemp->body, $bean, $emails['cc'], $emails['bcc'], $attachments)) { $ret = false; $this->lastEmailsFailed++; } else { $this->lastEmailsSuccess++; } } } else { $this->parse_template($bean, $emailTemp); if ($emailTemp->text_only == '1') { $email_body_html = $emailTemp->body; } else { $email_body_html = $emailTemp->body_html; } if (!$this->sendEmail($emails['to'], $emailTemp->subject, $email_body_html, $emailTemp->body, $bean, $emails['cc'], $emails['bcc'], $attachments)) { $ret = false; $this->lastEmailsFailed++; } else { $this->lastEmailsSuccess++; } } return $ret; } /** * clear last email sending status */ protected function clearLastEmailsStatus() { $this->lastEmailsFailed = 0; $this->lastEmailsSuccess = 0; } /** * failed emails count at last run_action * @return int */ public function getLastEmailsFailed() { return $this->lastEmailsFailed; } /** * successfully sent emails count at last run_action * @return type */ public function getLastEmailsSuccess() { return $this->lastEmailsSuccess; } public function parse_template(SugarBean $bean, &$template, $object_override = array()) { global $sugar_config; require_once __DIR__ . '/templateParser.php'; $object_arr[$bean->module_dir] = $bean->id; foreach ($bean->field_defs as $bean_arr) { if ($bean_arr['type'] == 'relate') { if (isset($bean_arr['module']) && $bean_arr['module'] != '' && isset($bean_arr['id_name']) && $bean_arr['id_name'] != '' && $bean_arr['module'] != 'EmailAddress') { $idName = $bean_arr['id_name']; if (isset($bean->field_defs[$idName]) && $bean->field_defs[$idName]['source'] != 'non-db') { if (!isset($object_arr[$bean_arr['module']])) { $object_arr[$bean_arr['module']] = $bean->$idName; } } } } else { if ($bean_arr['type'] == 'link') { if (!isset($bean_arr['module']) || $bean_arr['module'] == '') { $bean_arr['module'] = getRelatedModule($bean->module_dir, $bean_arr['name']); } if (isset($bean_arr['module']) && $bean_arr['module'] != ''&& !isset($object_arr[$bean_arr['module']])&& $bean_arr['module'] != 'EmailAddress') { $linkedBeans = $bean->get_linked_beans($bean_arr['name'], $bean_arr['module'], array(), 0, 1); if ($linkedBeans) { $linkedBean = $linkedBeans[0]; if (!isset($object_arr[$linkedBean->module_dir])) { $object_arr[$linkedBean->module_dir] = $linkedBean->id; } } } } } } $object_arr['Users'] = is_a($bean, 'User') ? $bean->id : $bean->assigned_user_id; $object_arr = array_merge($object_arr, $object_override); $parsedSiteUrl = parse_url($sugar_config['site_url']); $host = $parsedSiteUrl['host']; if (!isset($parsedSiteUrl['port'])) { $parsedSiteUrl['port'] = 80; } $port = ($parsedSiteUrl['port'] != 80) ? ":".$parsedSiteUrl['port'] : ''; $path = !empty($parsedSiteUrl['path']) ? $parsedSiteUrl['path'] : ""; $cleanUrl = "{$parsedSiteUrl['scheme']}://{$host}{$port}{$path}"; $url = $cleanUrl."/index.php?module={$bean->module_dir}&action=DetailView&record={$bean->id}"; $template->subject = str_replace("\$contact_user", "\$user", $template->subject); $template->body_html = str_replace("\$contact_user", "\$user", $template->body_html); $template->body = str_replace("\$contact_user", "\$user", $template->body); $template->subject = aowTemplateParser::parse_template($template->subject, $object_arr); $template->body_html = aowTemplateParser::parse_template($template->body_html, $object_arr); $template->body_html = str_replace("\$url", $url, $template->body_html); $template->body_html = str_replace('$sugarurl', $sugar_config['site_url'], $template->body_html); $template->body = aowTemplateParser::parse_template($template->body, $object_arr); $template->body = str_replace("\$url", $url, $template->body); $template->body = str_replace('$sugarurl', $sugar_config['site_url'], $template->body); } public function getAttachments(EmailTemplate $template) { $attachments = array(); if ($template->id != '') { $note_bean = BeanFactory::newBean('Notes'); $notes = $note_bean->get_full_list('', "parent_type = 'Emails' AND parent_id = '".$template->id."'"); if ($notes != null) { foreach ($notes as $note) { $attachments[] = $note; } } } return $attachments; } public function sendEmail($emailTo, $emailSubject, $emailBody, $altemailBody, SugarBean $relatedBean = null, $emailCc = array(), $emailBcc = array(), $attachments = array()) { require_once('modules/Emails/Email.php'); require_once('include/SugarPHPMailer.php'); $emailObj = BeanFactory::newBean('Emails'); $defaults = $emailObj->getSystemDefaultEmail(); $mail = new SugarPHPMailer(); $mail->setMailerForSystem(); $mail->From = $defaults['email']; isValidEmailAddress($mail->From); $mail->FromName = $defaults['name']; $mail->ClearAllRecipients(); $mail->ClearReplyTos(); $mail->Subject=from_html($emailSubject); $mail->Body=$emailBody; $mail->AltBody = $altemailBody; $mail->handleAttachments($attachments); $mail->prepForOutbound(); if (empty($emailTo)) { return false; } foreach ($emailTo as $to) { $mail->AddAddress($to); } if (!empty($emailCc)) { foreach ($emailCc as $email) { $mail->AddCC($email); } } if (!empty($emailBcc)) { foreach ($emailBcc as $email) { $mail->AddBCC($email); } } //now create email if ($mail->Send()) { $emailObj->to_addrs= implode(',', $emailTo); $emailObj->cc_addrs= implode(',', $emailCc); $emailObj->bcc_addrs= implode(',', $emailBcc); $emailObj->type= 'out'; $emailObj->deleted = '0'; $emailObj->name = $mail->Subject; $emailObj->description = $mail->AltBody; $emailObj->description_html = $mail->Body; $emailObj->from_addr = $mail->From; isValidEmailAddress($emailObj->from_addr); if ($relatedBean instanceof SugarBean && !empty($relatedBean->id)) { $emailObj->parent_type = $relatedBean->module_dir; $emailObj->parent_id = $relatedBean->id; } $emailObj->date_sent_received = TimeDate::getInstance()->nowDb(); $emailObj->modified_user_id = '1'; $emailObj->created_by = '1'; $emailObj->status = 'sent'; $emailObj->save(); // Fix for issue 1561 - Email Attachments Sent By Workflow Do Not Show In Related Activity. foreach ($attachments as $attachment) { $note = BeanFactory::newBean('Notes'); $note->id = create_guid(); $note->date_entered = $attachment->date_entered; $note->date_modified = $attachment->date_modified; $note->modified_user_id = $attachment->modified_user_id; $note->assigned_user_id = $attachment->assigned_user_id; $note->new_with_id = true; $note->parent_id = $emailObj->id; $note->parent_type = $attachment->parent_type; $note->name = $attachment->name; ; $note->filename = $attachment->filename; $note->file_mime_type = $attachment->file_mime_type; $fileLocation = "upload://{$attachment->id}"; $dest = "upload://{$note->id}"; if (!copy($fileLocation, $dest)) { $GLOBALS['log']->debug("EMAIL 2.0: could not copy attachment file to $fileLocation => $dest"); } $note->save(); } return true; } return false; } }
Texto alterado
Abrir arquivo
<?php /** * Advanced OpenWorkflow, Automating SugarCRM. * @package Advanced OpenWorkflow for SugarCRM * @copyright SalesAgility Ltd http://www.salesagility.com * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE * along with this program; if not, see http://www.gnu.org/licenses * or write to the Free Software Foundation,Inc., 51 Franklin Street, * Fifth Floor, Boston, MA 02110-1301 USA * * @author SalesAgility <info@salesagility.com> */ require_once __DIR__ . '/../../AOW_Actions/actions/actionBase.php'; require_once __DIR__ . '/../../AOW_WorkFlow/aow_utils.php'; class actionSendEmail extends actionBase { private $emailableModules = array(); /** * * @var int */ protected $lastEmailsFailed; /** * * @var int */ protected $lastEmailsSuccess; public function __construct($id = '') { parent::__construct($id); $this->clearLastEmailsStatus(); } public function loadJS() { return array('modules/AOW_Actions/actions/actionSendEmail.js'); } public function edit_display($line, SugarBean $bean = null, $params = array()) { global $app_list_strings; $email_templates_arr = get_bean_select_array(true, 'EmailTemplate', 'name', '', 'name'); if (!in_array($bean->module_dir, getEmailableModules())) { unset($app_list_strings['aow_email_type_list']['Record Email']); } $targetOptions = getRelatedEmailableFields($bean->module_dir); if (empty($targetOptions)) { unset($app_list_strings['aow_email_type_list']['Related Field']); } $html = '<input type="hidden" name="aow_email_type_list" id="aow_email_type_list" value="'.get_select_options_with_id($app_list_strings['aow_email_type_list'], '').'"> <input type="hidden" name="aow_email_to_list" id="aow_email_to_list" value="'.get_select_options_with_id($app_list_strings['aow_email_to_list'], '').'">'; $checked = ''; if (isset($params['individual_email']) && $params['individual_email']) { $checked = 'CHECKED'; } $html .= "<table border='0' cellpadding='0' cellspacing='0' width='100%' data-workflow-action='send-email'>"; $html .= "<tr>"; $html .= '<td id="relate_label" scope="row" valign="top"><label>' . translate( "LBL_INDIVIDUAL_EMAILS", "AOW_Actions" ) . ':</label>'; $html .= '</td>'; $html .= "<td valign='top'>"; $html .= "<input type='hidden' name='aow_actions_param[".$line."][individual_email]' value='0' >"; $html .= "<input type='checkbox' id='aow_actions_param[".$line."][individual_email]' name='aow_actions_param[".$line."][individual_email]' value='1' $checked></td>"; $html .= '</td>'; if (!isset($params['email_template'])) { $params['email_template'] = ''; } $hidden = "style='visibility: hidden;'"; if ($params['email_template'] != '') { $hidden = ""; } $html .= '<td id="name_label" scope="row" valign="top"><label>' . translate( "LBL_EMAIL_TEMPLATE", "AOW_Actions" ) . ':<span class="required">*</span></label></td>'; $html .= "<td valign='top'>"; $html .= "<select name='aow_actions_param[".$line."][email_template]' id='aow_actions_param_email_template".$line."' onchange='show_edit_template_link(this,".$line.");' >".get_select_options_with_id($email_templates_arr, $params['email_template'])."</select>"; $html .= " <a href='javascript:open_email_template_form(".$line.")' >".translate('LBL_CREATE_EMAIL_TEMPLATE', 'AOW_Actions')."</a>"; $html .= " <span name='edit_template' id='aow_actions_edit_template_link".$line."' $hidden><a href='javascript:edit_email_template_form(".$line.")' >".translate('LBL_EDIT_EMAIL_TEMPLATE', 'AOW_Actions')."</a></span>"; $html .= "</td>"; $html .= "</tr>"; $html .= "<tr>"; $html .= '<td id="name_label" scope="row" valign="top"><label>' . translate( "LBL_EMAIL", "AOW_Actions" ) . ':<span class="required">*</span></label></td>'; $html .= '<td valign="top" scope="row">'; $html .='<button type="button" onclick="add_emailLine('.$line.')"><img src="'.SugarThemeRegistry::current()->getImageURL('id-ff-add.png').'"></button>'; $html .= '<table id="emailLine'.$line.'_table" width="100%" class="email-line"></table>'; $html .= '</td>'; $html .= "</tr>"; $html .= "</table>"; $html .= "<script id ='aow_script".$line."'>"; //backward compatible if (isset($params['email_target_type']) && !is_array($params['email_target_type'])) { $email = ''; switch ($params['email_target_type']) { case 'Email Address': $email = $params['email']; break; case 'Specify User': $email = $params['email_user_id']; break; case 'Related Field': $email = $params['email_target']; break; } $html .= "load_emailline('".$line."','to','".$params['email_target_type']."','".$email."');"; } //end backward compatible if (isset($params['email_target_type'])) { foreach ($params['email_target_type'] as $key => $field) { if (is_array($params['email'][$key])) { $params['email'][$key] = json_encode($params['email'][$key]); } $html .= "load_emailline('".$line."','".$params['email_to_type'][$key]."','".$params['email_target_type'][$key]."','".$params['email'][$key]."');"; } } $html .= "</script>"; return $html; } private function getEmailsFromParams(SugarBean $bean, $params) { $emails = array(); //backward compatible if (isset($params['email_target_type']) && !is_array($params['email_target_type'])) { $email = ''; switch ($params['email_target_type']) { case 'Email Address': $params['email'] = array($params['email']); break; case 'Specify User': $params['email'] = array($params['email_user_id']); break; case 'Related Field': $params['email'] = array($params['email_target']); break; } $params['email_target_type'] = array($params['email_target_type']); $params['email_to_type'] = array('to'); } //end backward compatible if (isset($params['email_target_type'])) { foreach ($params['email_target_type'] as $key => $field) { switch ($field) { case 'Email Address': if (trim($params['email'][$key]) != '') { $emails[$params['email_to_type'][$key]][] = $params['email'][$key]; } break; case 'Specify User': $user = BeanFactory::newBean('Users'); $user->retrieve($params['email'][$key]); $user_email = $user->emailAddress->getPrimaryAddress($user); if (trim($user_email) != '') { $emails[$params['email_to_type'][$key]][] = $user_email; $emails['template_override'][$user_email] = array('Users' => $user->id); } break; case 'Users': $users = array(); switch ($params['email'][$key][0]) { case 'security_group': if (file_exists('modules/SecurityGroups/SecurityGroup.php')) { require_once('modules/SecurityGroups/SecurityGroup.php'); $security_group = BeanFactory::newBean('SecurityGroups'); $security_group->retrieve($params['email'][$key][1]); $users = $security_group->get_linked_beans('users', 'User'); $r_users = array(); if ($params['email'][$key][2] != '') { require_once('modules/ACLRoles/ACLRole.php'); $role = BeanFactory::newBean('ACLRoles'); $role->retrieve($params['email'][$key][2]); $role_users = $role->get_linked_beans('users', 'User'); foreach ($role_users as $role_user) { $r_users[$role_user->id] = $role_user->name; } } foreach ($users as $user_id => $user) { if ($params['email'][$key][2] != '' && !isset($r_users[$user->id])) { unset($users[$user_id]); } } break; } //No Security Group module found - fall through. // no break case 'role': require_once('modules/ACLRoles/ACLRole.php'); $role = BeanFactory::newBean('ACLRoles'); $role->retrieve($params['email'][$key][2]); $users = $role->get_linked_beans('users', 'User'); break; case 'all': default: $db = DBManagerFactory::getInstance(); $sql = "SELECT id from users WHERE status='Active' AND portal_only=0 "; $result = $db->query($sql); while ($row = $db->fetchByAssoc($result)) { $user = BeanFactory::newBean('Users'); $user->retrieve($row['id']); $users[$user->id] = $user; } break; } foreach ($users as $user) { $user_email = $user->emailAddress->getPrimaryAddress($user); if (trim($user_email) != '') { $emails[$params['email_to_type'][$key]][] = $user_email; $emails['template_override'][$user_email] = array('Users' => $user->id); } } break; case 'Related Field': $emailTarget = $params['email'][$key]; $relatedFields = array_merge($bean->get_related_fields(), $bean->get_linked_fields()); $field = $relatedFields[$emailTarget]; if ($field['type'] == 'relate') { $linkedBeans = array(); $idName = $field['id_name']; $id = $bean->$idName; $linkedBeans[] = BeanFactory::getBean($field['module'], $id); } else { if ($field['type'] == 'link') { $relField = $field['name']; if (isset($field['module']) && $field['module'] != '') { $rel_module = $field['module']; } else { if ($bean->load_relationship($relField)) { $rel_module = $bean->$relField->getRelatedModuleName(); } } $linkedBeans = $bean->get_linked_beans($relField, $rel_module); } else { $linkedBeans = $bean->get_linked_beans($field['link'], $field['module']); } } if ($linkedBeans) { foreach ($linkedBeans as $linkedBean) { if (!empty($linkedBean)) { $rel_email = $linkedBean->emailAddress->getPrimaryAddress($linkedBean); if (trim($rel_email) != '') { $emails[$params['email_to_type'][$key]][] = $rel_email; $emails['template_override'][$rel_email] = array($linkedBean->module_dir => $linkedBean->id); } } } } break; case 'Record Email': $recordEmail = $bean->emailAddress->getPrimaryAddress($bean); if ($recordEmail == '' && isset($bean->email1)) { $recordEmail = $bean->email1; } if (trim($recordEmail) != '') { $emails[$params['email_to_type'][$key]][] = $recordEmail; } break; } } } return $emails; } /** * Return true on success otherwise false. * Use actionSendEmail::getLastEmailsSuccess() and actionSendEmail::getLastEmailsFailed() * methods to get last email sending status * * @param SugarBean $bean * @param array $params * @param bool $in_save * @return boolean */ public function run_action(SugarBean $bean, $params = array(), $in_save = false) { include_once __DIR__ . '/../../EmailTemplates/EmailTemplate.php'; $this->clearLastEmailsStatus(); $emailTemp = BeanFactory::newBean('EmailTemplates'); $emailTemp->retrieve($params['email_template']); if ($emailTemp->id == '') { return false; } $emails = $this->getEmailsFromParams($bean, $params); if (!isset($emails['to']) || empty($emails['to'])) { return false; } $attachments = $this->getAttachments($emailTemp); $ret = true; if (isset($params['individual_email']) && $params['individual_email']) { foreach ($emails['to'] as $email_to) { $emailTemp = BeanFactory::newBean('EmailTemplates'); $emailTemp->retrieve($params['email_template']); $template_override = isset($emails['template_override'][$email_to]) ? $emails['template_override'][$email_to] : array(); $this->parse_template($bean, $emailTemp, $template_override); if (!$this->sendEmail(array($email_to), $emailTemp->subject, $emailTemp->body_html, $emailTemp->body, $bean, $emails['cc'], $emails['bcc'], $attachments)) { $ret = false; $this->lastEmailsFailed++; } else { $this->lastEmailsSuccess++; } } } else { $this->parse_template($bean, $emailTemp); if ($emailTemp->text_only == '1') { $email_body = $emailTemp->body; $email_body_alt = null; } else { $email_body = $emailTemp->body_html; $email_body_alt = $emailTemp->body; } if (!$this->sendEmail($emails['to'], $emailTemp->subject, $email_body, $email_body_alt, $bean, $emails['cc'], $emails['bcc'], $attachments)) { $ret = false; $this->lastEmailsFailed++; } else { $this->lastEmailsSuccess++; } } return $ret; } /** * clear last email sending status */ protected function clearLastEmailsStatus() { $this->lastEmailsFailed = 0; $this->lastEmailsSuccess = 0; } /** * failed emails count at last run_action * @return int */ public function getLastEmailsFailed() { return $this->lastEmailsFailed; } /** * successfully sent emails count at last run_action * @return type */ public function getLastEmailsSuccess() { return $this->lastEmailsSuccess; } public function parse_template(SugarBean $bean, &$template, $object_override = array()) { global $sugar_config; require_once __DIR__ . '/templateParser.php'; $object_arr[$bean->module_dir] = $bean->id; foreach ($bean->field_defs as $bean_arr) { if ($bean_arr['type'] == 'relate') { if (isset($bean_arr['module']) && $bean_arr['module'] != '' && isset($bean_arr['id_name']) && $bean_arr['id_name'] != '' && $bean_arr['module'] != 'EmailAddress') { $idName = $bean_arr['id_name']; if (isset($bean->field_defs[$idName]) && $bean->field_defs[$idName]['source'] != 'non-db') { if (!isset($object_arr[$bean_arr['module']])) { $object_arr[$bean_arr['module']] = $bean->$idName; } } } } else { if ($bean_arr['type'] == 'link') { if (!isset($bean_arr['module']) || $bean_arr['module'] == '') { $bean_arr['module'] = getRelatedModule($bean->module_dir, $bean_arr['name']); } if (isset($bean_arr['module']) && $bean_arr['module'] != ''&& !isset($object_arr[$bean_arr['module']])&& $bean_arr['module'] != 'EmailAddress') { $linkedBeans = $bean->get_linked_beans($bean_arr['name'], $bean_arr['module'], array(), 0, 1); if ($linkedBeans) { $linkedBean = $linkedBeans[0]; if (!isset($object_arr[$linkedBean->module_dir])) { $object_arr[$linkedBean->module_dir] = $linkedBean->id; } } } } } } $object_arr['Users'] = is_a($bean, 'User') ? $bean->id : $bean->assigned_user_id; $object_arr = array_merge($object_arr, $object_override); $parsedSiteUrl = parse_url($sugar_config['site_url']); $host = $parsedSiteUrl['host']; if (!isset($parsedSiteUrl['port'])) { $parsedSiteUrl['port'] = 80; } $port = ($parsedSiteUrl['port'] != 80) ? ":".$parsedSiteUrl['port'] : ''; $path = !empty($parsedSiteUrl['path']) ? $parsedSiteUrl['path'] : ""; $cleanUrl = "{$parsedSiteUrl['scheme']}://{$host}{$port}{$path}"; $url = $cleanUrl."/index.php?module={$bean->module_dir}&action=DetailView&record={$bean->id}"; $template->subject = str_replace("\$contact_user", "\$user", $template->subject); $template->body_html = str_replace("\$contact_user", "\$user", $template->body_html); $template->body = str_replace("\$contact_user", "\$user", $template->body); $template->subject = aowTemplateParser::parse_template($template->subject, $object_arr); $template->body_html = aowTemplateParser::parse_template($template->body_html, $object_arr); $template->body_html = str_replace("\$url", $url, $template->body_html); $template->body_html = str_replace('$sugarurl', $sugar_config['site_url'], $template->body_html); $template->body = aowTemplateParser::parse_template($template->body, $object_arr); $template->body = str_replace("\$url", $url, $template->body); $template->body = str_replace('$sugarurl', $sugar_config['site_url'], $template->body); } public function getAttachments(EmailTemplate $template) { $attachments = array(); if ($template->id != '') { $note_bean = BeanFactory::newBean('Notes'); $notes = $note_bean->get_full_list('', "parent_type = 'Emails' AND parent_id = '".$template->id."'"); if ($notes != null) { foreach ($notes as $note) { $attachments[] = $note; } } } return $attachments; } public function sendEmail($emailTo, $emailSubject, $emailBody, $altemailBody, SugarBean $relatedBean = null, $emailCc = array(), $emailBcc = array(), $attachments = array()) { require_once('modules/Emails/Email.php'); require_once('include/SugarPHPMailer.php'); $emailObj = BeanFactory::newBean('Emails'); $defaults = $emailObj->getSystemDefaultEmail(); $mail = new SugarPHPMailer(); $mail->setMailerForSystem(); $mail->From = $defaults['email']; isValidEmailAddress($mail->From); $mail->FromName = $defaults['name']; $mail->ClearAllRecipients(); $mail->ClearReplyTos(); $mail->Subject=from_html($emailSubject); $mail->Body=$emailBody; if($altemailBody){ $mail->AltBody = $altemailBody; } $mail->handleAttachments($attachments); $mail->prepForOutbound(); if (empty($emailTo)) { return false; } foreach ($emailTo as $to) { $mail->AddAddress($to); } if (!empty($emailCc)) { foreach ($emailCc as $email) { $mail->AddCC($email); } } if (!empty($emailBcc)) { foreach ($emailBcc as $email) { $mail->AddBCC($email); } } //now create email if ($mail->Send()) { $emailObj->to_addrs= implode(',', $emailTo); $emailObj->cc_addrs= implode(',', $emailCc); $emailObj->bcc_addrs= implode(',', $emailBcc); $emailObj->type= 'out'; $emailObj->deleted = '0'; $emailObj->name = $mail->Subject; $emailObj->description = $mail->AltBody; $emailObj->description_html = $mail->Body; $emailObj->from_addr = $mail->From; isValidEmailAddress($emailObj->from_addr); if ($relatedBean instanceof SugarBean && !empty($relatedBean->id)) { $emailObj->parent_type = $relatedBean->module_dir; $emailObj->parent_id = $relatedBean->id; } $emailObj->date_sent_received = TimeDate::getInstance()->nowDb(); $emailObj->modified_user_id = '1'; $emailObj->created_by = '1'; $emailObj->status = 'sent'; $emailObj->save(); // Fix for issue 1561 - Email Attachments Sent By Workflow Do Not Show In Related Activity. foreach ($attachments as $attachment) { $note = BeanFactory::newBean('Notes'); $note->id = create_guid(); $note->date_entered = $attachment->date_entered; $note->date_modified = $attachment->date_modified; $note->modified_user_id = $attachment->modified_user_id; $note->assigned_user_id = $attachment->assigned_user_id; $note->new_with_id = true; $note->parent_id = $emailObj->id; $note->parent_type = $attachment->parent_type; $note->name = $attachment->name; ; $note->filename = $attachment->filename; $note->file_mime_type = $attachment->file_mime_type; $fileLocation = "upload://{$attachment->id}"; $dest = "upload://{$note->id}"; if (!copy($fileLocation, $dest)) { $GLOBALS['log']->debug("EMAIL 2.0: could not copy attachment file to $fileLocation => $dest"); } $note->save(); } return true; } return false; } }
Encontrar Diferença