- Модуль: imopenlines
- Путь к файлу: ~/bitrix/modules/imopenlines/lib/session.php
- Класс: BitrixImOpenLinesSession
- Вызов: Session::voteAsUser
static function voteAsUser($sessionId, $action, $userId = null): bool
{
$result = false;
$finishSession = false;
$sessionData = ModelSessionTable::getByIdPerformance($sessionId)->fetch();
if ($sessionData)
{
$userId = (int)$userId;
if (
$userId <= 0
|| $sessionData['USER_ID'] == $userId
)
{
$voteValue = $action === 'dislike'? 1: 5;
$session = new Session();
$resultLoadSession = $session->load([
'USER_CODE' => $sessionData['USER_CODE'],
'SKIP_CREATE' => 'Y',
'DEFERRED_JOIN' => 'Y',
'VOTE_SESSION' => 'Y'
]);
if (!$resultLoadSession)
{
if ($session->isCloseVote())
{
Im::addCloseVoteMessage(
$session->getData('CHAT_ID'),
$session->getConfig('VOTE_TIME_LIMIT')
);
}
}
else
{
Debug::addSession($session, __METHOD__, ['sessionId' => $sessionId, 'action' => $action, 'userId' => $userId]);
if ($session->getData('ID') == $sessionId)
{
if (
$session->getData('CLOSED') !== 'Y'
|| $session->getData('VOTE') !== ''
)
{
$updateSession['VOTE'] = $voteValue;
$updateSession['WAIT_VOTE'] = 'N';
if (
$session->getData('WAIT_VOTE') === 'Y'
&& $session->getConfig('VOTE_CLOSING_DELAY') === 'Y'
)
{
$finishSession = true;
}
else
{
//TODO: hack!
$updateSession['STATUS'] = self::STATUS_WAIT_CLIENT;
$updateSession['DATE_MODIFY'] = new DateTime;
$updateSession['USER_ID'] = $userId;
}
$session->update($updateSession);
$voteEventParams = [
'SESSION_DATA' => $sessionData,
'VOTE' => $voteValue,
];
$event = new MainEvent('imopenlines', 'OnSessionVote', $voteEventParams);
$event->send();
if ($sessionData['END_ID'] > 0)
{
CIMMessageParam::Set($sessionData['END_ID'], ['IMOL_VOTE_SID' => $sessionId, 'IMOL_VOTE_USER' => $voteValue]);
CIMMessageParam::SendPull($sessionData['END_ID'], ['IMOL_VOTE_SID', 'IMOL_VOTE_USER']);
}
Chat::sendRatingNotify(
Chat::RATING_TYPE_CLIENT,
$sessionData['ID'],
$voteValue,
$sessionData['OPERATOR_ID'],
$sessionData['USER_ID']
);
if ($finishSession === true)
{
$session->finish(true);
}
$result = true;
}
}
}
}
}
return $result;
}