Support for Drupal 7 is ending on 5 January 2025—it’s time to migrate to Drupal 10! Learn about the many benefits of Drupal 10 and find migration tools in our resource center.
After much hunting through core code it looks like the default on my site for a node that hasn't been saved yet is "en" instead of "und". I'm not sure why.
However it causes field_get_items('node', $node, $field['field_name']) to return FALSE in the loop.
function _encrypted_text_node_field_names(&$node) {
$items = array();
$fields = field_info_field_by_ids();
foreach ($fields as $field) {
if ($field['module'] === 'text') {
if (field_get_items('node', $node, $field['field_name'])) {
$instance = field_info_instance('node', $field['field_name'], $node->type);
if ($instance['settings']['text_encryption']) {
$items[] = $field['field_name'];
}
}
}
}
return $items;
}
I propose using field_info_instance('node', $field['field_name'], $node->type) instead of field_get_items('node', $node, $field['field_name']) because it will return a value if it is valid or null if it is not.
Any comments?