• Модуль: calendar
  • Путь к файлу: ~/bitrix/modules/calendar/lib/sync/managers/vendorsynchronization.php
  • Класс: BitrixCalendarSyncManagersVendorSynchronization
  • Вызов: VendorSynchronization::updateSection
public function updateSection(Section $section, SectionContext $context): Result
{
	$mainResult = new Result();
	$result = new Result();
	$factory = $this->factory;

	if ($sectionLink = $context->getSectionConnection())
	{
		$manager = $factory->getSectionManager();
		if ($sectionLink->isActive())
		{
			try
			{
				$result = $manager->update($section, $context);
				if ($result->isSuccess())
				{
					$status = Dictionary::SYNC_STATUS['success'];
					$sectionLink->setVersionId($result->getData()['version']);
				}
				else
				{
					$status = Dictionary::SYNC_STATUS['update'];
					$mainResult->addErrors($result->getErrors());
				}
			}
			catch (NotFoundException $e)
			{
				$sectionLink->setActive(false);
				$status = Dictionary::SYNC_STATUS['inactive'];
			}

			$sectionLink
				->setLastSyncStatus($status)
				->setLastSyncDate(new CoreBaseDate());
			$this->mapperFactory->getSectionConnection()->update($sectionLink);
		}
		else
		{
			$status = Dictionary::SYNC_STATUS['inactive'];
		}
	}
	else
	{
		$status = Dictionary::SYNC_STATUS['create'];
		// TODO: think, what to do in this case. Call the creation or throw exception
	}

	$resultData = [
		$factory->getConnection()->getVendor()->getCode() => [
			'status' => $status,
		],
		'error' => $result->getData()['error'] ?? '',
	];

	return $mainResult->setData($resultData);
}