function lingotek_cleanup_field_collection_fields in Lingotek Translation 7.5
Same name and namespace in other branches
- 7.7 lingotek.util.inc \lingotek_cleanup_field_collection_fields()
- 7.6 lingotek.util.inc \lingotek_cleanup_field_collection_fields()
Clean up field-collection fields
File
- ./
lingotek.util.inc, line 1601 - Utility functions.
Code
function lingotek_cleanup_field_collection_fields() {
// todo: This function is MySQL-specific. Needs refactoring to be db-agnostic.
$field_collection_field_types = field_read_fields(array(
'type' => 'field_collection',
));
$disabled_types = lingotek_get_disabled_bundles('field_collection_item');
// Update all lines in field-collection field tables to be undefined,
// ignoring duplicates, then delete all lines in field-collection
// field tables that aren't undefined.
$fc_fields_found = 0;
$fc_dups_found = 0;
foreach (array_keys($field_collection_field_types) as $fc_field_name) {
$fc_langs = lingotek_cleanup_get_dirty_field_collection_fields("field_data_" . $fc_field_name);
if (!$fc_langs) {
// No language-specific field-collection fields exist in this table
continue;
}
if (in_array($fc_field_name, $disabled_types)) {
// Lingotek does not manage this field-collection type. Abort.
continue;
}
// Make sure one of each field has an undefined entry.
// We do this by first adding the count of affected fields, and then
// removing the remaining ones (duplicates) below, to avoid double counting
// fields that were actually changed. (Some would already have language-
// neutral and some would not.)
foreach ($fc_langs as $fc_lang) {
$fc_fields_found += (int) $fc_lang;
}
db_query("UPDATE IGNORE {field_data_" . $fc_field_name . "} SET language = '" . LANGUAGE_NONE . "'");
// Find all unnecessary fields (language-specific) for removal.
$fc_langs = lingotek_cleanup_get_dirty_field_collection_fields("field_data_" . $fc_field_name);
// Subtract the ones that were not removed from the update above.
foreach ($fc_langs as $dups) {
$fc_dups_found += (int) $dups;
$fc_fields_found -= (int) $dups;
}
db_query("DELETE FROM {field_data_" . $fc_field_name . "} WHERE language <> '" . LANGUAGE_NONE . "'");
db_query("UPDATE IGNORE {field_revision_" . $fc_field_name . "} SET language = '" . LANGUAGE_NONE . "'");
db_query("DELETE FROM {field_revision_" . $fc_field_name . "} WHERE language <> '" . LANGUAGE_NONE . "'");
}
if ($fc_fields_found) {
drupal_set_message(format_plural($fc_fields_found, t('Set 1 field-collection entry to be language neutral'), t('Set @ff field-collection entries to be language neutral.', array(
'@ff' => $fc_fields_found,
))));
}
if ($fc_dups_found) {
drupal_set_message(format_plural($fc_dups_found, t('Removed 1 unnecessary language-specific field-collection entry'), t('Removed @ff unnecessary language-specific field-collection entries.', array(
'@ff' => $fc_dups_found,
))));
}
if (!$fc_fields_found && !$fc_dups_found) {
drupal_set_message(t('All field-collection entries were already correctly set to be language neutral.'));
}
}