/** * Arguments * array('chat' => & $chat) * */ public function telegram($params) { $conf = (include 'extension/telegram/settings/settings.ini.php'); $url = 'http://api.telegram.org/bot' . $conf['telegramBot'] . '/sendMessage?parse_mode=Markdown'; $chat = $params['chat']; foreach ($conf['receivers'] as $receiver) { $internalurl = $url . "&chat_id=" . preg_replace('/[^0-9.]+/', '', $receiver['chatid']); $text = "``` Nova solicitação de suporte via chat - "; $text = isset($chat->nick) ? $text . $chat->nick : $text; $text = isset($chat->email) ? $text . " ( " . $chat->email . " )" : $text; $text .= "```"; if (isset($receiver['operator'])) { $veryfyEmail = sha1(sha1($receiver['operator'] . $secretHash) . $secretHash); $link = erLhcoreClassXMP::getBaseHost(); $link .= $_SERVER['HTTP_HOST']; $link .= erLhcoreClassDesign::baseurl('chat/accept') . '/'; $link .= erLhcoreClassModelChatAccept::generateAcceptLink($chat) . '/'; $link .= $veryfyEmail . '/' . $receiver['operator']; $text .= "\n" . $link; } $text .= "```"; $internalurl .= "&text=" . urlencode($text); file_get_contents($internalurl); } }
/** * Arguments * array('chat' => & $chat) * */ public function sevabot($params) { $settings = (include 'extension/sevabot/settings/settings.ini.php'); // Format message content $chat = $params['chat']; $messages = array_reverse(erLhcoreClassModelmsg::getList(array('limit' => 5, 'sort' => 'id DESC', 'filter' => array('chat_id' => $chat->id)))); $messagesContent = ''; foreach ($messages as $msg) { if ($msg->user_id == -1) { $messagesContent .= date(erLhcoreClassModule::$dateDateHourFormat, $msg->time) . ' ' . erTranslationClassLhTranslation::getInstance()->getTranslation('chat/syncadmin', 'System assistant') . ': ' . htmlspecialchars($msg->msg) . "\n"; } else { $messagesContent .= date(erLhcoreClassModule::$dateDateHourFormat, $msg->time) . ' ' . ($msg->user_id == 0 ? htmlspecialchars($chat->nick) : htmlspecialchars($msg->name_support)) . ': ' . htmlspecialchars($msg->msg) . "\n"; } } $cfgSite = erConfigClassLhConfig::getInstance(); $secretHash = $cfgSite->getSetting('site', 'secrethash'); $chatDataItems = $settings['chat']; if (isset($settings['chat_dep'][$chat->dep_id]) && !empty($settings['chat_dep'][$chat->dep_id])) { $chatDataItems = array_merge($chatDataItems, $settings['chat_dep'][$chat->dep_id]); } // Global notifications foreach ($chatDataItems as $chatData) { $veryfyEmail = sha1(sha1($chatData['email'] . $secretHash) . $secretHash); $msgParsed = str_replace(array('{messages}', '{url_accept}', '{chat_id}', '{user_name}'), array($messagesContent, erLhcoreClassXMP::getBaseHost() . $_SERVER['HTTP_HOST'] . erLhcoreClassDesign::baseurl('chat/accept') . '/' . erLhcoreClassModelChatAccept::generateAcceptLink($chat) . '/' . $veryfyEmail . '/' . $chatData['email'], $chat->id, $chat->user_name), $settings['msg']); $md5 = md5($chatData['chat_id'] . $msgParsed . $settings['sevabot_secret']); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $settings['url']); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_TIMEOUT, 5); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, array('md5' => $md5, 'msg' => $msgParsed, 'chat' => $chatData['chat_id'])); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); @curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // Some hostings produces wargning... $content = curl_exec($ch); if ($content != 'OK') { erLhcoreClassLog::write(print_r($content, true)); } } }
<?php $cfgSite = erConfigClassLhConfig::getInstance(); $secretHash = $cfgSite->getSetting('site', 'secrethash'); if ($Params['user_parameters']['validation_hash'] == sha1(sha1($Params['user_parameters']['email'] . $secretHash) . $secretHash)) { $accept = erLhcoreClassModelChatAccept::fetchByHash($Params['user_parameters']['hash']); if ($accept !== false) { $chat_id = $accept->chat_id; if ($accept->wused == 0) { $userID = erLhcoreClassModelUser::fetchUserByEmail($Params['user_parameters']['email'], trim($Params['user_parameters']['email']) != '' ? trim($Params['user_parameters']['email']) : false); if ($userID !== false && $accept->ctime > time() - erLhcoreClassModelChatConfig::fetch('accept_chat_link_timeout')->current_value) { $accept->wused = 1; $accept->saveThis(); erLhcoreClassUser::instance()->setLoggedUser($userID); erLhcoreClassModule::redirect('chat/single', '/' . $chat_id); exit; } else { erLhcoreClassModule::redirect('user/login', '/(r)/' . rawurlencode(base64_encode('chat/single/' . $chat_id))); exit; } } else { erLhcoreClassModule::redirect('user/login', '/(r)/' . rawurlencode(base64_encode('chat/single/' . $chat_id))); exit; } erLhcoreClassModelChatAccept::cleanup(); } } erLhcoreClassModule::redirect('user/login'); exit;
public static function informChatClosed(erLhcoreClassModelChat $chat, $operator = false) { $sendMail = erLhAbstractModelEmailTemplate::fetch(5); $mail = new PHPMailer(); $mail->CharSet = "UTF-8"; if ($sendMail->from_email != '') { $mail->Sender = $mail->From = $sendMail->from_email; } $mail->FromName = $sendMail->from_name; $mail->Subject = $sendMail->subject; $messages = array_reverse(erLhcoreClassModelmsg::getList(array('limit' => 10, 'sort' => 'id DESC', 'filter' => array('chat_id' => $chat->id)))); $messagesContent = ''; foreach ($messages as $msg) { if ($msg->user_id == -1) { $messagesContent .= date(erLhcoreClassModule::$dateDateHourFormat, $msg->time) . ' ' . erTranslationClassLhTranslation::getInstance()->getTranslation('chat/syncadmin', 'System assistant') . ': ' . htmlspecialchars($msg->msg) . "\n"; } else { $messagesContent .= date(erLhcoreClassModule::$dateDateHourFormat, $msg->time) . ' ' . ($msg->user_id == 0 ? htmlspecialchars($chat->nick) : htmlspecialchars($msg->name_support)) . ': ' . htmlspecialchars($msg->msg) . "\n"; } } $emailRecipient = array(); if ($sendMail->recipient != '') { // This time we give priority to template recipients $emailRecipient = explode(',', $sendMail->recipient); } elseif ($chat->department !== false && $chat->department->email != '') { $emailRecipient = explode(',', $chat->department->email); } else { // Lets find first user and send him an e-mail $list = erLhcoreClassModelUser::getUserList(array('limit' => 1, 'sort' => 'id ASC')); $user = array_pop($list); $emailRecipient = array($user->email); } self::setupSMTP($mail); $cfgSite = erConfigClassLhConfig::getInstance(); $secretHash = $cfgSite->getSetting('site', 'secrethash'); if ($chat->email != '') { $mail->AddReplyTo($chat->email, $chat->nick); } // Format user friendly additional data if ($chat->additional_data != '') { $paramsAdditional = json_decode($chat->additional_data, true); $elementsAdditional = array(); if (is_array($paramsAdditional) && !empty($paramsAdditional)) { foreach ($paramsAdditional as $param) { $elementsAdditional[] = $param['key'] . ' - ' . $param['value']; } $additional_data = implode("\n", $elementsAdditional); } else { $additional_data = $chat->additional_data; } } else { $additional_data = ''; } foreach ($emailRecipient as $receiver) { $veryfyEmail = sha1(sha1($receiver . $secretHash) . $secretHash); $mail->Body = str_replace(array('{chat_id}', '{phone}', '{name}', '{email}', '{message}', '{additional_data}', '{url_request}', '{ip}', '{department}', '{url_accept}', '{operator}', '{country}', '{city}'), array($chat->id, $chat->phone, $chat->nick, $chat->email, $messagesContent, $additional_data, $chat->referrer, erLhcoreClassIPDetect::getIP(), (string) $chat->department, 'http://' . $_SERVER['HTTP_HOST'] . erLhcoreClassDesign::baseurl('chat/accept') . '/' . erLhcoreClassModelChatAccept::generateAcceptLink($chat) . '/' . $veryfyEmail . '/' . $receiver, $operator, $chat->country_name, $chat->city), $sendMail->content); $mail->AddAddress($receiver); $mail->Send(); $mail->ClearAddresses(); } if ($sendMail->bcc_recipients != '') { $recipientsBCC = explode(',', $sendMail->bcc_recipients); foreach ($recipientsBCC as $receiver) { $receiver = trim($receiver); $veryfyEmail = sha1(sha1($receiver . $secretHash) . $secretHash); $mail->Body = str_replace(array('{chat_id}', '{phone}', '{name}', '{email}', '{message}', '{additional_data}', '{url_request}', '{ip}', '{department}', '{url_accept}', '{operator}', '{country}', '{city}'), array($chat->id, $chat->phone, $chat->nick, $chat->email, $messagesContent, $additional_data, $chat->referrer, erLhcoreClassIPDetect::getIP(), (string) $chat->department, 'http://' . $_SERVER['HTTP_HOST'] . erLhcoreClassDesign::baseurl('chat/accept') . '/' . erLhcoreClassModelChatAccept::generateAcceptLink($chat) . '/' . $veryfyEmail . '/' . $receiver, $operator, $chat->country_name, $chat->city), $sendMail->content); $mail->AddAddress($receiver); $mail->Send(); $mail->ClearAddresses(); } } }
public static function sendXMPMessage($chat, $params = array()) { $data = (array) erLhcoreClassModelChatConfig::fetch('xmp_data')->data; $templateMessage = 'xmp_message'; if (isset($params['template'])) { $templateMessage = $params['template']; } if (isset($data['use_xmp']) && $data['use_xmp'] == 1) { if (isset($data['use_standard_xmp']) && $data['use_standard_xmp'] == '0' || !isset($data['use_standard_xmp'])) { $conn = new XMPPHP_XMPP($data['host'], $data['port'], $data['username'], $data['password'], $data['resource'], $data['server'], $printlog = false, $loglevel = XMPPHP_Log::LEVEL_INFO); try { $conn->connect(); $conn->processUntil('session_start'); $emailRecipient = array(); // Email messages $groupRecipients = array(); // Group messages if ($chat->department !== false && $chat->department->xmpp_recipients != '') { // Perhaps department has assigned email $emailRecipient = explode(',', $chat->department->xmpp_recipients); } elseif (isset($data['recipients']) && $data['recipients'] != '') { $emailRecipient = explode(',', $data['recipients']); } if ($chat->department !== false && $chat->department->xmpp_group_recipients != '') { $groupRecipients = explode(',', $chat->department->xmpp_group_recipients); } // change status foreach ($groupRecipients as $recipient) { $conn->presence(NULL, 'available', $recipient); } if (!empty($emailRecipient)) { $conn->presence(); } $messages = array_reverse(erLhcoreClassModelmsg::getList(array('limit' => 5, 'sort' => 'id DESC', 'filter' => array('chat_id' => $chat->id)))); $messagesContent = ''; foreach ($messages as $msg) { if ($msg->user_id == -1) { $messagesContent .= date(erLhcoreClassModule::$dateDateHourFormat, $msg->time) . ' ' . erTranslationClassLhTranslation::getInstance()->getTranslation('chat/syncadmin', 'System assistant') . ': ' . htmlspecialchars($msg->msg) . "\n"; } else { $messagesContent .= date(erLhcoreClassModule::$dateDateHourFormat, $msg->time) . ' ' . ($msg->user_id == 0 ? htmlspecialchars($chat->nick) : htmlspecialchars($msg->name_support)) . ': ' . htmlspecialchars($msg->msg) . "\n"; } } $cfgSite = erConfigClassLhConfig::getInstance(); $secretHash = $cfgSite->getSetting('site', 'secrethash'); foreach ($emailRecipient as $email) { $veryfyEmail = sha1(sha1($email . $secretHash) . $secretHash); $messagesParsed = str_replace(array('{messages}', '{url_accept}', '{chat_id}', '{user_name}'), array($messagesContent, self::getBaseHost() . $_SERVER['HTTP_HOST'] . erLhcoreClassDesign::baseurl('chat/accept') . '/' . erLhcoreClassModelChatAccept::generateAcceptLink($chat) . '/' . $veryfyEmail . '/' . $email, $chat->id, $chat->user_name), $data[$templateMessage]); $conn->message($email, $messagesParsed); } foreach ($groupRecipients as $email) { list($emailGroup) = explode('/', $email); $veryfyEmail = sha1(sha1($emailGroup . $secretHash) . $secretHash); $messagesParsed = str_replace(array('{messages}', '{url_accept}', '{chat_id}', '{user_name}'), array($messagesContent, self::getBaseHost() . $_SERVER['HTTP_HOST'] . erLhcoreClassDesign::baseurl('chat/accept') . '/' . erLhcoreClassModelChatAccept::generateAcceptLink($chat) . '/' . $veryfyEmail . '/' . $emailGroup, $chat->id, $chat->user_name), $data[$templateMessage]); $conn->message($emailGroup, $messagesParsed, 'groupchat'); } foreach ($groupRecipients as $recipient) { $conn->presence(NULL, 'unavailable', $recipient); } $conn->disconnect(); return true; } catch (Exception $e) { throw $e; } } else { if (($accessToken = self::getAccessToken()) !== false) { $dataLogin = self::get_dns_srv('gmail.com'); $conn = new XMPPHP_XMPP($dataLogin[0], $dataLogin[1], $data['email_gtalk'], $accessToken, 'xmpphp', $dataLogin[0], $printlog = false, $loglevel = XMPPHP_Log::LEVEL_INFO, true); try { $conn->connect(); $conn->processUntil('session_start'); $conn->presence(); $emailRecipient = array(); if ($chat->department !== false && $chat->department->xmpp_recipients != '') { // Perhaps department has assigned email $emailRecipient = explode(',', $chat->department->xmpp_recipients); } elseif (isset($data['recipients']) && $data['recipients'] != '') { $emailRecipient = explode(',', $data['recipients']); } $messages = array_reverse(erLhcoreClassModelmsg::getList(array('limit' => 5, 'sort' => 'id DESC', 'filter' => array('chat_id' => $chat->id)))); $messagesContent = ''; foreach ($messages as $msg) { if ($msg->user_id == -1) { $messagesContent .= date(erLhcoreClassModule::$dateDateHourFormat, $msg->time) . ' ' . erTranslationClassLhTranslation::getInstance()->getTranslation('chat/syncadmin', 'System assistant') . ': ' . htmlspecialchars($msg->msg) . "\n"; } else { $messagesContent .= date(erLhcoreClassModule::$dateDateHourFormat, $msg->time) . ' ' . ($msg->user_id == 0 ? htmlspecialchars($chat->nick) : htmlspecialchars($msg->name_support)) . ': ' . htmlspecialchars($msg->msg) . "\n"; } } $cfgSite = erConfigClassLhConfig::getInstance(); $secretHash = $cfgSite->getSetting('site', 'secrethash'); foreach ($emailRecipient as $email) { $veryfyEmail = sha1(sha1($email . $secretHash) . $secretHash); $conn->message($email, str_replace(array('{messages}', '{url_accept}', '{chat_id}', '{user_name}'), array($messagesContent, self::getBaseHost() . $_SERVER['HTTP_HOST'] . erLhcoreClassDesign::baseurl('chat/accept') . '/' . erLhcoreClassModelChatAccept::generateAcceptLink($chat) . '/' . $veryfyEmail . '/' . $email, $chat->id, $chat->user_name), $data[$templateMessage])); } $conn->disconnect(); return true; } catch (Exception $e) { throw $e; } } else { throw new Exception('Invalid access token'); } } } }