- Модуль: main
- Путь к файлу: ~/bitrix/modules/main/classes/general/user_options.php
- Класс: CUserOptions
- Вызов: CUserOptions::GetOption
static function GetOption($category, $name, $default_value = false, $user_id = false)
{
global $DB, $USER, $CACHE_MANAGER;
if ($user_id === false && $USER instanceof CUser)
{
$user_id = $USER->GetID();
}
$user_id = intval($user_id);
$category = strtolower($category);
if (!isset(self::$cache[$user_id][$category]))
{
$mcache_id = "user_option:{$user_id}:{$category}";
// options for user '0' are always from DB (there are much more options for user '0' than for specific one)
if ($user_id > 0 && $CACHE_MANAGER->read(3600, $mcache_id, "user_option"))
{
// options for specified user from managed cache
self::$cache[$user_id][$category] = $CACHE_MANAGER->get($mcache_id);
}
else
{
//read from DB
$sql = "
SELECT NAME, VALUE, COMMON
FROM b_user_option
WHERE (USER_ID = {$user_id} OR (USER_ID = 0 AND COMMON = 'Y'))
AND CATEGORY = '{$DB->ForSql($category)}'
";
$res = $DB->Query($sql);
while ($option = $res->Fetch())
{
if (!isset(self::$cache[$user_id][$category][$option["NAME"]]) || $option["COMMON"] <> 'Y')
{
self::$cache[$user_id][$category][$option["NAME"]] = unserialize($option["VALUE"], ['allowed_classes' => false]);
}
}
if (!isset(self::$cache[$user_id][$category]))
{
self::$cache[$user_id][$category] = [];
}
if ($user_id > 0)
{
$CACHE_MANAGER->Set($mcache_id, self::$cache[$user_id][$category]);
}
}
if (!isset(self::$cache[$user_id][$category][$name]))
{
self::$cache[$user_id][$category][$name] = null;
}
}
if (!isset(self::$cache[$user_id][$category][$name]))
{
return $default_value;
}
return self::$cache[$user_id][$category][$name];
}