';
},
- viewOpenCell: function(username,servlet,id,canview,canopen,ban,message,cantakenow) {
+ viewOpenCell: function(username,servlet,id,canview,canopen,ban,message,cantakenow,tracked,trackedlink) {
var cellsCount = 2;
var link = servlet+"?thread="+id;
var gen = '
';
@@ -95,17 +95,40 @@ var HtmlGenerationUtils = {
gen += '
';
cellsCount++;
}
+ if ( tracked ) {
+ gen += '
';
+ gen += HtmlGenerationUtils.popupLink( trackedlink+"?thread="+id, localized[6], "ImTracked"+id, '', 640, 480, null);
+ gen += '
!!! For security reasons, please change your password immediately and remove {0} folder from your server.
+invitation.message=Hello, how can I help you?
+invitation.sent=Invitation sent to visitor. Please wait for a while.
+invitation.title=Invitation
lang.choose=Choose your language
leavemail.body=Your have a message from {0}:\n\n{2}\n\nHis email: {1}\n{3}\n--- \nYours site messenger
leavemail.subject=Question from {0}
@@ -248,6 +253,7 @@ page.analysis.search.head_messages=Visitor's messages
page.analysis.search.head_name=Name
page.analysis.search.head_operator=Operator
page.analysis.search.head_time=Time in chat
+page.analysis.trackedpath.title=Tracked visitor's path
page.analysis.userhistory.intro=You can find chat history of your visitors here.
page.analysis.userhistory.title=Visits history
page.chat.old_browser.close=Close...
@@ -366,7 +372,9 @@ pending.table.head.operator=Operator
pending.table.head.state=State
pending.table.head.total=Total time
pending.table.head.waittime=Waiting time
+pending.table.invite=Invite to chat
pending.table.speak=Click to chat with the visitor
+pending.table.tracked=Tracked visitor's path
pending.table.view=Watch the chat
permission.admin=System administration: settings, operators management, button generation
permission.modifyprofile=Ability to modify profile
@@ -430,6 +438,8 @@ settings.enablessl.description=Please, note that your web server should be confi
settings.enablessl=Allow secure connections (SSL)
settings.enablestatistics.description=Adds page with messenger usage reports.
settings.enablestatistics=Enable "Statistics"
+settings.enabletracking.description=Enable tracking of visitors' activity on your site and ability to invite visitors to chat.
+settings.enabletracking=Enable "Tracking and inviting"
settings.forcessl.description=Show chats only through https connection
settings.forcessl=Force all chats to be secure
settings.frequencychat.description=Specify the poll interval in seconds. Default is 2 seconds.
@@ -438,12 +448,16 @@ settings.frequencyoldchat.description=Old browsers need to refresh the whole pag
settings.frequencyoldchat=Page refresh time for old browsers
settings.frequencyoperator.description=Specify the poll interval in seconds. Default is 2 seconds.
settings.frequencyoperator=Operator's console refresh time
+settings.frequencytracking.description=Specify the poll interval in seconds. Default is 10 seconds.
+settings.frequencytracking=Tracking refresh time
settings.geolink.description=Each IP becomes a link opening in new window. {ip} is substituted with a real ip.
settings.geolink=Link to an external geolocation service
settings.geolinkparams.description=Window size and toolbars hiding
settings.geolinkparams=Geolocation window options
settings.host.description=Destination for you company name or logo link
settings.host=URL of your website
+settings.invitationlifetime.description=Specify the lifetime of invitation in seconds. Default is 60 seconds.
+settings.invitationlifetime=Invitation lifetime
settings.leavemessage_captcha.description=Protection against automated spam (captcha)
settings.leavemessage_captcha=Force visitor to enter verification code when leaving message
settings.logo.description=Enter http address of your company logo
@@ -466,10 +480,14 @@ settings.survey.askmail=Ask visitor e-mail
settings.survey.askmessage.description=Show/hide initial question field in the survey
settings.survey.askmessage=Show initial question field
settings.title=Messenger settings
+settings.trackinglifetime.description=Specify the lifetime of old visitor's tracks in seconds. Default is 600 seconds.
+settings.trackinglifetime=Track lifetime
settings.usercanchangename.description=Turn off to hide edit box from chat window
settings.usercanchangename=Allows users to change their names
settings.usernamepattern.description=How to build visitor identifying string from {name}, {id} or {addr}. Default: {name}
settings.usernamepattern=Visitor's identifier
+settings.visitorslimit.description=Specify the number of items to display in tracked visitors list. Default is 20. Set 0 for all visitors (not recommended).
+settings.visitorslimit=Limit for tracked visitors list
settings.wrong.email=Enter proper email address
settings.wrong.onehostconnections="Max number of threads" field should be number
site.title=mibew.org
@@ -499,6 +517,12 @@ topMenu.logoff=Exit
topMenu.main=Home
topMenu.users.nomenu=without menu
topMenu.users=Visitors
+tracked.date=Visit time
+tracked.empty.referrer=direct visit
+tracked.intro=This page displays tracked history of visitor's activity on site.
+tracked.link=Visited page
+tracked.path=Tracked path of visitor
+tracked.visitor.came.from=Visitor came from
translate.direction=Direction:
translate.show.all=All strings
translate.show.foradmin=Strings for administrator
@@ -516,3 +540,15 @@ updates.intro=Messenger updates.
updates.latest=Latest version:
updates.news=News:
updates.title=Updates
+visitors.how_to=To invite the visitor to chat click on his/her name in the list.
+visitors.intro=The table below represents a list of visitors ready to chat on your site.
+visitors.no_visitors=There are no visitors ready to chat on your site at present time
+visitors.table.head.contactid=Visitor's address
+visitors.table.head.etc=Misc
+visitors.table.head.firsttimeonsite=First seen
+visitors.table.head.invitations=Invitations / Chats
+visitors.table.head.invitationtime=Invitation time
+visitors.table.head.invited.by=Invited by
+visitors.table.head.lasttimeonsite=Last seen
+visitors.table.head.name=Name
+visitors.title=Visitors on site
diff --git a/src/messenger/webim/locales/names/level1 b/src/messenger/webim/locales/names/level1
index 2a6ac745..cecc2135 100644
--- a/src/messenger/webim/locales/names/level1
+++ b/src/messenger/webim/locales/names/level1
@@ -33,6 +33,7 @@ chat.window.send_message_short
chat.window.title.agent
chat.window.title.user
chat.window.toolbar.mail_history
+chat.window.toolbar.mute
chat.window.toolbar.redirect_user
chat.window.toolbar.refresh
company.title
@@ -46,6 +47,7 @@ harderrors.header
image.chat.history
image.chat.message
image.chat.sprite
+invitation.message
leavemail.body
leavemail.subject
leavemessage.close
diff --git a/src/messenger/webim/locales/names/level2 b/src/messenger/webim/locales/names/level2
index 2542d21a..a9cdf37b 100644
--- a/src/messenger/webim/locales/names/level2
+++ b/src/messenger/webim/locales/names/level2
@@ -43,6 +43,7 @@ chat.thread.state_closed
chat.thread.state_loading
chat.thread.state_wait
chat.thread.state_wait_for_another_agent
+chat.visitor.invitation.accepted
clients.how_to
clients.intro
clients.no_clients
@@ -75,6 +76,8 @@ image.button.save
image.button.search
install.newfeatures
install.updatedb
+invitation.sent
+invitation.title
lang.choose
leftMenu.client_agents
leftMenu.client_gen_button
@@ -102,6 +105,7 @@ page.analysis.search.head_messages
page.analysis.search.head_name
page.analysis.search.head_operator
page.analysis.search.head_time
+page.analysis.trackedpath.title
page.analysis.userhistory.intro
page.analysis.userhistory.title
page.gen_button.default_group
@@ -136,7 +140,9 @@ pending.table.head.operator
pending.table.head.state
pending.table.head.total
pending.table.head.waittime
+pending.table.invite
pending.table.speak
+pending.table.tracked
pending.table.view
permission.admin
permission.takeover
@@ -197,3 +203,21 @@ topMenu.logoff
topMenu.main
topMenu.users
topMenu.users.nomenu
+tracked.date
+tracked.empty.referrer
+tracked.intro
+tracked.link
+tracked.path
+tracked.visitor.came.from
+visitors.how_to
+visitors.intro
+visitors.no_visitors
+visitors.table.head.contactid
+visitors.table.head.etc
+visitors.table.head.firsttimeonsite
+visitors.table.head.invitations
+visitors.table.head.invitationtime
+visitors.table.head.invited.by
+visitors.table.head.lasttimeonsite
+visitors.table.head.name
+visitors.title
diff --git a/src/messenger/webim/locales/ru/properties b/src/messenger/webim/locales/ru/properties
index 677c4d6e..56c1967a 100644
--- a/src/messenger/webim/locales/ru/properties
+++ b/src/messenger/webim/locales/ru/properties
@@ -78,6 +78,7 @@ chat.thread.state_wait=
chat.thread.state_wait_for_another_agent=Ожидание оператора
chat.visitor.email=E-Mail: {0}
chat.visitor.info=О Посетителе: {0}
+chat.visitor.invitation.accepted=Посетитель принял приглашение от оператора {0}
chat.wait=Пожалуйста, подождите немного, к Вам присоединится оператор..
chat.window.chatting_with=Вы общаетесь с:
chat.window.close_title=Закрыть диалог
@@ -92,6 +93,7 @@ chat.window.title.user=Mibew
chat.window.toolbar.mail_history=Отправить историю диалога по электронной почте
chat.window.toolbar.redirect_user=Перенаправить посетителя другому оператору
chat.window.toolbar.refresh=Обновить содержимое диалога
+chat.window.toolbar.mute=Вкл/выкл звук
clients.how_to=Для ответа посетителю кликните на соответствующее имя в списке.
clients.intro=На этой странице можно просмотреть список ожидающих ответа посетителей.
clients.no_clients=В этой очереди ожидающих посетителей нет
@@ -151,6 +153,7 @@ form.field.login.description=
form.field.login=Логин
form.field.mail.description=Для уведомлений и восстановления пароля.
form.field.mail=Адрес электронной почты
+form.field.mail.description=Для получения извещений и восстановления пароля.
form.field.message=Сообщение
form.field.name=Ваше имя
form.field.password.description=Введите новый пароль или оставьте поле пустым, чтобы сохранить старый.
@@ -200,6 +203,9 @@ install.updatedb=
installed.login_link=Войти в систему
installed.message=Установка успешно завершена.
installed.notice=Вы можете войти в систему как admin с пустым паролем.
!!! В целях безопасности, удалите, пожалуйста, каталог {0} с вашего сервера и поменяйте пароль.
+invitation.message=Здравствуйте! Могу ли я Вам помочь?
+invitation.sent=Приглашение отправлено посетителю. Пожалуйста, немного подождите.
+invitation.title=Приглашение
lang.choose=Выберите ваш язык
leavemail.body=Ваш посетитель '{0}' оставил сообщение:\n\n{2}\n\nЕmail: {1}\n{3}\n--- \nС уважением,\nВаш Веб Мессенджер
leavemail.subject=Вопрос от {0}
@@ -248,6 +254,7 @@ page.analysis.search.head_messages=
page.analysis.search.head_name=Имя
page.analysis.search.head_operator=Оператор
page.analysis.search.head_time=Время в диалоге
+page.analysis.trackedpath.title=Отслеженный путь посетителя
page.analysis.userhistory.intro=На данной странице Вы можете увидеть все диалоги с Вашим посетителем.
page.analysis.userhistory.title=История диалогов
page.chat.old_browser.close=Закрыть...
@@ -366,7 +373,9 @@ pending.table.head.operator=
pending.table.head.state=Состояние
pending.table.head.total=Общее время
pending.table.head.waittime=Время ожидания
+pending.table.invite=Отправить приглашение к диалогу
pending.table.speak=Нажмите для того, чтобы обслужить посетителя
+pending.table.tracked=Отслеженный путь посетителя
pending.table.view=Подключиться к диалогу в режиме просмотра
permission.admin=Администрирование системы: настройка, управление операторами, генерация кнопки
permission.modifyprofile=Возможность изменять свой профиль
@@ -422,6 +431,8 @@ settings.enablessl.description=
settings.enablessl=Разрешать защищенные соединения (SSL)
settings.enablestatistics.description=Добавляет страницу с отчетами по использованию мессенджера.
settings.enablestatistics=Включить функцию "Статистика"
+settings.enabletracking.description=Добавляет функцию отслеживания перемещений посетителей по Вашему сайту и возможность отправки им приглашений к диалогу.
+settings.enabletracking=Включить функцию "Отслеживание и приглашение"
settings.forcessl.description=Показывать чаты используя только защищенное соединение
settings.forcessl=Принудительно переводить все чаты в защищенный режим
settings.frequencychat.description=Укажите частоту опроса сервера в секундах. По умолчанию, 2 секунды.
@@ -430,12 +441,16 @@ settings.frequencyoldchat.description=
settings.frequencyoldchat=Периодичность обновления всего диалога для старых браузеров
settings.frequencyoperator.description=Укажите частоту опроса сервера в секундах. По умолчанию, 2 секунды.
settings.frequencyoperator=Периодичность обновления консоли оператора
+settings.frequencytracking.description=Укажите частоту опроса блока слежения за посетителями в секундах. По умолчанию, 10 секунд.
+settings.frequencytracking=Периодичность опроса блока слежения
settings.geolink.description=На любом IP адресе можно будет открыть небольшое окно с геоинформацией. Можно использовать {ip}.
settings.geolink=Ссылка на внешний geolocation сервис
settings.geolinkparams.description=Размер окна и наличие тулбаров
settings.geolinkparams=Опции для окна с геоинформацией
settings.host.description=Будет открываться по нажатию на логотип или название компании в чат окне
settings.host=Ссылка на ваш веб сайт
+settings.invitationlifetime.description=Укажите срок действия приглашения к диалогу в секундах. По умолчанию, 60 секунд.
+settings.invitationlifetime=Срок действия приглашения
settings.leavemessage_captcha.description=Защита от автоматизированного спама (captcha)
settings.leavemessage_captcha=Разрешать оставлять сообщение только после ввода специального кода с картинки
settings.logo.description=Введите ссылку на логотип компании
@@ -458,10 +473,14 @@ settings.survey.askmail=
settings.survey.askmessage.description=Показать/спрятать поле ввода первого вопроса
settings.survey.askmessage=Предлагать сразу же задать вопрос
settings.title=Настройки мессенджера
+settings.trackinglifetime.description=Укажите срок хранения старых отслеженных путей в секундах. По умолчанию, 600 секунд.
+settings.trackinglifetime=Срок хранения отслеженных путей
settings.usercanchangename.description=Возможность убрать поле смены имени из чат окна
settings.usercanchangename=Разрешать посетителям менять имена
settings.usernamepattern.description=Укажите как отобразить имя посетителя операторам. Можно использовать {name}, {id} и {addr}. По умолчанию: {name}
settings.usernamepattern=Отображаемое имя посетителя
+settings.visitorslimit.description=Укажите количество выводимых в списке отслеживаемых посетителей сайта. По умолчанию, 20. Укажите 0 для снятия ограничения (не рекомендуется).
+settings.visitorslimit=Ограничение на число выводимых в списке отслеживаемых посетителей
settings.wrong.email=Введите правильный адрес электронной почты
settings.wrong.onehostconnections=Поле "Максимальное количество диалогов" должно быть числом
site.title=mibew.org
@@ -491,6 +510,12 @@ topMenu.logoff=
topMenu.main=Главная
topMenu.users.nomenu=без меню
topMenu.users=Посетители
+tracked.date=Время визита
+tracked.empty.referrer=прямое посещение
+tracked.intro=На этой странице отображается отслеженная история активности посетителя сайта.
+tracked.link=Посещённая страница
+tracked.path=Отслеженный путь посетителя
+tracked.visitor.came.from=Посетитель пришёл со страницы
translate.direction=Направление перевода:
translate.show.all=Все строки
translate.show.foradmin=Строки для администратора
@@ -508,3 +533,15 @@ updates.intro=
updates.latest=Последняя версия:
updates.news=Новости:
updates.title=Обновления
+visitors.how_to=Для приглашения посетителя к диалогу кликните на его или её имя в списке.
+visitors.intro=В рсположенной ниже таблице представлен список готовых к диалогу посетителей на Вашем сайте.
+visitors.no_visitors=В настоящее время на Вашем сайте нет готовых к диалогу посетителей
+visitors.table.head.contactid=Адрес посетителя
+visitors.table.head.etc=Разное
+visitors.table.head.firsttimeonsite=Впервые замечен
+visitors.table.head.invitations=Приглашений / Диалогов
+visitors.table.head.invitationtime=Время приглашения
+visitors.table.head.invited.by=Кем приглашён
+visitors.table.head.lasttimeonsite=Последний раз замечен
+visitors.table.head.name=Имя
+visitors.title=Посетители на сайте
diff --git a/src/messenger/webim/operator/features.php b/src/messenger/webim/operator/features.php
index ad193830..147b10b9 100644
--- a/src/messenger/webim/operator/features.php
+++ b/src/messenger/webim/operator/features.php
@@ -29,7 +29,7 @@ $page = array('agentId' => '');
$errors = array();
$options = array(
- 'enableban', 'usercanchangename', 'enablegroups', 'enablestatistics',
+ 'enableban', 'usercanchangename', 'enablegroups', 'enablestatistics', 'enabletracking',
'enablessl', 'forcessl',
'enablepresurvey', 'surveyaskmail', 'surveyaskgroup', 'surveyaskmessage',
'enablepopupnotification', 'showonlineoperators',
diff --git a/src/messenger/webim/operator/invitationstate.php b/src/messenger/webim/operator/invitationstate.php
new file mode 100644
index 00000000..191ceeb6
--- /dev/null
+++ b/src/messenger/webim/operator/invitationstate.php
@@ -0,0 +1,45 @@
+';
+echo '' . ($invitation['invited'] ? $invitation['invited'] : '0') . '';
+echo '' . ($invitation['threadid'] ? $invitation['threadid'] : '0') . '';
+echo '';
+exit;
+
+?>
diff --git a/src/messenger/webim/operator/invite.php b/src/messenger/webim/operator/invite.php
new file mode 100644
index 00000000..17c35504
--- /dev/null
+++ b/src/messenger/webim/operator/invite.php
@@ -0,0 +1,44 @@
+
diff --git a/src/messenger/webim/operator/performance.php b/src/messenger/webim/operator/performance.php
index 31d52bba..be9ffb29 100644
--- a/src/messenger/webim/operator/performance.php
+++ b/src/messenger/webim/operator/performance.php
@@ -30,7 +30,9 @@ $errors = array();
$options = array(
'online_timeout', 'updatefrequency_operator', 'updatefrequency_chat',
- 'updatefrequency_oldchat', 'max_connections_from_one_host');
+ 'updatefrequency_oldchat', 'max_connections_from_one_host',
+ 'updatefrequency_tracking', 'visitors_limit', 'invitation_lifetime',
+ 'tracking_lifetime' );
loadsettings();
$params = array();
@@ -64,6 +66,30 @@ if (isset($_POST['onlinetimeout'])) {
$errors[] = getlocal("settings.wrong.onehostconnections");
}
+ if ($settings['enabletracking']) {
+
+ $params['updatefrequency_tracking'] = getparam('frequencytracking');
+ if (!is_numeric($params['updatefrequency_tracking'])) {
+ $errors[] = wrong_field("settings.frequencytracking");
+ }
+
+ $params['visitors_limit'] = getparam('visitorslimit');
+ if (!is_numeric($params['visitors_limit'])) {
+ $errors[] = wrong_field("settings.visitorslimit");
+ }
+
+ $params['invitation_lifetime'] = getparam('invitationlifetime');
+ if (!is_numeric($params['invitation_lifetime'])) {
+ $errors[] = wrong_field("settings.invitationlifetime");
+ }
+
+ $params['tracking_lifetime'] = getparam('trackinglifetime');
+ if (!is_numeric($params['tracking_lifetime'])) {
+ $errors[] = wrong_field("settings.trackinglifetime");
+ }
+
+ }
+
if (count($errors) == 0) {
foreach ($options as $opt) {
$settings[$opt] = $params[$opt];
@@ -79,6 +105,18 @@ $page['formfrequencyoperator'] = $params['updatefrequency_operator'];
$page['formfrequencychat'] = $params['updatefrequency_chat'];
$page['formfrequencyoldchat'] = $params['updatefrequency_oldchat'];
$page['formonehostconnections'] = $params['max_connections_from_one_host'];
+
+if ($settings['enabletracking']) {
+
+ $page['formfrequencytracking'] = $params['updatefrequency_tracking'];
+ $page['formvisitorslimit'] = $params['visitors_limit'];
+ $page['forminvitationlifetime'] = $params['invitation_lifetime'];
+ $page['formtrackinglifetime'] = $params['tracking_lifetime'];
+
+}
+
+$page['enabletracking'] = $settings['enabletracking'];
+
$page['stored'] = isset($_GET['stored']);
prepare_menu($operator);
diff --git a/src/messenger/webim/operator/tracked.php b/src/messenger/webim/operator/tracked.php
new file mode 100644
index 00000000..91d63c88
--- /dev/null
+++ b/src/messenger/webim/operator/tracked.php
@@ -0,0 +1,69 @@
+ $v) {
+ $page['history'][] = array( 'date' => date_to_text($k),
+ 'link' => htmlspecialchars($v) );
+}
+start_html_output();
+require('../view/tracked.php');
+?>
\ No newline at end of file
diff --git a/src/messenger/webim/operator/update.php b/src/messenger/webim/operator/update.php
index 066b5cc4..b23e6cdf 100644
--- a/src/messenger/webim/operator/update.php
+++ b/src/messenger/webim/operator/update.php
@@ -24,6 +24,7 @@ require_once('../libs/chat.php');
require_once('../libs/userinfo.php');
require_once('../libs/operator.php');
require_once('../libs/groups.php');
+require_once('../libs/track.php');
$operator = get_logged_in();
if (!$operator) {
@@ -167,9 +168,97 @@ function print_operators()
echo "";
}
+function visitor_to_xml($visitor, $link)
+{
+ $result = "";
+
+// $result .= "" . htmlspecialchars($visitor['userid']) . "";
+ $result .= "" . htmlspecialchars($visitor['username']) . "";
+
+ $result .= "";
+ $result .= "" . $visitor['unix_timestamp(lasttime)'] . "000";
+// $result .= "" . htmlspecialchars($visitor['entry']) . "";
+
+// $result .= "";
+// $path = track_retrieve_path($visitor);
+// ksort($path);
+// foreach ($path as $k => $v) {
+// $result .= "" . htmlspecialchars($v) . "";
+// }
+// $result .= "";
+
+ $details = track_retrieve_details($visitor);
+ $userAgent = get_useragent_version($details['user_agent']);
+ $result .= "" . $userAgent . "";
+ $result .= "" . htmlspecialchars(get_user_addr($details['remote_host'])) . "";
+
+ $result .= "" . $visitor['invitations'] . "";
+ $result .= "" . $visitor['chats'] . "";
+
+ $result .= "";
+ if ($visitor['invited']) {
+ $result .= "" . $visitor['unix_timestamp(invitationtime)'] . "000";
+ $operator = get_operator_name(operator_by_id_($visitor['invitedby'], $link));
+ $result .= "" . htmlspecialchars(htmlspecialchars($operator)) . "";
+ }
+ $result .= "";
+
+ $result .= "";
+ return $result;
+}
+
+function print_visitors()
+{
+ global $webim_encoding, $settings, $state_closed, $state_left, $mysqlprefix;
+
+ $link = connect();
+
+// Remove old visitors' tracks
+ $query = "DELETE FROM ${mysqlprefix}chatsitevisitor WHERE (UNIX_TIMESTAMP(CURRENT_TIMESTAMP) - UNIX_TIMESTAMP(lasttime)) > " . $settings['tracking_lifetime'] .
+ " AND (threadid IS NULL OR (SELECT count(*) FROM ${mysqlprefix}chatthread WHERE threadid = ${mysqlprefix}chatsitevisitor.threadid" .
+ " AND istate <> $state_closed AND istate <> $state_left) = 0)";
+ perform_query($query, $link);
+
+// Remove old invitations
+ $query = "UPDATE ${mysqlprefix}chatsitevisitor SET invited = 0, invitationtime = NULL, invitedby = NULL" .
+ " WHERE threadid IS NULL AND (UNIX_TIMESTAMP(CURRENT_TIMESTAMP) - UNIX_TIMESTAMP(invitationtime)) > " .
+ $settings['invitation_lifetime'];
+ perform_query($query, $link);
+
+// Remove associations of visitors with closed threads
+ $query = "UPDATE ${mysqlprefix}chatsitevisitor SET threadid = NULL WHERE threadid IS NOT NULL AND" .
+ " (SELECT count(*) FROM ${mysqlprefix}chatthread WHERE threadid = ${mysqlprefix}chatsitevisitor.threadid" .
+ " AND istate <> $state_closed AND istate <> $state_left) = 0";
+ perform_query($query, $link);
+
+ $output = array();
+
+ $query = "SELECT visitorid, userid, username, unix_timestamp(firsttime), unix_timestamp(lasttime), " .
+ "entry, path, details, invited, unix_timestamp(invitationtime), invitedby, invitations, chats " .
+ "FROM ${mysqlprefix}chatsitevisitor " .
+ "WHERE threadid IS NULL " .
+ "ORDER BY invited, lasttime DESC, invitations";
+ $query .= ($settings['visitors_limit'] == '0') ? "" : " LIMIT " . $settings['visitors_limit'];
+
+ $rows = select_multi_assoc($query, $link);
+ foreach ($rows as $row) {
+ $visitor = visitor_to_xml($row, $link);
+ $output[] = $visitor;
+ }
+
+ mysql_close($link);
+
+ 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);
$showonline = verifyparam("showonline", "/^1$/", 0);
+$showvisitors = verifyparam("showvisitors", "/^1$/", 0);
$link = connect();
loadsettings_($link);
@@ -185,6 +274,9 @@ if ($showonline) {
print_operators();
}
print_pending_threads($groupids, $since);
+if ($showvisitors) {
+ print_visitors();
+}
echo '';
notify_operator_alive($operator['operatorid'], $status);
exit;
diff --git a/src/messenger/webim/operator/users.php b/src/messenger/webim/operator/users.php
index dba8d1f4..97160e24 100644
--- a/src/messenger/webim/operator/users.php
+++ b/src/messenger/webim/operator/users.php
@@ -39,6 +39,7 @@ $page['showpopup'] = $settings['enablepopupnotification'] == '1' ? "1" : "0";
$page['frequency'] = $settings['updatefrequency_operator'];
$page['istatus'] = $status;
$page['showonline'] = $settings['showonlineoperators'] == '1' ? "1" : "0";
+$page['showvisitors'] = $settings['enabletracking'] == '1' ? "1" : "0";
prepare_menu($operator);
start_html_output();
diff --git a/src/messenger/webim/styles/default/images/buttons/tracked.gif b/src/messenger/webim/styles/default/images/buttons/tracked.gif
new file mode 100644
index 00000000..afe58f58
Binary files /dev/null and b/src/messenger/webim/styles/default/images/buttons/tracked.gif differ
diff --git a/src/messenger/webim/styles/default/templates/chat.tpl b/src/messenger/webim/styles/default/templates/chat.tpl
index 979ddfd7..dbc777d3 100644
--- a/src/messenger/webim/styles/default/templates/chat.tpl
+++ b/src/messenger/webim/styles/default/templates/chat.tpl
@@ -60,6 +60,13 @@ var threadParams = { servl:"${webimroot}/thread.php",wroot:"${webimroot}",freque
}
.ilog { background-position: 0px 0px;width: 20px; height: 80px; }
.imessage { background-position: 0px -82px;width: 20px; height: 85px; }
+.itracked {
+ background: transparent url(${tplroot}/images/buttons/tracked.gif) no-repeat scroll 0px 0px;
+ width: 25px; height: 25px;
+ -moz-background-clip: -moz-initial;
+ -moz-background-origin: -moz-initial;
+ -moz-background-inline-policy: -moz-initial;
+}
@@ -175,10 +182,13 @@ ${endif:canpost}
${if:historyParams}