• Модуль: socialnetwork
  • Путь к файлу: ~/bitrix/modules/socialnetwork/lib/integration/main/uiselector/projects.php
  • Класс: BitrixSocialnetworkIntegrationMainUISelectorProjects
  • Вызов: Projects::getData
public function getData($params = array())
{
	$result = array(
		'ITEMS' => array(),
		'ITEMS_LAST' => array(),
		'ITEMS_HIDDEN' => array(),
		'ADDITIONAL_INFO' => array(
			'SORT_SELECTED' => 300
		)
	);

	$entityType = Handler::ENTITY_TYPE_PROJECTS;

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

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

	$limitReached = false;
	$projectsList = BitrixSocialnetworkComponentHelper::getSonetGroupAvailable(array(
		'limit' => 100,
		'useProjects' => 'Y'
	), $limitReached);

	$projectsList = $projectsList['PROJECTS'];

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

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

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

	if (!empty($lastProjectsList))
	{
		$filter = array(
			'features' => array("blog", array("premoderate_post", "moderate_post", "write_post", "full_post")),
			'id' => $lastProjectsList,
			'useProjects' => 'Y'
		);
		if (!empty($options['siteId']))
		{
			$filter['site_id'] = $options['siteId'];
		}
		$projectsAdditionalList = CSocNetLogDestination::getSocnetGroup($filter);
		if (!empty($projectsAdditionalList))
		{
			$projectsAdditionalList = $projectsAdditionalList['PROJECTS'];
			$projectsList = array_merge($projectsList, $projectsAdditionalList);
		}
	}
	if (!empty($selectedProjectsList))
	{
		// available to post
		$filter = array(
			'features' => array("blog", array("premoderate_post", "moderate_post", "write_post", "full_post")),
			'id' => $selectedProjectsList,
			'useProjects' => 'Y'
		);
		if (!empty($options['siteId']))
		{
			$filter['site_id'] = $options['siteId'];
		}

		$projectsAdditionalList = CSocNetLogDestination::getSocnetGroup($filter);
		if (!empty($projectsAdditionalList))
		{
			$projectsAdditionalList = $projectsAdditionalList['PROJECTS'];
			$projectsList = array_merge($projectsList, $projectsAdditionalList);
		}
	}

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

		if (!empty($hiddenItemsList))
		{
			$isCurrentUserModuleAdmin = CSocNetUser::isCurrentUserModuleAdmin();
			$res = BitrixSocialnetworkWorkgroupTable::getList(array(
				'filter' => array(
					"@ID" => $hiddenItemsList,
					'PROJECT' => 'Y'
				),
				'select' => array("ID", "NAME", "DESCRIPTION", "OPENED")
			));

			$extranetGroupsIdList = BitrixSocialnetworkComponentHelper::getExtranetSonetGroupIdList();

			while($groupFields = $res->fetch())
			{
				if (
					$groupFields['OPENED'] == "Y"
					|| $isCurrentUserModuleAdmin
				)
				{
					$projectsList['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()
				)
				{
					$projectsList['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'] = $projectsList;

	return $result;
}