146 lines
4.4 KiB
PHP
146 lines
4.4 KiB
PHP
<?php
|
|
|
|
defined('ABSPATH') or exit;
|
|
|
|
/**
|
|
* Class MC4WP_Ninja_Forms_Integration
|
|
*
|
|
* @ignore
|
|
*/
|
|
class MC4WP_Gravity_Forms_Integration extends MC4WP_Integration
|
|
{
|
|
|
|
/**
|
|
* @var string
|
|
*/
|
|
public $name = "Gravity Forms";
|
|
|
|
/**
|
|
* @var string
|
|
*/
|
|
public $description = "Subscribe visitors from your Gravity Forms forms.";
|
|
|
|
|
|
/**
|
|
* Add hooks
|
|
*/
|
|
public function add_hooks()
|
|
{
|
|
add_action('gform_field_standard_settings', array( $this, 'settings_fields' ), 10, 2);
|
|
add_action('gform_editor_js', array( $this, 'editor_js' ));
|
|
add_action('gform_after_submission', array( $this, 'after_submission' ), 10, 2);
|
|
}
|
|
|
|
public function after_submission($submission, $form)
|
|
{
|
|
$subscribe = false;
|
|
$email_address = '';
|
|
$mailchimp_list_id = '';
|
|
$double_optin = $this->options['double_optin'];
|
|
|
|
// find email field & checkbox value
|
|
foreach ($form['fields'] as $field) {
|
|
if ($field->type === 'email' && empty($email_address) && ! empty($submission[ $field->id ])) {
|
|
$email_address = $submission[ $field->id ];
|
|
}
|
|
|
|
if ($field->type === 'mailchimp' && ! empty($submission[ $field->id ])) {
|
|
$subscribe = true;
|
|
$mailchimp_list_id = $field->mailchimp_list;
|
|
|
|
if (isset($field->mailchimp_double_optin)) {
|
|
$double_optin = $field->mailchimp_double_optin;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (! $subscribe || empty($email_address)) {
|
|
return;
|
|
}
|
|
|
|
// override integration settings with field options
|
|
$orig_options = $this->options;
|
|
$this->options['lists'] = array( $mailchimp_list_id );
|
|
$this->options['double_optin'] = $double_optin;
|
|
|
|
// perform the sign-up
|
|
$this->subscribe(array( 'EMAIL' => $email_address ), $submission['form_id']);
|
|
|
|
// revert back to original options in case request lives on
|
|
$this->options = $orig_options;
|
|
}
|
|
|
|
public function editor_js()
|
|
{
|
|
?>
|
|
<script type="text/javascript">
|
|
/*
|
|
* When the field settings are initialized, populate
|
|
* the custom field setting.
|
|
*/
|
|
jQuery(document).on('gform_load_field_settings', function(ev, field) {
|
|
jQuery('#field_mailchimp_list').val(field.mailchimp_list || '');
|
|
jQuery('#field_mailchimp_double_optin').val(field.mailchimp_double_optin || "1");
|
|
});
|
|
</script>
|
|
<?php
|
|
}
|
|
|
|
public function settings_fields($pos, $form_id)
|
|
{
|
|
if ($pos !== 0) {
|
|
return;
|
|
}
|
|
|
|
$mailchimp = new MC4WP_MailChimp();
|
|
$lists = $mailchimp->get_lists(); ?>
|
|
<li class="mailchimp_list_setting field_setting">
|
|
<label for="field_mailchimp_list" class="section_label">
|
|
<?php esc_html_e('Mailchimp list', 'mailchimp-for-wp'); ?>
|
|
</label>
|
|
<select id="field_mailchimp_list" onchange="SetFieldProperty('mailchimp_list', this.value)">
|
|
<option value="" disabled><?php _e('Select a Mailchimp list', 'mailchimp-for-wp'); ?></option>
|
|
<?php foreach ($lists as $list) {
|
|
echo sprintf('<option value="%s">%s</option>', $list->id, $list->name);
|
|
} ?>
|
|
</select>
|
|
</li>
|
|
<li class="mailchimp_double_optin field_setting">
|
|
<label for="field_mailchimp_double_optin" class="section_label">
|
|
<?php esc_html_e('Double opt-in?', 'mailchimp-for-wp'); ?>
|
|
</label>
|
|
<select id="field_mailchimp_double_optin" onchange="SetFieldProperty('mailchimp_double_optin', this.value)">
|
|
<option value="1"><?php echo __('Yes'); ?></option>
|
|
<option value="0"><?php echo __('No'); ?></option>
|
|
</select>
|
|
</li>
|
|
<?php
|
|
}
|
|
|
|
/**
|
|
* @return bool
|
|
*/
|
|
public function is_installed()
|
|
{
|
|
return class_exists('GF_Field') && class_exists('GF_Fields');
|
|
}
|
|
|
|
/**
|
|
* @since 3.0
|
|
* @return array
|
|
*/
|
|
public function get_ui_elements()
|
|
{
|
|
return array();
|
|
}
|
|
|
|
/**
|
|
* @param int $form_id
|
|
* @return string
|
|
*/
|
|
public function get_object_link($form_id)
|
|
{
|
|
return '<a href="'. admin_url(sprintf('admin.php?page=gf_edit_forms&id=%d', $form_id)) . '">Gravity Forms</a>';
|
|
}
|
|
}
|