* * */ echo "Starting chat/workflow\n"; if (erLhcoreClassModelChatConfig::fetch('run_departments_workflow')->current_value == 1) { echo "Starting departments workflow\n"; $ts = time(); foreach (erLhcoreClassChat::getList(array('limit' => 500, 'customfilter' => array('transfer_timeout_ts < (' . $ts . '-transfer_timeout_ac)'), 'filter' => array('status' => erLhcoreClassModelChat::STATUS_PENDING_CHAT, 'transfer_if_na' => 1))) as $chat) { $canExecuteWorkflow = true; if (erLhcoreClassModelChatConfig::fetch('pro_active_limitation')->current_value >= 0) { if ($chat->department !== false && $chat->department->department_transfer_id > 0) { $canExecuteWorkflow = erLhcoreClassChat::getPendingChatsCountPublic($chat->department->department_transfer_id) <= erLhcoreClassModelChatConfig::fetch('pro_active_limitation')->current_value; } } if ($canExecuteWorkflow == true) { erLhcoreClassChatWorkflow::transferWorkflow($chat); echo "executing department transfer workflow for - ", $chat->id, "\n"; } else { echo "Skipping transfer because dedicated department queue is full\n"; } } echo "Ended departments workflow\n"; } // Unanswered chats callback echo erLhcoreClassChatWorkflow::mainUnansweredChatWorkflow(); echo "Closed chats - ", erLhcoreClassChatWorkflow::automaticChatClosing(), "\n"; echo "Purged chats - ", erLhcoreClassChatWorkflow::automaticChatPurge(), "\n"; foreach (erLhcoreClassChat::getList(array('limit' => 500, 'filter' => array('status' => erLhcoreClassModelChat::STATUS_PENDING_CHAT))) as $chat) { erLhcoreClassChatWorkflow::autoAssign($chat, $chat->department); erLhcoreClassChatEventDispatcher::getInstance()->dispatch('chat.pending_process_workflow', array('chat' => &$chat)); } echo "Ended chat/workflow\n";
<?php $tpl = erLhcoreClassTemplate::getInstance('lhchat/maintenance.tpl.php'); if ($Params['user_parameters_unordered']['action'] == 'closechats' || $Params['user_parameters_unordered']['action'] == 'purgechats' || $Params['user_parameters_unordered']['action'] == 'updateduration') { $currentUser = erLhcoreClassUser::instance(); if (!$currentUser->validateCSFRToken($Params['user_parameters_unordered']['csfr'])) { die('Invalid CSRF Token'); exit; } if ($Params['user_parameters_unordered']['action'] == 'closechats') { $tpl->set('closedchats', erLhcoreClassChatWorkflow::automaticChatClosing()); } if ($Params['user_parameters_unordered']['action'] == 'purgechats') { $tpl->set('purgedchats', erLhcoreClassChatWorkflow::automaticChatPurge()); } if ($Params['user_parameters_unordered']['action'] == 'updateduration') { $db = ezcDbInstance::get(); $db->query('UPDATE lh_chat SET chat_duration = (SELECT MAX(lh_msg.time) FROM lh_msg WHERE lh_msg.chat_id = lh_chat.id AND lh_msg.user_id = 0)-(lh_chat.time+lh_chat.wait_time)'); $db->query('UPDATE lh_chat SET chat_duration = 0 WHERE chat_duration < 0'); $tpl->set('updatedduration', true); } } $Result['content'] = $tpl->fetch(); $Result['path'] = array(array('url' => erLhcoreClassDesign::baseurl('system/configuration'), 'title' => erTranslationClassLhTranslation::getInstance()->getTranslation('department/departments', 'System configuration')), array('title' => erTranslationClassLhTranslation::getInstance()->getTranslation('chat/maintenance', 'Maintenance'))); erLhcoreClassChatEventDispatcher::getInstance()->dispatch('chat.maintenance_path', array('result' => &$Result));