130 lines
4.8 KiB
PHP
130 lines
4.8 KiB
PHP
<?php
|
|
|
|
class MC4WP_Gravity_Forms_Field extends GF_Field {
|
|
|
|
public $type = 'mailchimp';
|
|
|
|
/**
|
|
* Returns the field markup; including field label, description, validation, and the form editor admin buttons.
|
|
*
|
|
* The {FIELD} placeholder will be replaced in GFFormDisplay::get_field_content with the markup returned by GF_Field::get_field_input().
|
|
*
|
|
* @param string|array $value The field value. From default/dynamic population, $_POST, or a resumed incomplete submission.
|
|
* @param bool $force_frontend_label Should the frontend label be displayed in the admin even if an admin label is configured.
|
|
* @param array $form The Form Object currently being processed.
|
|
*
|
|
* @return string
|
|
*/
|
|
public function get_field_content( $value, $force_frontend_label, $form ) {
|
|
$validation_message = ( $this->failed_validation && ! empty( $this->validation_message ) ) ? sprintf( "<div class='gfield_description validation_message'>%s</div>", $this->validation_message ) : '';
|
|
$is_form_editor = $this->is_form_editor();
|
|
$is_entry_detail = $this->is_entry_detail();
|
|
$is_admin = $is_form_editor || $is_entry_detail;
|
|
|
|
$admin_buttons = $this->get_admin_buttons();
|
|
|
|
$description = $this->get_description( $this->description, 'gfield_description' );
|
|
if ( $this->is_description_above( $form ) ) {
|
|
$clear = $is_admin ? "<div class='gf_clear'></div>" : '';
|
|
$field_content = sprintf( "%s%s{FIELD}%s$clear", $admin_buttons, $description, $validation_message );
|
|
} else {
|
|
$field_content = sprintf( '%s{FIELD}%s%s', $admin_buttons, $description, $validation_message );
|
|
}
|
|
|
|
return $field_content;
|
|
}
|
|
|
|
public function get_form_editor_field_title() {
|
|
return esc_attr__( 'Mailchimp for WordPress', 'mailchimp-for-wp' );
|
|
}
|
|
|
|
public function get_form_editor_field_settings() {
|
|
return array(
|
|
'label_setting',
|
|
'description_setting',
|
|
'css_class_setting',
|
|
'mailchimp_list_setting',
|
|
'mailchimp_double_optin',
|
|
'mailchimp_precheck',
|
|
'rules_setting',
|
|
);
|
|
}
|
|
|
|
public function get_field_input( $form, $value = '', $entry = null ) {
|
|
$form_id = absint( $form['id'] );
|
|
$is_entry_detail = $this->is_entry_detail();
|
|
$is_form_editor = $this->is_form_editor();
|
|
|
|
$id = $this->id;
|
|
$field_id = $is_entry_detail || $is_form_editor || 0 === (int) $form_id ? "input_$id" : 'input_' . $form_id . "_$id";
|
|
$disabled_text = $is_form_editor ? 'disabled="disabled"' : '';
|
|
|
|
return sprintf( "<div class='ginput_container ginput_container_checkbox'><ul class='gfield_checkbox' id='%s'>%s</ul></div>", esc_attr( $field_id ), $this->get_checkbox_choices( $value, $disabled_text, $form_id ) );
|
|
}
|
|
|
|
private function apply_mc4wp_options_filters( $options ) {
|
|
$options = apply_filters( 'mc4wp_gravity-forms_integration_options', $options );
|
|
$options = apply_filters( 'mc4wp_integration_gravity-forms_options', $options );
|
|
return $options;
|
|
}
|
|
|
|
|
|
public function get_checkbox_choices( $value, $disabled_text, $form_id = 0 ) {
|
|
$choices = '';
|
|
$is_entry_detail = $this->is_entry_detail();
|
|
$is_form_editor = $this->is_form_editor();
|
|
|
|
$options = array(
|
|
'label' => $this->get_field_label( false, $value ),
|
|
'precheck' => isset( $this->mailchimp_precheck ) ? $this->mailchimp_precheck : false,
|
|
);
|
|
$options = $this->apply_mc4wp_options_filters( $options );
|
|
|
|
// generate html
|
|
$choice = array(
|
|
'text' => $options['label'],
|
|
'value' => '1',
|
|
'isSelected' => $options['precheck'],
|
|
);
|
|
|
|
$input_id = $this->id;
|
|
if ( $is_entry_detail || $is_form_editor || 0 === (int) $form_id ) {
|
|
$id = $this->id;
|
|
} else {
|
|
$id = $form_id . '_' . $this->id;
|
|
}
|
|
|
|
if ( ! isset( $_GET['gf_token'] ) && empty( $_POST ) && rgar( $choice, 'isSelected' ) ) {
|
|
$checked = "checked='checked'";
|
|
} elseif ( is_array( $value ) && RGFormsModel::choice_value_match( $this, $choice, rgget( $input_id, $value ) ) ) {
|
|
$checked = "checked='checked'";
|
|
} elseif ( ! is_array( $value ) && RGFormsModel::choice_value_match( $this, $choice, $value ) ) {
|
|
$checked = "checked='checked'";
|
|
} else {
|
|
$checked = '';
|
|
}
|
|
|
|
$tabindex = $this->get_tabindex();
|
|
$choice_value = $choice['value'];
|
|
$choice_value = esc_attr( $choice_value );
|
|
$choice_markup = "<li class='gchoice_{$id}'>
|
|
<input name='input_{$input_id}' type='checkbox' value='{$choice_value}' {$checked} id='choice_{$id}' {$tabindex} {$disabled_text} />
|
|
<label for='choice_{$id}' id='label_{$id}'>{$choice['text']}</label>
|
|
</li>";
|
|
|
|
$choices .= gf_apply_filters(
|
|
array(
|
|
'gform_field_choice_markup_pre_render',
|
|
$this->formId,
|
|
$this->id,
|
|
),
|
|
$choice_markup,
|
|
$choice,
|
|
$this,
|
|
$value
|
|
);
|
|
|
|
return gf_apply_filters( array( 'gform_field_choices', $this->formId, $this->id ), $choices, $this );
|
|
}
|
|
}
|