loadByUserEmailInArray($usr_gmail); //getting the skin require_once (PATH_HOME . "engine" . PATH_SEP . "classes" . PATH_SEP . "class.system.php"); $sysConf = new \System(); $responseSysConfig = $sysConf->getSystemConfiguration( PATH_CONFIG . 'env.ini' ); $response['enviroment'] = $responseSysConfig['default_skin']; return $response; } /** * Get Application data by appUid * * @param string $app_uid Unique id of the app * @param string $index * * return row app_cache_view * */ public function getDraftApp($app_uid, $index=1) { $c = new \Criteria( 'workflow' ); $c->clearSelectColumns(); $c->addSelectColumn( \AppCacheViewPeer::APP_NUMBER ); $c->addSelectColumn( \AppCacheViewPeer::APP_STATUS ); $c->addSelectColumn( \AppCacheViewPeer::DEL_INDEX ); $c->addSelectColumn( \AppCacheViewPeer::APP_DEL_PREVIOUS_USER ); $c->addSelectColumn( \AppCacheViewPeer::DEL_DELEGATE_DATE ); $c->addSelectColumn( \AppCacheViewPeer::USR_UID ); $c->addSelectColumn( \AppCacheViewPeer::PRO_UID ); $c->addSelectColumn( \AppCacheViewPeer::APP_PRO_TITLE ); $c->addSelectColumn( \AppCacheViewPeer::APP_TAS_TITLE ); $c->addSelectColumn( \AppCacheViewPeer::DEL_THREAD_STATUS ); $c->addSelectColumn( \AppCacheViewPeer::TAS_UID ); $c->addSelectColumn( \AppCacheViewPeer::DEL_LAST_INDEX ); $c->addSelectColumn( \AppCacheViewPeer::APP_UID ); $c->add( \AppCacheViewPeer::APP_UID, $app_uid ); $c->add( \AppCacheViewPeer::DEL_INDEX, $index ); $rs = \AppCacheViewPeer::doSelectRS( $c ); $rs->setFetchmode( \ResultSet::FETCHMODE_ASSOC ); $rows = Array (); while ($rs->next()) { $rows[] = $rs->getRow(); } return $rows; } public function gmailsForRouting($sUsrUid, $sTasUid, $sAppUid, $delIndex, $isSubprocess) { $taskProxy = new \Task(); $taskData = $taskProxy-> load($sTasUid); //guard condition, message events do not need to send emails if ($taskData['TAS_TYPE'] === 'START-MESSAGE-EVENT') { return; } if($sUsrUid === "") { $targetEmails = $this->targetEmailsForUnassigned($sTasUid, $sAppUid); if ($targetEmails['to'] !== "" && $targetEmails['to'] !== null ) { $this->sendGmail($sAppUid, $targetEmails['to'].','.$targetEmails['cc'], $delIndex, $isSubprocess, true, null, null); } } else { $userObject = new \Users(); $userData = $userObject->loadDetails($sUsrUid); if ($userData !== null) { $this->sendGmail($sAppUid, $userData['USR_EMAIL'], $delIndex, $isSubprocess, false, null, null); } } } public function gmailsIfSelfServiceValueBased($app_uid, $index, $arrayTask, $arrayData) { require_once(PATH_HOME . "engine" . PATH_SEP . "classes" . PATH_SEP . "model" . PATH_SEP . "Application.php"); $resultMail = ""; foreach ($arrayTask as $aTask) { //just self service tasks are processed in this function if ($aTask ["TAS_ASSIGN_TYPE"] !== "SELF_SERVICE") { continue; } $appData = $this->getDraftApp($app_uid, $index); if (count($appData) === 0) { return "appUid not found"; } if (!isset ($aTask ["USR_UID"])) { $aTask ["USR_UID"] = ""; } $application = $appData[0]; $labelID = "PMUASS"; $isSelfServiceValueBased = false; if ($aTask["TAS_ASSIGN_TYPE"] === "SELF_SERVICE") { $task = \TaskPeer::retrieveByPK($aTask["TAS_UID"]); if (trim($task->getTasGroupVariable()) != '') { $isSelfServiceValueBased = true; } } if ($isSelfServiceValueBased) { $mailToAddresses = ''; $mailCcAddresses = ''; $criteria = new \Criteria ("workflow"); $criteria->addSelectColumn(\AppAssignSelfServiceValuePeer::GRP_UID); $criteria->add(\AppAssignSelfServiceValuePeer::APP_UID, $app_uid); $criteria->add(\AppAssignSelfServiceValuePeer::DEL_INDEX, $aTask["DEL_INDEX"]); $rsCriteria = \AppAssignSelfServiceValuePeer::doSelectRs($criteria); $rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC); while ($rsCriteria->next()) { $row = $rsCriteria->getRow(); } $targetIds = unserialize($row ['GRP_UID']); $usersToSend = $this->getSelfServiceValueBasedUsers($targetIds); foreach($usersToSend as $record) { $toAux = (($record['USR_FIRSTNAME'] != '' || $record['USR_LASTNAME'] != '') ? $record['USR_FIRSTNAME'] . ' ' . $record['USR_LASTNAME'] . ' ' : '') . '<' . $record['USR_EMAIL'] . '>'; if ($mailToAddresses == '') { $mailToAddresses = $toAux; } else { $mailCcAddresses .= (($mailCcAddresses != '')? ',' : '') . $toAux; } } $resultMail = $this->sendEmailWithApplicationData($application, $labelID, $mailToAddresses, $mailCcAddresses); } } return $resultMail; } /** * Send email using appUid and mail * * @param string $app_uid Unique id of the app * @param string $mail * * return uid * */ public function sendGmail($app_uid, $mailToAddresses, $index, $isSubprocess = false, $isSelfService = false, $arrayTask = null, $arrayData = null) { //getting the default email server $defaultEmail = $this->emailAccount(); if ($defaultEmail === null) { error_log(G::LoadTranslation('ID_EMAIL_ENGINE_IS_NOT_ENABLED')); return false; } $mailCcAddresses = ""; $appData = $this->getDraftApp($app_uid, $index); if (count($appData) === 0) { return; } $application = $appData[0]; $this->sendEmailWithApplicationData($application, $this->getEmailType($index, $isSubprocess, $isSelfService), $mailToAddresses, $mailCcAddresses); } /** * Get if the license has the feature * * return uid * */ public function hasGmailFeature() { require_once (PATH_HOME . "engine" . PATH_SEP . "classes" . PATH_SEP . "class.licensedFeatures.php"); $licensedFeatures = new \PMLicensedFeatures(); if (!$licensedFeatures->verifyfeature('7qhYmF1eDJWcEdwcUZpT0k4S0xTRStvdz09')) { return false; }else { return true; } } /** * Get the default 'email from account' that is used to send emails in the server email in PM * * return uid * */ public function emailAccount() { $emailServer = new \EmailServer(); $response = $emailServer->loadDefaultAccount(); return $response['MESS_ACCOUNT']; } /** * Business Model to delete all the labels of an acount * * @param string $mail * * return uid * */ public function deleteLabels($mail) { require_once(PATH_HOME . "engine" . PATH_SEP . "classes" . PATH_SEP . "class.labelsGmail.php"); $oLabels = new \labelsGmail(); $response = $oLabels->deletePMGmailLabels($mail); return $response; } public function modifyMailToPauseCase($appUid, $appDelIndex) { require_once (PATH_HOME . "engine" . PATH_SEP . "classes" . PATH_SEP . "class.labelsGmail.php"); $oLabels = new \labelsGmail(); $oResponse = $oLabels->setLabelsToPauseCase($appUid, $appDelIndex); } public function modifyMailToUnpauseCase($appUid, $appDelIndex) { require_once (PATH_HOME . "engine" . PATH_SEP . "classes" . PATH_SEP . "class.labelsGmail.php"); $oLabels = new \labelsGmail(); $oResponse = $oLabels->setLabelsToUnpauseCase($appUid, $appDelIndex); } private function getEmailType($index, $isSubprocess, $isSelfService) { $retval = ""; if ($isSelfService) { $retval = "PMUASS"; } else { $retval = ($index === 1 && !$isSubprocess) ? "PMDRFT" : "PMIBX"; } if ($retval === "") { throw new Exception('Is not possible to determine the email type'); } return $retval; } private function createMailTemplateFile() { $pathTemplate = PATH_DATA_SITE . "mailTemplates" . PATH_SEP . "pmGmail.html"; if (!file_exists($pathTemplate)) { $file = @fopen($pathTemplate, "w"); fwrite($file, '
'); fwrite($file, ''); fwrite($file, '-**- Process Name: @#proName
'); fwrite($file, '-**- Case Number: @#appNumber
'); fwrite($file, '-**- Case UID: @#caseUid
'); fwrite($file, '-**- Task Name: @#taskName
'); fwrite($file, '-**- Index: @#index
'); fwrite($file, '-**- Action: @#action
'); fwrite($file, '-**- Previous User: @#prevUser
'); fwrite($file, '-**- Delegate Date: @#delDate
'); fwrite($file, '-**- Process Id: @#proUid
'); fwrite($file, '-**- Type: @#type
'); fwrite($file, '-**- FormFields:
'); fwrite($file, '
'); fwrite($file, '
'); fclose($file); } } private function getFormData($appUid, $index) { $oApplication = new \Application(); $formData = $oApplication->Load($appUid); $frmData = unserialize($formData['APP_DATA']); $dataFormToShowString = ""; foreach ($frmData as $field => $value) { if (($field != 'SYS_LANG') && ($field != 'SYS_SKIN') && ($field != 'SYS_SYS') && ($field != 'APPLICATION') && ($field != 'PROCESS') && ($field != 'TASK') && ($field != 'INDEX') && ($field != 'USER_LOGGED') && ($field != 'USR_USERNAME') && ($field != 'DYN_CONTENT_HISTORY') && ($field != 'PIN') && (!is_array($value)) ) { $dataFormToShowString .= " " . $field . " " . $value; } } $change = array('[', ']', '"'); $fdata = str_replace($change, ' ', $dataFormToShowString); return $fdata; } private function sendEmailWithApplicationData ($application, $emailTypeLabel, $mailToAddresses, $mailCcAddresses) { $dataFormToShowString = $this->getFormData($application['APP_UID'],$application['DEL_INDEX']); $this->createMailTemplateFile(); $change = array('[', ']', '"'); $fdata = str_replace($change, ' ', $dataFormToShowString); $aFields = array( 'proName' => $application['APP_PRO_TITLE'], 'appNumber' => $application['APP_NUMBER'], 'caseUid' => $application['APP_UID'], 'taskName' => $application['APP_TAS_TITLE'], 'index' => $application['DEL_INDEX'], 'action' => $application['APP_STATUS'], 'prevUser' => $application['APP_DEL_PREVIOUS_USER'], 'delDate' => $application['DEL_DELEGATE_DATE'], 'proUid' => $application['PRO_UID'], 'type' => $emailTypeLabel, 'oform' => $fdata ); $subject = "[PM] " . $application['APP_PRO_TITLE'] . " (" . $application['DEL_INDEX'] . ") Case: " . $application['APP_NUMBER']; //getting the default email server $defaultEmail = $this->emailAccount(); if ($defaultEmail === null) { error_log(G::LoadTranslation('ID_EMAIL_ENGINE_IS_NOT_ENABLED')); return false; } \G::LoadClass("wsBase"); $ws = new \wsBase(); $resultMail = $ws->sendMessage( $application['APP_UID'], $defaultEmail, //From, $mailToAddresses,//$To, $mailCcAddresses,//$Cc '', $subject, 'pmGmail.html',//template $aFields, //fields array(), true, 0, array(), 1 ); } private function targetEmailsForUnassigned($taskUid, $appUid) { $sTo = null; $sCc = null; $arrayResp = array (); $task = new \Tasks (); $group = new \Groups (); $oUser = new \Users (); $to = null; $cc = null; if (isset ( $taskUid ) && ! empty ( $taskUid )) { $arrayTaskUser = array (); $arrayAux1 = $task->getGroupsOfTask ( $taskUid, 1 ); foreach ( $arrayAux1 as $arrayGroup ) { $arrayAux2 = $group->getUsersOfGroup ( $arrayGroup ["GRP_UID"] ); foreach ( $arrayAux2 as $arrayUser ) { $arrayTaskUser [] = $arrayUser ["USR_UID"]; } } $arrayAux1 = $task->getUsersOfTask ( $taskUid, 1 ); foreach ( $arrayAux1 as $arrayUser ) { $arrayTaskUser [] = $arrayUser ["USR_UID"]; } $arrayTaskUser = array_unique($arrayTaskUser); $criteria = new \Criteria ( "workflow" ); $criteria->addSelectColumn ( \UsersPeer::USR_UID ); $criteria->addSelectColumn ( \UsersPeer::USR_USERNAME ); $criteria->addSelectColumn ( \UsersPeer::USR_FIRSTNAME ); $criteria->addSelectColumn ( \UsersPeer::USR_LASTNAME ); $criteria->addSelectColumn ( \UsersPeer::USR_EMAIL ); $criteria->add (\UsersPeer::USR_UID, $arrayTaskUser, \Criteria::IN); $rsCriteria = \UsersPeer::doSelectRs ( $criteria ); $rsCriteria->setFetchmode (\ResultSet::FETCHMODE_ASSOC); $sw = 1; while ( $rsCriteria->next () ) { $row = $rsCriteria->getRow (); $toAux = ((($row ["USR_FIRSTNAME"] != "") || ($row ["USR_LASTNAME"] != "")) ? $row ["USR_FIRSTNAME"] . " " . $row ["USR_LASTNAME"] . " " : "") . "<" . $row ["USR_EMAIL"] . ">"; if ($sw == 1) { $to = $toAux; $sw = 0; } else { $cc = $cc . (($cc != null) ? "," : null) . $toAux; } } $arrayResp ['to'] = $to; $arrayResp ['cc'] = $cc; } return $arrayResp; } /** * Returns a list of users emails that are the destion of the emails * that will be sent, based in the list of groups or users that are * passed to this function. * @param $targetIds, array or single value of usr ids or group ids * @return array, list of emails */ private function getSelfServiceValueBasedUsers($targetIds) { $result = []; $criteria = new Criteria('workflow'); $criteria->setDistinct(); $criteria->addSelectColumn(UsersPeer::USR_UID); $criteria->addSelectColumn(UsersPeer::USR_USERNAME); $criteria->addSelectColumn(UsersPeer::USR_FIRSTNAME); $criteria->addSelectColumn(UsersPeer::USR_LASTNAME); $criteria->addSelectColumn(UsersPeer::USR_EMAIL); $criteria->addJoin(GroupUserPeer::USR_UID, UsersPeer::USR_UID, Criteria::LEFT_JOIN); $criteria->add(UsersPeer::USR_STATUS, 'CLOSED', Criteria::NOT_EQUAL); $rsCriteria = null; if (is_array($targetIds)) { $criteriaUid = $criteria->getNewCriterion(UsersPeer::USR_UID, $targetIds, Criteria::IN); $criteriaUid->addOr($criteria->getNewCriterion(GroupUserPeer::GRP_UID, $targetIds, Criteria::IN)); $criteria->add($criteriaUid); $rsCriteria = GroupUserPeer::doSelectRS($criteria); } else { $criteriaUid = $criteria->getNewCriterion(UsersPeer::USR_UID, $targetIds, Criteria::EQUAL); $criteriaUid->addOr($criteria->getNewCriterion(GroupUserPeer::GRP_UID, $targetIds, Criteria::EQUAL)); $criteria->add($criteriaUid); $rsCriteria = GroupUserPeer::doSelectRS($criteria); } if (!is_null($rsCriteria)) { $rsCriteria->setFetchmode(ResultSet::FETCHMODE_ASSOC); while ($rsCriteria->next()) { $record = $rsCriteria->getRow(); $result [] = $record; } } return $result; } }