uawdijnntqw1x1x1
IP : 18.220.204.192
Hostname : axolotl
Kernel : Linux axolotl 4.9.0-13-amd64 #1 SMP Debian 4.9.228-1 (2020-07-05) x86_64
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,
OS : Linux
PATH:
/
var
/
www
/
axolotl
/
data
/
www
/
kirov.axolotls.ru
/
bitrix
/
modules
/
imopenlines
/
lib
/
queuemanager.php
/
/
<?php namespace Bitrix\ImOpenLines; use \Bitrix\Main\Loader, \Bitrix\Main\Localization\Loc; use \Bitrix\Im\User; use \Bitrix\ImOpenLines\Model\QueueTable; Loc::loadMessages(__FILE__); class QueueManager { private $error = null; private $id = null; private $config = null; const EVENT_QUEUE_OPERATORS_ADD = 'OnQueueOperatorsAdd'; const EVENT_QUEUE_OPERATORS_DELETE = 'OnQueueOperatorsDelete'; const EVENT_QUEUE_OPERATORS_CHANGE = 'OnQueueOperatorsChange'; public function __construct($id, $config = array()) { $this->error = new BasicError(null, '', ''); $this->id = intval($id); $this->config = $config; Loader::includeModule("im"); } public function updateUsers($users, $usersFields = array()) { $addQueue = Array(); $taggedCache = \Bitrix\Main\Application::getInstance()->getTaggedCache(); $businessUsers = Limit::getLicenseUsersLimit(); if ($businessUsers !== false) { $users = array_intersect($users, $businessUsers); } foreach ($users as $userId) { if (!User::getInstance($userId)->isExtranet()) { $addQueue[$userId] = $userId; } } $inQueue = Array(); $orm = QueueTable::getList(array( 'filter' => Array('=CONFIG_ID' => $this->id) )); while ($row = $orm->fetch()) { $inQueue[$row['ID']] = $row['USER_ID']; } $queueList['QUEUE_BEFORE'] = array_values($inQueue); if (implode('|', $addQueue) != implode('|', $inQueue)) { foreach ($inQueue as $id => $userId) { QueueTable::delete($id); $taggedCache->clearByTag(Queue::getUserCacheTag($userId, $this->id)); unset($inQueue[$id]); } foreach ($addQueue as $userId) { $data = array( "CONFIG_ID" => $this->id, "USER_ID" => $userId, ); if (!empty($usersFields[$userId])) { $data['USER_NAME'] = $usersFields[$userId]['USER_NAME']; $data['USER_WORK_POSITION'] = $usersFields[$userId]['USER_WORK_POSITION']; $data['USER_AVATAR'] = $usersFields[$userId]['USER_AVATAR']; $data['USER_AVATAR_ID'] = $usersFields[$userId]['USER_AVATAR_ID']; } $orm = QueueTable::add($data); $inQueue[$orm->getId()] = $userId; } } elseif(!empty($usersFields) && is_array($usersFields)) { foreach ($inQueue as $id => $userId) { if (!empty($usersFields[$userId])) { $data['USER_NAME'] = $usersFields[$userId]['USER_NAME']; $data['USER_WORK_POSITION'] = $usersFields[$userId]['USER_WORK_POSITION']; $data['USER_AVATAR'] = $usersFields[$userId]['USER_AVATAR']; $data['USER_AVATAR_ID'] = $usersFields[$userId]['USER_AVATAR_ID']; QueueTable::update($id, $data); $taggedCache->clearByTag(Queue::getUserCacheTag($userId, $this->id)); } } } if (empty($inQueue)) { if ($businessUsers === false || !isset($businessUsers[0])) { $userId = User::getInstance()->getId(); } else { $userId = $businessUsers[0]; } if ($userId) { $inQueue[] = $userId; $data = array( "CONFIG_ID" => $this->id, "USER_ID" => $userId, ); $userFields = $this->getUserFields($userId); if (!empty($userFields)) { $data = array_merge($data, $userFields); $data['USER_AVATAR'] = ''; } QueueTable::add($data); } } $queueList['QUEUE_AFTER'] = array_values($inQueue); $this->sendQueueChangeEvents($queueList['QUEUE_BEFORE'], $queueList['QUEUE_AFTER']); return true; } /** * Return system user fields values for queue fields * * @param $userId * * @return array */ private function getUserFields($userId) { $fields = array(); $user = User::getInstance($userId); if ($user->getId() == intval($userId)) { $fields['USER_NAME'] = $user->getFullName(); $fields['USER_WORK_POSITION'] = $user->getWorkPosition(); $avatar = $user->getAvatar(); if (substr($avatar, 0, 1) == '/') { $avatar = \Bitrix\ImOpenLines\Common::getServerAddress() . $avatar; } $fields['USER_AVATAR'] = $avatar; } return $fields; } public static function checkBusinessUsers() { $businessUsers = Limit::getLicenseUsersLimit(); if ($businessUsers === false) { return false; } $orm = QueueTable::getList(Array( 'select' => Array('ID'), 'filter' => Array( '!=USER_ID' => $businessUsers ) )); while($row = $orm->fetch()) { QueueTable::delete($row['ID']); } return true; } public function getError() { return $this->error; } /** * Get diff between old queue and new queue and send queue operators change events * * @param $queueBefore * @param $queueAfter */ private function sendQueueChangeEvents($queueBefore, $queueAfter): void { $queueRemoved = array_diff($queueBefore, $queueAfter); //list of removed operators $queueAdded = array_diff($queueAfter, $queueBefore); //list of added operators if (!empty($queueRemoved)) { $this->sendQueueOperatorsDeleteEvent($queueRemoved); } if (!empty($queueAdded)) { $this->sendQueueOperatorsAddEvent($queueAdded); } if (!empty($queueAdded) || !empty($queueRemoved)) { $this->sendQueueOperatorsChangeEvent($queueBefore, $queueAfter); } } /** * Send event with list of added to line queue operators * * @param $operators */ private function sendQueueOperatorsAddEvent($operators) { $eventData = array( 'line' => $this->id, 'operators' => $operators ); $event = new \Bitrix\Main\Event('imopenlines', self::EVENT_QUEUE_OPERATORS_ADD, $eventData); $event->send(); } /** * Send event with list of removed from line queue operators * * @param $operators */ private function sendQueueOperatorsDeleteEvent($operators) { $eventData = array( 'line' => $this->id, 'operators' => $operators ); $event = new \Bitrix\Main\Event('imopenlines', self::EVENT_QUEUE_OPERATORS_DELETE, $eventData); $event->send(); } /** * Send event with lists of queue operators from changed line. * * @param $queueBefore * @param $queueAfter */ private function sendQueueOperatorsChangeEvent($queueBefore, $queueAfter): void { $eventData = [ 'line' => $this->id, 'operators_before' => $queueBefore, 'operators_after' => $queueAfter ]; $event = new \Bitrix\Main\Event('imopenlines', self::EVENT_QUEUE_OPERATORS_CHANGE, $eventData); $event->send(); } }
/var/www/axolotl/data/www/kirov.axolotls.ru/bitrix/modules/imopenlines/lib/queuemanager.php