From 1e9f1f7fb4e4e6e7c427a13045e8bc0f87d4f1cf Mon Sep 17 00:00:00 2001 From: William Hearn Date: Sun, 13 Dec 2015 16:51:37 -0500 Subject: [PATCH] Provide a Field Collection UUID module to support UUID/Deploy Signed-off-by: William Hearn --- .../controllers/UUIDFieldCollectionItemEntity.inc | 31 ++++++++ field_collection_uuid/field_collection_uuid.info | 6 ++ .../field_collection_uuid.install | 46 ++++++++++++ field_collection_uuid/field_collection_uuid.module | 85 ++++++++++++++++++++++ 4 files changed, 168 insertions(+) create mode 100644 field_collection_uuid/controllers/UUIDFieldCollectionItemEntity.inc create mode 100644 field_collection_uuid/field_collection_uuid.info create mode 100644 field_collection_uuid/field_collection_uuid.install create mode 100644 field_collection_uuid/field_collection_uuid.module diff --git a/field_collection_uuid/controllers/UUIDFieldCollectionItemEntity.inc b/field_collection_uuid/controllers/UUIDFieldCollectionItemEntity.inc new file mode 100644 index 0000000..0f108d6 --- /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. + $this->revision = TRUE; + 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..82ba059 --- /dev/null +++ b/field_collection_uuid/field_collection_uuid.install @@ -0,0 +1,46 @@ +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(), + ); + } + } + } + } + } +} -- 2.3.8 (Apple Git-58)