コード例 #1
0
 public static function GetAbsent($users = false, $Params = array())
 {
     global $DB;
     // Can be called from agent... So we have to create $USER if it is not exists
     $tempUser = CCalendar::TempUser(false, true);
     $curUserId = isset($Params['userId']) ? intVal($Params['userId']) : CCalendar::GetCurUserId();
     $arUsers = array();
     if ($users !== false && is_array($users)) {
         foreach ($users as $id) {
             if ($id > 0) {
                 $arUsers[] = intVal($id);
             }
         }
     }
     if (!count($arUsers)) {
         $users = false;
     }
     // Part 1: select ordinary events
     $arFilter = array('CAL_TYPE' => 'user', 'DELETED' => 'N', 'ACCESSIBILITY' => 'absent');
     if (isset($Params['fromLimit'])) {
         $arFilter['FROM_LIMIT'] = CCalendar::Date(CCalendar::Timestamp($Params['fromLimit'], false), true, false);
     }
     if (isset($Params['toLimit'])) {
         $arFilter['TO_LIMIT'] = CCalendar::Date(CCalendar::Timestamp($Params['toLimit'], false), true, false);
     }
     $arEvents = CCalendarEvent::GetList(array('arFilter' => $arFilter, 'getUserfields' => false, 'parseRecursion' => true, 'fetchAttendees' => false, 'fetchMeetings' => true, 'userId' => $curUserId, 'checkPermissions' => false, 'preciseLimits' => true));
     // Part 2: select attendees
     CTimeZone::Disable();
     if (count($arUsers) > 0) {
         $userQ = ' AND CA.USER_ID in (' . implode(',', $arUsers) . ')';
     } else {
         $userQ = '';
     }
     $strSql = "\n\t\t\tSELECT\n\t\t\t\tCA.EVENT_ID as ID, CA.USER_ID, CA.STATUS, CA.ACCESSIBILITY,\n\t\t\t\tCE.CAL_TYPE,CE.OWNER_ID,CE.NAME," . $DB->DateToCharFunction("CE.DT_FROM") . " as DT_FROM," . $DB->DateToCharFunction("CE.DT_TO") . " as DT_TO, CE.DT_LENGTH, CE.PRIVATE_EVENT, CE.ACCESSIBILITY, CE.IMPORTANCE, CE.IS_MEETING, CE.MEETING_HOST, CE.MEETING, CE.LOCATION, CE.RRULE, CE.EXRULE, CE.RDATE, CE.EXDATE,\n\t\t\t\tCES.SECT_ID\n\t\t\tFROM b_calendar_attendees CA\n\t\t\tLEFT JOIN\n\t\t\t\tb_calendar_event CE ON(CA.EVENT_ID=CE.ID)\n\t\t\tLEFT JOIN\n\t\t\t\tb_calendar_event_sect CES ON (CA.EVENT_ID=CES.EVENT_ID)\n\t\t\tWHERE\n\t\t\t\t\tCE.ID IS NOT NULL\n\t\t\t\tAND\n\t\t\t\t\tCE.DELETED='N'\n\t\t\t\tAND\n\t\t\t\t\tSTATUS='Y'\n\t\t\t\tAND\n\t\t\t\t\tCA.ACCESSIBILITY='absent'\n\t\t\t\t{$userQ}\n\t\t\t";
     if (isset($arFilter['FROM_LIMIT'])) {
         $strSql .= "AND ";
         if (strtoupper($DB->type) == "MYSQL") {
             $strSql .= "CE.DT_TO>=FROM_UNIXTIME('" . MkDateTime(FmtDate($arFilter['FROM_LIMIT'], "D.M.Y"), "d.m.Y") . "')";
         } elseif (strtoupper($DB->type) == "MSSQL") {
             $strSql .= "CE.DT_TO>=" . $DB->CharToDateFunction($arFilter['FROM_LIMIT'], "SHORT");
         } elseif (strtoupper($DB->type) == "ORACLE") {
             $strSql .= "CE.DT_TO>=TO_DATE('" . FmtDate($arFilter['FROM_LIMIT'], "D.M.Y") . " 00:00:00','dd.mm.yyyy hh24:mi:ss')";
         }
     }
     if ($arFilter['TO_LIMIT']) {
         $strSql .= "AND ";
         if (strtoupper($DB->type) == "MYSQL") {
             $strSql .= "CE.DT_FROM<=FROM_UNIXTIME('" . MkDateTime(FmtDate($arFilter['TO_LIMIT'], "D.M.Y") . " 23:59:59", "d.m.Y H:i:s") . "')";
         } elseif (strtoupper($DB->type) == "MSSQL") {
             $strSql .= "CE.DT_FROM<=dateadd(day, 1, " . $DB->CharToDateFunction($arFilter['TO_LIMIT'], "SHORT") . ")";
         } elseif (strtoupper($DB->type) == "ORACLE") {
             $strSql .= "CE.DT_FROM<=TO_DATE('" . FmtDate($arFilter['TO_LIMIT'], "D.M.Y") . " 23:59:59','dd.mm.yyyy hh24:mi:ss')";
         }
     }
     $res = $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
     $arEvents2 = array();
     while ($event = $res->Fetch()) {
         $event = self::PreHandleEvent($event);
         if ($event['CAL_TYPE'] == 'user' && $event['IS_MEETING'] && $event['OWNER_ID'] == $event['USER_ID']) {
             continue;
         }
         if (self::CheckRecurcion($event)) {
             self::ParseRecursion($arEvents2, $event, array('fromLimit' => $arFilter["FROM_LIMIT"], 'toLimit' => $arFilter["TO_LIMIT"]));
         } else {
             self::HandleEvent($arEvents2, $event);
         }
     }
     CTimeZone::Enable();
     $arEvents = array_merge($arEvents, $arEvents2);
     $bSocNet = CModule::IncludeModule("socialnetwork");
     $result = array();
     $settings = CCalendar::GetSettings(array('request' => false));
     foreach ($arEvents as $event) {
         $userId = isset($event['USER_ID']) ? $event['USER_ID'] : $event['OWNER_ID'];
         if ($users !== false && !in_array($userId, $arUsers)) {
             continue;
         }
         if ($bSocNet && !CSocNetFeatures::IsActiveFeature(SONET_ENTITY_USER, $userId, "calendar")) {
             continue;
         }
         if ((!$event['CAL_TYPE'] != 'user' || $curUserId != $event['OWNER_ID']) && $curUserId != $event['CREATED_BY'] && !isset($arUserMeeting[$event['ID']])) {
             $sectId = $event['SECT_ID'];
             if (!$event['ACCESSIBILITY']) {
                 $event['ACCESSIBILITY'] = 'busy';
             }
             $private = $event['PRIVATE_EVENT'] && $event['CAL_TYPE'] == 'user';
             $bManager = false;
             if (!$private && CCalendar::IsIntranetEnabled() && CModule::IncludeModule('intranet') && $event['CAL_TYPE'] == 'user' && $settings['dep_manager_sub']) {
                 $bManager = in_array($curUserId, CCalendar::GetUserManagers($event['OWNER_ID'], true));
             }
             if ($private || !CCalendarSect::CanDo('calendar_view_full', $sectId) && !$bManager) {
                 if ($private) {
                     $event['NAME'] = '[' . GetMessage('EC_ACCESSIBILITY_' . strtoupper($event['ACCESSIBILITY'])) . ']';
                 } else {
                     if (!CCalendarSect::CanDo('calendar_view_title', $sectId)) {
                         $event['NAME'] = '[' . GetMessage('EC_ACCESSIBILITY_' . strtoupper($event['ACCESSIBILITY'])) . ']';
                     } else {
                         $event['NAME'] = $event['NAME'] . ' [' . GetMessage('EC_ACCESSIBILITY_' . strtoupper($event['ACCESSIBILITY'])) . ']';
                     }
                 }
             }
         }
         $result[] = array('ID' => $event['ID'], 'NAME' => $event['NAME'], 'DATE_FROM' => $event['DT_FROM'], 'DATE_TO' => $event['DT_TO'], 'DT_FROM_TS' => $event['DT_FROM_TS'], 'DT_TO_TS' => $event['DT_TO_TS'], 'CREATED_BY' => $userId, 'DETAIL_TEXT' => '', 'USER_ID' => $userId);
     }
     // Sort by DT_FROM_TS
     usort($result, array('CCalendar', '_NearestSort'));
     CCalendar::TempUser($tempUser, false);
     return $result;
 }
