• Модуль: socialnetwork
  • Путь к файлу: ~/bitrix/modules/socialnetwork/lib/controller/workgroup.php
  • Класс: BitrixSocialnetworkControllerWorkgroup
  • Вызов: Workgroup::setFavoritesAction
public function setFavoritesAction(array $params = [])
{
	$groupId = (int)($params['groupId'] ?? 0);
	$value = (isset($params['value']) && in_array($params['value'], [ 'Y', 'N' ]) ? $params['value'] : false);
	$getAdditionalResultData = (bool)($params['getAdditionalResultData'] ?? false);

	if ($groupId <= 0)
	{
		$this->addError(new Error(Loc::getMessage('SONET_CONTROLLER_WORKGROUP_EMPTY'), 'SONET_CONTROLLER_WORKGROUP_EMPTY'));
		return null;
	}

	if ($value === false)
	{
		$this->addError(new Error('SONET_CONTROLLER_WORKGROUP_INCORRECT_VALUE', 'SONET_CONTROLLER_WORKGROUP_INCORRECT_VALUE'));
		return null;
	}

	if (!Loader::includeModule('socialnetwork'))
	{
		$this->addError(new Error('SONET_CONTROLLER_MODULE_NOT_INSTALLED', 'SONET_CONTROLLER_MODULE_NOT_INSTALLED'));
		return null;
	}

	try
	{
		$res = BitrixSocialnetworkItemWorkgroupFavorites::set([
			'GROUP_ID' => $groupId,
			'USER_ID' => $this->getCurrentUser()->getId(),
			'VALUE' => $value,
		]);
	}
	catch (Exception $e)
	{
		$this->addError(new Error($e->getMessage(), $e->getCode()));
		return null;
	}

	if (!$res)
	{
		$this->addError(new Error(Loc::getMessage('SONET_CONTROLLER_WORKGROUP_ACTION_FAILED'), 'SONET_CONTROLLER_WORKGROUP_ACTION_FAILED'));
		return null;
	}

	if ($getAdditionalResultData)
	{
		$groupItem = BitrixSocialnetworkItemWorkgroup::getById($groupId);
		$groupFields = $groupItem->getFields();
		$groupUrlData = $groupItem->getGroupUrlData([
			'USER_ID' => $this->getCurrentUser()->getId(),
		]);

		$groupSiteList = [];
		$resSite = BitrixSocialnetworkWorkgroupSiteTable::getList([
			'filter' => [
				'=GROUP_ID' => $groupId
			],
			'select' => [ 'SITE_ID' ],
		]);
		while ($groupSite = $resSite->fetch())
		{
			$groupSiteList[] = $groupSite['SITE_ID'];
		}
	}

	$result = [
		'ID' => $groupId,
		'RESULT' => $value,
	];

	if ($getAdditionalResultData)
	{
		$result['NAME'] = $groupFields['NAME'];
		$result['URL'] = $groupUrlData["URL"];
		$result['EXTRANET'] = (
			Loader::includeModule('extranet')
			&& CExtranet::isIntranetUser()
			&& in_array(CExtranet::getExtranetSiteId(), $groupSiteList)
				? 'Y'
				: 'N'
		);
	}

	$currentUserId = $this->getCurrentUser()->getId();

	PushService::addEvent(
		[ $currentUserId ],
		[
			'module_id' => 'socialnetwork',
			'command' => PushEventDictionary::EVENT_WORKGROUP_FAVORITES_CHANGED,
			'params' => [
				'GROUP_ID' => $groupId,
				'USER_ID' => $currentUserId,
			],
		]
	);

	return $result;
}