File: /var/www/html/wp-content/plugins/complianz-gdpr/integrations/plugins/gravity-forms.php
<?php
defined( 'ABSPATH' ) or die( "you do not have access to this page!" );
/**
* Add some custom css for the recaptcha integration
*/
function cmplz_gravityforms_recaptcha_css() {
if (cmplz_get_value('block_recaptcha_service') === 'yes'){
?>
.cmplz-gf-recaptcha {
background-image:url(<?php echo cmplz_placeholder('google-recaptcha')?>) !important;
cursor:pointer;
white-space: normal;
text-transform: initial;
z-index: 98;
line-height: 23px;
height:80px !important;
background: #FFF;
border: 0;
border-radius: 3px;
box-shadow: 0 0 1px 0 rgba(0,0,0,0.5), 0 1px 10px 0 rgba(0,0,0,0.15);
display: flex;
justify-content: center;
align-items: center;
background-repeat: no-repeat !important;
background-size: cover !important;
position: relative;
}
@media only screen and (max-width: 400px) {
.cmplz-gf-recaptcha {
height: 100px !important
}
}
<?php
}
}
add_action( 'cmplz_banner_css', 'cmplz_gravityforms_recaptcha_css' );
/**
* Initialize the form after cookies have been accepted, to ensure recaptcha is enabled.
*/
function cmplz_gravifyforms_initform() {
if (cmplz_get_value('block_recaptcha_service') === 'yes'){
ob_start();
?>
<script>
//store the container where gf recaptcha resides
let recaptcha_field = document.querySelector('.ginput_recaptcha');
if (recaptcha_field) {
let reCaptchaContainer = recaptcha_field.closest('.gfield');
let html = '<span class="cmplz-gf-recaptcha cmplz-accept-marketing"><?php _e( "Click to accept reCaptcha validation.", 'complianz-gdpr' )?></span>';
reCaptchaContainer.insertAdjacentHTML('beforeend', html);
document.addEventListener("cmplz_run_after_all_scripts", cmplz_cf7_fire_post_render);
}
function cmplz_cf7_fire_post_render() {
//fire a DomContentLoaded event, so the Contact Form 7 reCaptcha integration will work
window.document.dispatchEvent(new Event("gform_post_render", {
bubbles: true,
cancelable: true
}));
let obj = document.querySelector('.cmplz-gf-recaptcha');
if (obj){
obj.parentNode.removeChild(obj)
}
}
</script>
<?php
$script = ob_get_clean();
$script = str_replace(array('<script>', '</script>'), '', $script);
wp_add_inline_script( 'cmplz-cookiebanner', $script );
}
}
add_action( 'wp_enqueue_scripts', 'cmplz_gravifyforms_initform', PHP_INT_MAX );
/**
* Add gravify forms as form type
* @param $formtypes
*
* @return mixed
*/
function cmplz_gravityforms_form_types( $formtypes ) {
$formtypes['gf_'] = 'gravity-forms';
return $formtypes;
}
add_filter( 'cmplz_form_types', 'cmplz_gravityforms_form_types' );
function cmplz_gravityforms_get_plugin_forms( $input_forms ) {
$forms = GFAPI::get_forms();
if ( is_array( $forms ) ) {
$forms = wp_list_pluck( $forms, "title", "id" );
foreach ( $forms as $id => $title ) {
$input_forms[ 'gf_' . $id ] = $title . " " . __( '(Gravity Forms)',
'complianz-gdpr' );
}
}
return $input_forms;
}
add_filter( 'cmplz_get_forms', 'cmplz_gravityforms_get_plugin_forms' );
function cmplz_gravityforms_add_consent_checkbox( $form_id ) {
$form_id = str_replace( 'gf_', '', $form_id );
$label
= __( 'To submit this form, you need to accept our Privacy Statement',
'complianz-gdpr' );
$form = GFAPI::get_form( $form_id );
$new_field_id = 1;
$complianz_field_exists = false;
foreach ( $form['fields'] as $field ) {
$field_id = $field->id;
if ( $field_id > $new_field_id ) {
$new_field_id = $field_id;
}
if ( $field->adminLabel == 'complianz_consent' ) {
$complianz_field_exists = true;
};
}
$new_field_id ++;
if ( ! $complianz_field_exists ) {
$inputs = array(
array(
'id' => $new_field_id . '.1',
'label' => __( 'Accept', 'complianz-gdpr' ),
),
);
$choices = array(
array(
'text' => __( 'Accept', 'complianz-gdpr' ),
'value' => __( 'Accept', 'complianz-gdpr' ),
'isSelected' => false,
),
);
$consent_box = new GF_Field_Checkbox();
$consent_box->label = $label;
$consent_box->adminLabel = 'complianz_consent';
$consent_box->id = $new_field_id;
$consent_box->description = '<a href="'
. COMPLIANZ::$document->get_permalink( 'privacy-statement',
'eu', true ) . '">' . __( "Privacy Statement",
"complianz-gdpr" ) . '</a>';
$consent_box->isRequired = true;
$consent_box->choices = $choices;
$consent_box->inputs = $inputs;
$consent_box->conditionalLogic = false;
$form['fields'][] = $consent_box;
GFAPI::update_form( $form );
}
}
add_action( "cmplz_add_consent_box_gravity-forms",
'cmplz_gravityforms_add_consent_checkbox' );
/**
* Update form permalink on last wizard step
* Fixes an issue where permalink is empty after checkbox has been created but wizard hasn't been completed
* @return void
*/
function cmplz_gravityforms_update_consent_checkbox() {
$forms = cmplz_get_value( 'add_consent_to_forms' );
if ( ! $forms || ! is_array( $forms ) ) {
return;
}
foreach ( $forms as $form_id => $checked ) {
// Skip when not a GF form
if ( stripos( $form_id, 'gf_' ) === false ) continue;
$form_id = str_replace( 'gf_', '', $form_id );
$form = GFAPI::get_form( $form_id );
foreach ( $form['fields'] as $field ) {
if ( $field->adminLabel === 'complianz_consent') {
$field->description = '<a href="'
. COMPLIANZ::$document->get_permalink( 'privacy-statement',
'eu', true ) . '">' . __( "Privacy Statement",
"complianz-gdpr" ) . '</a>';
}
}
GFAPI::update_form( $form );
}
}
add_action( "cmplz_wizard_last_step",
'cmplz_gravityforms_update_consent_checkbox' );