protected function prepareDatasetRecords4Submission(DataControllerCallContext $callcontext, $request) { $preparedRecords = NULL; $datasetName = $request->getDatasetName(); $isOperationInsert = $request->getOperationName() == DatasetInsertRequest::$OPERATION__INSERT; $isOperationDelete = $request->getOperationName() == DatasetDeleteRequest::$OPERATION__DELETE; $recordMetaData = $request->recordsHolder->recordMetaData; $keyColumn = $recordMetaData->findKeyColumn(); $keyColumnName = isset($keyColumn) ? $keyColumn->name : NULL; $documentIds = NULL; if ($request->recordsHolder instanceof IndexedRecordsHolder) { $columnCount = $recordMetaData->getColumnCount(); foreach ($request->recordsHolder->records as $record) { $preparedRecord = NULL; for ($i = 0; $i < $columnCount; $i++) { $column = $recordMetaData->columns[$i]; $columnValue = $record[$i]; if (isset($columnValue)) { $preparedRecord->{$column->name} = $columnValue; } } // preparing document identifier if (!isset($preparedRecord->_id) && isset($keyColumnName)) { $preparedRecord->_id = $preparedRecord->$keyColumnName; } // collecting document identifiers to load last revisions if (!$isOperationInsert) { if (isset($preparedRecord->_id)) { $documentIds[] = $preparedRecord->_id; } else { LogHelper::log_error($preparedRecord); throw new IllegalArgumentException(t('Could not find document identifier for the document')); } } $preparedRecords[] = $preparedRecord; } } else { foreach ($request->recordsHolder->records as $record) { // preparing document identifier if (!isset($record->_id) && isset($keyColumnName)) { $record->_id = $record->$keyColumnName; } // collecting document identifiers to load last revisions if (!$isOperationInsert) { if (isset($record->_id)) { $documentIds[] = $record->_id; } else { LogHelper::log_error($record); throw new IllegalArgumentException(t('Could not find document identifier for the document')); } } $preparedRecords[] = $record; } } if (!$isOperationInsert) { // loading previous revisions $revisions = NULL; if (isset($documentIds)) { $revisionRequest = new DatasetQueryRequest($datasetName); $revisionRequest->addQueryValues(0, '_id', $documentIds); $revisionResponse = $this->queryDataset($callcontext, $revisionRequest, NULL); if (isset($revisionResponse)) { foreach ($revisionResponse as $revision) { $revisions[$revision->_id] = $revision->_rev; } } } foreach ($preparedRecords as $record) { // setting revision if ((isset($revisions) && isset($revisions[$record->_id]))) { $record->_rev = $revisions[$record->_id]; } else { throw new IllegalArgumentException(t( 'Could not find last revision for the document: @id', array('@id' => $record->_id))); } if ($isOperationDelete) { $record->_deleted = TRUE; } } } return $preparedRecords; }