mirror of
				https://github.com/Mibew/tray.git
				synced 2025-10-03 00:03:34 +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']; | 		$remoteHost = get_remote_host(); | ||||||
| 		if (isset($_SERVER['HTTP_X_FORWARDED_FOR']) && |  | ||||||
| 		          $_SERVER['HTTP_X_FORWARDED_FOR'] != $_SERVER['REMOTE_ADDR']) { |  | ||||||
| 			$extAddr = $_SERVER['REMOTE_ADDR'].' ('.$_SERVER['HTTP_X_FORWARDED_FOR'].')'; |  | ||||||
| 		} |  | ||||||
| 		$userbrowser = $_SERVER['HTTP_USER_AGENT']; | 		$userbrowser = $_SERVER['HTTP_USER_AGENT']; | ||||||
| 		$remoteHost = isset($_SERVER['REMOTE_HOST']) ? $_SERVER['REMOTE_HOST'] : $extAddr; |  | ||||||
| 
 | 
 | ||||||
| 		$link = connect(); | 		$link = connect(); | ||||||
| 		if(!check_connections_from_remote($remoteHost, $link)) { | 		if(!check_connections_from_remote($remoteHost, $link)) { | ||||||
| 			mysql_close($link); | 			mysql_close($link); | ||||||
| 			die("number of connections from your IP is exceeded, try again later"); | 			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']; | 		$_SESSION['threadid'] = $thread['threadid']; | ||||||
| 		 | 		 | ||||||
| 		if( $referer ) { | 		if( $referer ) { | ||||||
|  | |||||||
| @ -26,6 +26,24 @@ require_once('libs/expand.php'); | |||||||
| $errors = array(); | $errors = array(); | ||||||
| $page = 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'); | $email = getparam('email'); | ||||||
| $visitor_name = getparam('name'); | $visitor_name = getparam('name'); | ||||||
| $message = getparam('message'); | $message = getparam('message'); | ||||||
| @ -69,6 +87,8 @@ if(!locale_exists($message_locale)) { | |||||||
| 	$message_locale = $home_locale; | 	$message_locale = $home_locale; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | store_message($visitor_name, $email, $info, $message); | ||||||
|  | 
 | ||||||
| $subject = getstring2_("leavemail.subject", array($visitor_name), $message_locale); | $subject = getstring2_("leavemail.subject", array($visitor_name), $message_locale); | ||||||
| $body = getstring2_("leavemail.body", array($visitor_name,$email,$message,$info ? "$info\n" : ""), $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_chatting = 2; | ||||||
| $state_closed = 3; | $state_closed = 3; | ||||||
| $state_loading = 4; | $state_loading = 4; | ||||||
|  | $state_left = 5; | ||||||
| 
 | 
 | ||||||
| $kind_user = 1; | $kind_user = 1; | ||||||
| $kind_agent = 2; | $kind_agent = 2; | ||||||
| @ -523,11 +524,10 @@ function thread_by_id($id) { | |||||||
| 	return $thread; | 	return $thread; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| function create_thread($groupid,$username,$remoteHost,$referer,$lang,$userid,$userbrowser,$link) { | function create_thread($groupid,$username,$remoteHost,$referer,$lang,$userid,$userbrowser,$initialState,$link) { | ||||||
| 	global $state_loading; |  | ||||||
| 	$query = sprintf( | 	$query = sprintf( | ||||||
| 		 "insert into chatthread (userName,userid,ltoken,remote,referer,lrevision,locale,userAgent,dtmcreated,dtmmodified,istate".($groupid?",groupid":"").") values ". | 		 "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($username, $link), | ||||||
| 			mysql_real_escape_string($userid, $link), | 			mysql_real_escape_string($userid, $link), | ||||||
| 			next_token(), | 			next_token(), | ||||||
| @ -556,14 +556,14 @@ function do_take_thread($threadid,$operatorId,$operatorName) { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| function reopen_thread($threadid) { | 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(); | 	$link = connect(); | ||||||
| 	$thread = thread_by_id_($threadid, $link); | 	$thread = thread_by_id_($threadid, $link); | ||||||
| 
 | 
 | ||||||
| 	if( !$thread ) | 	if( !$thread ) | ||||||
| 		return FALSE; | 		return FALSE; | ||||||
| 
 | 
 | ||||||
| 	if( $thread['istate'] == $state_closed ) | 	if( $thread['istate'] == $state_closed || $thread['istate'] == $state_left ) | ||||||
| 		return FALSE; | 		return FALSE; | ||||||
| 
 | 
 | ||||||
| 	if( $thread['istate'] != $state_chatting && $thread['istate'] != $state_queue && $thread['istate'] != $state_loading ) { | 	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) { | 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) { | 	if($settings['max_connections_from_one_host'] == 0) { | ||||||
| 		return true; | 		return true; | ||||||
| 	} | 	} | ||||||
| 	$result = select_one_row( | 	$result = select_one_row( | ||||||
| 			"select count(*) as opened from chatthread ". | 			"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'])) { | 	if($result && isset($result['opened'])) { | ||||||
| 		return $result['opened'] < $settings['max_connections_from_one_host']; | 		return $result['opened'] < $settings['max_connections_from_one_host']; | ||||||
| 	} | 	} | ||||||
| @ -669,4 +669,13 @@ function visitor_from_request() { | |||||||
| 	return array( 'id' => $userId, 'name' => $userName ); | 	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_waiting => "prio", | ||||||
| 	$state_chatting => "chat", | 	$state_chatting => "chat", | ||||||
| 	$state_closed => "closed", | 	$state_closed => "closed", | ||||||
| 	$state_loading => "wait" | 	$state_loading => "wait", | ||||||
|  | 	$state_left => "closed" | ||||||
| ); | ); | ||||||
| 
 | 
 | ||||||
| $threadstate_key = array( | $threadstate_key = array( | ||||||
| @ -111,7 +112,7 @@ function thread_to_xml($thread,$link) { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| function print_pending_threads($groupids,$since) { | function print_pending_threads($groupids,$since) { | ||||||
| 	global $webim_encoding, $settings, $state_closed; | 	global $webim_encoding, $settings, $state_closed, $state_left; | ||||||
| 	$link = connect(); | 	$link = connect(); | ||||||
| 
 | 
 | ||||||
| 	$revision = $since; | 	$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 ". | 			 "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 ". | 			 "from chatthread where lrevision > $since ". | ||||||
| 			 ($since <= 0  | 			 ($since <= 0  | ||||||
| 			 		? "AND istate <> $state_closed "  | 			 		? "AND istate <> $state_closed AND istate <> $state_left "  | ||||||
| 			 		: ""). | 			 		: ""). | ||||||
| 			 ($settings['enablegroups'] == '1' | 			 ($settings['enablegroups'] == '1' | ||||||
| 			 		? "AND (groupid is NULL".($groupids  | 			 		? "AND (groupid is NULL".($groupids  | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user