Поддержка серверов

CEventCalendar::GetNearestEventsList: метод Битрикс

Постоянная ссылка: http://bxapi.ru/src/?id=185808

//    CEventCalendar::GetNearestEventsList()
//    /bitrix/modules/intranet/classes/general/event_calendar.php:5181

    function GetNearestEventsList($arParams)
    {
        if (!isset($arParams['userId']))
        {
            global $USER;
            // Get current user id
            $curUserId = $USER->IsAuthorized() ? $USER->GetID() : 0;
        }
        else
        {
            $curUserId = intval($arParams['userId']);
        }

        if ($arParams['bCurUserList'])
        {
            if ($curUserId <= 0 || (class_exists('CSocNetFeatures') && !CSocNetFeatures::IsActiveFeature(SONET_ENTITY_USER, $curUserId, "calendar")))
                return 'inactive_feature';

            // Get iblock id for users calendar from module-settings
            $iblockId = COption::GetOptionInt("intranet", 'iblock_calendar');
            // Get section id
            $sectionId = CEventCalendar::GetSectionIDByOwnerId($curUserId, "USER", $iblockId);
            // Expand filter
            $arFilterEx = array("CREATED_BY" => $curUserId, "SECTION_ID" => $sectionId, "INCLUDE_SUBSECTIONS" => "Y");
        }
        else
        {
            if (intVal($arParams['iblockSectionId']) > 0)
                $arFilterEx = array("SECTION_ID" => $arParams['iblockSectionId'], "INCLUDE_SUBSECTIONS" => "Y");
            $iblockId = $arParams['iblockId'];
        }

        // Check access
        $maxPerm = CIBlock::GetPermission($iblockId);
        $bAccess = $maxPerm >= 'R';
        if (CIBlock::GetPermission($iblockId) < 'R')
            return 'access_denied';

        $arSelect = array(
            "ID",
            "IBLOCK_ID",
            "IBLOCK_SECTION_ID",
            "NAME",
            "ACTIVE_FROM",
            "ACTIVE_TO",
            "DETAIL_TEXT",
            "DETAIL_TEXT_TYPE",
            "CREATED_BY",
            "PROPERTY_*",
        );

        $arFilter = array (
            "IBLOCK_ID" => $iblockId,
            "ACTIVE" => "Y",
            "CHECK_PERMISSIONS" => 'N',
            ">=DATE_ACTIVE_TO" => $arParams['fromLimit'],
            "<=DATE_ACTIVE_FROM" => $arParams['toLimit'],
        );

        if (!empty($arFilterEx))
        {
            $arFilter = array_merge($arFilter, $arFilterEx);
        }

        $bCache = true;
        $arResult = false;
        if ($bCache)
        {
            $cache = new CPHPCache;
            $cachePath = 'event_calendar/events/'.$iblockId.'/';
            $cacheId = 'ne_'.serialize($arFilter);
            if(($tzOffset = CTimeZone::GetOffset()) <> 0)
                $cacheId .= "_".$tzOffset;
            $cacheTime = 36000000;

            if ($cache->InitCache($cacheTime, $cacheId, $cachePath))
            {
                $res = $cache->GetVars();
                $arResult = $res['events'];
            }
        }

        if (!$bCache || $arResult === false)
        {
            $arSort = Array('ACTIVE_FROM' => 'ASC');
            $rsElement = CIBlockElement::GetList($arSort, $arFilter, false, false, $arSelect);
            $arResult = array();

            while($obElement = $rsElement->GetNextElement())
            {
                $arItem = $obElement->GetFields();
                $props = $obElement->GetProperties();
                $arItem["ACCESSIBILITY"] = (isset($props['ACCESSIBILITY']['VALUE'])) ? $props['ACCESSIBILITY']['VALUE'] : 'busy';
                $arItem["IMPORTANCE"] = (isset($props['IMPORTANCE']['VALUE'])) ? $props['IMPORTANCE']['VALUE'] : '';
                $arItem["PRIVATE"] = (isset($props['PRIVATE']['VALUE'])) ? $props['PRIVATE']['VALUE'] : '';

                if (isset($props['PARENT']) && $props['PARENT']['VALUE'] > 0)
                {
                    $status = strtoupper(isset($props['CONFIRMED']) ? $props['CONFIRMED']['VALUE_XML_ID'] : 'Q');
                    if ($status != 'Y' && $status != 'N')
                        $status = 'Q';
                    $arItem['STATUS'] = $status;
                }

                $arItem["DISPLAY_ACTIVE_FROM"] = CIBlockFormatProperties::DateFormat(getDateFormat(true), MakeTimeStamp($arItem["ACTIVE_FROM"]));
                $arItem["DISPLAY_ACTIVE_TO"] = CIBlockFormatProperties::DateFormat(getDateFormat(true), MakeTimeStamp($arItem["ACTIVE_TO"]));
                $perType = (isset($props['PERIOD_TYPE']['VALUE']) && $props['PERIOD_TYPE']['VALUE'] != 'NONE') ? strtoupper($props['PERIOD_TYPE']['VALUE']) : false;

                if ($perType)
                {
                    $count = (isset($props['PERIOD_COUNT']['VALUE'])) ? intval($props['PERIOD_COUNT']['VALUE']) : '';
                    $length = (isset($props['EVENT_LENGTH']['VALUE'])) ? intval($props['EVENT_LENGTH']['VALUE']) : '';
                    $additional = (isset($props['PERIOD_ADDITIONAL']['VALUE'])) ? $props['PERIOD_ADDITIONAL']['VALUE'] : '';

                    CEventCalendar::DisplayPeriodicEvent($arResult, array(
                        'arItem' => $arItem,
                        'perType' => $perType,
                        'count' => $count,
                        'length' => $length,
                        'additional' => $additional,
                        'fromLimit' => $arParams['fromLimit'],
                        'toLimit' => $arParams['toLimit'],
                    ));
                }
                else
                {
                    CEventCalendar::HandleElement($arResult, $arItem);
                }
            }

            if ($bCache)
            {
                $cache->StartDataCache($cacheTime, $cacheId, $cachePath);
                $cache->EndDataCache(array("events" => $arResult));
            }
        }

        return $arResult;
    }

Блог разработчика

9 августа 2016 ResizeImageGet и простой водяной знак налету

Сегодня поговорим о том как проще всего воткнуть водяной знак на картинки в Битрикс. Например, на все изображения каталога.

21 июля 2016 Добавление вкладки в CRM коробки Битрикс24

В этом посте я покажу, как легко и просто добавить вкладку в сущность CRM. И не просто добавить, а вывести там свой контент.

21 июля 2016 Как просто обращаться из коробки Битрикс24 на сайт на базе Битрикс

К примеру вам хочется внутренним скриптом дернуть с сайта-магазина информацию, которая там, в свою очередь, закрыта некоторыми правами. Например, админскими. Можно конечно мутить свой REST, или иной формат общения, но проще всего воспользоваться штатным инструментом:

Текст сообщения*
Загрузить изображение