public static function QueuedGetList($params) { $query = new \Bitrix\Main\Entity\Query(Bitrix\Voximplant\QueueTable::getEntity()); $query->registerRuntimeField('', new \Bitrix\Main\Entity\ExpressionField('IS_ONLINE_CUSTOM', 'CASE WHEN %s > ' . CVoxImplantUser::GetLastActivityDateAgo() . ' THEN \'Y\' ELSE \'N\' END', array('USER.LAST_ACTIVITY_DATE'))); if (isset($params['select'])) { $query->setSelect($params['select']); } else { $query->addSelect('ID')->addSelect('IS_ONLINE_CUSTOM'); } if (isset($params['filter'])) { $query->setFilter($params['filter']); } if (isset($params['order'])) { $query->setOrder($params['order']); } return $query->exec(); }
foreach ($post["QUEUE"] as $type => $k) { $queue[$type] = str_replace($type, "", $k); } } if ($skipSaving) { $error = $viSip->GetError()->msg; } else { if (($res = Bitrix\Voximplant\ConfigTable::update($arParams["ID"], $arFields)) && $res->isSuccess()) { // TODO We should work with other socialnetwork entities $toDrop = array_diff($arResult["~QUEUE"], $queue["U"]); $toAdd = array_diff($queue["U"], array_keys($arResult["QUEUE"])); foreach ($toDrop as $primary => $id) { Bitrix\Voximplant\QueueTable::delete($primary); } foreach ($toAdd as $k) { Bitrix\Voximplant\QueueTable::add(array("CONFIG_ID" => $arParams["ID"], "USER_ID" => $k, "STATUS" => "OFFLINE")); } LocalRedirect(CVoxImplantMain::GetPublicFolder() . 'lines.php?MODE=' . $arResult["ITEM"]["PORTAL_MODE"]); } $error = $res->getErrorMessages(); } $arResult = array("ERROR" => $error, "ITEM" => array_merge($arResult["ITEM"], $arFields), "QUEUE" => array_flip($queue["U"]), "SIP_CONFIG" => array_merge($arResult["SIP_CONFIG"], $arFieldsSip)); } foreach (array("MELODY_WELCOME", "MELODY_WAIT", "MELODY_HOLD", "MELODY_VOICEMAIL", "WORKTIME_DAYOFF_MELODY") as $id) { if ($arResult["ITEM"][$id] > 0) { $res = CFile::GetFileArray($arResult["ITEM"][$id]); if ($res) { $arResult["ITEM"]["~" . $id] = $res; } else { $arResult["ITEM"][$id] = 0; }
$res = Bitrix\Voximplant\QueueTable::getList(array('filter' => array('=CONFIG_ID' => $call['CONFIG_ID']))); while ($queue = $res->fetch()) { if ($params['USER_ID'] == $queue['USER_ID'] || $call['PORTAL_USER_ID'] == $queue['USER_ID']) { continue; } CVoxImplantMain::SendPullEvent(array('COMMAND' => 'timeout', 'USER_ID' => $queue['USER_ID'], 'CALL_ID' => $call['CALL_ID'], 'MARK' => 'timeout_hit_2')); } } } echo json_encode(array('result' => 'OK')); } else { if ($params["COMMAND"] == "HangupCall") { $res = Bitrix\Voximplant\CallTable::getList(array('filter' => array('=CALL_ID' => $params['CALL_ID']))); $userTimeout = array(); if ($call = $res->fetch()) { $res = Bitrix\Voximplant\QueueTable::getList(array('filter' => array('=CONFIG_ID' => $call['CONFIG_ID']))); while ($queue = $res->fetch()) { if ($call['TRANSFER_USER_ID'] == $queue['USER_ID']) { continue; } $userTimeout[$queue['USER_ID']] = true; CVoxImplantMain::SendPullEvent(array('COMMAND' => 'timeout', 'USER_ID' => $queue['USER_ID'], 'CALL_ID' => $call['CALL_ID'], 'MARK' => 'timeout_hit_3')); } if ($call['TRANSFER_USER_ID'] > 0) { $userTimeout[$call['TRANSFER_USER_ID']] = true; CVoxImplantTransfer::SendPullEvent(array('COMMAND' => 'timeoutTransfer', 'USER_ID' => $call['TRANSFER_USER_ID'], 'CALL_ID' => $call['CALL_ID'])); } if ($call['PORTAL_USER_ID'] > 0 && !$userTimeout[$call['PORTAL_USER_ID']]) { $userTimeout[$call['PORTAL_USER_ID']] = true; CVoxImplantMain::SendPullEvent(array('COMMAND' => 'timeout', 'USER_ID' => $call['PORTAL_USER_ID'], 'CALL_ID' => $call['CALL_ID'], 'MARK' => 'timeout_hit_4')); }