--- a/weforms/assets/js-templates/spa-components.php
+++ b/weforms/assets/js-templates/spa-components.php
@@ -77,7 +77,7 @@
<th scope="row" class="check-column">
<input type="checkbox" name="post[]" v-model="checkedItems" :value="entry.id">
</th>
- <td v-for="(header, index) in columns"><span v-html="entry.fields[index]"></span></td>
+ <td v-for="(header, index) in columns"><span>{{ entry.fields[index] }}</span></td>
<th class="col-entry-details">
<template v-if="status == 'trash'">
<a href="#" @click.prevent="restore(entry.id)"><?php esc_html_e( 'Restore', 'weforms' ); ?></a>
@@ -96,7 +96,7 @@
<th scope="row" class="check-column">
<input type="checkbox" name="post[]" v-model="checkedItems" :value="entry.id">
</th>
- <td v-for="(header, index) in columns"><span v-html="entry.fields[index]"></span></td>
+ <td v-for="(header, index) in columns"><span>{{ entry.fields[index] }}</span></td>
<th class="col-entry-details">
<template v-if="status == 'trash'">
<a href="#" @click.prevent="restore(entry.id)"><?php esc_html_e( 'Restore', 'weforms' ); ?></a>
@@ -425,7 +425,9 @@
</div>
<div v-else-if="field.type === 'country_list_field'">{{ getCountryName( field.value ) }}</div>
<div v-else-if="field.type === 'address_field'" v-html="getAddressFieldValue( field.value)"></div>
- <div v-else v-html="field.value"></div>
+ <div v-else-if="field.type === 'textarea_field'" v-html="field.value"></div>
+ <div v-else-if="field.type === 'image_upload' || field.type === 'file_upload' || field.type === 'signature_field' || field.type === 'checkbox_grid' || field.type === 'multiple_choice_grid' || field.type === 'multiple_product'" v-html="field.value"></div>
+ <div v-else>{{ field.value }}</div>
</td>
</tr>
</template>
--- a/weforms/includes/api/class-weforms-forms-controller.php
+++ b/weforms/includes/api/class-weforms-forms-controller.php
@@ -255,7 +255,7 @@
$entry_fields = [];
foreach ( $form_fields as $key => $field ) {
- if ( $field['wpuf_cond']['condition_status'] == 'yes' ) {
+ if ( ! empty( $field['wpuf_cond'] ) && $field['wpuf_cond']['condition_status'] == 'yes' ) {
$logic = [];
$cond_fields = $field['wpuf_cond']['cond_field'];
$cond_operators = $field['wpuf_cond']['cond_operator'];
--- a/weforms/includes/class-form-entry.php
+++ b/weforms/includes/class-form-entry.php
@@ -108,6 +108,22 @@
$grid_css_added = false;
$grid_css = '<style>.wpufTable {display: table; width: 100%; } .wpufTableRow {display: table-row; } .wpufTableRow:nth-child(even) {background-color: #f5f5f5; } .wpufTableHeading {background-color: #eee; display: table-header-group; font-weight: bold; } .wpufTableCell, .wpufTableHead {border: none; display: table-cell; padding: 3px 10px; } .wpufTableFoot {background-color: #eee; display: table-footer-group; font-weight: bold; } .wpufTableBody {display: table-row-group; }</style>';
+ // Custom allowlist for grid field HTML: wp_kses_post() strips <style> and <input>,
+ // but all dynamic values are already escaped (esc_html/esc_attr) at construction time.
+ $grid_kses_allowed = array(
+ 'style' => array(),
+ 'div' => array( 'class' => true ),
+ 'label' => array( 'class' => true ),
+ 'input' => array(
+ 'name' => true,
+ 'class' => true,
+ 'type' => true,
+ 'value' => true,
+ 'checked' => true,
+ 'disabled' => true,
+ ),
+ );
+
$values = [];
$query = $wpdb->prepare(
@@ -142,7 +158,7 @@
$this->raw_fields[ $result->meta_key ]['value'] = $value;
if ( $field['type'] == 'textarea_field' ) {
- $value = weforms_format_text( $value );
+ $value = wp_kses_post( weforms_format_text( $value ) );
} elseif ( $field['type'] == 'name_field' ) {
$value = implode( ' ', explode( WeForms::$field_separator, $value ) );
} elseif ( in_array( $field['type'], [ 'dropdown_field', 'radio_field' ] ) ) {
@@ -180,16 +196,16 @@
if ( $field['type'] == 'image_upload' ) {
$thumb = wp_get_attachment_image( $attachment_id, 'thumbnail' );
} else {
- $thumb = get_post_field( 'post_title', $attachment_id );
+ $thumb = esc_html( get_post_field( 'post_title', $attachment_id ) );
}
- $full_size = wp_get_attachment_url( $attachment_id );
+ $full_size = esc_url( wp_get_attachment_url( $attachment_id ) );
- $file_field .= sprintf( '<a href="%s" target="_blank">%s</a> ', $full_size, $thumb );
+ $file_field .= sprintf( '<a href="%s" target="_blank" rel="noopener noreferrer">%s</a> ', $full_size, $thumb );
}
}
- $value = $file_field;
+ $value = wp_kses_post( $file_field );
} elseif ( $field['type'] == 'google_map' ) {
list( $address, $lat, $long ) = explode( '||', $value );
@@ -221,7 +237,7 @@
}
}
- $value = implode( '<br> <br> ', $serialized_value );
+ $value = wp_kses_post( implode( '<br> <br> ', $serialized_value ) );
}
} elseif ( $field['type'] == 'checkbox_grid' ) {
// Security fix: Prevent PHP Object Injection by restricting allowed classes
@@ -251,7 +267,7 @@
<div class="wpufTableHead"> </div>';
foreach ( $field['grid_columns'] as $column ) {
- $return .= '<div class="wpufTableHead">' . $column . '</div>';
+ $return .= '<div class="wpufTableHead">' . esc_html( $column ) . '</div>';
}
$return .= '</div>
@@ -260,7 +276,7 @@
foreach ( $field['grid_rows'] as $row_key => $row_value ) {
$return .= '<div class="wpufTableRow">
- <div class="wpufTableHead">' . $row_value . '</div>';
+ <div class="wpufTableHead">' . esc_html( $row_value ) . '</div>';
foreach ( $field['grid_columns'] as $column_key => $column_value ) {
if ( isset( $new_val[ $row_key ] ) ) {
@@ -287,7 +303,7 @@
</div>';
}
- $value = $return;
+ $value = wp_kses( $return, $grid_kses_allowed );
}
} elseif ( $field['type'] == 'multiple_choice_grid' ) {
// Security fix: Prevent PHP Object Injection by restricting allowed classes
@@ -317,7 +333,7 @@
<div class="wpufTableHead"> </div>';
foreach ( $field['grid_columns'] as $column ) {
- $return .= '<div class="wpufTableHead">' . $column . '</div>';
+ $return .= '<div class="wpufTableHead">' . esc_html( $column ) . '</div>';
}
$return .= '</div>
@@ -326,7 +342,7 @@
foreach ( $field['grid_rows'] as $row_key => $row_value ) {
$return .= '<div class="wpufTableRow">
- <div class="wpufTableHead">' . $row_value . '</div>';
+ <div class="wpufTableHead">' . esc_html( $row_value ) . '</div>';
foreach ( $field['grid_columns'] as $column_key => $column_value ) {
if ( isset( $new_val[ $row_key ] ) ) {
@@ -353,7 +369,7 @@
</div>';
}
- $value = $return;
+ $value = wp_kses( $return, $grid_kses_allowed );
}
} elseif ( $field['type'] == 'address_field' || is_serialized( $value ) ) {
// Security fix: Prevent PHP Object Injection by restricting allowed classes
@@ -373,16 +389,15 @@
$value = implode( '<br> ', $serialized_value );
}
} elseif ( $field['type'] == 'signature_field' ) {
- $url = $value;
-
- if ( isset( $_REQUEST['action'] ) != 'weforms_pdf_download' ) {
- $url = content_url() . '/' . $value;
+ if ( ! isset( $_REQUEST['action'] ) || $_REQUEST['action'] !== 'weforms_pdf_download' ) {
+ $url = esc_url( content_url() . '/' . $value );
$value = sprintf( '<img src="%s">', $url );
$value .= sprintf( '<a style="margin-left: -200px" href="%s">Download</a>', $url );
- }
- else{
+ } else {
+ $url = esc_url( $value );
$value = sprintf( '<img src="%s">', $url );
}
+ $value = wp_kses_post( $value );
}
$this->fields[ $result->meta_key ]['value'] = apply_filters( 'weforms_entry_meta_field', $value, $field );
--- a/weforms/includes/class-form.php
+++ b/weforms/includes/class-form.php
@@ -433,7 +433,6 @@
public function get_changed_fields( $form_fields ) {
$changed_fields = array();
foreach ( $form_fields as $field ) {
- $org_field = $field['original_name'];
// All form fields should have an original name.
if ( empty( $field['original_name'] ) ) {
continue;
--- a/weforms/includes/class-notification.php
+++ b/weforms/includes/class-notification.php
@@ -602,6 +602,7 @@
* @return string
*/
public static function replace_file_tags( $text, $entry_id ) {
+ $text = $text ?? '';
$pattern = '/{(?:image|file):(w*)}/';
preg_match_all( $pattern, $text, $matches );
@@ -614,17 +615,10 @@
foreach ( $matches[1] as $index => $meta_key ) {
$meta_value = weforms_get_entry_meta( $entry_id, $meta_key, true );
- $files = [];
+ $files = [];
+ $attachments = is_array( $meta_value ) ? $meta_value : array( $meta_value );
- if ( is_array( $meta_value ) ) {
- foreach ( $meta_value as $key => $attachment_id ) {
- $file_url = wp_get_attachment_url( $attachment_id );
-
- if ( $file_url ) {
- $files[] = $file_url;
- }
- }
- } else {
+ foreach ( $attachments as $attachment_id ) {
$file_url = wp_get_attachment_url( $attachment_id );
if ( $file_url ) {
--- a/weforms/includes/fields/class-abstract-fields.php
+++ b/weforms/includes/fields/class-abstract-fields.php
@@ -531,21 +531,32 @@
* @return mixed
*/
public function prepare_entry( $field, $args = [] ) {
- if( empty( $_POST['_wpnonce'] ) ) {
- wp_send_json_error( __( 'Unauthorized operation', 'weforms' ) );
+ if ( $args instanceof WP_REST_Request ) {
+ $nonce = $args->get_param( '_wpnonce' );
+ } else {
+ $nonce = isset( $_POST['_wpnonce'] ) ? $_POST['_wpnonce'] : '';
+ }
+
+ if ( empty( $nonce ) ) {
+ wp_send_json_error( __( 'Unauthorized operation', 'weforms' ) );
}
- if ( ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['_wpnonce'] ) ), 'wpuf_form_add' ) ) {
+ if ( ! wp_verify_nonce( sanitize_text_field( wp_unslash( $nonce ) ), 'wpuf_form_add' ) ) {
wp_send_json_error( __( 'Unauthorized operation', 'weforms' ) );
}
- $args = ! empty( $args ) ? $args : weforms_clean( $_POST );
- $value = !empty( $args[$field['name']] ) ? $args[$field['name']] : '';
+ if ( $args instanceof WP_REST_Request ) {
+ $args = weforms_clean( $args->get_params() );
+ } elseif ( empty( $args ) ) {
+ $args = weforms_clean( $_POST );
+ }
+
+ $value = ! empty( $args[ $field['name'] ] ) ? $args[ $field['name'] ] : '';
if ( is_array( $value ) ) {
- $entry_value = implode( WeForms::$field_separator, $args[$field['name']] );
+ $entry_value = implode( WeForms::$field_separator, $value );
} else {
- $entry_value = trim( $value );
+ $entry_value = sanitize_textarea_field( trim( $value ) );
}
return $entry_value;
--- a/weforms/includes/functions.php
+++ b/weforms/includes/functions.php
@@ -621,7 +621,7 @@
}
$data[ $field['name'] ] = [
- 'label' => $field['label'],
+ 'label' => $field['label'] ?? '',
'type' => $field['template'],
];
}
@@ -715,6 +715,7 @@
$bname = 'Unknown';
$platform = 'Unknown';
$version = '';
+ $ub = '';
// first get the platform
if ( preg_match( '/linux/i', $u_agent ) ) {
--- a/weforms/trunk/assets/js-templates/spa-components.php
+++ b/weforms/trunk/assets/js-templates/spa-components.php
@@ -77,7 +77,7 @@
<th scope="row" class="check-column">
<input type="checkbox" name="post[]" v-model="checkedItems" :value="entry.id">
</th>
- <td v-for="(header, index) in columns"><span v-html="entry.fields[index]"></span></td>
+ <td v-for="(header, index) in columns"><span>{{ entry.fields[index] }}</span></td>
<th class="col-entry-details">
<template v-if="status == 'trash'">
<a href="#" @click.prevent="restore(entry.id)"><?php esc_html_e( 'Restore', 'weforms' ); ?></a>
@@ -96,7 +96,7 @@
<th scope="row" class="check-column">
<input type="checkbox" name="post[]" v-model="checkedItems" :value="entry.id">
</th>
- <td v-for="(header, index) in columns"><span v-html="entry.fields[index]"></span></td>
+ <td v-for="(header, index) in columns"><span>{{ entry.fields[index] }}</span></td>
<th class="col-entry-details">
<template v-if="status == 'trash'">
<a href="#" @click.prevent="restore(entry.id)"><?php esc_html_e( 'Restore', 'weforms' ); ?></a>
@@ -425,7 +425,9 @@
</div>
<div v-else-if="field.type === 'country_list_field'">{{ getCountryName( field.value ) }}</div>
<div v-else-if="field.type === 'address_field'" v-html="getAddressFieldValue( field.value)"></div>
- <div v-else v-html="field.value"></div>
+ <div v-else-if="field.type === 'textarea_field'" v-html="field.value"></div>
+ <div v-else-if="field.type === 'image_upload' || field.type === 'file_upload' || field.type === 'signature_field' || field.type === 'checkbox_grid' || field.type === 'multiple_choice_grid' || field.type === 'multiple_product'" v-html="field.value"></div>
+ <div v-else>{{ field.value }}</div>
</td>
</tr>
</template>
--- a/weforms/trunk/includes/api/class-weforms-forms-controller.php
+++ b/weforms/trunk/includes/api/class-weforms-forms-controller.php
@@ -255,7 +255,7 @@
$entry_fields = [];
foreach ( $form_fields as $key => $field ) {
- if ( $field['wpuf_cond']['condition_status'] == 'yes' ) {
+ if ( ! empty( $field['wpuf_cond'] ) && $field['wpuf_cond']['condition_status'] == 'yes' ) {
$logic = [];
$cond_fields = $field['wpuf_cond']['cond_field'];
$cond_operators = $field['wpuf_cond']['cond_operator'];
--- a/weforms/trunk/includes/class-form-entry.php
+++ b/weforms/trunk/includes/class-form-entry.php
@@ -108,6 +108,22 @@
$grid_css_added = false;
$grid_css = '<style>.wpufTable {display: table; width: 100%; } .wpufTableRow {display: table-row; } .wpufTableRow:nth-child(even) {background-color: #f5f5f5; } .wpufTableHeading {background-color: #eee; display: table-header-group; font-weight: bold; } .wpufTableCell, .wpufTableHead {border: none; display: table-cell; padding: 3px 10px; } .wpufTableFoot {background-color: #eee; display: table-footer-group; font-weight: bold; } .wpufTableBody {display: table-row-group; }</style>';
+ // Custom allowlist for grid field HTML: wp_kses_post() strips <style> and <input>,
+ // but all dynamic values are already escaped (esc_html/esc_attr) at construction time.
+ $grid_kses_allowed = array(
+ 'style' => array(),
+ 'div' => array( 'class' => true ),
+ 'label' => array( 'class' => true ),
+ 'input' => array(
+ 'name' => true,
+ 'class' => true,
+ 'type' => true,
+ 'value' => true,
+ 'checked' => true,
+ 'disabled' => true,
+ ),
+ );
+
$values = [];
$query = $wpdb->prepare(
@@ -142,7 +158,7 @@
$this->raw_fields[ $result->meta_key ]['value'] = $value;
if ( $field['type'] == 'textarea_field' ) {
- $value = weforms_format_text( $value );
+ $value = wp_kses_post( weforms_format_text( $value ) );
} elseif ( $field['type'] == 'name_field' ) {
$value = implode( ' ', explode( WeForms::$field_separator, $value ) );
} elseif ( in_array( $field['type'], [ 'dropdown_field', 'radio_field' ] ) ) {
@@ -180,16 +196,16 @@
if ( $field['type'] == 'image_upload' ) {
$thumb = wp_get_attachment_image( $attachment_id, 'thumbnail' );
} else {
- $thumb = get_post_field( 'post_title', $attachment_id );
+ $thumb = esc_html( get_post_field( 'post_title', $attachment_id ) );
}
- $full_size = wp_get_attachment_url( $attachment_id );
+ $full_size = esc_url( wp_get_attachment_url( $attachment_id ) );
- $file_field .= sprintf( '<a href="%s" target="_blank">%s</a> ', $full_size, $thumb );
+ $file_field .= sprintf( '<a href="%s" target="_blank" rel="noopener noreferrer">%s</a> ', $full_size, $thumb );
}
}
- $value = $file_field;
+ $value = wp_kses_post( $file_field );
} elseif ( $field['type'] == 'google_map' ) {
list( $address, $lat, $long ) = explode( '||', $value );
@@ -221,7 +237,7 @@
}
}
- $value = implode( '<br> <br> ', $serialized_value );
+ $value = wp_kses_post( implode( '<br> <br> ', $serialized_value ) );
}
} elseif ( $field['type'] == 'checkbox_grid' ) {
// Security fix: Prevent PHP Object Injection by restricting allowed classes
@@ -251,7 +267,7 @@
<div class="wpufTableHead"> </div>';
foreach ( $field['grid_columns'] as $column ) {
- $return .= '<div class="wpufTableHead">' . $column . '</div>';
+ $return .= '<div class="wpufTableHead">' . esc_html( $column ) . '</div>';
}
$return .= '</div>
@@ -260,7 +276,7 @@
foreach ( $field['grid_rows'] as $row_key => $row_value ) {
$return .= '<div class="wpufTableRow">
- <div class="wpufTableHead">' . $row_value . '</div>';
+ <div class="wpufTableHead">' . esc_html( $row_value ) . '</div>';
foreach ( $field['grid_columns'] as $column_key => $column_value ) {
if ( isset( $new_val[ $row_key ] ) ) {
@@ -287,7 +303,7 @@
</div>';
}
- $value = $return;
+ $value = wp_kses( $return, $grid_kses_allowed );
}
} elseif ( $field['type'] == 'multiple_choice_grid' ) {
// Security fix: Prevent PHP Object Injection by restricting allowed classes
@@ -317,7 +333,7 @@
<div class="wpufTableHead"> </div>';
foreach ( $field['grid_columns'] as $column ) {
- $return .= '<div class="wpufTableHead">' . $column . '</div>';
+ $return .= '<div class="wpufTableHead">' . esc_html( $column ) . '</div>';
}
$return .= '</div>
@@ -326,7 +342,7 @@
foreach ( $field['grid_rows'] as $row_key => $row_value ) {
$return .= '<div class="wpufTableRow">
- <div class="wpufTableHead">' . $row_value . '</div>';
+ <div class="wpufTableHead">' . esc_html( $row_value ) . '</div>';
foreach ( $field['grid_columns'] as $column_key => $column_value ) {
if ( isset( $new_val[ $row_key ] ) ) {
@@ -353,7 +369,7 @@
</div>';
}
- $value = $return;
+ $value = wp_kses( $return, $grid_kses_allowed );
}
} elseif ( $field['type'] == 'address_field' || is_serialized( $value ) ) {
// Security fix: Prevent PHP Object Injection by restricting allowed classes
@@ -373,16 +389,15 @@
$value = implode( '<br> ', $serialized_value );
}
} elseif ( $field['type'] == 'signature_field' ) {
- $url = $value;
-
- if ( isset( $_REQUEST['action'] ) != 'weforms_pdf_download' ) {
- $url = content_url() . '/' . $value;
+ if ( ! isset( $_REQUEST['action'] ) || $_REQUEST['action'] !== 'weforms_pdf_download' ) {
+ $url = esc_url( content_url() . '/' . $value );
$value = sprintf( '<img src="%s">', $url );
$value .= sprintf( '<a style="margin-left: -200px" href="%s">Download</a>', $url );
- }
- else{
+ } else {
+ $url = esc_url( $value );
$value = sprintf( '<img src="%s">', $url );
}
+ $value = wp_kses_post( $value );
}
$this->fields[ $result->meta_key ]['value'] = apply_filters( 'weforms_entry_meta_field', $value, $field );
--- a/weforms/trunk/includes/class-form.php
+++ b/weforms/trunk/includes/class-form.php
@@ -433,7 +433,6 @@
public function get_changed_fields( $form_fields ) {
$changed_fields = array();
foreach ( $form_fields as $field ) {
- $org_field = $field['original_name'];
// All form fields should have an original name.
if ( empty( $field['original_name'] ) ) {
continue;
--- a/weforms/trunk/includes/class-notification.php
+++ b/weforms/trunk/includes/class-notification.php
@@ -602,6 +602,7 @@
* @return string
*/
public static function replace_file_tags( $text, $entry_id ) {
+ $text = $text ?? '';
$pattern = '/{(?:image|file):(w*)}/';
preg_match_all( $pattern, $text, $matches );
@@ -614,17 +615,10 @@
foreach ( $matches[1] as $index => $meta_key ) {
$meta_value = weforms_get_entry_meta( $entry_id, $meta_key, true );
- $files = [];
+ $files = [];
+ $attachments = is_array( $meta_value ) ? $meta_value : array( $meta_value );
- if ( is_array( $meta_value ) ) {
- foreach ( $meta_value as $key => $attachment_id ) {
- $file_url = wp_get_attachment_url( $attachment_id );
-
- if ( $file_url ) {
- $files[] = $file_url;
- }
- }
- } else {
+ foreach ( $attachments as $attachment_id ) {
$file_url = wp_get_attachment_url( $attachment_id );
if ( $file_url ) {
--- a/weforms/trunk/includes/fields/class-abstract-fields.php
+++ b/weforms/trunk/includes/fields/class-abstract-fields.php
@@ -531,21 +531,32 @@
* @return mixed
*/
public function prepare_entry( $field, $args = [] ) {
- if( empty( $_POST['_wpnonce'] ) ) {
- wp_send_json_error( __( 'Unauthorized operation', 'weforms' ) );
+ if ( $args instanceof WP_REST_Request ) {
+ $nonce = $args->get_param( '_wpnonce' );
+ } else {
+ $nonce = isset( $_POST['_wpnonce'] ) ? $_POST['_wpnonce'] : '';
+ }
+
+ if ( empty( $nonce ) ) {
+ wp_send_json_error( __( 'Unauthorized operation', 'weforms' ) );
}
- if ( ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['_wpnonce'] ) ), 'wpuf_form_add' ) ) {
+ if ( ! wp_verify_nonce( sanitize_text_field( wp_unslash( $nonce ) ), 'wpuf_form_add' ) ) {
wp_send_json_error( __( 'Unauthorized operation', 'weforms' ) );
}
- $args = ! empty( $args ) ? $args : weforms_clean( $_POST );
- $value = !empty( $args[$field['name']] ) ? $args[$field['name']] : '';
+ if ( $args instanceof WP_REST_Request ) {
+ $args = weforms_clean( $args->get_params() );
+ } elseif ( empty( $args ) ) {
+ $args = weforms_clean( $_POST );
+ }
+
+ $value = ! empty( $args[ $field['name'] ] ) ? $args[ $field['name'] ] : '';
if ( is_array( $value ) ) {
- $entry_value = implode( WeForms::$field_separator, $args[$field['name']] );
+ $entry_value = implode( WeForms::$field_separator, $value );
} else {
- $entry_value = trim( $value );
+ $entry_value = sanitize_textarea_field( trim( $value ) );
}
return $entry_value;
--- a/weforms/trunk/includes/functions.php
+++ b/weforms/trunk/includes/functions.php
@@ -621,7 +621,7 @@
}
$data[ $field['name'] ] = [
- 'label' => $field['label'],
+ 'label' => $field['label'] ?? '',
'type' => $field['template'],
];
}
@@ -715,6 +715,7 @@
$bname = 'Unknown';
$platform = 'Unknown';
$version = '';
+ $ub = '';
// first get the platform
if ( preg_match( '/linux/i', $u_agent ) ) {
--- a/weforms/trunk/weforms.php
+++ b/weforms/trunk/weforms.php
@@ -5,7 +5,7 @@
* Plugin URI: https://weformspro.com/
* Author: weForms
* Author URI: https://weformspro.com/
- * Version: 1.6.27
+ * Version: 1.6.28
* License: GPL2 or later
* License URI: https://www.gnu.org/licenses/gpl-2.0.html
* Text Domain: weforms
@@ -55,7 +55,7 @@
*
* @var string
*/
- public $version = '1.6.27';
+ public $version = '1.6.28';
/**
* Form field value seperator
--- a/weforms/weforms.php
+++ b/weforms/weforms.php
@@ -5,7 +5,7 @@
* Plugin URI: https://weformspro.com/
* Author: weForms
* Author URI: https://weformspro.com/
- * Version: 1.6.27
+ * Version: 1.6.28
* License: GPL2 or later
* License URI: https://www.gnu.org/licenses/gpl-2.0.html
* Text Domain: weforms
@@ -55,7 +55,7 @@
*
* @var string
*/
- public $version = '1.6.27';
+ public $version = '1.6.28';
/**
* Form field value seperator