function _field_encrypt_field_storage_pre_load in Field Encryption 7
Implements hook_field_storage_pre_load().
1 call to _field_encrypt_field_storage_pre_load()
- field_encrypt_field_storage_pre_load in ./
field_encrypt.module - Implements hook_field_storage_pre_load().
File
- ./
field_encrypt.inc, line 235 - Encryption functionality for the Field encrypt module.
Code
function _field_encrypt_field_storage_pre_load($entity_type, $queried_entities, $age, &$skip_fields, $options) {
static $field_info = NULL;
if ($field_info === NULL) {
$field_info = field_info_field_by_ids();
}
foreach ($queried_entities as $entity) {
list($id, $vid, $bundle) = entity_extract_ids($entity_type, $entity);
if (is_null($vid)) {
$vid = $id;
}
$default_options = array(
'default' => FALSE,
'deleted' => FALSE,
'language' => NULL,
);
$instances = _field_invoke_get_instances($entity_type, $bundle, $default_options);
foreach ($instances as $instance) {
// Get the field data.
$field_id = $instance['field_id'];
$current_field_info = $field_info[$field_id];
// Are we encrypting this field?
if (!isset($current_field_info['settings']['field_encrypt']['encrypt']) || !$current_field_info['settings']['field_encrypt']['encrypt']) {
continue;
}
$field_name = $instance['field_name'];
// Get the CURRENT or REVISION field table.
$table = key($current_field_info['storage']['details']['sql'][$age]);
// We're bypassing usual storage, mark field for skipping.
$skip_fields[$field_id] = $current_field_info;
// Now we need to fetch the encrypted data.
$results = db_select($table, 'r')
->fields('r')
->condition('r.entity_type', $entity_type)
->condition('r.entity_id', $id)
->condition('r.revision_id', $vid)
->orderBy('r.language', 'ASC')
->orderBy('r.delta', 'ASC')
->execute()
->fetchAll();
$field_data = array();
foreach ($results as $result) {
foreach ($current_field_info['storage']['details']['sql'][$age][$table] as $column => $field) {
if (isset($result->{$field}) && !empty($result->{$field})) {
$field_data[$result->language][$result->delta][$column] = !isset($current_field_info['indexes'][$column]) ? field_encrypt_decrypt($result->{$field}) : $result->{$field};
}
}
}
$entity->{$field_name} = $field_data;
}
}
}