mirror of
https://github.com/Mibew/java.git
synced 2025-01-22 17:40:35 +03:00
create special thread for left message
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@607 c66351dc-e62f-0410-b875-e3a5c0b9693f
This commit is contained in:
parent
f03fa806ab
commit
672fc56b46
@ -102,20 +102,15 @@ if( !isset($_GET['token']) || !isset($_GET['thread']) ) {
|
||||
}
|
||||
}
|
||||
|
||||
$extAddr = $_SERVER['REMOTE_ADDR'];
|
||||
if (isset($_SERVER['HTTP_X_FORWARDED_FOR']) &&
|
||||
$_SERVER['HTTP_X_FORWARDED_FOR'] != $_SERVER['REMOTE_ADDR']) {
|
||||
$extAddr = $_SERVER['REMOTE_ADDR'].' ('.$_SERVER['HTTP_X_FORWARDED_FOR'].')';
|
||||
}
|
||||
$remoteHost = get_remote_host();
|
||||
$userbrowser = $_SERVER['HTTP_USER_AGENT'];
|
||||
$remoteHost = isset($_SERVER['REMOTE_HOST']) ? $_SERVER['REMOTE_HOST'] : $extAddr;
|
||||
|
||||
$link = connect();
|
||||
if(!check_connections_from_remote($remoteHost, $link)) {
|
||||
mysql_close($link);
|
||||
die("number of connections from your IP is exceeded, try again later");
|
||||
}
|
||||
$thread = create_thread($groupid,$visitor['name'], $remoteHost, $referer,$current_locale,$visitor['id'], $userbrowser,$link);
|
||||
$thread = create_thread($groupid,$visitor['name'], $remoteHost, $referer,$current_locale,$visitor['id'], $userbrowser,$state_loading,$link);
|
||||
$_SESSION['threadid'] = $thread['threadid'];
|
||||
|
||||
if( $referer ) {
|
||||
|
@ -26,6 +26,24 @@ require_once('libs/expand.php');
|
||||
$errors = array();
|
||||
$page = array();
|
||||
|
||||
function store_message($name, $email, $info, $message) {
|
||||
global $state_left, $current_locale, $kind_for_agent, $kind_user;
|
||||
$groupid = 0;
|
||||
$remoteHost = get_remote_host();
|
||||
$userbrowser = $_SERVER['HTTP_USER_AGENT'];
|
||||
$visitor = visitor_from_request();
|
||||
$link = connect();
|
||||
$thread = create_thread($groupid,$name,$remoteHost,"",$current_locale,$visitor['id'], $userbrowser,$state_left,$link);
|
||||
if($email) {
|
||||
post_message_($thread['threadid'],$kind_for_agent,getstring2('chat.visitor.email',array($email)),$link);
|
||||
}
|
||||
if($info) {
|
||||
post_message_($thread['threadid'],$kind_for_agent,getstring2('chat.visitor.info',array($info)),$link);
|
||||
}
|
||||
post_message_($thread['threadid'],$kind_user,$message,$link,$name);
|
||||
mysql_close($link);
|
||||
}
|
||||
|
||||
$email = getparam('email');
|
||||
$visitor_name = getparam('name');
|
||||
$message = getparam('message');
|
||||
@ -69,6 +87,8 @@ if(!locale_exists($message_locale)) {
|
||||
$message_locale = $home_locale;
|
||||
}
|
||||
|
||||
store_message($visitor_name, $email, $info, $message);
|
||||
|
||||
$subject = getstring2_("leavemail.subject", array($visitor_name), $message_locale);
|
||||
$body = getstring2_("leavemail.body", array($visitor_name,$email,$message,$info ? "$info\n" : ""), $message_locale);
|
||||
|
||||
|
@ -30,6 +30,7 @@ $state_waiting = 1;
|
||||
$state_chatting = 2;
|
||||
$state_closed = 3;
|
||||
$state_loading = 4;
|
||||
$state_left = 5;
|
||||
|
||||
$kind_user = 1;
|
||||
$kind_agent = 2;
|
||||
@ -523,11 +524,10 @@ function thread_by_id($id) {
|
||||
return $thread;
|
||||
}
|
||||
|
||||
function create_thread($groupid,$username,$remoteHost,$referer,$lang,$userid,$userbrowser,$link) {
|
||||
global $state_loading;
|
||||
function create_thread($groupid,$username,$remoteHost,$referer,$lang,$userid,$userbrowser,$initialState,$link) {
|
||||
$query = sprintf(
|
||||
"insert into chatthread (userName,userid,ltoken,remote,referer,lrevision,locale,userAgent,dtmcreated,dtmmodified,istate".($groupid?",groupid":"").") values ".
|
||||
"('%s','%s',%s,'%s','%s',%s,'%s','%s',CURRENT_TIMESTAMP,CURRENT_TIMESTAMP,$state_loading".($groupid?",$groupid":"").")",
|
||||
"('%s','%s',%s,'%s','%s',%s,'%s','%s',CURRENT_TIMESTAMP,CURRENT_TIMESTAMP,$initialState".($groupid?",$groupid":"").")",
|
||||
mysql_real_escape_string($username, $link),
|
||||
mysql_real_escape_string($userid, $link),
|
||||
next_token(),
|
||||
@ -556,14 +556,14 @@ function do_take_thread($threadid,$operatorId,$operatorName) {
|
||||
}
|
||||
|
||||
function reopen_thread($threadid) {
|
||||
global $state_queue,$state_loading,$state_waiting,$state_chatting,$state_closed,$kind_events;
|
||||
global $state_queue,$state_loading,$state_waiting,$state_chatting,$state_closed,$state_left,$kind_events;
|
||||
$link = connect();
|
||||
$thread = thread_by_id_($threadid, $link);
|
||||
|
||||
if( !$thread )
|
||||
return FALSE;
|
||||
|
||||
if( $thread['istate'] == $state_closed )
|
||||
if( $thread['istate'] == $state_closed || $thread['istate'] == $state_left )
|
||||
return FALSE;
|
||||
|
||||
if( $thread['istate'] != $state_chatting && $thread['istate'] != $state_queue && $thread['istate'] != $state_loading ) {
|
||||
@ -631,13 +631,13 @@ function check_for_reassign($thread,$operator) {
|
||||
}
|
||||
|
||||
function check_connections_from_remote($remote,$link) {
|
||||
global $settings, $state_closed;
|
||||
global $settings, $state_closed, $state_left;
|
||||
if($settings['max_connections_from_one_host'] == 0) {
|
||||
return true;
|
||||
}
|
||||
$result = select_one_row(
|
||||
"select count(*) as opened from chatthread ".
|
||||
"where remote = '". mysql_real_escape_string($remote, $link)."' AND istate <> $state_closed", $link );
|
||||
"where remote = '". mysql_real_escape_string($remote, $link)."' AND istate <> $state_closed AND istate <> $state_left", $link );
|
||||
if($result && isset($result['opened'])) {
|
||||
return $result['opened'] < $settings['max_connections_from_one_host'];
|
||||
}
|
||||
@ -669,4 +669,13 @@ function visitor_from_request() {
|
||||
return array( 'id' => $userId, 'name' => $userName );
|
||||
}
|
||||
|
||||
function get_remote_host() {
|
||||
$extAddr = $_SERVER['REMOTE_ADDR'];
|
||||
if (isset($_SERVER['HTTP_X_FORWARDED_FOR']) &&
|
||||
$_SERVER['HTTP_X_FORWARDED_FOR'] != $_SERVER['REMOTE_ADDR']) {
|
||||
$extAddr = $_SERVER['REMOTE_ADDR'].' ('.$_SERVER['HTTP_X_FORWARDED_FOR'].')';
|
||||
}
|
||||
return isset($_SERVER['REMOTE_HOST']) ? $_SERVER['REMOTE_HOST'] : $extAddr;
|
||||
}
|
||||
|
||||
?>
|
@ -36,7 +36,8 @@ $threadstate_to_string = array(
|
||||
$state_waiting => "prio",
|
||||
$state_chatting => "chat",
|
||||
$state_closed => "closed",
|
||||
$state_loading => "wait"
|
||||
$state_loading => "wait",
|
||||
$state_left => "closed"
|
||||
);
|
||||
|
||||
$threadstate_key = array(
|
||||
@ -111,7 +112,7 @@ function thread_to_xml($thread,$link) {
|
||||
}
|
||||
|
||||
function print_pending_threads($groupids,$since) {
|
||||
global $webim_encoding, $settings, $state_closed;
|
||||
global $webim_encoding, $settings, $state_closed, $state_left;
|
||||
$link = connect();
|
||||
|
||||
$revision = $since;
|
||||
@ -120,7 +121,7 @@ function print_pending_threads($groupids,$since) {
|
||||
"unix_timestamp(dtmmodified), lrevision, istate, remote, nextagent, agentId, userid, shownmessageid, userAgent, (select vclocalname from chatgroup where chatgroup.groupid = chatthread.groupid) as groupname ".
|
||||
"from chatthread where lrevision > $since ".
|
||||
($since <= 0
|
||||
? "AND istate <> $state_closed "
|
||||
? "AND istate <> $state_closed AND istate <> $state_left "
|
||||
: "").
|
||||
($settings['enablegroups'] == '1'
|
||||
? "AND (groupid is NULL".($groupids
|
||||
|
Loading…
Reference in New Issue
Block a user