Exemple #1
0
 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.");
     }
 }
Exemple #2
0
 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;
     #-------------------------------------------------------------------------------
     #------------------------------------------------------------------------------
 }
Exemple #4
0
 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.");
     }
 }