%PDF- %PDF-
| Direktori : /home/bitrix/www/bitrix/modules/calendar/classes/general/ |
| Current File : /home/bitrix/www/bitrix/modules/calendar/classes/general/calendar_location.php |
<?
use Bitrix\Main;
use Bitrix\Main\Localization\Loc;
class CCalendarLocation
{
private static
$type = 'location';
public static function enabled()
{
return true;
}
public static function getList($params = array())
{
$arFilter = array(
'CAL_TYPE' => self::$type
);
$sectionList = CCalendarSect::GetList(array('arFilter' => $arFilter));
$res = array();
foreach($sectionList as $sect)
{
$res[] = array(
'ID' => $sect['ID'],
'NAME' => $sect['NAME'],
'PERM' => $sect['PERM'],
'ACCESS' => $sect['ACCESS']
);
}
return $res;
}
public static function getById($id)
{
$arFilter = array(
'CAL_TYPE' => self::$type,
'ID' => intval($id)
);
$sectionList = CCalendarSect::GetList(array('arFilter' => $arFilter));
$res = false;
foreach($sectionList as $sect)
{
$res = array(
'ID' => $sect['ID'],
'NAME' => $sect['NAME'],
'PERM' => $sect['PERM'],
'ACCESS' => $sect['ACCESS']
);
break;
}
return $res;
}
public static function update($params = array())
{
CCalendarSect::Edit(array(
'arFields' => array(
'CAL_TYPE' => self::$type,
'ID' => $params['id'],
'NAME' => $params['name'],
'ACCESS' => array()
)
));
}
public static function getRoomAccessibility($roomId, $from, $to, $params = array())
{
if (!isset($params['checkPermissions']))
{
$params['checkPermissions'] = true;
}
$accessibility = array();
$roomEntries = CCalendarEvent::GetList(
array(
'arFilter' => array(
"FROM_LIMIT" => $from,
"TO_LIMIT" => $to,
"CAL_TYPE" => self::$type,
"ACTIVE_SECTION" => "Y",
"SECTION" => $roomId
),
'parseRecursion' => true,
'fetchSection' => true,
'setDefaultLimit' => false
)
);
foreach($roomEntries as $roomEntry)
{
$accessibility[] = array(
"ID" => $roomEntry["ID"],
"NAME" => $roomEntry["NAME"],
"DATE_FROM" => $roomEntry["DATE_FROM"],
"DATE_TO" => $roomEntry["DATE_TO"],
"~USER_OFFSET_FROM" => $roomEntry["~USER_OFFSET_FROM"],
"~USER_OFFSET_TO" => $roomEntry["~USER_OFFSET_TO"],
"DT_SKIP_TIME" => $roomEntry["DT_SKIP_TIME"],
"TZ_FROM" => $roomEntry["TZ_FROM"],
"TZ_TO" => $roomEntry["TZ_TO"],
"ACCESSIBILITY" => $roomEntry["ACCESSIBILITY"],
"IMPORTANCE" => $roomEntry["IMPORTANCE"],
"EVENT_TYPE" => $roomEntry["EVENT_TYPE"]
);
}
return $accessibility;
}
public static function delete($id)
{
CCalendarSect::Delete($id);
}
public static function clearCache($params = array())
{
CCalendar::ClearCache(array('section_list'));
}
public static function releaseRoom($params = array())
{
return CCalendar::DeleteEvent(intVal($params['room_event_id']), false);
}
public static function reserveRoom($params = array())
{
$roomEventId = CCalendarEvent::Edit(array(
'arFields' => array(
'ID' => $params['room_event_id'],
'CAL_TYPE' => self::$type,
'SECTIONS' => $params['room_id'],
'DATE_FROM' => $params['parentParams']['arFields']['DATE_FROM'],
'DATE_TO' => $params['parentParams']['arFields']['DATE_TO'],
'TZ_FROM' => $params['parentParams']['arFields']['TZ_FROM'],
'TZ_TO' => $params['parentParams']['arFields']['TZ_TO'],
'SKIP_TIME' => $params['parentParams']['arFields']['SKIP_TIME'],
'NAME' => Loc::getMessage('EC_EDEV_EVENT').': '.$params['parentParams']['arFields']['NAME'],
'RRULE' => $params['parentParams']['arFields']['RRULE']
)
));
return $roomEventId;
}
public static function checkAccessibility($location = '', $params = array())
{
$location = CCalendar::ParseLocation($location);
$res = true;
if ($location['room_id'] || $location['mrid'])
{
$fromTs = CCalendar::Timestamp($params['fields']["DATE_FROM"]);
$toTs = CCalendar::Timestamp($params['fields']["DATE_TO"]);
$from = CCalendar::Date($fromTs, false);
$to = CCalendar::Date($fromTs, false);
$curUserId = CCalendar::GetCurUserId();
$deltaOffset = isset($params['timezone']) ? (CCalendar::GetTimezoneOffset($params['timezone']) - CCalendar::GetCurrentOffsetUTC($curUserId)) : 0;
if($location['mrid'])
{
$meetingRoomRes = CCalendar::GetAccessibilityForMeetingRoom(array(
'allowReserveMeeting' => true,
'id' => $location['mrid'],
'from' => CCalendar::Date($fromTs - CCalendar::DAY_LENGTH, false),
'to' => CCalendar::Date($toTs + CCalendar::DAY_LENGTH, false),
'curEventId' => $location['mrevid']
));
foreach($meetingRoomRes as $entry)
{
if ($entry['ID'] != $location['mrevid'])
{
$entryfromTs = CCalendar::Timestamp($entry['DT_FROM']);
$entrytoTs = CCalendar::Timestamp($entry['DT_TO']);
if ($entryfromTs < $toTs && $entrytoTs > $fromTs)
{
$res = false;
break;
}
}
}
}
elseif ($location['room_id'])
{
$entries = CCalendarLocation::getRoomAccessibility($location['room_id'], $from, $to);
foreach($entries as $entry)
{
if ($entry['ID'] != $location['room_event_id'])
{
$entryfromTs = CCalendar::Timestamp($entry['DATE_FROM']);
$entrytoTs = CCalendar::Timestamp($entry['DATE_TO']);
if($entry['DT_SKIP_TIME'] !== "Y")
{
$entryfromTs -= $entry['~USER_OFFSET_FROM'];
$entrytoTs -= $entry['~USER_OFFSET_TO'];
$entryfromTs += $deltaOffset;
$entrytoTs += $deltaOffset;
}
if ($entryfromTs < $toTs && $entrytoTs > $fromTs)
{
$res = false;
break;
}
}
}
}
}
return $res;
}
}
?>