<?php
/////////////////// PAGE DEFINITIONS ///////////////////
function migrate_groups_menu(){
$menu["migrate_groups"] = array(
"title" => "Migrate grps",
"description" => "....",
"page callback" => "migrate_multigroup_to_collections",
"access callback" => TRUE,
);
return $menu;
}
/*function migrate_multigroup_to_collections() {
$content_type = 'thing';
$collection_field = 'field_context';
$multigroup_fields = array(
'field_connection',
'field_title_in_context',
);
// Get all the nodes that have value in the multigroup.
$query = db_select('field_data_' . $multigroup_fields[0])
->condition('entity_type', 'node')
->condition('bundle', $content_type);
$query->addExpression('DISTINCT entity_id', 'nid');
$query->addExpression('revision_id', 'vid');
$nodes_result = $query->execute();
foreach ($nodes_result as $node) {
// Construct the legacy multigroup for the node from the individual fields.
$multigroup_data = array();
foreach ($multigroup_fields as $field) {
$field_result = db_select('field_data_' . $field, 'field')
->fields('field')
->condition('entity_type', 'node')
->condition('entity_id', $node->nid)
->execute();
foreach ($field_result as $field_item) {
$multigroup_data[$field_item->delta][$field] = $field_item;
}
}
// Step through the reconstructed multigroups, which are collections from now.
foreach ($multigroup_data as $delta => $data) {
// Create entry in field_collection_item table.
$id = db_insert('field_collection_item')
->fields(array('field_name' => $collection_field))
->execute();
// Attach collection field data to the node.
db_insert('field_data_' . $collection_field)
->fields(array(
'entity_type' => 'node',
'bundle' => $content_type,
'entity_id' => $node->nid,
'revision_id' => $node->vid,
'language' => 'und',
'delta' => $delta,
$collection_field . '_value' => $id,
))
->execute();
// Go through all the fields in the multigroup.
foreach ($data as $multigroup_field => $field_data) {
// Reassign the fields in the multigroup from the node to the collection field instance.
db_update('field_data_' . $multigroup_field)
->fields(array(
'entity_type' => 'field_collection_item',
'bundle' => $collection_field,
'entity_id' => $id,
'revision_id' => $id,
'delta' => 0,
))
->condition('entity_type', 'node')
->condition('entity_id', $node->nid)
->condition('delta', $delta)
->execute();
}
}
}
return "FINISHED";
}*/
function migrate_multigroup_to_collections($content_type='page',$collection_field='field_context',$multigroup_fields=array('field_connection','field_weight','field_notes')) {
// Get all the nodes that have value in the multigroup.
$query = db_select('field_data_' . $multigroup_fields[0])
->condition('entity_type', 'node')
->condition('bundle', $content_type);
$query->addExpression('DISTINCT entity_id', 'nid');
$query->addExpression('revision_id', 'vid');
$nodes_result = $query->execute();
foreach ($nodes_result as $node) {
// Construct the legacy multigroup for the node from the individual fields.
$multigroup_data = array();
foreach ($multigroup_fields as $field) {
$field_result = db_select('field_data_' . $field, 'field')
->fields('field')
->condition('entity_type', 'node')
->condition('entity_id', $node->nid)
->execute();
foreach ($field_result as $field_item) {
$multigroup_data[$field_item->delta][$field] = $field_item;
}
}
$id = 0;
// Step through the reconstructed multigroups, which are collections from now.
foreach ($multigroup_data as $delta => $data) {
// Create entry in field_collection_item table.
$id = db_insert('field_collection_item')
->fields(array('field_name' => $collection_field, 'revision_id' => 0, 'archived' => 0))
->execute();
$revid = db_insert('field_collection_item_revision')
->fields(array('item_id' => $id))
->execute();
db_update('field_collection_item')
->fields(array('revision_id' => $revid))
->condition('item_id', $id)
->execute();
// Attach collection field data to the node.
db_insert('field_data_' . $collection_field)
->fields(array(
'entity_type' => 'node',
'bundle' => $content_type,
'entity_id' => $node->nid,
'revision_id' => $node->vid,
'language' => 'und',
'delta' => $delta,
$collection_field . '_value' => $id,
$collection_field . '_revision_id' => $revid,
))
->execute();
// Attach collection field data to the node.
db_insert('field_revision_' . $collection_field)
->fields(array(
'entity_type' => 'node',
'bundle' => $content_type,
'entity_id' => $node->nid,
'revision_id' => $node->vid,
'language' => 'und',
'delta' => $delta,
$collection_field . '_value' => $id,
$collection_field . '_revision_id' => $revid,
))
->execute();
// Go through all the fields in the multigroup.
foreach ($data as $multigroup_field => $field_data) {
// Reassign the fields in the multigroup from the node to the collection field instance.
db_update('field_data_' . $multigroup_field)
->fields(array(
'entity_type' => 'field_collection_item',
'bundle' => $collection_field,
'entity_id' => $id,
'language' => 'und',
'revision_id' => $revid,
'delta' => 0,
))
->condition('entity_type', 'node')
->condition('entity_id', $node->nid)
->condition('delta', $delta)
->execute();
db_delete('field_revision_' . $multigroup_field)
->condition('entity_type', 'node')
->condition('entity_id', $node->nid)
->execute();
$qry = "INSERT INTO field_revision_$multigroup_field SELECT * FROM field_data_$multigroup_field WHERE entity_id = $id AND entity_type = 'field_collection_item' AND bundle = '$collection_field'";
db_query($qry);
}
}
}
return "DONE";
}
?>