first commit

This commit is contained in:
2023-09-12 21:41:04 +02:00
commit 3361a7f053
13284 changed files with 2116755 additions and 0 deletions

View File

@@ -0,0 +1,3 @@
<p>
<?php printf( __( 'Use this integration by adding the "Mailchimp" field to <a href="%s">your WPForms forms</a>.', 'mailchimp-for-wp' ), admin_url( 'admin.php?page=wpforms-overview' ) ); ?>
</p>

View File

@@ -0,0 +1,13 @@
<?php
mc4wp_register_integration( 'wpforms', 'MC4WP_WPForms_Integration', true );
function _mc4wp_wpforms_register_field() {
if ( ! class_exists( 'WPForms_Field' ) ) {
return;
}
new MC4WP_WPForms_Field();
}
add_action( 'init', '_mc4wp_wpforms_register_field' );

View File

@@ -0,0 +1,261 @@
<?php
/**
* Checkbox field.
*
* @package WPForms
* @author WPForms
* @since 1.0.0
* @license GPL-2.0+
* @copyright Copyright (c) 2016, WPForms LLC
*/
class MC4WP_WPForms_Field extends WPForms_Field {
/**
* Primary class constructor.
*
* @since 1.0.0
*/
public function init() {
// Define field type information
$this->name = 'Mailchimp';
$this->type = 'mailchimp';
$this->icon = 'fa-envelope-o';
$this->order = 21;
$this->defaults = array(
0 => array(
'label' => __( 'Sign-up to our newsletter?', 'mailchimp-for-wp' ),
'value' => '1',
'default' => '',
),
);
}
/**
* Field options panel inside the builder.
*
* @since 1.0.0
* @param array $field
*/
public function field_options( $field ) {
//--------------------------------------------------------------------//
// Basic field options
//--------------------------------------------------------------------//
// Options open markup
$this->field_option( 'basic-options', $field, array( 'markup' => 'open' ) );
// Mailchimp list
$this->field_option_mailchimp_list( $field );
// Choices
$this->field_option_choices( $field );
// Description
$this->field_option( 'description', $field );
// Required toggle
$this->field_option( 'required', $field );
// Options close markup
$this->field_option( 'basic-options', $field, array( 'markup' => 'close' ) );
//--------------------------------------------------------------------//
// Advanced field options
//--------------------------------------------------------------------//
// Options open markup
$this->field_option( 'advanced-options', $field, array( 'markup' => 'open' ) );
// Custom CSS classes
$this->field_option( 'css', $field );
// Options close markup
$this->field_option( 'advanced-options', $field, array( 'markup' => 'close' ) );
}
private function field_option_mailchimp_list( $field ) {
$mailchimp = new MC4WP_MailChimp();
// Field option label
$tooltip = __( 'Select the Mailchimp list to subscribe to.', 'mailchimp-for-wp' );
$option_label = $this->field_element(
'label',
$field,
array(
'slug' => 'mailchimp-list',
'value' => __( 'Mailchimp list', 'mailchimp-for-wp' ),
'tooltip' => $tooltip,
),
false
);
$option_select = sprintf( '<select name="fields[%s][mailchimp_list]" data-field-id="%d" data-field-type="%s">', $field['id'], $field['id'], $this->type );
$lists = $mailchimp->get_lists();
foreach ( $lists as $list ) {
$option_select .= sprintf( '<option value="%s" %s>%s</option>', $list->id, selected( $list->id, $field['mailchimp_list'], false ), $list->name );
}
$option_select .= '</select>';
// Field option row (markup) including label and input.
$output = $this->field_element(
'row',
$field,
array(
'slug' => 'mailchimp-list',
'content' => $option_label . $option_select,
)
);
}
private function field_option_choices( $field ) {
$tooltip = __( 'Set your sign-up label text and whether it should be pre-checked.', 'mailchimp-for-wp' );
$values = ! empty( $field['choices'] ) ? $field['choices'] : $this->defaults;
$class = ! empty( $field['show_values'] ) && (int) $field['show_values'] === 1 ? 'show-values' : '';
$class .= ! empty( $dynamic ) ? ' wpforms-hidden' : '';
// Field option label
$option_label = $this->field_element(
'label',
$field,
array(
'slug' => 'mailchimp-checkbox',
'value' => __( 'Sign-up checkbox', 'mailchimp-for-wp' ),
'tooltip' => $tooltip,
),
false
);
// Field option choices inputs
$option_choices = sprintf( '<ul class="choices-list %s" data-field-id="%d" data-field-type="%s">', $class, $field['id'], $this->type );
foreach ( $values as $key => $value ) {
$default = ! empty( $value['default'] ) ? $value['default'] : '';
$option_choices .= sprintf( '<li data-key="%d">', $key );
$option_choices .= sprintf( '<input type="checkbox" name="fields[%s][choices][%s][default]" class="default" value="1" %s>', $field['id'], $key, checked( '1', $default, false ) );
$option_choices .= sprintf( '<input type="text" name="fields[%s][choices][%s][label]" value="%s" class="label">', $field['id'], $key, esc_attr( $value['label'] ) );
$option_choices .= sprintf( '<input type="text" name="fields[%s][choices][%s][value]" value="%s" class="value">', $field['id'], $key, esc_attr( $value['value'] ) );
$option_choices .= '</li>';
}
$option_choices .= '</ul>';
// Field option row (markup) including label and input.
$output = $this->field_element(
'row',
$field,
array(
'slug' => 'choices',
'content' => $option_label . $option_choices,
)
);
}
/**
* Field preview inside the builder.
*
* @since 1.0.0
* @param array $field
*/
public function field_preview( $field ) {
$values = ! empty( $field['choices'] ) ? $field['choices'] : $this->defaults;
// Field checkbox elements
echo '<ul class="primary-input">';
// Notify if currently empty
if ( empty( $values ) ) {
$values = array( 'label' => __( '(empty)', 'wpforms' ) );
}
// Individual checkbox options
foreach ( $values as $key => $value ) {
$default = isset( $value['default'] ) ? $value['default'] : '';
$selected = checked( '1', $default, false );
printf( '<li><input type="checkbox" %s disabled>%s</li>', $selected, $value['label'] );
}
echo '</ul>';
// Dynamic population is enabled and contains more than 20 items
if ( isset( $total ) && $total > 20 ) {
echo '<div class="wpforms-alert-dynamic wpforms-alert wpforms-alert-warning">';
printf( __( 'Showing the first 20 choices.<br> All %d choices will be displayed when viewing the form.', 'wpforms' ), absint( $total ) );
echo '</div>';
}
// Description
$this->field_preview_option( 'description', $field );
}
/**
* Field display on the form front-end.
*
* @since 1.0.0
* @param array $field
* @param array $form_data
*/
public function field_display( $field, $field_atts, $form_data ) {
// Setup and sanitize the necessary data
$field_required = ! empty( $field['required'] ) ? ' required' : '';
$field_class = implode( ' ', array_map( 'sanitize_html_class', $field_atts['input_class'] ) );
$field_id = implode( ' ', array_map( 'sanitize_html_class', $field_atts['input_id'] ) );
$form_id = $form_data['id'];
$choices = $field['choices'];
// List
printf( '<ul id="%s" class="%s">', $field_id, $field_class );
foreach ( $choices as $key => $choice ) {
$selected = isset( $choice['default'] ) ? '1' : '0';
$depth = isset( $choice['depth'] ) ? absint( $choice['depth'] ) : 1;
printf( '<li class="choice-%d depth-%d">', $key, $depth );
// Checkbox elements
printf(
'<input type="checkbox" id="wpforms-%d-field_%d_%d" name="wpforms[fields][%d]" value="%s" %s %s>',
$form_id,
$field['id'],
$key,
$field['id'],
esc_attr( $choice['value'] ),
checked( '1', $selected, false ),
$field_required
);
printf( '<label class="wpforms-field-label-inline" for="wpforms-%d-field_%d_%d">%s</label>', $form_id, $field['id'], $key, wp_kses_post( $choice['label'] ) );
echo '</li>';
}
echo '</ul>';
}
/**
* Formats and sanitizes field.
*
* @since 1.0.2
* @param int $field_id
* @param array $field_submit
* @param array $form_data
*/
public function format( $field_id, $field_submit, $form_data ) {
$field = $form_data['fields'][ $field_id ];
$choice = array_pop( $field['choices'] );
$name = sanitize_text_field( $choice['label'] );
$data = array(
'name' => $name,
'value' => empty( $field_submit ) ? __( 'No', 'mailchimp-for-wp' ) : __( 'Yes', 'mailchimp-for-wp' ),
'value_raw' => $field_submit,
'id' => absint( $field_id ),
'type' => $this->type,
);
wpforms()->process->fields[ $field_id ] = $data;
}
}

