コード例 #1
0
 static function getInstance()
 {
     if (self::$instance == NULL) {
         self::$instance = new ThreadProcessor();
     }
     return self::$instance;
 }
コード例 #2
0
 public static function getInstance()
 {
     if (self::$instance == null) {
         self::$instance = new self();
     }
     return self::$instance;
 }
コード例 #3
0
ファイル: client.php プロジェクト: kapai69/fl-ru-damp
function tryToGetExistingThread()
{
    $threadid = verify_param('thread', "/^\\d{1,8}\$/", '');
    $thread = null;
    if (empty($threadid)) {
        $visitor = GetVisitorFromRequestAndSetCookie();
        $thread = MapperFactory::getMapper('Thread')->getActiveThreadForVisitor($visitor['id']);
    } else {
        $thread = Thread::getInstance()->GetThreadById($threadid);
        $token = verify_param('token', "/^\\d{1,8}\$/");
        if ($token != $thread['token'] || $thread['state'] == STATE_CLOSED) {
            $thread = null;
        }
    }
    if (!empty($thread) && (visitorHasAccess($thread) || empty($threadid))) {
        ThreadProcessor::getInstance()->ProcessThread($thread['threadid'], 'ping_visitor');
        $thread = Thread::getInstance()->GetThreadById($thread['threadid']);
        if (empty($thread) || $thread['state'] == STATE_CLOSED) {
            $thread = null;
        }
    } else {
        $thread = null;
    }
    return $thread;
}
コード例 #4
0
ファイル: update.php プロジェクト: Nikitian/fl-ru-damp
 * 
 * Данный файл является частью проекта Веб Мессенджер.
 * 
 * Все права защищены. (c) 2005-2009 ООО "ТОП".
 * Данное программное обеспечение и все сопутствующие материалы
 * предоставляются на условиях лицензии, доступной по адресу
 * http://webim.ru/license.html
 * 
 */
require_once '../classes/functions.php';
require_once '../classes/class.operator.php';
require_once '../classes/class.thread.php';
require_once '../classes/class.threadprocessor.php';
require_once '../classes/class.eventcontroller.php';
require_once '../classes/events_register.php';
ThreadProcessor::getInstance()->ProcessOpenThreads();
$o = Operator::getInstance();
$operator = $o->GetLoggedOperator(false);
$f = "i" . "s" . "Op" . "er" . "a" . "to" . "rsL" . "im" . "it" . "E" . "x" . "ce" . "ed" . "ed";
if ($o->{$f}()) {
    die;
}
$status = verify_param("status", "/^\\d{1,9}\$/", OPERATOR_STATUS_ONLINE);
EventController::getInstance()->dispatchEvent(EventController::EVENT_OPERATOR_STATUS, array($operator));
if ($status != 0) {
    $since = verify_param("since", "/^\\d{1,9}\$/", 0);
    $xml = Thread::getInstance()->buildPendingThreadsXml($since, $operator);
    Browser::SendXmlHeaders();
    echo $xml;
}
exit;
コード例 #5
0
require_once '../classes/class.smartyclass.php';
$TML = new SmartyClass();
$operator = Operator::getInstance()->GetLoggedOperator();
$threadid = verify_param("thread", "/^\\d{1,8}\$/");
$token = verify_param("token", "/^\\d{1,8}\$/");
$thread = Thread::getInstance()->GetThreadById($threadid);
$visitSession = VisitSession::GetInstance()->GetVisitSessionById($thread['visitsessionid']);
$TML->assign('visit_session', $visitSession);
if (!$thread || !isset($thread['token']) || $token != $thread['token']) {
    die("wrong thread");
}
$nextid = verify_param("nextoperatorid", "/^\\d{1,8}\$/");
$nextdepartmentid = verify_param("nextdepartmentid", "/^\\d{1,8}\$/");
$page = array();
if (!empty($nextid)) {
    $nextOperator = Operator::getInstance()->GetOperatorById($nextid);
    $TML->assign('nextoperator', $nextOperator);
}
if (!empty($nextdepartmentid)) {
    $nextdepartment = Department::getInstance()->getById($nextdepartmentid, Resources::getCurrentLocale());
    $TML->assign('nextdepartment', $nextdepartment);
}
$errors = array();
ThreadProcessor::getInstance()->ProcessThread($threadid, 'redirect', array('nextoperatorid' => $nextid, 'nextdepartmentid' => $nextdepartmentid, 'operator' => Operator::getInstance()->GetLoggedOperator()));
$TML->assign('page_settings', $page);
if (count($errors) > 0) {
    $TML->assign('errors', $errors);
    $TML->display('chat_error.tpl');
} else {
    $TML->display('redirected.tpl');
}
コード例 #6
0
ファイル: class.thread.php プロジェクト: Nikitian/fl-ru-damp
 function SendVisitedPageForOpenThreads($visitorid, $page, $title)
 {
     if (empty($page)) {
         return;
     }
     $threads = MapperFactory::getMapper("Thread")->getOpenThreadsForVisitor($visitorid);
     foreach ($threads as $thread) {
         $message = Resources::Get("chat.client.visited.page", array($title, $page), $thread['locale']);
         $this->PostMessage($thread['threadid'], KIND_FOR_AGENT, $message);
         ThreadProcessor::getInstance()->ProcessThread($thread['threadid'], 'idle');
     }
 }
