- Модуль: imopenlines
- Путь к файлу: ~/bitrix/modules/imopenlines/lib/session.php
- Класс: BitrixImOpenLinesSession
- Вызов: Session::voteAsHead
static function voteAsHead($sessionId, $voteValue = null, $commentValue = null, $userId = null)
{
$result = false;
$sessionData = ModelSessionTable::getByIdPerformance($sessionId)->fetch();
if ($sessionData)
{
$userId = (int)$userId;
if (!$userId)
{
$userId = $GLOBALS['USER']->GetId();
}
$configManager = new BitrixImOpenLinesConfig();
$resultPermissions = $configManager->canVoteAsHead($sessionData['CONFIG_ID']);
if ($resultPermissions)
{
$fieldsUpdate = [];
$pullMessage = [
'module_id' => 'imopenlines',
'command' => 'voteHead',
'expiry' => 60,
'params' => [
'sessionId' => $sessionId,
],
];
if (!empty($commentValue))
{
if (mb_strlen($commentValue) > 10000)
{
$commentValue = mb_substr($commentValue, 0, 10000).'...';
}
$commentValueSafely = htmlspecialcharsbx($commentValue);
}
if ($voteValue !== null && $commentValue !== null)
{
$voteValue = $voteValue == 1 || $voteValue <= 5? $voteValue: 0;
$fieldsUpdate['VOTE_HEAD'] = $voteValue;
$fieldsUpdate['COMMENT_HEAD'] = $commentValue;
if ($voteValue > 0)
{
BitrixImOpenLinesChat::sendRatingNotify(
BitrixImOpenLinesChat::RATING_TYPE_HEAD_AND_COMMENT,
$sessionData['ID'],
['vote' => $voteValue, 'comment' => $commentValue],
$sessionData['OPERATOR_ID'],
$userId
);
}
else
{
BitrixImOpenLinesChat::sendRatingNotify(
BitrixImOpenLinesChat::RATING_TYPE_COMMENT,
$sessionData['ID'],
$commentValue,
$sessionData['OPERATOR_ID'],
$userId
);
}
$result = true;
}
elseif($voteValue !== null)
{
$voteValue = $voteValue == 1 || $voteValue <= 5? $voteValue: 0;
$fieldsUpdate['VOTE_HEAD'] = $voteValue;
if ($voteValue > 0)
{
BitrixImOpenLinesChat::sendRatingNotify(
BitrixImOpenLinesChat::RATING_TYPE_HEAD,
$sessionData['ID'],
$voteValue,
$sessionData['OPERATOR_ID'],
$userId
);
}
$result = true;
}
elseif($commentValue !== null)
{
$fieldsUpdate['COMMENT_HEAD'] = $commentValue;
BitrixImOpenLinesChat::sendRatingNotify(
BitrixImOpenLinesChat::RATING_TYPE_COMMENT,
$sessionData['ID'],
$commentValue,
$sessionData['OPERATOR_ID'],
$userId
);
$result = true;
}
if (!empty($fieldsUpdate))
{
ModelSessionTable::update($sessionId, $fieldsUpdate);
}
if (Loader::includeModule("pull") && ($voteValue !==null || $commentValue !==null))
{
$paramsPull = [
'IMOL_VOTE_SID' => $sessionData['ID']
];
if ($voteValue !==null)
{
$pullMessage['params']['voteValue'] = $voteValue;
$paramsPull['IMOL_VOTE_HEAD'] = $voteValue;
}
if ($commentValue !==null)
{
$pullMessage['params']['commentValue'] = $commentValueSafely;
$paramsPull['IMOL_COMMENT_HEAD']['text'] = $commentValueSafely;
}
$pullUsers = CIMChat::GetRelationById($sessionData['CHAT_ID'], false, true, false);
$pullUsers[] = $userId;
BitrixPullEvent::add($pullUsers, $pullMessage);
if ($voteValue !==null)
{
$pullMessage['skip_users'] = $pullUsers;
unset($pullMessage['params']['commentValue']);
CPullWatch::AddToStack('IMOL_STATISTICS', $pullMessage);
}
if ($sessionData['END_ID'] > 0)
{
CIMMessageParam::Set($sessionData['END_ID'], $paramsPull);
CIMMessageParam::SendPull($sessionData['END_ID'], array_keys($paramsPull));
}
}
}
}
return $result;
}