• Модуль: socialnetwork
  • Путь к файлу: ~/bitrix/modules/socialnetwork/lib/integration/main/uiselector/sonetgroups.php
  • Класс: BitrixSocialnetworkIntegrationMainUISelectorSonetGroups
  • Вызов: SonetGroups::getData
public function getData($params = array())
{
	$result = array(
		'ITEMS' => array(),
		'ITEMS_LAST' => array(),
		'ITEMS_HIDDEN' => array(),
		'ADDITIONAL_INFO' => array(
			'GROUPS_LIST' => array(
				'sonetgroups' => array(
					'TITLE' => Loc::getMessage('MAIN_UI_SELECTOR_TITLE_SONETGROUPS'),
					'TYPE_LIST' => array(Handler::ENTITY_TYPE_SONETGROUPS),
					'DESC_LESS_MODE' => 'Y',
					'SORT' => 20
				)
			),
			'SORT_SELECTED' => 300
		)
	);

	$entityType = Handler::ENTITY_TYPE_SONETGROUPS;

	$options = (!empty($params['options']) ? $params['options'] : array());

	$lastItems = (!empty($params['lastItems']) ? $params['lastItems'] : array());
	$selectedItems = (!empty($params['selectedItems']) ? $params['selectedItems'] : array());

	$limitReached = false;

	$filter = array(
		'limit' => 100,
		'useProjects' => (!empty($options['enableProjects']) ? $options['enableProjects'] : 'N')
	);

	if (!empty($options['siteId']))
	{
		$filter['siteId'] = $options['siteId'];
	}

	if (
		!empty($options['landing'])
		&& ModuleManager::isModuleInstalled('landing')
	)
	{
		$filter['landing'] = $options['landing'];
	}

	$sonetGroupsList = BitrixSocialnetworkComponentHelper::getSonetGroupAvailable($filter, $limitReached);

	if (
		!empty($options['enableProjects'])
		&& $options['enableProjects'] == 'Y'
	)
	{
		$sonetGroupsList = $sonetGroupsList['SONETGROUPS'];
	}

	$result['ADDITIONAL_INFO']['LIMITED'] = ($limitReached ? 'Y' : 'N');

	$lastSonetGroupsList = array();
	if(!empty($lastItems[$entityType]))
	{
		$result["ITEMS_LAST"] = array_values($lastItems[$entityType]);
		foreach ($lastItems[$entityType] as $value)
		{
			$lastSonetGroupsList[] = str_replace('SG', '', $value);
		}
	}

	$selectedSonetGroupsList = array();
	if(!empty($selectedItems[Handler::ENTITY_TYPE_SONETGROUPS]))
	{
		foreach ($selectedItems[Handler::ENTITY_TYPE_SONETGROUPS] as $value)
		{
			$selectedSonetGroupsList[] = str_replace('SG', '', $value);
		}
	}

	if (!empty($lastSonetGroupsList))
	{
		$filter = array(
			'id' => $lastSonetGroupsList,
			'useProjects' => (!empty($options['enableProjects']) ? $options['enableProjects'] : 'N')
		);

		if (!empty($options['feature']))
		{
			$feature = $options['feature'];
			if (trim($feature) <> '')
			{
				$operations = self::getFeatureOperations($feature);
				if (!empty($operations))
				{
					$filter['features'] = [ $feature, $operations ];
				}
			}
		}

		if (
			!empty($options['landing'])
			&& ModuleManager::isModuleInstalled('landing')
		)
		{
			$filter['landing'] = $options['landing'];
		}
		if (!empty($options['siteId']))
		{
			$filter['site_id'] = $options['siteId'];
		}

		$sonetGroupsAdditionalList = CSocNetLogDestination::getSocnetGroup($filter);
		if (!empty($sonetGroupsAdditionalList))
		{
			if (
				!empty($options['enableProjects'])
				&& $options['enableProjects'] == 'Y'
			)
			{
				$sonetGroupsAdditionalList = $sonetGroupsAdditionalList['SONETGROUPS'];
			}

			$sonetGroupsList = array_merge($sonetGroupsList, $sonetGroupsAdditionalList);
		}
	}

	if (!empty($selectedSonetGroupsList))
	{
		$filter = array(
			'id' => $selectedSonetGroupsList,
			'useProjects' => (!empty($options['enableProjects']) ? $options['enableProjects'] : 'N')
		);

		if (!empty($options['feature']))
		{
			$feature = $options['feature'];
			if (trim($feature) <> '')
			{
				$operations = self::getFeatureOperations($feature);
				if (!empty($operations))
				{
					$filter['features'] = [ $feature, $operations ];
				}
			}
		}

		if (
			!empty($options['landing'])
			&& ModuleManager::isModuleInstalled('landing')
		)
		{
			$filter['landing'] = $options['landing'];
		}
		if (!empty($options['siteId']))
		{
			$filter['site_id'] = $options['siteId'];
		}

		$sonetGroupsAdditionalList = CSocNetLogDestination::getSocnetGroup($filter);
		if (!empty($sonetGroupsAdditionalList))
		{
			if (
				!empty($options['enableProjects'])
				&& $options['enableProjects'] == 'Y'
			)
			{
				$sonetGroupsAdditionalList = $sonetGroupsAdditionalList['SONETGROUPS'];
			}

			$sonetGroupsList = array_merge($sonetGroupsList, $sonetGroupsAdditionalList);
		}
	}

	if (!empty($selectedItems[Handler::ENTITY_TYPE_SONETGROUPS]))
	{
		$hiddenItemsList = array_diff($selectedItems[Handler::ENTITY_TYPE_SONETGROUPS], array_keys($sonetGroupsList));
		$hiddenItemsList = array_map(function($code) { return preg_replace('/^SG(d+)$/', '$1', $code); }, $hiddenItemsList);

		if (!empty($hiddenItemsList))
		{
			$filter = array(
				"@ID" => $hiddenItemsList
			);

			if (
				!empty($options['enableProjects'])
				&& $options['enableProjects'] == 'Y'
			)
			{
				$filter['PROJECT'] = 'N';
			}

			$isCurrentUserModuleAdmin = CSocNetUser::isCurrentUserModuleAdmin();
			$res = BitrixSocialnetworkWorkgroupTable::getList(array(
				'filter' => $filter,
				'select' => array("ID", "NAME", "DESCRIPTION", "OPENED", "VISIBLE")
			));

			$extranetGroupsIdList = BitrixSocialnetworkComponentHelper::getExtranetSonetGroupIdList();

			while($groupFields = $res->fetch())
			{
				if (
					(
						$groupFields['OPENED'] == "Y"
						|| $isCurrentUserModuleAdmin
					)
					&& !Handler::isExtranetUser()
				)
				{
					$sonetGroupsList['SG'.$groupFields["ID"]] = array(
						"id" => 'SG'.$groupFields["ID"],
						"entityId" => $groupFields["ID"],
						"name" => $groupFields["NAME"],
						"desc" => $groupFields["DESCRIPTION"],
						"isExtranet" => (in_array($groupFields["ID"], $extranetGroupsIdList) ? 'Y' : 'N')
					);
				}
				elseif (
					$groupFields['VISIBLE'] == "Y"
					&& !Handler::isExtranetUser()
				)
				{
					$sonetGroupsList['SG'.$groupFields["ID"]] = array(
						"id" => 'SG'.$groupFields["ID"],
						"entityId" => $groupFields["ID"],
						"name" => $groupFields["NAME"],
						"desc" => $groupFields["DESCRIPTION"],
						"isExtranet" => (in_array($groupFields["ID"], $extranetGroupsIdList) ? 'Y' : 'N'),
						"selectable" => 'N'
					);
				}
				else
				{
					$result['ITEMS_HIDDEN'][] = 'SG'.$groupFields["ID"];
				}
			}
		}
	}

	$result['ITEMS'] = $sonetGroupsList;

	return $result;
}