public function applySnapshot($data, $dbVersion = null) { $iblockData = $this->handleNullValues($data['iblock']); $typeData = $this->handleNullValues($data['type']); $res = new ApplyResult(); $type = new \CIBlockType(); if (!\CIBlockType::GetByID($typeData['ID'])->Fetch()) { $res->setSuccess($type->Add($typeData)); } else { $res->setSuccess($type->Update($typeData['ID'], $typeData)); } if (!$res->isSuccess()) { return $res->setMessage($type->LAST_ERROR); } $extId = $iblockData['ID']; if ($dbVersion) { $id = $this->getCurrentVersionId($extId, $dbVersion); } else { $id = $extId; } if (!$dbVersion && !IblockTable::getById($id)->fetch()) { $addRes = IblockTable::add(array('ID' => $id, 'IBLOCK_TYPE_ID' => $typeData['ID'], 'NAME' => 'add')); if (!$addRes->isSuccess()) { throw new \Exception('add iblock error ' . implode(', ', $addRes->getErrorMessages())); } } $iblock = new \CIBlock(); if ($id && ($currentData = IblockTable::getById($id)->fetch())) { $iblockData['PICTURE'] = $currentData['PICTURE']; $res->setSuccess((bool) $iblock->Update($id, $iblockData)); } else { unset($iblockData['PICTURE']); $res->setSuccess((bool) ($id = $iblock->Add($iblockData))); $this->registerCurrentVersionId($id, $this->getReferenceValue($extId, $dbVersion)); } $res->setId($id); return $res->setMessage($iblock->LAST_ERROR); }