From f88dfac12b253eb959d7d3abdedcc2066c1ff22c Mon Sep 17 00:00:00 2001
From: n3or <info@n3or.de>
Date: Sun, 23 Oct 2011 23:35:12 +0200
Subject: [PATCH] Issue #1064666: make location field within field-collections available

---
 contrib/location_cck/location_cck.module |   31 +++++++++++++++++++++++++++++-
 1 files changed, 30 insertions(+), 1 deletions(-)

diff --git a/contrib/location_cck/location_cck.module b/contrib/location_cck/location_cck.module
index 78ebfeb..189c13d 100644
--- a/contrib/location_cck/location_cck.module
+++ b/contrib/location_cck/location_cck.module
@@ -163,6 +163,17 @@ function location_cck_field_insert($entity_type, $entity, $field, $instance, $la
       location_save_locations($items, $criteria);
     }
   }
+  elseif ($entity_type == 'field_collection_item')
+  { 
+    if (!empty($items)) {
+      // Store instances of locations by field name and item id.
+      $criteria = array(
+        'genid' => 'field_collection_item:' . $field['field_name'] . ':' . $entity->item_id,
+        'nid' => $entity->item_id,
+      );
+      location_save_locations($items, $criteria);
+    }
+  }
 }
 
 /**
@@ -180,6 +191,17 @@ function location_cck_field_update($entity_type, $entity, $field, $instance, $la
       location_save_locations($items, $criteria);
     }
   }
+  elseif ($entity_type == 'field_collection_item')
+  { 
+    if (!empty($items)) {
+      // Store instances of locations by field name and item id.
+      $criteria = array(
+        'genid' => 'field_collection_item:' . $field['field_name'] . ':' . $entity->item_id,
+        'nid' => $entity->item_id,
+      );
+      location_save_locations($items, $criteria);
+    }
+  }
 }
 
 /**
@@ -199,6 +221,9 @@ function location_cck_field_delete($entity_type, $entity, $field, $instance, $la
       $locs = array();
       location_save_locations($locs, array('genid' => $genid));
     }
+  } elseif ($entity_type == 'field_collection_item') {
+    $locs = array();
+    location_save_locations($locs, array('genid' => 'field_collection_item:' . $field['field_name'] . ':' . $entity->item_id));
   }
 }
 
@@ -210,6 +235,10 @@ function location_cck_field_delete_revision($entity_type, $entity, $field, $inst
     $genid = 'cck:' . $field['field_name'] . ':' . $entity->vid;
     $locs = array();
     location_save_locations($locs, array('genid' => $genid));
+  } elseif ($entity_type == 'field_collection_item') {
+    $genid = 'field_collection_item:' . $field['field_name'] . ':' . $entity->item_id;
+    $locs = array();
+    location_save_locations($locs, array('genid' => $genid));
   }
 }
 
@@ -224,7 +253,7 @@ function location_cck_field_validate($entity_type, $entity, $field, $instance, $
  * Implement hook_field_load().
  */
 function location_cck_field_load($entity_type, $entities, $field, $instances, $langcode, &$items, $age) {
-  if ($entity_type == 'node') {
+  if ($entity_type == 'node' || $entity_type == 'field_collection_item') {
     foreach ($entities as $id => $entity) {
       foreach ($items[$id] as $delta => $item) {
         $location = array();
-- 
1.7.2.5

