<?php
/*
 * This file is part of Web Instant Messenger project.
 *
 * Copyright (c) 2005-2007 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');

$act = verifyparam( "act", "/^(refresh|post|rename|close|ping)$/");
$token = verifyparam( "token", "/^\d{1,9}$/");
$threadid = verifyparam( "thread", "/^\d{1,9}$/");
$isuser = verifyparam( "user", "/^true$/", "false") == 'true';
$outformat = (verifyparam( "html", "/^on$/", "off") == 'on') ? "html" : "xml";

$thread = thread_by_id($threadid);
if( !$thread || !isset($thread['ltoken']) || $token != $thread['ltoken'] ) {
	die("wrong thread");
}

# This code helps in simulation of operator connection problems
# if( !$isuser )     die("error");

ping_thread($thread, $isuser);

if( !$isuser && $act != "rename" ) {
	$operator = check_login();
	check_for_reassign($thread,$operator);
}

if( $act == "refresh" ) {
	$lastid = verifyparam( "lastid", "/^\d{1,9}$/", -1);
	print_thread_mesages($threadid, $token, $lastid, $isuser,$outformat);
	exit;

} else if( $act == "post" ) {
	$lastid = verifyparam( "lastid", "/^\d{1,9}$/", -1);
	$message = getrawparam('message');

	$kind = $isuser ? $kind_user : $kind_agent;
	$from = $isuser ? $thread['userName'] : $thread['agentName'];

	post_message($threadid,$kind,$message,$from, $isuser ? null : $operator['operatorid'] );
	print_thread_mesages($threadid, $token, $lastid, $isuser, $outformat);
	exit;

} else if( $act == "rename" ) {

	if( !$user_can_change_name ) {
		start_xml_output();
		echo "<error></error>";
		exit;
	}

	$newname = getrawparam('name');

	rename_user($thread, $newname);
	setcookie($namecookie, $newname, time()+60*60*24*365); 
	start_xml_output();
	echo "<changedname></changedname>";
	exit;

} else if( $act == "ping" ) {

	start_xml_output();
	echo "<ping></ping>";
	exit;

} else if( $act == "close" ) {
	
	if( $isuser || $thread['agentId'] == $operator['operatorid']) {
		close_thread($thread, $isuser);
	}

	start_xml_output();
	echo "<closed></closed>";
	exit;

}

?>