📄 mailnotifications.php
字号:
<?php
/**
*
* OrangeHRM is a comprehensive Human Resource Management (HRM) System that captures
* all the essential functionalities required for any enterprise.
* Copyright (C) 2006 OrangeHRM Inc., http://www.orangehrm.com
*
* OrangeHRM is free software; you can redistribute it and/or modify it under the terms of
* the GNU General Public License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* OrangeHRM 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 General Public License along with this program;
* if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA
*
* @copyright 2006 OrangeHRM Inc., http://www.orangehrm.com
*/
require_once ROOT_PATH . '/lib/common/htmlMimeMail5/htmlMimeMail5.php';
require_once ROOT_PATH . '/lib/models/eimadmin/EmailConfiguration.php';
require_once ROOT_PATH . '/lib/models/eimadmin/EmailNotificationConfiguration.php';
require_once ROOT_PATH . '/lib/confs/sysConf.php';
require_once ROOT_PATH . '/lib/models/leave/Leave.php';
require_once ROOT_PATH . '/lib/models/hrfunct/EmpInfo.php';
require_once ROOT_PATH . '/lib/models/hrfunct/EmpRepTo.php';
require_once ROOT_PATH . '/lib/common/Language.php';
/**
* Manages sending of mail notifications
*
*/
class MailNotifications {
/**
* Action constants
*
*/
const MAILNOTIFICATIONS_ACTION_APPLY = "apply";
const MAILNOTIFICATIONS_ACTION_CANCEL = "cancel";
const MAILNOTIFICATIONS_ACTION_REJECT = "reject";
const MAILNOTIFICATIONS_ACTION_APPROVE = "approve";
const MAILNOTIFICATIONS_ACTION_ASSIGN = "assign";
const MAILNOTIFICATIONS_ACTION_SUPERVISOR_CANCEL = "supervisorCancel";
/**
* Template file name constants
*
*/
const MAILNOTIFICATIONS_TEMPLATE_APPLY = 'supervisor/applied.txt';
const MAILNOTIFICATIONS_TEMPLATE_CANCEL = "supervisor/cancelled.txt";
const MAILNOTIFICATIONS_TEMPLATE_REJECT = "subordinate/rejected.txt";
const MAILNOTIFICATIONS_TEMPLATE_APPROVE = "subordinate/approval.txt";
const MAILNOTIFICATIONS_TEMPLATE_ASSIGN = "subordinate/assign.txt";
const MAILNOTIFICATIONS_TEMPLATE_SUPERVISOR_CANCEL = "subordinate/cancelled.txt";
/**
* Mail subject templates
*/
const MAILNOTIFICATIONS_TEMPLATE_APPLY_SUBJECT = 'supervisor/applied-subject.txt';
const MAILNOTIFICATIONS_TEMPLATE_CANCEL_SUBJECT = 'supervisor/cancelled-subject.txt';
const MAILNOTIFICATIONS_TEMPLATE_REJECT_SUBJECT = 'subordinate/rejected-subject.txt';
const MAILNOTIFICATIONS_TEMPLATE_APPROVE_SUBJECT = 'subordinate/approval-subject.txt';
const MAILNOTIFICATIONS_TEMPLATE_ASSIGN_SUBJECT = 'subordinate/assign-subject.txt';
const MAILNOTIFICATIONS_TEMPLATE_SUPERVISOR_CANCEL_SUBJECT = 'subordinate/cancelled-subject.txt';
/**
* Template variable identifier constants
*
*/
const MAILNOTIFICATIONS_IDENTIFIER = "#";
const MAILNOTIFICATIONS_IDENTIFIER_GROUP = "#{.*}";
/**
* Template variable constants
*
*/
const MAILNOTIFICATIONS_VARIABLE_SUPERVISOR = "supervisor";
const MAILNOTIFICATIONS_VARIABLE_SUBORDINATE = "subordinate";
const MAILNOTIFICATIONS_VARIABLE_LEAVECOUNT = "leavecount";
/*
* Class atributes
**/
private $leaveObjs;
private $leaveRequestObj;
private $action;
private $templateFile;
private $to;
private $mail;
private $subject;
private $supervisorMail;
private $subordinateMail;
private $mailer;
private $mailType;
private $employeeIdLength;
private $notificationTypeId;
public function setLeaveObjs ($leaveObjs) {
$this->leaveObjs = $leaveObjs;
}
public function getLeaveObjs () {
return $this->leaveObjs;
}
public function setLeaveRequestObj ($leaveRequestObj) {
$this->leaveRequestObj = $leaveRequestObj;
}
public function getLeaveRequestObj () {
return $this->leaveRequestObj;
}
public function setAction($action) {
$this->action = $action;
}
public function getAction() {
return $this->action;
}
/**
* Constructor
*
* Serializes the object
*
*/
public function __construct() {
$confObj = new EmailConfiguration();
$this->mailer = new htmlMimeMail5();
$auth=true;
if ($confObj->getSmtpUser() == '') {
$auth=false;
}
$this->mailer->setSMTPParams($confObj->getSmtpHost(), $confObj->getSmtpPort(), null, $auth, $confObj->getSmtpUser(), $confObj->getSmtpPass());
$this->mailer->setSendmailPath($confObj->getSendmailPath());
$this->mailer->setFrom("OrangeHRM <{$confObj->getMailAddress()}>");
$sysConfObj = new sysConf();
$this->employeeIdLength = $sysConfObj->getEmployeeIdLength();
$this->mailType = $confObj->getMailType();
}
public function __destruct() {
//nothing to do
}
/**
* Sends the mail notification.
*
* If leaves are not filled it will try to fetch the leaves
* related to the leave request. All work is delegated to
* private functions.
*
* @return boolean Success
*/
public function send() {
if (isset($this->leaveRequestObj)) {
if (!isset($this->leaveObjs)) {
$this->_preFetchLeaves();
}
return $this->_sendMail();
} else if (isset($this->leaveObjs)) {
$this->_refreshLeaves();
return $this->_sendMail();
}
return false;
}
/**
* Mail sending method. This is the workhorse function
*
* @return unknown
*/
private function _sendMail() {
$this->_buildMail();
$mailer = $this->mailer;
$mailer->setText($this->mail);
$mailer->setSubject($this->subject);
$mailNotificationObj = new EmailNotificationConfiguration();
$notificationAddresses = $mailNotificationObj->fetchMailNotifications($this->notificationTypeId);
if (is_array($notificationAddresses)) {
$mailer->setCc(implode(', ', $notificationAddresses));
}
$logMessage = date('r')." Sending {$this->subject} to";
if (isset($this->to) && is_array($this->to)) {
foreach ($this->to as $to) {
$logMessage .= "\r\n".$to;
}
}
$logMessage .= "\r\nCC to";
if (isset($notificationAddresses) && is_array($notificationAddresses)) {
foreach ($notificationAddresses as $cc) {
$logMessage .= "\r\n".$cc;
}
}
if ((!is_array($this->to)) || (!@$mailer->send($this->to, $this->mailType))) {
$logMessage .= " - FAILED \r\nReason(s):";
if (isset($mailer->errors)) {
$logMessage .= "\r\n\t*\t".implode("\r\n\t*\t",$mailer->errors);
}
} else {
$logMessage .= " - SUCCEEDED";
}
if (isset($confObj->logPath) && !empty($confObj->logPath)) {
$logPath = $confObj->logPath;
} else {
$logPath = ROOT_PATH.'/lib/logs/';
}
error_log($logMessage."\r\n", 3, $logPath."notification_mails.log");
return true;
}
/**
* Calls the correct mail builder according to the action
*
*/
private function _buildMail() {
switch ($this->getAction()) {
case self::MAILNOTIFICATIONS_ACTION_APPLY : $this->_applyMail();
break;
case self::MAILNOTIFICATIONS_ACTION_SUPERVISOR_CANCEL: // fall through to next case
case self::MAILNOTIFICATIONS_ACTION_CANCEL : $this->_cancelMail();
break;
case self::MAILNOTIFICATIONS_ACTION_APPROVE : $this->_approveMail();
break;
case self::MAILNOTIFICATIONS_ACTION_REJECT : $this->_rejectMail();
break;
case self::MAILNOTIFICATIONS_ACTION_ASSIGN : $this->_assignMail();
break;
}
}
/**
* Builds leave approved notice
*
*/
private function _approveMail() {
$this->notificationTypeId = EmailNotificationConfiguration::EMAILNOTIFICATIONCONFIGURATION_NOTIFICATION_TYPE_LEAVE_APPROVED;
$this->templateFile = file_get_contents(ROOT_PATH."/templates/leave/mails/".self::MAILNOTIFICATIONS_TEMPLATE_APPROVE);
$txt = $this->templateFile;
$leaveObjs = $this->getLeaveObjs();
$txtArr = preg_split('/#\{(.*)\}/', $txt, null, PREG_SPLIT_DELIM_CAPTURE);
$recordTxt = $txtArr[1];
$recordArr = null;
$fulldays = 0;
foreach ($leaveObjs as $leaveObj) {
if ($leaveObj->getLeaveStatus() == Leave::LEAVE_STATUS_LEAVE_APPROVED) {
$leaveLength = $leaveObj->getLeaveLengthHours();
$fulldays+=$leaveObj->getLeaveLengthDays();
$duration = $leaveObj->getLeaveLengthHours();
$date = $leaveObj->getLeaveDate();
$type = $leaveObj->getLeaveTypeName();
$comments = $leaveObj->getLeaveComments();
$recordArr[] = preg_replace(array('/#date/', '/#type/', '/#duration/', '/#comments/'), array($date, $type, $duration, $comments), $recordTxt);
}
}
$recordTxt = "";
if (isset($recordArr)) {
$recordTxt = join("\r\n", $recordArr);
}
$txt = $txtArr[0].$recordTxt.$txtArr[2];
if (isset($leaveObjs[0])) {
$employeeName = $leaveObjs[0]->getEmployeeName();
$employeeId = $leaveObjs[0]->getEmployeeId();
$this->_getAddresses($employeeId);
$txt = preg_replace('/#'.self::MAILNOTIFICATIONS_VARIABLE_SUBORDINATE.'/', $employeeName, $txt);
$this->subject = $this->_getMailSubject(self::MAILNOTIFICATIONS_TEMPLATE_APPROVE_SUBJECT,
$employeeName, $fulldays);
$this->to = $this->subordinateMail;
}
$this->mail = $txt;
}
/**
* Builds leave approved notice
*
*/
private function _rejectMail() {
$this->notificationTypeId = EmailNotificationConfiguration::EMAILNOTIFICATIONCONFIGURATION_NOTIFICATION_TYPE_LEAVE_REJECTED;
$this->templateFile = file_get_contents(ROOT_PATH."/templates/leave/mails/".self::MAILNOTIFICATIONS_TEMPLATE_REJECT);
$txt = $this->templateFile;
$leaveObjs = $this->getLeaveObjs();
$txtArr = preg_split('/#\{(.*)\}/', $txt, null, PREG_SPLIT_DELIM_CAPTURE);
$recordTxt = $txtArr[1];
$recordArr = null;
$fulldays = 0;
foreach ($leaveObjs as $leaveObj) {
if ($leaveObj->getLeaveStatus() == Leave::LEAVE_STATUS_LEAVE_REJECTED) {
$leaveLength = $leaveObj->getLeaveLengthHours();
$fulldays+=$leaveObj->getLeaveLengthDays();
$duration = $leaveObj->getLeaveLengthHours();
$date = $leaveObj->getLeaveDate();
$type = $leaveObj->getLeaveTypeName();
$comments = $leaveObj->getLeaveComments();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -