".myiconv($webim_encoding,"utf-8",escape_with_cdata(getstring("agent.not_logged_in"))).""; exit; } $threadstate_to_string = array( $state_queue => "wait", $state_waiting => "prio", $state_chatting => "chat", $state_closed => "closed", $state_loading => "wait" ); $threadstate_key = array( $state_queue => "chat.thread.state_wait", $state_waiting => "chat.thread.state_wait_for_another_agent", $state_chatting => "chat.thread.state_chatting_with_agent", $state_closed => "chat.thread.state_closed", $state_loading => "chat.thread.state_loading" ); function get_useragent_version($userAgent) { global $knownAgents; if (is_array($knownAgents)) { $userAgent = strtolower($userAgent); foreach( $knownAgents as $agent ) { if( strstr($userAgent,$agent) ) { if( preg_match( "/".$agent."[\\s\/]?(\\d+(\\.\\d+(\\.\\d+)?)?)/", $userAgent, $matches ) ) { $ver = $matches[1]; if($agent=='safari') { if(preg_match( "/version\/(\\d+(\\.\\d+(\\.\\d+)?)?)/", $userAgent, $matches)) { $ver = $matches[1]; } else { $ver = "1 or 2 (build ".$ver.")"; } if(preg_match( "/mobile\/(\\d+(\\.\\d+(\\.\\d+)?)?)/", $userAgent, $matches)) { $userAgent = "iPhone ".$matches[1]." ($agent $ver)"; break; } } $userAgent = ucfirst($agent)." ".$ver; break; } } } } return $userAgent; } function thread_to_xml($thread,$link) { global $threadstate_to_string, $threadstate_key, $webim_encoding, $operator; $state = $threadstate_to_string[$thread['istate']]; $result = ""; $state = getstring($threadstate_key[$thread['istate']]); $nextagent = $thread['nextagent'] != 0 ? operator_by_id_($thread['nextagent'],$link) : null; $threadoperator = $nextagent ? get_operator_name($nextagent) : ($thread['agentName'] ? $thread['agentName'] : "-"); $result .= " canopen=\"true\""; if( $thread['agentId'] != $operator['operatorid'] && $thread['nextagent'] != $operator['operatorid']) { $result .= " canview=\"true\""; } $result .= " state=\"$state\" typing=\"".$thread['userTyping']."\">"; $result .= "".htmlspecialchars(htmlspecialchars(get_user_name($thread['userName'],$thread['remote'], $thread['userid']))).""; $result .= "".htmlspecialchars(htmlspecialchars($thread['remote'])).""; $result .= "".htmlspecialchars(htmlspecialchars($threadoperator)).""; $result .= ""; $result .= "".$thread['unix_timestamp(dtmmodified)']."000"; $userAgent = get_useragent_version($thread['userAgent']); $result .= "".$userAgent.""; if( $thread["shownmessageid"] != 0 ) { $query = "select tmessage from chatmessage where messageid = ".$thread["shownmessageid"]; $line = select_one_row($query, $link); if( $line ) { $message = preg_replace("/[\r\n\t]+/", " ", $line["tmessage"]); $result .= "".htmlspecialchars(htmlspecialchars($message)).""; } } $result .= ""; return $result; } function print_pending_threads($since) { global $webim_encoding; $link = connect(); $revision = $since; $output = array(); $query = "select threadid, userName, agentName, unix_timestamp(dtmcreated), userTyping, ". "unix_timestamp(dtmmodified), lrevision, istate, remote, nextagent, agentId, userid, shownmessageid, userAgent ". "from chatthread where lrevision > $since ORDER BY threadid"; $rows = select_multi_assoc($query, $link); foreach ($rows as $row) { $thread = thread_to_xml($row,$link); $output[] = $thread; if( $row['lrevision'] > $revision ) $revision = $row['lrevision']; } mysql_close($link); start_xml_output(); echo ""; foreach( $output as $thr ) { print myiconv($webim_encoding,"utf-8",$thr); } echo ""; } $since = verifyparam( "since", "/^\d{1,9}$/", 0); print_pending_threads($since); notify_operator_alive($operator['operatorid']); exit; ?>