View File

@@ -0,0 +1,76 @@
<?php
defined( 'ABSPATH' ) or exit;
/**
* Class MC4WP_WPForms_Integration
*
* @ignore
*/
class MC4WP_WPForms_Integration extends MC4WP_Integration {
/**
* @var string
*/
public $name = 'WPForms';
/**
* @var string
*/
public $description = 'Subscribe visitors from your WPForms forms.';
/**
* Add hooks
*/
public function add_hooks() {
add_action( 'wpforms_process', array( $this, 'listen_to_wpforms' ), 20, 3 );
}
/**
* @return bool
*/
public function is_installed() {
return defined( 'WPFORMS_VERSION' );
}
/**
* @since 3.0
* @return array
*/
public function get_ui_elements() {
return array();
}
public function listen_to_wpforms( $fields, $entry, $form_data ) {
foreach ( $fields as $field_id => $field ) {
if ( $field['type'] === 'mailchimp' && (int) $field['value_raw'] === 1 ) {
return $this->subscribe_from_wpforms( $field_id, $fields, $form_data );
}
}
}
public function subscribe_from_wpforms( $checkbox_field_id, $fields, $form_data ) {
foreach ( $fields as $field ) {
if ( $field['type'] === 'email' ) {
$email_address = $field['value'];
}
}
$mailchimp_list_id = $form_data['fields'][ $checkbox_field_id ]['mailchimp_list'];
$this->options['lists'] = array( $mailchimp_list_id );
if ( ! empty( $email_address ) ) {
return $this->subscribe( array( 'EMAIL' => $email_address ), $form_data['id'] );
}
}
/**
* @param int $form_id
* @return string
*/
public function get_object_link( $form_id ) {
return '<a href="' . admin_url( sprintf( 'admin.php?page=wpforms-builder&view=fields&form_id=%d', $form_id ) ) . '">WPForms</a>';
}
}