webform_encrypt.module in Webform Encrypt 6
Same filename and directory in other branches
Main module file for the Webform Encrypt module.
File
webform_encrypt.moduleView source
<?php
/**
* @file
* Main module file for the Webform Encrypt module.
*/
/**
* Implementation of hook_perm().
*/
function webform_encrypt_perm() {
return array(
'view encrypted values',
);
}
/**
* Implementation of hook_form_FORM_ID_alter()
*/
function webform_encrypt_form_webform_admin_settings_alter(&$form, $form_state) {
// Add our config options to the webform settings page.
$form['encrypt'] = array(
'#type' => 'fieldset',
'#title' => t('Webform Encrypt'),
'#collapsible' => TRUE,
'#collapsed' => FALSE,
);
$form['encrypt']['webform_encrypt_match_user'] = array(
'#type' => 'checkbox',
'#title' => t('Enable email to user matching'),
'#description' => t('If enabled, every time webform sends an email, it will attempt to find a user that matches the email address the mail will be sent to in order to correctly determine permissions.'),
'#default_value' => variable_get('webform_encrypt_match_user', 0),
);
}
/**
* Implementation of hook_form_FORM_ID_alter()
*/
function webform_encrypt_form_webform_component_edit_form_alter(&$form, $form_state) {
// Add our fields to the component add/edit form.
$component = $form['#parameters'][3];
// Exclude webform component types that don't make sense to encrypt.
$excluded_types = array(
'fieldset',
'file',
'markup',
'pagebreak',
);
if (!in_array($form['type']['#value'], $excluded_types)) {
// Add settings for encryption.
$form['encryption'] = array(
'#type' => 'fieldset',
'#title' => t('Encryption'),
'#tree' => TRUE,
);
$form['encryption']['encrypt'] = array(
'#type' => 'checkbox',
'#title' => t('Encrypt this field\'s value'),
'#description' => t('!link to edit encryption settings.', array(
'!link' => l('Click here', 'admin/settings/encrypt'),
)),
'#default_value' => isset($component['extra']['encrypt']) ? $component['extra']['encrypt'] : 0,
);
}
}
/**
* Implementation of hook_form_alter().
*/
function webform_encrypt_form_alter(&$form, &$form_state, $form_id) {
// When we are editing a webform submission,
if (strpos($form_id, 'webform_client_form_') === 0 && $form['details']['sid']['#value']) {
_webform_encrypt_decrypt_nested_values($form['submitted']);
}
}
/**
* Implementation of hook_webform_component_presave().
* Save encryption settings for a component.
*/
function webform_encrypt_webform_component_presave(&$component) {
if (!empty($component['encryption'])) {
$component['extra'] = array_merge($component['extra'], $component['encryption']);
unset($component['encryption']);
}
}
/**
* Implementation of hook_webform_submission_presave().
* Encrypt the value if the component has been marked as such.
*/
function webform_encrypt_webform_submission_presave($node, &$submission) {
foreach ($submission->data as $cid => $entry) {
if (!empty($node->webform['components'][$cid]['extra']['encrypt'])) {
$submission->data[$cid]['value'][0] = encrypt($entry['value'][0], array(
'base64' => TRUE,
));
}
}
}
/**
* Implementation of hook_webform_submission_render_alter().
* Decrypt values when displaying webform submissions.
*/
function webform_encrypt_webform_submission_render_alter(&$renderable) {
// First, determine if 1) if we are dealing with an email or a page view, and 2) if user matching
// is enabled.
if (variable_get('webform_encrypt_match_user', 0) && !empty($renderable['#email'])) {
// If we are, then try to match a user to the email address we are sending to.
$uid = db_result(db_query('SELECT uid FROM {users} WHERE mail = "%s"', array(
$renderable['#email']['email'],
)));
$account = $uid ? user_load($uid) : NULL;
}
else {
$account = NULL;
}
// Next, we loop through components and decrypt as necessary.
foreach ($renderable['#submission']->data as $cid => $entry) {
if (!empty($renderable['#node']->webform['components'][$cid]['extra']['encrypt'])) {
$form_key = $renderable['#node']->webform['components'][$cid]['form_key'];
if (user_access('view encrypted values')) {
$renderable[$form_key]['#value'] = decrypt($entry['value'][0], array(
'base64' => TRUE,
));
}
else {
$renderable[$form_key]['#value'] = t('[Value Encrypted]');
}
}
}
}
/**
* Helper function to recursively decrypt values in a webform structure.
*/
function _webform_encrypt_decrypt_nested_values(&$element) {
foreach (element_children($element) as $name) {
$component =& $element[$name];
if (!empty($component['#webform_component']['extra']['encrypt'])) {
$component['#default_value'] = decrypt($component['#default_value'], array(
'base64' => TRUE,
));
}
_webform_encrypt_decrypt_nested_values($component);
}
}
Functions
Name | Description |
---|---|
webform_encrypt_form_alter | Implementation of hook_form_alter(). |
webform_encrypt_form_webform_admin_settings_alter | Implementation of hook_form_FORM_ID_alter() |
webform_encrypt_form_webform_component_edit_form_alter | Implementation of hook_form_FORM_ID_alter() |
webform_encrypt_perm | Implementation of hook_perm(). |
webform_encrypt_webform_component_presave | Implementation of hook_webform_component_presave(). Save encryption settings for a component. |
webform_encrypt_webform_submission_presave | Implementation of hook_webform_submission_presave(). Encrypt the value if the component has been marked as such. |
webform_encrypt_webform_submission_render_alter | Implementation of hook_webform_submission_render_alter(). Decrypt values when displaying webform submissions. |
_webform_encrypt_decrypt_nested_values | Helper function to recursively decrypt values in a webform structure. |