array("type" => "string", "required" => false, "empty" => false, "defaultValues" => array(), "fieldNameAux" => "emailServerUid"), "MESS_ENGINE" => array("type" => "string", "required" => true, "empty" => false, "defaultValues" => array("PHPMAILER", "MAIL"), "fieldNameAux" => "emailServerEngine"), "MESS_SERVER" => array("type" => "string", "required" => false, "empty" => true, "defaultValues" => array(), "fieldNameAux" => "emailServerServer"), "MESS_PORT" => array("type" => "int", "required" => false, "empty" => true, "defaultValues" => array(), "fieldNameAux" => "emailServerPort"), "MESS_RAUTH" => array("type" => "int", "required" => false, "empty" => false, "defaultValues" => array(0, 1), "fieldNameAux" => "emailServerRauth"), "MESS_ACCOUNT" => array("type" => "string", "required" => false, "empty" => true, "defaultValues" => array(), "fieldNameAux" => "emailServerUserName"), "MESS_PASSWORD" => array("type" => "string", "required" => false, "empty" => true, "defaultValues" => array(), "fieldNameAux" => "emailServerPassword"), "MESS_FROM_MAIL" => array("type" => "string", "required" => false, "empty" => true, "defaultValues" => array(), "fieldNameAux" => "emailServerFromMail"), "MESS_FROM_NAME" => array("type" => "string", "required" => false, "empty" => true, "defaultValues" => array(), "fieldNameAux" => "emailServerFromName"), "SMTPSECURE" => array("type" => "string", "required" => false, "empty" => false, "defaultValues" => array("No", "tls", "ssl"), "fieldNameAux" => "emailServerSecureConnection"), "MESS_TRY_SEND_INMEDIATLY" => array("type" => "int", "required" => false, "empty" => false, "defaultValues" => array(0, 1), "fieldNameAux" => "emailServerSendTestMail"), "MAIL_TO" => array("type" => "string", "required" => false, "empty" => true, "defaultValues" => array(), "fieldNameAux" => "emailServerMailTo"), "MESS_DEFAULT" => array("type" => "int", "required" => false, "empty" => false, "defaultValues" => array(0, 1), "fieldNameAux" => "emailServerDefault") ); private $formatFieldNameInUppercase = true; private $arrayFieldNameForException = array( "start" => "START", "limit" => "LIMIT" ); /** * Constructor of the class * * return void */ public function __construct() { try { foreach ($this->arrayFieldDefinition as $key => $value) { $this->arrayFieldNameForException[$value["fieldNameAux"]] = $key; } } catch (\Exception $e) { throw $e; } } /** * Set the format of the fields name (uppercase, lowercase) * * @param bool $flag Value that set the format * * return void */ public function setFormatFieldNameInUppercase($flag) { try { $this->formatFieldNameInUppercase = $flag; $this->setArrayFieldNameForException($this->arrayFieldNameForException); } catch (\Exception $e) { throw $e; } } /** * Set exception messages for fields * * @param array $arrayData Data with the fields * * return void */ public function setArrayFieldNameForException(array $arrayData) { try { foreach ($arrayData as $key => $value) { $this->arrayFieldNameForException[$key] = $this->getFieldNameByFormatFieldName($value); } } catch (\Exception $e) { throw $e; } } /** * Get the name of the field according to the format * * @param string $fieldName Field name * * return string Return the field name according the format */ public function getFieldNameByFormatFieldName($fieldName) { try { return ($this->formatFieldNameInUppercase)? strtoupper($fieldName) : strtolower($fieldName); } catch (\Exception $e) { throw $e; } } /** * Send a test email * * @param array $arrayData Data * * return array Return array with result of send test mail */ public function sendTestMail(array $arrayData) { try { \G::LoadClass("system"); \G::LoadClass("spool"); $aConfiguration = array( "MESS_ENGINE" => $arrayData["MESS_ENGINE"], "MESS_SERVER" => $arrayData["MESS_SERVER"], "MESS_PORT" => (int)($arrayData["MESS_PORT"]), "MESS_ACCOUNT" => $arrayData["MESS_ACCOUNT"], "MESS_PASSWORD" => $arrayData["MESS_PASSWORD"], "MESS_FROM_NAME" => $arrayData["FROM_NAME"], "MESS_FROM_MAIL" => $arrayData["FROM_EMAIL"], "MESS_RAUTH" => (int)($arrayData["MESS_RAUTH"]), "SMTPSecure" => (isset($arrayData["SMTPSecure"]))? $arrayData["SMTPSecure"] : "none" ); $sFrom = \G::buildFrom($aConfiguration); $sSubject = \G::LoadTranslation("ID_MESS_TEST_SUBJECT"); $msg = \G::LoadTranslation("ID_MESS_TEST_BODY"); switch ($arrayData["MESS_ENGINE"]) { case "MAIL": $engine = \G::LoadTranslation("ID_MESS_ENGINE_TYPE_1"); break; case "PHPMAILER": $engine = \G::LoadTranslation("ID_MESS_ENGINE_TYPE_2"); break; case "OPENMAIL": $engine = \G::LoadTranslation("ID_MESS_ENGINE_TYPE_3"); break; } $sBodyPre = new \TemplatePower(PATH_TPL . "admin" . PATH_SEP . "email.tpl"); $sBodyPre->prepare(); $sBodyPre->assign("server", $_SERVER["SERVER_NAME"]); $sBodyPre->assign("date", date("H:i:s")); $sBodyPre->assign("ver", \System::getVersion()); $sBodyPre->assign("engine", $engine); $sBodyPre->assign("msg", $msg); $sBody = $sBodyPre->getOutputContent(); $oSpool = new \spoolRun(); $oSpool->setConfig($aConfiguration); $oSpool->create( array( "msg_uid" => "", "app_uid" => "", "del_index" => 0, "app_msg_type" => "TEST", "app_msg_subject" => $sSubject, "app_msg_from" => $sFrom, "app_msg_to" => $arrayData["TO"], "app_msg_body" => $sBody, "app_msg_cc" => "", "app_msg_bcc" => "", "app_msg_attach" => "", "app_msg_template" => "", "app_msg_status" => "pending", "app_msg_attach" => "" ) ); $oSpool->sendMail(); //Return $arrayTestMailResult = array(); if ($oSpool->status == "sent") { $arrayTestMailResult["status"] = true; $arrayTestMailResult["success"] = true; $arrayTestMailResult["msg"] = \G::LoadTranslation("ID_MAIL_TEST_SUCCESS"); } else { $arrayTestMailResult["status"] = false; $arrayTestMailResult["success"] = false; $arrayTestMailResult["msg"] = $oSpool->error; } return $arrayTestMailResult; } catch (\Exception $e) { throw $e; } } /** * Test connection by step * * @param array $arrayData Data * @param int $step Step * * return array Return array with result of test connection by step */ public function testConnectionByStep(array $arrayData, $step = 0) { try { \G::LoadClass("net"); \G::LoadThirdParty("phpmailer", "class.smtp"); //MAIL if ($arrayData["MESS_ENGINE"] == "MAIL") { $arrayDataMail = array(); $eregMail = "/^[0-9a-zA-Z]+(?:[._][0-9a-zA-Z]+)*@[0-9a-zA-Z]+(?:[._-][0-9a-zA-Z]+)*\.[0-9a-zA-Z]{2,3}$/"; $arrayDataMail["FROM_EMAIL"] = ($arrayData["MESS_FROM_MAIL"] != "" && preg_match($eregMail, $arrayData["MESS_FROM_MAIL"]))? $arrayData["MESS_FROM_MAIL"] : ""; $arrayDataMail["FROM_NAME"] = ($arrayData["MESS_FROM_NAME"] != "")? $arrayData["MESS_FROM_NAME"] : \G::LoadTranslation("ID_MESS_TEST_BODY"); $arrayDataMail["MESS_ENGINE"] = "MAIL"; $arrayDataMail["MESS_SERVER"] = "localhost"; $arrayDataMail["MESS_PORT"] = 25; $arrayDataMail["MESS_ACCOUNT"] = $arrayData["MAIL_TO"]; $arrayDataMail["MESS_PASSWORD"] = ""; $arrayDataMail["TO"] = $arrayData["MAIL_TO"]; $arrayDataMail["MESS_RAUTH"] = true; $arrayTestMailResult = array(); try { $arrayTestMailResult = $this->sendTestMail($arrayDataMail); } catch (Exception $error) { $arrayTestMailResult["status"] = false; $arrayTestMailResult["message"] = $e->getMessage(); } $arrayResult = array( "result" => $arrayTestMailResult["status"], "message" => "" ); if ($arrayTestMailResult["status"] == false) { $arrayResult["message"] = \G::LoadTranslation("ID_SENDMAIL_NOT_INSTALLED"); } //Return return $arrayResult; } //PHPMAILER $server = $arrayData["MESS_SERVER"]; $user = $arrayData["MESS_ACCOUNT"]; $passwd = $arrayData["MESS_PASSWORD"]; $fromMail = $arrayData["MESS_FROM_MAIL"]; $passwdHide = $arrayData["MESS_PASSWORD"]; if (trim($passwdHide) != "") { $passwd = $passwdHide; $passwdHide = ""; } $passwdDec = \G::decrypt($passwd,"EMAILENCRYPT"); $auxPass = explode("hash:", $passwdDec); if (count($auxPass) > 1) { if (count($auxPass) == 2) { $passwd = $auxPass[1]; } else { array_shift($auxPass); $passwd = implode("", $auxPass); } } $arrayData["MESS_PASSWORD"] = $passwd; $port = (int)($arrayData["MESS_PORT"]); $auth_required = (int)($arrayData["MESS_RAUTH"]); $useSecureCon = $arrayData["SMTPSECURE"]; $sendTestMail = (int)($arrayData["MESS_TRY_SEND_INMEDIATLY"]); $mailTo = $arrayData["MAIL_TO"]; $smtpSecure = $arrayData["SMTPSECURE"]; $serverNet = new \NET($server); $smtp = new \SMTP(); $timeout = 10; $hostinfo = array(); $srv = $arrayData["MESS_SERVER"]; $arrayResult = array(); switch ($step) { case 1: $arrayResult["result"] = $serverNet->getErrno() == 0; $arrayResult["message"] = $serverNet->error; break; case 2: $serverNet->scannPort($port); $arrayResult["result"] = $serverNet->getErrno() == 0; $arrayResult["message"] = $serverNet->error; break; case 3: //Try to connect to host if (preg_match("/^(.+):([0-9]+)$/", $srv, $hostinfo)) { $server = $hostinfo[1]; $port = $hostinfo[2]; } else { $host = $srv; } $tls = (strtoupper($smtpSecure) == "tls"); $ssl = (strtoupper($smtpSecure) == "ssl"); $arrayResult["result"] = $smtp->Connect(($ssl ? "ssl://" : "") . $server, $port, $timeout); $arrayResult["message"] = $serverNet->error; break; case 4: //Try login to host if ($auth_required == 1) { try { if (preg_match("/^(.+):([0-9]+)$/", $srv, $hostinfo)) { $server = $hostinfo[1]; $port = $hostinfo[2]; } else { $server = $srv; } if (strtoupper($useSecureCon)=="TLS") { $tls = "tls"; } if (strtoupper($useSecureCon)=="SSL") { $tls = "ssl"; } $tls = (strtoupper($useSecureCon) == "tls"); $ssl = (strtoupper($useSecureCon) == "ssl"); $server = $arrayData["MESS_SERVER"]; if (strtoupper($useSecureCon) == "SSL") { $resp = $smtp->Connect(("ssl://") . $server, $port, $timeout); } else { $resp = $smtp->Connect($server, $port, $timeout); } if ($resp) { $hello = $_SERVER["SERVER_NAME"]; $smtp->Hello($hello); if (strtoupper($useSecureCon) == "TLS") { $smtp->Hello($hello); } if ($smtp->Authenticate($user, $passwd) ) { $arrayResult["result"] = true; } else { if (strtoupper($useSecureCon) == "TLS") { $arrayResult["result"] = true; } else { $arrayResult["result"] = false; $smtpError = $smtp->getError(); $arrayResult["message"] = $smtpError["error"]; } } } else { $arrayResult["result"] = false; $smtpError = $smtp->getError(); $arrayResult["message"] = $smtpError["error"]; } } catch (Exception $e) { $arrayResult["result"] = false; $arrayResult["message"] = $e->getMessage(); } } else { $arrayResult["result"] = true; $arrayResult["message"] = "No authentication required!"; } break; case 5: if ($sendTestMail == 1) { try { $arrayDataPhpMailer = array(); $eregMail = "/^[0-9a-zA-Z]+(?:[._][0-9a-zA-Z]+)*@[0-9a-zA-Z]+(?:[._-][0-9a-zA-Z]+)*\.[0-9a-zA-Z]{2,3}$/"; $arrayDataPhpMailer["FROM_EMAIL"] = ($fromMail != "" && preg_match($eregMail, $fromMail))? $fromMail : ""; $arrayDataPhpMailer["FROM_NAME"] = $arrayData["MESS_FROM_NAME"] != "" ? $arrayData["MESS_FROM_NAME"] : \G::LoadTranslation("ID_MESS_TEST_BODY"); $arrayDataPhpMailer["MESS_ENGINE"] = "PHPMAILER"; $arrayDataPhpMailer["MESS_SERVER"] = $server; $arrayDataPhpMailer["MESS_PORT"] = $port; $arrayDataPhpMailer["MESS_ACCOUNT"] = $user; $arrayDataPhpMailer["MESS_PASSWORD"] = $passwd; $arrayDataPhpMailer["TO"] = $mailTo; if ($auth_required == 1) { $arrayDataPhpMailer["MESS_RAUTH"] = true; } else { $arrayDataPhpMailer["MESS_RAUTH"] = false; } if (strtolower($arrayData["SMTPSECURE"]) != "no") { $arrayDataPhpMailer["SMTPSecure"] = $arrayData["SMTPSECURE"]; } $arrayTestMailResult = $this->sendTestMail($arrayDataPhpMailer); if ($arrayTestMailResult["status"] . "" == "1") { $arrayResult["result"] = true; } else { $arrayResult["result"] = false; $smtpError = $smtp->getError(); $arrayResult["message"] = $smtpError["error"]; } } catch (Exception $e) { $arrayResult["result"] = false; $arrayResult["message"] = $e->getMessage(); } } else { $arrayResult["result"] = true; $arrayResult["message"] = "Jump this step"; } break; } if (!isset($arrayResult["message"])) { $arrayResult["message"] = ""; } //Return return $arrayResult; } catch (\Exception $e) { $arrayResult = array(); $arrayResult["result"] = false; $arrayResult["message"] = $e->getMessage(); //Return return $arrayResult; } } /** * Test connection * * @param array $arrayData Data * * return array Return array with result of test connection */ public function testConnection(array $arrayData) { try { $arrayData = array_change_key_case($arrayData, CASE_UPPER); $arrayMailTestName = array( 1 => "verifying_mail", 2 => "sending_email" ); $arrayPhpMailerTestName = array( 1 => "resolving_name", 2 => "check_port", 3 => "establishing_connection_host", 4 => "login", 5 => "sending_email" ); $arrayResult = array(); switch ($arrayData["MESS_ENGINE"]) { case "MAIL": $arrayDataAux = $arrayData; $arrayDataAux["MESS_TRY_SEND_INMEDIATLY"] = 1; $arrayDataAux["MAIL_TO"] = "admin@processmaker.com"; $arrayResult[$arrayMailTestName[1]] = $this->testConnectionByStep($arrayDataAux); $arrayResult[$arrayMailTestName[1]]["title"] = \G::LoadTranslation("ID_EMAIL_SERVER_TEST_CONNECTION_VERIFYING_MAIL"); if ((int)($arrayData["MESS_TRY_SEND_INMEDIATLY"]) == 1) { $arrayResult[$arrayMailTestName[2]] = $this->testConnectionByStep($arrayData); $arrayResult[$arrayMailTestName[2]]["title"] = \G::LoadTranslation("ID_EMAIL_SERVER_TEST_CONNECTION_SENDING_EMAIL", array($arrayData["MAIL_TO"])); } break; case "PHPMAILER": for ($step = 1; $step <= 5; $step++) { $arrayResult[$arrayPhpMailerTestName[$step]] = $this->testConnectionByStep($arrayData, $step); switch ($step) { case 1: $arrayResult[$arrayPhpMailerTestName[$step]]["title"] = \G::LoadTranslation("ID_EMAIL_SERVER_TEST_CONNECTION_RESOLVING_NAME", array($arrayData["MESS_SERVER"])); break; case 2: $arrayResult[$arrayPhpMailerTestName[$step]]["title"] = \G::LoadTranslation("ID_EMAIL_SERVER_TEST_CONNECTION_CHECK_PORT", array($arrayData["MESS_PORT"])); break; case 3: $arrayResult[$arrayPhpMailerTestName[$step]]["title"] = \G::LoadTranslation("ID_EMAIL_SERVER_TEST_CONNECTION_ESTABLISHING_CON_HOST", array($arrayData["MESS_SERVER"] . ":" . $arrayData["MESS_PORT"])); break; case 4: $arrayResult[$arrayPhpMailerTestName[$step]]["title"] = \G::LoadTranslation("ID_EMAIL_SERVER_TEST_CONNECTION_LOGIN", array($arrayData["MESS_ACCOUNT"], $arrayData["MESS_SERVER"])); break; case 5: $arrayResult[$arrayPhpMailerTestName[$step]]["title"] = \G::LoadTranslation("ID_EMAIL_SERVER_TEST_CONNECTION_SENDING_EMAIL", array($arrayData["MAIL_TO"])); break; } } break; } //Result return $arrayResult; } catch (\Exception $e) { throw $e; } } /** * Check if is default Email Server * * @param string $emailServerUid Unique id of Email Server * * return bool Return true if is default Email Server, false otherwise */ public function checkIfIsDefault($emailServerUid) { try { $criteria = $this->getEmailServerCriteria(); $criteria->add(\EmailServerPeer::MESS_UID, $emailServerUid, \Criteria::EQUAL); $criteria->add(\EmailServerPeer::MESS_DEFAULT, 1, \Criteria::EQUAL); $rsCriteria = \EmailServerPeer::doSelectRS($criteria); if ($rsCriteria->next()) { return true; } else { return false; } } catch (\Exception $e) { throw $e; } } /** * Validate the data if they are invalid (INSERT and UPDATE) * * @param string $emailServerUid Unique id of Email Server * @param array $arrayData Data * * return void Throw exception if data has an invalid value */ public function throwExceptionIfDataIsInvalid($emailServerUid, array $arrayData) { try { //Set variables $arrayEmailServerData = ($emailServerUid == "")? array() : $this->getEmailServer($emailServerUid, true); $flagInsert = ($emailServerUid == "")? true : false; $arrayFinalData = array_merge($arrayEmailServerData, $arrayData); //Verify data $process = new \ProcessMaker\BusinessModel\Process(); $arrayFieldDefinition = $this->arrayFieldDefinition; switch ($arrayFinalData["MESS_ENGINE"]) { case "PHPMAILER": $arrayFieldDefinition["MESS_SERVER"]["required"] = true; $arrayFieldDefinition["MESS_SERVER"]["empty"] = false; $arrayFieldDefinition["MESS_PORT"]["required"] = true; $arrayFieldDefinition["MESS_PORT"]["empty"] = false; $arrayFieldDefinition["MESS_ACCOUNT"]["required"] = true; $arrayFieldDefinition["MESS_ACCOUNT"]["empty"] = false; $arrayFieldDefinition["SMTPSECURE"]["required"] = true; $arrayFieldDefinition["SMTPSECURE"]["empty"] = false; if ((int)($arrayFinalData["MESS_RAUTH"]) == 1) { $arrayFieldDefinition["MESS_PASSWORD"]["required"] = true; $arrayFieldDefinition["MESS_PASSWORD"]["empty"] = false; } break; case "MAIL": $arrayFieldDefinition["SMTPSECURE"]["empty"] = true; $arrayFieldDefinition["SMTPSECURE"]["defaultValues"] = array(); break; } if ((int)($arrayFinalData["MESS_TRY_SEND_INMEDIATLY"]) == 1) { $arrayFieldDefinition["MAIL_TO"]["required"] = true; $arrayFieldDefinition["MAIL_TO"]["empty"] = false; } $process->throwExceptionIfDataNotMetFieldDefinition($arrayData, $arrayFieldDefinition, $this->arrayFieldNameForException, $flagInsert); if ($flagInsert == false) { //Update $process->throwExceptionIfDataNotMetFieldDefinition($arrayFinalData, $arrayFieldDefinition, $this->arrayFieldNameForException, true); } //Verify data Test Connection if (isset($_SERVER["SERVER_NAME"])) { $arrayTestConnectionResult = $this->testConnection($arrayFinalData); $msg = ""; foreach ($arrayTestConnectionResult as $key => $value) { $arrayTest = $value; if (!$arrayTest["result"]) { $msg = $msg . (($msg != "")? ", " : "") . $arrayTest["title"] . " (Error: " . $arrayTest["message"] . ")"; } } if ($msg != "") { throw new \Exception($msg); } } } catch (\Exception $e) { throw $e; } } /** * Verify if does not exist the Email Server in table EMAIL_SERVER * * @param string $emailServerUid Unique id of Email Server * @param string $fieldNameForException Field name for the exception * * return void Throw exception if does not exist the Email Server in table EMAIL_SERVER */ public function throwExceptionIfNotExistsEmailServer($emailServerUid, $fieldNameForException) { try { $obj = \EmailServerPeer::retrieveByPK($emailServerUid); if (is_null($obj)) { throw new \Exception(\G::LoadTranslation("ID_EMAIL_SERVER_DOES_NOT_EXIST", array($fieldNameForException, $emailServerUid))); } } catch (\Exception $e) { throw $e; } } /** * Check if is default Email Server * * @param string $emailServerUid Unique id of Email Server * @param string $fieldNameForException Field name for the exception * * return void Throw exception if is default Email Server */ public function throwExceptionIfIsDefault($emailServerUid, $fieldNameForException) { try { if ($this->checkIfIsDefault($emailServerUid)) { throw new \Exception(\G::LoadTranslation("ID_EMAIL_SERVER_IS_DEFAULT", array($fieldNameForException, $emailServerUid))); } } catch (\Exception $e) { throw $e; } } /** * Set default Email Server by Unique id of Email Server * * @param string $emailServerUid Unique id of Email Server * * return void */ public function setEmailServerDefaultByUid($emailServerUid) { try { $arrayEmailServerData = $this->getEmailServer($emailServerUid, true); //Update //Update - WHERE $criteriaWhere = new \Criteria("workflow"); $criteriaWhere->add(\EmailServerPeer::MESS_UID, $emailServerUid, \Criteria::NOT_EQUAL); //Update $criteriaSet = new \Criteria("workflow"); $criteriaSet->add(\EmailServerPeer::MESS_DEFAULT, 0); \BasePeer::doUpdate($criteriaWhere, $criteriaSet, \Propel::getConnection("workflow")); if ((int)($arrayEmailServerData["MESS_DEFAULT"]) == 0) { //Update //Update - WHERE $criteriaWhere = new \Criteria("workflow"); $criteriaWhere->add(\EmailServerPeer::MESS_UID, $emailServerUid, \Criteria::NOT_EQUAL); //Update $criteriaSet = new \Criteria("workflow"); $criteriaSet->add(\EmailServerPeer::MESS_DEFAULT, 1); \BasePeer::doUpdate($criteriaWhere, $criteriaSet, \Propel::getConnection("workflow")); } } catch (Exception $e) { throw $e; } } /** * Create Email Server * * @param array $arrayData Data * * return array Return data of the new Email Server created */ public function create(array $arrayData) { try { //Verify data $process = new \ProcessMaker\BusinessModel\Process(); $validator = new \ProcessMaker\BusinessModel\Validator(); $validator->throwExceptionIfDataIsNotArray($arrayData, "\$arrayData"); $validator->throwExceptionIfDataIsEmpty($arrayData, "\$arrayData"); //Set data $arrayData = array_change_key_case($arrayData, CASE_UPPER); unset($arrayData["MESS_UID"]); $this->throwExceptionIfDataIsInvalid("", $arrayData); //Create $cnn = \Propel::getConnection("workflow"); try { $emailServer = new \EmailServer(); $passwd = $arrayData["MESS_PASSWORD"]; $passwdDec = \G::decrypt($passwd, "EMAILENCRYPT"); $auxPass = explode("hash:", $passwdDec); if (count($auxPass) > 1) { if (count($auxPass) == 2) { $passwd = $auxPass[1]; } else { array_shift($auxPass); $passwd = implode("", $auxPass); } } $arrayData["MESS_PASSWORD"] = $passwd; if ($arrayData["MESS_PASSWORD"] != "") { $arrayData["MESS_PASSWORD"] = "hash:" . $arrayData["MESS_PASSWORD"]; $arrayData["MESS_PASSWORD"] = \G::encrypt($arrayData["MESS_PASSWORD"], "EMAILENCRYPT"); } $emailServer->fromArray($arrayData, \BasePeer::TYPE_FIELDNAME); $emailServerUid = \ProcessMaker\Util\Common::generateUID(); $emailServer->setMessUid($emailServerUid); if ($emailServer->validate()) { $cnn->begin(); $result = $emailServer->save(); $cnn->commit(); if (isset($arrayData["MESS_DEFAULT"]) && (int)($arrayData["MESS_DEFAULT"]) == 1) { $this->setEmailServerDefaultByUid($emailServerUid); } //Return return $this->getEmailServer($emailServerUid); } else { $msg = ""; foreach ($emailServer->getValidationFailures() as $validationFailure) { $msg = $msg . (($msg != "")? "\n" : "") . $validationFailure->getMessage(); } throw new \Exception(\G::LoadTranslation("ID_RECORD_CANNOT_BE_CREATED") . (($msg != "")? "\n" . $msg : "")); } } catch (\Exception $e) { $cnn->rollback(); throw $e; } } catch (\Exception $e) { throw $e; } } /** * Create Email Server by data * * @param array $arrayData Data * * return array Return data of the new Email Server created */ public function create2(array $arrayData) { try { //Create $cnn = \Propel::getConnection("workflow"); try { $emailServer = new \EmailServer(); $emailServer->fromArray($arrayData, \BasePeer::TYPE_FIELDNAME); $emailServerUid = \ProcessMaker\Util\Common::generateUID(); $emailServer->setMessUid($emailServerUid); if ($emailServer->validate()) { $cnn->begin(); $result = $emailServer->save(); $cnn->commit(); if (isset($arrayData["MESS_DEFAULT"]) && (int)($arrayData["MESS_DEFAULT"]) == 1) { $this->setEmailServerDefaultByUid($emailServerUid); } //Return return $this->getEmailServer($emailServerUid); } else { $msg = ""; foreach ($emailServer->getValidationFailures() as $validationFailure) { $msg = $msg . (($msg != "")? "\n" : "") . $validationFailure->getMessage(); } throw new \Exception(\G::LoadTranslation("ID_RECORD_CANNOT_BE_CREATED") . (($msg != "")? "\n" . $msg : "")); } } catch (\Exception $e) { $cnn->rollback(); throw $e; } } catch (\Exception $e) { throw $e; } } /** * Update Email Server * * @param string $emailServerUid Unique id of Group * @param array $arrayData Data * * return array Return data of the Email Server updated */ public function update($emailServerUid, $arrayData) { try { //Verify data $process = new \ProcessMaker\BusinessModel\Process(); $validator = new \ProcessMaker\BusinessModel\Validator(); $validator->throwExceptionIfDataIsNotArray($arrayData, "\$arrayData"); $validator->throwExceptionIfDataIsEmpty($arrayData, "\$arrayData"); //Set data $arrayData = array_change_key_case($arrayData, CASE_UPPER); //Verify data $this->throwExceptionIfNotExistsEmailServer($emailServerUid, $this->arrayFieldNameForException["emailServerUid"]); $this->throwExceptionIfDataIsInvalid($emailServerUid, $arrayData); //Update $cnn = \Propel::getConnection("workflow"); try { $emailServer = \EmailServerPeer::retrieveByPK($emailServerUid); $passwd = $arrayData["MESS_PASSWORD"]; $passwdDec = \G::decrypt($passwd, "EMAILENCRYPT"); $auxPass = explode("hash:", $passwdDec); if (count($auxPass) > 1) { if (count($auxPass) == 2) { $passwd = $auxPass[1]; } else { array_shift($auxPass); $passwd = implode("", $auxPass); } } $arrayData["MESS_PASSWORD"] = $passwd; if ($arrayData["MESS_PASSWORD"] != "") { $arrayData["MESS_PASSWORD"] = "hash:" . $arrayData["MESS_PASSWORD"]; $arrayData["MESS_PASSWORD"] = \G::encrypt($arrayData["MESS_PASSWORD"], "EMAILENCRYPT"); } $emailServer->fromArray($arrayData, \BasePeer::TYPE_FIELDNAME); if ($emailServer->validate()) { $cnn->begin(); $result = $emailServer->save(); $cnn->commit(); if (isset($arrayData["MESS_DEFAULT"]) && (int)($arrayData["MESS_DEFAULT"]) == 1) { $this->setEmailServerDefaultByUid($emailServerUid); } //Return if (!$this->formatFieldNameInUppercase) { $arrayData = array_change_key_case($arrayData, CASE_LOWER); } return $arrayData; } else { $msg = ""; foreach ($emailServer->getValidationFailures() as $validationFailure) { $msg = $msg . (($msg != "")? "\n" : "") . $validationFailure->getMessage(); } throw new \Exception(\G::LoadTranslation("ID_RECORD_CANNOT_BE_CREATED") . (($msg != "")? "\n" . $msg : "")); } } catch (\Exception $e) { $cnn->rollback(); throw $e; } } catch (\Exception $e) { throw $e; } } /** * Delete Email Server * * @param string $emailServerUid Unique id of Email Server * * return void */ public function delete($emailServerUid) { try { //Verify data $this->throwExceptionIfNotExistsEmailServer($emailServerUid, $this->arrayFieldNameForException["emailServerUid"]); $this->throwExceptionIfIsDefault($emailServerUid, $this->arrayFieldNameForException["emailServerUid"]); $criteria = $this->getEmailServerCriteria(); $criteria->add(\EmailServerPeer::MESS_UID, $emailServerUid, \Criteria::EQUAL); \EmailServerPeer::doDelete($criteria); } catch (\Exception $e) { throw $e; } } /** * Get criteria for Email Server * * return object */ public function getEmailServerCriteria() { try { $criteria = new \Criteria("workflow"); $criteria->addSelectColumn(\EmailServerPeer::MESS_UID); $criteria->addSelectColumn(\EmailServerPeer::MESS_ENGINE); $criteria->addSelectColumn(\EmailServerPeer::MESS_SERVER); $criteria->addSelectColumn(\EmailServerPeer::MESS_PORT); $criteria->addSelectColumn(\EmailServerPeer::MESS_RAUTH); $criteria->addSelectColumn(\EmailServerPeer::MESS_ACCOUNT); $criteria->addSelectColumn(\EmailServerPeer::MESS_PASSWORD); $criteria->addSelectColumn(\EmailServerPeer::MESS_FROM_MAIL); $criteria->addSelectColumn(\EmailServerPeer::MESS_FROM_NAME); $criteria->addSelectColumn(\EmailServerPeer::SMTPSECURE); $criteria->addSelectColumn(\EmailServerPeer::MESS_TRY_SEND_INMEDIATLY); $criteria->addSelectColumn(\EmailServerPeer::MAIL_TO); $criteria->addSelectColumn(\EmailServerPeer::MESS_DEFAULT); return $criteria; } catch (\Exception $e) { throw $e; } } /** * Get data of a from a record * * @param array $record Record * * return array Return an array with data Email Server */ public function getEmailServerDataFromRecord(array $record) { try { return array( $this->getFieldNameByFormatFieldName("MESS_UID") => $record["MESS_UID"], $this->getFieldNameByFormatFieldName("MESS_ENGINE") => $record["MESS_ENGINE"], $this->getFieldNameByFormatFieldName("MESS_SERVER") => $record["MESS_SERVER"], $this->getFieldNameByFormatFieldName("MESS_PORT") => $record["MESS_PORT"], $this->getFieldNameByFormatFieldName("MESS_RAUTH") => $record["MESS_RAUTH"], $this->getFieldNameByFormatFieldName("MESS_ACCOUNT") => $record["MESS_ACCOUNT"], $this->getFieldNameByFormatFieldName("MESS_PASSWORD") => $record["MESS_PASSWORD"], $this->getFieldNameByFormatFieldName("MESS_FROM_MAIL") => $record["MESS_FROM_MAIL"], $this->getFieldNameByFormatFieldName("MESS_FROM_NAME") => $record["MESS_FROM_NAME"], $this->getFieldNameByFormatFieldName("SMTPSECURE") => $record["SMTPSECURE"], $this->getFieldNameByFormatFieldName("MESS_TRY_SEND_INMEDIATLY") => $record["MESS_TRY_SEND_INMEDIATLY"], $this->getFieldNameByFormatFieldName("MAIL_TO") => $record["MAIL_TO"], $this->getFieldNameByFormatFieldName("MESS_DEFAULT") => $record["MESS_DEFAULT"] ); } catch (\Exception $e) { throw $e; } } /** * Get Default Email Server * * return array Return an array with Email Server default */ public function getEmailServerDefault() { try { $arrayData = array(); //SQL $criteria = $this->getEmailServerCriteria(); $criteria->add(\EmailServerPeer::MESS_DEFAULT, 1, \Criteria::EQUAL); //QUERY $rsCriteria = \EmailServerPeer::doSelectRS($criteria); $rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC); while ($rsCriteria->next()) { $row = $rsCriteria->getRow(); $arrayData["MESS_ENGINE"] = $row["MESS_ENGINE"]; $arrayData["MESS_SERVER"] = $row["MESS_SERVER"]; $arrayData["MESS_PORT"] = (int)($row["MESS_PORT"]); $arrayData["MESS_RAUTH"] = (int)($row["MESS_RAUTH"]); $arrayData["MESS_ACCOUNT"] = $row["MESS_ACCOUNT"]; $arrayData["MESS_PASSWORD"] = $row["MESS_PASSWORD"]; $arrayData["MESS_FROM_MAIL"] = $row["MESS_FROM_MAIL"]; $arrayData["MESS_FROM_NAME"] = $row["MESS_FROM_NAME"]; $arrayData["SMTPSECURE"] = $row["SMTPSECURE"]; $arrayData["MESS_TRY_SEND_INMEDIATLY"] = (int)($row["MESS_TRY_SEND_INMEDIATLY"]); $arrayData["MAIL_TO"] = $row["MAIL_TO"]; $arrayData["MESS_DEFAULT"] = (int)($row["MESS_DEFAULT"]); } //Return return $arrayData; } catch (\Exception $e) { throw $e; } } /** * Get all Email Servers * * @param array $arrayFilterData Data of the filters * @param string $sortField Field name to sort * @param string $sortDir Direction of sorting (ASC, DESC) * @param int $start Start * @param int $limit Limit * * return array Return an array with all Email Servers */ public function getEmailServers($arrayFilterData = null, $sortField = null, $sortDir = null, $start = null, $limit = null) { try { $arrayEmailServer = array(); //Verify data $process = new \ProcessMaker\BusinessModel\Process(); $process->throwExceptionIfDataNotMetPagerVarDefinition(array("start" => $start, "limit" => $limit), $this->arrayFieldNameForException); //Get data if (!is_null($limit) && $limit . "" == "0") { return $arrayEmailServer; } //SQL $criteria = $this->getEmailServerCriteria(); if (!is_null($arrayFilterData) && is_array($arrayFilterData) && isset($arrayFilterData["filter"]) && trim($arrayFilterData["filter"]) != "") { $criteria->add( $criteria->getNewCriterion(\EmailServerPeer::MESS_ENGINE, "%" . $arrayFilterData["filter"] . "%", \Criteria::LIKE)->addOr( $criteria->getNewCriterion(\EmailServerPeer::MESS_SERVER, "%" . $arrayFilterData["filter"] . "%", \Criteria::LIKE))->addOr( $criteria->getNewCriterion(\EmailServerPeer::MESS_ACCOUNT, "%" . $arrayFilterData["filter"] . "%", \Criteria::LIKE))->addOr( $criteria->getNewCriterion(\EmailServerPeer::MESS_FROM_NAME, "%" . $arrayFilterData["filter"] . "%", \Criteria::LIKE))->addOr( $criteria->getNewCriterion(\EmailServerPeer::SMTPSECURE, "%" . $arrayFilterData["filter"] . "%", \Criteria::LIKE)) ); } //Number records total $criteriaCount = clone $criteria; $criteriaCount->clearSelectColumns(); $criteriaCount->addSelectColumn("COUNT(" . \EmailServerPeer::MESS_UID . ") AS NUM_REC"); $rsCriteriaCount = \EmailServerPeer::doSelectRS($criteriaCount); $rsCriteriaCount->setFetchmode(\ResultSet::FETCHMODE_ASSOC); $rsCriteriaCount->next(); $row = $rsCriteriaCount->getRow(); $numRecTotal = $row["NUM_REC"]; //SQL if (!is_null($sortField) && trim($sortField) != "") { $sortField = strtoupper($sortField); if (in_array($sortField, array("MESS_ENGINE", "MESS_SERVER", "MESS_ACCOUNT", "MESS_FROM_NAME", "SMTPSECURE"))) { $sortField = \EmailServerPeer::TABLE_NAME . "." . $sortField; } else { $sortField = \EmailServerPeer::MESS_ENGINE; } } else { $sortField = \EmailServerPeer::MESS_ENGINE; } if (!is_null($sortDir) && trim($sortDir) != "" && strtoupper($sortDir) == "DESC") { $criteria->addDescendingOrderByColumn($sortField); } else { $criteria->addAscendingOrderByColumn($sortField); } if (!is_null($start)) { $criteria->setOffset((int)($start)); } if (!is_null($limit)) { $criteria->setLimit((int)($limit)); } $rsCriteria = \EmailServerPeer::doSelectRS($criteria); $rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC); while ($rsCriteria->next()) { $row = $rsCriteria->getRow(); $passwd = $row["MESS_PASSWORD"]; $passwdDec = \G::decrypt($passwd, "EMAILENCRYPT"); $auxPass = explode("hash:", $passwdDec); if (count($auxPass) > 1) { if (count($auxPass) == 2) { $passwd = $auxPass[1]; } else { array_shift($auxPass); $passwd = implode("", $auxPass); } } $row["MESS_PASSWORD"] = $passwd; $arrayEmailServer[] = $this->getEmailServerDataFromRecord($row); } //Return return array( "total" => $numRecTotal, "start" => (int)((!is_null($start))? $start : 0), "limit" => (int)((!is_null($limit))? $limit : 0), "filter" => (!is_null($arrayFilterData) && is_array($arrayFilterData) && isset($arrayFilterData["filter"]))? $arrayFilterData["filter"] : "", "data" => $arrayEmailServer ); } catch (\Exception $e) { throw $e; } } /** * Get data of a Email Server * * @param string $emailServerUid Unique id of Email Server * @param bool $flagGetRecord Value that set the getting * * return array Return an array with data of a Email Server */ public function getEmailServer($emailServerUid, $flagGetRecord = false) { try { //Verify data $this->throwExceptionIfNotExistsEmailServer($emailServerUid, $this->arrayFieldNameForException["emailServerUid"]); //Get data //SQL $criteria = $this->getEmailServerCriteria(); $criteria->add(\EmailServerPeer::MESS_UID, $emailServerUid, \Criteria::EQUAL); $rsCriteria = \EmailServerPeer::doSelectRS($criteria); $rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC); $rsCriteria->next(); $row = $rsCriteria->getRow(); $row["MESS_PORT"] = (int)($row["MESS_PORT"]); $row["MESS_RAUTH"] = (int)($row["MESS_RAUTH"]); $row["MESS_TRY_SEND_INMEDIATLY"] = (int)($row["MESS_TRY_SEND_INMEDIATLY"]); $row["MESS_DEFAULT"] = (int)($row["MESS_DEFAULT"]); //Return return (!$flagGetRecord)? $this->getEmailServerDataFromRecord($row) : $row; } catch (\Exception $e) { throw $e; } } }