diff --git a/field_collection_uuid/controllers/UUIDFieldCollectionItemEntity.inc b/field_collection_uuid/controllers/UUIDFieldCollectionItemEntity.inc new file mode 100644 index 0000000..21f6380 --- /dev/null +++ b/field_collection_uuid/controllers/UUIDFieldCollectionItemEntity.inc @@ -0,0 +1,31 @@ +hostEntity)) { + // If we have a host entity save normally. + parent::save($skip_host_save); + } + else { + // If there is no host entity, we may be receiving it from deploy. + // so save the item directly. + entity_get_controller($this->entityType)->save($this); + } + } + +} diff --git a/field_collection_uuid/field_collection_uuid.info b/field_collection_uuid/field_collection_uuid.info new file mode 100644 index 0000000..c39834a --- /dev/null +++ b/field_collection_uuid/field_collection_uuid.info @@ -0,0 +1,6 @@ +name = Field Collection UUID +core = 7.x +package = Fields +dependencies[] = field_collection +dependencies[] = uuid +files[] = controllers/UUIDFieldCollectionItemEntity.inc diff --git a/field_collection_uuid/field_collection_uuid.install b/field_collection_uuid/field_collection_uuid.install new file mode 100644 index 0000000..7053cb5 --- /dev/null +++ b/field_collection_uuid/field_collection_uuid.install @@ -0,0 +1,47 @@ +revision_id; + } +} + +/** + * Implements hook_entity_info_alter(). + */ +function field_collection_uuid_entity_info_alter(&$entity_info) { + // Set the properties bellow for field collection entity so UUIDs get + // created on sync. + $entity_info['field_collection_item']['uuid'] = TRUE; + $entity_info['field_collection_item']['entity keys']['uuid'] = 'uuid'; + $entity_info['field_collection_item']['entity keys']['revision uuid'] = 'vuuid'; + $entity_info['field_collection_item']['entity class'] = 'UUIDFieldCollectionItemEntity'; +} + +/** + * Implements hook_services_request_preprocess_alter(). + */ +function field_collection_uuid_services_request_preprocess_alter($controller, &$args) { + foreach ($args as $i => $arg) { + if (is_array($arg) && isset($arg['type'])) { + foreach (field_info_instances($args[0], $arg['type']) as $field_value) { + if (isset($field_value['type']) && $field_value['type'] == "field_collection") { + foreach ($arg[$field_value['field_name']][LANGUAGE_NONE] as $delta => $value) { + $target = reset(entity_get_id_by_uuid('field_collection_item', array($value['value']))); + $args[$i][$field_value['field_name']][LANGUAGE_NONE][$delta] = array( + 'value' => $target, + 'revision_id' => db_query('SELECT MAX(revision_id) FROM {field_collection_item_revision}')->fetchField(), + ); + } + } + } + } + } +}