コード例 #7
0
<?php

/* 
 * 
 * Данный файл является частью проекта Веб Мессенджер.
 * 
 * Все права защищены. (c) 2005-2009 ООО "ТОП".
 * Данное программное обеспечение и все сопутствующие материалы
 * предоставляются на условиях лицензии, доступной по адресу
 * http://webim.ru/license.html
 * 
 */
EventController::getInstance()->addEventListener(EventController::EVENT_OPERATOR_STATUS, array(Operator::getInstance(), "UpdateOperatorStatus"));
EventController::getInstance()->addEventListener(EventController::EVENT_OPERATOR_STATUS, array(Operator::getInstance(), "updateOperatorOnlineStats"));
EventController::getInstance()->addEventListener(EventController::EVENT_OPERATOR_PING, array(Operator::getInstance(), "updateOperatorOnlineStatsForThread"));
EventController::getInstance()->addEventListener(EventController::EVENT_OPERATOR_PING, array(ThreadProcessor::getInstance(), "ProcessThread"));
コード例 #8
0
ファイル: track.php プロジェクト: Nikitian/fl-ru-damp
function notifyOperatorOnHideInvitation($pageid, $event)
{
    $invitation = Invitation::GetInstance()->GetInvitationByVisitedPageId($pageid);
    $threadid = $invitation['threadid'];
    if (!empty($threadid)) {
        $reasonText = null;
        if ($event == "reject") {
            $reasonText = Resources::Get('invite.visitor.closed.invitation', array(), WEBIM_CURRENT_LOCALE);
        } elseif ($event == "timeout") {
            $reasonText = Resources::Get('invite.invitation.timout', array(), WEBIM_CURRENT_LOCALE);
        } elseif ($event == "left") {
            $reasonText = Resources::Get('invite.window.closed', array(), WEBIM_CURRENT_LOCALE);
        }
        if (!empty($reasonText)) {
            ThreadProcessor::GetInstance()->ProcessThread($threadid, 'visitor_invite_close', array('message' => $reasonText));
        }
    }
}
コード例 #9
0
ファイル: agent.php プロジェクト: notUserDeveloper/fl-ru-damp
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);
}
コード例 #10
0
        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) {
        show_error("visitor-only operation");
    }
    $rate = verify_param("rate", "/^-?\\d{1,9}\$/", "0");
    Thread::getInstance()->RateOperator($thread, $rate);
    show_ok_result("rate");
} elseif ($act == "contacts") {
    $name = !empty($_REQUEST['name']) ? smarticonv("UTF-8", WEBIM_ENCODING, $_REQUEST['name']) : "";
    $email = !empty($_REQUEST['email']) ? smarticonv("UTF-8", WEBIM_ENCODING, $_REQUEST['email']) : "";
    Thread::getInstance()->PostMessage($thread['threadid'], KIND_INFO, Resources::Get('contacts.submitted', array($name, $email)));
    updateContacts($name, $email, $phone, $threadid, $thread['visitsessionid']);
    show_ok_result("contacts");