* @since 1.0.0 */ class CF7BS_Button extends CF7BS_Component { public function display( $echo = true ) { $output = apply_filters( 'cf7bs_bootstrap_button_display', '', $this->args ); if ( empty( $output ) ) { $output = ''; extract( $this->args ); $type = $this->validate_type( $type ); if ( is_numeric($tabindex) ) { $tabindex = intval($tabindex); } if ( ! empty( $class ) ) { $class .= ' '; } $class .= 'btn btn-' . $type; $sizes = array( 'mini' => 'xs', 'small' => 'sm', 'large' => 'lg', ); if ( isset( $sizes[ $size ] ) ) { $class .= ' btn-' . $sizes[ $size ]; } $for = ''; if ( ! empty( $id ) ) { $for = ' for="' . esc_attr( $id ) . '"'; $id = ' id="' . esc_attr( $id ) . '"'; } if ( ! empty( $name ) ) { $name = ' name="' . esc_attr( $name ) . '"'; } if ( 'checkbox' == $mode ) { if ( false === strpos( $title, 'wpcf7-free-text' ) ) { $title = esc_html( $title ); } $output .= '' . $title . ''; } elseif ( 'radio' == $mode ) { if ( false === strpos( $title, 'wpcf7-free-text' ) ) { $title = esc_html( $title ); } $output .= '' . $title . ''; } else { if ( 'none' != $form_layout ) { $wrapper_class = array(); if ( $align && 'inline' != $form_layout ) { $wrapper_class[] = 'text-' . $align; } if ( 'horizontal' == $form_layout ) { $wrapper_class[] = $this->get_column_class( $form_label_width, $form_breakpoint, $grid_columns ); } $wrapper_class = implode( ' ', $wrapper_class ); if ( ! empty( $wrapper_class ) ) { $wrapper_class = ' class="' . $wrapper_class . '"'; } if ( is_int( $tabindex ) ) { $tabindex = ' tabindex="' . $tabindex . '"'; } else { $tabindex = ''; } $output .= '
'; } $output .= ''; if ( 'none' != $form_layout ) { $output .= '
'; } } } if ( $echo ) { echo $output; } return $output; } protected function validate_args( $args, $exclude = array() ) { $exclude[] = 'tabindex'; $exclude[] = 'align'; $args = parent::validate_args( $args, $exclude ); if ( is_string( $args['align'] ) ) { $args['align'] = strtolower( $args['align'] ); } if ( ! in_array( $args['align'], array( 'left', 'center', 'right' ) ) ) { $args['align'] = false; } // type whitelist check is made later in the display() function to allow different types to use in a filter return $args; } protected function get_defaults() { $defaults = array( 'type' => 'default', 'size' => 'default', // default, large, small, mini 'mode' => 'submit', // checkbox, radio, submit 'id' => '', 'class' => '', 'title' => 'Button Title', 'name' => '', 'append' => '', // for checkbox/radio only 'value' => '', // for checkbox/radio only 'tabindex' => false, 'align' => false, 'grid_columns' => 12, 'form_layout' => 'default', // default, inline, horizontal, none 'form_label_width' => 2, 'form_breakpoint' => 'sm', ); return apply_filters( 'cf7bs_bootstrap_button_defaults', $defaults ); } private function validate_type( $type ) { $whitelist = array( 'default', 'primary', 'info', 'success', 'warning', 'danger', 'link', ); $type = strtolower( $type ); if ( ! in_array( $type, $whitelist ) ) { $type = 'default'; } return $type; } private function get_column_class( $label_column_width = 2, $breakpoint = 'sm', $grid_columns = 12 ) { if ( $label_column_width > $grid_columns - 1 || $label_column_width < 1 ) { $label_column_width = 2; } if ( ! in_array( $breakpoint, array( 'xs', 'sm', 'md', 'lg' ) ) ) { $breakpoint = 'sm'; } return 'col-' . $breakpoint . '-' . ( $grid_columns - $label_column_width ) . ' col-' . $breakpoint . '-offset-' . $label_column_width; } }