2namespace Bitrix\Calendar;
4use Bitrix\Calendar\Core\Event\Tools\Dictionary;
5use Bitrix\Calendar\Integration\Pull\PushCommand;
7use Bitrix\Main\Web\Json;
11 private static array $settings = [
13 'CalendarSelCont' =>
false,
14 'SPCalendarSelCont' =>
false,
15 'meetSection' =>
false,
16 'crmSection' =>
false,
17 'showDeclined' =>
false,
18 'denyBusyInvitation' =>
false,
19 'collapseOffHours' =>
'Y',
20 'showWeekNumbers' =>
'N',
23 'showCompletedTasks' =>
'N',
24 'lastUsedSection' =>
false,
25 'sendFromEmail' =>
false,
26 'defaultSections' => [],
27 'syncPeriodPast' => 3,
28 'syncPeriodFuture' => 12,
29 'defaultReminders' => [
31 'type' =>
'daybefore',
45 private static array $serializedSettings = [
50 public static function set($settings = [],
$userId =
false): void
54 $userId = \CCalendar::getUserId();
61 if ($settings ===
false)
63 \CUserOptions::setOption(
"calendar",
"user_settings",
false,
false,
$userId);
65 elseif (is_array($settings))
72 if (is_array($value) && in_array(
$optionName, self::$serializedSettings,
true))
82 \CUserOptions::setOption(
"calendar",
"user_settings", $curSet,
false,
$userId);
90 $userId = \CCalendar::getUserId();
93 $resSettings = self::$settings;
97 $settings = \CUserOptions::getOption(
"calendar",
"user_settings",
false,
$userId);
98 if (is_array($settings))
102 if (!is_array($value) && in_array(
$optionName, self::$serializedSettings,
true))
113 $resSettings[
'timezoneName'] = \CCalendar::getUserTimezoneName(
$userId);
114 $resSettings[
'timezoneOffsetUTC'] = \CCalendar::getCurrentOffsetUTC(
$userId);
115 $resSettings[
'timezoneDefaultName'] =
'';
117 if (isset($settings[
'denyBusyInvitation']))
119 $resSettings[
'denyBusyInvitation'] = (bool)$settings[
'denyBusyInvitation'];
122 if (isset($settings[
'showDeclined']))
124 $resSettings[
'showDeclined'] = (bool)$settings[
'showDeclined'];
129 if (!$resSettings[
'timezoneName'])
131 $resSettings[
'timezoneDefaultName'] = \CCalendar::getGoodTimezoneForOffset($resSettings[
'timezoneOffsetUTC']);
134 $workTime = \CUserOptions::getOption(
"calendar",
"workTime",
false,
$userId);
137 $resSettings[
'work_time_start'] = $workTime[
'start'].
'.00';
138 $resSettings[
'work_time_end'] = $workTime[
'end'].
'.00';
149 $userId = \CCalendar::getUserId();
152 $defaultPinnedFields = [
'location',
'rrule',
'section'];
153 if ($entryType === Dictionary::CALENDAR_TYPE[
'open_event'])
155 $pinnedFields = [...$defaultPinnedFields,
'description'];
159 $pinnedFields = $defaultPinnedFields;
163 'pinnedFields' => implode(
',', $pinnedFields),
171 $userOptionName = $entryType ? sprintf(
'%s-%s', $formType, $entryType) : $formType;
172 $settings = \CUserOptions::getOption(
"calendar", $userOptionName,
$defaultValues[$formType],
$userId);
173 if (!is_array($settings[
'pinnedFields']))
175 $settings[
'pinnedFields'] = explode(
',', $settings[
'pinnedFields']);
184 $userId = \CCalendar::getUserId();
188 $str = \CUserOptions::getOption(
"calendar",
"superpose_tracking_users",
false,
$userId);
192 $ids = unserialize(
$str, [
'allowed_classes' =>
false]);
193 if (is_array($ids) &&
count($ids) > 0)
209 if (isset(
$params[
'userList']))
213 if (
count($diff) > 0)
222 'filter' => [
'ID' =>
$res],
223 'select' => [
'ID',
'LOGIN',
'NAME',
'LAST_NAME',
'SECOND_NAME']
230 $user[
'FORMATTED_NAME'] = \CCalendar::GetUserName(
$user);
231 $trackedUsers[] =
$user;
234 return $trackedUsers;
241 $userId = \CCalendar::getUserId();
244 if (!is_array($value))
248 array_walk($value,
'intval');
249 $value = array_unique($value);
251 \CUserOptions::setOption(
"calendar",
"superpose_tracking_users", serialize($value),
false,
$userId);
257 if (class_exists(
'CUserOptions') &&
$userId > 0)
259 $optionName = (
$options[
'isPersonalCalendarContext'] ??
null) ?
'hidden_sections' :
'hidden_sections_'.$options[
'type'];
267 if (
$res ===
false && isset(
$options[
'defaultHiddenSections']) && is_array(
$options[
'defaultHiddenSections']))
274 $res = array_values(array_unique(array_filter(
$res,
function(
$k) {
275 return $k ===
'tasks' || is_numeric(
$k);
296 $str = \CUserOptions::getOption(
"calendar",
"section_customization",
false,
$userId);
299 $result = unserialize(
$str, [
'allowed_classes' =>
false]);
311 if (isset($sectionCustomization[$sectionId]) &&
$config ===
false)
313 unset($sectionCustomization[$sectionId]);
317 $sectionCustomization[$sectionId] =
$config;
321 \CUserOptions::setOption(
"calendar",
"section_customization", serialize($sectionCustomization),
false,
$userId);
324 PushCommand::ChangeSectionCustomization,
335 $defaultFollowedSectionId = (int)\CUserOptions::GetOption(
336 "calendar",
"superpose_displayed_default", 0,
$userId
338 if ($defaultFollowedSectionId)
340 $sectionIdList[] = $defaultFollowedSectionId;
343 $str = \CUserOptions::GetOption(
"calendar",
"superpose_displayed",
false,
$userId);
346 $idList = unserialize(
$str, [
'allowed_classes' =>
false]);
347 if (is_array($idList))
349 foreach($idList as $id)
353 $sectionIdList[] = (int)$id;
359 if ($defaultFollowedSectionId)
361 \CUserOptions::SetOption(
"calendar",
"superpose_displayed", serialize($sectionIdList));
362 \CUserOptions::SetOption(
"calendar",
"superpose_displayed_default",
false);
365 return $sectionIdList;
if(!is_object($USER)||! $USER->IsAuthorized()) $userId
static getFormSettings($formType, $userId=false, ?string $entryType=null)
static getFollowedSectionIdList($userId=false)
static getSectionCustomization($userId=false)
static setTrackingUsers($userId=false, $value=[])
static saveHiddenSections(int $userId, array $sections, string $optionName='hidden_sections')
static setSectionCustomization($userId=false, $data=[])
static getHiddenSections($userId=false, $options=[])
static getTrackingUsers($userId=false, $params=[])
static addPullEvent(PushCommand $command, int $userId, array $params=[])
static getList(array $parameters=array())
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
CheckSerializedData($str, $max_depth=200)
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
</p ></td >< td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 2.0pt 0cm 2.0pt;height:9.0pt'>< p class=Normal align=center style='margin:0cm;margin-bottom:.0001pt;text-align:center;line-height:normal'>< a name=ТекстовоеПоле54 ></a ><?=($taxRate > count( $arTaxList) > 0) ? $taxRate."%"
if($inWords) echo htmlspecialcharsbx(Number2Word_Rus(roundEx($totalVatSum $params['CURRENCY']