function drush_multifield_convert_field_collection_table in Multifield 7
Same name and namespace in other branches
- 7.2 multifield.drush.inc \drush_multifield_convert_field_collection_table()
1 string reference to 'drush_multifield_convert_field_collection_table'
File
- ./
multifield.drush.inc, line 128 - Drush integration for the Multifield module.
Code
function drush_multifield_convert_field_collection_table($source_field, $target_field, $subfields, $type, &$context) {
$source_table = $type == 'data' ? _field_sql_storage_tablename($source_field) : _field_sql_storage_revision_tablename($source_field);
$target_table = $type == 'data' ? _field_sql_storage_tablename($target_field) : _field_sql_storage_revision_tablename($target_field);
if (!isset($context['sandbox']['total'])) {
$context['sandbox']['count'] = 0;
$context['sandbox']['total'] = db_select($source_table)
->countQuery()
->execute()
->fetchField();
}
$query = db_select($source_table, 'old');
$query
->fields('old');
$query
->orderBy('entity_type');
$query
->orderBy('revision_id');
$query
->range($context['sandbox']['count'], 100);
$records = $query
->execute()
->fetchAllAssoc($source_field['field_name'] . '_value', PDO::FETCH_ASSOC);
//var_export($records);
$context['sandbox']['count'] += count($records);
foreach ($subfields as $subfield) {
$columns = array();
foreach (array_keys($target_field['columns']) as $column_name) {
if (strpos($column_name, $subfield['field_name']) === 0) {
$columns[] = $column_name;
}
}
$subtable = $type == 'revision' ? _field_sql_storage_revision_tablename($subfield) : _field_sql_storage_tablename($subfield);
$subquery = db_select($subtable, 'subfield');
$subquery
->fields('subfield', array_merge($columns, array(
'entity_id',
)));
$subquery
->condition('entity_type', 'field_collection_item');
$subquery
->condition('bundle', $source_field['field_name']);
$subquery
->condition('entity_id', array_keys($records), 'IN');
$subrecords = $subquery
->execute()
->fetchAllAssoc('entity_id', PDO::FETCH_ASSOC);
foreach ($subrecords as $id => $subrecord) {
foreach ($columns as $column_name) {
$records[$id][$target_field['field_name'] . '_' . $column_name] = $subrecord[$column_name];
}
}
}
foreach ($records as &$record) {
$record[$target_field['field_name'] . '_id'] = multifield_get_next_id();
$record['deleted'] = 0;
drupal_write_record($target_table, $record);
entity_get_controller($record['entity_type'])
->resetCache(array(
$record['entity_id'],
));
}
multifield_update_maximum_id($records);
$context['finished'] = empty($context['sandbox']['total']) ? 1 : $context['sandbox']['count'] / $context['sandbox']['total'];
}