static function getById($id, $checkPermissions = false, array $options = [])
{
global $USER, $CACHE_MANAGER;
$id = (int)$id;
if (!CSocNetGroup::__ValidateID($id))
{
return false;
}
$staticCacheKey = implode('_', array_merge([
($checkPermissions ? 'Y' : 'N'),
], $options));
$sonetGroupCache = self::getStaticCache();
if (
is_array($sonetGroupCache)
&& is_array(($sonetGroupCache[$id] ?? null))
&& is_array(($sonetGroupCache[$id][$staticCacheKey] ?? null))
)
{
return $sonetGroupCache[$id][$staticCacheKey];
}
$cache = false;
$cachePath = false;
if (!$checkPermissions)
{
$cache = new CPHPCache;
$cacheTime = 31536000;
$cacheId = implode('_', array_merge([
'group',
$id,
LANGUAGE_ID,
CTimeZone::getOffset(),
Context::getCurrent()->getCulture()->getDateTimeFormat()
], $options));
$cachePath = '/sonet/group/' . $id . '/';
}
if (
$cache
&& $cache->initCache($cacheTime, $cacheId, $cachePath)
)
{
$cacheVars = $cache->getVars();
$result = $cacheVars['FIELDS'];
}
else
{
if ($cache)
{
$cache->startDataCache($cacheTime, $cacheId, $cachePath);
}
$filter = [
'ID' => $id,
];
if (
$checkPermissions
&& is_object($USER)
&& ($USER->GetID() > 0)
)
{
$filter['CHECK_PERMISSIONS'] = $USER->getId();
}
$select = [
"ID", "SITE_ID", "NAME", "DESCRIPTION", "DATE_CREATE", "DATE_UPDATE", "ACTIVE", "VISIBLE", "OPENED", "CLOSED", "SUBJECT_ID", "OWNER_ID", "KEYWORDS",
'IMAGE_ID', 'AVATAR_TYPE',
"NUMBER_OF_MEMBERS", "NUMBER_OF_MODERATORS",
"INITIATE_PERMS", "SPAM_PERMS",
"DATE_ACTIVITY", "SUBJECT_NAME", "UF_*",
];
if (ModuleManager::isModuleInstalled('intranet'))
{
$select = array_merge($select, [ "PROJECT", "PROJECT_DATE_START", "PROJECT_DATE_FINISH" ]);
}
if (ModuleManager::isModuleInstalled('landing'))
{
$select = array_merge($select, [ "LANDING" ]);
}
if (ModuleManager::isModuleInstalled('tasks'))
{
$select = array_merge($select, [ "SCRUM_OWNER_ID", "SCRUM_MASTER_ID", "SCRUM_SPRINT_DURATION", "SCRUM_TASK_RESPONSIBLE" ]);
}
$res = CSocNetGroup::getList(
[],
$filter,
false,
false,
$select
);
if ($result = $res->getNext())
{
if (
defined('BX_COMP_MANAGED_CACHE')
&& $cache
)
{
$CACHE_MANAGER->StartTagCache($cachePath);
$CACHE_MANAGER->RegisterTag('sonet_group_' . $id);
$CACHE_MANAGER->RegisterTag('sonet_group');
}
if (!empty($result['NAME']))
{
$result['NAME'] = Emoji::decode($result['NAME']);
}
if (!empty($result['DESCRIPTION']))
{
$result['DESCRIPTION'] = Emoji::decode($result['DESCRIPTION']);
}
$result['NAME_FORMATTED'] = $result['NAME'];
if (($options['getSites'] ?? false))
{
$result['SITE_LIST'] = [];
$res = CSocNetGroup::getSite($id);
while ($groupSiteFields = $res->fetch())
{
$result['SITE_LIST'][] = $groupSiteFields['LID'];
}
}
$result['SCRUM'] = (isset($result['SCRUM_MASTER_ID']) && (int)$result['SCRUM_MASTER_ID'] > 0 ? 'Y' : 'N');
$result['SCRUM_PROJECT'] = $result['SCRUM'];
}
else
{
$result = false;
}
if ($cache)
{
$cacheData = [
'FIELDS' => $result,
];
$cache->EndDataCache($cacheData);
if (defined('BX_COMP_MANAGED_CACHE'))
{
$CACHE_MANAGER->EndTagCache();
}
}
}
if (!is_array($sonetGroupCache))
{
$sonetGroupCache = [];
}
if (
!array_key_exists($id, $sonetGroupCache)
|| !is_array($sonetGroupCache[$id])
)
{
$sonetGroupCache[$id] = [];
}
$sonetGroupCache[$id][$staticCacheKey] = $result;
self::setStaticCache($sonetGroupCache);
return $result;
}