Skip to content

Instantly share code, notes, and snippets.

@webmerge
Last active April 2, 2018 08:41
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save webmerge/43e0d1b45144bb867f72 to your computer and use it in GitHub Desktop.
Save webmerge/43e0d1b45144bb867f72 to your computer and use it in GitHub Desktop.
Send Gravity Forms Submissions to WebMerge
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);
@richardW8k
Copy link

richardW8k commented Apr 2, 2018

The gform_post_submission hook is deprecated. I recommend updating this gist to use the gform_after_submission hook instead. The gf_send_to_webmerge function arguments would remain the same, it's just the filter name which needs changing.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment