- Модуль: socialnetwork
- Путь к файлу: ~/bitrix/modules/socialnetwork/lib/controller/workgroup.php
- Класс: BitrixSocialnetworkControllerWorkgroup
- Вызов: Workgroup::listAction
public function listAction(
PageNavigation $pageNavigation,
array $filter = [],
array $select = [],
array $order = [],
array $params = []
)
{
if (
empty($select)
|| !is_array($select)
)
{
$select = [ 'ID' ];
}
if (!in_array('ID', $select, true))
{
$select[] = 'ID';
}
$originalSelect = $select;
if (
$params['IS_ADMIN'] === 'Y'
&& !CSocNetUser::isCurrentUserModuleAdmin(SITE_ID, false)
)
{
unset($params['IS_ADMIN']);
}
if ($params['IS_ADMIN'] !== 'Y')
{
$filter['CHECK_PERMISSIONS'] = $this->getCurrentUser()->getId();
}
$extranetSiteId = CSocNetLogRestService::getExtranetSiteId();
if (
$extranetSiteId
&& $params['IS_ADMIN'] !== 'Y'
&& CSocNetLogRestService::getCurrentUserType() === 'extranet'
)
{
$filter['SITE_ID'] = $extranetSiteId;
}
else
{
$filter['SITE_ID'] = (string)($params['siteId'] ?? SITE_ID);
}
if (($key = array_search('AVATAR', $select, true)) !== false)
{
$select[] = 'IMAGE_ID';
$select[] = 'AVATAR_TYPE';
unset($select[$key]);
}
$workgroups = [];
$count = 0;
$queryIdFilter = [];
$res = CSocNetGroup::getList([], $filter, false, false, [ 'ID' ]);
while ($groupFields = $res->fetch())
{
$queryIdFilter[] = (int)$groupFields['ID'];
}
if (!empty($queryIdFilter))
{
$select = $this->prepareSelect($select);
$query = WorkgroupTable::query();
$query
->setSelect($select)
->setOrder($order)
->setOffset($pageNavigation->getOffset())
->setLimit(($pageNavigation->getLimit()))
->setFilter([
'ID' => $queryIdFilter,
])
->countTotal(true);
$res = $query->exec();
$avatarTypes = HelperWorkgroup::getAvatarTypes();
while ($groupFields = $res->fetch())
{
if (in_array('AVATAR', $originalSelect, true))
{
if ((int)$groupFields['IMAGE_ID'] > 0)
{
$groupFields['AVATAR'] = File::getFileSource((int)$groupFields['IMAGE_ID'], 100, 100);
}
elseif (
!empty($groupFields['AVATAR_TYPE'])
&& isset($params['mode'])
&& $params['mode'] === 'mobile'
)
{
$groupFields['AVATAR'] = $avatarTypes[$groupFields['AVATAR_TYPE']]['mobileUrl'];
}
else
{
$groupFields['AVATAR'] = '';
}
}
$workgroups[(int)$groupFields['ID']] = $groupFields;
}
$count = $res->getCount();
}
$ids = array_keys($workgroups);
if (
isset($params['mode'])
&& $params['mode'] === 'mobile'
)
{
$additionalData = HelperWorkgroup::getAdditionalData([
'ids' => $ids,
'features' => ($params['features'] ?? []),
'mandatoryFeatures' => ($params['mandatoryFeatures'] ?? []),
'currentUserId' => (int)$this->getCurrentUser()->getId(),
]);
foreach (array_keys($workgroups) as $id)
{
if (!isset($additionalData[$id]))
{
continue;
}
$workgroups[$id]['ADDITIONAL_DATA'] = ($additionalData[$id] ?? []) ;
}
}
$workgroups = $this->convertKeysToCamelCase($workgroups);
return new EngineResponseDataTypePage('workgroups', array_values($workgroups), $count);
}