public static function GetInstance() { if (self::$instance == null) { self::$instance = new self(); } return self::$instance; }
function setupChatViewForVisitor($thread, $level) { $visitSession = VisitSession::GetInstance()->GetVisitSessionById($thread['visitsessionid']); $page['agent'] = false; $page['visitor'] = true; $page['canpost'] = true; $nameisset = Resources::Get('chat.default.visitorname') != $visitSession['visitorname']; $page['displ1'] = $nameisset ? 'none' : 'inline'; $page['displ2'] = $nameisset ? 'inline' : 'none'; $page['level'] = $level; $page['ct_chatThreadId'] = $thread['threadid']; $page['ct_token'] = $thread['token']; $page['ct_visitor_name'] = $visitSession['visitorname']; $page['canChangeName'] = Visitor::getInstance()->canVisitorChangeName(); $page['ct_company_name'] = Settings::Get('company_name'); $page['ct_company_chatLogoURL'] = Settings::Get('logo'); $page['webimHost'] = Settings::Get('hosturl'); $page['send_shortcut'] = 'Enter'; $params = 'thread=' . $thread['threadid'] . '&token=' . $thread['token']; $page['selfLink'] = WEBIM_ROOT . '/client.php?' . $params . '&level=' . $level; $page['isOpera95'] = is_agent_opera95(); $page['displayrate'] = !empty($thread['rate']) ? 'none' : 'inline'; $page['rateList'] = explode('|', Resources::Get('chat.operator_rates')); if (!empty($res)) { foreach ($res as $k => $v) { $page[$k] = $v; } } $page['viewonly'] = '0'; return $page; }
$aDetps[] = array('value' => $nOrder, 'title' => $aDko[$nOrder]['option']); } $TML->assign('depts', $aDetps); //--------------------------------------- $TML->display('send-history-c.tpl'); } exit; } $eHistory = $history = ""; $lastid = -1; $output = Thread::getInstance()->GetMessages($threadid, "text", true, $lastid); foreach ($output as $msg) { $history .= $msg; $eHistory .= $msg; } $visitSession = VisitSession::GetInstance()->GetVisitSessionById($thread['visitsessionid']); $systemInfo = "Системная информация\nимя: " . $visitSession['visitorname'] . "\nсоздан: " . date('Y-m-d', $visitSession['created']) . "\nip: {$visitSession['ip']}\nбраузер: " . get_user_agent($visitSession['useragent']) . "\n\n"; $history = $systemInfo . $history; $subject = Resources::Get("mail.visitor.history.subject"); // отправке диалогов из мессенджера ------------ if ($dept && isset($aDko[$dept]['subject'])) { $subject = $aDko[$dept]['subject']; } $visitor_name = $visitSession['visitorname']; $body = Resources::Get("mail.visitor.history.body", array($visitor_name, $history)); // отправке диалогов из мессенджера if ($dept && ($feedback = feedbackAdd($dept, $visitor_name, $email_from, $body, 0))) { $body .= "\n" . '[[UCODE::{' . $feedback['uc'] . '},FID::{' . $feedback['id'] . '}]]'; } $webim_from_email = $email_from ? $email_from : Settings::Get("from_email"); $body = Resources::Get("mail.visitor.history.body", array($visitor_name, $history));
* * Все права защищены. (c) 2005-2009 ООО "ТОП". * Данное программное обеспечение и все сопутствующие материалы * предоставляются на условиях лицензии, доступной по адресу * http://webim.ru/license.html * */ require_once '../classes/functions.php'; require_once '../classes/class.thread.php'; require_once '../classes/class.operator.php'; require_once '../classes/class.visitsession.php'; require_once '../classes/class.visitedpage.php'; require_once '../classes/class.invitation.php'; $operator = Operator::getInstance()->GetLoggedOperator(); $pageId = verify_param('pageid', '/^([a-z0-9]{32})?$/', ''); if (empty($pageId)) { die('invalid or absent pageid'); } $visitSession = VisitSession::GetInstance()->GetVisitSessionByPageId($pageId); $remoteLevel = Browser::GetRemoteLevel($visitSession['useragent']); $thread = VisitedPage::GetInstance()->GetInvitationThread($pageId); if (empty($thread) || $thread['state'] == STATE_CLOSED) { $thread = Thread::getInstance()->CreateThread(WEBIM_CURRENT_LOCALE, STATE_INVITE, array('operatorfullname' => $operator['fullname'], 'operatorid' => $operator['operatorid'], 'visitsessionid' => $visitSession['visitsessionid'])); VisitSession::GetInstance()->UpdateVisitSession($visitSession['visitsessionid'], array('hasthread' => 1)); $introMessage = Resources::Get('invite.intro.message', array($visitSession['visitorname']), WEBIM_CURRENT_LOCALE); Thread::getInstance()->PostMessage($thread['threadid'], KIND_FOR_AGENT, $introMessage); $invitationId = Invitation::getInstance()->CreateInvitation($thread['threadid']); VisitedPage::GetInstance()->UpdateVisitedPage($pageId, array('invitationid' => $invitationId)); } header('Location: ' . WEBIM_ROOT . '/operator/agent.php?thread=' . $thread['threadid'] . '&token=' . $thread['token'] . '&level=' . $remoteLevel . '&force=false'); exit;
function visitorHasAccess($thread) { if ($thread == null) { return false; } $visitor = GetVisitorFromRequestAndSetCookie(); $visitSession = VisitSession::GetInstance()->GetVisitSessionById($thread['visitsessionid']); $token = isset($_REQUEST['token']) ? $_REQUEST['token'] : null; $res = $thread['token'] == $token && $visitSession['visitorid'] == $visitor['id']; return $res; }
private function sendVisitorLeft($thread) { $visitSession = VisitSession::GetInstance()->GetVisitSessionById($thread['visitsessionid']); $message = Resources::Get("chat.status.visitor.left", array($visitSession['visitorname']), $thread['locale']); Thread::getInstance()->PostMessage($thread['threadid'], KIND_FOR_AGENT, $message); }
* Все права защищены. (c) 2005-2009 ООО "ТОП". * Данное программное обеспечение и все сопутствующие материалы * предоставляются на условиях лицензии, доступной по адресу * http://webim.ru/license.html * */ require_once 'classes/common.php'; require_once 'classes/class.thread.php'; require_once 'classes/class.visitsession.php'; require_once 'classes/class.visitedpage.php'; require_once 'classes/class.invitation.php'; require_once 'classes/class.operator.php'; require_once 'classes/class.smartyclass.php'; $pageId = verify_param("pageid", "/^[a-z0-9]{32}\$/"); $isSecure = verify_param("issecure", "/^\\d+\$/", 0) == 1; $visitSession = VisitSession::GetInstance()->GetVisitSessionByPageId($pageId); $invitation = Invitation::GetInstance()->GetInvitationByVisitedPageId($pageId); $thread = Thread::getInstance()->GetThreadById($invitation['threadid']); $message = getInvitationMessage($invitation); // set invitation parameters $p_location = get_app_location(true, $isSecure); $p_theme = Browser::getCurrentTheme(); $p_message = $message . " <img src=\"{$p_location}/themes/{$p_theme}/images/invite/bullet5.gif\"/>"; $p_sound = $p_location . "/sounds/default_invite.wav"; $p_hideanim = $p_location . "/track.php?issecure={$isSecure}&"; $p_level = Browser::GetRemoteLevel($visitSession['useragent']); $p_threadid = $thread['threadid']; $p_token = $thread['token']; $p_pageid = $pageId; $p_lang = WEBIM_CURRENT_LOCALE; $p_invitation = getInvitationContent(getAvatar($thread['operatorid']), $message, $isSecure);
public function sendFirstMessageWithVisitorInfo($thread, $params = array()) { $visitSession = VisitSession::GetInstance()->GetVisitSessionById($thread['visitsessionid']); $firstPage = null; $visted_pages = ""; if (!session_id()) { session_start(); } if (isset($_SESSION['user_stats'])) { $stats = $_SESSION['user_stats']; } else { $stats = getUsersStatsFromCookie(); } if (isset($stats['visited_pages']) && is_array($stats['visited_pages'])) { if (count($stats['visited_pages']) > 0) { $firstPage = $stats['visited_pages'][0]; } $visted_pages = "\n" . Resources::Get("chat.visited_pages"); foreach ($stats['visited_pages'] as $vp) { $title = isset($_SESSION['titles'], $_SESSION['titles'][$vp['url']]) ? $_SESSION['titles'][$vp['url']] : ""; if (WEBIM_ENCODING != 'UTF-8') { $title = smarticonv('utf-8', WEBIM_ENCODING, $title); } if (empty($title)) { $title = Resources::Get("chat.visited_page.no_title"); } $visted_pages .= "\n" . Resources::Get("chat.visited_page", array($title, HTTP_PREFIX . $_SERVER['HTTP_HOST'] . $vp['url'], $vp['time'])); } } $openerText = self::formatOpenerWithTitle(); $message = Resources::Get(empty($openerText) ? 'chat.came.from.unknown' : 'chat.came.from', $openerText); $simple = "\n%PARAM%: %VALUE%"; $link = "\n%PARAM%: %VALUE% %URL%"; if (!empty($thread['departmentid'])) { $departmentid = $thread['departmentid']; $dep = MapperFactory::getMapper("DepartmentLocale")->getDepartmentLocale($departmentid, Resources::getCurrentLocale()); $message .= str_replace(array('%PARAM%', '%VALUE%'), array(Resources::Get('pending.table.head.department'), $dep['departmentname']), $simple); } if ($firstPage !== null) { if (!empty($firstPage['referrer'])) { $message .= str_replace(array('%PARAM%', '%VALUE%'), array(Resources::Get('chat.window.referrer'), parseReferrer($firstPage['referrer'], 'chat.window.referrer')), $simple); } if (!empty($firstPage['url'])) { $message .= str_replace(array('%PARAM%', '%VALUE%'), array(Resources::Get('chat.window.landingpage'), $firstPage['url']), $simple); } } $visitor_geodata = GeoIPLookup::getGeoDataByIP($visitSession['ip']); if (!empty($visitor_geodata)) { $message .= str_replace(array('%PARAM%', '%URL%', '%VALUE%'), array(Resources::Get('chat.window.geolocation'), "http://maps.google.com/maps?q=" . $visitor_geodata['lat'] . "," . $visitor_geodata['lng'], $visitor_geodata['city'] . ' ' . $visitor_geodata['country']), $link); } $message .= str_replace(array('%PARAM%', '%VALUE%'), array(Resources::Get('chat.window.browser'), get_user_agent($visitSession['useragent'])), $simple); $message .= str_replace(array('%PARAM%', '%VALUE%'), array(Resources::Get('chat.window.ip'), WEBIM_WHOIS_LINK . urlencode($visitSession['ip'])), $simple); if (!empty($visitSession['remotehost'])) { $message .= str_replace(array('%PARAM%', '%VALUE%'), array(Resources::Get('chat.window.remotehost'), $visitSession['remotehost']), $simple); } if (!empty($params['email'])) { $message .= str_replace(array('%PARAM%', '%VALUE%'), array(Resources::Get('chat.window.email'), $params['email']), $simple); } $message .= str_replace(array('%PARAM%', '%VALUE%'), array(Resources::Get('chat.window.fl_login'), $visitSession['fl_login']), $simple); $chats = Thread::getInstance()->CountNonEmptyThreads($visitSession['visitorid']); if ($chats > 0) { $message .= str_replace(array('%PARAM%', '%URL%', '%VALUE%'), array(Resources::Get('chat.window.chats'), HTTP_PREFIX . $_SERVER['HTTP_HOST'] . WEBIM_ROOT . '/operator/history.php?q=' . $visitSession['visitorid'], $chats), $link); } $message .= $visted_pages; Thread::getInstance()->PostMessage($thread['threadid'], KIND_FOR_AGENT, $message); }
case "poll": $showInvitation = false; default: // FIXME: Visited page can not be in chat if (!VisitedPage::GetInstance()->IsInChat($pageid)) { $nextState = INVITATION_CAN_BE_SENT; } break; } break; case INVITATION_REJECTED: case INVITATION_TIMEOUT: switch ($event) { case "left": setVisitedPageClosed($pageid); VisitSession::GetInstance()->UnsetVisitSession(); $nextState = INVITATION_MISSED; break; case "poll": $showInvitation = false; default: $nextState = INVITATION_CAN_BE_SENT; } break; case INVITATION_MISSED: break; } setNextState($nextState); if (isset($showInvitation)) { sendShowInvitation($showInvitation); }
function handleWithoutToken($threadid, $viewonly) { $TML = new SmartyClass(); $operator = Operator::getInstance()->GetLoggedOperator(); $remote_level = Browser::GetRemoteLevel($_SERVER['HTTP_USER_AGENT']); if ($remote_level != "ajaxed") { die("old browser is used, please update it"); } $thread = Thread::getInstance()->GetThreadById($threadid); if (!$thread || !isset($thread['token'])) { die("wrong thread"); } if ($viewonly && $operator['operatorid'] != $thread['operatorid']) { redirectToPageWithToken($thread, $viewonly, $remote_level); } $forcetake = verify_param("force", "/^true\$/", false); if ($forcetake) { ThreadProcessor::getInstance()->ProcessThread($thread['threadid'], 'operator_force_join', array("operatorid" => $operator["operatorid"])); redirectToPageWithToken($thread, null, $remote_level); } else { // is taken by another $visitSession = VisitSession::GetInstance()->GetVisitSessionById($thread['visitsessionid']); if ($thread['state'] != STATE_CLOSED && !empty($thread['operatorid']) && $operator['operatorid'] != $thread['operatorid'] && $operator['operatorid'] != $thread['nextoperatorid']) { $page = array('visitor' => $visitSession['visitorname'], 'agent' => $thread['operatorfullname'], 'force' => true, 'takelink' => $_SERVER['PHP_SELF'] . "?thread={$threadid}&force=true", 'viewlink' => $_SERVER['PHP_SELF'] . "?thread={$threadid}&viewonly=true", 'priority' => $thread['state'] == STATE_QUEUE_EXACT_OPERATOR || $thread['state'] == STATE_CHATTING_OPERATOR_BROWSER_CLOSED_REFRESHED); // TODO get rid of STATE_WAIT_ANOTHER_OPERATOR $TML->assign('link_arguments', "&thread={$threadid}"); $TML->assign('page', $page); $TML->display('confirm.tpl'); exit; } // is closed if ($thread['state'] == STATE_CLOSED) { $page = array('viewlink' => $_SERVER['PHP_SELF'] . "?thread=" . $threadid . "&viewonly=true", 'force' => false, 'thread_id' => $threadid, 'closed' => true); $TML->assign('link_arguments', "&thread={$threadid}"); $TML->assign('page', $page); $TML->display('confirm.tpl'); exit; } } ThreadProcessor::getInstance()->ProcessThread($thread['threadid'], 'operator_join', array('operatorid' => $operator['operatorid'])); redirectToPageWithToken($thread, $viewonly, $remote_level); }
*/ $TITLE_KEY = 'page.visit.title'; require_once '../classes/functions.php'; require_once '../classes/class.visitsession.php'; require_once '../classes/class.visitedpage.php'; require_once '../classes/class.pagination.php'; require_once '../classes/class.smartyclass.php'; require_once '../classes/class.geoiplookup.php'; $operator = Operator::getInstance()->GetLoggedOperator(); $visitSession = null; if (isset($_GET['visitsessionid'])) { $visitSession = VisitSession::GetInstance()->GetVisitSessionById($_GET['visitsessionid']); } elseif (isset($_GET['pageid'])) { $visitdpageid = verify_param("pageid", "/^[a-z0-9]{32}\$/"); $vistedpage = VisitedPage::GetInstance()->GetVisitedPageById($_GET['pageid']); $visitSession = VisitSession::GetInstance()->GetVisitSessionById($vistedpage['visitsessionid']); } if (empty($visitSession)) { die("Invalid or no visitsessionid or pageid"); } $visitedPages = VisitedPage::GetInstance()->enumVisitedPagesByVisitSessionId($visitSession['visitsessionid']); $landingPage = end($visitedPages); $exitPage = reset($visitedPages); $timeend = 0; $timestart = 0; foreach ($visitedPages as $k => $vp) { $timeend = $timeend == 0 ? $vp['updated'] : max($timeend, $vp['updated']); $timestart = $timestart == 0 ? $vp['opened'] : min($timestart, $vp['opened']); $visitedPages[$k]['sessionduration'] = $vp['updated'] - $vp['opened']; } $geodata = GeoIPLookup::getGeoDataByIP($visitSession['ip']);
$TML->assign('RAND', rand(1000, 9999)); $args = array(); foreach ($_GET as $key => $item) { if ($key != 'action') { $args[] = "{$key}={$item}"; } } $TML->assign('chaturi', "./?a=5" . join('&', $args)); $TML->assign('MAX_FILES', feedback::MAX_FILES); $TML->assign('u_token_key', $_SESSION['rand']); if ($has_errors) { echo "Error:{$errors[0]};{$errors['1']}" . ($errors[2] ? ';' . $errors[2] : ''); exit; } $visitSessionId = VisitSession::GetInstance()->updateCurrentOrCreateSession(); $params = array(); $params['visitsessionid'] = $visitSessionId; $params['lastpingvisitor'] = null; $params['offline'] = 1; $threads_count = MapperFactory::getMapper("Thread")->getNonEmptyThreadsCountByVisitorId($visitorid); $thread = Thread::getInstance()->CreateThread(WEBIM_CURRENT_LOCALE, STATE_CLOSED, $params); VisitSession::GetInstance()->UpdateVisitSession($visitSessionId, array('hasthread' => 1)); Thread::getInstance()->sendFirstMessageWithVisitorInfo($thread); Visitor::getInstance()->setVisitorNameCookie($visitor_name); $feedback = new feedback(); $uid = get_uid(false); $login = $_SESSION['webim_uname']; $email = $_SESSION['webim_email']; $feedback->Add($uid, $login, $email, $department, iconv("UTF-8", "WINDOWS-1251//IGNORE", $message), $attach); echo "Success: ok"; exit;
function GetVisitSessionByPageId($pageid) { $vistedpage = VisitedPage::GetInstance()->GetVisitedPageById($pageid); return VisitSession::GetInstance()->GetVisitSessionById($vistedpage['visitsessionid']); }
$referer_title = implode(":", $tokens); $_SESSION['titles'][$referer] = $referer_title; $_SESSION['current_page'] = array($referer, $referer_title); } else { unset($_SESSION['current_page']); } $visitor = GetVisitorFromRequestAndSetCookie(); if(WEBIM_ENCODING != 'UTF-8') { $referer_title = smarticonv('utf-8', WEBIM_ENCODING, $referer_title); } VisitSession::GetInstance()->setVisitSessionCurrentPage($visitor['id'], $referer, $referer_title); if($user_in_chat) { if(empty($referer_title)) { $referer_title = Resources::Get("chat.visited_page.no_title"); } $referer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : ""; if (empty($visitor)) { return; } Thread::getInstance()->SendVisitedPageForOpenThreads($visitor['id'], $referer, $referer_title); }
if (!empty($_REQUEST['name'])) { $newname = smarticonv('UTF-8', WEBIM_ENCODING, $_REQUEST['name']); Thread::getInstance()->RenameVisitor($thread, $newname); Visitor::getInstance()->setVisitorNameCookie($newname); } // $data = strtr(base64_encode($newname), '+/=', '-_, '); show_ok_result("rename"); } elseif ($act == "ping") { show_ok_result("ping"); } elseif ($act == "close") { if ($isvisitor) { ThreadProcessor::getInstance()->ProcessThread($thread['threadid'], 'visitor_close'); $visitor = GetVisitorFromRequestAndSetCookie(); $threads = MapperFactory::getMapper("Thread")->getOpenThreadsForVisitor($visitor['id']); if (count($threads) < 1) { VisitSession::GetInstance()->deleteVisitSessionCurrentPageFile($visitor['id']); } } elseif ($thread['operatorid'] == $operator['operatorid']) { ThreadProcessor::getInstance()->ProcessThread($thread['threadid'], 'operator_close'); } show_ok_result("closed"); } elseif ($act == "browser_unload") { // if ($isvisitor || $thread['operatorid'] == $operator['operatorid']) { // $obj->CloseThread($thread, $isvisitor); // } if ($isvisitor) { ThreadProcessor::getInstance()->ProcessThread($thread['threadid'], 'visitor_browser_unload'); } show_ok_result("closed"); } elseif ($act == 'rate') { if (!$isvisitor) {