function wf_crm_configure_form_submit in Webform CiviCRM Integration 7.3
Same name and namespace in other branches
- 7.5 includes/wf_crm_admin_form.inc \wf_crm_configure_form_submit()
- 7.4 includes/wf_crm_admin_form.inc \wf_crm_configure_form_submit()
Submission handler, saves CiviCRM options for a Webform node
File
- ./
webform_civicrm_admin.inc, line 767
Code
function wf_crm_configure_form_submit($form, &$form_state) {
$button = $form_state['clicked_button']['#id'];
$node = node_load($nid = $form_state['storage']['nid']);
$vals = wf_crm_aval($form_state, 'storage:vals', $form_state['values']);
if (empty($node->webform_civicrm) && !$vals['nid'] || $button == 'edit-cancel') {
$form_state['rebuild'] = TRUE;
unset($form_state['storage']['msg']);
return;
}
unset($form_state['storage']);
civicrm_initialize();
$delete_me = $enabled = $existing = wf_crm_enabled_fields($node, NULL, TRUE);
$created = $deleted = 0;
$fields = wf_crm_get_fields();
$sets = wf_crm_get_fields('sets');
// Fields to delete
foreach ($enabled as $key => $val) {
$val = (array) wf_crm_aval($vals, $key);
if (in_array('create_civicrm_webform_element', $val, TRUE) && $vals['nid'] || strpos($key, 'fieldset') !== FALSE) {
unset($delete_me[$key]);
}
}
// Display a confirmation before deleting fields
if ($delete_me && $button == 'edit-submit') {
$msg = '<p>' . t('These existing fields are no longer needed for CiviCRM processing based on your new form settings.') . '</p><ul>';
foreach ($delete_me as $key => $id) {
list(, $c, $ent, $n, $table, $name) = explode('_', $key, 6);
$info = '';
if ($ent == 'contact' || $ent == 'participant') {
$info = '<em>' . t('Contact !num', array(
'!num' => $c,
));
}
if ($info && isset($sets[$table]['max_instances'])) {
$info .= ' ' . $sets[$table]['label'] . ' ' . $n;
}
$info .= $info ? ':</em> ' : '';
$msg .= '<li>' . $info . $node->webform['components'][$id]['name'] . '</li>';
}
$msg .= '</ul><p>' . t('Would you like them to be automatically removed from the webform? This is recommended unless you need to keep webform-results information from these fields. (They can still be deleted manually later if you choose not to remove them now.)') . '</p><p><em>' . t('Note: Deleting webform components cannot be undone, and will result in the loss of webform-results info for those elements. Data in the CiviCRM database will not be affected.') . '</em></p>';
$form_state['storage']['msg'] = $msg;
$form_state['storage']['vals'] = $vals;
$form_state['rebuild'] = TRUE;
return;
}
module_load_include('inc', 'webform', 'includes/webform.components');
module_load_include('inc', 'webform_civicrm', 'contact_component');
$form_state['redirect'] = 'node/' . $nid . '/webform';
// Delete/disable fields
if ($button === 'edit-delete' || $button === 'edit-disable' && $vals['nid']) {
foreach ($delete_me as $id) {
$field = $node->webform['components'][$id];
unset($enabled[$field['form_key']]);
++$deleted;
if ($button === 'edit-delete') {
webform_component_delete($node, $field);
}
else {
$field['form_key'] = 'disabled' . substr($field['form_key'], 7);
webform_component_update($field);
}
}
if ($deleted == 1) {
$p = array(
'%name' => $field['name'],
);
drupal_set_message($button === 'edit-delete' ? t('Deleted field: %name', $p) : t('Disabled field: %name', $p));
}
else {
$p = array(
'!num' => $deleted,
);
drupal_set_message($button === 'edit-delete' ? t('Deleted !num fields.', $p) : t('Disabled !num fields.', $p));
}
if ($button === 'edit-disable') {
drupal_set_message(t('Disabled fields will still be processed as normal Webform fields, but they will not be autofilled from or saved to the CiviCRM database.'));
}
else {
// Remove empty fieldsets for deleted contacts
foreach ($enabled as $key => $id) {
if (substr($key, -8) == 'fieldset') {
list(, $c, $ent, $i) = explode('_', $key);
if ($ent == 'contact' && $i == 1 && (!$vals['nid'] || $c > $vals['number_of_contacts'])) {
if (!_wf_crm_child_components($node->nid, $id)) {
webform_component_delete($node, $node->webform['components'][$id]);
}
}
}
}
}
}
// Disable CiviCRM for this form
if (!$vals['nid']) {
wf_crm_disable($nid);
drupal_set_message(t('CiviCRM processing for this form is now disabled.'));
}
else {
webform_ensure_record($node);
wf_crm_process_form_settings($vals);
if (!$vals['toggle_message']) {
$vals['message'] = '';
}
// Index disabled components
$disabled = array();
foreach (wf_crm_aval($node->webform, 'components', array()) as $field) {
if (substr($field['form_key'], 0, 9) === 'disabled_') {
$field['form_key'] = 'civicrm' . substr($field['form_key'], 8);
$disabled[$field['form_key']] = $field;
}
}
$i = 0;
foreach ($vals as $key => $val) {
if (substr($key, 0, 7) == 'civicrm') {
++$i;
list(, $c, $ent, $n, $table, $name) = explode('_', $key, 6);
$aval = (array) $val;
if (is_array($val)) {
unset($val['create_civicrm_webform_element']);
}
elseif ($val == 'create_civicrm_webform_element') {
$val = '';
}
if (!isset($enabled[$key]) && in_array('create_civicrm_webform_element', $aval, TRUE)) {
// Restore disabled component
if (isset($disabled[$key])) {
webform_component_update($disabled[$key]);
$enabled[$key] = $disabled[$key]['cid'];
drupal_set_message(t('Re-enabled field: %name', array(
'%name' => $disabled[$key]['name'],
)));
}
else {
$field = $fields[$table . '_' . $name];
$field['nid'] = $nid;
$field['form_key'] = $key;
$field['weight'] = $i;
wf_crm_component_insert($field, $enabled, $vals);
++$created;
}
}
elseif (isset($fields[$table . '_' . $name]['expose_list']) && !empty($val)) {
$vals['data'][$ent][$c][$table][$n][$name] = $val;
}
}
}
if ($created == 1) {
drupal_set_message(t('Created field: %name', array(
'%name' => $field['name'],
)));
}
elseif ($created) {
drupal_set_message(t('Created !num new fields.', array(
'!num' => $created,
)));
}
// Create record
if (empty($node->webform_civicrm)) {
drupal_write_record('webform_civicrm_forms', $vals);
drupal_set_message(t('CiviCRM processing for this form is now enabled.'));
}
else {
drupal_write_record('webform_civicrm_forms', $vals, 'nid');
drupal_set_message(t('Your CiviCRM form settings have been updated.'));
}
// Update existing contact fields
foreach ($existing as $fid => $id) {
if (substr($fid, -8) === 'existing') {
wf_crm_update_existing_component($node->webform['components'][$id], $enabled, $vals['data']);
}
}
}
// Make sure the updates are visible to anonymous users.
cache_clear_all();
// Clear the entity cache.
if (module_exists('entitycache')) {
cache_clear_all($nid, 'cache_entity_node');
}
}