".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",
$state_left => "closed"
);
$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 thread_to_xml($thread,$link) {
global $state_chatting, $threadstate_to_string, $threadstate_key,
$webim_encoding, $operator, $settings,
$can_viewthreads, $can_takeover;
$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'] : "-");
if($threadoperator == "-" && $thread['groupname']) {
$threadoperator = "- ".$thread['groupname']." -";
}
if(!($thread['istate'] == $state_chatting && $thread['agentId'] != $operator['operatorid'] && !is_capable($can_takeover,$operator))) {
$result .= " canopen=\"true\"";
}
if ($thread['agentId'] != $operator['operatorid'] && $thread['nextagent'] != $operator['operatorid']
&& is_capable($can_viewthreads, $operator)) {
$result .= " canview=\"true\"";
}
if ($settings['enableban'] == "1") {
$result .= " canban=\"true\"";
}
$banForThread = $settings['enableban'] == "1" ? ban_for_addr_($thread['remote'],$link) : false;
if($banForThread) {
$result .= " ban=\"blocked\" banid=\"".$banForThread['banid']."\"";
}
$result .= " state=\"$state\" typing=\"".$thread['userTyping']."\">";
$result .="";
if($banForThread) {
$result .= htmlspecialchars(getstring('chat.client.spam.prefix'));
}
$result .= htmlspecialchars(htmlspecialchars(get_user_name($thread['userName'],$thread['remote'], $thread['userid'])))."";
$result .= "".htmlspecialchars(get_user_addr($thread['remote']))."";
$result .= "".htmlspecialchars(htmlspecialchars($threadoperator))."";
$result .= "";
$result .= "".$thread['unix_timestamp(dtmmodified)']."000";
if($banForThread) {
$result .= "".$banForThread['comment']."";
}
$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($groupids,$since) {
global $webim_encoding, $settings, $state_closed, $state_left;
$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, (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_left "
: "").
($settings['enablegroups'] == '1'
? "AND (groupid is NULL".($groupids
? " OR groupid IN ($groupids)"
: "").
") "
: "").
"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);
$status = verifyparam( "status", "/^\d{1,2}$/", 0);
loadsettings();
$groupids = $_SESSION['operatorgroups'];
print_pending_threads($groupids,$since);
notify_operator_alive($operator['operatorid'], $status);
exit;
?>