mirror of
https://github.com/Mibew/i18n.git
synced 2025-01-22 21:40:28 +03:00
Create separate requests buffers for user and agent
This commit is contained in:
parent
46ce6f2a91
commit
9e01c73cae
@ -214,6 +214,7 @@ abstract class RequestProcessor {
|
||||
}
|
||||
foreach ($functions as $function) {
|
||||
$this->mibewAPI->checkFunction($function, true);
|
||||
$this->checkFunction($function);
|
||||
}
|
||||
|
||||
// Create request
|
||||
@ -514,6 +515,15 @@ abstract class RequestProcessor {
|
||||
trigger_error('Method sendAsyncResponses does not implement!', E_USER_WARNING);
|
||||
}
|
||||
|
||||
/**
|
||||
* Additional validation for functions that called via call method
|
||||
*
|
||||
* If something wrong function should throw an Exception.
|
||||
*
|
||||
* @param Array $function A Function array
|
||||
*/
|
||||
protected function checkFunction($function) {}
|
||||
|
||||
/**
|
||||
* Creates and returns an instance of the MibewAPI class.
|
||||
*
|
||||
|
@ -124,26 +124,66 @@ class ThreadProcessor extends ClientSideProcessor {
|
||||
// Define empty thread id and thread token
|
||||
$thread_id = null;
|
||||
$token = null;
|
||||
$recipient = null;
|
||||
foreach ($request['functions'] as $function) {
|
||||
// Save thread id and thread token from first function in package
|
||||
if (is_null($thread_id)) {
|
||||
$thread_id = $function['arguments']['threadId'];
|
||||
$token = $function['arguments']['token'];
|
||||
$recipient = $function['arguments']['recipient'];
|
||||
continue;
|
||||
}
|
||||
// Check thread id and thread token for the remaining functions
|
||||
if ($thread_id != $function['arguments']['threadId'] || $token != $function['arguments']['token']) {
|
||||
if ($thread_id != $function['arguments']['threadId']
|
||||
|| $token != $function['arguments']['token']) {
|
||||
throw new ThreadProcessorException(
|
||||
'Various thread id or thread token in different functions in one package!',
|
||||
ThreadProcessorException::VARIOUS_THREAD_ID
|
||||
);
|
||||
}
|
||||
// Check request recipient
|
||||
if ($recipient !== $function['arguments']['recipient']) {
|
||||
throw new ThreadProcessorException(
|
||||
'Various recipient in different functions in one package!',
|
||||
ThreadProcessorException::VARIOUS_RECIPIENT
|
||||
);
|
||||
}
|
||||
}
|
||||
// Store request in buffer
|
||||
$this->addRequestToBuffer('thread_'.$thread_id, $request);
|
||||
if ($recipient == 'agent' || $recipient == 'both') {
|
||||
$this->addRequestToBuffer('thread_agent_'.$thread_id, $request);
|
||||
}
|
||||
if ($recipient == 'user' || $recipient == 'both') {
|
||||
$this->addRequestToBuffer('thread_user_'.$thread_id, $request);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Additional validation for functions that called via call method
|
||||
*
|
||||
* @param Array $function A Function array
|
||||
*/
|
||||
protected function checkFunction($function) {
|
||||
// Check recipient argument existance
|
||||
if (! array_key_exists('recipient', $function['arguments'])) {
|
||||
throw new ThreadProcessorException(
|
||||
"'recipient' argument is not set in function '{function['function]}'!",
|
||||
ThreadProcessorException::EMPTY_RECIPIENT
|
||||
);
|
||||
}
|
||||
$recipient = $function['arguments']['recipient'];
|
||||
// Check recipient value
|
||||
if ($recipient != 'agent'
|
||||
&& $recipient != 'both'
|
||||
&& $recipient != 'user') {
|
||||
throw new ThreadProcessorException(
|
||||
"Wrong recipient value '{$recipient}'! It should be one of 'agent', 'user', 'both'",
|
||||
ThreadProcessorException::WRONG_RECIPIENT_VALUE
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Send new messages to window
|
||||
*
|
||||
@ -231,11 +271,23 @@ class ThreadProcessor extends ClientSideProcessor {
|
||||
// Update messages
|
||||
$this->sendMessages($thread, $args['user'], $args['lastId']);
|
||||
|
||||
// Create requests key
|
||||
$requests_key = false;
|
||||
if ($args['user']) {
|
||||
$requests_key = 'thread_user_'.$thread->id;
|
||||
} else {
|
||||
if ($operator['operatorid'] == $thread->agentId) {
|
||||
$requests_key = 'thread_agent_'.$thread->id;
|
||||
}
|
||||
}
|
||||
|
||||
// Load stored requests
|
||||
$stored_requests = $this->getRequestsFromBuffer('thread_'.$thread->id);
|
||||
if ($requests_key !== false) {
|
||||
$stored_requests = $this->getRequestsFromBuffer($requests_key);
|
||||
if ($stored_requests !== false) {
|
||||
$this->responses = array_merge($this->responses, $stored_requests);
|
||||
}
|
||||
}
|
||||
|
||||
// Get status values
|
||||
if ($args['user']) {
|
||||
@ -360,26 +412,38 @@ class ThreadProcessor extends ClientSideProcessor {
|
||||
}
|
||||
|
||||
class ThreadProcessorException extends RequestProcessorException {
|
||||
/**
|
||||
* 'recipient' argument is not set
|
||||
*/
|
||||
const EMPTY_RECIPIENT = 1;
|
||||
/**
|
||||
* Wrong arguments set for an API function
|
||||
*/
|
||||
const ERROR_WRONG_ARGUMENTS = 1;
|
||||
const ERROR_WRONG_ARGUMENTS = 2;
|
||||
/**
|
||||
* Thread cannot be loaded
|
||||
*/
|
||||
const ERROR_WRONG_THREAD = 2;
|
||||
const ERROR_WRONG_THREAD = 3;
|
||||
/**
|
||||
* Message cannot be send
|
||||
*/
|
||||
const ERROR_CANNOT_SEND = 3;
|
||||
const ERROR_CANNOT_SEND = 4;
|
||||
/**
|
||||
* User rename forbidden by system configurations
|
||||
*/
|
||||
const ERROR_FORBIDDEN_RENAME = 4;
|
||||
const ERROR_FORBIDDEN_RENAME = 5;
|
||||
/**
|
||||
* Various recipient in different functions in one package
|
||||
*/
|
||||
const VARIOUS_RECIPIENT = 6;
|
||||
/**
|
||||
* Various thread ids or thread tokens in different functions in one package
|
||||
*/
|
||||
const VARIOUS_THREAD_ID = 5;
|
||||
const VARIOUS_THREAD_ID = 7;
|
||||
/**
|
||||
* Wrong recipient value
|
||||
*/
|
||||
const WRONG_RECIPIENT_VALUE = 8;
|
||||
}
|
||||
|
||||
?>
|
Loading…
Reference in New Issue
Block a user