- Модуль: socialnetwork
- Путь к файлу: ~/bitrix/modules/socialnetwork/lib/controller/workgroup.php
- Класс: BitrixSocialnetworkControllerWorkgroup
- Вызов: Workgroup::changePinAction
public function changePinAction(
array $groupIdList,
string $action,
string $componentName = '',
string $signedParameters = ''
): ?bool
{
if (!Loader::includeModule('socialnetwork'))
{
$this->addError(new Error('SONET_CONTROLLER_MODULE_NOT_INSTALLED', 'SONET_CONTROLLER_MODULE_NOT_INSTALLED'));
return null;
}
$unsignedParameters = [];
if (
$componentName !== ''
&& $signedParameters !== ''
)
{
$unsignedParameters = BitrixMainComponentParameterSigner::unsignParameters($componentName, $signedParameters);
if (!is_array($unsignedParameters))
{
$unsignedParameters = [];
}
}
$mode = ($unsignedParameters['MODE'] ?? '');
$currentUserId = $this->getCurrentUser()->getId();
$counter = 0;
foreach ($groupIdList as $groupId)
{
$groupId = (int)$groupId;
if (
$groupId <= 0
|| !HelperWorkgroupAccess::canView([
'groupId' => $groupId,
])
)
{
continue;
}
$counter++;
$query = new Query(WorkgroupPinTable::getEntity());
$query = $query
->setSelect([
'ID',
'GROUP_ID',
'USER_ID',
])
->where('GROUP_ID', $groupId)
->where('USER_ID', $currentUserId);
if ($mode === '')
{
$query = $query->where(Query::filter()
->logic('or')
->whereNull('CONTEXT')
->where('CONTEXT', '')
);
}
else
{
$query = $query->where('CONTEXT', $mode);
}
$pin = $query
->setLimit(1)
->exec()->fetchObject();
$pinResult = false;
if (
$action === 'pin'
&& !$pin
)
{
try
{
WorkgroupPinTable::add([
'GROUP_ID' => $groupId,
'USER_ID' => $currentUserId,
'CONTEXT' => $mode,
]);
}
catch (Exception $e)
{
$this->addError(
new Error(
Loc::getMessage('SONET_CONTROLLER_WORKGROUP_ACTION_FAILED'),
'SONET_CONTROLLER_WORKGROUP_ACTION_FAILED'
)
);
return null;
}
$pinResult = true;
}
elseif (
$action === 'unpin'
&& $pin
)
{
$tableDeleteResult = WorkgroupPinTable::delete($pin->get('ID'));
if (!$tableDeleteResult->isSuccess())
{
$this->addError(new Error(
Loc::getMessage('SONET_CONTROLLER_WORKGROUP_ACTION_FAILED'),
'SONET_CONTROLLER_WORKGROUP_ACTION_FAILED'
));
return null;
}
$pinResult = true;
}
if ($pinResult === true)
{
PushService::addEvent(
[ $currentUserId ],
[
'module_id' => 'socialnetwork',
'command' => 'workgroup_pin_changed',
'params' => [
'GROUP_ID' => $groupId,
'USER_ID' => $currentUserId,
'ACTION' => $action,
],
]
);
}
}
if ($counter <= 0)
{
$this->addError(new Error(Loc::getMessage('SONET_CONTROLLER_WORKGROUP_EMPTY'), 'SONET_CONTROLLER_WORKGROUP_EMPTY'));
return null;
}
return true;
}