• Модуль: intranet
  • Путь к файлу: ~/bitrix/modules/intranet/classes/general/sharepoint.php
  • Класс: CAllIntranetSharepoint
  • Вызов: CAllIntranetSharepoint::_Sync
static function _Sync($arService, $row, &$arQueue)
{
	$IBLOCK_ID = $arService['IBLOCK_ID'];

	if (!is_array($arQueue)) $arQueue = array();

	$arFields = array(
		'IBLOCK_ID' => $IBLOCK_ID,
		'XML_ID' => $row['UniqueId'],
	);

	$arProperties = array();

	foreach ($arService['FIELDS'] as $fld)
	{
		$arValue = self::_SyncGetValueByType(array(
			'FIELD' => $fld,
			'VALUE' => $row[$fld['SP_FIELD']],
			'ROW' => $row,
			'SP_LIST_ID' => $arService['SP_LIST_ID'],
		), $arQueue);

		if (null !== $arValue['VALUE'])
		{
			if ($arValue['PROPERTY'])
				$arProperties[$arValue['PROPERTY']] = $arValue['VALUE'];
			else
				$arFields[$arValue['FIELD']] = $arValue['VALUE'];
		}
	}

	$ib = new CIBlockElement();
	$dbRes = CIBlockElement::GetList(array('id' => 'asc'), array('IBLOCK_ID' => $IBLOCK_ID, 'XML_ID' => $arFields['XML_ID'], "CHECK_PERMISSIONS" => "N"), false, false, array('ID'));

	CIntranetSharepoint::$bUpdateInProgress = true;

	$bVersionConflict = false;
	if ($arRes = $dbRes->Fetch())
	{
		$bNew = false;

		if (false && $arService['PRIORITY'] == 'B')
		{
			if ($version = CIntranetSharepointLog::ItemUpdated($IBLOCK_ID, $arRes['ID']))
			{
				if ($row['owshiddenversion'] > $version) // ?????? rly?
				{
					$bVersionConflict = true; // we won't allow changes from SP until pushing our changes onto it.
					$ID = false;
				}
			}
		}

		$arProperties['OWSHIDDENVERSION'] = intval($row['owshiddenversion']);

		if (!$bVersionConflict)
		{
			$ib->Update(($ID = $arRes['ID']), $arFields);

			CIntranetSharepointLog::ItemUpdatedClear($IBLOCK_ID, $ID);
		}
	}
	else
	{
		$bNew = true;
		$ID = $ib->Add($arFields);
	}

	CIntranetSharepoint::$bUpdateInProgress = false;

	if (!$ID)
	{
		if (!$bVersionConflict)
		{
			$GLOBALS['APPLICATION']->ThrowException($ib->LAST_ERROR);
		}
	}
	else
	{
		if (count($arProperties) > 0)
			CIBlockElement::SetPropertyValuesEx($ID, $IBLOCK_ID, $arProperties, $bNew ? array('NewElement' => true) : array());
	}

	return $ID;
}