• Модуль: calendar
  • Путь к файлу: ~/bitrix/modules/calendar/classes/general/calendar.php
  • Класс: CCalendar
  • Вызов: CCalendar::SetSettings
static function SetSettings($settings = [], $clearOptions = false)
{
	$arPathes = self::GetPathesList();
	$optionNames = [
		'work_time_start',
		'work_time_end',
		'year_holidays',
		'year_workdays',
		'week_holidays',
		'week_start',
		'user_name_template',
		'sync_by_push',
		'user_show_login',
		'rm_iblock_type',
		'rm_iblock_id',
		'denied_superpose_types',
		'pathes_for_sites',
		'pathes',
		'dep_manager_sub',
		'forum_id',
		'rm_for_sites',
	];

	$optionNames = array_merge($optionNames, $arPathes);
	if (isset($settings['rm_iblock_ids']) && !$settings['rm_for_sites'])
	{
		foreach($settings['rm_iblock_ids'] as $site => $value)
		{
			COption::SetOptionString("calendar", 'rm_iblock_id', $value, false, $site);
		}
	}

	foreach($optionNames as $opt)
	{
		if ($clearOptions)
		{
			COption::RemoveOption("calendar", $opt);
		}
		else if (isset($settings[$opt]))
		{
			if ($opt === 'rm_iblock_id' && !$settings['rm_for_sites'])
			{
				continue;
			}

			if ($opt === 'sync_by_push')
			{
				if (self::isOffice365ApiEnabled() || self::isGoogleApiEnabled())
				{
					CAgent::RemoveAgent("\Bitrix\Calendar\Sync\Managers\DataExchangeManager::importAgent();", 'calendar');
					CAgent::RemoveAgent("\Bitrix\Calendar\Sync\Managers\PushWatchingManager::renewWatchChannels();", 'calendar');

					if ($settings[$opt])
					{
						// legacy
						CAgent::RemoveAgent(
							"\Bitrix\Calendar\Sync\GoogleApiPush::clearPushChannels();",
							"calendar"
						);
						// actual
						CAgent::AddAgent(
							"\Bitrix\Calendar\Sync\Managers\PushWatchingManager::renewWatchChannels();",
							'calendar',
							'N',
							3600
						);
					}
					else
					{
						global $DB;
						// legacy
						CAgent::RemoveAgent("\Bitrix\Calendar\Sync\GoogleApiPush::processPush();", "calendar");
						CAgent::RemoveAgent("\Bitrix\Calendar\Sync\GoogleApiPush::renewWatchChannels();", "calendar");
						$DB->Query("DELETE FROM b_agent WHERE `NAME` LIKE '%GoogleApiPush::checkPushChannel%'");
						// actual
						CAgent::AddAgent(
							"\Bitrix\Calendar\Sync\Managers\DataExchangeManager::importAgent();",
							'calendar',
							'N',
							180
						);
					}
				}
			}

			if ($opt === 'pathes' && is_array($settings[$opt]))
			{
				$sitesPathes = $settings[$opt];

				$ar = [];
				$arAffectedSites = [];
				foreach($sitesPathes as $s => $pathes)
				{
					$affect = false;
					foreach($arPathes as $path)
					{
						if ($pathes[$path] != $settings[$path])
						{
							$ar[$path] = $pathes[$path] ?? $settings[$path];
							$affect = true;
						}
					}

					if ($affect && !in_array($s, $arAffectedSites))
					{
						$arAffectedSites[] = $s;
						COption::SetOptionString("calendar", 'pathes_'.$s, serialize($ar));
					}
					else
					{
						COption::RemoveOption("calendar", 'pathes_'.$s);
					}
				}
				COption::SetOptionString("calendar", 'pathes_sites', serialize($arAffectedSites));
				continue;
			}

			else if ($opt === 'denied_superpose_types' && is_array($settings[$opt]))
			{
				$settings[$opt] = serialize($settings[$opt]);
			}

			else if ($opt === 'week_holidays' && is_array($settings[$opt]))
			{
				$settings[$opt] = implode(
					'|',
					array_intersect(array_unique($settings[$opt]), ['SU','MO','TU','WE','TH','FR','SA'])
				);
			}

			COption::SetOptionString("calendar", $opt, $settings[$opt]);
		}
	}
}