form = $form;
$this->ID = $ID;
$this->config = $config;
$this->is_submitted = $this->form->is_submitted
&& $this->form->config['element_id'] == $this->ID;
}
/**
* @return string
*/
protected function get_visible_fields() {
$content = $this->form->content;
$form = $this->form;
$element = $this;
/**
* Filters the HTML for the form fields.
*
* Use this filter to add custom HTML to a form programmatically
*
* @param string $content
* @param MC4WP_Form $form
* @param MC4WP_Form_Element $element
* @since 2.0
*/
$visible_fields = (string) apply_filters( 'mc4wp_form_content', $content, $form, $element );
return $visible_fields;
}
/**
* @return string
*/
protected function get_hidden_fields() {
// hidden fields
$hidden_fields = '';
$hidden_fields .= '';
$hidden_fields .= '';
$hidden_fields .= '';
// was "lists" parameter passed in shortcode arguments?
if( ! empty( $this->config['lists'] ) ) {
$lists_string = is_array( $this->config['lists'] ) ? join( ',', $this->config['lists'] ) : $this->config['lists'];
$hidden_fields .= '';
}
// was "lists" parameter passed in shortcode arguments?
if( ! empty( $this->config['email_type'] ) ) {
$hidden_fields .= '';
}
return (string) $hidden_fields;
}
/**
* Get HTML string for a notice, including wrapper element.
*
* @param MC4WP_Form_Notice $notice
*
* @return string
*/
protected function get_notice_html( MC4WP_Form_Notice $notice ) {
$html = sprintf( '
%s
', esc_attr( $notice->type ), $notice->text );
return $html;
}
/**
* Gets the form response string
*
* @param boolean $force_show
* @return string
*/
public function get_response_html( $force_show = false ) {
$html = '';
$form = $this->form;
if( $this->is_submitted || $force_show ) {
foreach( $this->form->notices as $notice ) {
$html .= $this->get_notice_html( $notice );
}
}
/**
* Filter the form response HTML
*
* Use this to add your own HTML to the form response. The form instance is passed to the callback function.
*
* @since 3.0
*
* @param string $html The complete HTML string of the response, excluding the wrapper element.
* @param MC4WP_Form $form The form object
*/
$html = (string) apply_filters( 'mc4wp_form_response_html', $html, $form );
// wrap entire response in div, regardless of a form was submitted
$html = '
' . $html . '
';
return $html;
}
/**
* @return string
*/
protected function get_response_position() {
$position = 'after';
$form = $this->form;
// check if content contains {response} tag
if( stripos( $this->form->content, '{response}' ) !== false ) {
return '';
}
/**
* Filters the position for the form response.
*
* Valid values are "before" and "after". Will have no effect if `{response}` is used in the form content.
*
* @param string $position
* @param MC4WP_Form $form
* @since 2.0
*/
$response_position = (string) apply_filters( 'mc4wp_form_response_position', $position, $form );
return $response_position;
}
/**
* Get HTML to be added _before_ the HTML of the form fields.
*
* @return string
*/
protected function get_html_before_fields() {
$html = '';
$form = $this->form;
/**
* Filters the HTML before the form fields.
*
* @param string $html
* @param MC4WP_Form $form
* @ignore
*/
$html = (string) apply_filters( 'mc4wp_form_before_fields', $html, $form );
if( $this->get_response_position() === 'before' ) {
$html = $html . $this->get_response_html();
}
return $html;
}
/**
* Get HTML to be added _after_ the HTML of the form fields.
*
* @return string
*/
protected function get_html_after_fields() {
$html = '';
$form = $this->form;
/**
* Filters the HTML after the form fields.
*
* @param string $html
* @param MC4WP_Form $form
* @ignore
*/
$html = (string) apply_filters( 'mc4wp_form_after_fields', $html, $form );
if( $this->get_response_position() === 'after' ) {
$html = $this->get_response_html() . $html;
}
return $html;
}
/**
* Get all HTMl attributes for the form element
*
* @return string
*/
protected function get_form_element_attributes() {
$form = $this;
$form_action_attribute = null;
$attributes = array(
'id' => $this->ID,
'class' => $this->get_css_classes()
);
/**
* Filters the `action` attribute of the `';
if( ! $this->is_submitted
|| ! $this->form->settings['hide_after_success']
|| $this->form->has_errors()) {
// add HTML for fields + wrapper element.
$fields = '
' .
$this->get_visible_fields() .
'
' .
$this->get_hidden_fields();
}
// concatenate everything
$output = $opening_html .
$before_fields .
$fields .
$after_fields .
$closing_html;
return $output;
}
/**
* Get a space separated list of CSS classes for this form
*
* @return string
*/
protected function get_css_classes() {
$classes = array();
$form = $this->form;
$classes[] = 'mc4wp-form';
$classes[] = 'mc4wp-form-' . $form->ID;
// Add form classes if this specific form element was submitted
if( $this->is_submitted ) {
$classes[] = 'mc4wp-form-submitted';
if( ! $form->has_errors() ) {
$classes[] = 'mc4wp-form-success';
} else {
$classes[] = 'mc4wp-form-error';
}
}
// add class for CSS targeting in custom stylesheets
if( ! empty( $form->settings['css'] ) ) {
if( strpos( $form->settings['css'], 'theme-' ) === 0 ) {
$classes[] = 'mc4wp-form-theme';
}
$classes[] = 'mc4wp-form-' . $form->settings['css'];
}
// add classes from config array
if( ! empty( $this->config['element_class'] ) ) {
$classes = array_merge( $classes, explode( ' ', $this->config['element_class'] ) );
}
/**
* Filters `class` attributes for the `