| @@ -55,9 +55,9 @@ | ||
| 55 | 55 | protected function register_sub_fields( array $sub_fields ) { |
| 56 | 56 | $defaults = $this->get_default_sub_field(); |
| 57 | 57 | |
| 58 | 58 | foreach ( $sub_fields as $name => $sub_field ) { |
| 59 | - if ( empty( $sub_field ) ) { | |
| 59 | + if ( ! $sub_field ) { | |
| 60 | 60 | continue; |
| 61 | 61 | } |
| 62 | 62 | |
| 63 | 63 | if ( is_array( $sub_field ) ) { |
| @@ -407,13 +407,15 @@ | ||
| 407 | 407 | |
| 408 | 408 | do_action( 'frm_field_input_html', $field ); |
| 409 | 409 | |
| 410 | 410 | // Print custom attributes. |
| 411 | - if ( ! empty( $sub_field['atts'] ) && is_array( $sub_field['atts'] ) ) { | |
| 412 | - foreach ( $sub_field['atts'] as $att_name => $att_value ) { | |
| 413 | - echo esc_attr( trim( $att_name ) ) . '="' . esc_attr( trim( $att_value ) ) . '" '; | |
| 414 | - } | |
| 411 | + if ( empty( $sub_field['atts'] ) || ! is_array( $sub_field['atts'] ) ) { | |
| 412 | + return; | |
| 415 | 413 | } |
| 414 | + | |
| 415 | + foreach ( $sub_field['atts'] as $att_name => $att_value ) { | |
| 416 | + echo esc_attr( trim( $att_name ) ) . '="' . esc_attr( trim( $att_value ) ) . '" '; | |
| 417 | + } | |
| 416 | 418 | } |
| 417 | 419 | |
| 418 | 420 | /** |
| 419 | 421 | * Validate field. |
| @@ -432,21 +434,19 @@ | ||
| 432 | 434 | if ( class_exists( 'FrmProEntryMeta' ) && FrmProEntryMeta::skip_required_validation( $this->field ) ) { |
| 433 | 435 | return $errors; |
| 434 | 436 | } |
| 435 | 437 | |
| 436 | - if ( class_exists( 'FrmProFieldsHelper' ) && ! FrmProFieldsHelper::is_field_visible_to_user( $this->field ) ) { | |
| 437 | - return $errors; | |
| 438 | - } | |
| 439 | - | |
| 440 | 438 | $blank_msg = FrmFieldsHelper::get_error_msg( $this->field, 'blank' ); |
| 441 | 439 | $sub_fields = $this->get_processed_sub_fields(); |
| 442 | 440 | |
| 443 | 441 | // Validate not empty. |
| 444 | 442 | foreach ( $sub_fields as $name => $sub_field ) { |
| 445 | - if ( empty( $sub_field['optional'] ) && empty( $args['value'][ $name ] ) ) { | |
| 446 | - $errors[ 'field' . $args['id'] . '-' . $name ] = ''; | |
| 447 | - $errors[ 'field' . $args['id'] ] = $blank_msg; | |
| 443 | + if ( ! empty( $sub_field['optional'] ) || ! empty( $args['value'][ $name ] ) ) { | |
| 444 | + continue; | |
| 448 | 445 | } |
| 446 | + | |
| 447 | + $errors[ 'field' . $args['id'] . '-' . $name ] = ''; | |
| 448 | + $errors[ 'field' . $args['id'] ] = $blank_msg; | |
| 449 | 449 | } |
| 450 | 450 | |
| 451 | 451 | return $errors; |
| 452 | 452 | } |
| @@ -457,15 +457,15 @@ | ||
| 457 | 457 | * @return array |
| 458 | 458 | */ |
| 459 | 459 | public function get_export_headings() { |
| 460 | 460 | $headings = array(); |
| 461 | - $field_id = $this->field->id ?? $this->field['id']; | |
| 462 | - $field_name = $this->field->name ?? $this->field['name']; | |
| 463 | - $field_key = $this->field->field_key ?? $this->field['field_key']; | |
| 461 | + $field_id = is_object( $this->field ) ? $this->field->id : $this->field['id']; | |
| 462 | + $field_name = is_object( $this->field ) ? $this->field->name : $this->field['name']; | |
| 464 | 463 | $sub_fields = $this->get_processed_sub_fields(); |
| 465 | 464 | |
| 465 | + // Include sub-field headings. | |
| 466 | 466 | foreach ( $sub_fields as $name => $sub_field ) { |
| 467 | - $headings[ $field_id . '_' . $name ] = $field_name . ' (' . $field_key . ') - ' . $sub_field['label']; | |
| 467 | + $headings[ $field_id . '_' . $name ] = $field_name . ' - ' . $sub_field['label']; | |
| 468 | 468 | } |
| 469 | 469 | |
| 470 | 470 | return $headings; |
| 471 | 471 | } |
| @@ -503,9 +503,9 @@ | ||
| 503 | 503 | * Gets inputs container attributes. |
| 504 | 504 | * |
| 505 | 505 | * @return array |
| 506 | 506 | */ |
| 507 | - protected function get_inputs_container_attrs() { | |
| 507 | + public function get_inputs_container_attrs() { | |
| 508 | 508 | return array( |
| 509 | 509 | 'class' => 'frm_combo_inputs_container', |
| 510 | 510 | 'id' => 'frm_combo_inputs_container_' . $this->field_id, |
| 511 | 511 | ); |