Duplicate Child Entries via Gravity Flow Form Connector

This snippet duplicates child entries when a new entry is created via the Gravity Flow Form Connector. The Nested Form field must be mapped to the same child form on the source and target forms.

Instructions

See “Where do I put snippets?” in our documentation for installation instructions.

Code

Filename: gpnf-gflow-form-connector-duplicate-child-entries.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<?php
/**
 * Gravity Perks // Nested Forms // Duplicate Child Entries via Gravity Flow Form Connector
 * https://gravitywiz.com/documentation/gravity-forms-nested-forms/
 *
 * This snippet duplicates child entries when a new entry is created via the Gravity Flow Form Connector.
 * The Nested Form field must be mapped to the same child form on the source and target forms.
 */
add_action( 'gravityflowformconnector_post_new_entry', function( $entry_id, $entry, $form, $step_new_entry ) {

	if ( ! class_exists( 'GPNF_Entry' ) || ! function_exists( 'gp_nested_forms' ) ) {
		return;
	}

	$new_entry = GFAPI::get_entry( $entry_id );

	// Loop through each field in the form
	foreach ( $form['fields'] as $field ) {

		// Check if it's a Nested Form field
		if ( $field->get_input_type() !== 'form' ) {
			continue;
		}

		$child_entries = ( new GPNF_Entry( $new_entry ) )->get_child_entries( $field->id );
		if ( empty( $child_entries ) ) {
			continue;
		}

		$duplicated_child_entries = array();

		// Duplicate the child entries and associate them with this new entry
		foreach ( $child_entries as $child_entry ) {

			$child_entry[ GPNF_Entry::ENTRY_PARENT_KEY ]            = $new_entry['id'];
			$child_entry[ GPNF_Entry::ENTRY_PARENT_FORM_KEY ]       = $new_entry['form_id'];
			$child_entry[ GPNF_Entry::ENTRY_NESTED_FORM_FIELD_KEY ] = $field->id;
			// @todo Add support for fetching Nested Form ID from target Nested Form field.
			//$child_entry['form_id']                                 = $field->gpnfForm;

			$duplicated_child_entry     = GFAPI::add_entry( $child_entry );
			$duplicated_child_entries[] = $duplicated_child_entry;
		}

		// Update Nested Form Field value on parent form to use the newly duplicated child entries.
		GFAPI::update_entry_field( $new_entry['id'], $field->id, implode( ',', $duplicated_child_entries ) );

	}
}, 10, 4 );

Leave a Reply

Your email address will not be published. Required fields are marked *

  • Trouble installing this snippet? See our troubleshooting tips.
  • Need to include code? Create a gist and link to it in your comment.
  • Reporting a bug? Provide a URL where this issue can be recreated.

By commenting, I understand that I may receive emails related to Gravity Wiz and can unsubscribe at any time.