Forked from daankortenbach/programmatically-add-gravity-forms.php
Last active
April 21, 2022 13:59
-
-
Save ooksanen/8f60ee17d8afab1676b4a4773004e4d6 to your computer and use it in GitHub Desktop.
Updated for Gravity Forms 2.6 which requires button parameter for submit to work
This file contains 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
<?php | |
/* | |
Plugin Name: Programmatically add Gravity Forms | |
Plugin URI: https://daan.kortenba.ch/programmatically-add-gravity-forms/ | |
Description: Programmatically add persistent Gravity Forms forms. | |
Author: Daan Kortenbach | |
Version: 0.1 | |
Author URI: https://daan.kortenba.ch/ | |
License: GPLv2 or later | |
*/ | |
class ProgrammaticallyAddGravityForm { | |
private $gf_contact_form = array(); | |
/** | |
* [setForm description] | |
* | |
* @param [type] $gf_contact_form [description] | |
*/ | |
public function setForm( $gf_contact_form ) { | |
$this->gf_contact_form = $gf_contact_form; | |
add_action( 'admin_head', array( $this, 'form_create' ), 999 ); | |
add_action( 'gform_after_save_form', array( $this, 'form_overrides' ) ); | |
add_filter( 'gform_add_field_buttons', array( $this, 'fs_remove_fields_gui' ), 10, 1 ); | |
add_filter( 'gform_form_trash_link', array( $this, 'fs_remove_trash_link' ), 10, 1 ); | |
add_filter( 'gform_delete_field_link', array( $this, 'fs_remove_field_link' ), 10, 1 ); | |
add_filter( 'gform_duplicate_field_link', array( $this, 'fs_remove_duplicate_field_link' ), 10, 1 ); | |
add_filter( 'gform_toolbar_menu', array( $this, 'fs_remove_toolbar_menu_items' ), 10, 2 ); | |
add_filter( 'gform_form_actions', array( $this, 'fs_remove_form_actions' ), 10, 2 ); | |
} | |
/** | |
* [form_create description] | |
* | |
* @return [type] [description] | |
*/ | |
public function form_create() { | |
$forms = RGFormsModel::get_forms( null, 'title' ); | |
if ( count( $forms ) > 0 ) { | |
foreach ( $forms as $form ) { | |
if ( $form->title == $this->gf_contact_form['title'] ) { | |
$form_exists = true; | |
} | |
} | |
} | |
if ( $form_exists != true ) { | |
$result = GFAPI::add_form( $this->gf_contact_form ); | |
} | |
} | |
/** | |
* [form_overrides description] | |
* | |
* @return [type] [description] | |
*/ | |
public function form_overrides() { | |
$form_exists = false; | |
$forms = GFAPI::get_forms(); | |
if ( count( $forms ) > 0 ) { | |
$order = array(); | |
foreach ( $forms as $form ) { | |
if ( $form['title'] == $this->gf_contact_form['title'] ) { | |
$form_exists = true; | |
$form_id = $form['id']; | |
$form_fields = $form['fields']; | |
$field_keys = array_keys( $form['fields'] ); | |
foreach ( $field_keys as $key ) { | |
$order[] = $form['fields'][$key]['id']; | |
} | |
} | |
} | |
} | |
if ( $form_exists == true ) { | |
// set form ID | |
$this->gf_contact_form['id'] = $form_id; | |
// Get field keys | |
$field_keys = array_keys( $this->gf_contact_form['fields'] ); | |
$order_original = array(); | |
// Get original order | |
foreach ( $field_keys as $key ) { | |
$order_original[] = $this->gf_contact_form['fields'][$key]['id']; | |
} | |
// temp set original form fields before overwriting them | |
$original_form_fields = $this->gf_contact_form['fields']; | |
// flip keys for values | |
$order_original = array_flip( $order_original ); | |
// reorder original form fields | |
$count = 0; | |
foreach ( $original_form_fields as $key ) { | |
// var_dump($form_fields[$count]['id']); | |
$this->gf_contact_form['fields'][$count] = $original_form_fields[$order_original[$form_fields[$count]['id']]]; | |
// user editable fields | |
$this->gf_contact_form['fields'][$count]['label'] = $form_fields[$count]['label']; | |
$this->gf_contact_form['fields'][$count]['size'] = $form_fields[$count]['size']; | |
$this->gf_contact_form['fields'][$count]['description'] = $form_fields[$count]['description']; | |
$this->gf_contact_form['fields'][$count]['error_message'] = $form_fields[$count]['error_message']; | |
$this->gf_contact_form['fields'][$count]['css_class'] = $form_fields[$count]['css_class']; | |
$count++; | |
} | |
// update form | |
$result = GFAPI::update_form( $this->gf_contact_form ); | |
} | |
} | |
/** | |
* [fs_remove_fields_gui description] | |
* | |
* @param [type] $field_groups [description] | |
* @return [type] [description] | |
*/ | |
public function fs_remove_fields_gui( $field_groups ) { | |
if ( isset( $_GET['id'] ) ) { | |
$forms = GFAPI::get_forms(); | |
$id = intval( $_GET['id'] ); | |
if ( count( $forms ) > 0 ) { | |
foreach ( $forms as $form ) { | |
if ( $form['title'] == $this->gf_contact_form['title'] && $id == $form['id'] ) { | |
$field_groups = array(); | |
} | |
} | |
} | |
} | |
return $field_groups; | |
} | |
/** | |
* [fs_remove_trash_link description] | |
* | |
* @param [type] $trash_link [description] | |
* @return [type] [description] | |
*/ | |
public function fs_remove_trash_link( $trash_link ) { | |
if ( isset( $_GET['id'] ) ) { | |
$forms = GFAPI::get_forms(); | |
$id = intval( $_GET['id'] ); | |
if ( count( $forms ) > 0 ) { | |
foreach ( $forms as $form ) { | |
if ( $form['title'] == $this->gf_contact_form['title'] && $id == $form['id'] ) { | |
$trash_link = ''; | |
} | |
} | |
} | |
} | |
return $trash_link; | |
} | |
/** | |
* [fs_remove_field_link description] | |
* | |
* @param [type] $remove_field_link [description] | |
* @return [type] [description] | |
*/ | |
public function fs_remove_field_link( $remove_field_link ) { | |
if ( isset( $_GET['id'] ) ) { | |
$forms = GFAPI::get_forms(); | |
$id = intval( $_GET['id'] ); | |
if ( count( $forms ) > 0 ) { | |
foreach ( $forms as $form ) { | |
if ( $form['title'] == $this->gf_contact_form['title'] && $id == $form['id'] ) { | |
$remove_field_link = ''; | |
} | |
} | |
} | |
} | |
return $remove_field_link; | |
} | |
/** | |
* [fs_remove_duplicate_field_link description] | |
* | |
* @param [type] $duplicate_field_link [description] | |
* @return [type] [description] | |
*/ | |
public function fs_remove_duplicate_field_link( $duplicate_field_link ) { | |
if ( isset( $_GET['id'] ) ) { | |
$forms = GFAPI::get_forms(); | |
$id = intval( $_GET['id'] ); | |
if ( count( $forms ) > 0 ) { | |
foreach ( $forms as $form ) { | |
if ( $form['title'] == $this->gf_contact_form['title'] && $id == $form['id'] ) { | |
$duplicate_field_link = ''; | |
} | |
} | |
} | |
} | |
return $duplicate_field_link; | |
} | |
/** | |
* [fs_remove_toolbar_menu_items description] | |
* | |
* @param [type] $menu_items [description] | |
* @param [type] $id [description] | |
* @return [type] [description] | |
*/ | |
public function fs_remove_toolbar_menu_items( $menu_items, $id ) { | |
if ( isset( $_GET['id'] ) ) { | |
$forms = GFAPI::get_forms(); | |
$id = intval( $_GET['id'] ); | |
if ( count( $forms ) > 0 ) { | |
foreach ( $forms as $form ) { | |
if ( $form['title'] == $this->gf_contact_form['title'] && $id == $form['id'] ) { | |
unset( $menu_items['settings'] ); | |
unset( $menu_items['entries'] ); | |
} | |
} | |
} | |
} | |
return $menu_items; | |
} | |
/** | |
* [fs_remove_form_actions description] | |
* | |
* @param [type] $form_actions [description] | |
* @param [type] $id [description] | |
* @return [type] [description] | |
*/ | |
public function fs_remove_form_actions( $form_actions, $id ) { | |
$forms = GFAPI::get_forms(); | |
if ( count( $forms ) > 0 ) { | |
foreach ( $forms as $form ) { | |
if ( $form['title'] == $this->gf_contact_form['title'] && $id == $form['id'] ) { | |
unset( $form_actions['settings'] ); | |
unset( $form_actions['entries'] ); | |
unset( $form_actions['duplicate'] ); | |
unset( $form_actions['trash'] ); | |
} | |
} | |
} | |
return $form_actions; | |
} | |
} | |
add_action( 'admin_head', 'init_ugf' ); | |
/** | |
* [init_ugf description] | |
* | |
* @return [type] [description] | |
*/ | |
function init_ugf() { | |
$screen = get_current_screen(); | |
if ( $screen->id != 'toplevel_page_gf_edit_forms' ) { | |
return; | |
} | |
/** | |
* Added a button parameter required since v 2.6(?) to form attributes | |
*/ | |
$gf_contact_form = array ( | |
'title' => 'Contact', | |
'button' => array ( | |
'type' => 'text', | |
'text' => 'Submit', | |
'imageUrl' => '', | |
'width' => 'auto', | |
'location' => 'bottom', | |
'layoutGridColumnSpan' => 12, | |
), | |
'fields' => array ( | |
array ( | |
'id' => 1, | |
'label' => 'Name', | |
'adminLabel' => '', | |
'type' => 'name', | |
'isRequired' => true, | |
'inputs' => array ( | |
array ( | |
'id' => 1.3, | |
'label' => 'First', | |
'name' => '', | |
), | |
array ( | |
'id' => 1.6, | |
'label' => 'Last', | |
'name' => '', | |
), | |
), | |
), | |
array ( | |
'id' => 2, | |
'label' => 'Email', | |
'adminLabel' => '', | |
'type' => 'email', | |
'isRequired' => true, | |
), | |
array ( | |
'id' => 3, | |
'label' => 'Subject', | |
'adminLabel' => '', | |
'type' => 'text', | |
'isRequired' => true, | |
), | |
array ( | |
'id' => 4, | |
'label' => 'Message', | |
'adminLabel' => '', | |
'type' => 'textarea', | |
'isRequired' => true, | |
), | |
), | |
'is_active' => '1', | |
'date_created' => date( 'Y-m-d H:i:s' ), | |
); | |
$ugf = new ProgrammaticallyAddGravityForm(); | |
$ugf->SetForm( $gf_contact_form ); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment