public function send(Msg $msg) { // Get template file path. $templatePath = SPrintF('Notifies/SMS/%s.tpl', $msg->getTemplate()); $smarty = JSmarty::get(); if (!$smarty->templateExists($templatePath)) { throw new jException('Template file not found: ' . $templatePath); } $smarty->assign('Config', Config()); foreach (array_keys($msg->getParams()) as $paramName) { $smarty->assign($paramName, $msg->getParam($paramName)); } try { $message = $smarty->fetch($templatePath); } catch (Exception $e) { throw new jException(SPrintF("Can't fetch template: %s", $templatePath), $e->getCode(), $e); } $recipient = $msg->getParam('User'); if (!$recipient['Params']['NotificationMethods']['SMS']['Address']) { throw new jException('Mobile phone number not found for user: '******'ID']); } $taskParams = array('UserID' => $recipient['ID'], 'TypeID' => 'SMS', 'Params' => array($recipient['Params']['NotificationMethods']['SMS']['Address'], $message, $recipient['ID'], $msg->getParam('ChargeFree') ? TRUE : FALSE)); #Debug(SPrintF('[system/classes/SMS.class.php]: msg = %s,',print_r($msg,true))); $result = Comp_Load('www/Administrator/API/TaskEdit', $taskParams); switch (ValueOf($result)) { case 'error': throw new jException("Couldn't add task to queue: " . $result); case 'exception': throw new jException("Couldn't add task to queue: " . $result->String); case 'array': return TRUE; default: throw new jException("Unexpected error."); } }
public function send(Msg $msg) { #------------------------------------------------------------------------------- // Get template file path. $templatePath = SPrintF('Notifies/ICQ/%s.tpl', $msg->getTemplate()); #------------------------------------------------------------------------------- $smarty = JSmarty::get(); #------------------------------------------------------------------------------- if (!$smarty->templateExists($templatePath)) { throw new jException('Template file not found: ' . $templatePath); } #------------------------------------------------------------------------------- $smarty->assign('Config', Config()); #------------------------------------------------------------------------------- foreach (array_keys($msg->getParams()) as $paramName) { $smarty->assign($paramName, $msg->getParam($paramName)); } #------------------------------------------------------------------------------- try { #------------------------------------------------------------------------------- $message = $smarty->fetch($templatePath); #------------------------------------------------------------------------------- } catch (Exception $e) { #------------------------------------------------------------------------------- throw new jException(SPrintF("Can't fetch template: %s", $templatePath), $e->getCode(), $e); #------------------------------------------------------------------------------- } #------------------------------------------------------------------------------- $recipient = $msg->getParam('User'); #------------------------------------------------------------------------------- if (!$recipient['Params']['NotificationMethods']['ICQ']['Address']) { throw new jException("ICQ UIN not found for user: "******"Couldn't add task to queue: " . $result); case 'exception': throw new jException("Couldn't add task to queue: " . $result->String); case 'array': return TRUE; default: throw new jException("Unexpected error."); } #------------------------------------------------------------------------------- }
public static function sendMsg(Msg $msg, $Methods = array()) { #------------------------------------------------------------------------------- $Executor = Comp_Load('www/Administrator/API/ProfileCompile', array('ProfileID' => 100)); #------------------------------------------------------------------------------- switch (ValueOf($Executor)) { case 'error': return ERROR | @Trigger_Error(500); case 'exception': # No more... break; case 'array': #------------------------------------------------------------------------------- $msg->setParam('Executor', $Executor['Attribs']); #------------------------------------------------------------------------------- break; #------------------------------------------------------------------------------- #------------------------------------------------------------------------------- default: return ERROR | @Trigger_Error(101); } #------------------------------------------------------------------------------- #------------------------------------------------------------------------------- $User = DB_Select('Users', array('ID', 'Name', 'Sign', 'Email', 'UniqID', 'IsNotifies', 'Params'), array('UNIQ', 'ID' => $msg->getTo())); #------------------------------------------------------------------------------- switch (ValueOf($User)) { case 'error': return ERROR | @Trigger_Error('[Email_Send]: не удалось выбрать получателя'); case 'exception': return new gException('EMAIL_RECIPIENT_NOT_FOUND', 'Получатель письма не найден'); case 'array': #------------------------------------------------------------------------------- $TypeID = $msg->getTemplate(); #------------------------------------------------------------------------------- Debug(SPrintF('[system/classes/NotificationManager]: TypeID = %s', $TypeID)); #------------------------------------------------------------------------------- if ($TypeID != 'UserPasswordRestore') { if (!$User['IsNotifies']) { return new gException('NOTIFIES_RECIPIENT_DISABLED', 'Уведомления для получателя отключены'); } } #------------------------------------------------------------------------------- $msg->setParam('User', $User); #------------------------------------------------------------------------------- break; #------------------------------------------------------------------------------- #------------------------------------------------------------------------------- default: return ERROR | @Trigger_Error(101); } #------------------------------------------------------------------------------- #------------------------------------------------------------------------------- $From = DB_Select('Users', array('ID', 'Name', 'Sign', 'Email', 'UniqID', 'Params'), array('UNIQ', 'ID' => $msg->getFrom())); #------------------------------------------------------------------------------- switch (ValueOf($From)) { case 'error': return ERROR | @Trigger_Error('[Email_Send]: не удалось выбрать отправителя'); case 'exception': return new gException('EMAIL_SENDER_NOT_FOUND', 'Отправитель не найден'); case 'array': #------------------------------------------------------------------------------- $msg->setParam('From', $From); #------------------------------------------------------------------------------- break; #------------------------------------------------------------------------------- #------------------------------------------------------------------------------- default: return ERROR | @Trigger_Error(101); } #------------------------------------------------------------------------------- #------------------------------------------------------------------------------- $Config = Config(); #------------------------------------------------------------------------------- $Notifies = $Config['Notifies']; #------------------------------------------------------------------------------- # вариант когда методы не заданы - значит все доступные if (SizeOf($Methods) == 0) { #------------------------------------------------------------------------------- $Array = array(); #------------------------------------------------------------------------------- foreach (Array_Keys($Notifies['Methods']) as $MethodID) { $Array[] = $MethodID; } #------------------------------------------------------------------------------- $Methods = $Array; #------------------------------------------------------------------------------- } #------------------------------------------------------------------------------- #------------------------------------------------------------------------------- $sentMsgCnt = 0; #------------------------------------------------------------------------------- foreach (Array_Keys($Notifies['Methods']) as $MethodID) { #------------------------------------------------------------------------------- if (!$Notifies['Methods'][$MethodID]['IsActive'] || !In_Array($MethodID, $Methods)) { continue; } #------------------------------------------------------------------------------- # проверяем контакт, если не мыло - должен быть подтверждён if ($MethodID != 'Email') { if (!$User['Params']['NotificationMethods'][$MethodID]['Confirmed']) { continue; } } #------------------------------------------------------------------------------- #------------------------------------------------------------------------------- # кусок от JBS-879 if (!isset($Notifies['Types'][$TypeID])) { #------------------------------------------------------------------------------- Debug(SPrintF('[system/classes/NotificationManager]: TypeID = %s not found', $TypeID)); #------------------------------------------------------------------------------- } else { #------------------------------------------------------------------------------- # такие оповещения вообще могут быть отключены (пока, не настраиваемо, т.к. не нужно) if (!$Notifies['Types'][$TypeID]['IsActive']) { continue; } #------------------------------------------------------------------------------- # проверяем, не отключены ли такие оповещения глобально $UseName = SPrintF('Use%s', $MethodID); #------------------------------------------------------------------------------- if (isset($Notifies['Types'][$TypeID][$UseName]) && !$Notifies['Types'][$TypeID][$UseName]) { continue; } #------------------------------------------------------------------------------- } #------------------------------------------------------------------------------- #------------------------------------------------------------------------------- # проверяем, не отключены ли такие оповещения в настройках юзера $Count = DB_Count('Notifies', array('Where' => SPrintF("`UserID` = %u AND `MethodID` = '%s' AND `TypeID` = '%s'", $msg->getTo(), $MethodID, $TypeID))); if (Is_Error($Count)) { return ERROR | @Trigger_Error(500); } #------------------------------------------------------------------------------- if ($Count) { continue; } #------------------------------------------------------------------------------- #------------------------------------------------------------------------------- # JBS-1126: save $MethodID settings $msg->setParam('MethodSettings', $Notifies['Methods'][$MethodID]); #------------------------------------------------------------------------------- #------------------------------------------------------------------------------- if (!class_exists($MethodID)) { return new gException('DISPATCHER_NOT_FOUND', 'Dispatcher not found: ' . $MethodID); } #------------------------------------------------------------------------------- #$dispatcher = $MethodID::get(); $dispatcher = call_user_func($MethodID . '::get', true); #------------------------------------------------------------------------------- try { #------------------------------------------------------------------------------- $dispatcher->send($msg); #------------------------------------------------------------------------------- $sentMsgCnt++; #------------------------------------------------------------------------------- } catch (jException $e) { #------------------------------------------------------------------------------- Debug(SPrintF("[system/classes/NotificationManager]: Error while sending message [userId=%s, message=%s]", $User['ID'], $e->getMessage())); #------------------------------------------------------------------------------- } #------------------------------------------------------------------------------- } #------------------------------------------------------------------------------- #------------------------------------------------------------------------------- if ($sentMsgCnt < 1) { #------------------------------------------------------------------------------- Debug(SPrintF("[system/classes/NotificationManager]: Couldn't send notify by any methods to user #%s", $User['ID'])); #------------------------------------------------------------------------------- return new gException('USER_NOT_NOTIFIED', 'Не удалось оповестить пользователя ни одним из методов'); #------------------------------------------------------------------------------- } #------------------------------------------------------------------------------- #------------------------------------------------------------------------------- return TRUE; #------------------------------------------------------------------------------- #------------------------------------------------------------------------------ }
public function send(Msg $msg) { // Get template file path. $templatePath = SPrintF('Notifies/Email/%s.tpl', $msg->getTemplate()); $smarty = JSmarty::get(); $smarty->clearAllAssign(); if (!$smarty->templateExists($templatePath)) { throw new jException('Template file not found: ' . $templatePath); } $smarty->assign('Config', Config()); foreach (array_keys($msg->getParams()) as $paramName) { $smarty->assign($paramName, $msg->getParam($paramName)); } $message = $smarty->fetch($templatePath); try { // Debug("msg->getParam('Theme'): "+ $msg->getParam('Theme')); if ($msg->getParam('Theme')) { // Debug("SET THEME FROM PARAMS"); $theme = $msg->getParam('Theme'); } else { // Debug("SET THEME FROM TEMPLATE"); $theme = $smarty->getTemplateVars('Theme'); } // Debug("THEME: "+$theme); if (!$theme) { $theme = '$Theme'; } } catch (Exception $e) { throw new jException(SPrintF("Can't fetch template: %s", $templatePath), $e->getCode(), $e); } $recipient = $msg->getParam('User'); if (!$recipient['Email']) { throw new jException('E-mail address not found for user: '******'ID']); } $sender = $msg->getParam('From'); $emailHeads = array(SPrintF('From: %s', $sender['Email']), 'MIME-Version: 1.0', 'Content-Transfer-Encoding: 8bit', SPrintF('Content-Type: multipart/mixed; boundary="----==--%s"', HOST_ID)); // added by lissyara 2013-02-13 in 15:45 MSK, for JBS-609 if ($msg->getParam('Message-ID')) { $emailHeads[] = SPrintF('Message-ID: %s', $msg->getParam('Message-ID')); } $Params = array(); if ($msg->getParam('Recipient')) { $Params[] = $msg->getParam('Recipient'); } else { $Params[] = $recipient['Email']; } $Params[] = $theme; $Params[] = $message; $Params[] = Implode("\r\n", $emailHeads); $Params[] = $recipient['ID']; if ($msg->getParam('EmailAttachments')) { $Params[] = $msg->getParam('EmailAttachments'); } else { $Params[] = 'не определено'; } $taskParams = array('UserID' => $recipient['ID'], 'TypeID' => 'Email', 'Params' => $Params); $result = Comp_Load('www/Administrator/API/TaskEdit', $taskParams); switch (ValueOf($result)) { case 'error': throw new jException("Couldn't add task to queue: " . $result); case 'exception': throw new jException("Couldn't add task to queue: " . $result->String); case 'array': return TRUE; default: throw new jException("Unexpected error."); } }