public static function GetInstance()
 {
     if (self::$instance == null) {
         self::$instance = new self();
     }
     return self::$instance;
 }
Example #2
0
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;
}
Example #3
0
            $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));
Example #4
0
 * 
 * Все права защищены. (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);
 }
Example #7
0
 * Все права защищены. (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);
Example #8
0
 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);
 }
Example #9
0
            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);
}
Example #10
0
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}&amp;force=true", 'viewlink' => $_SERVER['PHP_SELF'] . "?thread={$threadid}&amp;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 . "&amp;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);
}
Example #11
0
 */
$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']);
Example #12
0
$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']);
 }
Example #14
0
	  $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);
	}
	
Example #15
0
    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) {