diff --git a/src/mibew/libs/classes/Mibew/Controller/Settings/PerformanceController.php b/src/mibew/libs/classes/Mibew/Controller/Settings/PerformanceController.php
index fd1b526a..44db5282 100644
--- a/src/mibew/libs/classes/Mibew/Controller/Settings/PerformanceController.php
+++ b/src/mibew/libs/classes/Mibew/Controller/Settings/PerformanceController.php
@@ -48,6 +48,7 @@ class PerformanceController extends AbstractController
// Load settings from the database
$options = array(
'online_timeout',
+ 'connection_timeout',
'updatefrequency_operator',
'updatefrequency_chat',
'max_connections_from_one_host',
@@ -69,6 +70,7 @@ class PerformanceController extends AbstractController
$form = $request->request;
$page['formonlinetimeout'] = $form->get('onlinetimeout', $params['online_timeout']);
+ $page['formconnectiontimeout'] = $form->get('connectiontimeout', $params['connection_timeout']);
$page['formfrequencyoperator'] = $form->get('frequencyoperator', $params['updatefrequency_operator']);
$page['formfrequencychat'] = $form->get('frequencychat', $params['updatefrequency_chat']);
$page['formonehostconnections'] = $form->get('onehostconnections', $params['max_connections_from_one_host']);
@@ -117,6 +119,11 @@ class PerformanceController extends AbstractController
$errors[] = wrong_field("Operator online time threshold");
}
+ $params['connection_timeout'] = $request->request->get('connectiontimeout');
+ if (!is_numeric($params['connection_timeout'])) {
+ $errors[] = wrong_field("Connection timeout for messaging window");
+ }
+
$params['updatefrequency_operator'] = $request->request->get('frequencyoperator');
if (!is_numeric($params['updatefrequency_operator'])) {
$errors[] = wrong_field("Operator's console refresh time");
diff --git a/src/mibew/libs/classes/Mibew/RequestProcessor/ThreadProcessor.php b/src/mibew/libs/classes/Mibew/RequestProcessor/ThreadProcessor.php
index 58bac79e..b6df64ab 100644
--- a/src/mibew/libs/classes/Mibew/RequestProcessor/ThreadProcessor.php
+++ b/src/mibew/libs/classes/Mibew/RequestProcessor/ThreadProcessor.php
@@ -359,12 +359,12 @@ class ThreadProcessor extends ClientSideProcessor implements
// Get status values
if ($args['user']) {
- $is_typing = abs($thread->lastPingAgent - time()) < Thread::CONNECTION_TIMEOUT
+ $is_typing = abs($thread->lastPingAgent - time()) < Settings::get('connection_timeout')
&& $thread->agentTyping;
// Users can post messages only when thread is open.
$can_post = $thread->state != Thread::STATE_CLOSED;
} else {
- $is_typing = abs($thread->lastPingUser - time()) < Thread::CONNECTION_TIMEOUT
+ $is_typing = abs($thread->lastPingUser - time()) < Settings::get('connection_timeout')
&& $thread->userTyping;
// Operators can always post messages.
$can_post = true;
diff --git a/src/mibew/libs/classes/Mibew/Settings.php b/src/mibew/libs/classes/Mibew/Settings.php
index 58302138..d5a1ffe9 100644
--- a/src/mibew/libs/classes/Mibew/Settings.php
+++ b/src/mibew/libs/classes/Mibew/Settings.php
@@ -101,6 +101,7 @@ class Settings
'showonlineoperators' => '0',
'enablecaptcha' => '0',
'online_timeout' => 30, /* Timeout (in seconds) when online operator becomes offline */
+ 'connection_timeout' => 30, /* Timeout (in seconds) from the last ping when messaging window disconnects */
'updatefrequency_operator' => 2,
'updatefrequency_chat' => 2,
'statistics_aggregation_interval' => 24 * 60 * 60,
diff --git a/src/mibew/libs/classes/Mibew/Thread.php b/src/mibew/libs/classes/Mibew/Thread.php
index fb3f5d3a..35e49381 100644
--- a/src/mibew/libs/classes/Mibew/Thread.php
+++ b/src/mibew/libs/classes/Mibew/Thread.php
@@ -109,11 +109,6 @@ class Thread
*/
const KIND_PLUGIN = 7;
- /**
- * Messaging window connection timeout.
- */
- const CONNECTION_TIMEOUT = 30;
-
/**
* ID of the thread.
* @var int|bool
@@ -558,7 +553,7 @@ class Thread
}
// Check if other side of the conversation have connection problems
- if ($last_ping_other_side > 0 && abs(time() - $last_ping_other_side) > self::CONNECTION_TIMEOUT) {
+ if ($last_ping_other_side > 0 && abs(time() - $last_ping_other_side) > Settings::get('connection_timeout')) {
// Connection problems detected
if ($is_user) {
// _Other_ side is operator
@@ -577,7 +572,7 @@ class Thread
$this->postMessage(
self::KIND_CONN,
$message_to_post,
- array('created' => $last_ping_other_side + self::CONNECTION_TIMEOUT)
+ array('created' => $last_ping_other_side + Settings::get('connection_timeout'))
);
// And update thread
@@ -604,7 +599,7 @@ class Thread
$this->postMessage(
self::KIND_FOR_AGENT,
$message_to_post,
- array('created' => $last_ping_other_side + self::CONNECTION_TIMEOUT)
+ array('created' => $last_ping_other_side + Settings::get('connection_timeout'))
);
}
}
diff --git a/src/mibew/styles/pages/default/templates_src/server_side/settings_performance.handlebars b/src/mibew/styles/pages/default/templates_src/server_side/settings_performance.handlebars
index 8b9de464..c417565a 100644
--- a/src/mibew/styles/pages/default/templates_src/server_side/settings_performance.handlebars
+++ b/src/mibew/styles/pages/default/templates_src/server_side/settings_performance.handlebars
@@ -35,6 +35,15 @@
+