3namespace Bitrix\Calendar\Sharing\Link\Rule;
5use Bitrix\Calendar\Internals\SharingLinkRuleTable;
6use Bitrix\Calendar\Internals\SharingObjectRuleTable;
8use Bitrix\Main\Localization\Loc;
24 $slotSize = $rule->getSlotSize() ?? self::DEFAULT_SLOT_SIZE;
28 foreach ($ranges as $range)
30 $weekdays = $range->getWeekdays() ?? $this->
getWorkdays();
34 'weekdays' => $weekdays,
38 if (empty($rangeArrays))
45 'weekdays' => $weekdays,
52 'slotSize' => $slotSize,
53 'ranges' => $rangeArrays,
59 $slotSize = $ruleArray[
'slotSize'] ?? self::DEFAULT_SLOT_SIZE;
61 $rangeArrays = $ruleArray[
'ranges'] ?? [];
63 foreach ($rangeArrays as $rangeArray)
68 is_array($rangeArray[
'weekdays'] ??
null)
69 ? $rangeArray[
'weekdays']
72 $ranges[] = (
new Range())
75 ->setWeekdays($weekdays);
88 ->setSlotSize($slotSize)
94 $ruleEOCollection =
null;
101 if ($ruleEOCollection ===
null || empty($ruleEOCollection->getAll()))
113 ->where(
'LINK_ID', $linkId)
114 ->exec()->fetchCollection();
121 ->where(
'OBJECT_ID', $objectId)
122 ->where(
'OBJECT_TYPE', $objectType)
123 ->exec()->fetchCollection();
128 if (!empty($ruleEOCollection->getAll()))
130 $slotSize = $ruleEOCollection->getAll()[0]->getSlotSize();
131 $ranges = array_map(
static fn($ruleEO) => (
new Range())
132 ->setWeekdays(array_map(
'intval', explode(
',', $ruleEO->getWeekdays())))
133 ->setFrom($ruleEO->getTimeFrom())
134 ->setTo($ruleEO->getTimeTo())
135 , $ruleEOCollection->getAll());
138 ->setSlotSize($slotSize)
143 $slotSize = self::DEFAULT_SLOT_SIZE;
152 ->setSlotSize($slotSize)
158 $rows = array_map(
static fn($range) => [
159 'LINK_ID' => $linkObjectRule->
getLinkId(),
161 'WEEKDAYS' => implode(
',', $range->getWeekdays()),
162 'TIME_FROM' => $range->getFrom(),
163 'TIME_TO' => $range->getTo(),
165 SharingLinkRuleTable::deleteByFilter([
166 'LINK_ID' => $linkObjectRule->
getLinkId(),
170 $rows = array_map(
static fn($range) => [
174 'WEEKDAYS' => implode(
',', $range->getWeekdays()),
175 'TIME_FROM' => $range->getFrom(),
176 'TIME_TO' => $range->getTo(),
178 SharingObjectRuleTable::deleteByFilter([
187 SharingLinkRuleTable::deleteByFilter([
188 'LINK_ID' => $linkId,
199 'customLength' =>
'N',
202 if ($defaultRule[
'slotSize'] !== $ruleArray[
'slotSize'])
204 $changes[
'customLength'] =
'Y';
207 if ($defaultRule[
'ranges'] !== $ruleArray[
'ranges'])
209 $changes[
'customDays'] =
'Y';
218 if (!isset(
$settings[
'work_time_start']))
220 return self::DEFAULT_FROM;
231 return self::DEFAULT_TO;
239 $time = strtotime(str_replace(
'.',
':',
"$timeString:00"));
240 return (
int)date(
'H',
$time) * 60 + (int)date(
'i',
$time);
264 if ($weekdaysWeight1 !== $weekdaysWeight2)
266 return $weekdaysWeight1 - $weekdaysWeight2;
284 $mappedWeekdays = array_map(
static fn($w) => $w < $weekStart ? $w + 10 : $w, $weekdays);
285 sort($mappedWeekdays);
288 foreach ($mappedWeekdays as $index => $w)
290 $weight += $w * 10 ** (10 - $index);
305 if (implode(
',', $weekdays) === implode(
',', $workdays))
307 return Loc::getMessage(
'CALENDAR_SHARING_WORKDAYS_MSGVER_1');
320 $weekdays = array_map(
static fn($weekday) => $weekdaysLoc[$weekday], $this->
getSortedWeekdays($weekdays));
322 return implode(
', ', $weekdays);
332 $mappedWeekdays = array_map(
static fn($w) => $w < $weekStart ? $w + 10 : $w, $weekdays);
333 usort($mappedWeekdays,
static fn(
$a, $b) =>
$a - $b);
335 return array_map(
static fn($w) => $w % 10, $mappedWeekdays);
346 return self::DEFAULT_WORKDAYS;
349 $holidays = array_map(
static function(
string $weekday) {
350 return \CCalendar::IndByWeekDay($weekday);
353 return array_values(array_diff([0, 1, 2, 3, 4, 5, 6], $holidays));
361 $weekStart = \CCalendar::GetWeekStart();
363 return \CCalendar::IndByWeekDay($weekStart);
371 $dayLength = 60 * 60 * 24;
374 $sunday = $now - $dayOfWeek * $dayLength;
375 $weekdays = [0, 1, 2, 3, 4, 5, 6];
377 return array_map(
static fn($weekday) =>
FormatDate(
'D', $sunday + $weekday * $dayLength), $weekdays);
convertToObject($objectEO)
buildRuleFromArray(array $ruleArray)
getWeekdaysTitle(array $weekdays)
convertToObject($ruleEOCollection)
getRuleEOByLinkId(int $linkId)
getFromLinkObjectRule(LinkObjectRule $objectRule)
getSortedRanges(array $ranges)
getSortedWeekdays(array $weekdays)
convertToArray(?Rule $rule=null)
getRuleEOByObject(int $objectId, string $objectType)
formatWeekdays(array $weekdays)
deleteLinkRule(int $linkId)
getWeekdaysWeight(array $weekdays)
compareRanges(Range $range1, Range $range2)
getMinutesFromTimeString(string $timeString)
saveForLinkObject(Rule $rule, LinkObjectRule $linkObjectRule)
static addMulti($rows, $ignoreEvents=false)
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
FormatDate($format="", $timestamp=false, $now=false, ?string $languageId=null)