Version Description
Fix bug where referer URL did not match domains that prepended www. Fix bug where file uploads were not being sent. Other updates and fixes.
Download this release
Release Info
Developer | mmuro |
Plugin | Visual Form Builder |
Version | 2.7.4 |
Comparing to | |
See all releases |
Code changes from version 2.7.3 to 2.7.4
- images/plus-sign.png +0 -0
- includes/class-entries-detail.php +1 -1
- includes/class-entries-list.php +26 -1
- includes/email.php +16 -11
- includes/form-output.php +48 -39
- js/vfb-admin.js +1 -1
- readme.txt +14 -1
- uninstall.php +1 -1
- visual-form-builder.php +23 -7
images/plus-sign.png
DELETED
Binary file
|
includes/class-entries-detail.php
CHANGED
@@ -70,7 +70,7 @@ class VisualFormBuilder_Entries_Detail{
|
|
70 |
</div> <!-- #minor-publishing -->
|
71 |
|
72 |
<div id="major-publishing-actions">
|
73 |
-
<div id="delete-action"><?php echo sprintf( '<a class="submitdelete deletion entry-delete" href="?page=%s&action=%s&entry=%s">
|
74 |
<div class="clear"></div>
|
75 |
</div> <!-- #major-publishing-actions -->
|
76 |
</div> <!-- #submitbox -->
|
70 |
</div> <!-- #minor-publishing -->
|
71 |
|
72 |
<div id="major-publishing-actions">
|
73 |
+
<div id="delete-action"><?php echo sprintf( '<a class="submitdelete deletion entry-delete" href="?page=%s&action=%s&entry=%s">Trash</a>', $_REQUEST['page'], 'trash_entry', $entry_id ); ?></div>
|
74 |
<div class="clear"></div>
|
75 |
</div> <!-- #major-publishing-actions -->
|
76 |
</div> <!-- #submitbox -->
|
includes/class-entries-list.php
CHANGED
@@ -140,8 +140,19 @@ class VisualFormBuilder_Entries_List extends WP_List_Table {
|
|
140 |
$where .= " AND YEAR(date_submitted) = $year AND MONTH(date_submitted) = $month";
|
141 |
}
|
142 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
143 |
// Entries type filter
|
144 |
$where .= ( $this->get_entry_status() && 'all' !== $this->get_entry_status() ) ? $wpdb->prepare( ' AND entries.entry_approved = %s', $this->get_entry_status() ) : '';
|
|
|
|
|
|
|
|
|
145 |
|
146 |
$sql_order = sanitize_sql_orderby( "$order_col $order" );
|
147 |
$cols = $wpdb->get_results( "SELECT forms.form_title, entries.entries_id, entries.form_id, entries.subject, entries.sender_name, entries.sender_email, entries.emails_to, entries.date_submitted, entries.ip_address FROM $this->form_table_name AS forms INNER JOIN $this->entries_table_name AS entries ON entries.form_id = forms.form_id WHERE 1=1 $where $search ORDER BY $sql_order LIMIT $per_page $offset" );
|
@@ -512,9 +523,23 @@ class VisualFormBuilder_Entries_List extends WP_List_Table {
|
|
512 |
|
513 |
$where .= " AND YEAR(date_submitted) = $year AND MONTH(date_submitted) = $month";
|
514 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
515 |
|
516 |
// How many entries do we have?
|
517 |
-
$total_items = $wpdb->get_var( "SELECT COUNT(*) FROM $this->entries_table_name AS
|
518 |
|
519 |
// Add sorted data to the items property
|
520 |
$this->items = $data;
|
140 |
$where .= " AND YEAR(date_submitted) = $year AND MONTH(date_submitted) = $month";
|
141 |
}
|
142 |
|
143 |
+
// Get the month/year from the dropdown
|
144 |
+
$today = isset( $_REQUEST['today'] ) ? (int) $_REQUEST['today'] : 0;
|
145 |
+
|
146 |
+
// Parse month/year and build the clause
|
147 |
+
if ( $today > 0 )
|
148 |
+
$where .= " AND entries.date_submitted >= curdate()";
|
149 |
+
|
150 |
// Entries type filter
|
151 |
$where .= ( $this->get_entry_status() && 'all' !== $this->get_entry_status() ) ? $wpdb->prepare( ' AND entries.entry_approved = %s', $this->get_entry_status() ) : '';
|
152 |
+
|
153 |
+
// Always display approved entries, unless an Entries Type filter is set
|
154 |
+
if ( !$this->get_entry_status() || 'all' == $this->get_entry_status() )
|
155 |
+
$where .= $wpdb->prepare( ' AND entries.entry_approved = %d', 1 );
|
156 |
|
157 |
$sql_order = sanitize_sql_orderby( "$order_col $order" );
|
158 |
$cols = $wpdb->get_results( "SELECT forms.form_title, entries.entries_id, entries.form_id, entries.subject, entries.sender_name, entries.sender_email, entries.emails_to, entries.date_submitted, entries.ip_address FROM $this->form_table_name AS forms INNER JOIN $this->entries_table_name AS entries ON entries.form_id = forms.form_id WHERE 1=1 $where $search ORDER BY $sql_order LIMIT $per_page $offset" );
|
523 |
|
524 |
$where .= " AND YEAR(date_submitted) = $year AND MONTH(date_submitted) = $month";
|
525 |
}
|
526 |
+
|
527 |
+
// Get the month/year from the dropdown
|
528 |
+
$today = isset( $_REQUEST['today'] ) ? (int) $_REQUEST['today'] : 0;
|
529 |
+
|
530 |
+
// Parse month/year and build the clause
|
531 |
+
if ( $today > 0 )
|
532 |
+
$where .= " AND entries.date_submitted >= curdate()";
|
533 |
+
|
534 |
+
// Entry type filter
|
535 |
+
$where .= ( $this->get_entry_status() && 'all' !== $this->get_entry_status() ) ? $wpdb->prepare( ' AND entries.entry_approved = %s', $this->get_entry_status() ) : '';
|
536 |
+
|
537 |
+
// Always display approved entries, unless an Entries Type filter is set
|
538 |
+
if ( !$this->get_entry_status() || 'all' == $this->get_entry_status() )
|
539 |
+
$where .= $wpdb->prepare( ' AND entries.entry_approved = %d', 1 );
|
540 |
|
541 |
// How many entries do we have?
|
542 |
+
$total_items = $wpdb->get_var( "SELECT COUNT(*) FROM $this->entries_table_name AS entries WHERE 1=1 $where" );
|
543 |
|
544 |
// Add sorted data to the items property
|
545 |
$this->items = $data;
|
includes/email.php
CHANGED
@@ -4,17 +4,17 @@ global $wpdb, $post;
|
|
4 |
$required = ( isset( $_REQUEST['_vfb-required-secret'] ) && $_REQUEST['_vfb-required-secret'] == '0' ) ? false : true;
|
5 |
$secret_field = ( isset( $_REQUEST['_vfb-secret'] ) ) ? $_REQUEST['_vfb-secret'] : '';
|
6 |
$honeypot = ( isset( $_REQUEST['vfb-spam'] ) ) ? $_REQUEST['vfb-spam'] : '';
|
7 |
-
$referrer = ( isset( $_REQUEST['
|
8 |
$wp_get_referer = wp_get_referer();
|
9 |
|
10 |
// If the verification is set to required, run validation check
|
11 |
-
if ( true == $required && !empty( $secret_field ) )
|
12 |
if ( !empty( $honeypot ) )
|
13 |
wp_die( __( 'Security check: hidden spam field should be blank.' , 'visual-form-builder'), '', array( 'back_link' => true ) );
|
14 |
if ( !is_numeric( $_REQUEST[ $secret_field ] ) || strlen( $_REQUEST[ $secret_field ] ) !== 2 )
|
15 |
wp_die( __( 'Security check: failed secret question. Please try again!' , 'visual-form-builder'), '', array( 'back_link' => true ) );
|
16 |
-
|
17 |
-
|
18 |
// Basic security check before moving any further
|
19 |
if ( isset( $_REQUEST['visual-form-builder-submit'] ) ) :
|
20 |
|
@@ -23,7 +23,7 @@ if ( isset( $_REQUEST['visual-form-builder-submit'] ) ) :
|
|
23 |
wp_die( __( 'Security check: referal URL does not appear to be set.' , 'visual-form-builder'), '', array( 'back_link' => true ) );
|
24 |
|
25 |
// Test if the referral URL matches what sent from WordPress
|
26 |
-
if ( $
|
27 |
wp_die( __( 'Security check: referal does not match this site.' , 'visual-form-builder'), '', array( 'back_link' => true ) );
|
28 |
|
29 |
// Test if it's a known SPAM bot
|
@@ -41,7 +41,7 @@ if ( isset( $_REQUEST['visual-form-builder-submit'] ) ) :
|
|
41 |
$forms = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM $this->form_table_name WHERE form_id = %d ORDER BY $order", $form_id ) );
|
42 |
|
43 |
// Get sender and email details
|
44 |
-
foreach ( $forms as $form )
|
45 |
$form_settings = (object) array(
|
46 |
'form_title' => stripslashes( html_entity_decode( $form->form_title, ENT_QUOTES, 'UTF-8' ) ),
|
47 |
'form_subject' => stripslashes( html_entity_decode( $form->form_email_subject, ENT_QUOTES, 'UTF-8' ) ),
|
@@ -57,7 +57,7 @@ if ( isset( $_REQUEST['visual-form-builder-submit'] ) ) :
|
|
57 |
);
|
58 |
// Allow the form settings to be filtered (ex: return $form_settings->'form_title' = 'Hello World';)
|
59 |
$form_settings = (object) apply_filters_ref_array( 'vfb_email_form_settings', array( $form_settings, $form_id ) );
|
60 |
-
|
61 |
|
62 |
// Sender name field ID
|
63 |
$sender = $wpdb->get_var( $wpdb->prepare( "SELECT form_email_from_name_override FROM $this->form_table_name WHERE form_id = %d", $form_id ) );
|
@@ -202,7 +202,9 @@ if ( isset( $_REQUEST['visual-form-builder-submit'] ) ) :
|
|
202 |
$value = $this->build_array_form_item( $value, $field->field_type );
|
203 |
// If multiple values, build the list
|
204 |
elseif ( is_array( $value ) )
|
205 |
-
$value =
|
|
|
|
|
206 |
// Lastly, handle single values
|
207 |
else
|
208 |
$value = html_entity_decode( stripslashes( esc_html( $value ) ), ENT_QUOTES, 'UTF-8' );
|
@@ -225,7 +227,10 @@ if ( isset( $_REQUEST['visual-form-builder-submit'] ) ) :
|
|
225 |
// Validate input
|
226 |
$this->validate_input( $value, $field->field_name, $field->field_type, $field->field_required );
|
227 |
|
228 |
-
|
|
|
|
|
|
|
229 |
if ( $field->field_type == 'fieldset' ) :
|
230 |
$body .= sprintf(
|
231 |
'<tr style="background-color:#393E40;color:white;font-size:14px;">
|
@@ -335,8 +340,8 @@ if ( isset( $_REQUEST['visual-form-builder-submit'] ) ) :
|
|
335 |
// If site domain and admin_email domain match, use admin_email, otherwise a same domain email must be created
|
336 |
$from_email = ( $sitename == $domain ) ? $from_email : "wordpress@$sitename";
|
337 |
|
338 |
-
$reply_to
|
339 |
-
$headers
|
340 |
|
341 |
$form_subject = wp_specialchars_decode( $form_settings->form_subject, ENT_QUOTES );
|
342 |
$notify_subject = wp_specialchars_decode( $form_settings->form_notification_subject, ENT_QUOTES );
|
4 |
$required = ( isset( $_REQUEST['_vfb-required-secret'] ) && $_REQUEST['_vfb-required-secret'] == '0' ) ? false : true;
|
5 |
$secret_field = ( isset( $_REQUEST['_vfb-secret'] ) ) ? $_REQUEST['_vfb-secret'] : '';
|
6 |
$honeypot = ( isset( $_REQUEST['vfb-spam'] ) ) ? $_REQUEST['vfb-spam'] : '';
|
7 |
+
$referrer = ( isset( $_REQUEST['_wp_http_referer'] ) ) ? $_REQUEST['_wp_http_referer'] : false;
|
8 |
$wp_get_referer = wp_get_referer();
|
9 |
|
10 |
// If the verification is set to required, run validation check
|
11 |
+
if ( true == $required && !empty( $secret_field ) ) :
|
12 |
if ( !empty( $honeypot ) )
|
13 |
wp_die( __( 'Security check: hidden spam field should be blank.' , 'visual-form-builder'), '', array( 'back_link' => true ) );
|
14 |
if ( !is_numeric( $_REQUEST[ $secret_field ] ) || strlen( $_REQUEST[ $secret_field ] ) !== 2 )
|
15 |
wp_die( __( 'Security check: failed secret question. Please try again!' , 'visual-form-builder'), '', array( 'back_link' => true ) );
|
16 |
+
endif;
|
17 |
+
|
18 |
// Basic security check before moving any further
|
19 |
if ( isset( $_REQUEST['visual-form-builder-submit'] ) ) :
|
20 |
|
23 |
wp_die( __( 'Security check: referal URL does not appear to be set.' , 'visual-form-builder'), '', array( 'back_link' => true ) );
|
24 |
|
25 |
// Test if the referral URL matches what sent from WordPress
|
26 |
+
if ( $wp_get_referer )
|
27 |
wp_die( __( 'Security check: referal does not match this site.' , 'visual-form-builder'), '', array( 'back_link' => true ) );
|
28 |
|
29 |
// Test if it's a known SPAM bot
|
41 |
$forms = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM $this->form_table_name WHERE form_id = %d ORDER BY $order", $form_id ) );
|
42 |
|
43 |
// Get sender and email details
|
44 |
+
foreach ( $forms as $form ) :
|
45 |
$form_settings = (object) array(
|
46 |
'form_title' => stripslashes( html_entity_decode( $form->form_title, ENT_QUOTES, 'UTF-8' ) ),
|
47 |
'form_subject' => stripslashes( html_entity_decode( $form->form_email_subject, ENT_QUOTES, 'UTF-8' ) ),
|
57 |
);
|
58 |
// Allow the form settings to be filtered (ex: return $form_settings->'form_title' = 'Hello World';)
|
59 |
$form_settings = (object) apply_filters_ref_array( 'vfb_email_form_settings', array( $form_settings, $form_id ) );
|
60 |
+
endforeach;
|
61 |
|
62 |
// Sender name field ID
|
63 |
$sender = $wpdb->get_var( $wpdb->prepare( "SELECT form_email_from_name_override FROM $this->form_table_name WHERE form_id = %d", $form_id ) );
|
202 |
$value = $this->build_array_form_item( $value, $field->field_type );
|
203 |
// If multiple values, build the list
|
204 |
elseif ( is_array( $value ) )
|
205 |
+
$value = $this->build_array_form_item( $value, $field->field_type );
|
206 |
+
elseif ( 'radio' == $field->field_type )
|
207 |
+
$value = wp_specialchars_decode( stripslashes( esc_html( $value ) ), ENT_QUOTES );
|
208 |
// Lastly, handle single values
|
209 |
else
|
210 |
$value = html_entity_decode( stripslashes( esc_html( $value ) ), ENT_QUOTES, 'UTF-8' );
|
227 |
// Validate input
|
228 |
$this->validate_input( $value, $field->field_name, $field->field_type, $field->field_required );
|
229 |
|
230 |
+
$removed_field_types = array( 'verification', 'secret', 'submit' );
|
231 |
+
|
232 |
+
// Don't add certain fields to the email
|
233 |
+
if ( ! in_array( $field->field_type, $removed_field_types ) ) :
|
234 |
if ( $field->field_type == 'fieldset' ) :
|
235 |
$body .= sprintf(
|
236 |
'<tr style="background-color:#393E40;color:white;font-size:14px;">
|
340 |
// If site domain and admin_email domain match, use admin_email, otherwise a same domain email must be created
|
341 |
$from_email = ( $sitename == $domain ) ? $from_email : "wordpress@$sitename";
|
342 |
|
343 |
+
$reply_to = "\"$from_name\" <$header_from>";
|
344 |
+
$headers = "Sender: $from_email\r\n" . "From: $reply_to\r\n" . "Reply-To: $reply_to\r\n" . "Content-Type: $header_content_type; charset=\"" . get_option('blog_charset') . "\"\r\n";
|
345 |
|
346 |
$form_subject = wp_specialchars_decode( $form_settings->form_subject, ENT_QUOTES );
|
347 |
$notify_subject = wp_specialchars_decode( $form_settings->form_notification_subject, ENT_QUOTES );
|
includes/form-output.php
CHANGED
@@ -1,8 +1,4 @@
|
|
1 |
<?php
|
2 |
-
// Turn off caching plugin for this page to fix occasional nonce error
|
3 |
-
if ( !defined( 'DONOTCACHEPAGE' ) )
|
4 |
-
define( 'DONOTCACHEPAGE', true );
|
5 |
-
|
6 |
global $wpdb;
|
7 |
|
8 |
// Extract shortcode attributes, set defaults
|
@@ -42,22 +38,29 @@ $open_fieldset = $open_section = false;
|
|
42 |
$submit = 'Submit';
|
43 |
$verification = '';
|
44 |
|
45 |
-
// Current URL
|
46 |
-
$current_url = 'http'. ( empty( $_SERVER['HTTPS'] ) ? '' : 's' ) . '://' . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'];
|
47 |
-
|
48 |
$label_alignment = ( $form->form_label_alignment !== '' ) ? " $form->form_label_alignment" : '';
|
49 |
-
$output = '<div class="visual-form-builder-container"><form id="' . $form->form_key . '" class="visual-form-builder' . $label_alignment . '" method="post" 46="multipart/form-data">
|
50 |
-
<input type="hidden" name="form_id" value="' . $form->form_id . '" />';
|
51 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
52 |
foreach ( $fields as $field ) :
|
53 |
$field_id = absint( $field->field_id );
|
54 |
$field_type = esc_html( $field->field_type );
|
55 |
-
|
56 |
$required_span = ( !empty( $field->field_required ) && $field->field_required === 'yes' ) ? ' <span>*</span>' : '';
|
57 |
$required = ( !empty( $field->field_required ) && $field->field_required === 'yes' ) ? ' required' : '';
|
58 |
$validation = ( !empty( $field->field_validation ) ) ? " $field->field_validation" : '';
|
59 |
$css = ( !empty( $field->field_css ) ) ? " $field->field_css" : '';
|
60 |
-
$id_attr = 'vfb-' . esc_html( $field->field_key ) . '-' . $
|
61 |
$size = ( !empty( $field->field_size ) ) ? " vfb-$field->field_size" : '';
|
62 |
$layout = ( !empty( $field->field_layout ) ) ? " vfb-$field->field_layout" : '';
|
63 |
$default = ( !empty( $field->field_default ) ) ? wp_specialchars_decode( esc_html( stripslashes( $field->field_default ) ), ENT_QUOTES ) : '';
|
@@ -90,7 +93,7 @@ foreach ( $fields as $field ) :
|
|
90 |
$field->field_key,
|
91 |
$css,
|
92 |
$id_attr,
|
93 |
-
|
94 |
);
|
95 |
|
96 |
$open_fieldset = true;
|
@@ -102,7 +105,7 @@ foreach ( $fields as $field ) :
|
|
102 |
'<div class="vfb-section-div %1$s %2$s"><h4>%3$s</h4>',
|
103 |
$id_attr,
|
104 |
$css,
|
105 |
-
|
106 |
);
|
107 |
|
108 |
// Save section ID for future comparison
|
@@ -122,7 +125,7 @@ foreach ( $fields as $field ) :
|
|
122 |
$columns_choice,
|
123 |
$layout,
|
124 |
$id_attr,
|
125 |
-
|
126 |
$required_span
|
127 |
);
|
128 |
endif;
|
@@ -136,7 +139,7 @@ foreach ( $fields as $field ) :
|
|
136 |
$field->field_key,
|
137 |
$css,
|
138 |
$id_attr,
|
139 |
-
|
140 |
);
|
141 |
endif;
|
142 |
|
@@ -201,7 +204,7 @@ foreach ( $fields as $field ) :
|
|
201 |
|
202 |
$form_item = sprintf(
|
203 |
'<input type="%8$s" name="vfb-%1$d" id="%2$s" value="%3$s" class="vfb-text %4$s %5$s %6$s %7$s" />',
|
204 |
-
|
205 |
$id_attr,
|
206 |
$default,
|
207 |
$size,
|
@@ -219,7 +222,7 @@ foreach ( $fields as $field ) :
|
|
219 |
|
220 |
$form_item = sprintf(
|
221 |
'<textarea name="vfb-%1$d" id="%2$s" class="vfb-textarea %4$s %5$s %6$s">%3$s</textarea>',
|
222 |
-
|
223 |
$id_attr,
|
224 |
$default,
|
225 |
$size,
|
@@ -243,12 +246,12 @@ foreach ( $fields as $field ) :
|
|
243 |
|
244 |
// Loop through each option and output
|
245 |
foreach ( $field_options as $option => $value ) {
|
246 |
-
$options .= sprintf( '<option value="%1$s"%2$s>%1$s</option>', trim( stripslashes( $value ) ), selected( $default, ++$option, 0 ) );
|
247 |
}
|
248 |
|
249 |
$form_item = sprintf(
|
250 |
'<select name="vfb-%1$d" id="%2$s" class="vfb-select %3$s %4$s %5$s">%6$s</select>',
|
251 |
-
|
252 |
$id_attr,
|
253 |
$size,
|
254 |
$required,
|
@@ -268,15 +271,18 @@ foreach ( $fields as $field ) :
|
|
268 |
|
269 |
// Loop through each option and output
|
270 |
foreach ( $field_options as $option => $value ) {
|
|
|
|
|
271 |
$options .= sprintf(
|
272 |
-
'<span><input type="radio" name="vfb-%1$d" id="%2$s-%3$d" value="%6$s" class="vfb-radio %4$s %5$s"%
|
273 |
-
|
274 |
$id_attr,
|
275 |
$option,
|
276 |
$required,
|
277 |
$css,
|
278 |
-
trim( stripslashes( $value ) ),
|
279 |
-
|
|
|
280 |
);
|
281 |
}
|
282 |
|
@@ -299,13 +305,14 @@ foreach ( $fields as $field ) :
|
|
299 |
// Loop through each option and output
|
300 |
foreach ( $field_options as $option => $value ) {
|
301 |
$options .= sprintf(
|
302 |
-
'<span><input type="checkbox" name="vfb-%1$d[]" id="%2$s-%3$d" value="%6$s" class="vfb-checkbox %4$s %5$s"%
|
303 |
-
|
304 |
$id_attr,
|
305 |
$option,
|
306 |
$required,
|
307 |
$css,
|
308 |
-
trim( stripslashes( $value ) ),
|
|
|
309 |
checked( $default, ++$option, 0 )
|
310 |
);
|
311 |
}
|
@@ -368,7 +375,7 @@ foreach ( $fields as $field ) :
|
|
368 |
|
369 |
$address .= sprintf(
|
370 |
'<span class="vfb-%3$s"><select name="vfb-%1$d[%4$s]" class="vfb-select %7$s %8$s" id="%2$s-%4$s">%6$s</select><label for="%2$s-%4$s">%5$s</label></span>',
|
371 |
-
|
372 |
$id_attr,
|
373 |
$part['layout'],
|
374 |
$parts,
|
@@ -382,7 +389,7 @@ foreach ( $fields as $field ) :
|
|
382 |
|
383 |
$address .= sprintf(
|
384 |
'<span class="vfb-%3$s"><input type="text" name="vfb-%1$d[%4$s]" id="%2$s-%4$s" maxlength="150" class="vfb-text vfb-medium %7$s %8$s" /><label for="%2$s-%4$s">%5$s</label></span>',
|
385 |
-
|
386 |
$id_attr,
|
387 |
$part['layout'],
|
388 |
$parts,
|
@@ -404,7 +411,7 @@ foreach ( $fields as $field ) :
|
|
404 |
|
405 |
$form_item = sprintf(
|
406 |
'<input type="text" name="vfb-%1$d" id="%2$s" value="%3$s" class="vfb-text vfb-date-picker %4$s %5$s %6$s" />',
|
407 |
-
|
408 |
$id_attr,
|
409 |
$default,
|
410 |
$size,
|
@@ -445,7 +452,7 @@ foreach ( $fields as $field ) :
|
|
445 |
if ( $time_format == '12' ) {
|
446 |
$ampm = sprintf(
|
447 |
'<span class="vfb-time"><select name="vfb-%1$d[ampm]" id="%2$s-ampm" class="vfb-select %5$s %6$s"><option value="AM">AM</option><option value="PM">PM</option></select><label for="%2$s-ampm">AM/PM</label></span>',
|
448 |
-
|
449 |
$id_attr,
|
450 |
$hour,
|
451 |
$minute,
|
@@ -458,7 +465,7 @@ foreach ( $fields as $field ) :
|
|
458 |
'<span class="vfb-time"><select name="vfb-%1$d[hour]" id="%2$s-hour" class="vfb-select %5$s %6$s">%3$s</select><label for="%2$s-hour">HH</label></span>' .
|
459 |
'<span class="vfb-time"><select name="vfb-%1$d[min]" id="%2$s-min" class="vfb-select %5$s %6$s">%4$s</select><label for="%2$s-min">MM</label></span>' .
|
460 |
'%7$s',
|
461 |
-
|
462 |
$id_attr,
|
463 |
$hour,
|
464 |
$minute,
|
@@ -478,7 +485,7 @@ foreach ( $fields as $field ) :
|
|
478 |
$form_item = sprintf(
|
479 |
'<script type="text/javascript">edToolbar("%2$s");</script>' .
|
480 |
'<textarea name="vfb-%1$d" id="%2$s" class="vfb-textarea vfbEditor %4$s %5$s %6$s">%3$s</textarea>',
|
481 |
-
|
482 |
$id_attr,
|
483 |
$default,
|
484 |
$size,
|
@@ -502,7 +509,7 @@ foreach ( $fields as $field ) :
|
|
502 |
|
503 |
$form_item = sprintf(
|
504 |
'<input type="file" name="vfb-%1$d" id="%2$s" value="%3$s" class="vfb-text %4$s %5$s %6$s %7$s %8$s" />',
|
505 |
-
|
506 |
$id_attr,
|
507 |
$default,
|
508 |
$size,
|
@@ -512,8 +519,8 @@ foreach ( $fields as $field ) :
|
|
512 |
$accept
|
513 |
);
|
514 |
|
515 |
-
$output .= ( !empty( $description ) ) ? sprintf( '<span>%1$s<label>%2$s</label></span>', $form_item, $description ) : $form_item;
|
516 |
-
|
517 |
break;
|
518 |
|
519 |
case 'instructions' :
|
@@ -523,11 +530,13 @@ foreach ( $fields as $field ) :
|
|
523 |
break;
|
524 |
|
525 |
case 'submit' :
|
526 |
-
|
527 |
$submit = sprintf(
|
528 |
-
'<li class="vfb-item vfb-item-submit" id="%2$s"
|
529 |
-
|
|
|
|
|
530 |
$id_attr,
|
|
|
531 |
$css
|
532 |
);
|
533 |
|
@@ -573,7 +582,7 @@ $output .= sprintf(
|
|
573 |
$submit
|
574 |
);
|
575 |
|
576 |
-
$output .=
|
577 |
|
578 |
// Close the form out
|
579 |
$output .= '</form>';
|
1 |
<?php
|
|
|
|
|
|
|
|
|
2 |
global $wpdb;
|
3 |
|
4 |
// Extract shortcode attributes, set defaults
|
38 |
$submit = 'Submit';
|
39 |
$verification = '';
|
40 |
|
|
|
|
|
|
|
41 |
$label_alignment = ( $form->form_label_alignment !== '' ) ? " $form->form_label_alignment" : '';
|
|
|
|
|
42 |
|
43 |
+
// Start form container
|
44 |
+
$output .= '<div class="visual-form-builder-container">';
|
45 |
+
|
46 |
+
$output .= sprintf(
|
47 |
+
'<form id="%1$s-%2$d" class="visual-form-builder %3$s %4$s" method="post" enctype="multipart/form-data">
|
48 |
+
<input type="hidden" name="form_id" value="%5$d" />',
|
49 |
+
esc_html( $form->form_key ),
|
50 |
+
$form_id,
|
51 |
+
"vfb-form-$form_id",
|
52 |
+
$label_alignment,
|
53 |
+
absint( $form->form_id )
|
54 |
+
);
|
55 |
foreach ( $fields as $field ) :
|
56 |
$field_id = absint( $field->field_id );
|
57 |
$field_type = esc_html( $field->field_type );
|
58 |
+
$field_name = stripslashes( $field->field_name );
|
59 |
$required_span = ( !empty( $field->field_required ) && $field->field_required === 'yes' ) ? ' <span>*</span>' : '';
|
60 |
$required = ( !empty( $field->field_required ) && $field->field_required === 'yes' ) ? ' required' : '';
|
61 |
$validation = ( !empty( $field->field_validation ) ) ? " $field->field_validation" : '';
|
62 |
$css = ( !empty( $field->field_css ) ) ? " $field->field_css" : '';
|
63 |
+
$id_attr = 'vfb-' . esc_html( $field->field_key ) . '-' . $field_id;
|
64 |
$size = ( !empty( $field->field_size ) ) ? " vfb-$field->field_size" : '';
|
65 |
$layout = ( !empty( $field->field_layout ) ) ? " vfb-$field->field_layout" : '';
|
66 |
$default = ( !empty( $field->field_default ) ) ? wp_specialchars_decode( esc_html( stripslashes( $field->field_default ) ), ENT_QUOTES ) : '';
|
93 |
$field->field_key,
|
94 |
$css,
|
95 |
$id_attr,
|
96 |
+
$field_name
|
97 |
);
|
98 |
|
99 |
$open_fieldset = true;
|
105 |
'<div class="vfb-section-div %1$s %2$s"><h4>%3$s</h4>',
|
106 |
$id_attr,
|
107 |
$css,
|
108 |
+
$field_name
|
109 |
);
|
110 |
|
111 |
// Save section ID for future comparison
|
125 |
$columns_choice,
|
126 |
$layout,
|
127 |
$id_attr,
|
128 |
+
$field_name,
|
129 |
$required_span
|
130 |
);
|
131 |
endif;
|
139 |
$field->field_key,
|
140 |
$css,
|
141 |
$id_attr,
|
142 |
+
$field_name
|
143 |
);
|
144 |
endif;
|
145 |
|
204 |
|
205 |
$form_item = sprintf(
|
206 |
'<input type="%8$s" name="vfb-%1$d" id="%2$s" value="%3$s" class="vfb-text %4$s %5$s %6$s %7$s" />',
|
207 |
+
$field_id,
|
208 |
$id_attr,
|
209 |
$default,
|
210 |
$size,
|
222 |
|
223 |
$form_item = sprintf(
|
224 |
'<textarea name="vfb-%1$d" id="%2$s" class="vfb-textarea %4$s %5$s %6$s">%3$s</textarea>',
|
225 |
+
$field_id,
|
226 |
$id_attr,
|
227 |
$default,
|
228 |
$size,
|
246 |
|
247 |
// Loop through each option and output
|
248 |
foreach ( $field_options as $option => $value ) {
|
249 |
+
$options .= sprintf( '<option value="%1$s"%2$s>%1$s</option>', esc_attr(trim( stripslashes( $value ) ) ), selected( $default, ++$option, 0 ) );
|
250 |
}
|
251 |
|
252 |
$form_item = sprintf(
|
253 |
'<select name="vfb-%1$d" id="%2$s" class="vfb-select %3$s %4$s %5$s">%6$s</select>',
|
254 |
+
$field_id,
|
255 |
$id_attr,
|
256 |
$size,
|
257 |
$required,
|
271 |
|
272 |
// Loop through each option and output
|
273 |
foreach ( $field_options as $option => $value ) {
|
274 |
+
$option++;
|
275 |
+
|
276 |
$options .= sprintf(
|
277 |
+
'<span><input type="radio" name="vfb-%1$d" id="%2$s-%3$d" value="%6$s" class="vfb-radio %4$s %5$s"%8$s /><label for="%2$s-%3$d" class="vfb-choice">%7$s</label></span>',
|
278 |
+
$field_id,
|
279 |
$id_attr,
|
280 |
$option,
|
281 |
$required,
|
282 |
$css,
|
283 |
+
esc_attr( trim( stripslashes( $value ) ) ),
|
284 |
+
wp_specialchars_decode( stripslashes( $value ) ),
|
285 |
+
checked( $default, $option, 0 )
|
286 |
);
|
287 |
}
|
288 |
|
305 |
// Loop through each option and output
|
306 |
foreach ( $field_options as $option => $value ) {
|
307 |
$options .= sprintf(
|
308 |
+
'<span><input type="checkbox" name="vfb-%1$d[]" id="%2$s-%3$d" value="%6$s" class="vfb-checkbox %4$s %5$s"%8$s /><label for="%2$s-%3$d" class="vfb-choice">%7$s</label></span>',
|
309 |
+
$field_id,
|
310 |
$id_attr,
|
311 |
$option,
|
312 |
$required,
|
313 |
$css,
|
314 |
+
esc_attr( trim( stripslashes( $value ) ) ),
|
315 |
+
wp_specialchars_decode( stripslashes( $value ) ),
|
316 |
checked( $default, ++$option, 0 )
|
317 |
);
|
318 |
}
|
375 |
|
376 |
$address .= sprintf(
|
377 |
'<span class="vfb-%3$s"><select name="vfb-%1$d[%4$s]" class="vfb-select %7$s %8$s" id="%2$s-%4$s">%6$s</select><label for="%2$s-%4$s">%5$s</label></span>',
|
378 |
+
$field_id,
|
379 |
$id_attr,
|
380 |
$part['layout'],
|
381 |
$parts,
|
389 |
|
390 |
$address .= sprintf(
|
391 |
'<span class="vfb-%3$s"><input type="text" name="vfb-%1$d[%4$s]" id="%2$s-%4$s" maxlength="150" class="vfb-text vfb-medium %7$s %8$s" /><label for="%2$s-%4$s">%5$s</label></span>',
|
392 |
+
$field_id,
|
393 |
$id_attr,
|
394 |
$part['layout'],
|
395 |
$parts,
|
411 |
|
412 |
$form_item = sprintf(
|
413 |
'<input type="text" name="vfb-%1$d" id="%2$s" value="%3$s" class="vfb-text vfb-date-picker %4$s %5$s %6$s" />',
|
414 |
+
$field_id,
|
415 |
$id_attr,
|
416 |
$default,
|
417 |
$size,
|
452 |
if ( $time_format == '12' ) {
|
453 |
$ampm = sprintf(
|
454 |
'<span class="vfb-time"><select name="vfb-%1$d[ampm]" id="%2$s-ampm" class="vfb-select %5$s %6$s"><option value="AM">AM</option><option value="PM">PM</option></select><label for="%2$s-ampm">AM/PM</label></span>',
|
455 |
+
$field_id,
|
456 |
$id_attr,
|
457 |
$hour,
|
458 |
$minute,
|
465 |
'<span class="vfb-time"><select name="vfb-%1$d[hour]" id="%2$s-hour" class="vfb-select %5$s %6$s">%3$s</select><label for="%2$s-hour">HH</label></span>' .
|
466 |
'<span class="vfb-time"><select name="vfb-%1$d[min]" id="%2$s-min" class="vfb-select %5$s %6$s">%4$s</select><label for="%2$s-min">MM</label></span>' .
|
467 |
'%7$s',
|
468 |
+
$field_id,
|
469 |
$id_attr,
|
470 |
$hour,
|
471 |
$minute,
|
485 |
$form_item = sprintf(
|
486 |
'<script type="text/javascript">edToolbar("%2$s");</script>' .
|
487 |
'<textarea name="vfb-%1$d" id="%2$s" class="vfb-textarea vfbEditor %4$s %5$s %6$s">%3$s</textarea>',
|
488 |
+
$field_id,
|
489 |
$id_attr,
|
490 |
$default,
|
491 |
$size,
|
509 |
|
510 |
$form_item = sprintf(
|
511 |
'<input type="file" name="vfb-%1$d" id="%2$s" value="%3$s" class="vfb-text %4$s %5$s %6$s %7$s %8$s" />',
|
512 |
+
$field_id,
|
513 |
$id_attr,
|
514 |
$default,
|
515 |
$size,
|
519 |
$accept
|
520 |
);
|
521 |
|
522 |
+
$output .= ( !empty( $description ) ) ? sprintf( '<span>%1$s<label>%2$s</label></span>', $form_item, $description ) : $form_item;
|
523 |
+
|
524 |
break;
|
525 |
|
526 |
case 'instructions' :
|
530 |
break;
|
531 |
|
532 |
case 'submit' :
|
|
|
533 |
$submit = sprintf(
|
534 |
+
'<li class="vfb-item vfb-item-submit" id="%2$s">
|
535 |
+
<input type="submit" name="visual-form-builder-submit" id="sendmail" value="%3$s" class="vfb-submit %4$s" />
|
536 |
+
</li>',
|
537 |
+
$field_id,
|
538 |
$id_attr,
|
539 |
+
wp_specialchars_decode( esc_html( $field_name ), ENT_QUOTES ),
|
540 |
$css
|
541 |
);
|
542 |
|
582 |
$submit
|
583 |
);
|
584 |
|
585 |
+
$output .= wp_referer_field( false );
|
586 |
|
587 |
// Close the form out
|
588 |
$output .= '</form>';
|
js/vfb-admin.js
CHANGED
@@ -1 +1 @@
|
|
1 |
-
jQuery(document).ready(function(g){if(window.VfbAdminPages){var f=VfbAdminPages.vfb_pages;if(pagenow==f.vfb){g(".if-js-closed").removeClass("if-js-closed").addClass("closed");postboxes.add_postbox_toggles(f.vfb)}}var c=null;g(document).on("mouseenter mouseleave",".vfb-tooltip",function(p){if(p.type=="mouseenter"){if(c){clearTimeout(c);c=null}var m=g(this).attr("title"),o=g(this).attr("rel"),n=g(this).width();g(this).append('<div class="tooltip"><h3>'+m+'</h3><p class="text">'+o+"</p></div>");g.data(this,"title",m);this.title="";g(this).find(".tooltip").css({left:n+22});c=setTimeout(function(){g(".tooltip").fadeIn(300)},500)}else{this.title=g.data(this,"title");g(".tooltip").fadeOut(500);g(this).children().remove()}});g(document).on("click","a.addOption",function(s){s.preventDefault();var n=g(this).parent().parent().find(".clonedOption").length;var r=n+1;var t=g(this).closest("div").attr("id");var q=g(this).closest("div").children("label").attr("for");var m=q.replace(new RegExp(/(\d+)$/g),"");var p=t.replace(new RegExp(/(\d+)$/g),"");var o=g("#"+t).clone().attr("id",p+r);o.children("label").attr("for",m+r);o.find('input[type="text"]').attr("id",m+r);o.find('input[type="radio"]').attr("value",r);g("#"+p+n).after(o)});g(document).on("click","a.deleteOption",function(n){n.preventDefault();var m=g(this).parent().parent().find(".clonedOption").length;if(m-1==0){alert("You must have at least one option.")}else{g(this).closest("div").remove()}});g(document).on("click","a.addEmail",function(s){s.preventDefault();var n=g(this).closest("#email-details").find(".clonedOption").length;var r=n+1;var t=g(this).closest("div").attr("id");var q=g(this).closest("div").find("label").attr("for");var m=q.replace(new RegExp(/(\d+)$/g),"");var p=t.replace(new RegExp(/(\d+)$/g),"");var o=g("#"+t).clone().attr("id",p+r);o.find("label").attr("for",m+r);o.find("input").attr("id",m+r);g("#"+p+n).after(o)});g(document).on("click","a.deleteEmail",function(n){n.preventDefault();var m=g(this).closest("#email-details").find(".clonedOption").length;if(m-1==0){alert("You must have at least one option.")}else{g(this).closest("div").remove()}});g('.option input[type="radio"]').mousedown(function(){g(this).attr("previousValue",g(this).prop("checked"))}).click(function(){var m=g(this).attr("previousValue");if(m=="true"){g(this).prop("checked",false)}});g(".menu-delete, .entry-delete").click(function(){var m=(g(this).hasClass("entry-delete"))?"entry":"form";var n=confirm("You are about to permanently delete this "+m+" and all of its data.\n'Cancel' to stop, 'OK' to delete.");if(n){return true}return false});g(document).on("click","a.item-edit",function(m){m.preventDefault();g(m.target).closest("li").children(".menu-item-settings").slideToggle("fast");g(this).toggleClass("opened")});function l(m){if("FIELDSET"!==m){g("#vfb-fieldset-first-warning").show()}else{g("#vfb-fieldset-first-warning").hide()}}g("#vfb-menu-to-edit").nestedSortable({listType:"ul",maxLevels:3,handle:".vfb-menu-item-handle",placeholder:"vfb-sortable-placeholder",forcePlaceholderSize:true,forceHelperSize:true,tolerance:"pointer",toleranceElement:"> dl",items:"li:not(.ui-state-disabled)",create:function(m,n){g(this).css("min-height",g(this).height())},start:function(m,n){n.placeholder.height(n.item.height())},stop:function(n,o){var m=g("#vfb-menu-to-edit .item-type:first").text();opts={url:ajaxurl,type:"POST",async:true,cache:false,dataType:"json",data:{action:"visual_form_builder_sort_field",order:g(this).nestedSortable("toArray")},success:function(p){g("#loading-animation").hide();l(m);return}};g.ajax(opts)}});g("#form-items .vfb-draggable-form-items").click(function(m){m.preventDefault();g(this).data("submit_value",g(this).text())});g("#form-items .vfb-draggable-form-items").click(function(o){o.preventDefault();var p=g(this).closest("form").serializeArray(),n=g(this).data("submit_value"),m=g("#vfb-menu-to-edit li.ui-state-disabled:first").attr("id").match(new RegExp(/(\d+)$/g))[0];g("img.waiting").show();g.post(ajaxurl,{action:"visual_form_builder_create_field",data:p,field_type:n,previous:m,page:pagenow,nonce:g("#_wpnonce").val()}).done(function(q){g("img.waiting").hide();g(q).hide().insertBefore("#vfb-menu-to-edit li.ui-state-disabled:first").fadeIn()})});g(document).on("click","a.item-delete",function(u){u.preventDefault();var q=childs=new Array(),y=0,n=g(this).attr("href"),m=n.split("&"),s=confirm("You are about to permanently delete this field.\n'Cancel' to stop, 'OK' to delete.");if(!s){return false}for(var r=0;r<m.length;r++){var w=m[r].indexOf("=");var v=m[r].substring(0,w);var x=m[r].substring(w+1);q[v]=x}var o=g(this).closest(".form-item").find("ul").children();var p=o.parent().html();o.each(function(t){childs[t]=g(this).attr("id").match(new RegExp(/(\d+)$/g))[0]});var z=g(this).closest("li.form-item").parents("li.form-item");if(z.length){y=z.attr("id").match(new RegExp(/(\d+)$/g))[0]}g.post(ajaxurl,{action:"visual_form_builder_delete_field",form:q.form,field:q.field,child_ids:childs,parent_id:y,page:pagenow,nonce:q._wpnonce}).done(function(t){g("#form_item_"+q.field).addClass("deleting").animate({opacity:0,height:0},350,function(){g(this).before(p).remove()})})});g("#form-settings-button").click(function(o){o.preventDefault();g(this).toggleClass("current");g("#form-settings").slideToggle();var m=g('input[name="form_id"]').val(),n=(g(this).hasClass("current"))?"opened":"closed";g.post(ajaxurl,{action:"visual_form_builder_form_settings",form:m,status:n,page:pagenow}).done(function(p){if(n=="closed"){g(".settings-links").removeClass("on");g(".settings-links:first").addClass("on");g(".form-details").slideUp("normal");g(".form-details:first").show("normal")}})});g(".settings-links").click(function(o){o.preventDefault();g(".settings-links").removeClass("on");g(".form-details").slideUp("normal");if(g(this).next("div").is(":hidden")==true){g(this).addClass("on");g(this).next().slideDown("normal")}var n=g('input[name="form_id"]').val(),m=this.hash.replace(/#/g,"");g.post(ajaxurl,{action:"visual_form_builder_form_settings",form:n,accordion:m,page:pagenow})});var b=false;g("#vfb-form-builder-management input, #vfb-form-builder-management select, #vfb-form-builder-management textarea").change(function(){i()});function i(){b=true}window.onbeforeunload=function(){if(b){return"The changes you made will be lost if you navigate away from this page."}};g(document).on("submit","#visual-form-builder-update",function(){window.onbeforeunload=null});if(g(".columns-2 #side-sortables").length>0){var a=g("#vfb_form_items_meta_box"),d=a.offset(),e=a.nextAll(),h=false;g(window).on("scroll",function(){if(g(window).scrollTop()>d.top){a.stop().css({top:55,position:"fixed","z-index":"999"});if(e.is(":visible")){h=true;e.stop().css({opacity:0.1})}}else{a.stop().css({top:0,position:"relative"});if(h){e.stop().css({opacity:1})}}})}var k=g(".form-success-type:checked").val();g("#form-success-message-"+k).show();g(".form-success-type").change(function(){var m=g(this).val();switch(m){case"text":g("#form-success-message-text").show();g("#form-success-message-page, #form-success-message-redirect").hide();break;case"page":g("#form-success-message-page").show();g("#form-success-message-text, #form-success-message-redirect").hide();break;case"redirect":g("#form-success-message-redirect").show();g("#form-success-message-text, #form-success-message-page").hide();break}});g(".vfb-field-types").click(function(n){n.preventDefault();g("#vfb-field-tabs li").removeClass("tabs");g(this).parent().addClass("tabs");g(".tabs-panel-active").removeClass("tabs-panel-active").addClass("tabs-panel-inactive");var m=this.hash;g(m).removeClass("tabs-panel-inactive").addClass("tabs-panel-active")});g("#visual-form-builder-update").validate({rules:{"form_email_to[]":{email:true},form_email_from:{email:true},form_success_message_redirect:{url:true},form_notification_email_name:{required:function(m){return g("#form-notification-setting").is(":checked")}},form_notification_email_from:{required:function(m){return g("#form-notification-setting").is(":checked")},email:true},form_notification_email:{required:function(m){return g("#form-notification-setting").is(":checked")}}},errorPlacement:function(m,n){m.insertAfter(n.parent())}});g("#visual-form-builder-new-form").validate();g("#form_email_from_name_override").change(function(){if(g("#form_email_from_name_override").val()==""){g("#form-email-sender-name").prop("readonly",false)}else{g("#form-email-sender-name").prop("readonly","readonly")}});g("#form_email_from_override").change(function(){if(g("#form_email_from_override").val()==""){g("#form-email-sender").prop("readonly",false)}else{g("#form-email-sender").prop("readonly","readonly")}});g("#notification-email").toggle(g("#form-notification-setting").prop("checked"));g("#form-notification-setting").change(function(){var m=g(this).is(":checked");if(m){g("#notification-email").show();g("#form-notification-email-name, #form-notification-email-from, #form-notification-email, #form-notification-subject, #form-notification-message, #form-notification-entry").prop("disabled",false)}else{g("#notification-email").hide();g("#form-notification-email-name, #form-notification-email-from, #form-notification-email, #form-notification-subject, #form-notification-message, #form-notification-entry").prop("disabled","disabled")}});g("#vfb-export-select-all").click(function(m){m.preventDefault();g('#vfb-export-entries-fields input[type="checkbox"]').prop("checked",true)});g("#vfb-export-entries-forms").change(function(){var n=g(this).val(),m=j(n);g("#vfb-export-entries-fields").html("Loading...");g.get(ajaxurl,{action:"visual_form_builder_export_load_options",id:n,count:m,page:pagenow}).done(function(o){g("#vfb-export-entries-fields").html(o)}).fail(function(o){g("#vfb-export-entries-fields").html("Error loading entry fields.")})});g("#vfb-export-entries-rows").change(function(){var n=g("#vfb-export-entries-forms").val();var m=g(this).val();g("#vfb-export-entries-fields").html("Loading...");g.get(ajaxurl,{action:"visual_form_builder_export_load_options",id:n,offset:m,page:pagenow}).done(function(o){g("#vfb-export-entries-fields").html(o)}).fail(function(o){g("#vfb-export-entries-fields").html("Error loading entry fields.")})});function j(n){var m="";g.ajax(ajaxurl,{async:false,data:{action:"visual_form_builder_export_entries_count",id:n,page:pagenow}}).done(function(o){if(o>1000){g("#vfb-export-entries-rows").empty();var q=Math.ceil(parseInt(o)/1000);for(var p=1;p<=q;p++){g("#vfb-export-entries-rows").append(g("<option></option>").attr("value",p).text(p))}g("#vfb-export-entries-pages").show()}else{g("#vfb-export-entries-pages").hide()}m=o}).fail(function(o){});return m}});
|
1 |
+
jQuery(document).ready(function(g){if(window.VfbAdminPages){var f=VfbAdminPages.vfb_pages;if(pagenow==f.vfb){g(".if-js-closed").removeClass("if-js-closed").addClass("closed");postboxes.add_postbox_toggles(f.vfb)}}var c=null;g(document).on("mouseenter mouseleave",".vfb-tooltip",function(p){if(p.type=="mouseenter"){if(c){clearTimeout(c);c=null}var m=g(this).attr("title"),o=g(this).attr("rel"),n=g(this).width();g(this).append('<div class="tooltip"><h3>'+m+'</h3><p class="text">'+o+"</p></div>");g.data(this,"title",m);this.title="";g(this).find(".tooltip").css({left:n+22});c=setTimeout(function(){g(".tooltip").fadeIn(300)},500)}else{this.title=g.data(this,"title");g(".tooltip").fadeOut(500);g(this).children().remove()}});g(document).on("click","a.addOption",function(s){s.preventDefault();var n=g(this).parent().parent().find(".clonedOption").length;var r=n+1;var t=g(this).closest("div").attr("id");var q=g(this).closest("div").children("label").attr("for");var m=q.replace(new RegExp(/(\d+)$/g),"");var p=t.replace(new RegExp(/(\d+)$/g),"");var o=g("#"+t).clone().attr("id",p+r);o.children("label").attr("for",m+r);o.find('input[type="text"]').attr("id",m+r);o.find('input[type="radio"]').attr("value",r);g("#"+p+n).after(o)});g(document).on("click","a.deleteOption",function(n){n.preventDefault();var m=g(this).parent().parent().find(".clonedOption").length;if(m-1==0){alert("You must have at least one option.")}else{g(this).closest("div").remove()}});g(document).on("click","a.addEmail",function(s){s.preventDefault();var n=g(this).closest("#email-details").find(".clonedOption").length;var r=n+1;var t=g(this).closest("div").attr("id");var q=g(this).closest("div").find("label").attr("for");var m=q.replace(new RegExp(/(\d+)$/g),"");var p=t.replace(new RegExp(/(\d+)$/g),"");var o=g("#"+t).clone().attr("id",p+r);o.find("label").attr("for",m+r);o.find("input").attr("id",m+r);g("#"+p+n).after(o)});g(document).on("click","a.deleteEmail",function(n){n.preventDefault();var m=g(this).closest("#email-details").find(".clonedOption").length;if(m-1==0){alert("You must have at least one option.")}else{g(this).closest("div").remove()}});g('.option input[type="radio"]').mousedown(function(){g(this).attr("previousValue",g(this).prop("checked"))}).click(function(){var m=g(this).attr("previousValue");if(m=="true"){g(this).prop("checked",false)}});g(".menu-delete").click(function(){var m=(g(this).hasClass("entry-delete"))?"entry":"form";var n=confirm("You are about to permanently delete this "+m+" and all of its data.\n'Cancel' to stop, 'OK' to delete.");if(n){return true}return false});g(document).on("click","a.item-edit",function(m){m.preventDefault();g(m.target).closest("li").children(".menu-item-settings").slideToggle("fast");g(this).toggleClass("opened")});function l(m){if("FIELDSET"!==m){g("#vfb-fieldset-first-warning").show()}else{g("#vfb-fieldset-first-warning").hide()}}g("#vfb-menu-to-edit").nestedSortable({listType:"ul",maxLevels:3,handle:".vfb-menu-item-handle",placeholder:"vfb-sortable-placeholder",forcePlaceholderSize:true,forceHelperSize:true,tolerance:"pointer",toleranceElement:"> dl",items:"li:not(.ui-state-disabled)",create:function(m,n){g(this).css("min-height",g(this).height())},start:function(m,n){n.placeholder.height(n.item.height())},stop:function(n,o){var m=g("#vfb-menu-to-edit .item-type:first").text();opts={url:ajaxurl,type:"POST",async:true,cache:false,dataType:"json",data:{action:"visual_form_builder_sort_field",order:g(this).nestedSortable("toArray")},success:function(p){g("#loading-animation").hide();l(m);return}};g.ajax(opts)}});g("#form-items .vfb-draggable-form-items").click(function(m){m.preventDefault();g(this).data("submit_value",g(this).text())});g("#form-items .vfb-draggable-form-items").click(function(o){o.preventDefault();var p=g(this).closest("form").serializeArray(),n=g(this).data("submit_value"),m=g("#vfb-menu-to-edit li.ui-state-disabled:first").attr("id").match(new RegExp(/(\d+)$/g))[0];g("img.waiting").show();g.post(ajaxurl,{action:"visual_form_builder_create_field",data:p,field_type:n,previous:m,page:pagenow,nonce:g("#_wpnonce").val()}).done(function(q){g("img.waiting").hide();g(q).hide().insertBefore("#vfb-menu-to-edit li.ui-state-disabled:first").fadeIn()})});g(document).on("click","a.item-delete",function(u){u.preventDefault();var q=childs=new Array(),y=0,n=g(this).attr("href"),m=n.split("&"),s=confirm("You are about to permanently delete this field.\n'Cancel' to stop, 'OK' to delete.");if(!s){return false}for(var r=0;r<m.length;r++){var w=m[r].indexOf("=");var v=m[r].substring(0,w);var x=m[r].substring(w+1);q[v]=x}var o=g(this).closest(".form-item").find("ul").children();var p=o.parent().html();o.each(function(t){childs[t]=g(this).attr("id").match(new RegExp(/(\d+)$/g))[0]});var z=g(this).closest("li.form-item").parents("li.form-item");if(z.length){y=z.attr("id").match(new RegExp(/(\d+)$/g))[0]}g.post(ajaxurl,{action:"visual_form_builder_delete_field",form:q.form,field:q.field,child_ids:childs,parent_id:y,page:pagenow,nonce:q._wpnonce}).done(function(t){g("#form_item_"+q.field).addClass("deleting").animate({opacity:0,height:0},350,function(){g(this).before(p).remove()})})});g("#form-settings-button").click(function(o){o.preventDefault();g(this).toggleClass("current");g("#form-settings").slideToggle();var m=g('input[name="form_id"]').val(),n=(g(this).hasClass("current"))?"opened":"closed";g.post(ajaxurl,{action:"visual_form_builder_form_settings",form:m,status:n,page:pagenow}).done(function(p){if(n=="closed"){g(".settings-links").removeClass("on");g(".settings-links:first").addClass("on");g(".form-details").slideUp("normal");g(".form-details:first").show("normal")}})});g(".settings-links").click(function(o){o.preventDefault();g(".settings-links").removeClass("on");g(".form-details").slideUp("normal");if(g(this).next("div").is(":hidden")==true){g(this).addClass("on");g(this).next().slideDown("normal")}var n=g('input[name="form_id"]').val(),m=this.hash.replace(/#/g,"");g.post(ajaxurl,{action:"visual_form_builder_form_settings",form:n,accordion:m,page:pagenow})});var b=false;g("#vfb-form-builder-management input, #vfb-form-builder-management select, #vfb-form-builder-management textarea").change(function(){i()});function i(){b=true}window.onbeforeunload=function(){if(b){return"The changes you made will be lost if you navigate away from this page."}};g(document).on("submit","#visual-form-builder-update",function(){window.onbeforeunload=null});if(g(".columns-2 #side-sortables").length>0){var a=g("#vfb_form_items_meta_box"),d=a.offset(),e=a.nextAll(),h=false;g(window).on("scroll",function(){if(g(window).scrollTop()>d.top){a.stop().css({top:55,position:"fixed","z-index":"999"});if(e.is(":visible")){h=true;e.stop().css({opacity:0.1})}}else{a.stop().css({top:0,position:"relative"});if(h){e.stop().css({opacity:1})}}})}var k=g(".form-success-type:checked").val();g("#form-success-message-"+k).show();g(".form-success-type").change(function(){var m=g(this).val();switch(m){case"text":g("#form-success-message-text").show();g("#form-success-message-page, #form-success-message-redirect").hide();break;case"page":g("#form-success-message-page").show();g("#form-success-message-text, #form-success-message-redirect").hide();break;case"redirect":g("#form-success-message-redirect").show();g("#form-success-message-text, #form-success-message-page").hide();break}});g(".vfb-field-types").click(function(n){n.preventDefault();g("#vfb-field-tabs li").removeClass("tabs");g(this).parent().addClass("tabs");g(".tabs-panel-active").removeClass("tabs-panel-active").addClass("tabs-panel-inactive");var m=this.hash;g(m).removeClass("tabs-panel-inactive").addClass("tabs-panel-active")});g("#visual-form-builder-update").validate({rules:{"form_email_to[]":{email:true},form_email_from:{email:true},form_success_message_redirect:{url:true},form_notification_email_name:{required:function(m){return g("#form-notification-setting").is(":checked")}},form_notification_email_from:{required:function(m){return g("#form-notification-setting").is(":checked")},email:true},form_notification_email:{required:function(m){return g("#form-notification-setting").is(":checked")}}},errorPlacement:function(m,n){m.insertAfter(n.parent())}});g("#visual-form-builder-new-form").validate();g("#form_email_from_name_override").change(function(){if(g("#form_email_from_name_override").val()==""){g("#form-email-sender-name").prop("readonly",false)}else{g("#form-email-sender-name").prop("readonly","readonly")}});g("#form_email_from_override").change(function(){if(g("#form_email_from_override").val()==""){g("#form-email-sender").prop("readonly",false)}else{g("#form-email-sender").prop("readonly","readonly")}});g("#notification-email").toggle(g("#form-notification-setting").prop("checked"));g("#form-notification-setting").change(function(){var m=g(this).is(":checked");if(m){g("#notification-email").show();g("#form-notification-email-name, #form-notification-email-from, #form-notification-email, #form-notification-subject, #form-notification-message, #form-notification-entry").prop("disabled",false)}else{g("#notification-email").hide();g("#form-notification-email-name, #form-notification-email-from, #form-notification-email, #form-notification-subject, #form-notification-message, #form-notification-entry").prop("disabled","disabled")}});g("#vfb-export-select-all").click(function(m){m.preventDefault();g('#vfb-export-entries-fields input[type="checkbox"]').prop("checked",true)});g("#vfb-export-entries-forms").change(function(){var n=g(this).val(),m=j(n);g("#vfb-export-entries-fields").html("Loading...");g.get(ajaxurl,{action:"visual_form_builder_export_load_options",id:n,count:m,page:pagenow}).done(function(o){g("#vfb-export-entries-fields").html(o)}).fail(function(o){g("#vfb-export-entries-fields").html("Error loading entry fields.")})});g("#vfb-export-entries-rows").change(function(){var n=g("#vfb-export-entries-forms").val();var m=g(this).val();g("#vfb-export-entries-fields").html("Loading...");g.get(ajaxurl,{action:"visual_form_builder_export_load_options",id:n,offset:m,page:pagenow}).done(function(o){g("#vfb-export-entries-fields").html(o)}).fail(function(o){g("#vfb-export-entries-fields").html("Error loading entry fields.")})});function j(n){var m="";g.ajax(ajaxurl,{async:false,data:{action:"visual_form_builder_export_entries_count",id:n,page:pagenow}}).done(function(o){if(o>1000){g("#vfb-export-entries-rows").empty();var q=Math.ceil(parseInt(o)/1000);for(var p=1;p<=q;p++){g("#vfb-export-entries-rows").append(g("<option></option>").attr("value",p).text(p))}g("#vfb-export-entries-pages").show()}else{g("#vfb-export-entries-pages").hide()}m=o}).fail(function(o){});return m}});
|
readme.txt
CHANGED
@@ -4,7 +4,7 @@ Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=G87A9
|
|
4 |
Tags: form, forms, contact form, contact forms, form, forms, form to email, email form, email, input, validation, jquery, shortcode, form builder, contact form builder, form manager, form creator
|
5 |
Requires at least: 3.5
|
6 |
Tested up to: 3.6
|
7 |
-
Stable tag: 2.7.
|
8 |
License: GPLv2 or later
|
9 |
|
10 |
Build beautiful, fully functional contact forms in only a few minutes without writing PHP, CSS, or HTML.
|
@@ -225,6 +225,16 @@ function my_scripts_method() {
|
|
225 |
|
226 |
== Changelog ==
|
227 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
228 |
**Version 2.7.3 — May 07, 2013**
|
229 |
|
230 |
* Fix bug where referer URL was not compatible with certain permalink structures
|
@@ -523,6 +533,9 @@ function my_scripts_method() {
|
|
523 |
|
524 |
== Upgrade Notice ==
|
525 |
|
|
|
|
|
|
|
526 |
= 2.7.3 =
|
527 |
Fix bug where referer URL was not compatible with certain permalink structures
|
528 |
|
4 |
Tags: form, forms, contact form, contact forms, form, forms, form to email, email form, email, input, validation, jquery, shortcode, form builder, contact form builder, form manager, form creator
|
5 |
Requires at least: 3.5
|
6 |
Tested up to: 3.6
|
7 |
+
Stable tag: 2.7.4
|
8 |
License: GPLv2 or later
|
9 |
|
10 |
Build beautiful, fully functional contact forms in only a few minutes without writing PHP, CSS, or HTML.
|
225 |
|
226 |
== Changelog ==
|
227 |
|
228 |
+
**Version 2.7.4 — May 08, 2013**
|
229 |
+
|
230 |
+
* Update Numbers field to allow either Digits or Number validation and sanitize as float instead of int
|
231 |
+
* Update Entries Detail "Delete" link to a "Trash" link
|
232 |
+
* Fix bug where referer URL did not match domains that prepended www
|
233 |
+
* Fix bug in form output where file uploads were not being sent
|
234 |
+
* Fix bug on Entries List to only display approved (i.e. untrashed) entries in All view
|
235 |
+
* Fix bug on Entries List to properly display Today's Entries
|
236 |
+
* Minor updates
|
237 |
+
|
238 |
**Version 2.7.3 — May 07, 2013**
|
239 |
|
240 |
* Fix bug where referer URL was not compatible with certain permalink structures
|
533 |
|
534 |
== Upgrade Notice ==
|
535 |
|
536 |
+
= 2.7.4 =
|
537 |
+
Fix bug where referer URL did not match domains that prepended www. Fix bug where file uploads were not being sent. Other updates and fixes.
|
538 |
+
|
539 |
= 2.7.3 =
|
540 |
Fix bug where referer URL was not compatible with certain permalink structures
|
541 |
|
uninstall.php
CHANGED
@@ -16,5 +16,5 @@
|
|
16 |
delete_option( 'visual-form-builder-screen-options' );
|
17 |
delete_option( 'vfb_dashboard_widget_options' );
|
18 |
|
19 |
-
$wpdb->query( "DELETE FROM " . $wpdb->prefix . "usermeta WHERE meta_key IN ( 'vfb-form-settings', 'vfb_entries_per_page', 'managevisual-form-builder_page_vfb-entriescolumnshidden' )" );
|
20 |
?>
|
16 |
delete_option( 'visual-form-builder-screen-options' );
|
17 |
delete_option( 'vfb_dashboard_widget_options' );
|
18 |
|
19 |
+
$wpdb->query( "DELETE FROM " . $wpdb->prefix . "usermeta WHERE meta_key IN ( 'vfb-form-settings', 'vfb_entries_per_page', 'vfb_forms_per_page', 'managevisual-form-builder_page_vfb-entriescolumnshidden' )" );
|
20 |
?>
|
visual-form-builder.php
CHANGED
@@ -4,7 +4,7 @@ Plugin Name: Visual Form Builder
|
|
4 |
Description: Dynamically build forms using a simple interface. Forms include jQuery validation, a basic logic-based verification system, and entry tracking.
|
5 |
Author: Matthew Muro
|
6 |
Author URI: http://matthewmuro.com
|
7 |
-
Version: 2.7.
|
8 |
*/
|
9 |
|
10 |
/*
|
@@ -686,7 +686,7 @@ class Visual_Form_Builder{
|
|
686 |
if ( !isset( $_REQUEST['action'] ) )
|
687 |
return;
|
688 |
|
689 |
-
if ( in_array( $_REQUEST['page'], array( 'visual-form-builder', 'vfb-add-new' ) ) ) :
|
690 |
switch ( $_REQUEST['action'] ) :
|
691 |
case 'create_form' :
|
692 |
|
@@ -977,6 +977,11 @@ class Visual_Form_Builder{
|
|
977 |
}
|
978 |
|
979 |
break;
|
|
|
|
|
|
|
|
|
|
|
980 |
endswitch;
|
981 |
endif;
|
982 |
}
|
@@ -1452,11 +1457,14 @@ class Visual_Form_Builder{
|
|
1452 |
<span class="vfb-tooltip" title="<?php esc_attr_e( 'About Validation', 'visual-form-builder' ); ?>" rel="<?php esc_attr_e( 'Ensures user-entered data is formatted properly. For more information on Validation, refer to the Help tab at the top of this page.', 'visual-form-builder' ); ?>">(?)</span>
|
1453 |
<br />
|
1454 |
|
1455 |
-
<?php if ( in_array( $field->field_type , array( 'text', 'time' ) ) ) : ?>
|
1456 |
<select name="field_validation-<?php echo $field->field_id; ?>" class="widefat" id="edit-form-item-validation-<?php echo $field->field_id; ?>">
|
1457 |
<?php if ( $field->field_type == 'time' ) : ?>
|
1458 |
<option value="time-12" <?php selected( $field->field_validation, 'time-12' ); ?>><?php _e( '12 Hour Format' , 'visual-form-builder'); ?></option>
|
1459 |
<option value="time-24" <?php selected( $field->field_validation, 'time-24' ); ?>><?php _e( '24 Hour Format' , 'visual-form-builder'); ?></option>
|
|
|
|
|
|
|
1460 |
<?php else : ?>
|
1461 |
<option value="" <?php selected( $field->field_validation, '' ); ?>><?php _e( 'None' , 'visual-form-builder'); ?></option>
|
1462 |
<option value="email" <?php selected( $field->field_validation, 'email' ); ?>><?php _e( 'Email' , 'visual-form-builder'); ?></option>
|
@@ -1984,7 +1992,7 @@ class Visual_Form_Builder{
|
|
1984 |
break;
|
1985 |
|
1986 |
case 'number' :
|
1987 |
-
return
|
1988 |
break;
|
1989 |
|
1990 |
case 'address' :
|
@@ -2028,10 +2036,12 @@ class Visual_Form_Builder{
|
|
2028 |
|
2029 |
// Basic check for type when not set
|
2030 |
if ( empty( $type ) ) :
|
2031 |
-
if ( array_key_exists( 'address', $value ) )
|
2032 |
$type = 'address';
|
2033 |
-
elseif ( array_key_exists( 'hour', $value ) && array_key_exists( 'min', $value ) )
|
2034 |
$type = 'time';
|
|
|
|
|
2035 |
else
|
2036 |
$type = 'default';
|
2037 |
endif;
|
@@ -2081,9 +2091,15 @@ class Visual_Form_Builder{
|
|
2081 |
|
2082 |
break;
|
2083 |
|
|
|
|
|
|
|
|
|
|
|
|
|
2084 |
default :
|
2085 |
|
2086 |
-
$output =
|
2087 |
|
2088 |
break;
|
2089 |
|
4 |
Description: Dynamically build forms using a simple interface. Forms include jQuery validation, a basic logic-based verification system, and entry tracking.
|
5 |
Author: Matthew Muro
|
6 |
Author URI: http://matthewmuro.com
|
7 |
+
Version: 2.7.4
|
8 |
*/
|
9 |
|
10 |
/*
|
686 |
if ( !isset( $_REQUEST['action'] ) )
|
687 |
return;
|
688 |
|
689 |
+
if ( in_array( $_REQUEST['page'], array( 'visual-form-builder', 'vfb-add-new', 'vfb-entries' ) ) ) :
|
690 |
switch ( $_REQUEST['action'] ) :
|
691 |
case 'create_form' :
|
692 |
|
977 |
}
|
978 |
|
979 |
break;
|
980 |
+
|
981 |
+
case 'trash_entry' :
|
982 |
+
$entry_id = absint( $_GET['entry'] );
|
983 |
+
$wpdb->update( $this->entries_table_name, array( 'entry_approved' => 'trash' ), array( 'entries_id' => $entry_id ) );
|
984 |
+
break;
|
985 |
endswitch;
|
986 |
endif;
|
987 |
}
|
1457 |
<span class="vfb-tooltip" title="<?php esc_attr_e( 'About Validation', 'visual-form-builder' ); ?>" rel="<?php esc_attr_e( 'Ensures user-entered data is formatted properly. For more information on Validation, refer to the Help tab at the top of this page.', 'visual-form-builder' ); ?>">(?)</span>
|
1458 |
<br />
|
1459 |
|
1460 |
+
<?php if ( in_array( $field->field_type , array( 'text', 'time', 'number' ) ) ) : ?>
|
1461 |
<select name="field_validation-<?php echo $field->field_id; ?>" class="widefat" id="edit-form-item-validation-<?php echo $field->field_id; ?>">
|
1462 |
<?php if ( $field->field_type == 'time' ) : ?>
|
1463 |
<option value="time-12" <?php selected( $field->field_validation, 'time-12' ); ?>><?php _e( '12 Hour Format' , 'visual-form-builder'); ?></option>
|
1464 |
<option value="time-24" <?php selected( $field->field_validation, 'time-24' ); ?>><?php _e( '24 Hour Format' , 'visual-form-builder'); ?></option>
|
1465 |
+
<?php elseif ( in_array( $field->field_type, array( 'number' ) ) ) : ?>
|
1466 |
+
<option value="number" <?php selected( $field->field_validation, 'number' ); ?>><?php _e( 'Number' , 'visual-form-builder'); ?></option>
|
1467 |
+
<option value="digits" <?php selected( $field->field_validation, 'digits' ); ?>><?php _e( 'Digits' , 'visual-form-builder'); ?></option>
|
1468 |
<?php else : ?>
|
1469 |
<option value="" <?php selected( $field->field_validation, '' ); ?>><?php _e( 'None' , 'visual-form-builder'); ?></option>
|
1470 |
<option value="email" <?php selected( $field->field_validation, 'email' ); ?>><?php _e( 'Email' , 'visual-form-builder'); ?></option>
|
1992 |
break;
|
1993 |
|
1994 |
case 'number' :
|
1995 |
+
return floatval( $data );
|
1996 |
break;
|
1997 |
|
1998 |
case 'address' :
|
2036 |
|
2037 |
// Basic check for type when not set
|
2038 |
if ( empty( $type ) ) :
|
2039 |
+
if ( is_array( $value ) && array_key_exists( 'address', $value ) )
|
2040 |
$type = 'address';
|
2041 |
+
elseif ( is_array( $value ) && array_key_exists( 'hour', $value ) && array_key_exists( 'min', $value ) )
|
2042 |
$type = 'time';
|
2043 |
+
elseif ( is_array( $value ) )
|
2044 |
+
$type = 'checkbox';
|
2045 |
else
|
2046 |
$type = 'default';
|
2047 |
endif;
|
2091 |
|
2092 |
break;
|
2093 |
|
2094 |
+
case 'checkbox' :
|
2095 |
+
|
2096 |
+
$output = esc_html( implode( ', ', $value ) );
|
2097 |
+
|
2098 |
+
break;
|
2099 |
+
|
2100 |
default :
|
2101 |
|
2102 |
+
$output = wp_specialchars_decode( stripslashes( esc_html( $value ) ), ENT_QUOTES );
|
2103 |
|
2104 |
break;
|
2105 |
|