diff --git a/workflow/engine/classes/class.wsBase.php b/workflow/engine/classes/class.wsBase.php index c7d3944cb..84952cf79 100755 --- a/workflow/engine/classes/class.wsBase.php +++ b/workflow/engine/classes/class.wsBase.php @@ -949,6 +949,12 @@ class wsBase } $aSetup = (!empty($arrayConfigAux))? $arrayConfigAux : System::getEmailConfiguration(); + + if (!isset($aSetup['MESS_ENABLED'])) { + $aSetup['MESS_ENABLED'] = 1; + $aSetup['SMTPSecure'] = $aSetup['SMTPSECURE']; + unset($aSetup['SMTPSECURE']); + } } else { /*----------------------------------********---------------------------------*/ $aSetup = System::getEmailConfiguration(); diff --git a/workflow/engine/classes/class.wsTools.php b/workflow/engine/classes/class.wsTools.php index a5cf86574..814cf8177 100755 --- a/workflow/engine/classes/class.wsTools.php +++ b/workflow/engine/classes/class.wsTools.php @@ -68,6 +68,12 @@ class workspaceTools $stop = microtime(true); CLI::logging("<*> Database Upgrade Process took " . ($stop - $start) . " seconds.\n"); + $start = microtime(true); + CLI::logging("> Check Intermediate Email Event...\n"); + $this->checkIntermediateEmailEvent(); + $stop = microtime(true); + CLI::logging("<*> Database Upgrade Process took " . ($stop - $start) . " seconds.\n"); + $start = microtime(true); CLI::logging("> Verify enterprise old...\n"); $this->verifyFilesOldEnterprise($workSpace); @@ -145,6 +151,22 @@ class workspaceTools CLI::logging("<*> Database Upgrade Structure Process took $final seconds.\n"); } + public function checkIntermediateEmailEvent() + { + $oEmailEvent = new \ProcessMaker\BusinessModel\EmailEvent(); + $oEmailServer = new \ProcessMaker\BusinessModel\EmailServer(); + $oCriteria = $oEmailEvent->getEmailEventCriteriaEmailServer(); + $rsCriteria = \EmailServerPeer::doSelectRS($oCriteria); + $rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + while ($rsCriteria->next()) { + $row = $rsCriteria->getRow(); + $newUidData = $oEmailServer->getUidEmailServer($row['EMAIL_EVENT_FROM']); + if (is_array($newUidData)) { + $oEmailEvent->update($row['EMAIL_EVENT_UID'], $newUidData); + } + } + } + /** * Scan the db.php file for database information and return it as an array * diff --git a/workflow/engine/classes/model/map/EmailEventMapBuilder.php b/workflow/engine/classes/model/map/EmailEventMapBuilder.php index 83ea61ceb..1553782ae 100644 --- a/workflow/engine/classes/model/map/EmailEventMapBuilder.php +++ b/workflow/engine/classes/model/map/EmailEventMapBuilder.php @@ -79,6 +79,8 @@ class EmailEventMapBuilder $tMap->addColumn('PRF_UID', 'PrfUid', 'string', CreoleTypes::VARCHAR, false, 32); + $tMap->addColumn('EMAIL_SERVER_UID', 'EmailServerUid', 'string', CreoleTypes::VARCHAR, false, 32); + } // doBuild() } // EmailEventMapBuilder diff --git a/workflow/engine/classes/model/om/BaseEmailEvent.php b/workflow/engine/classes/model/om/BaseEmailEvent.php index 97c25513b..df4e4f91f 100644 --- a/workflow/engine/classes/model/om/BaseEmailEvent.php +++ b/workflow/engine/classes/model/om/BaseEmailEvent.php @@ -69,6 +69,12 @@ abstract class BaseEmailEvent extends BaseObject implements Persistent */ protected $prf_uid = ''; + /** + * The value for the email_server_uid field. + * @var string + */ + protected $email_server_uid = ''; + /** * Flag to prevent endless save loop, if this object is referenced * by another object which falls in this transaction. @@ -160,6 +166,17 @@ abstract class BaseEmailEvent extends BaseObject implements Persistent return $this->prf_uid; } + /** + * Get the [email_server_uid] column value. + * + * @return string + */ + public function getEmailServerUid() + { + + return $this->email_server_uid; + } + /** * Set the value of [email_event_uid] column. * @@ -314,6 +331,28 @@ abstract class BaseEmailEvent extends BaseObject implements Persistent } // setPrfUid() + /** + * Set the value of [email_server_uid] column. + * + * @param string $v new value + * @return void + */ + public function setEmailServerUid($v) + { + + // Since the native PHP type for this column is string, + // we will cast the input to a string (if it is not). + if ($v !== null && !is_string($v)) { + $v = (string) $v; + } + + if ($this->email_server_uid !== $v || $v === '') { + $this->email_server_uid = $v; + $this->modifiedColumns[] = EmailEventPeer::EMAIL_SERVER_UID; + } + + } // setEmailServerUid() + /** * Hydrates (populates) the object variables with values from the database resultset. * @@ -345,12 +384,14 @@ abstract class BaseEmailEvent extends BaseObject implements Persistent $this->prf_uid = $rs->getString($startcol + 6); + $this->email_server_uid = $rs->getString($startcol + 7); + $this->resetModified(); $this->setNew(false); // FIXME - using NUM_COLUMNS may be clearer. - return $startcol + 7; // 7 = EmailEventPeer::NUM_COLUMNS - EmailEventPeer::NUM_LAZY_LOAD_COLUMNS). + return $startcol + 8; // 8 = EmailEventPeer::NUM_COLUMNS - EmailEventPeer::NUM_LAZY_LOAD_COLUMNS). } catch (Exception $e) { throw new PropelException("Error populating EmailEvent object", $e); @@ -575,6 +616,9 @@ abstract class BaseEmailEvent extends BaseObject implements Persistent case 6: return $this->getPrfUid(); break; + case 7: + return $this->getEmailServerUid(); + break; default: return null; break; @@ -602,6 +646,7 @@ abstract class BaseEmailEvent extends BaseObject implements Persistent $keys[4] => $this->getEmailEventTo(), $keys[5] => $this->getEmailEventSubject(), $keys[6] => $this->getPrfUid(), + $keys[7] => $this->getEmailServerUid(), ); return $result; } @@ -654,6 +699,9 @@ abstract class BaseEmailEvent extends BaseObject implements Persistent case 6: $this->setPrfUid($value); break; + case 7: + $this->setEmailServerUid($value); + break; } // switch() } @@ -705,6 +753,10 @@ abstract class BaseEmailEvent extends BaseObject implements Persistent $this->setPrfUid($arr[$keys[6]]); } + if (array_key_exists($keys[7], $arr)) { + $this->setEmailServerUid($arr[$keys[7]]); + } + } /** @@ -744,6 +796,10 @@ abstract class BaseEmailEvent extends BaseObject implements Persistent $criteria->add(EmailEventPeer::PRF_UID, $this->prf_uid); } + if ($this->isColumnModified(EmailEventPeer::EMAIL_SERVER_UID)) { + $criteria->add(EmailEventPeer::EMAIL_SERVER_UID, $this->email_server_uid); + } + return $criteria; } @@ -810,6 +866,8 @@ abstract class BaseEmailEvent extends BaseObject implements Persistent $copyObj->setPrfUid($this->prf_uid); + $copyObj->setEmailServerUid($this->email_server_uid); + $copyObj->setNew(true); diff --git a/workflow/engine/classes/model/om/BaseEmailEventPeer.php b/workflow/engine/classes/model/om/BaseEmailEventPeer.php index 2ed553392..c8fffd00f 100644 --- a/workflow/engine/classes/model/om/BaseEmailEventPeer.php +++ b/workflow/engine/classes/model/om/BaseEmailEventPeer.php @@ -25,7 +25,7 @@ abstract class BaseEmailEventPeer const CLASS_DEFAULT = 'classes.model.EmailEvent'; /** The total number of columns. */ - const NUM_COLUMNS = 7; + const NUM_COLUMNS = 8; /** The number of lazy-loaded columns. */ const NUM_LAZY_LOAD_COLUMNS = 0; @@ -52,6 +52,9 @@ abstract class BaseEmailEventPeer /** the column name for the PRF_UID field */ const PRF_UID = 'EMAIL_EVENT.PRF_UID'; + /** the column name for the EMAIL_SERVER_UID field */ + const EMAIL_SERVER_UID = 'EMAIL_EVENT.EMAIL_SERVER_UID'; + /** The PHP to DB Name Mapping */ private static $phpNameMap = null; @@ -63,10 +66,10 @@ abstract class BaseEmailEventPeer * e.g. self::$fieldNames[self::TYPE_PHPNAME][0] = 'Id' */ private static $fieldNames = array ( - BasePeer::TYPE_PHPNAME => array ('EmailEventUid', 'PrjUid', 'EvnUid', 'EmailEventFrom', 'EmailEventTo', 'EmailEventSubject', 'PrfUid', ), - BasePeer::TYPE_COLNAME => array (EmailEventPeer::EMAIL_EVENT_UID, EmailEventPeer::PRJ_UID, EmailEventPeer::EVN_UID, EmailEventPeer::EMAIL_EVENT_FROM, EmailEventPeer::EMAIL_EVENT_TO, EmailEventPeer::EMAIL_EVENT_SUBJECT, EmailEventPeer::PRF_UID, ), - BasePeer::TYPE_FIELDNAME => array ('EMAIL_EVENT_UID', 'PRJ_UID', 'EVN_UID', 'EMAIL_EVENT_FROM', 'EMAIL_EVENT_TO', 'EMAIL_EVENT_SUBJECT', 'PRF_UID', ), - BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, ) + BasePeer::TYPE_PHPNAME => array ('EmailEventUid', 'PrjUid', 'EvnUid', 'EmailEventFrom', 'EmailEventTo', 'EmailEventSubject', 'PrfUid', 'EmailServerUid', ), + BasePeer::TYPE_COLNAME => array (EmailEventPeer::EMAIL_EVENT_UID, EmailEventPeer::PRJ_UID, EmailEventPeer::EVN_UID, EmailEventPeer::EMAIL_EVENT_FROM, EmailEventPeer::EMAIL_EVENT_TO, EmailEventPeer::EMAIL_EVENT_SUBJECT, EmailEventPeer::PRF_UID, EmailEventPeer::EMAIL_SERVER_UID, ), + BasePeer::TYPE_FIELDNAME => array ('EMAIL_EVENT_UID', 'PRJ_UID', 'EVN_UID', 'EMAIL_EVENT_FROM', 'EMAIL_EVENT_TO', 'EMAIL_EVENT_SUBJECT', 'PRF_UID', 'EMAIL_SERVER_UID', ), + BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, ) ); /** @@ -76,10 +79,10 @@ abstract class BaseEmailEventPeer * e.g. self::$fieldNames[BasePeer::TYPE_PHPNAME]['Id'] = 0 */ private static $fieldKeys = array ( - BasePeer::TYPE_PHPNAME => array ('EmailEventUid' => 0, 'PrjUid' => 1, 'EvnUid' => 2, 'EmailEventFrom' => 3, 'EmailEventTo' => 4, 'EmailEventSubject' => 5, 'PrfUid' => 6, ), - BasePeer::TYPE_COLNAME => array (EmailEventPeer::EMAIL_EVENT_UID => 0, EmailEventPeer::PRJ_UID => 1, EmailEventPeer::EVN_UID => 2, EmailEventPeer::EMAIL_EVENT_FROM => 3, EmailEventPeer::EMAIL_EVENT_TO => 4, EmailEventPeer::EMAIL_EVENT_SUBJECT => 5, EmailEventPeer::PRF_UID => 6, ), - BasePeer::TYPE_FIELDNAME => array ('EMAIL_EVENT_UID' => 0, 'PRJ_UID' => 1, 'EVN_UID' => 2, 'EMAIL_EVENT_FROM' => 3, 'EMAIL_EVENT_TO' => 4, 'EMAIL_EVENT_SUBJECT' => 5, 'PRF_UID' => 6, ), - BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, ) + BasePeer::TYPE_PHPNAME => array ('EmailEventUid' => 0, 'PrjUid' => 1, 'EvnUid' => 2, 'EmailEventFrom' => 3, 'EmailEventTo' => 4, 'EmailEventSubject' => 5, 'PrfUid' => 6, 'EmailServerUid' => 7, ), + BasePeer::TYPE_COLNAME => array (EmailEventPeer::EMAIL_EVENT_UID => 0, EmailEventPeer::PRJ_UID => 1, EmailEventPeer::EVN_UID => 2, EmailEventPeer::EMAIL_EVENT_FROM => 3, EmailEventPeer::EMAIL_EVENT_TO => 4, EmailEventPeer::EMAIL_EVENT_SUBJECT => 5, EmailEventPeer::PRF_UID => 6, EmailEventPeer::EMAIL_SERVER_UID => 7, ), + BasePeer::TYPE_FIELDNAME => array ('EMAIL_EVENT_UID' => 0, 'PRJ_UID' => 1, 'EVN_UID' => 2, 'EMAIL_EVENT_FROM' => 3, 'EMAIL_EVENT_TO' => 4, 'EMAIL_EVENT_SUBJECT' => 5, 'PRF_UID' => 6, 'EMAIL_SERVER_UID' => 7, ), + BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, ) ); /** @@ -194,6 +197,8 @@ abstract class BaseEmailEventPeer $criteria->addSelectColumn(EmailEventPeer::PRF_UID); + $criteria->addSelectColumn(EmailEventPeer::EMAIL_SERVER_UID); + } const COUNT = 'COUNT(EMAIL_EVENT.EMAIL_EVENT_UID)'; diff --git a/workflow/engine/config/schema.xml b/workflow/engine/config/schema.xml index c40d2905e..3bfe774b3 100755 --- a/workflow/engine/config/schema.xml +++ b/workflow/engine/config/schema.xml @@ -5310,6 +5310,7 @@ + diff --git a/workflow/engine/data/mysql/schema.sql b/workflow/engine/data/mysql/schema.sql index c886b0f37..3667f02a5 100755 --- a/workflow/engine/data/mysql/schema.sql +++ b/workflow/engine/data/mysql/schema.sql @@ -2942,6 +2942,7 @@ CREATE TABLE `EMAIL_EVENT` `EMAIL_EVENT_TO` MEDIUMTEXT NOT NULL, `EMAIL_EVENT_SUBJECT` VARCHAR(150) default '', `PRF_UID` VARCHAR(32) default '', + `EMAIL_SERVER_UID` VARCHAR(32) NOT NULL, PRIMARY KEY (`EMAIL_EVENT_UID`) )ENGINE=InnoDB DEFAULT CHARSET='utf8'; #----------------------------------------------------------------------------- diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/EmailEvent.php b/workflow/engine/src/ProcessMaker/BusinessModel/EmailEvent.php index 1b36d4cd5..bbcce72f0 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/EmailEvent.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/EmailEvent.php @@ -65,11 +65,7 @@ class EmailEvent $accountsArray = array(); while ($aRow = $result->getRow()) { if ($aRow['MESS_UID'] != null) { - if($aRow['MESS_FROM_MAIL'] == "") { - $aRow['EMAIL'] = $aRow['MESS_ACCOUNT']; - } else { - $aRow['EMAIL'] = $aRow['MESS_FROM_MAIL']; - } + $aRow['EMAIL'] = $aRow['MESS_ACCOUNT']; if($aRow['EMAIL'] != "") { $accountsArray[] = array_change_key_case($aRow, CASE_LOWER); } @@ -355,6 +351,32 @@ class EmailEvent $criteria->addSelectColumn(\EmailEventPeer::EMAIL_EVENT_TO); $criteria->addSelectColumn(\EmailEventPeer::EMAIL_EVENT_SUBJECT); $criteria->addSelectColumn(\EmailEventPeer::PRF_UID); + $criteria->addSelectColumn(\EmailEventPeer::EMAIL_SERVER_UID); + + return $criteria; + } catch (\Exception $e) { + throw $e; + } + } + + /** + * @return \Criteria + * @throws \Exception + */ + public function getEmailEventCriteriaEmailServer() + { + try { + $criteria = new \Criteria("workflow"); + + $criteria->addSelectColumn(\EmailEventPeer::EMAIL_EVENT_UID); + $criteria->addSelectColumn(\EmailEventPeer::PRJ_UID); + $criteria->addSelectColumn(\EmailEventPeer::EVN_UID); + $criteria->addSelectColumn(\EmailEventPeer::EMAIL_EVENT_FROM); + $criteria->addSelectColumn(\EmailEventPeer::EMAIL_EVENT_TO); + $criteria->addSelectColumn(\EmailEventPeer::EMAIL_EVENT_SUBJECT); + $criteria->addSelectColumn(\EmailEventPeer::PRF_UID); + $criteria->addSelectColumn(\EmailEventPeer::EMAIL_SERVER_UID); + $criteria->add(\EmailEventPeer::EMAIL_SERVER_UID, '',\Criteria::EQUAL); return $criteria; } catch (\Exception $e) { @@ -411,19 +433,21 @@ class EmailEvent throw new \Exception(\G::LoadTranslation("ID_EMAIL_EVENT_DEFINITION_DOES_NOT_EXIST")); } $arrayData = $this->existsEvent($prj_uid, $eventUid); - if(sizeof($arrayData)) { + if (sizeof($arrayData)) { + $oEmailServer = new EmailServer(); + $configEmailData = $oEmailServer->getEmailServer($arrayData[7]); $emailGroupTo = array(); $emailTo = ""; $prfUid = $arrayData[6]; $filesManager = new \ProcessMaker\BusinessModel\FilesManager(); $contentFile = $filesManager->getProcessFileManager($prj_uid, $prfUid); - if(strpos($arrayData[4],",")) { - $emailsArray = explode(",",$arrayData[4]); - foreach($emailsArray as $email) { - if(substr($email,0,1) == "@") { - $email = substr($email, 2,strlen($email)); - if(isset($arrayApplicationData['APP_DATA'])) { - if(is_array($arrayApplicationData['APP_DATA']) && isset( $arrayApplicationData['APP_DATA'][$email])) { + if (strpos($arrayData[4], ",")) { + $emailsArray = explode(",", $arrayData[4]); + foreach ($emailsArray as $email) { + if (substr($email, 0, 1) == "@") { + $email = substr($email, 2, strlen($email)); + if (isset($arrayApplicationData['APP_DATA'])) { + if (is_array($arrayApplicationData['APP_DATA']) && isset($arrayApplicationData['APP_DATA'][$email])) { $emailGroupTo[] = $arrayApplicationData['APP_DATA'][$email]; } } @@ -431,13 +455,13 @@ class EmailEvent $emailGroupTo[] = $email; } } - $emailTo = implode(",",array_unique(array_filter($emailGroupTo))); + $emailTo = implode(",", array_unique(array_filter($emailGroupTo))); } else { $email = $arrayData[4]; - if(substr($email,0,1) == "@") { - $email = substr($email, 2,strlen($email)); - if(isset($arrayApplicationData['APP_DATA'])) { - if(is_array($arrayApplicationData['APP_DATA']) && isset( $arrayApplicationData['APP_DATA'][$email])) { + if (substr($email, 0, 1) == "@") { + $email = substr($email, 2, strlen($email)); + if (isset($arrayApplicationData['APP_DATA'])) { + if (is_array($arrayApplicationData['APP_DATA']) && isset($arrayApplicationData['APP_DATA'][$email])) { $emailTo = $arrayApplicationData['APP_DATA'][$email]; } } @@ -445,10 +469,11 @@ class EmailEvent $emailTo = $email; } } - if(!empty($emailTo) && $arrayData[3] != '') { + if (!empty($emailTo) && $arrayData[3] != '') { $subject = $arrayData[5]; $subject = \G::replaceDataField($arrayData[5], $arrayApplicationData['APP_DATA']); - \PMFSendMessage($appUID, $arrayData[3], $emailTo, '', '', $subject, $contentFile['prf_filename'], array()); + \PMFSendMessage($appUID, $configEmailData['MESS_ACCOUNT'], $emailTo, '', '', $subject, + $contentFile['prf_filename'], array(), array(), true, 0, $configEmailData); } else { \Bootstrap::registerMonolog('EmailEventMailError', 200, \G::LoadTranslation('ID_EMAIL_EVENT_CONFIGURATION_EMAIL', array($eventUid, $prj_uid)), ['eventUid' => $eventUid, 'prj_uid' => $prj_uid], SYS_SYS, 'emailEvent.log'); } diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/EmailServer.php b/workflow/engine/src/ProcessMaker/BusinessModel/EmailServer.php index 2b7aa0056..922c01c1e 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/EmailServer.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/EmailServer.php @@ -1217,5 +1217,23 @@ class EmailServer throw $e; } } + + /** + * @param $fromAccount + * @return array + */ + public function getUidEmailServer($fromAccount){ + $criteria = new \Criteria("workflow"); + $criteria->addSelectColumn(\EmailServerPeer::MESS_UID); + $criteria->add( + $criteria->getNewCriterion(\EmailServerPeer::MESS_ACCOUNT, $fromAccount, \Criteria::EQUAL)->addOr( + $criteria->getNewCriterion(\EmailServerPeer::MESS_FROM_MAIL, $fromAccount, \Criteria::EQUAL)) + ); + $criteria->addAsColumn('EMAIL_SERVER_UID', 'MESS_UID'); + $rsCriteria = \EmailServerPeer::doSelectRS($criteria); + $rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + $rsCriteria->next(); + return $rsCriteria->getRow(); + } }