コード例 #2
0
ファイル: template.php プロジェクト: webgksupport/alpina
    $event['UF_CRM_CAL_EVENT'] = false;
}
$event['UF_WEBDAV_CAL_EVENT'] = $UF['UF_WEBDAV_CAL_EVENT'];
if (empty($event['UF_WEBDAV_CAL_EVENT']['VALUE'])) {
    $event['UF_WEBDAV_CAL_EVENT'] = false;
}
$event['FROM_WEEK_DAY'] = FormatDate('D', $fromTs);
$event['FROM_MONTH_DAY'] = FormatDate('j', $fromTs);
$event['FROM_MONTH'] = FormatDate('n', $fromTs);
$arHost = CCalendar::GetUser($event['MEETING_HOST'], true);
$arHost['AVATAR_SRC'] = CCalendar::GetUserAvatarSrc($arHost);
$arHost['URL'] = CCalendar::GetUserUrl($event['MEETING_HOST'], $arParams["PATH_TO_USER"]);
$arHost['DISPLAY_NAME'] = CCalendar::GetUserName($arHost);
$curUserStatus = '';
$userId = CCalendar::GetCurUserId();
$viewComments = CCalendar::IsPersonal($event['CAL_TYPE'], $event['OWNER_ID'], $userId) || CCalendarSect::CanDo('calendar_view_full', $event['SECT_ID'], $userId);
if ($event['IS_MEETING'] && empty($event['ATTENDEES_CODES'])) {
    $event['ATTENDEES_CODES'] = CCalendarEvent::CheckEndUpdateAttendeesCodes($event);
}
if ($event['IS_MEETING']) {
    $attendees = array('y' => array('users' => array(), 'count' => 4, 'countMax' => 8, 'title' => GetMessage('EC_ATT_Y'), 'id' => "bxview-att-cont-y-" . $event['ID']), 'n' => array('users' => array(), 'count' => 2, 'countMax' => 3, 'title' => GetMessage('EC_ATT_N'), 'id' => "bxview-att-cont-n-" . $event['ID']), 'q' => array('users' => array(), 'count' => 2, 'countMax' => 3, 'title' => GetMessage('EC_ATT_Q'), 'id' => "bxview-att-cont-q-" . $event['ID']), 'm' => array('users' => array(), 'count' => 4, 'countMax' => 8, 'title' => GetMessage('EC_ATT_M'), 'id' => "bxview-att-cont-m-" . $event['ID']));
    if (is_array($event['~ATTENDEES'])) {
        foreach ($event['~ATTENDEES'] as $att) {
            if ($userId == $att["USER_ID"]) {
                $curUserStatus = $att['STATUS'];
                $viewComments = true;
            }
            $att['AVATAR_SRC'] = CCalendar::GetUserAvatarSrc($att);
            $att['URL'] = CCalendar::GetUserUrl($att["USER_ID"], $arParams["PATH_TO_USER"]);
            $status = strtolower($att['STATUS']) == 'h' || $att['STATUS'] == '' ? 'y' : $att['STATUS'];
            // ?
コード例 #3
0
ファイル: calendar.php プロジェクト: andy-profi/bxApiDocs
 public static function GetUserPermissionsForCalendar($calendarId, $userId)
 {
     list($sectionId, $entityType, $entityId) = $calendarId;
     $entityType = strtolower($entityType);
     if ($sectionId == 0) {
         $res = array('bAccess' => CCalendarType::CanDo('calendar_type_view', $entityType, $userId), 'bReadOnly' => !CCalendarType::CanDo('calendar_type_edit', $entityType, $userId));
     }
     $bOwner = $entityType == 'user' && $entityId == $userId;
     $res = array('bAccess' => $bOwner || CCalendarSect::CanDo('calendar_view_time', $sectionId, $userId), 'bReadOnly' => !$bOwner && !CCalendarSect::CanDo('calendar_edit', $sectionId, $userId));
     if ($res['bReadOnly'] && !$bOwner) {
         if (CCalendarSect::CanDo('calendar_view_time', $sectionId, $userId)) {
             $res['privateStatus'] = 'time';
         }
         if (CCalendarSect::CanDo('calendar_view_title', $sectionId, $userId)) {
             $res['privateStatus'] = 'title';
         }
     }
     return $res;
 }
コード例 #4
0
 public static function Delete($ID)
 {
     global $DB;
     if (!CCalendarSect::CanDo('calendar_edit_section', $ID)) {
         return CCalendar::ThrowError('EC_ACCESS_DENIED');
     }
     // Del link from table
     $strSql = "DELETE FROM b_calendar_event_sect WHERE SECT_ID=" . IntVal($ID);
     $DB->Query($strSql, false, "FILE: " . __FILE__ . "<br> LINE: " . __LINE__);
     // Del from
     $strSql = "DELETE FROM b_calendar_section WHERE ID=" . IntVal($ID);
     $DB->Query($strSql, false, "FILE: " . __FILE__ . "<br> LINE: " . __LINE__);
     CCalendarEvent::DeleteEmpty();
     CCalendar::ClearCache(array('section_list', 'event_list'));
     return true;
 }
コード例 #5
0
ファイル: calendar_sect.php プロジェクト: DarneoStudio/bitrix
 public static function Delete($id, $checkPermissions = true)
 {
     global $DB;
     if ($checkPermissions !== false && !CCalendarSect::CanDo('calendar_edit_section', $id)) {
         return CCalendar::ThrowError('EC_ACCESS_DENIED');
     }
     $arEvents = CCalendarEvent::GetList(array('arFilter' => array("SECTION" => array(IntVal($id))), 'setDefaultLimit' => false, 'parseRecursion' => false, 'checkPermissions' => false));
     $meetingIds = array();
     foreach ($arEvents as $event) {
         if ($event['IS_MEETING'] && $event['PARENT_ID'] === $event['ID']) {
             $meetingIds[] = intval($event['PARENT_ID']);
             CCalendarLiveFeed::OnDeleteCalendarEventEntry($event['PARENT_ID'], $event);
         }
     }
     if (count($meetingIds) > 0) {
         $meetingIds = implode(',', $meetingIds);
         $DB->Query("DELETE from b_calendar_event WHERE PARENT_ID in (" . $meetingIds . ")", false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
     }
     // Del link from table
     $strSql = "DELETE FROM b_calendar_event_sect WHERE SECT_ID=" . IntVal($id);
     $DB->Query($strSql, false, "FILE: " . __FILE__ . "<br> LINE: " . __LINE__);
     // Del from
     $strSql = "DELETE FROM b_calendar_section WHERE ID=" . IntVal($id);
     $DB->Query($strSql, false, "FILE: " . __FILE__ . "<br> LINE: " . __LINE__);
     CCalendarEvent::DeleteEmpty();
     CCalendar::ClearCache(array('section_list', 'event_list'));
     return true;
 }
コード例 #6
0
 public static function SectionDelete($arParams = array(), $nav = null, $server = null)
 {
     $userId = CCalendar::GetCurUserId();
     $methodName = "calendar.section.delete";
     if (isset($arParams['type'])) {
         $type = $arParams['type'];
     } else {
         throw new Exception(GetMessage('CAL_REST_PARAM_EXCEPTION', array('#REST_METHOD#' => $methodName, '#PARAM_NAME#' => 'type')));
     }
     if (isset($arParams['ownerId'])) {
         $ownerId = intval($arParams['ownerId']);
     } elseif ($type == 'user') {
         $ownerId = $userId;
     } else {
         throw new Exception(GetMessage('CAL_REST_PARAM_EXCEPTION', array('#REST_METHOD#' => $methodName, '#PARAM_NAME#' => 'ownerId')));
     }
     if (isset($arParams['id']) && intVal($arParams['id']) > 0) {
         $id = intVal($arParams['id']);
     } else {
         throw new Exception(GetMessage('CAL_REST_SECT_ID_EXCEPTION'));
     }
     if (!CCalendar::IsPersonal($type, $ownerId, $userId) && !CCalendarSect::CanDo('calendar_edit_section', $id, $userId)) {
         throw new Exception(GetMessage('CAL_REST_ACCESS_DENIED'));
     }
     $res = CCalendar::DeleteSection($id);
     if (!$res) {
         throw new Exception(GetMessage('CAL_REST_SECTION_DELETE_ERROR'));
     }
     return $res;
 }
コード例 #7
0
 public static function GetAbsent($users = false, $Params = array())
 {
     // Can be called from agent... So we have to create $USER if it is not exists
     $tempUser = CCalendar::TempUser(false, true);
     $curUserId = isset($Params['userId']) ? intVal($Params['userId']) : CCalendar::GetCurUserId();
     $arUsers = array();
     if ($users !== false && is_array($users)) {
         foreach ($users as $id) {
             if ($id > 0) {
                 $arUsers[] = intVal($id);
             }
         }
     }
     if (!count($arUsers)) {
         $users = false;
     }
     $arFilter = array('DELETED' => 'N', 'ACCESSIBILITY' => 'absent');
     if ($users) {
         $arFilter['CREATED_BY'] = $users;
     }
     if (isset($Params['fromLimit'])) {
         $arFilter['FROM_LIMIT'] = CCalendar::Date(CCalendar::Timestamp($Params['fromLimit'], false), true, false);
     }
     if (isset($Params['toLimit'])) {
         $arFilter['TO_LIMIT'] = CCalendar::Date(CCalendar::Timestamp($Params['toLimit'], false), true, false);
     }
     $arEvents = CCalendarEvent::GetList(array('arFilter' => $arFilter, 'parseRecursion' => true, 'getUserfields' => false, 'userId' => $curUserId, 'preciseLimits' => true, 'checkPermissions' => false, 'skipDeclined' => true));
     $bSocNet = CModule::IncludeModule("socialnetwork");
     $result = array();
     $settings = CCalendar::GetSettings(array('request' => false));
     foreach ($arEvents as $event) {
         $userId = isset($event['USER_ID']) ? $event['USER_ID'] : $event['CREATED_BY'];
         if ($users !== false && !in_array($userId, $arUsers)) {
             continue;
         }
         if ($bSocNet && !CSocNetFeatures::IsActiveFeature(SONET_ENTITY_USER, $userId, "calendar")) {
             continue;
         }
         if ((!$event['CAL_TYPE'] != 'user' || $curUserId != $event['OWNER_ID']) && $curUserId != $event['CREATED_BY'] && !isset($arUserMeeting[$event['ID']])) {
             $sectId = $event['SECT_ID'];
             if (!$event['ACCESSIBILITY']) {
                 $event['ACCESSIBILITY'] = 'busy';
             }
             $private = $event['PRIVATE_EVENT'] && $event['CAL_TYPE'] == 'user';
             $bManager = false;
             if (!$private && CCalendar::IsIntranetEnabled() && CModule::IncludeModule('intranet') && $event['CAL_TYPE'] == 'user' && $settings['dep_manager_sub']) {
                 $bManager = in_array($curUserId, CCalendar::GetUserManagers($event['OWNER_ID'], true));
             }
             if ($private || !CCalendarSect::CanDo('calendar_view_full', $sectId) && !$bManager) {
                 $event = self::ApplyAccessRestrictions($event, $userId);
             }
         }
         $skipTime = $event['DT_SKIP_TIME'] === 'Y';
         $fromTs = CCalendar::Timestamp($event['DATE_FROM'], false, !$skipTime);
         $toTs = CCalendar::Timestamp($event['DATE_TO'], false, !$skipTime);
         if ($event['DT_SKIP_TIME'] !== 'Y') {
             $fromTs -= $event['~USER_OFFSET_FROM'];
             $toTs -= $event['~USER_OFFSET_TO'];
         }
         $result[] = array('ID' => $event['ID'], 'NAME' => $event['NAME'], 'DATE_FROM' => CCalendar::Date($fromTs, !$skipTime, false), 'DATE_TO' => CCalendar::Date($toTs, !$skipTime, false), 'DT_FROM_TS' => $fromTs, 'DT_TO_TS' => $toTs, 'CREATED_BY' => $userId, 'DETAIL_TEXT' => '', 'USER_ID' => $userId);
     }
     // Sort by DATE_FROM_TS_UTC
     usort($result, array('CCalendar', '_NearestSort'));
     CCalendar::TempUser($tempUser, false);
     return $result;
 }
コード例 #8
0
    public static function DialogViewEvent($Params)
    {
        global $APPLICATION, $USER_FIELD_MANAGER;
        $id = $Params['id'];
        $event = $Params['event'];
        $event['~DT_FROM_TS'] = $event['DT_FROM_TS'];
        $event['~DT_TO_TS'] = $event['DT_TO_TS'];
        $event['DT_FROM_TS'] = $Params['fromTs'];
        $event['DT_TO_TS'] = $Params['fromTs'] + $event['DT_LENGTH'];
        $UF = $USER_FIELD_MANAGER->GetUserFields("CALENDAR_EVENT", $event['ID'], LANGUAGE_ID);
        $event['UF_CRM_CAL_EVENT'] = $UF['UF_CRM_CAL_EVENT'];
        if (empty($event['UF_CRM_CAL_EVENT']['VALUE'])) {
            $event['UF_CRM_CAL_EVENT'] = false;
        }
        $event['UF_WEBDAV_CAL_EVENT'] = $UF['UF_WEBDAV_CAL_EVENT'];
        if (empty($event['UF_WEBDAV_CAL_EVENT']['VALUE'])) {
            $event['UF_WEBDAV_CAL_EVENT'] = false;
        }
        $event['FROM_WEEK_DAY'] = FormatDate('D', $event['DT_FROM_TS']);
        $event['FROM_MONTH_DAY'] = FormatDate('j', $event['DT_FROM_TS']);
        $event['FROM_MONTH'] = FormatDate('n', $event['DT_FROM_TS']);
        $arHost = CCalendar::GetUser($event['MEETING_HOST'], true);
        $arHost['AVATAR_SRC'] = CCalendar::GetUserAvatarSrc($arHost);
        $arHost['URL'] = CCalendar::GetUserUrl($event['MEETING_HOST'], $Params["PATH_TO_USER"]);
        $arHost['DISPLAY_NAME'] = CCalendar::GetUserName($arHost);
        $curUserStatus = '';
        $userId = CCalendar::GetCurUserId();
        $viewComments = CCalendar::IsPersonal($event['CAL_TYPE'], $event['OWNER_ID'], $userId) || CCalendarSect::CanDo('calendar_view_full', $event['SECT_ID'], $userId);
        if ($event['IS_MEETING'] && empty($event['ATTENDEES_CODES'])) {
            $event['ATTENDEES_CODES'] = CCalendarEvent::CheckEndUpdateAttendeesCodes($event);
        }
        if ($event['IS_MEETING']) {
            $attendees = array('y' => array('users' => array(), 'count' => 4, 'countMax' => 8, 'title' => GetMessage('EC_ATT_Y'), 'id' => "bxview-att-cont-y-" . $event['ID']), 'n' => array('users' => array(), 'count' => 2, 'countMax' => 3, 'title' => GetMessage('EC_ATT_N'), 'id' => "bxview-att-cont-n-" . $event['ID']), 'q' => array('users' => array(), 'count' => 2, 'countMax' => 3, 'title' => GetMessage('EC_ATT_Q'), 'id' => "bxview-att-cont-q-" . $event['ID']));
            if (is_array($event['~ATTENDEES'])) {
                foreach ($event['~ATTENDEES'] as $att) {
                    if ($userId == $att["USER_ID"]) {
                        $curUserStatus = $att['STATUS'];
                        $viewComments = true;
                    }
                    $att['AVATAR_SRC'] = CCalendar::GetUserAvatarSrc($att);
                    $att['URL'] = CCalendar::GetUserUrl($att["USER_ID"], $Params["PATH_TO_USER"]);
                    $attendees[strtolower($att['STATUS'])]['users'][] = $att;
                }
            }
        }
        $arTabs = array(array('name' => GetMessage('EC_BASIC'), 'title' => GetMessage('EC_BASIC_TITLE'), 'id' => $id . "view-tab-0", 'active' => true), array('name' => GetMessage('EC_EDEV_ADD_TAB'), 'title' => GetMessage('EC_EDEV_ADD_TAB_TITLE'), 'id' => $id . "view-tab-1"));
        ?>
<div id="bxec_view_ed_<?php 
        echo $id;
        ?>
" class="bxec-popup">
	<div style="width: 700px; height: 1px;"></div>
	<div class="bxec-d-tabs" id="<?php 
        echo $id;
        ?>
_viewev_tabs">
		<?php 
        foreach ($arTabs as $tab) {
            ?>
			<div class="bxec-d-tab <?php 
            if ($tab['active']) {
                echo 'bxec-d-tab-act';
            }
            ?>
" title="<?php 
            echo isset($tab['title']) ? $tab['title'] : $tab['name'];
            ?>
" id="<?php 
            echo $tab['id'];
            ?>
" <?php 
            if ($tab['show'] === false) {
                echo 'style="display:none;"';
            }
            ?>
>
				<b></b><div><span><?php 
            echo $tab['name'];
            ?>
</span></div><i></i>
			</div>
		<?php 
        }
        ?>
	</div>
	<div class="bxec-d-cont">
<?php 
        /* ####### TAB 0 : BASIC ####### */
        ?>
<div id="<?php 
        echo $id;
        ?>
view-tab-0-cont" class="bxec-d-cont-div" style="display: block;">
	<div class="bx-cal-view-icon">
		<div class="bx-cal-view-icon-day"><?php 
        echo $event['FROM_WEEK_DAY'];
        ?>
</div>
		<div class="bx-cal-view-icon-date"><?php 
        echo $event['FROM_MONTH_DAY'];
        ?>
</div>
	</div>
	<div class="bx-cal-view-text">
		<table>
			<tr>
				<td class="bx-cal-view-text-cell-l"><?php 
        echo GetMessage('EC_T_NAME');
        ?>
:</td>
				<td class="bx-cal-view-text-cell-r"><span class="bx-cal-view-name"><?php 
        echo htmlspecialcharsEx($event['NAME']);
        ?>
</span></td>
			</tr>
			<tr>
				<td class="bx-cal-view-text-cell-l"><?php 
        echo GetMessage('EC_DATE');
        ?>
:</td>
				<td class="bx-cal-view-text-cell-r bx-cal-view-from-to">
					<?php 
        echo CCalendar::GetFromToHtml($event['DT_FROM_TS'], $event['DT_TO_TS'], $event['DT_SKIP_TIME'] == 'Y', $event['DT_LENGTH']);
        ?>
				</td>
			</tr>
			<?php 
        if ($event['RRULE']) {
            ?>
				<?php 
            $event['RRULE'] = CCalendarEvent::ParseRRULE($event['RRULE']);
            switch ($event['RRULE']['FREQ']) {
                case 'DAILY':
                    if ($event['RRULE']['INTERVAL'] == 1) {
                        $repeatHTML = GetMessage('EC_RRULE_EVERY_DAY');
                    } else {
                        $repeatHTML = GetMessage('EC_RRULE_EVERY_DAY_1', array('#DAY#' => $event['RRULE']['INTERVAL']));
                    }
                    break;
                case 'WEEKLY':
                    $daysList = array();
                    foreach ($event['RRULE']['BYDAY'] as $day) {
                        $daysList[] = GetMessage('EC_' . $day);
                    }
                    $daysList = implode(', ', $daysList);
                    if ($event['RRULE']['INTERVAL'] == 1) {
                        $repeatHTML = GetMessage('EC_RRULE_EVERY_WEEK', array('#DAYS_LIST#' => $daysList));
                    } else {
                        $repeatHTML = GetMessage('EC_RRULE_EVERY_WEEK_1', array('#WEEK#' => $event['RRULE']['INTERVAL'], '#DAYS_LIST#' => $daysList));
                    }
                    break;
                case 'MONTHLY':
                    if ($event['RRULE']['INTERVAL'] == 1) {
                        $repeatHTML = GetMessage('EC_RRULE_EVERY_MONTH');
                    } else {
                        $repeatHTML = GetMessage('EC_RRULE_EVERY_MONTH_1', array('#MONTH#' => $event['RRULE']['INTERVAL']));
                    }
                    break;
                case 'YEARLY':
                    if ($event['RRULE']['INTERVAL'] == 1) {
                        $repeatHTML = GetMessage('EC_RRULE_EVERY_YEAR', array('#DAY#' => $event['FROM_MONTH_DAY'], '#MONTH#' => $event['FROM_MONTH']));
                    } else {
                        $repeatHTML = GetMessage('EC_RRULE_EVERY_YEAR_1', array('#YEAR#' => $event['RRULE']['INTERVAL'], '#DAY#' => $event['FROM_MONTH_DAY'], '#MONTH#' => $event['FROM_MONTH']));
                    }
                    break;
            }
            $repeatHTML .= '<br>' . GetMessage('EC_RRULE_FROM', array('#FROM_DATE#' => FormatDate(CCalendar::DFormat(false), $event['~DT_FROM_TS'])));
            if (date('dmY', $event['RRULE']['UNTIL']) != '01012038') {
                $repeatHTML .= ' ' . GetMessage('EC_RRULE_UNTIL', array('#UNTIL_DATE#' => FormatDate(CCalendar::DFormat(false), $event['RRULE']['UNTIL'])));
            }
            ?>
			<tr>
				<td class="bx-cal-view-text-cell-l"><?php 
            echo GetMessage('EC_T_REPEAT');
            ?>
:</td>
				<td class="bx-cal-view-text-cell-r"><?php 
            echo $repeatHTML;
            ?>
</td>
			</tr>
			<?php 
        }
        ?>
			<?php 
        if (!empty($event['LOCATION'])) {
            ?>
			<tr>
				<td class="bx-cal-view-text-cell-l"><?php 
            echo GetMessage('EC_LOCATION');
            ?>
:</td>
				<td class="bx-cal-view-text-cell-r"><span class="bx-cal-location"><?php 
            echo htmlspecialcharsEx(CCalendar::GetTextLocation($event['LOCATION']));
            ?>
</span></td>
			</tr>
			<?php 
        }
        ?>
		</table>
	</div>

	<?php 
        if (!empty($event['~DESCRIPTION'])) {
            ?>
	<div class="bx-cal-view-description">
		<div class="feed-cal-view-desc-title"><?php 
            echo GetMessage('EC_T_DESC');
            ?>
:</div>
		<div class="bx-cal-view-desc-cont"><?php 
            echo $event['~DESCRIPTION'];
            ?>
</div>
	</div>
	<?php 
        }
        ?>

	<?php 
        if ($event['UF_WEBDAV_CAL_EVENT']) {
            ?>
	<div class="bx-cal-view-files" id="bx-cal-view-files-<?php 
            echo $id;
            echo $event['ID'];
            ?>
">
		<?php 
            $APPLICATION->IncludeComponent("bitrix:system.field.view", $event['UF_WEBDAV_CAL_EVENT']["USER_TYPE"]["USER_TYPE_ID"], array("arUserField" => $event['UF_WEBDAV_CAL_EVENT']), null, array("HIDE_ICONS" => "Y"));
            ?>
	</div>
	<?php 
        }
        ?>

	<?php 
        if ($event['UF_CRM_CAL_EVENT']) {
            ?>
	<div class="bx-cal-view-crm">
		<div class="bxec-crm-title"><?php 
            echo htmlspecialcharsbx($event['UF_CRM_CAL_EVENT']["EDIT_FORM_LABEL"]);
            ?>
:</div>
		<?php 
            $APPLICATION->IncludeComponent("bitrix:system.field.view", $event['UF_CRM_CAL_EVENT']["USER_TYPE"]["USER_TYPE_ID"], array("arUserField" => $event['UF_CRM_CAL_EVENT']), null, array("HIDE_ICONS" => "Y"));
            ?>
	</div>
	<?php 
        }
        ?>

	<div id="<?php 
        echo $id;
        ?>
bxec_view_uf_group" class="bxec-popup-row" style="display: none;">
		<div class="bxec-popup-row-title"><?php 
        echo GetMessage('EC_EDEV_ADD_TAB');
        ?>
</div>
		<div id="<?php 
        echo $id;
        ?>
bxec_view_uf_cont"></div>
	</div>

	<?php 
        if ($Params['bSocNet'] && $event['IS_MEETING']) {
            ?>
	<div class="bx-cal-view-meeting-cnt">
		<table>
			<tr>
				<td class="bx-cal-view-att-cell-l bx-cal-bot-border"><span><?php 
            echo GetMessage('EC_EDEV_HOST');
            ?>
:</span></td>
				<td class="bx-cal-view-att-cell-r bx-cal-bot-border">
					<a title="<?php 
            echo htmlspecialcharsbx($arHost['DISPLAY_NAME']);
            ?>
" href="<?php 
            echo $arHost['URL'];
            ?>
" target="_blank" class="bxcal-att-popup-img bxcal-att-popup-att-full"><span class="bxcal-att-popup-avatar-outer"><span class="bxcal-att-popup-avatar"><img src="<?php 
            echo $arHost['AVATAR_SRC'];
            ?>
" width="<?php 
            echo $Params['AVATAR_SIZE'];
            ?>
" height="<?php 
            echo $Params['AVATAR_SIZE'];
            ?>
" /></span></span><span class="bxcal-att-name"><?php 
            echo htmlspecialcharsbx($arHost['DISPLAY_NAME']);
            ?>
</span></a>
				</td>
			</tr>
			<tr>
				<td class="bx-cal-view-att-cell-l"></td>
				<td class="bx-cal-view-att-cell-r" style="padding-top: 5px;">
					<div class="bx-cal-view-title"><?php 
            echo GetMessage('EC_EDEV_GUESTS');
            ?>
</div>
					<div class="bx-cal-att-dest-cont">
						<?php 
            $arDest = CCalendar::GetFormatedDestination($event['ATTENDEES_CODES']);
            $cnt = count($arDest);
            for ($i = 0; $i < $cnt; $i++) {
                $dest = $arDest[$i];
                ?>
<span class="bx-cal-att-dest-block"><?php 
                echo $dest['TITLE'];
                ?>
</span><?php 
                if ($i < count($arDest) - 1) {
                    echo ', ';
                }
            }
            ?>
					</div>
				</td>
			</tr>

			<?php 
            foreach ($attendees as $arAtt) {
                if (empty($arAtt['users'])) {
                    continue;
                }
                ?>
			<tr>
				<td class="bx-cal-view-att-cell-l"><?php 
                echo $arAtt['title'];
                ?>
:</td>
				<td class="bx-cal-view-att-cell-r">
					<div class="bx-cal-view-att-cont" id="<?php 
                echo $arAtt['id'];
                ?>
">
						<?php 
                $cnt = 0;
                $bShowAll = count($arAtt['users']) <= $arAtt['countMax'];
                foreach ($arAtt['users'] as $att) {
                    $cnt++;
                    if (!$bShowAll && $cnt > $arAtt['count']) {
                        ?>
								<a title="<?php 
                        echo htmlspecialcharsbx($att['DISPLAY_NAME']);
                        ?>
" href="<?php 
                        echo $att['URL'];
                        ?>
" target="_blank" class="bxcal-att-popup-img bxcal-att-popup-img-hidden"><span class="bxcal-att-popup-avatar-outer"><span class="bxcal-att-popup-avatar"><img src="<?php 
                        echo $att['AVATAR_SRC'];
                        ?>
" width="<?php 
                        echo $Params['AVATAR_SIZE'];
                        ?>
" height="<?php 
                        echo $Params['AVATAR_SIZE'];
                        ?>
" /></span></span><span class="bxcal-att-name"><?php 
                        echo htmlspecialcharsbx($att['DISPLAY_NAME']);
                        ?>
</span></a>
								<?php 
                    } else {
                        ?>
								<a title="<?php 
                        echo htmlspecialcharsbx($att['DISPLAY_NAME']);
                        ?>
" href="<?php 
                        echo $att['URL'];
                        ?>
" target="_blank" class="bxcal-att-popup-img"><span class="bxcal-att-popup-avatar-outer"><span class="bxcal-att-popup-avatar"><img src="<?php 
                        echo $att['AVATAR_SRC'];
                        ?>
" width="<?php 
                        echo $Params['AVATAR_SIZE'];
                        ?>
" height="<?php 
                        echo $Params['AVATAR_SIZE'];
                        ?>
" /></span></span><span class="bxcal-att-name"><?php 
                        echo htmlspecialcharsbx($att['DISPLAY_NAME']);
                        ?>
</span></a>
								<?php 
                    }
                }
                if (!$bShowAll) {
                    ?>
							<span data-bx-more-users="<?php 
                    echo $arAtt['id'];
                    ?>
" class="bxcal-more-attendees"><?php 
                    echo CCalendar::GetMoreAttendeesMessage(count($arAtt['users']) - $arAtt['count']);
                    ?>
</span>
						<?php 
                }
                ?>
					</div>
				</td>
			</tr>
			<?php 
            }
            /*foreach($attendees as $arAtt)*/
            ?>

			<?php 
            if (!empty($event['MEETING']['TEXT'])) {
                ?>
			<tr>
				<td class="bx-cal-view-att-cell-l" style="padding-top: 3px;"><?php 
                echo GetMessage('EC_MEETING_TEXT2');
                ?>
:</td>
				<td class="bx-cal-view-att-cell-r"><pre><?php 
                echo htmlspecialcharsEx($event['MEETING']['TEXT']);
                ?>
</pre></td>
			</tr>
			<?php 
            }
            /*if (!empty($event['MEETING']['TEXT']))*/
            ?>
		</table>

		<div class="bxc-confirm-row">
			<?php 
            if ($curUserStatus == 'Q') {
                /* User still haven't take a decision*/
                ?>
				<div id="<?php 
                echo $id;
                ?>
status-conf-cnt2" class="bxc-conf-cnt">
					<span data-bx-set-status="Y" class="popup-window-button popup-window-button-accept" title="<?php 
                echo GetMessage('EC_EDEV_CONF_Y_TITLE');
                ?>
"><span class="popup-window-button-left"></span><span class="popup-window-button-text"><?php 
                echo GetMessage('EC_ACCEPT_MEETING');
                ?>
</span><span class="popup-window-button-right"></span></span>
					<a data-bx-set-status="N" class="bxc-decline-link" href="javascript:void(0)" title="<?php 
                echo GetMessage('EC_EDEV_CONF_N_TITLE');
                ?>
" id="<?php 
                echo $id;
                ?>
decline-link-2"><?php 
                echo GetMessage('EC_EDEV_CONF_N');
                ?>
</a>
				</div>
			<?php 
            } elseif ($curUserStatus == 'Y') {
                /* User accepts inviting */
                ?>
				<div id="<?php 
                echo $id;
                ?>
status-conf-cnt1" class="bxc-conf-cnt">
					<span><?php 
                echo GetMessage('EC_ACCEPTED_STATUS');
                ?>
</span>
					<a data-bx-set-status="N" class="bxc-decline-link" href="javascript:void(0)" title="<?php 
                echo GetMessage('EC_EDEV_CONF_N_TITLE');
                ?>
"><?php 
                echo GetMessage('EC_EDEV_CONF_N');
                ?>
</a>
				</div>
			<?php 
            } elseif ($curUserStatus == 'N') {
                /* User declines inviting*/
                ?>
				<div class="bxc-conf-cnt">
					<span class="bxc-conf-label"><?php 
                echo GetMessage('EC_DECLINE_INFO');
                ?>
</span>. <a data-bx-set-status="Y" href="javascript:void(0)" title="<?php 
                echo GetMessage('EC_ACCEPT_MEETING_2');
                ?>
"><?php 
                echo GetMessage('EC_ACCEPT_MEETING');
                ?>
</a>
				</div>
			<?php 
            } elseif ($event['MEETING']['OPEN']) {
                /* it's open meeting*/
                ?>
				<div class="bxc-conf-cnt">
					<span class="bxc-conf-label" title="<?php 
                echo GetMessage('EC_OPEN_MEETING_TITLE');
                ?>
"><?php 
                echo GetMessage('EC_OPEN_MEETING');
                ?>
:</span>
					<span data-bx-set-status="Y" class="popup-window-button popup-window-button-accept" title="<?php 
                echo GetMessage('EC_EDEV_CONF_Y_TITLE');
                ?>
"><span class="popup-window-button-left"></span><span class="popup-window-button-text"><?php 
                echo GetMessage('EC_ACCEPT_MEETING');
                ?>
</span><span class="popup-window-button-right"></span></span>
				</div>
			<?php 
            }
            ?>
		</div>
	</div>

	<?php 
        }
        /*$event['IS_MEETING'])*/
        ?>
</div>
<?php 
        /* ####### END TAB 0 ####### */
        ?>

<?php 
        /* ####### TAB 1 : ADDITIONAL ####### */
        ?>
<div id="<?php 
        echo $id;
        ?>
view-tab-1-cont" class="bxec-d-cont-div">
	<div class="bx-cal-view-text-additional">
		<table>
			<?php 
        if ($Params['sectionName'] != '') {
            ?>
			<tr>
				<td class="bx-cal-view-text-cell-l"><?php 
            echo GetMessage('EC_T_CALENDAR');
            ?>
:</td>
				<td class="bx-cal-view-text-cell-r"><?php 
            echo htmlspecialcharsEx($Params['sectionName']);
            ?>
</td>
			</tr>
			<?php 
        }
        ?>
			<?php 
        if ($event['IMPORTANCE'] != '') {
            ?>
			<tr>
				<td class="bx-cal-view-text-cell-l"><?php 
            echo GetMessage('EC_IMPORTANCE_TITLE');
            ?>
:</td>
				<td class="bx-cal-view-text-cell-r"><?php 
            echo GetMessage("EC_IMPORTANCE_" . strtoupper($event['IMPORTANCE']));
            ?>
</td>
			</tr>
			<?php 
        }
        ?>
			<?php 
        if ($event['ACCESSIBILITY'] != '' && $Params['bIntranet']) {
            ?>
			<tr>
				<td class="bx-cal-view-text-cell-l"><?php 
            echo GetMessage('EC_ACCESSIBILITY_TITLE');
            ?>
:</td>
				<td class="bx-cal-view-text-cell-r"><?php 
            echo GetMessage("EC_ACCESSIBILITY_" . strtoupper($event['ACCESSIBILITY']));
            ?>
</td>
			</tr>
			<?php 
        }
        ?>
			<?php 
        if ($event['PRIVATE_EVENT'] && $Params['bIntranet']) {
            ?>
			<tr>
				<td class="bx-cal-view-text-cell-l"><?php 
            echo GetMessage('EC_EDDIV_SPECIAL_NOTES');
            ?>
:</td>
				<td class="bx-cal-view-text-cell-r"><?php 
            echo GetMessage('EC_PRIVATE_EVENT');
            ?>
</td>
			</tr>
			<?php 
        }
        ?>
		</table>
	</div>
</div>
<?php 
        /* ####### END TAB 1 ####### */
        ?>
	</div>

	<?php 
        if ($viewComments) {
            ?>
	<div class="bxec-d-cont-comments-title">
		<?php 
            echo GetMessage('EC_COMMENTS');
            ?>
	</div>
	<div class="bxec-d-cont bxec-d-cont-comments">
		<?php 
            if ($userId == $event['OWNER_ID']) {
                $permission = "Y";
            } else {
                $permission = 'M';
            }
            $set = CCalendar::GetSettings();
            // A < E < I < M < Q < U < Y
            // A - NO ACCESS, E - READ, I - ANSWER
            // M - NEW TOPIC
            // Q - MODERATE, U - EDIT, Y - FULL_ACCESS
            $APPLICATION->IncludeComponent("bitrix:forum.comments", "bitrix24", array("FORUM_ID" => $set['forum_id'], "ENTITY_TYPE" => "EV", "ENTITY_ID" => $event['ID'], "ENTITY_XML_ID" => "EVENT_" . $event['ID'], "PERMISSION" => $permission, "URL_TEMPLATES_PROFILE_VIEW" => $set['path_to_user'], "SHOW_RATING" => "Y", "SHOW_LINK_TO_MESSAGE" => "N", "BIND_VIEWER" => "Y"), false, array('HIDE_ICONS' => 'Y'));
            ?>
	</div>
	<?php 
        }
        ?>
</div>
<?php 
    }