Last active
April 2, 2018 08:41
-
-
Save webmerge/43e0d1b45144bb867f72 to your computer and use it in GitHub Desktop.
Send Gravity Forms Submissions to WebMerge
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function gf_get_field_name($field){ | |
if(!empty($field['adminLabel'])){ | |
$key = $field['adminLabel']; | |
}elseif(!empty($field['label'])){ | |
$key = $field['label']; | |
}else{ | |
$key = strval($field['id']); | |
} | |
return gf_format_field_name($key); | |
} | |
function gf_format_field_name($name){ | |
$name = preg_replace('/[^0-9a-zA-Z]/', '_', $name); | |
while(strpos($name, '__') !== false){ | |
$name = str_replace('__', '_', $name); | |
} | |
return strtolower($name); | |
} | |
function gf_format_array_value($value){ | |
if(is_array($value)){ | |
$new_value = array(); | |
foreach($value as $k => $v){ | |
$k = gf_format_field_name($k); | |
$new_value[$k] = gf_format_array_value($v); | |
} | |
return $new_value; | |
}else{ | |
return $value; | |
} | |
} | |
function gf_flatten_form($form){ | |
$flattened_form = array(); | |
foreach ($form['fields'] as $k => $v){ | |
$v['sanitized_field_name'] = gf_get_field_name($v); | |
$flattened_form['f'.$v['id']] = $v; | |
if(array_key_exists('inputs', $v) && is_array($v['inputs'])){ | |
foreach ($v['inputs'] as $ik => $iv){ | |
$iv['sanitized_container_field_name'] = $v['sanitized_field_name']; | |
$iv['sanitized_field_name'][$v['sanitized_field_name']] = gf_get_field_name($iv); | |
$iv['parent_id'] = 'f'.strval($v['id']); | |
$flattened_form['f'.$iv['id']] = $iv; | |
} | |
} | |
} | |
return $flattened_form; | |
} | |
function gf_format_entry($entry, $flattened_form){ | |
$sanitized_entry = array(); | |
foreach ($entry as $k => $v){ | |
//stripslashes if magic_quotes is enabled on the server | |
if(get_magic_quotes_gpc()){ | |
$v_clean = stripslashes($v); | |
}else{ | |
$v_clean = $v; | |
} | |
if (array_key_exists('f'.$k, $flattened_form)){ | |
$field_name = $flattened_form['f'.$k]['sanitized_field_name']; | |
if(is_array($field_name)){ | |
$parent_id = $flattened_form['f'.$k]['parent_id']; | |
$parent_name = $flattened_form[$parent_id]['sanitized_field_name']; | |
$sanitized_entry[$parent_name] = array_merge_recursive( | |
(array)$sanitized_entry[$parent_name], | |
array($field_name[$parent_name] => $v_clean) | |
); | |
}else{ | |
if(is_string($v_clean) && strpos($v_clean, '{')){ | |
$unserialized = unserialize($v_clean); | |
if(!empty($unserialized)){ | |
$v_clean = gf_format_array_value($unserialized); | |
} | |
} | |
$sanitized_entry = array_merge_recursive( | |
(array)$sanitized_entry, | |
array($field_name => $v_clean) | |
); | |
} | |
}else{ | |
$sanitized_entry['gf'][$k] = $v_clean; | |
} | |
} | |
return $sanitized_entry; | |
} | |
function gf_send_to_webmerge($entry, $form){ | |
//based on each form (ID), find the WebMerge Merge URL we want to use | |
//customize this part | |
if($form['id'] == 1){ | |
$webmerge_url = 'https://www.webmerge.me/merge/12345/abcdef'; | |
}elseif($form['id'] == 4){ | |
$webmerge_url = 'https://www.webmerge.me/merge/56789/uvwxyz'; | |
}else{ | |
return; | |
} | |
$data = gf_format_entry($entry, gf_flatten_form($form)); | |
if(!empty($data)){ | |
$response = wp_remote_post($webmerge_url, array( | |
'headers' => array('Content-Type' => 'application/json'), | |
'body' => json_encode($data) | |
)); | |
} | |
} | |
add_action('gform_post_submission', 'gf_send_to_webmerge', 10, 2); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
The
gform_post_submission
hook is deprecated. I recommend updating this gist to use thegform_after_submission
hook instead. Thegf_send_to_webmerge
function arguments would remain the same, it's just the filter name which needs changing.