mirror of
https://github.com/VTECRM/vtenext.git
synced 2026-02-26 16:18:47 +00:00
328 lines
16 KiB
PHP
328 lines
16 KiB
PHP
<?php
|
|
/*************************************
|
|
* SPDX-FileCopyrightText: 2009-2020 Vtenext S.r.l. <info@vtenext.com>
|
|
* SPDX-License-Identifier: AGPL-3.0-only
|
|
************************************/
|
|
/* crmv@92272 crmv@96450 crmv@102879 crmv@115268 crmv@106857 crmv@123745 crmv@155613 */
|
|
|
|
require_once('modules/com_workflow/VTEntityCache.inc');//crmv@207901
|
|
require_once('modules/com_workflow/VTWorkflowUtils.php');//crmv@207901
|
|
require_once('modules/com_workflow/VTSimpleTemplate.inc');//crmv@207901
|
|
require_once('include/Webservices/DescribeObject.php');
|
|
require_once('modules/Settings/ProcessMaker/ProcessDynaForm.php');
|
|
require_once(dirname(__FILE__).'/Base.php');
|
|
|
|
class PMActionEmail extends PMActionBase {
|
|
|
|
function edit(&$smarty,$id,$elementid,$retrieve,$action_type,$action_id='') {
|
|
global $default_charset; //crmv@178425
|
|
$PMUtils = ProcessMakerUtils::getInstance();
|
|
$involvedRecords = $PMUtils->getRecordsInvolved($id,true);
|
|
if (!empty($involvedRecords)) {
|
|
$smarty->assign('INVOLVED_RECORDS', addslashes(Zend_Json::encode($involvedRecords)));
|
|
}
|
|
//crmv@140599
|
|
$records_pick = $PMUtils->getRecordsInvolvedOptions($id); // TODO gestire anche i relazionati
|
|
$smarty->assign("RECORDS_INVOLVED", $records_pick);
|
|
//crmv@140599e
|
|
if ($action_id != '') {
|
|
$vte_metadata = Zend_Json::decode($retrieve['vte_metadata']);
|
|
$vte_metadata_arr = array();
|
|
if (!empty($vte_metadata[$elementid])) {
|
|
$metadata_action = $vte_metadata[$elementid]['actions'][$action_id];
|
|
}
|
|
// crmv@178425 crmv@200330
|
|
$metadata_action['sender'] = htmlentities($metadata_action['sender'], ENT_QUOTES, $default_charset);
|
|
$metadata_action['recepient'] = htmlentities($metadata_action['recepient'], ENT_QUOTES, $default_charset);
|
|
$metadata_action['emailcc'] = htmlentities($metadata_action['emailcc'], ENT_QUOTES, $default_charset);
|
|
$metadata_action['emailbcc'] = htmlentities($metadata_action['emailbcc'], ENT_QUOTES, $default_charset);
|
|
$metadata_action['emailreplyto'] = htmlentities($metadata_action['emailreplyto'], ENT_QUOTES, $default_charset);
|
|
// crmv@178425e crmv@200330e
|
|
$smarty->assign('METADATA', $metadata_action);
|
|
}
|
|
|
|
if ($PMUtils->todoFunctions) {
|
|
// crmv@188842
|
|
$parent_id_pick = $PMUtils->getRecordsInvolvedOptions($id, $metadata_action['parent_id'], false, null, null, true);
|
|
unset($parent_id_pick['']);
|
|
$parent_id_pick = array_merge(
|
|
array(
|
|
'none' => array(getTranslatedString('LBL_NONE'),($metadata_action['parent_id']=='none')?'selected':''),
|
|
'' => array(getTranslatedString('LBL_PM_ACTION_EMAIL_AUTOMATIC_MODE','Settings'),(empty($metadata_action['parent_id']))?'selected':''),
|
|
),
|
|
$parent_id_pick
|
|
);
|
|
$smarty->assign("PARENT_ID_PICK", $parent_id_pick);
|
|
// crmv@188842e
|
|
|
|
// crmv@198518
|
|
$attach_from_pick = $PMUtils->getRecordsInvolvedOptions($id, $metadata_action['attach_from'], false, null, null, true);
|
|
unset($attach_from_pick['']);
|
|
$attach_from_pick = array_merge(
|
|
array(
|
|
'' => array(getTranslatedString('LBL_NONE'),(empty($metadata_action['attach_from']))?'selected':''),
|
|
),
|
|
$attach_from_pick
|
|
);
|
|
$smarty->assign("ATTACH_FROM_PICK", $attach_from_pick);
|
|
// crmv@198518e
|
|
}
|
|
|
|
require_once('modules/com_workflow/VTTaskManager.inc');//crmv@207901
|
|
require_once('modules/com_workflow/tasks/VTEmailTask.inc');//crmv@207901
|
|
$task = new VTEmailTask();
|
|
$metaVariables = $task->getMetaVariables();
|
|
$smarty->assign("META_VARIABLES",$metaVariables);
|
|
|
|
//crmv@106857
|
|
$otherOptions = array();
|
|
$processDynaFormObj = ProcessDynaForm::getInstance();
|
|
$otherOptions = $processDynaFormObj->getFieldsOptions($id,true);
|
|
$PMUtils->getAllTableFieldsOptions($id, $otherOptions);
|
|
//crmv@203075 dont add prodblocks to action cycle related records
|
|
if(empty($this->cycleRelModule))
|
|
$PMUtils->getAllPBlockFieldsOptions($id, $otherOptions); // crmv@195745
|
|
//crmv@203075e
|
|
$smarty->assign("OTHER_OPTIONS", addslashes(Zend_Json::encode($otherOptions)));
|
|
//crmv@106857e
|
|
|
|
// crmv@146671
|
|
$extwsOptions = $PMUtils->getExtWSFields($id);
|
|
$smarty->assign('EXTWS_OPTIONS',addslashes(Zend_Json::encode($extwsOptions)));
|
|
// crmv@146671e
|
|
|
|
$smarty->assign('SDK_CUSTOM_FUNCTIONS',SDK::getFormattedProcessMakerFieldActions());
|
|
|
|
$elementsActors = $PMUtils->getElementsActors($id,true);
|
|
$smarty->assign('ELEMENTS_ACTORS', addslashes(Zend_Json::encode($elementsActors)));
|
|
}
|
|
|
|
function execute($engine,$actionid) {
|
|
global $adb, $table_prefix;
|
|
|
|
$action = $engine->vte_metadata['actions'][$actionid];
|
|
|
|
$engine->log("Action Email","action $actionid - {$action['action_title']}");
|
|
|
|
// crmv@192497
|
|
list($wsid, $record) = explode('x', $engine->id);
|
|
$record_type = getSalesEntityType($record);
|
|
$objrec = CRMEntity::getInstance($record_type);
|
|
$record_status = $objrec->checkRetrieve($record, $record_type, false);
|
|
if(in_array($record_status, array('LBL_RECORD_DELETE','LBL_RECORD_NOT_FOUND'))) {
|
|
return;
|
|
}
|
|
// crmv@192497e
|
|
|
|
// crmv@188842
|
|
$parent_id = '';
|
|
$PMUtils = ProcessMakerUtils::getInstance();
|
|
if ($action['parent_id'] != 'none') {
|
|
if (!empty($action['parent_id'])) {
|
|
list($rel_metaid,$rel_module,$rel_reference,$rel_meta_processid,$rel_relatedModule) = explode(':',$action['parent_id']);
|
|
$parent_id = $engine->getCrmid($rel_metaid,null,$rel_reference,$rel_meta_processid);
|
|
$parent_id_module = getSalesEntityType($parent_id);
|
|
if (!empty($rel_relatedModule)) {
|
|
if ($rel_relatedModule != $parent_id_module) {
|
|
$parent_id = '';
|
|
$engine->log("Action Email","action $actionid - {$action['action_title']} Relation FAILED parent_id {$action['parent_id']} do not found");
|
|
}
|
|
}
|
|
} else {
|
|
// automatic mode: link email to the primary record of the process (the record on the start task)
|
|
//crmv@185355
|
|
$processid = $engine->processid;
|
|
$running_process = $engine->running_process;
|
|
// check if is a subprocess use the father process
|
|
$result = $adb->pquery("select subp.processid, metarec.id
|
|
from {$table_prefix}_subprocesses subp
|
|
inner join {$table_prefix}_processmaker_metarec metarec on metarec.processid = subp.processid
|
|
where subp.subprocess = ? and metarec.start = ?", array($engine->processid,1));
|
|
if ($result && $adb->num_rows($result) > 0) {
|
|
$parent_processid = $adb->query_result($result,0,'processid');
|
|
$parent_processid_metaid = $adb->query_result($result,0,'id');
|
|
$running_process = $PMUtils->getRelatedRunningProcess($engine->running_process,$engine->processid);//crmv@206002
|
|
$processid = getSingleFieldValue("{$table_prefix}_running_processes", 'processmakerid', 'id', $running_process);
|
|
}
|
|
$result = $adb->pquery("select rec.crmid
|
|
from {$table_prefix}_processmaker_metarec metarec
|
|
inner join {$table_prefix}_processmaker_rec rec on rec.id = metarec.id
|
|
where metarec.start = ? and metarec.processid = ? and rec.running_process = ?", array(1,$processid,$running_process));
|
|
//crmv@185355e
|
|
if ($result && $adb->num_rows($result) > 0) {
|
|
$parent_id = $adb->query_result($result,0,'crmid');
|
|
$parent_module = getSalesEntityType($parent_id);
|
|
$parentInstance = Vtecrm_Module::getInstance($parent_module);
|
|
$messagesInstance = Vtecrm_Module::getInstance('Messages');
|
|
$result = $adb->pquery("select relation_id from {$table_prefix}_relatedlists where tabid = ? and related_tabid = ?", array($parentInstance->id, $messagesInstance->id));
|
|
if ($adb->num_rows($result) == 0) {
|
|
// if there is no relationship with the Messages I look for the records connected through uitype 10 if there is a module connected to the messages
|
|
$parent_id_old = $parent_id; $parent_id = '';
|
|
$result1 = $adb->pquery("select fieldname, relmodule
|
|
from {$table_prefix}_field
|
|
inner join {$table_prefix}_fieldmodulerel on {$table_prefix}_field.fieldid = {$table_prefix}_fieldmodulerel.fieldid
|
|
where tabid = ?", array($parentInstance->id));
|
|
if ($result1 && $adb->num_rows($result1) > 0) {
|
|
while($row=$adb->fetchByAssoc($result1)) {
|
|
$parentInstance2 = Vtecrm_Module::getInstance($row['relmodule']);
|
|
$result2 = $adb->pquery("select relation_id from {$table_prefix}_relatedlists where tabid = ? and related_tabid = ?", array($parentInstance2->id, $messagesInstance->id));
|
|
if ($adb->num_rows($result2) > 0) {
|
|
$focusTmp = CRMEntity::getInstance($parent_module);
|
|
$focusTmp->retrieve_entity_info_no_html($parent_id_old,$parent_module);
|
|
if (!empty($focusTmp->column_fields[$row['fieldname']])) {
|
|
$parent_id = $focusTmp->column_fields[$row['fieldname']];
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
// crmv@188842e
|
|
|
|
$params = array(
|
|
'subject'=>$action['subject'],
|
|
'description'=>$action['content'],
|
|
'mfrom'=>$action['sender'],
|
|
'mto'=>$action['recepient'],
|
|
'mcc'=>$action['emailcc'],
|
|
'mbcc'=>$action['emailbcc'],
|
|
'mreplyto'=>$action['emailreplyto'], // crmv@200330
|
|
'mtype'=>'Link',
|
|
'mvisibility'=>'Public', // crmv@189760
|
|
'parent_id'=>$parent_id.'@1|',
|
|
);
|
|
|
|
//crmv@178425
|
|
$messageFocus = CRMEntity::getInstance('Messages');
|
|
$parsedAddress = $messageFocus->parseAddressList($action['sender']);
|
|
$params['mfrom'] = $parsedAddress[0]['email'];
|
|
$params['mfrom_n'] = $parsedAddress[0]['name'];
|
|
//crmv@178425e
|
|
|
|
// crmv@126696
|
|
|
|
//crmv@203075
|
|
if(!empty($this->cycleRow['row']['record_id']))
|
|
$this->replaceParams($engine, $params, $actionid, array(), array(), $this->cycleRow['row']['record_id']); //crmv@183346
|
|
else
|
|
$this->replaceParams($engine, $params, $actionid); //crmv@183346
|
|
//crmv@203075e
|
|
|
|
if(strlen(trim($params['mto'], " \t\n,")) == 0 && strlen(trim($params['mcc'], " \t\n,")) == 0 && strlen(trim($params['mbcc'], " \t\n,")) == 0) {
|
|
$engine->log("Action Email","action $actionid FAILED: recepients empty");
|
|
return;
|
|
}
|
|
// crmv@126696e
|
|
|
|
if (!empty($params['mreplyto'])) $params['send_mail_newsletter_params']['reply_to'] = $params['mreplyto']; // crmv@200330
|
|
|
|
// crmv@198518
|
|
if (!empty($action['attach_from'])) {
|
|
list($rel_metaid,$rel_module,$rel_reference,$rel_meta_processid,$rel_relatedModule) = explode(':',$action['attach_from']);
|
|
$attach_from = $engine->getCrmid($rel_metaid,null,$rel_reference,$rel_meta_processid);
|
|
$attach_from_module = getSalesEntityType($attach_from);
|
|
if (!empty($rel_relatedModule)) {
|
|
if ($rel_relatedModule != $attach_from_module) {
|
|
$attach_from = '';
|
|
$engine->log("Action Email","action $actionid - {$action['action_title']} Relation FAILED attach_from {$action['attach_from']} do not found");
|
|
}
|
|
}
|
|
if (!empty($attach_from)) {
|
|
$bk_pdf_attachment = $_REQUEST['pdf_attachment'];
|
|
$_REQUEST['pdf_attachment'] = array();
|
|
$result = $adb->pquery("select {$table_prefix}_senotesrel.notesid, {$table_prefix}_attachments.path, {$table_prefix}_attachments.attachmentsid, {$table_prefix}_attachments.name
|
|
from {$table_prefix}_senotesrel
|
|
inner join {$table_prefix}_crmentity on {$table_prefix}_crmentity.crmid = {$table_prefix}_senotesrel.notesid
|
|
inner join {$table_prefix}_seattachmentsrel on {$table_prefix}_seattachmentsrel.crmid = {$table_prefix}_senotesrel.notesid
|
|
inner join {$table_prefix}_attachments on {$table_prefix}_seattachmentsrel.attachmentsid = {$table_prefix}_attachments.attachmentsid
|
|
where {$table_prefix}_crmentity.deleted = 0 and {$table_prefix}_senotesrel.crmid = ?", array($attach_from));
|
|
if ($result && $adb->num_rows($result) > 0) {
|
|
while($row=$adb->fetchByAssoc($result)) {
|
|
$_REQUEST['pdf_attachment'][] = str_replace('storage/','',$row['path'].$row['attachmentsid'].'_'.$row['name']);
|
|
$params['other'][] = array(
|
|
'documentid' => $row['notesid'],
|
|
'parameters'=>array(
|
|
'content_id'=>'',
|
|
'name'=>$row['name'],
|
|
'contenttype'=>'',
|
|
'contentdisposition'=>'attachment',
|
|
'charset'=>'',
|
|
'encoding'=>'',
|
|
'method'=>'',
|
|
'size'=>'',
|
|
)
|
|
);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
// crmv@198518e
|
|
|
|
$focus = CRMentity::getInstance('Messages');
|
|
$mail_status = $focus->send($params,false,true); // crmv@129149
|
|
if ($mail_status == 1) {
|
|
$engine->log("Action Email","action $actionid SUCCESS");
|
|
if (!empty($parent_id)) {
|
|
// crmv@198518
|
|
$messagesid = $focus->saveCacheLink($params);
|
|
if (!empty($messagesid) && !empty($attach_from) && !empty($params['other'])) {
|
|
foreach($params['other'] as $id => $content) {
|
|
$adb->pquery("update {$focus->table_name}_attach set document = ? where {$focus->table_index} = ? and contentid = ?", array($content['documentid'],$messagesid,$id));
|
|
}
|
|
}
|
|
// crmv@198518e
|
|
$engine->log("Action Email","related email to $parent_id");
|
|
} else {
|
|
$engine->log("Action Email","unable to relate email to a record");
|
|
}
|
|
} else {
|
|
$engine->log("Action Email","action $actionid FAILED: $mail_status");
|
|
}
|
|
|
|
if (!empty($attach_from)) $_REQUEST['pdf_attachment'] = $bk_pdf_attachment; // crmv@198518
|
|
}
|
|
|
|
// crmv@126696
|
|
function replaceParams($engine, &$params, $actionid, $referenceFields=array(), $ownerFields=array(), $cycle_related_crmid=null) { //crmv@183346 crmv@203075
|
|
// init variabiles to replace tags
|
|
global $log, $adb;
|
|
static $cacheWsEntities = array();
|
|
|
|
$util = new VTWorkflowUtils();
|
|
$admin = $util->adminUser();
|
|
$entityCache = new VTEntityCache($admin);
|
|
$util->revertUser();
|
|
// end
|
|
|
|
$PMUtils = ProcessMakerUtils::getInstance();
|
|
|
|
(!empty($this->cycleRow['id'])) ? $cycleIndex = $this->cycleRow['id'] : $cycleIndex = $this->cycleIndex;
|
|
|
|
// replace tags
|
|
foreach($params as $fieldname => &$value) {
|
|
// crmv@205151
|
|
$toHtml = ($fieldname == 'description');
|
|
$value = $engine->replaceTags($fieldname,$value,$referenceFields,$ownerFields,$actionid,$cycleIndex, false, true, $cycle_related_crmid, $toHtml); //crmv@183346 crmv@203075
|
|
// crmv@205151e
|
|
if (in_array($fieldname,array('mto','mcc','mbcc','mreplyto'))) { // crmv@200330
|
|
$value = explode(',',$value);
|
|
if (!empty($value)) {
|
|
$tmp = array();
|
|
foreach($value as $t) {
|
|
$tmp[] = trim($t);
|
|
}
|
|
$value = implode(',',array_filter($tmp));
|
|
}
|
|
}
|
|
}
|
|
|
|
if (!empty($params['description'])) {
|
|
$ct = new VTSimpleTemplate($params['description']);
|
|
$params['description'] = $ct->render($entityCache,'');
|
|
}
|
|
}
|
|
// crmv@126696e
|
|
} |