referer notification, fix encoding in install, messages for agent, notify about connection problems, update thread time, reassign thread, do not open closed chat, history, version, locale changes

git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@16 c66351dc-e62f-0410-b875-e3a5c0b9693f
This commit is contained in:
Evgeny Gryaznov 2007-07-08 21:56:16 +00:00
parent 1f658bf8eb
commit d5aa0774a8
20 changed files with 513 additions and 53 deletions

View File

@ -29,7 +29,11 @@ if( !isset($_GET['token']) || !isset($_GET['thread']) ) {
$thread = create_thread($userName, $remote, $referer,$current_locale);
$_SESSION['threadid'] = $thread['threadid'];
if( $referer ) {
post_message($thread['threadid'],$kind_for_agent,getstring2('chat.came.from',array($referer)));
}
post_message($thread['threadid'],$kind_info,getstring('chat.wait'));
}
$threadid = $thread['threadid'];
$token = $thread['ltoken'];
@ -52,7 +56,7 @@ if( !$thread || !isset($thread['ltoken']) || $token != $thread['ltoken'] ) {
setup_chatview_for_user($thread, $level);
start_html_output();
$pparam = verifyparam( "page", "/^(mailthread)$/", "default");
$pparam = verifyparam( "act", "/^(mailthread)$/", "default");
if( $pparam == "mailthread" ) {
require('view/chat_mailthread.php');
} else if( $level == "ajaxed" ) {

View File

@ -13,6 +13,7 @@
*/
require('../libs/common.php');
require('view_index.php');
?>
start_html_output();
require('view_index.php');
?>

View File

@ -84,6 +84,7 @@ function create_tables() {
drop_tables();
create_tables();
start_html_output();
require('view_install.php');
?>

View File

@ -10,8 +10,11 @@
*
* Contributors:
* Evgeny Gryaznov - initial API and implementation
* Pavel Petroshenko - history search
*/
$connection_timeout = 30; # sec
$namecookie = "WEBIM_Name";
$state_queue = 0;
@ -21,13 +24,16 @@ $state_closed = 3;
$kind_user = 1;
$kind_agent = 2;
$kind_for_agent = 3;
$kind_info = 4;
$kind_conn = 5;
$kind_events = 6;
$kind_to_string = array( $kind_user => "user", $kind_agent => "agent",
$kind_to_string = array( $kind_user => "user", $kind_agent => "agent", $kind_for_agent => "hidden",
$kind_info => "inf", $kind_conn => "conn", $kind_events => "event" );
function next_token() {
return rand(99999,99999999);
}
@ -38,17 +44,21 @@ function next_revision($link) {
return $val;
}
function post_message($threadid,$kind,$message,$from=null) {
$link = connect();
function post_message_($threadid,$kind,$message,$link,$from=null,$time=null) {
$query = sprintf(
"insert into chatmessage (threadid,ikind,tmessage,tname,dtmcreated) values (%s, %s,'%s',%s,CURRENT_TIMESTAMP)",
"insert into chatmessage (threadid,ikind,tmessage,tname,dtmcreated) values (%s, %s,'%s',%s,%s)",
$threadid,
$kind,
mysql_real_escape_string($message),
$from ? "'".mysql_real_escape_string($from)."'" : "null" );
$from ? "'".mysql_real_escape_string($from)."'" : "null",
$time ? "FROM_UNIXTIME($time)" : "CURRENT_TIMESTAMP" );
perform_query($query,$link);
}
function post_message($threadid,$kind,$message,$from=null) {
$link = connect();
post_message_($threadid,$kind,$message,$link,$from);
mysql_close($link);
}
@ -84,13 +94,14 @@ function message_to_text($msg) {
}
}
function get_messages($threadid,$meth,&$lastid) {
function get_messages($threadid,$meth,$isuser,&$lastid) {
global $kind_for_agent;
$link = connect();
$query = sprintf(
"select messageid,ikind,unix_timestamp(dtmcreated) as created,tname,tmessage from chatmessage ".
"where threadid = %s and messageid > %s order by messageid",
$threadid, $lastid );
"where threadid = %s and messageid > %s %s order by messageid",
$threadid, $lastid, $isuser ? "and ikind <> $kind_for_agent" : "" );
$messages = array();
$result = mysql_query($query,$link) or die(' Query failed: ' .mysql_error().": ".$query);
@ -109,7 +120,7 @@ function get_messages($threadid,$meth,&$lastid) {
function print_thread_mesages($threadid, $token, $lastid, $isuser,$format) {
global $webim_encoding, $webimroot;
$output = get_messages( $threadid, "html", $lastid );
$output = get_messages($threadid,"html",$isuser,$lastid);
if( $format == "xml" ) {
start_xml_output();
@ -162,7 +173,7 @@ function setup_chatview_for_user($thread,$level) {
}
function setup_chatview_for_operator($thread) {
global $page;
global $page, $webimroot;
$page = array();
$page['agent'] = true;
$page['user'] = false;
@ -172,6 +183,9 @@ function setup_chatview_for_operator($thread) {
$page['ct.user.name'] = $thread['userName'];
$page['ct.company.name'] = "Test company";
$page['ct.company.chatLogoURL'] = "";
// TODO
$page['namePostfix'] = "";
}
function is_ajax_browser($name,$ver,$useragent) {
@ -221,19 +235,55 @@ function get_remote_level($useragent) {
return "simple";
}
function ping_thread($thread, $isuser) {
$link = connect();
$query = sprintf(
"update chatthread set %s = CURRENT_TIMESTAMP where threadid = %s",
$isuser ? "lastpinguser" : "lastpingagent",
$thread['threadid']);
function update_thread_access($threadid, $params, $link) {
$clause = "";
foreach( $params as $k => $v ) {
if( strlen($clause) > 0 )
$clause .= ", ";
$clause .= $k."=".$v;
}
perform_query(
"update chatthread set $clause ".
"where threadid = ".$threadid,$link);
}
perform_query($query,$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) {
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[$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);
} 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);
$params['istate'] = $state_waiting;
commit_thread($thread['threadid'], $params, $link);
mysql_close($link);
return;
}
}
update_thread_access($thread['threadid'], $params, $link);
mysql_close($link);
}
function commit_thread($threadid,$params,$link) {
$query = "update chatthread set lrevision = ".next_revision($link);
$query = "update chatthread set lrevision = ".next_revision($link).", dtmmodified = CURRENT_TIMESTAMP";
foreach( $params as $k => $v ) {
$query .= ", ".$k."=".$v;
}
@ -273,7 +323,7 @@ function create_thread($username,$remote,$referer,$lang) {
$link = connect();
$query = sprintf(
"insert into chatthread (userName,ltoken,remote,referer,lrevision,locale,dtmcreated,dtmmodified) values ('%s',%s,'%s','%s',%s,'%s',CURRENT_TIMESTAMP,CURRENT_TIMESTAMP)",
"insert into chatthread (userName,"."ltoken,remote,referer,lrevision,locale,dtmcreated,dtmmodified) values ('%s','%s',%s,'%s','%s',%s,'%s',CURRENT_TIMESTAMP,CURRENT_TIMESTAMP)",
mysql_real_escape_string($username),
next_token(),
mysql_real_escape_string($remote),
@ -289,26 +339,29 @@ function create_thread($username,$remote,$referer,$lang) {
return $newthread;
}
function do_take_thread($threadid,$operator) {
function do_take_thread($threadid,$operatorName) {
global $state_chatting;
$link = connect();
commit_thread( $threadid,
array("istate" => $state_chatting,
"agentName" => "'".mysql_real_escape_string($operator)."'"), $link);
"agentName" => "'".mysql_real_escape_string($operatorName)."'"), $link);
mysql_close($link);
}
function reopen_thread($threadid) {
global $state_queue,$state_waiting,$state_chatting,$kind_events;
global $state_queue,$state_waiting,$state_chatting,$state_closed,$kind_events;
$thread = thread_by_id($threadid);
if( !$thread )
return FALSE;
if( $thread['istate'] == $state_closed )
return FALSE;
if( $thread['istate'] != $state_chatting && $thread['istate'] != $state_queue ) {
$link = connect();
commit_thread( $threadid,
array("istate" => $state_waiting), $link);
array("istate" => $state_waiting ), $link);
mysql_close($link);
}
@ -317,20 +370,26 @@ function reopen_thread($threadid) {
}
function take_thread($thread,$operator) {
global $state_queue, $state_waiting,
$state_chatting, $kind_events;
global $state_queue, $state_waiting, $state_chatting, $kind_events, $home_locale;
$state = $thread['istate'];
$threadid = $thread['threadid'];
$message_to_post = "";
$operatorName = ($thread['locale'] == $home_locale) ? $operator['vclocalename'] : $operator['vccommonname'];
if( $state == $state_queue || $state == $state_waiting) {
do_take_thread($threadid, $operator);
$message_to_post = getstring2_("chat.status.operator.joined", array($operator), $thread['locale']);
do_take_thread($threadid, $operatorName);
if( $state == $state_waiting ) {
$message_to_post = getstring2_("chat.status.operator.changed", array($operatorName,$thread['agentName']), $thread['locale']);
} else {
$message_to_post = getstring2_("chat.status.operator.joined", array($operatorName), $thread['locale']);
}
} else if( $state == $state_chatting ) {
if( $operator != $thread['agentName'] ) {
do_take_thread($threadid, $operator);
$message_to_post = getstring2_("chat.status.operator.changed", array($operator, $thread['agentName']), $thread['locale']);
if( $operatorName != $thread['agentName'] ) {
do_take_thread($threadid, $operatorName);
$message_to_post = getstring2_("chat.status.operator.changed", array($operatorName, $thread['agentName']), $thread['locale']);
}
} else {
die("cannot take thread");
@ -340,6 +399,17 @@ function take_thread($thread,$operator) {
post_message($threadid,$kind_events,$message_to_post);
}
function check_for_reassign($thread,$operator) {
global $state_waiting, $home_locale, $kind_events;
$operatorName = ($thread['locale'] == $home_locale) ? $operator['vclocalename'] : $operator['vccommonname'];
if( $thread['istate'] == $state_waiting &&
( $thread['agentName'] == $operatorName )) {
do_take_thread($thread['threadid'], $operatorName);
$message_to_post = getstring2_("chat.status.operator.changed", array($operatorName,$thread['agentName']), $thread['locale']);
post_message($thread['threadid'],$kind_events,$message_to_post);
}
}
function thread_by_id($id) {
$link = connect();
$thread = select_one_row("select * from chatthread where threadid = ". $id, $link );

View File

@ -15,7 +15,19 @@
function operator_by_login($login) {
$link = connect();
$operator = select_one_row(
"select * from chatoperator where vclogin = '".mysql_real_escape_string($login)."'", $link );
"select * from chatoperator where vclogin = '".mysql_real_escape_string($login)."'", $link );
mysql_close($link);
return $operator;
}
function operator_by_id_($id,$link) {
return select_one_row(
"select * from chatoperator where operatorid = $id", $link );
}
function operator_by_id($id) {
$link = connect();
$operator = operator_by_id_($id,$link);
mysql_close($link);
return $operator;
}

View File

@ -27,11 +27,11 @@ function generate_pagination_image($id) {
return "<img src=\"$webimroot/images/$id.gif\" border=\"0\"/>";
}
function setup_pagination($items) {
function setup_pagination($items,$default_items_per_page=15) {
global $page;
if( $items ) {
$items_per_page = verifyparam("items", "/^\d{1,3}$/", 2);
$items_per_page = verifyparam("items", "/^\d{1,3}$/", $default_items_per_page);
if( $items_per_page < 2 )
$items_per_page = 2;

View File

@ -30,7 +30,7 @@ $page['email'] = $mail;
$history = "";
$lastid = -1;
$output = get_messages( $threadid, "text", $lastid );
$output = get_messages( $threadid,"text",true,$lastid );
foreach( $output as $msg ) {
$history .= $msg;
}

View File

@ -31,9 +31,7 @@ if( !isset($_GET['token']) ) {
die("wrong thread");
}
$operatorName = ($thread['locale'] == $home_locale) ? $operator['vclocalename'] : $operator['vccommonname'];
take_thread($thread,$operatorName);
take_thread($thread,$operator);
$token = $thread['ltoken'];
header("Location: ".$_SERVER['PHP_SELF']."?thread=$threadid&token=$token");
@ -50,6 +48,8 @@ if( !$thread || !isset($thread['ltoken']) || $token != $thread['ltoken'] ) {
setup_chatview_for_operator($thread);
start_html_output();
require('../view/chat_ajaxed.php');
require('../view/chat_ajaxed.php');
?>

View File

@ -0,0 +1,55 @@
<?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:
* Pavel Petroshenko - initial API and implementation
*/
require('../libs/common.php');
require('../libs/operator.php');
require('../libs/chat.php');
require('../libs/pagination.php');
$operator = check_login();
$page = array( 'operator' => get_operator_name($operator) );
$query = isset($_GET['q']) ? $_GET['q'] : false;
if($query !== false) {
$link = connect();
$result = mysql_query(
"select DISTINCT unix_timestamp(chatthread.dtmcreated) as created, ".
"unix_timestamp(chatthread.dtmmodified) as modified, chatthread.threadid, ".
"chatthread.remote, chatthread.agentName, chatthread.userName ".
"from chatthread, chatmessage ".
"where chatmessage.threadid = chatthread.threadid and ".
"((chatthread.userName LIKE '%%$query%%') or ".
" (chatmessage.tmessage LIKE '%%$query%%'))".
"order by created DESC", $link)
or die(' Query failed: ' .mysql_error().": ".$query);
$foundThreads = array();
while ($thread = mysql_fetch_array($result, MYSQL_ASSOC)) {
$foundThreads[] = $thread;
}
mysql_free_result($result);
mysql_close($link);
$page['formq'] = $query;
setup_pagination($foundThreads);
} else {
setup_empty_pagination();
}
start_html_output();
require('../view/thread_search.php');
?>

View File

@ -17,7 +17,22 @@ require('../libs/operator.php');
$operator = check_login();
$page = array( 'operator' => get_operator_name($operator) );
$page = array(
'operator' => get_operator_name($operator),
'version' => 'v1.0.7'
);
$localeLinks = "";
foreach($available_locales as $k) {
if( strlen($localeLinks) > 0 )
$localeLinks .= " &bull; ";
if( $k == $current_locale )
$localeLinks .= $k;
else
$localeLinks .= "<a href=\"/webim/operator/index.php?locale=$k\">$k</a>";
}
$page['localeLinks'] = $localeLinks;
start_html_output();
require('../view/menu.php');

View File

@ -0,0 +1,32 @@
<?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/operator.php');
require('../libs/chat.php');
$operator = check_login();
$page = array( 'operator' => get_operator_name($operator) );
if( isset($_GET['threadid'])) {
$threadid = verifyparam( "threadid", "/^(\d{1,9})?$/", "");
$lastid = -1;
$page['threadMessages'] = get_messages($threadid,"html",false,$lastid);
}
start_html_output();
require('../view/thread_log.php');
?>

View File

@ -45,10 +45,12 @@ function thread_to_xml($thread) {
return $result."/>";
$state = getstring($threadstate_key[$thread['istate']]);
$threadoperator = ($thread['agentName'] ? $thread['agentName'] : "-");
$result .= " canopen=\"true\" state=\"$state\">";
$result .= "<name>".htmlspecialchars($thread['userName'])."</name>";
$result .= "<addr>".htmlspecialchars($thread['remote'])."</addr>";
$result .= "<agent>".htmlspecialchars($thread['agentName'] ? $thread['agentName'] : "-")."</agent>";
$result .= "<agent>".htmlspecialchars($threadoperator)."</agent>";
$result .= "<time>".$thread['unix_timestamp(dtmcreated)']."000</time>";
$result .= "<modified>".$thread['unix_timestamp(dtmmodified)']."000</modified>";
$result .= "</thread>";
@ -61,7 +63,9 @@ function print_pending_threads($since) {
$revision = $since;
$output = array();
$query = "select threadid, userName, agentName, unix_timestamp(dtmcreated), unix_timestamp(dtmmodified), lrevision, istate, remote from chatthread where lrevision > $since ORDER BY threadid";
$query = "select threadid, userName, agentName, unix_timestamp(dtmcreated), ".
"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)) {

View File

@ -14,6 +14,7 @@
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}$/");
@ -26,9 +27,18 @@ 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);
ping_thread($thread, $isuser);
print_thread_mesages($threadid, $token, $lastid, $isuser,$outformat);
exit;
@ -40,14 +50,12 @@ if( $act == "refresh" ) {
$from = $isuser ? $thread['userName'] : $thread['agentName'];
post_message($threadid,$kind,$message,$from);
ping_thread($thread, $isuser);
print_thread_mesages($threadid, $token, $lastid, $isuser, $outformat);
exit;
} else if( $act == "rename" ) {
$newname = getrawparam('name');
ping_thread($thread, $isuser);
rename_user($thread, $newname);
setcookie($namecookie, $newname, time()+60*60*24*365);
start_xml_output();
@ -56,14 +64,12 @@ if( $act == "refresh" ) {
} else if( $act == "ping" ) {
ping_thread($thread, $isuser);
start_xml_output();
echo "<ping></ping>";
exit;
} else if( $act == "close" ) {
ping_thread($thread, $isuser);
close_thread($thread, $isuser);
start_xml_output();
echo "<closed></closed>";

View File

@ -87,7 +87,7 @@ var threadParams = { servl:"/webim/thread.php",frequency:2,<?php if( $page['user
<tr>
<?php if( $page['agent'] ) { ?>
<td class="text" nowrap>
<?php echo getstring("chat.window.chatting_with") ?> <b><a href="javascript:void(0)" onclick="return false;" title="<?php echo getstring("chat.window.chatting_with") ?> <?php echo $page['ct.user.name'] ?>"><?php echo $page['ct.user.name'] ?></a></b><br>
<?php echo getstring("chat.window.chatting_with") ?> <b><a href="javascript:void(0)" onclick="return false;" title="<?php echo getstring("chat.window.chatting_with") ?> <?php echo $page['ct.user.name'] ?><?php echo $page['namePostfix'] ?>"><?php echo $page['ct.user.name'] ?></a></b><br>
</td>
<?php } ?><?php if( $page['user'] ) { ?>
<td class="text" nowrap>
@ -120,8 +120,9 @@ var threadParams = { servl:"/webim/thread.php",frequency:2,<?php if( $page['user
<td><img src='/webim/images/buttondiv.gif' width="35" height="45" border="0" alt="" /></td>
<?php if( $page['user'] ) { ?>
<td><a href="<?php echo $page['selfLink'] ?>&page=mailthread" target="_blank" title="<?php echo getstring("chat.window.toolbar.mail_history") ?>" onclick="this.newWindow = window.open('<?php echo $page['selfLink'] ?>&page=mailthread', 'ForwardMail', 'toolbar=0,scrollbars=0,location=0,statusbar=1,menubar=0,width=603,height=204,resizable=0');this.newWindow.focus();this.newWindow.opener=window;return false;"><img src='/webim/images/buttons/email.gif' width="25" height="25" border="0" alt="Mail&nbsp;"/></a></td>
<td><a href="<?php echo $page['selfLink'] ?>&act=mailthread" target="_blank" title="<?php echo getstring("chat.window.toolbar.mail_history") ?>" onclick="this.newWindow = window.open('<?php echo $page['selfLink'] ?>&act=mailthread', 'ForwardMail', 'toolbar=0,scrollbars=0,location=0,statusbar=1,menubar=0,width=603,height=204,resizable=0');this.newWindow.focus();this.newWindow.opener=window;return false;"><img src='/webim/images/buttons/email.gif' width="25" height="25" border="0" alt="Mail&nbsp;"/></a></td>
<?php } ?>
<td><a id="refresh" href="javascript:void(0)" onclick="return false;" title="<?php echo getstring("chat.window.toolbar.refresh") ?>">
<img src='/webim/images/buttons/refresh.gif' width="25" height="25" border="0" alt="Refresh&nbsp;" /></a></td>
@ -248,3 +249,4 @@ var threadParams = { servl:"/webim/thread.php",frequency:2,<?php if( $page['user
</body>
</html>

View File

@ -89,7 +89,7 @@
<td><img src='/webim/images/buttondiv.gif' width="35" height="45" border="0" alt="" /></td>
<td><a href="<?php echo $page['selfLink'] ?>&page=mailthread" target="_blank" title="<?php echo getstring("chat.window.toolbar.mail_history") ?>" onclick="this.newWindow = window.open('<?php echo $page['selfLink'] ?>&page=mailthread', 'ForwardMail', 'toolbar=0,scrollbars=0,location=0,statusbar=1,menubar=0,width=603,height=204,resizable=0');this.newWindow.focus();this.newWindow.opener=window;return false;"><img src='/webim/images/buttons/email.gif' width="25" height="25" border="0" alt="Mail" /></a></td>
<td><a href="<?php echo $page['selfLink'] ?>&act=mailthread" target="_blank" title="<?php echo getstring("chat.window.toolbar.mail_history") ?>" onclick="this.newWindow = window.open('<?php echo $page['selfLink'] ?>&act=mailthread', 'ForwardMail', 'toolbar=0,scrollbars=0,location=0,statusbar=1,menubar=0,width=603,height=204,resizable=0');this.newWindow.focus();this.newWindow.opener=window;return false;"><img src='/webim/images/buttons/email.gif' width="25" height="25" border="0" alt="Mail" /></a></td>
<td><a id="refresh" href="javascript:void(0)" onclick="return false;" title="<?php echo getstring("chat.window.toolbar.refresh") ?>">
<img src='/webim/images/buttons/refresh.gif' width="25" height="25" border="0" alt="Refresh" /></a></td>

View File

@ -58,10 +58,27 @@
<tr><td width='20' valign='top'><img src='/webim/images/lidiv.gif' width='5' height='45' border='0' alt=''></td><td valign='top' class='text'><a href='/webim/operator/users.php'><?php echo getstring('topMenu.users') ?></a><br><img src='/webim/images/free.gif' width='1' height='10' border='0' alt=''><br><?php echo getstring('page_client.pending_users') ?><br></td></tr><tr><td colspan='2' height='20'></td></tr>
<tr><td width='20' valign='top'><img src='/webim/images/lidiv.gif' width='5' height='45' border='0' alt=''></td><td valign='top' class='text'><a href='/webim/operator/getcode.php'><?php echo getstring('leftMenu.client_gen_button') ?></a><br><img src='/webim/images/free.gif' width='1' height='10' border='0' alt=''><br><?php echo getstring('admin.content.client_gen_button') ?><br></td></tr><tr><td colspan='2' height='20'></td></tr>
<tr><td width='20' valign='top'><img src='/webim/images/lidiv.gif' width='5' height='45' border='0' alt=''></td><td valign='top' class='text'><a href='/webim/operator/history.php'><?php echo getstring('page_analysis.search.title') ?></a><br><img src='/webim/images/free.gif' width='1' height='10' border='0' alt=''><br><?php echo getstring('content.history') ?><br></td></tr><tr><td colspan='2' height='20'></td></tr>
<tr><td width='20' valign='top'><img src='/webim/images/lidiv.gif' width='5' height='45' border='0' alt=''></td><td valign='top' class='text'><a href='/webim/operator/logout.php'><?php echo getstring('topMenu.logoff') ?></a><br><img src='/webim/images/free.gif' width='1' height='10' border='0' alt=''><br><?php echo getstring('content.logoff') ?><br></td></tr><tr><td colspan='2' height='20'></td></tr>
</table>
<table width="200" cellspacing="0" cellpadding="0" border="0">
<tr>
<td height="10"></td>
</tr>
<tr>
<td bgcolor="#D6D6D6"><img src="/webim/images/free.gif" height="1" width="1" border="0" alt=""></td>
</tr>
<tr>
<td height="7"></td>
</tr>
</table>
Web Messenger/<?php echo $page['version'] ?> &bull; <?php echo $page['localeLinks'] ?>
</td>
</tr>
</table>

View File

@ -26,6 +26,8 @@ chat.client.name=Your name:
chat.client.changename=Change name
chat.status.operator.left=Operator {0} left the chat
chat.status.user.left=Visitor {0} left the chat
chat.status.user.dead=Visitor closed chat window
chat.status.operator.dead=Operator has connection issues, we temporarily moved you to foreground queue. Sorry for keeping you waiting.
chat.status.operator.joined=Operator {0} joined the chat
chat.status.user.changedname=Visitor changed the name {0} to {1}
chat.status.user.reopenedthread=Visitor joined chat again
@ -67,6 +69,14 @@ pending.table.head.etc=Misc
pending.table.speak=Click to chat with the visitor
pending.table.view=Watch the chat
pending.table.ban=Ban the visitor
thread.chat_log=Chat log
thread.back_to_search=Go to search
thread.intro=The page displays chat
page_analysis.search.title=Chats history
page.analysis.search.head_name=Name
page.analysis.search.head_host=Visitor's address
page.analysis.search.head_operator=Operator
page.analysis.search.head_time=Time in chat
common.asterisk_explanation=<b><font class="red">*</font></b> - mandatory fields
page_agents.title=Agents
page_agents.agents=Agents full list:
@ -108,10 +118,16 @@ form.field.password=Password
form.field.password.description=
button.enter=Enter
button.save=Save
button.search=Search
tag.pagination.info=Page {0} of {1}, {2}-{3} from {4}
tag.pagination.no_items=Found 0 elements
image.chat.history=/webim/images/en/history.gif
image.chat.message=/webim/images/en/message.gif
image.button.login=/webim/images/en/login.gif
image.button.save=/webim/images/en/save.gif
image.button.search=/webim/images/en/search.gif
chat.came.from=Vistor came from page {0}
content.history=Search the dialogs history
content.logoff=Log out of the system.
form.field.agent_commonname=International name (Latin)
form.field.agent_commonname.description=This name will be seen by your visitors
@ -128,3 +144,5 @@ menu.operator=You are {0}
no_such_operator=No such operator
page_agent.create_new=Here you can create new operator
page_agents.agent_commonname=International name
page_analysis.full.text.search=User name or message text search:
page_search.intro=Search for chat history of a specified user or a specified phrase in a message.

View File

@ -26,6 +26,8 @@ chat.client.name=
chat.client.changename=Èçìåíèòü èìÿ
chat.status.operator.left=Îïåðàòîð {0} ïîêèíóë äèàëîã
chat.status.user.left=Ïîñåòèòåëü {0} ïîêèíóë äèàëîã
chat.status.user.dead=Посетитель закрыл окно диалога
chat.status.operator.dead=У оператора возникли проблемы со связью, мы временно перевели Вас в приоритетную очередь. Приносим извинения за Ваше ожидание.
chat.status.operator.joined=Îïåðàòîð {0} âêëþ÷èëñÿ â ðàçãîâîð
chat.status.user.changedname=Ïîñåòèòåëü ñìåíèë èìÿ {0} íà {1}
chat.status.user.reopenedthread=Ïîñåòèòåëü çàíîâî âîøåë â äèàëîã
@ -67,6 +69,14 @@ pending.table.head.etc=
pending.table.speak=Íàæìèòå äëÿ òîãî, ÷òîáû îáñëóæèòü ïîñåòèòåëÿ
pending.table.view=Ïîäêëþ÷èòüñÿ ê äèàëîãó â ðåæèìå ïðîñìîòðà
pending.table.ban=Ïîìåòèòü ïîñåòèòåëÿ êàê íåæåëàòåëüíîãî
thread.chat_log=Протокол разговора
thread.back_to_search=Перейти в поиск
thread.intro=На данной странице Вы можете просмотреть диалог.
page_analysis.search.title=История диалогов
page.analysis.search.head_name=Имя
page.analysis.search.head_host=Адрес посетителя
page.analysis.search.head_operator=Оператор
page.analysis.search.head_time=Время в диалоге
common.asterisk_explanation=<b><font class="red">*</font></b> - ïîëÿ, îáÿçàòåëüíûå äëÿ çàïîëíåíèÿ
page_agents.title=Àãåíòû
page_agents.agents=Ïîëíûé ñïèñîê àãåíòîâ:
@ -108,10 +118,16 @@ form.field.password=
form.field.password.description=
button.enter=Âîéòè
button.save=Ñîõðàíèòü
button.search=Искать
tag.pagination.info=Страница {0} из {1}, показаны {2}-{3} из {4}
tag.pagination.no_items=Ничего не найдено
image.chat.history=/webim/images/ru/history.gif
image.chat.message=/webim/images/ru/message.gif
image.button.login=/webim/images/ru/login.gif
image.button.save=/webim/images/ru/save.gif
image.button.search=/webim/images/ru/search.gif
chat.came.from=Посетитель пришел со страницы {0}
content.history=Поиск по истории диалогов
content.logoff=Ïîêèíóòü ñèñòåìó.
form.field.agent_commonname=Èíòåðíàöèîíàëüíîå èìÿ (ëàòèíèöåé)
form.field.agent_commonname.description=Ïîä ýòèì èìåíåì Âàñ óâèäÿò âàøè ïîñåòèòåëè èç äðóãèõ ñòðàí
@ -130,3 +146,5 @@ page.gen_button.choose_image=
page.gen_button.choose_locale=Äëÿ êàêîé ëîêàëè ñîçäàâàòü êíîïêó
page_agent.create_new=Ñîçäàíèå íîâîãî îïåðàòîðà
page_agents.agent_commonname=Èíòåðíàöèîíàëüíîå èìÿ
page_analysis.full.text.search=Поиск по имени посетителя или по тексту сообщения:
page_search.intro=На данной странице можно осуществить поиск диалогов по имени пользователя или фразе, встречающейся в сообщении.

View File

@ -0,0 +1,88 @@
<?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
*/
?>
<html>
<head>
<link rel="stylesheet" type="text/css" media="all" href="/webim/styles.css" />
<link rel="stylesheet" type="text/css" media="all" href="/webim/chat.css" />
<link rel="shortcut icon" href="/webim/images/favicon.ico" type="image/x-icon"/>
<title>
<?php echo getstring("app.title") ?> - <?php echo getstring("thread.chat_log") ?>
</title>
<meta http-equiv="keywords" content="<?php echo getstring("page.main_layout.meta_keyword") ?>">
<meta http-equiv="description" content="<?php echo getstring("page.main_layout.meta_description") ?>">
</head>
<body bgcolor="#FFFFFF" text="#000000" link="#2971C1" vlink="#2971C1" alink="#2971C1">
<table width="100%" cellpadding="2" cellspacing="0" border="0">
<tr>
<td valign="top" class="text">
<h1><?php echo getstring("thread.chat_log") ?></h1>
<?php echo getstring("thread.intro") ?>
<br/><br/>
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td class='table' bgcolor='#276db8' height='30'><span class='header'>
<?php echo getstring("thread.chat_log") ?>
</span></td>
</tr>
<tr>
<td height='45' class='table'>
<span class="message">
<?php foreach( $page['threadMessages'] as $message ) { ?>
<?php echo $message ?>
<?php } ?>
</span>
</td>
</tr>
<tr><td height='2' colspan='1'></td></tr><tr><td bgcolor='#e1e1e1' colspan='1'><img width='1' height='1' border='0' alt='' src='/webim/images/free.gif'></td></tr><tr><td height='2' colspan='1'></td></tr>
</table>
<br />
<a href="/webim/operator/history.php">
<?php echo getstring("thread.back_to_search") ?></a>
<br />
</td>
</tr>
</table>
</body>
</html>

View File

@ -0,0 +1,117 @@
<?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
*/
?>
<html>
<head>
<link rel="stylesheet" type="text/css" media="all" href="/webim/styles.css" />
<link rel="shortcut icon" href="/webim/images/favicon.ico" type="image/x-icon"/>
<title>
<?php echo getstring("app.title") ?> - <?php echo getstring("page_analysis.search.title") ?>
</title>
<meta http-equiv="keywords" content="<?php echo getstring("page.main_layout.meta_keyword") ?>">
<meta http-equiv="description" content="<?php echo getstring("page.main_layout.meta_description") ?>">
</head>
<body bgcolor="#FFFFFF" text="#000000" link="#2971C1" vlink="#2971C1" alink="#2971C1">
<table width="100%" cellpadding="2" cellspacing="0" border="0">
<tr>
<td valign="top" class="text">
<table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td align="left" valign="top">
<h1><?php echo getstring("page_analysis.search.title") ?></h1>
</td><td align="right" class="text" valign="top"><table cellspacing="0" cellpadding="0" border="0"><tr><td class="textform"><?php echo getstring2("menu.operator",array($page['operator'])) ?></td><td class="textform"><img src='/webim/images/topdiv.gif' width="25" height="15" border="0" alt="|" /></td><td class="textform"><a href="/webim/operator/index.php" title="<?php echo getstring("menu.main") ?>"><?php echo getstring("menu.main") ?></a></td></tr></table></td></tr></table>
<?php echo getstring("page_search.intro") ?>
<br />
<br />
<form name="searchForm" method="get" action="/webim/operator/history.php">
<table cellspacing='0' cellpadding='0' border='0'><tr><td background='/webim/images/loginbg.gif'><table cellspacing='0' cellpadding='0' border='0'><tr><td><img src='/webim/images/logincrnlt.gif' width='16' height='16' border='0' alt=''></td><td></td><td><img src='/webim/images/logincrnrt.gif' width='16' height='16' border='0' alt=''></td></tr><tr><td></td><td align='center'><table border='0' cellspacing='0' cellpadding='0'>
<tr>
<td class="formauth" colspan="3"><?php echo getstring("page_analysis.full.text.search") ?></td>
</tr>
<tr>
<td class="formauth"><input type="text" name="q" size="80" value="<?php echo form_value('q') ?>" class="formauth"/></td>
<td width="10"><img src="/webim/images/free.gif" width="10" height="1" border="0" alt=""></td>
<td class="formauth">
<input type="image" name="" src='<?php echo getstring("image.button.search") ?>' border="0" alt='<?php echo getstring("button.search") ?>'/>
</td>
</tr>
</table></td><td></td></tr><tr><td><img src='/webim/images/logincrnlb.gif' width='16' height='16' border='0' alt=''></td><td></td><td><img src='/webim/images/logincrnrb.gif' width='16' height='16' border='0' alt=''></td></tr></table></td></tr></table>
</form>
<br/>
<?php if( $page['pagination'] && $page['pagination.items'] ) { ?>
<table cellpadding="0" cellspacing="0" border="0" width="100%">
<tr>
<td class='table' bgcolor='#276db8' height='30'><span class='header'><?php echo getstring("page.analysis.search.head_name") ?></span></td><td width='3'></td>
<td class='table' bgcolor='#276db8' height='30'><span class='header'><?php echo getstring("page.analysis.search.head_host") ?></span></td><td width='3'></td>
<td class='table' bgcolor='#276db8' height='30'><span class='header'><?php echo getstring("page.analysis.search.head_operator") ?></span></td><td width='3'></td>
<td class='table' bgcolor='#276db8' height='30'><span class='header'><?php echo getstring("page.analysis.search.head_time") ?></span></td>
</tr>
<?php foreach( $page['pagination.items'] as $chatthread ) { ?>
<tr>
<td height='30' class='table'>
<a href="/webim/operator/threadprocessor.php?threadid=<?php echo $chatthread['threadid'] ?>" target="_blank" onclick="this.newWindow = window.open('/webim/operator/threadprocessor.php?threadid=<?php echo $chatthread['threadid'] ?>', '', 'toolbar=0,scrollbars=1,location=0,status=1,menubar=0,width=600,height=420,resizable=1');this.newWindow.focus();this.newWindow.opener=window;return false;"><?php echo htmlspecialchars($chatthread['userName']) ?></a>
</td><td background='/webim/images/tablediv3.gif'><img width='3' height='1' border='0' alt='' src='/webim/images/free.gif'></td>
<td height='30' class='table'>
<?php echo htmlspecialchars($chatthread['remote']) ?>
</td><td background='/webim/images/tablediv3.gif'><img width='3' height='1' border='0' alt='' src='/webim/images/free.gif'></td>
<td height='30' class='table'>
<?php if( $chatthread['agentName'] ) { ?><?php echo htmlspecialchars($chatthread['agentName']) ?><?php } ?>
</td><td background='/webim/images/tablediv3.gif'><img width='3' height='1' border='0' alt='' src='/webim/images/free.gif'></td>
<td height='30' class='table'>
<?php echo date("d M Y H:i:s", $chatthread['created']) ?>, <?php echo date("d M Y H:i:s", $chatthread['modified']-$chatthread['created']) ?>
</td>
</tr>
<tr><td height='2' colspan='7'></td></tr><tr><td bgcolor='#e1e1e1' colspan='7'><img width='1' height='1' border='0' alt='' src='/webim/images/free.gif'></td></tr><tr><td height='2' colspan='7'></td></tr>
<?php } ?>
</table>
<br />
<?php echo generate_pagination($page['pagination']) ?>
<?php } ?>
<?php if( $page['pagination'] && !$page['pagination.items'] ) { ?>
<br/><br/>
<table cellspacing='0' cellpadding='0' border='0'><tr><td background='/webim/images/loginbg.gif'><table cellspacing='0' cellpadding='0' border='0'><tr><td><img src='/webim/images/logincrnlt.gif' width='16' height='16' border='0' alt=''></td><td></td><td><img src='/webim/images/logincrnrt.gif' width='16' height='16' border='0' alt=''></td></tr><tr><td></td><td align='center'><table border='0' cellspacing='0' cellpadding='0'>
<span class="table">
<?php echo getstring("tag.pagination.no_items") ?>
</span>
</table></td><td></td></tr><tr><td><img src='/webim/images/logincrnlb.gif' width='16' height='16' border='0' alt=''></td><td></td><td><img src='/webim/images/logincrnrb.gif' width='16' height='16' border='0' alt=''></td></tr></table></td></tr></table>
<?php } ?>
</td>
</tr>
</table>
</body>
</html>