Part 2
In file class.ticket.php
Add include the sms sending module
include_once(INCLUDE_DIR.'sms.php');
Alter functions to send SMS along with e-mail notification:
function onNewTicket($message, $autorespond=true, $alertstaff=true) {
global $cfg;
//Log stuff here...
if(!$autorespond && !$alertstaff) return true; //No alerts to send.
/* ------ SEND OUT NEW TICKET AUTORESP && ALERTS ----------*/
$this->reload(); //get the new goodies.
$dept= $this->getDept();
if(!$dept || !($tpl = $dept->getTemplate()))
$tpl= $cfg->getDefaultTemplate();
if(!$tpl) return false; //bail out...missing stuff.
if(!$dept || !($email=$dept->getAutoRespEmail()))
$email =$cfg->getDefaultEmail();
//Send auto response - if enabled.
if($autorespond && $email && $cfg->autoRespONNewTicket()
&& $dept->autoRespONNewTicket()
&& ($msg=$tpl->getAutoRespMsgTemplate())) {
$msg = $this->replaceVars($msg,
array('message' => $message,
'signature' => ($dept && $dept->isPublic())?$dept->getSignature():'')
);
if($cfg->stripQuotedReply() && ($tag=$cfg->getReplySeparator()))
$msg ="\n$tag\n\n".$msg;
$email->sendAutoReply($this->getEmail(), $msg, $msg);
}
if(!($email=$cfg->getAlertEmail()))
$email =$cfg->getDefaultEmail();
//MOD
//Compose SMS
$smsMsg='New ticket->priority: '.$this->getPriority().' from '.$this->getName().' ('.$this->getEmail().')';
$smsMsg.=' tel: '.$this->getPhone().' Due: '.$this->getSLADueDate();
//ENDMOD
//Send alert to out sleepy & idle staff.
if($alertstaff && $email
&& $cfg->alertONNewTicket()
&& ($msg=$tpl->getNewTicketAlertMsgTemplate())) {
$msg = $this->replaceVars($msg, array('message' => $message));
$recipients=$sentlist=array();
//Alert admin??
if($cfg->alertAdminONNewTicket()) {
$alert = str_replace('%{recipient}', 'Admin', $msg);
$email->sendAlert($cfg->getAdminEmail(), $msg, $alert);
$sentlist=$cfg->getAdminEmail();
}
//Only alerts dept members if the ticket is NOT assigned.
if($cfg->alertDeptMembersONNewTicket() && !$this->isAssigned()) {
if(($members=$dept->getMembers()))
$recipients=array_merge($recipients, $members);
}
if($cfg->alertDeptManagerONNewTicket() && $dept && ($manager=$dept->getManager()))
$recipients= $manager;
foreach( $recipients as $k=>$staff) {
if(!is_object($staff) || !$staff->isAvailable() || in_array($staff->getEmail(), $sentlist)) continue;
$alert = str_replace('%{recipient}', $staff->getFirstName(), $msg);
$email->sendAlert($staff->getEmail(), $msg, $alert);
//MOD
if ($staff->getSMSPriority() <= $this->getPriorityID()) {
send_SMS($staff->getMobile(),$smsMsg);
}
//END MOD
$sentlist = $staff->getEmail();
}
}
return true;
}
function onAssign($assignee, $comments, $alert=true) {
global $cfg, $thisstaff;
if($this->isClosed()) $this->reopen(); //Assigned tickets must be open - otherwise why assign?
//Assignee must be an object of type Staff or Team
if(!$assignee || !is_object($assignee)) return false;
$this->reload();
$comments = $comments?$comments:'Ticket assignment';
$assigner = $thisstaff?$thisstaff:'SYSTEM (Auto Assignment)';
//Log an internal note - no alerts on the internal note.
$this->logNote('Ticket Assigned to '.$assignee->getName(), $comments, $assigner, false);
//See if we need to send alerts
if(!$alert || !$cfg->alertONAssignment()) return true; //No alerts!
$dept = $this->getDept();
//Get template.
if(!$dept || !($tpl = $dept->getTemplate()))
$tpl = $cfg->getDefaultTemplate();
//Email to use!
if(!($email=$cfg->getAlertEmail()))
$email = $cfg->getDefaultEmail();
//recipients
$recipients=array();
if(!strcasecmp(get_class($assignee), 'Staff')) {
if($cfg->alertStaffONAssignment())
$recipients = $assignee;
} elseif(!strcasecmp(get_class($assignee), 'Team')) {
if($cfg->alertTeamMembersONAssignment() && ($members=$assignee->getMembers()))
$recipients+=$members;
elseif($cfg->alertTeamLeadONAssignment() && ($lead=$assignee->getTeamLead()))
$recipients = $lead;
}
//Get the message template
if($email && $recipients && $tpl && ($msg=$tpl->getAssignedAlertMsgTemplate())) {
$msg = $this->replaceVars($msg,
array('comments' => $comments,
'assignee' => $assignee,
'assigner' => $assigner
));
//MOD
//Compose SMS message body
$smsMsg='New ticket assigned->priority: '.$this->getPriority().' from '.$this->getName().' ('.$this->getEmail().')';
$smsMsg.=' tel: '.$this->getPhone().' Due: '.$this->getSLADueDate();
// END MOD
//Send the alerts.
$sentlist=array();
foreach( $recipients as $k=>$staff) {
if(!is_object($staff) || !$staff->isAvailable() || in_array($staff->getEmail(), $sentlist)) continue;
$alert = str_replace('%{recipient}', $staff->getFirstName(), $msg);
$email->sendAlert($staff->getEmail(), $msg, $alert);
$sentlist = $staff->getEmail();
//MOD - Send SMS if priority high enough
if ($staff->getSMSPriority() <= $this->getPriorityID()) {
send_SMS($staff->getMobile(),$smsMsg);
}
//END MOD
}
}
return true;
}
function onOverdue($whine=true, $comments="") {
global $cfg;
if($whine && ($sla=$this->getSLA()) && !$sla->alertOnOverdue())
$whine = false;
//check if we need to send alerts.
if(!$whine || !$cfg->alertONOverdueTicket())
return true;
$dept = $this->getDept();
//Get department-defined or default template.
if(!$dept || !($tpl = $dept->getTemplate()))
$tpl= $cfg->getDefaultTemplate();
//Email to use!
if(!($email=$cfg->getAlertEmail()))
$email =$cfg->getDefaultEmail();
//Get the message template
if($tpl && ($msg=$tpl->getOverdueAlertMsgTemplate()) && $email) {
$msg = $this->replaceVars($msg, array('comments' => $comments));
// MOD
// Compose SMS body
$smsMsg='Ticket overdue!!! -> priority: '.$this->getPriority().' from '.$this->getName().' ('.$this->getEmail().')';
$smsMsg.=' tel: '.$this->getPhone().' Due by: '.$this->getSLADueDate();
// END MOD
//recipients
$recipients=array();
//Assigned staff or team... if any
if($this->isAssigned() && $cfg->alertAssignedONOverdueTicket()) {
if($this->getStaffId())
$recipients=$this->getStaff();
elseif($this->getTeamId() && ($team=$this->getTeam()) && ($members=$team->getMembers()))
$recipients=array_merge($recipients, $members);
} elseif($cfg->alertDeptMembersONOverdueTicket() && !$this->isAssigned()) {
//Only alerts dept members if the ticket is NOT assigned.
if(($members=$dept->getMembers()))
$recipients=array_merge($recipients, $members);
}
//Always alert dept manager??
if($cfg->alertDeptManagerONOverdueTicket() && $dept && ($manager=$dept->getManager()))
$recipients= $manager;
$sentlist=array();
foreach( $recipients as $k=>$staff) {
if(!is_object($staff) || !$staff->isAvailable() || in_array($staff->getEmail(), $sentlist)) continue;
$alert = str_replace("%{recipient}", $staff->getFirstName(), $msg);
$email->sendAlert($staff->getEmail(), $msg, $alert);
$sentlist = $staff->getEmail();
//MOD - Send SMS if priority high enough
if ($staff->getSMSPriority() <= $this->getPriorityID()) {
send_SMS($staff->getMobile(),$smsMsg);
}
// END MOD
}
}
return true;
}
Add sms.php, containing finction to send sms. Alter accordingly to your sms api
<?php
function send_SMS($to_num, $msg)
{
$params = array(
'username' => 'login', //login z konta SMSAPI
'password' => md5('********), //lub $password="ciąg md5"
'to' => $to_num, //recipient
'from' => 'Serwis', //sender
'message' => $msg, //message body
);
if ($params && $params && $params && $params)
{
$data = '?'.http_build_query($params);
$plik = fopen('https://ssl.smsapi.pl/sms.do'.$data,'r'); $wynik = fread($plik,1024);
fclose ($plik);
return $wynik;
}
}
?>
Still testing, but seems to work just fine. This is my first php programming exercise ;-)