public static function SPRegisterUpdatedItem($arFields) { if (CBXFeatures::IsFeatureEnabled('intranet_sharepoint')) { if (CIntranetSharepoint::$bUpdateInProgress) { return; } $dbRes = CIntranetSharepoint::GetByID($arFields['IBLOCK_ID']); if ($arRes = $dbRes->Fetch()) { CIntranetSharepoint::AddToUpdateLog($arFields); } } }
protected static function CheckFields($action, &$arFields) { global $APPLICATION; if ($arFields['IBLOCK_ID'] = intval($arFields['IBLOCK_ID'])) { $dbRes = CIntranetSharepoint::GetByID($arFields['IBLOCK_ID']); if (!($arRes = $dbRes->Fetch())) { $APPLICATION->ThrowException(GetMessage('ISPQ_ERROR_SERVICE_NOT_REGISTERED', array('ID' => $arFields['IBLOCK_ID']))); return false; } } if (strlen($arFields['SP_METHOD']) <= 0) { $APPLICATION->ThrowException(GetMessage('ISPQ_ERROR_NO_METHOD')); return false; } $arFields['SP_METHOD'] = trim($arFields['SP_METHOD']); return true; }
public static function UpdateItems($arRows) { list(, $row) = each($arRows); $IBLOCK_ID = $row['IBLOCK_ID']; $PRIORITY = $row['PRIORITY']; $dbRes = CIntranetSharepoint::GetByID($IBLOCK_ID, true); if ($arService = $dbRes->Fetch()) { if (!self::CheckService($arService, 'UpdateListItems')) { return false; } $arIDs = array(); $arSelect = array('ID', 'XML_ID'); foreach ($arRows as $row) { $arIDs[] = $row['ELEMENT_ID']; } foreach ($arService['FIELDS'] as $fld) { $arSelect[] = $fld['FIELD_ID']; } $dbRes = CIBlockElement::GetList(array(), array('IBLOCK_ID' => $IBLOCK_ID, 'ID' => $arIDs), false, false, $arSelect); $arChanges = array(); $arChangesIDs = array(); while ($obItem = $dbRes->GetNextElement()) { $arItem = $obItem->GetFields(); $arProp = $obItem->GetProperties(); $arChange = array(); foreach ($arService['FIELDS'] as $fld) { if (substr($fld['FIELD_ID'], 0, 9) === 'PROPERTY_') { $fld['FIELD_ID'] .= '_VALUE'; } if ($val = self::_UpdateGetValueByType($arItem[$fld['FIELD_ID']], $fld['SP_FIELD_TYPE'])) { $arChange[$fld['SP_FIELD']] = $val; } } if ($arItem['XML_ID'] && $arItem['XML_ID'] != $arItem['ID']) { $arChangesIDs[] = $arItem['XML_ID']; $arChange['UniqueId'] = $arItem['XML_ID']; $arChange['ID'] = intval($arItem['XML_ID']); } foreach ($arProp as $prop) { if ($prop['CODE'] == 'OWSHIDDENVERSION') { $arChange['owshiddenversion'] = $prop['VALUE']; $arChange['Metainfo_vti_versionhistory'] = md5($prop['VALUE'] . '|' . $arItem['XML_ID']) . ':' . $prop['VALUE']; } } $arItemsMap = array(); if (!$arChange['UniqueId']) { $arChange['ReplicationID'] = CIntranetUtils::makeGUID(md5($arItem['ID'])); $arChanges[$arChange['ReplicationID']] = $arChange; $arItemsMap[$arChange['ReplicationID']] = $arItem['ID']; } else { $arChanges[$arChange['ID']] = $arChange; $arItemsMap[$arChange['ID']] = $arItem['ID']; } } $handler = new $arService['HANDLER_CLASS']($arService['SP_URL']); $RESULT = $handler->GetByID(CIntranetUtils::makeGUID($arService['SP_LIST_ID']), $arChangesIDs); if (count($RESULT) > 0) { foreach ($RESULT as $sp_row) { foreach ($sp_row as $fld => $val) { if (!isset($arChanges[$sp_row['ID']][$fld])) { $arChanges[$sp_row['ID']][$fld] = $val; } } } } $arSecondQuery = array(); $arQueue = array(); CIntranetSharepoint::$bUpdateInProgress = true; if ($RESULT = $handler->UpdateListItems(CIntranetUtils::makeGUID($arService['SP_LIST_ID']), $arChanges)) { foreach ($RESULT as $res) { $ID = 0; $arUpdateFields = array(); $arUpdateProps = array(); // version conflict if ($res['ErrorCode'] == '0x81020015') { if ($PRIORITY == 'B') { $new_version = $res['Row']['owshiddenversion']; $arChange = $arChanges[$res['Row']['ID']]; $arChange['owshiddenversion'] = $new_version; $arSecondQuery[] = $arChange; $arUpdateProps['OWSHIDDENVERSION'] = $new_version; $ID = $arItemsMap[$res['Row']['ID']]; } else { self::_Sync($arService, $res['Row'], $arQueue); } } if ($res['Row']['MetaInfo_ReplicationID']) { $arUpdateFields['XML_ID'] = $res['Row']['UniqueId']; $arUpdateProps['OWSHIDDENVERSION'] = $res['Row']['owshiddenversion']; $ID = $arItemsMap[$res['Row']['MetaInfo_ReplicationID']]; } if ($ID > 0) { if (count($arUpdateFields) > 0) { $ob = new CIBlockElement(); $ob->Update($ID, $arUpdateFields); } if (count($arUpdateProps) > 0) { CIBlockElement::SetPropertyValuesEx($ID, false, $arUpdateProps); } } } if (count($arSecondQuery)) { $handler->UpdateListItems(CIntranetUtils::makeGUID($arService['SP_LIST_ID']), $arSecondQuery); } } CIntranetSharepoint::$bUpdateInProgress = false; return true; } return false; }
$STEP = 1; } if ($STEP < 1) { $this->IncludeComponentTemplate('form_server'); } elseif ($STEP < 2) { $this->IncludeComponentTemplate('form_error'); } elseif ($STEP < 3) { $this->IncludeComponentTemplate('form_lists'); } elseif ($STEP < 4) { $this->IncludeComponentTemplate('form_list'); } elseif ($STEP >= 4) { $this->IncludeComponentTemplate('form_finish'); } break; case 'info': $dbRes = CIntranetSharepoint::GetByID($arParams['IBLOCK_ID'], true); if ($arResult['SERVICE'] = $dbRes->Fetch()) { $arResult['TYPES'] = CIntranetSharepoint::GetTypes($arResult['SERVICE']['IBLOCK_ID']); $this->IncludeComponentTemplate('settings'); } break; case 'sync': if (!check_bitrix_sessid()) { return; } set_time_limit(300); if ($_REQUEST['full']) { CIntranetSharepoint::ClearSyncData($arParams['IBLOCK_ID']); } if (!$_REQUEST['sync_action']) { if (!($arResult['RESULT'] = CIntranetSharepoint::RequestItemsNext($arParams['IBLOCK_ID'], array('SYNC_NUM_ROWS' => BX_INTRANET_SP_NUM_ROWS_MANUAL)))) {