function listen($_user) { global $CONFIG, $GROUPS, $INTERNAL, $USER, $INTLIST, $INTBUSY; $USER = $_user; if (!IS_FILTERED) { if ($USER->Browsers[0]->ChatId == 0) { $USER->Browsers[0]->SetChatId(); } if ($USER->Browsers[0]->Status == CHAT_STATUS_OPEN) { initData(true, false, false, false); if (isset($_POST[POST_EXTERN_USER_GROUP]) && empty($USER->Browsers[0]->DesiredChatGroup)) { $USER->Browsers[0]->DesiredChatGroup = AJAXDecode($_POST[POST_EXTERN_USER_GROUP]); } $USER->Browsers[0]->SetCookieGroup(); getInternal(); if (count($INTLIST) + $INTBUSY > 0) { $USER->AddFunctionCall("lz_chat_set_id('" . $USER->Browsers[0]->ChatId . "');", false); $chatPosition = getQueuePosition($USER->UserId, $USER->Browsers[0]->DesiredChatGroup); $chatWaitingTime = getQueueWaitingTime($chatPosition, $INTBUSY); login(); $USER->Browsers[0]->SetWaiting(!($chatPosition == 1 && count($INTLIST) > 0 && !(!empty($USER->Browsers[0]->DesiredChatPartner) && $INTERNAL[$USER->Browsers[0]->DesiredChatPartner]->Status == USER_STATUS_BUSY))); if (!$USER->Browsers[0]->Waiting) { $USER->AddFunctionCall("lz_chat_show_connected();", false); $USER->AddFunctionCall("lz_chat_set_status(lz_chat_data.STATUS_ALLOCATED);", false); if ($CONFIG["gl_alloc_mode"] != ALLOCATION_MODE_ALL || !empty($USER->Browsers[0]->DesiredChatPartner)) { $USER->Browsers[0]->CreateChat($INTERNAL[$USER->Browsers[0]->DesiredChatPartner], $USER); } else { foreach ($INTLIST as $intid => $am) { $USER->Browsers[0]->CreateChat($INTERNAL[$intid], $USER); } } } else { $USER->AddFunctionCall("lz_chat_show_queue_position(" . $chatPosition . "," . min($chatWaitingTime, 30) . ");", false); } } } else { activeListen(); } } else { displayFiltered(); } return $USER; }
function listen($_user) { global $CONFIG, $GROUPS, $INTERNAL, $USER, $INTLIST, $INTBUSY; $USER = $_user; if (!IS_FILTERED) { if (isnull($USER->Browsers[0]->Chat)) { getData(true, false, false, false); $USER->Browsers[0]->SetCookieGroup(); if (isset($_POST[POST_EXTERN_USER_GROUP])) { $USER->Browsers[0]->DesiredChatGroup = utf8_decode($_POST[POST_EXTERN_USER_GROUP]); $USER->Browsers[0]->SetCookieGroup(); } getInternal(); $chatId = getChatId($USER, $USER->Browsers[0]->DesiredChatGroup); $chatPosition = getQueuePosition($chatId, $USER->Browsers[0]->DesiredChatGroup); $chatWaitingTime = getQueueWaitingTime($chatPosition, $INTBUSY); login(); $USER->Browsers[0]->Waiting = !($chatPosition == 1 && count($INTLIST) > 0 && !(!isnull($USER->Browsers[0]->DesiredChatPartner) && $INTERNAL[$USER->Browsers[0]->DesiredChatPartner]->Status != USER_STATUS_ONLINE)); if (!$USER->Browsers[0]->Waiting) { $USER->AddFunctionCall("lz_chat_show_connected();", false); $USER->Browsers[0]->DestroyChatFiles(); $USER->AddFunctionCall("lz_chat_set_status(lz_chat_data.STATUS_ALLOCATED);", false); if ($CONFIG["gl_alloc_mode"] != ALLOCATION_MODE_ALL || !isnull($USER->Browsers[0]->DesiredChatPartner)) { $USER->Browsers[0]->CreateChat($INTERNAL[$USER->Browsers[0]->DesiredChatPartner], $chatId); } else { foreach ($INTLIST as $intid => $am) { $USER->Browsers[0]->CreateChat($INTERNAL[$intid], $chatId); } } } else { $USER->AddFunctionCall("lz_chat_show_queue_position(" . $chatPosition . "," . $chatWaitingTime . ");", false); } closeOpenChatLog($USER->Browsers[0]->DesiredChatPartner, $USER->Browsers[0]->SystemId); } else { activeListen(); } } else { displayFiltered(); } return $USER; }
static function Listen($_user, $init = false) { global $USER, $VOUCHER; $USER = $_user; if (!(IS_FILTERED && !FILTER_ALLOW_CHATS)) { if (!empty($_POST["p_tid"])) { $VOUCHER = VisitorChat::GetMatchingVoucher(Encoding::Base64UrlDecode($_POST[POST_EXTERN_USER_GROUP]), Encoding::Base64UrlDecode($_POST["p_tid"])); if ($VOUCHER != null) { $USER->Browsers[0]->ChatVoucherId = $VOUCHER->Id; } } if (empty($USER->Browsers[0]->ChatId)) { $USER->Browsers[0]->SetChatId(); $init = true; } if ($USER->Browsers[0]->Status == CHAT_STATUS_OPEN) { Server::InitDataBlock(array("INTERNAL")); if (!empty($_POST[POST_EXTERN_USER_GROUP]) && (empty($USER->Browsers[0]->DesiredChatGroup) || $init)) { $USER->Browsers[0]->DesiredChatGroup = Encoding::Base64UrlDecode($_POST[POST_EXTERN_USER_GROUP]); } $USER->Browsers[0]->SetCookieGroup(); $result = $USER->Browsers[0]->FindOperator(VisitorChat::$Router, $USER); if (!$result && VisitorChat::$Router->OperatorsBusy == 0) { $USER->AddFunctionCall("lz_chat_add_system_text(8,null);", false); $USER->AddFunctionCall("lz_chat_stop_system();", false); } else { if (count(VisitorChat::$Router->OperatorsAvailable) + VisitorChat::$Router->OperatorsBusy > 0) { $USER->AddFunctionCall("lz_chat_set_id('" . $USER->Browsers[0]->ChatId . "');", false); $chatPosition = VisitorChat::$Router->GetQueuePosition($USER->Browsers[0]->DesiredChatGroup); $chatWaitingTime = VisitorChat::$Router->GetQueueWaitingTime($chatPosition); ExternalChat::Login($USER, Server::$Groups[$USER->Browsers[0]->DesiredChatGroup]); $USER->Browsers[0]->SetWaiting(empty(VisitorChat::$DynamicGroup) && !($chatPosition == 1 && count(VisitorChat::$Router->OperatorsAvailable) > 0 && !(!empty($USER->Browsers[0]->DesiredChatPartner) && Server::$Operators[$USER->Browsers[0]->DesiredChatPartner]->Status == USER_STATUS_BUSY))); if (!$USER->Browsers[0]->Waiting) { $USER->Browsers[0]->ShowConnecting($USER); $USER->AddFunctionCall("lz_chat_set_status(lz_chat_data.STATUS_ALLOCATED);", false); if (Server::$Configuration->File["gl_alloc_mode"] != ALLOCATION_MODE_ALL || !empty($USER->Browsers[0]->DesiredChatPartner) || !empty(VisitorChat::$DynamicGroup)) { $USER->Browsers[0]->CreateChat(Server::$Operators[$USER->Browsers[0]->DesiredChatPartner], $USER, true); } else { $run = 0; foreach (VisitorChat::$Router->OperatorsAvailable as $intid => $am) { $USER->Browsers[0]->CreateChat(Server::$Operators[$intid], $USER, false, "", "", true, $run++ == 0); } } } else { if (!empty($_GET["acid"])) { $USER->Browsers[0]->ShowConnecting($USER); $pchatid = Encoding::Base64UrlDecode($_GET["acid"]); $result = DBManager::Execute(true, "SELECT * FROM `" . DB_PREFIX . DATABASE_VISITOR_CHATS . "` WHERE `visitor_id`='" . DBManager::RealEscape($USER->Browsers[0]->UserId) . "' AND `chat_id`='" . DBManager::RealEscape($pchatid) . "' AND (`exit` > " . (time() - 30) . " OR `exit`=0) LIMIT 1;"); if ($result && DBManager::GetRowCount($result) == 1) { $row = DBManager::FetchArray($result); if (!empty($row["waiting"])) { $posts = unserialize($row["queue_posts"]); foreach ($posts as $post) { $USER->AddFunctionCall("lz_chat_repost_from_queue('" . $post[0] . "');", false); } $USER->AddFunctionCall("lz_chat_data.QueuePostsAdded = true;", false); } } } if ($USER->Browsers[0]->IsMaxWaitingTime(true)) { displayDeclined(); return $USER; } if (empty($_GET["acid"])) { $USER->Browsers[0]->ShowQueueInformation($USER, $chatPosition, $chatWaitingTime, LocalizationManager::$TranslationStrings["client_queue_message"]); $gqmt = $USER->Browsers[0]->ShowGroupQueueInformation($USER, $USER->Browsers[0]->QueueMessageShown); if (!empty($gqmt)) { $USER->AddFunctionCall("lz_chat_add_system_text(99,'" . base64_encode($gqmt) . "');", false); } } if (!VisitorChat::$Router->WasTarget && !empty($USER->Browsers[0]->DesiredChatPartner)) { $USER->Browsers[0]->DesiredChatPartner = ""; } $USER->Browsers[0]->CreateArchiveEntry(null, $USER); } } } } else { $action = $USER->Browsers[0]->GetMaxWaitingTimeAction(false); if ($action == "MESSAGE" || $action == "FORWARD" && !$USER->Browsers[0]->CreateAutoForward($USER)) { $USER->Browsers[0]->InternalDecline(Server::$Operators[$USER->Browsers[0]->OperatorId]->SystemId); displayDeclined(); } else { if (empty($USER->Browsers[0]->ArchiveCreated) && !empty($USER->Browsers[0]->DesiredChatPartner)) { $USER->Browsers[0]->CreateChat(Server::$Operators[$USER->Browsers[0]->DesiredChatPartner], $USER, true); } activeListen(); } } if ($USER->Browsers[0]->Status <= CHAT_STATUS_WAITING && empty($_POST["p_wls"]) && empty(VisitorChat::$DynamicGroup)) { $USER->AddFunctionCall("lz_chat_show_waiting_links('" . base64_encode($wl = Server::$Groups[$USER->Browsers[0]->DesiredChatGroup]->GetWaitingLinks($USER->Browsers[0]->UserData->Text, Visitor::$BrowserLanguage)) . "');", false); } } else { displayFiltered(); } return $USER; }
function listen($_user, $init = false) { global $CONFIG, $GROUPS, $INTERNAL, $USER, $INTLIST, $INTBUSY, $VOUCHER, $DEFAULT_BROWSER_LANGUAGE; $USER = $_user; if (!IS_FILTERED) { if (!empty($_POST["p_tid"])) { $VOUCHER = VisitorChat::GetMatchingVoucher(base64UrlDecode($_POST[POST_EXTERN_USER_GROUP]), base64UrlDecode($_POST["p_tid"])); if ($VOUCHER != null) { $USER->Browsers[0]->ChatVoucherId = $VOUCHER->Id; } } if (empty($USER->Browsers[0]->ChatId)) { $result = queryDB(true, "SELECT `visit_id` FROM `" . DB_PREFIX . DATABASE_VISITOR_BROWSERS . "` WHERE `visitor_id`='" . DBManager::RealEscape($USER->Browsers[0]->UserId) . "' AND `id`='" . DBManager::RealEscape($USER->Browsers[0]->BrowserId) . "' LIMIT 1;"); if ($result && ($row = DBManager::FetchArray($result)) && $row["visit_id"] != $USER->Browsers[0]->VisitId && !empty($USER->Browsers[0]->VisitId)) { $USER->Browsers[0]->CloseChat(2); $USER->AddFunctionCall("lz_chat_set_status(lz_chat_data.STATUS_STOPPED);", false); $USER->AddFunctionCall("lz_chat_add_system_text(99,'" . base64_encode("Your browser session has expired (" . $row["visit_id"] . "-" . $USER->Browsers[0]->VisitId . "). Please close this browser instance and try again.") . "');", false); $USER->AddFunctionCall("lz_chat_stop_system();", false); return $USER; } $USER->Browsers[0]->SetChatId(); $init = true; } if ($USER->Browsers[0]->Status == CHAT_STATUS_OPEN) { initData(array("INTERNAL")); if (!empty($_POST[POST_EXTERN_USER_GROUP]) && (empty($USER->Browsers[0]->DesiredChatGroup) || $init)) { $USER->Browsers[0]->DesiredChatGroup = base64UrlDecode($_POST[POST_EXTERN_USER_GROUP]); } $USER->Browsers[0]->SetCookieGroup(); if (!setOperator() && $INTBUSY == 0) { $USER->AddFunctionCall("lz_chat_add_system_text(8,null);", false); $USER->AddFunctionCall("lz_chat_stop_system();", false); } else { if (count($INTLIST) + $INTBUSY > 0) { $USER->AddFunctionCall("lz_chat_set_id('" . $USER->Browsers[0]->ChatId . "');", false); $chatPosition = getQueuePosition($USER->UserId, $USER->Browsers[0]->DesiredChatGroup); $chatWaitingTime = getQueueWaitingTime($chatPosition, $INTBUSY); login(); $USER->Browsers[0]->SetWaiting(!($chatPosition == 1 && count($INTLIST) > 0 && !(!empty($USER->Browsers[0]->DesiredChatPartner) && $INTERNAL[$USER->Browsers[0]->DesiredChatPartner]->Status == USER_STATUS_BUSY))); if (!$USER->Browsers[0]->Waiting) { $USER->AddFunctionCall("lz_chat_show_connected();", false); $USER->AddFunctionCall("lz_chat_set_status(lz_chat_data.STATUS_ALLOCATED);", false); if ($CONFIG["gl_alloc_mode"] != ALLOCATION_MODE_ALL || !empty($USER->Browsers[0]->DesiredChatPartner)) { $USER->Browsers[0]->CreateChat($INTERNAL[$USER->Browsers[0]->DesiredChatPartner], $USER, true); } else { $run = 0; foreach ($INTLIST as $intid => $am) { $USER->Browsers[0]->CreateChat($INTERNAL[$intid], $USER, false, "", "", true, $run++ == 0); } } } else { if (!empty($_GET["acid"])) { $USER->AddFunctionCall("lz_chat_show_connected();", false); $pchatid = base64UrlDecode($_GET["acid"]); $result = queryDB(true, "SELECT * FROM `" . DB_PREFIX . DATABASE_VISITOR_CHATS . "` WHERE `visitor_id`='" . DBManager::RealEscape($USER->Browsers[0]->UserId) . "' AND `chat_id`='" . DBManager::RealEscape($pchatid) . "' AND (`exit` > " . (time() - 30) . " OR `exit`=0) LIMIT 1;"); if ($result && DBManager::GetRowCount($result) == 1) { $row = DBManager::FetchArray($result); if (!empty($row["waiting"])) { $posts = unserialize($row["queue_posts"]); foreach ($posts as $post) { $USER->AddFunctionCall("lz_chat_repost_from_queue('" . $post[0] . "');", false); } $USER->AddFunctionCall("lz_chat_data.QueuePostsAdded = true;", false); } } } if ($USER->Browsers[0]->IsMaxWaitingTime(true)) { displayDeclined(); return $USER; } $pdm = getPredefinedMessage($GROUPS[$USER->Browsers[0]->DesiredChatGroup]->PredefinedMessages, $USER != null ? $USER->Language : ""); if ($pdm != null && !empty($pdm->QueueMessage) && time() - $USER->Browsers[0]->FirstActive > $pdm->QueueMessageTime && !$USER->Browsers[0]->QueueMessageShown) { $USER->Browsers[0]->QueueMessageShown = true; if (empty($_GET["acid"])) { $USER->AddFunctionCall("lz_chat_add_system_text(99,'" . base64_encode($pdm->QueueMessage) . "');", false); } } if (empty($_GET["acid"])) { $USER->AddFunctionCall("lz_chat_show_queue_position(" . $chatPosition . "," . min($chatWaitingTime, 30) . ");", false); } $USER->Browsers[0]->CreateArchiveEntry(null, $USER); } } } } else { $action = $USER->Browsers[0]->GetMaxWaitingTimeAction(false); if ($action == "MESSAGE" || $action == "FORWARD" && !$USER->Browsers[0]->CreateAutoForward()) { $USER->Browsers[0]->InternalDecline($USER->Browsers[0]->InternalUser->SystemId); displayDeclined(); } else { if (!$USER->Browsers[0]->ArchiveCreated && !empty($USER->Browsers[0]->DesiredChatPartner)) { $USER->Browsers[0]->CreateChat($INTERNAL[$USER->Browsers[0]->DesiredChatPartner], $USER, true); } activeListen(); } } if ($USER->Browsers[0]->Status <= CHAT_STATUS_WAITING && empty($_POST["p_wls"])) { $USER->AddFunctionCall("lz_chat_show_waiting_links('" . base64_encode($wl = $GROUPS[$USER->Browsers[0]->DesiredChatGroup]->GetWaitingLinks($USER->Browsers[0]->Question, $DEFAULT_BROWSER_LANGUAGE)) . "');", false); } } else { displayFiltered(); } return $USER; }