Exemple #1
0
 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;
 }
Exemple #3
0
 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;
 }
Exemple #4
0
         $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)))) {