mirror of
				https://github.com/Mibew/java.git
				synced 2025-10-31 02:26:00 +03:00 
			
		
		
		
	propagate typing notifications on server
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@69 c66351dc-e62f-0410-b875-e3a5c0b9693f
This commit is contained in:
		
							parent
							
								
									5e242414e6
								
							
						
					
					
						commit
						4493a47848
					
				| @ -28,6 +28,8 @@ $dbtables = array( | ||||
| 		"locale" => "varchar(8)", | ||||
| 		"lastpinguser" => "datetime DEFAULT 0", | ||||
| 		"lastpingagent" => "datetime DEFAULT 0", | ||||
| 		"userTyping" => "int DEFAULT 0", | ||||
| 		"agentTyping" => "int DEFAULT 0", | ||||
| 	), | ||||
| 
 | ||||
| 	"chatmessage" => array( | ||||
| @ -57,7 +59,7 @@ $dbtables = array( | ||||
| $memtables = array(); | ||||
| 
 | ||||
| $dbtables_can_update = array( | ||||
| 	"chatthread" => array("agentId"), | ||||
| 	"chatthread" => array("agentId", "userTyping", "agentTyping"), | ||||
| 	"chatmessage" => array("agentId"), | ||||
| ); | ||||
| 
 | ||||
|  | ||||
| @ -72,6 +72,14 @@ if($act == "createdb") { | ||||
| 			runsql("update chatthread,chatoperator set agentId = operatorid where agentId = 0 AND (vclocalename = agentName OR vccommonname = agentName)", $link);  | ||||
| 		} | ||||
| 
 | ||||
| 		if( in_array("chatthread.agentTyping", $absent) ) { | ||||
| 			runsql("ALTER TABLE chatthread ADD agentTyping int DEFAULT 0", $link); | ||||
| 		} | ||||
| 		 | ||||
| 		if( in_array("chatthread.userTyping", $absent) ) { | ||||
| 			runsql("ALTER TABLE chatthread ADD userTyping int DEFAULT 0", $link); | ||||
| 		} | ||||
| 
 | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -128,14 +128,15 @@ function get_messages($threadid,$meth,$isuser,&$lastid) { | ||||
| 	return $messages; | ||||
| }  | ||||
| 
 | ||||
| function print_thread_messages($threadid, $token, $lastid, $isuser,$format) { | ||||
| 	global $webim_encoding, $webimroot;	 | ||||
| function print_thread_messages($thread, $token, $lastid, $isuser,$format) { | ||||
| 	global $webim_encoding, $webimroot; | ||||
| 	$threadid = $thread['threadid']; | ||||
| 
 | ||||
| 	if( $format == "xml" ) { | ||||
|         $output = get_messages($threadid,"xml",$isuser,$lastid); | ||||
| 
 | ||||
| 		start_xml_output(); | ||||
| 		print("<thread lastid=\"$lastid\">");
 | ||||
| 		print("<thread lastid=\"$lastid\" typing=\"".$thread[$isuser?"agentTyping":"userTyping"]."\">"); | ||||
| 		foreach( $output as $msg ) { | ||||
| 			print $msg; | ||||
| 		} | ||||
| @ -270,30 +271,24 @@ function update_thread_access($threadid, $params, $link) { | ||||
| 		 "where threadid = ".$threadid,$link); | ||||
| } | ||||
| 
 | ||||
| function get_access_time($threadid, $isuser, $link) { | ||||
| 	return select_one_row(sprintf( | ||||
| 		 "select unix_timestamp(%s) as lastping, ". | ||||
| 		 "unix_timestamp(CURRENT_TIMESTAMP) as current ". | ||||
| 		 "from chatthread where threadid = %s", | ||||
| 		$isuser ? "lastpinguser" : "lastpingagent", | ||||
| 		$threadid), $link); | ||||
| } | ||||
| 
 | ||||
| function ping_thread($thread, $isuser,$istyping) { | ||||
| 	global $kind_for_agent, $state_chatting, $state_waiting, $kind_conn, $connection_timeout; | ||||
| 	$link = connect(); | ||||
| 	$params = array(($isuser ? "lastpinguser" : "lastpingagent") => "CURRENT_TIMESTAMP" ); | ||||
| 
 | ||||
| 	$access = get_access_time($thread['threadid'], !$isuser, $link); | ||||
|  	if( $access['lastping'] > 0 && abs($access['current']-$access['lastping']) > $connection_timeout ) { | ||||
| 	$params = array(($isuser ? "lastpinguser" : "lastpingagent") => "CURRENT_TIMESTAMP", | ||||
| 					($isuser ? "userTyping" : "agentTyping") => ($istyping? "1" : "0") ); | ||||
| 	 | ||||
| 	$lastping = $thread[$isuser ? "lpagent" : "lpuser"]; | ||||
| 	$current = $thread['current']; | ||||
| 	 | ||||
|  	if( $lastping > 0 && abs($current-$lastping) > $connection_timeout ) { | ||||
| 		$params[$isuser ? "lastpingagent" : "lastpinguser"] = "0"; | ||||
| 		if( !$isuser ) { | ||||
| 			$message_to_post = getstring_("chat.status.user.dead", $thread['locale']); | ||||
| 			post_message_($thread['threadid'],$kind_for_agent,$message_to_post,$link,null,$access['lastping']+$connection_timeout); | ||||
| 			post_message_($thread['threadid'],$kind_for_agent,$message_to_post,$link,null,$lastping+$connection_timeout); | ||||
| 		} else if( $thread['istate'] == $state_chatting ) { | ||||
| 
 | ||||
| 			$message_to_post = getstring_("chat.status.operator.dead", $thread['locale']); | ||||
| 			post_message_($thread['threadid'],$kind_conn,$message_to_post,$link,null,$access['lastping']+$connection_timeout); | ||||
| 			post_message_($thread['threadid'],$kind_conn,$message_to_post,$link,null,$lastping+$connection_timeout); | ||||
| 			$params['istate'] = $state_waiting; | ||||
| 			commit_thread($thread['threadid'], $params, $link); | ||||
| 			mysql_close($link); | ||||
| @ -343,6 +338,19 @@ function close_thread($thread,$isuser) { | ||||
| 	post_message($thread['threadid'], $kind_events, $message); | ||||
| } | ||||
| 
 | ||||
| function thread_by_id_($id,$link) { | ||||
| 	return select_one_row("select threadid,userName,agentName,agentId,lrevision,istate,ltoken,userTyping,agentTyping". | ||||
| 			",remote,referer,locale,unix_timestamp(lastpinguser) as lpuser,unix_timestamp(lastpingagent) as lpagent, unix_timestamp(CURRENT_TIMESTAMP) as current". | ||||
| 			" from chatthread where threadid = ". $id, $link ); | ||||
| } | ||||
| 
 | ||||
| function thread_by_id($id) { | ||||
| 	$link = connect(); | ||||
| 	$thread = thread_by_id_($id,$link); | ||||
| 	mysql_close($link); | ||||
| 	return $thread; | ||||
| } | ||||
| 
 | ||||
| function create_thread($username,$remoteHost,$referer,$lang) { | ||||
| 	$link = connect(); | ||||
| 
 | ||||
| @ -359,7 +367,7 @@ function create_thread($username,$remoteHost,$referer,$lang) { | ||||
| 	perform_query($query,$link); | ||||
| 	$id = mysql_insert_id($link); | ||||
| 
 | ||||
| 	$newthread = select_one_row("select * from chatthread where threadid = ". $id, $link ); | ||||
| 	$newthread = thread_by_id_($id,$link); | ||||
| 	mysql_close($link); | ||||
| 	return $newthread; | ||||
| } | ||||
| @ -438,13 +446,6 @@ function check_for_reassign($thread,$operator) { | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| function thread_by_id($id) { | ||||
| 	$link = connect(); | ||||
| 	$thread = select_one_row("select * from chatthread where threadid = ". $id, $link ); | ||||
| 	mysql_close($link); | ||||
| 	return $thread; | ||||
| } | ||||
| 
 | ||||
| function visitor_from_request() { | ||||
| 	global $namecookie; | ||||
| 	$userName = isset($_COOKIE[$namecookie]) ? $_COOKIE[$namecookie] : getstring("chat.default.username"); | ||||
|  | ||||
| @ -49,7 +49,7 @@ function thread_to_xml($thread) { | ||||
| 
 | ||||
| 	$result .= " canopen=\"true\""; | ||||
| 
 | ||||
| 	$result .= " state=\"$state\">";
 | ||||
| 	$result .= " state=\"$state\" typing=\"".$thread['userTyping']."\">"; | ||||
| 	$result .= "<name>".htmlspecialchars(htmlspecialchars(get_user_name($thread['userName'])))."</name>"; | ||||
| 	$result .= "<addr>".htmlspecialchars(htmlspecialchars($thread['remote']))."</addr>"; | ||||
| 	$result .= "<agent>".htmlspecialchars(htmlspecialchars($threadoperator))."</agent>"; | ||||
| @ -66,7 +66,7 @@ function print_pending_threads($since) { | ||||
| 
 | ||||
| 	$revision = $since; | ||||
| 	$output = array(); | ||||
| 	$query = "select threadid, userName, agentName, unix_timestamp(dtmcreated), ". | ||||
| 	$query = "select threadid, userName, agentName, unix_timestamp(dtmcreated), userTyping, ". | ||||
| 			 "unix_timestamp(dtmmodified), lrevision, istate, remote ". | ||||
| 			 "from chatthread where lrevision > $since ORDER BY threadid"; | ||||
| 	$result = mysql_query($query,$link) or die(' Query failed: ' .mysql_error().": ".$query); | ||||
|  | ||||
| @ -40,7 +40,7 @@ if( !$isuser && $act != "rename" ) { | ||||
| 
 | ||||
| if( $act == "refresh" ) { | ||||
| 	$lastid = verifyparam( "lastid", "/^\d{1,9}$/", -1); | ||||
| 	print_thread_messages($threadid, $token, $lastid, $isuser,$outformat); | ||||
| 	print_thread_messages($thread, $token, $lastid, $isuser,$outformat); | ||||
| 	exit; | ||||
| 
 | ||||
| } else if( $act == "post" ) { | ||||
| @ -51,7 +51,7 @@ if( $act == "refresh" ) { | ||||
| 	$from = $isuser ? $thread['userName'] : $thread['agentName']; | ||||
|      | ||||
| 	post_message($threadid,$kind,$message,$from, $isuser ? null : $operator['operatorid'] ); | ||||
| 	print_thread_messages($threadid, $token, $lastid, $isuser, $outformat); | ||||
| 	print_thread_messages($thread, $token, $lastid, $isuser, $outformat); | ||||
| 	exit; | ||||
| 
 | ||||
| } else if( $act == "rename" ) { | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user