<?php /* * This file is part of Web Instant Messenger project. * * Copyright (c) 2005-2008 Internet Services Ltd. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Evgeny Gryaznov - initial API and implementation */ require('../libs/common.php'); require('../libs/chat.php'); require('../libs/operator.php'); $operator = get_logged_in(); if( !$operator ) { start_xml_output(); echo "<error><descr>".myiconv($webim_encoding,"utf-8",escape_with_cdata(getstring("agent.not_logged_in")))."</descr></error>"; exit; } $threadstate_to_string = array( $state_queue => "wait", $state_waiting => "prio", $state_chatting => "chat", $state_closed => "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" ); function thread_to_xml($thread) { global $threadstate_to_string, $threadstate_key, $webim_encoding; $state = $threadstate_to_string[$thread['istate']]; $result = "<thread id=\"".$thread['threadid']."\" stateid=\"$state\""; if( $state == "closed" ) return $result."/>"; $state = myiconv($webim_encoding,"utf-8",getstring($threadstate_key[$thread['istate']])); $threadoperator = ($thread['agentName'] ? $thread['agentName'] : "-"); $result .= " canopen=\"true\""; $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>"; $result .= "<time>".$thread['unix_timestamp(dtmcreated)']."000</time>"; $result .= "<modified>".$thread['unix_timestamp(dtmmodified)']."000</modified>"; $result .= "</thread>"; 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 ". "from chatthread where lrevision > $since ORDER BY threadid"; $result = mysql_query($query,$link) or die(' Query failed: ' .mysql_error().": ".$query); while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { $thread = thread_to_xml($row); $output[] = $thread; if( $row['lrevision'] > $revision ) $revision = $row['lrevision']; } mysql_free_result($result); mysql_close($link); start_xml_output(); echo "<threads revision=\"$revision\" time=\"".time()."000\">"; foreach( $output as $thr ) { print myiconv($webim_encoding,"utf-8",$thr); } echo "</threads>"; } //////// $since = verifyparam( "since", "/^\d{1,9}$/", 0); print_pending_threads($since); notify_operator_alive($operator['operatorid']); exit; ?>