%PDF- %PDF-
| Direktori : /home/bitrix/www/bitrix/modules/calendar/classes/general/ |
| Current File : /home/bitrix/www/bitrix/modules/calendar/classes/general/calendar_planner.php |
<?
class CCalendarPlanner
{
public static function Init($config = array(), $initialParams = false)
{
self::InitJsCore($config, $initialParams);
}
public static function InitJsCore($config = array(), $initialParams)
{
global $APPLICATION;
CUtil::InitJSCore(array('ajax', 'window', 'popup', 'access', 'date', 'viewer', 'socnetlogdest'));
// Config
if (!$config['id'])
$config['id'] = (isset($config['id']) && strlen($config['id']) > 0) ? $config['id'] : 'bx_calendar_planner'.substr(uniqid(mt_rand(), true), 0, 4);
$APPLICATION->AddHeadScript('/bitrix/js/calendar/planner.js');
$APPLICATION->SetAdditionalCSS("/bitrix/js/calendar/planner.css");
$mess_lang = \Bitrix\Main\Localization\Loc::loadLanguageFile(__FILE__);
?>
<div id="<?= htmlspecialcharsbx($config['id'])?>" class="calendar-planner-wrapper"></div>
<script type="text/javascript">
BX.namespace('BX.Calendar');
if(typeof BX.Calendar.Planner === 'undefined')
{
BX.Calendar.Planner = {
planners: {},
Get: function(id)
{
return BX.Calendar.Planner.planners[id] || false;
},
Init: function(id, config, initialParams)
{
BX.Calendar.Planner.planners[id] = new CalendarPlanner(config, initialParams);
}
}
}
BX.message(<?=CUtil::PhpToJSObject($mess_lang, false);?>);
BX.ready(function()
{
BX.Calendar.Planner.Init(
'<?= CUtil::JSEscape($config['id'])?>',
<?=\Bitrix\Main\Web\Json::encode($config, false);?>,
<?=\Bitrix\Main\Web\Json::encode($initialParams);?>
);
});
</script>
<?
}
public static function prepareData($params = array())
{
$curEventId = intVal($params['entry_id']);
$curUserId = intVal($params['user_id']);
$hostUserId = intVal($params['host_id']);
$skipEntryList = (isset($params['skipEntryList']) && is_array($params['skipEntryList'])) ? $params['skipEntryList'] : array();
$resourceIdList = array();
$result = array(
'users' => array(),
'entries' => array(),
'accessibility' => array()
);
$userIds = array();
if (isset($params['codes']) && is_array($params['codes']))
{
$params['codes'] = array_unique($params['codes']);
$users = CCalendar::GetDestinationUsers($params['codes'], true);
foreach($users as $user)
{
$userIds[] = $user['USER_ID'];
$status = '';
if ($hostUserId && $hostUserId == $user['USER_ID'])
$status = 'h';
if (!$hostUserId && $curUserId == $user['USER_ID'])
$status = 'h';
$userSettings = CCalendarUserSettings::Get($user['USER_ID']);
$result['entries'][] = array(
'type' => 'user',
'id' => $user['USER_ID'],
'name' => CCalendar::GetUserName($user),
'status' => $status,
'url' => CCalendar::GetUserUrl($user['USER_ID']),
'avatar' => CCalendar::GetUserAvatarSrc($user),
'strictStatus' => $userSettings['denyBusyInvitation']
);
}
}
elseif(isset($params['entries']) && is_array($params['entries']))
{
foreach($params['entries'] as $userId)
{
$userIds[] = intval($userId);
}
}
if (isset($params['resources']) && is_array($params['resources']))
{
foreach($params['resources'] as $resource)
{
$resourceId = intVal($resource['id']);
$resourceIdList[] = $resourceId;
$resource['type'] = preg_replace("/[^a-zA-Z0-9_]/i", "", $resource['type']);
$result['entries'][] = array(
'type' => $resource['type'],
'id' => $resourceId,
'name' => $resource['name']
);
$result['accessibility'][$resourceId] = array();
}
}
$from = $params['date_from'];
$to = $params['date_to'];
$accessibility = CCalendar::GetAccessibilityForUsers(array(
'users' => $userIds,
'from' => $from, // date or datetime in UTC
'to' => $to, // date or datetime in UTC
'curEventId' => $curEventId,
'getFromHR' => true,
'checkPermissions' => false
));
$result['accessibility'] = array();
$deltaOffset = isset($params['timezone']) ? (CCalendar::GetTimezoneOffset($params['timezone']) - CCalendar::GetCurrentOffsetUTC($curUserId)) : 0;
foreach($accessibility as $userId => $entries)
{
$result['accessibility'][$userId] = array();
foreach($entries as $entry)
{
if (in_array($entry['ID'], $skipEntryList))
{
continue;
}
if (isset($entry['DT_FROM']) && !isset($entry['DATE_FROM']))
{
$result['accessibility'][$userId][] = array(
'id' => $entry['ID'],
'dateFrom' => $entry['DT_FROM'],
'dateTo' => $entry['DT_TO'],
'type' => $entry['FROM_HR'] ? 'hr' : 'event'
);
}
else
{
$fromTs = CCalendar::Timestamp($entry['DATE_FROM']);
$toTs = CCalendar::Timestamp($entry['DATE_TO']);
if ($entry['DT_SKIP_TIME'] !== "Y")
{
$fromTs -= $entry['~USER_OFFSET_FROM'];
$toTs -= $entry['~USER_OFFSET_TO'];
$fromTs += $deltaOffset;
$toTs += $deltaOffset;
}
$result['accessibility'][$userId][] = array(
'id' => $entry['ID'],
'dateFrom' => CCalendar::Date($fromTs, $entry['DT_SKIP_TIME'] != 'Y'),
'dateTo' => CCalendar::Date($toTs, $entry['DT_SKIP_TIME'] != 'Y'),
'type' => $entry['FROM_HR'] ? 'hr' : 'event'
);
}
}
}
if (isset($params['location']))
{
$location = CCalendar::ParseLocation($params['location']);
$roomEventId = intval($params['roomEventId']);
if ($roomEventId && !in_array($roomEventId, $skipEntryList))
{
$skipEntryList[] = $roomEventId;
}
if($location['mrid'])
{
$mrid = 'MR_'.$location['mrid'];
$entry = array(
'type' => 'room',
'id' => $mrid,
'name' => 'meeting room'
);
$roomList = CCalendar::GetMeetingRoomList();
foreach($roomList as $room)
{
if ($room['ID'] == $location['mrid'])
{
$entry['name'] = $room['NAME'];
$entry['url'] = $room['URL'];
break;
}
}
$result['entries'][] = $entry;
$result['accessibility'][$mrid] = array();
$meetingRoomRes = CCalendar::GetAccessibilityForMeetingRoom(array(
'allowReserveMeeting' => true,
'id' => $location['mrid'],
'from' => $from,
'to' => $to,
'curEventId' => $roomEventId
));
foreach($meetingRoomRes as $entry)
{
if (!in_array($entry['ID'], $skipEntryList))
{
$result['accessibility'][$mrid][] = array(
'id' => $entry['ID'],
'dateFrom' => $entry['DT_FROM'],
'dateTo' => $entry['DT_TO']
);
}
}
}
elseif ($location['room_id'])
{
$roomId = 'room_'.$location['room_id'];
$entry = array(
'type' => 'room',
'id' => $roomId,
'roomId' => $location['room_id'],
'name' => 'meeting room'
);
$sectionList = CCalendarLocation::getList();
foreach($sectionList as $room)
{
if ($room['ID'] == $location['room_id'])
{
$entry['name'] = $room['NAME'];
}
}
$result['entries'][] = $entry;
$result['accessibility'][$roomId] = array();
$meetingRoomRes = CCalendarLocation::getRoomAccessibility($location['room_id'], $from, $to);
foreach($meetingRoomRes as $entry)
{
if (in_array($entry['ID'], $skipEntryList))
continue;
$fromTs = CCalendar::Timestamp($entry['DATE_FROM']);
$toTs = CCalendar::Timestamp($entry['DATE_TO']);
if ($entry['DT_SKIP_TIME'] !== "Y")
{
$fromTs -= $entry['~USER_OFFSET_FROM'];
$toTs -= $entry['~USER_OFFSET_TO'];
$fromTs += $deltaOffset;
$toTs += $deltaOffset;
}
$result['accessibility'][$roomId][] = array(
'id' => $entry['ID'],
'name' => $entry['NAME'],
'dateFrom' => CCalendar::Date($fromTs, $entry['DT_SKIP_TIME'] != 'Y'),
'dateTo' => CCalendar::Date($toTs, $entry['DT_SKIP_TIME'] != 'Y')
);
}
}
}
if (!empty($resourceIdList))
{
$resEntries = CCalendarEvent::GetList(
array(
'arFilter' => array(
"FROM_LIMIT" => $from,
"TO_LIMIT" => $to,
"CAL_TYPE" => 'resource',
"ACTIVE_SECTION" => "Y",
"SECTION" => $resourceIdList
),
'parseRecursion' => true,
'setDefaultLimit' => false
)
);
foreach($resEntries as $row)
{
if (in_array($row['ID'], $skipEntryList))
continue;
$fromTs = CCalendar::Timestamp($row["DATE_FROM"]);
$toTs = CCalendar::Timestamp($row['DATE_TO']);
if ($row['DT_SKIP_TIME'] !== "Y")
{
$fromTs -= $row['~USER_OFFSET_FROM'];
$toTs -= $row['~USER_OFFSET_TO'];
$fromTs += $deltaOffset;
$toTs += $deltaOffset;
}
$result['accessibility'][$row['SECT_ID']][] = array(
'id' => $row["ID"],
'name' => $row["NAME"],
'dateFrom' => CCalendar::Date($fromTs, $row['DT_SKIP_TIME'] != 'Y'),
'dateTo' => CCalendar::Date($toTs, $row['DT_SKIP_TIME'] != 'Y')
);
}
}
return $result;
}
}
?>