Restaurant Reservations - Version 1.5

Version Description

This update adds the ability to configure which columns are visible in the bookings table. It works with the Custom Fields addon. If you have added fields using custom code, please read the release notification at themeofthecrop.com before updating.

Download this release

Release Info

Developer NateWr
Plugin Icon 128x128 Restaurant Reservations
Version 1.5
Comparing to
See all releases

Code changes from version 1.4.10 to 1.5

assets/addons-backup.json CHANGED
@@ -15,7 +15,7 @@
15
"price":"$20",
16
"img":"https:\/\/themeofthecrop.com\/promo\/plugins\/mailchimp-for-rtb.png",
17
"status":"released",
18
- "description":"Subscribe emails from new restaurant reservations to your MailChimp mailing list."
19
},
20
{
21
"id":"export-bookings-for-rtb",
15
"price":"$20",
16
"img":"https:\/\/themeofthecrop.com\/promo\/plugins\/mailchimp-for-rtb.png",
17
"status":"released",
18
+ "description":"Subscribe emails from new restaurant reservations to your MailChimp mailing list. <strong>Use a different mailing list provider? Let me know <a href=\"http:\/\/themeofthecrop.com\/2015\/12\/17\/suggest-next-mailing-list-integration\/?utm_source=Plugin&utm_medium=Addon%20List&utm_campaign=Restaurant%20Reservations\">which one</a>.</strong>"
19
},
20
{
21
"id":"export-bookings-for-rtb",
assets/css/admin.css CHANGED
@@ -50,9 +50,13 @@
50
color: #000;
51
}
52
53
- #rtb-bookings-table .column-message .rtb-message-data,
54
- #rtb-bookings-table .message-row {
55
- display: none;
56
}
57
58
#rtb-bookings-table tr.closed {
@@ -64,8 +68,7 @@
64
filter: opacity(alpha=100);
65
}
66
67
- #rtb-bookings-table tr.pending .check-column,
68
- #rtb-bookings-table tr.pending.message-row td {
69
border-left: 4px solid #dd3d36;
70
}
71
@@ -81,8 +84,8 @@
81
width: 3em;
82
}
83
84
- #rtb-bookings-table th#message {
85
- width: 5em;
86
}
87
88
#rtb-bookings-table td .actions {
@@ -144,6 +147,34 @@
144
background: #dd3d36;
145
}
146
147
@media screen and (max-width: 782px) {
148
149
/* Prevent date column from being hidden in WP versions < 4.3 */
@@ -151,12 +182,12 @@
151
display: table-cell;
152
}
153
154
- /* Always display message data in mobile views */
155
- #rtb-bookings-table .column-message .rtb-message-data {
156
display: block;
157
}
158
159
- #rtb-bookings-table .column-message .rtb-show-message {
160
display: none;
161
}
162
}
@@ -238,15 +269,9 @@
238
display: block;
239
}
240
241
- #rtb-booking-modal button,
242
- #rtb-email-modal button {
243
- margin-top: 1em;
244
- margin-right: 1em;
245
- }
246
-
247
- #rtb-booking-modal .button,
248
- #rtb-email-modal .button {
249
margin-top: 1em;
250
}
251
252
.rtb-admin-modal button,
@@ -341,6 +366,23 @@
341
max-height: 20em;
342
}
343
344
#rtb-error-modal .rtb-error-msg {
345
margin-bottom: 1em;
346
}
50
color: #000;
51
}
52
53
+ #rtb-bookings-table .tablenav .actions .button {
54
+ margin-top: 1px;
55
+ margin-bottom: 1px;
56
+ }
57
+
58
+ #rtb-bookings-table .tablenav .actions .button .dashicons {
59
+ line-height: 28px;
60
}
61
62
#rtb-bookings-table tr.closed {
68
filter: opacity(alpha=100);
69
}
70
71
+ #rtb-bookings-table tr.pending .check-column {
72
border-left: 4px solid #dd3d36;
73
}
74
84
width: 3em;
85
}
86
87
+ #rtb-bookings-table th#details {
88
+ width: 4em;
89
}
90
91
#rtb-bookings-table td .actions {
147
background: #dd3d36;
148
}
149
150
+ #rtb-bookings-table tr ul {
151
+ margin: 0;
152
+ }
153
+
154
+ .rtb-details-data {
155
+ display: none;
156
+ }
157
+
158
+ .rtb-details-data .details {
159
+ margin: 0;
160
+ }
161
+
162
+ .rtb-details-data .details > li {
163
+ margin-top: 2em;
164
+ }
165
+
166
+ .rtb-details-data .details > li:first-child {
167
+ margin-top: 0;
168
+ }
169
+
170
+ .rtb-details-data .details .label {
171
+ font-weight: 900;
172
+ }
173
+
174
+ #rtb-details-modal .rtb-details-data {
175
+ display: block;
176
+ }
177
+
178
@media screen and (max-width: 782px) {
179
180
/* Prevent date column from being hidden in WP versions < 4.3 */
182
display: table-cell;
183
}
184
185
+ /* Always display details data in mobile views */
186
+ #rtb-bookings-table .column-details .rtb-details-data {
187
display: block;
188
}
189
190
+ #rtb-bookings-table .column-details .rtb-show-details {
191
display: none;
192
}
193
}
269
display: block;
270
}
271
272
+ .rtb-admin-modal .button {
273
margin-top: 1em;
274
+ margin-right: 0.5em;
275
}
276
277
.rtb-admin-modal button,
366
max-height: 20em;
367
}
368
369
+ .rtb-column-form ul {
370
+ margin: 0;
371
+ }
372
+
373
+ .rtb-column-form label {
374
+ font-style: normal;
375
+ padding: 2px 0;
376
+ }
377
+
378
+ .rtb-column-form fieldset {
379
+ margin-bottom: 2em;
380
+ }
381
+
382
+ .rtb-column-form .action-status {
383
+ margin-top: 0;
384
+ }
385
+
386
#rtb-error-modal .rtb-error-msg {
387
margin-bottom: 1em;
388
}
assets/js/admin.js CHANGED
@@ -21,22 +21,10 @@ jQuery(document).ready(function ($) {
21
});
22
});
23
24
- // Show or hide a booking message in the bookings table
25
- $( '#rtb-bookings-table .column-message a' ).click( function () {
26
- var message_id = $(this).data( 'id' );
27
- if ( $(this).parent().parent().siblings( '#' + message_id ).length ) {
28
- $( '#' + $(this).data( 'id' ) ).fadeOut( function() {
29
- $(this).remove();
30
- });
31
- $(this).children( '.dashicons' ).removeClass( 'dashicons-welcome-comments' ).addClass( 'dashicons-testimonial' );
32
- } else {
33
- var row = $(this).closest( 'tr' );
34
- row.after( '<tr class="' + row.attr( 'class' ) + ' message-row" id="' + message_id + '"><td colspan="' + row.children( 'th, td' ).length + '">' + $(this).siblings( '.rtb-message-data' ).html() + '</td></tr>' );
35
- $( '#' + message_id ).fadeIn();
36
- $(this).children( '.dashicons' ).removeClass( 'dashicons-testimonial' ).addClass( 'dashicons-welcome-comments' );
37
- }
38
-
39
- return false;
40
});
41
42
// Register clicks on action links
@@ -68,6 +56,18 @@ jQuery(document).ready(function ($) {
68
e.preventDefault();
69
});
70
71
/**
72
* Show/hide loading spinner when edit/delete link clicked
73
*/
@@ -80,7 +80,7 @@ jQuery(document).ready(function ($) {
80
}
81
82
/**
83
- * Modal to add/edit bookings from the admin
84
*/
85
var rtb_booking_modal = $( '#rtb-booking-modal' );
86
var rtb_booking_modal_fields = rtb_booking_modal.find( '#rtb-booking-form-fields' );
@@ -91,6 +91,13 @@ jQuery(document).ready(function ($) {
91
var rtb_email_modal_submit = rtb_email_modal.find( 'button' );
92
var rtb_email_modal_cancel = rtb_email_modal.find( '#rtb-cancel-email-modal' );
93
var rtb_email_modal_action_status = rtb_email_modal.find( '.action-status' );
94
var rtb_booking_modal_error = $( '#rtb-error-modal' );
95
var rtb_booking_modal_error_msg = rtb_booking_modal_error.find( '.rtb-error-msg' );
96
@@ -171,6 +178,45 @@ jQuery(document).ready(function ($) {
171
}
172
}
173
174
/**
175
* Initialize form field events
176
*/
@@ -243,12 +289,7 @@ jQuery(document).ready(function ($) {
243
244
if ( r.success ) {
245
246
- var rows = cell.parent();
247
- var next = rows.next();
248
- if ( next.hasClass( 'message-row' ) ) {
249
- rows = rows.add( next );
250
- }
251
- rows.fadeOut( 500, function() {
252
$(this).remove();
253
});
254
@@ -292,11 +333,7 @@ jQuery(document).ready(function ($) {
292
// but this will just reset everything again
293
rtb_toggle_booking_form_modal( false );
294
rtb_toggle_email_modal( false );
295
-
296
- // Show booking form modal
297
- $( '.add-booking' ).click( function() {
298
- rtb_toggle_booking_form_modal( true );
299
- });
300
301
// Close booking form modal when background or cancel button is clicked
302
rtb_booking_modal.click( function(e) {
@@ -320,6 +357,28 @@ jQuery(document).ready(function ($) {
320
}
321
});
322
323
// Close booking form error modal when background or cancel button is clicked
324
rtb_booking_modal_error.click( function(e) {
325
if ( $(e.target).is( rtb_booking_modal_error ) || $(e.target).is( rtb_booking_modal_error.find( 'a.button' ) ) ) {
@@ -332,6 +391,8 @@ jQuery(document).ready(function ($) {
332
if ( e.which == '27' ) {
333
rtb_toggle_booking_form_modal( false );
334
rtb_toggle_email_modal( false );
335
rtb_toggle_booking_form_error_modal( false );
336
}
337
});
@@ -436,7 +497,7 @@ jQuery(document).ready(function ($) {
436
437
} else {
438
439
- if ( typeof r.data == 'unspecified' || typeof r.data.error == 'unspecified' ) {
440
rtb_toggle_booking_form_error_modal( true, rtb_admin.strings.error_unspecified );
441
} else {
442
rtb_toggle_booking_form_error_modal( true, r.data.msg );
@@ -455,6 +516,62 @@ jQuery(document).ready(function ($) {
455
});
456
});
457
458
// Show the addons
459
if ( $( '#rtb-addons' ).length ) {
460
21
});
22
});
23
24
+ // Show or hide extra booking details in the bookings table
25
+ $( '.rtb-show-details' ).click( function (e) {
26
+ e.preventDefault();
27
+ rtb_toggle_details_modal( true, $(this).siblings( '.rtb-details-data' ).html() );
28
});
29
30
// Register clicks on action links
56
e.preventDefault();
57
});
58
59
+ // Show booking form modal
60
+ $( '.add-booking' ).click( function( e ) {
61
+ e.preventDefault();
62
+ rtb_toggle_booking_form_modal( true );
63
+ });
64
+
65
+ // Show column configuration modal
66
+ $( '.rtb-columns-button' ).click( function( e ) {
67
+ e.preventDefault();
68
+ rtb_toggle_column_modal( true );
69
+ });
70
+
71
/**
72
* Show/hide loading spinner when edit/delete link clicked
73
*/
80
}
81
82
/**
83
+ * Modals for the admin page
84
*/
85
var rtb_booking_modal = $( '#rtb-booking-modal' );
86
var rtb_booking_modal_fields = rtb_booking_modal.find( '#rtb-booking-form-fields' );
91
var rtb_email_modal_submit = rtb_email_modal.find( 'button' );
92
var rtb_email_modal_cancel = rtb_email_modal.find( '#rtb-cancel-email-modal' );
93
var rtb_email_modal_action_status = rtb_email_modal.find( '.action-status' );
94
+ var rtb_column_modal = $( '#rtb-column-modal' );
95
+ var rtb_column_modal_submit = rtb_column_modal.find( 'button' );
96
+ var rtb_column_modal_cancel = rtb_column_modal.find( '#rtb-cancel-column-modal' );
97
+ var rtb_column_modal_action_status = rtb_column_modal.find( '.action-status' );
98
+ var rtb_details_modal = $( '#rtb-details-modal' );
99
+ var rtb_details_modal_close = rtb_details_modal.find( '#rtb-close-details-modal' );
100
+ var rtb_details_modal_cancel = rtb_details_modal.find( '#rtb-cancel-details-modal' );
101
var rtb_booking_modal_error = $( '#rtb-error-modal' );
102
var rtb_booking_modal_error_msg = rtb_booking_modal_error.find( '.rtb-error-msg' );
103
178
}
179
}
180
181
+ /**
182
+ * Show or hide the column configuration modal
183
+ */
184
+ function rtb_toggle_column_modal( show ) {
185
+
186
+ if ( show ) {
187
+ rtb_column_modal.scrollTop( 0 ).addClass( 'is-visible' );
188
+ $( 'body' ).addClass( 'rtb-hide-body-scroll' );
189
+
190
+ } else {
191
+ rtb_column_modal.removeClass( 'is-visible' );
192
+ $( 'body' ).removeClass( 'rtb-hide-body-scroll' );
193
+ }
194
+ }
195
+
196
+ /**
197
+ * Show or hide the booking details modal
198
+ */
199
+ function rtb_toggle_details_modal( show, content ) {
200
+
201
+ if ( show ) {
202
+ rtb_details_modal.addClass( 'is-visible' ).scrollTop( 0 )
203
+ .find( '.rtb-details-data' ).html( content );
204
+ $( 'body' ).addClass( 'rtb-hide-body-scroll' );
205
+ rtb_details_modal.find( '.actions' ).click( function(e) {
206
+ var target = $( e.target );
207
+ rtb_toggle_details_modal( false );
208
+ rtb_toggle_email_modal( true, target.data( 'id'), target.data( 'email' ), target.data( 'name' ) );
209
+ });
210
+
211
+ } else {
212
+ rtb_details_modal.removeClass( 'is-visible' );
213
+ $( 'body' ).removeClass( 'rtb-hide-body-scroll' );
214
+ setTimeout( function() {
215
+ rtb_details_modal.find( '.rtb-details-data' ).empty();
216
+ }, 300 );
217
+ }
218
+ }
219
+
220
/**
221
* Initialize form field events
222
*/
289
290
if ( r.success ) {
291
292
+ cell.parent().fadeOut( 500, function() {
293
$(this).remove();
294
});
295
333
// but this will just reset everything again
334
rtb_toggle_booking_form_modal( false );
335
rtb_toggle_email_modal( false );
336
+ rtb_toggle_column_modal( false );
337
338
// Close booking form modal when background or cancel button is clicked
339
rtb_booking_modal.click( function(e) {
357
}
358
});
359
360
+ // Close column modal when background or cancel button is clicked
361
+ rtb_column_modal.click( function(e) {
362
+ if ( $(e.target).is( rtb_column_modal ) ) {
363
+ rtb_toggle_column_modal( false );
364
+ }
365
+
366
+ if ( $(e.target).is( rtb_column_modal_cancel ) && rtb_column_modal_cancel.prop( 'disabled' ) !== true ) {
367
+ rtb_toggle_column_modal( false );
368
+ }
369
+ });
370
+
371
+ // Close details modal when background or cancel button is clicked
372
+ rtb_details_modal.click( function(e) {
373
+ if ( $(e.target).is( rtb_details_modal ) ) {
374
+ rtb_toggle_details_modal( false );
375
+ }
376
+
377
+ if ( $(e.target).is( rtb_details_modal_cancel ) ) {
378
+ rtb_toggle_details_modal( false );
379
+ }
380
+ });
381
+
382
// Close booking form error modal when background or cancel button is clicked
383
rtb_booking_modal_error.click( function(e) {
384
if ( $(e.target).is( rtb_booking_modal_error ) || $(e.target).is( rtb_booking_modal_error.find( 'a.button' ) ) ) {
391
if ( e.which == '27' ) {
392
rtb_toggle_booking_form_modal( false );
393
rtb_toggle_email_modal( false );
394
+ rtb_toggle_column_modal( false );
395
+ rtb_toggle_details_modal( false );
396
rtb_toggle_booking_form_error_modal( false );
397
}
398
});
497
498
} else {
499
500
+ if ( typeof r.data == 'undefined' || typeof r.data.error == 'undefined' ) {
501
rtb_toggle_booking_form_error_modal( true, rtb_admin.strings.error_unspecified );
502
} else {
503
rtb_toggle_booking_form_error_modal( true, r.data.msg );
516
});
517
});
518
519
+ // Submit column configuration modal
520
+ rtb_column_modal_submit.click( function(e) {
521
+
522
+ e.preventDefault();
523
+ e.stopPropagation();
524
+
525
+ if ( $(this).prop( 'disabled' ) === true ) {
526
+ return;
527
+ }
528
+
529
+ // Loading
530
+ rtb_column_modal_submit.prop( 'disabled', true );
531
+ rtb_column_modal_cancel.prop( 'disabled', true );
532
+ rtb_column_modal_action_status.addClass( 'is-visible' );
533
+ rtb_show_action_status( rtb_column_modal_action_status, 'loading' );
534
+
535
+ var params = {};
536
+
537
+ params.action = 'rtb-admin-column-modal';
538
+ params.nonce = rtb_admin.nonce;
539
+
540
+ params.columns = [];
541
+ rtb_column_modal.find( 'input[name="rtb-columns-config"]:checked' ).each( function() {
542
+ params.columns.push( $(this).val() );
543
+ });
544
+
545
+ var data = $.param( params );
546
+
547
+ var jqhxr = $.post( ajaxurl, data, function( r ) {
548
+
549
+ if ( r.success ) {
550
+
551
+ // Refresh the page so that the new details are visible
552
+ window.location.reload();
553
+
554
+ } else {
555
+
556
+ if ( typeof r.data == 'undefined' || typeof r.data.error == 'undefined' ) {
557
+ rtb_toggle_booking_form_error_modal( true, rtb_admin.strings.error_unspecified );
558
+ } else {
559
+ rtb_toggle_booking_form_error_modal( true, r.data.msg );
560
+ }
561
+
562
+ rtb_column_modal_cancel.prop( 'disabled', false );
563
+ rtb_column_modal_submit.prop( 'disabled', false );
564
+ }
565
+
566
+ rtb_show_action_status( rtb_column_modal_action_status, r.success );
567
+
568
+ // Hide result status icon after a few seconds
569
+ setTimeout( function() {
570
+ rtb_column_modal.find( '.action-status' ).removeClass( 'is-visible' );
571
+ }, 4000 );
572
+ });
573
+ });
574
+
575
// Show the addons
576
if ( $( '#rtb-addons' ).length ) {
577
assets/js/booking-form.js CHANGED
@@ -19,7 +19,8 @@ jQuery(document).ready(function ($) {
19
// Show the message field on the booking form
20
$( '.rtb-booking-form .add-message a' ).click( function() {
21
$(this).hide();
22
- $(this).parent().siblings( '.message' ).addClass( 'message-open' );
23
24
return false;
25
});
19
// Show the message field on the booking form
20
$( '.rtb-booking-form .add-message a' ).click( function() {
21
$(this).hide();
22
+ $(this).parent().siblings( '.message' ).addClass( 'message-open' )
23
+ .find( 'label' ).focus();
24
25
return false;
26
});
includes/AdminBookings.class.php CHANGED
@@ -14,8 +14,8 @@ class rtbAdminBookings {
14
// Add the admin menu
15
add_action( 'admin_menu', array( $this, 'add_menu_page' ) );
16
17
- // Print the booking form modal
18
- add_action( 'admin_footer-toplevel_page_rtb-bookings', array( $this, 'print_booking_form_modal' ) );
19
20
// Receive Ajax requests
21
add_action( 'wp_ajax_nopriv_rtb-admin-booking-modal' , array( $this , 'nopriv_ajax' ) );
@@ -24,6 +24,8 @@ class rtbAdminBookings {
24
add_action( 'wp_ajax_rtb-admin-trash-booking', array( $this, 'trash_booking_ajax' ) );
25
add_action( 'wp_ajax_nopriv_rtb-admin-email-modal' , array( $this , 'nopriv_ajax' ) );
26
add_action( 'wp_ajax_rtb-admin-email-modal', array( $this, 'email_modal_ajax' ) );
27
28
// Validate post status and notification fields
29
add_action( 'rtb_validate_booking_submission', array( $this, 'validate_admin_fields' ) );
@@ -31,6 +33,9 @@ class rtbAdminBookings {
31
// Set post status when adding to the database
32
add_filter( 'rtb_insert_booking_data', array( $this, 'insert_booking_data' ), 10, 2 );
33
34
}
35
36
/**
@@ -84,10 +89,35 @@ class rtbAdminBookings {
84
}
85
86
/**
87
- * Print the booking form modal container on the admin bookings page
88
* @since 0.0.1
89
*/
90
- public function print_booking_form_modal() {
91
92
global $rtb_controller;
93
?>
@@ -112,7 +142,7 @@ class rtbAdminBookings {
112
<?php echo $this->print_booking_form_fields(); ?>
113
</div>
114
115
- <button type="submit" class="button-primary">
116
<?php _e( 'Add Booking', 'restaurant-reservations' ); ?>
117
</button>
118
<a href="#" class="button" id="rtb-cancel-booking-modal">
@@ -153,7 +183,7 @@ class rtbAdminBookings {
153
</div>
154
</fieldset>
155
156
- <button type="submit" class="button-primary">
157
<?php _e( 'Send Email', 'restaurant-reservations' ); ?>
158
</button>
159
<a href="#" class="button" id="rtb-cancel-email-modal">
@@ -167,6 +197,63 @@ class rtbAdminBookings {
167
</form>
168
</div>
169
</div>
170
<!-- Restaurant Reservations error message modal -->
171
<div id="rtb-error-modal" class="rtb-admin-modal">
172
<div class="rtb-error rtb-container">
@@ -523,6 +610,35 @@ class rtbAdminBookings {
523
wp_send_json_success();
524
}
525
526
527
/**
528
* Validate post status and notification fields
14
// Add the admin menu
15
add_action( 'admin_menu', array( $this, 'add_menu_page' ) );
16
17
+ // Print the modals
18
+ add_action( 'admin_footer-toplevel_page_rtb-bookings', array( $this, 'print_modals' ) );
19
20
// Receive Ajax requests
21
add_action( 'wp_ajax_nopriv_rtb-admin-booking-modal' , array( $this , 'nopriv_ajax' ) );
24
add_action( 'wp_ajax_rtb-admin-trash-booking', array( $this, 'trash_booking_ajax' ) );
25
add_action( 'wp_ajax_nopriv_rtb-admin-email-modal' , array( $this , 'nopriv_ajax' ) );
26
add_action( 'wp_ajax_rtb-admin-email-modal', array( $this, 'email_modal_ajax' ) );
27
+ add_action( 'wp_ajax_nopriv_rtb-admin-column-modal' , array( $this , 'nopriv_ajax' ) );
28
+ add_action( 'wp_ajax_rtb-admin-column-modal', array( $this, 'column_modal_ajax' ) );
29
30
// Validate post status and notification fields
31
add_action( 'rtb_validate_booking_submission', array( $this, 'validate_admin_fields' ) );
33
// Set post status when adding to the database
34
add_filter( 'rtb_insert_booking_data', array( $this, 'insert_booking_data' ), 10, 2 );
35
36
+ // Add the columns configuration button to the table
37
+ add_action( 'rtb_bookings_table_actions', array( $this, 'print_columns_config_button' ), 9 );
38
+
39
}
40
41
/**
89
}
90
91
/**
92
+ * Print button for configuring columns
93
+ *
94
+ * @param string pos Position of this tablenav: top|btm
95
+ * @since 0.1
96
+ */
97
+ public function print_columns_config_button( $pos ) {
98
+ if ( $pos != 'top' ) {
99
+ return;
100
+ }
101
+ ?>
102
+
103
+ <div class="alignleft actions rtb-actions">
104
+ <a href="#" class="button rtb-columns-button">
105
+ <span class="dashicons dashicons-admin-settings"></span>
106
+ <?php esc_html_e( 'Columns', 'restaurant-reservations' ); ?>
107
+ </a>
108
+ </div>
109
+
110
+ <?php
111
+ }
112
+
113
+ /**
114
+ * Print the modal containers
115
+ *
116
+ * New/edit bookings, send email, configure columns, errors.
117
+ *
118
* @since 0.0.1
119
*/
120
+ public function print_modals() {
121
122
global $rtb_controller;
123
?>
142
<?php echo $this->print_booking_form_fields(); ?>
143
</div>
144
145
+ <button type="submit" class="button button-primary">
146
<?php _e( 'Add Booking', 'restaurant-reservations' ); ?>
147
</button>
148
<a href="#" class="button" id="rtb-cancel-booking-modal">
183
</div>
184
</fieldset>
185
186
+ <button type="submit" class="button button-primary">
187
<?php _e( 'Send Email', 'restaurant-reservations' ); ?>
188
</button>
189
<a href="#" class="button" id="rtb-cancel-email-modal">
197
</form>
198
</div>
199
</div>
200
+
201
+ <!-- Restaurant Reservations column configuration modal -->
202
+ <div id="rtb-column-modal" class="rtb-admin-modal">
203
+ <div class="rtb-column-form rtb-container">
204
+ <form method="POST">
205
+ <input type="hidden" name="action" value="admin_column_config">
206
+
207
+ <fieldset>
208
+ <legend><?php esc_html_e( 'Columns', 'restaurant-reservations' ); ?></legend>
209
+ <ul>
210
+ <?php
211
+ $bookings_table = new rtbBookingsTable();
212
+ $columns = $bookings_table->get_all_columns();
213
+ $visible = $bookings_table->get_columns();
214
+ foreach( $columns as $column => $label ) :
215
+ // Don't allow these columns to be hidden
216
+ if ( $column == 'cb' || $column == 'details' || $column == 'date' ) {
217
+ continue;
218
+ }
219
+ ?>
220
+ <li>
221
+ <label>
222
+ <input type="checkbox" name="rtb-columns-config" value="<?php esc_attr_e( $column ); ?>"<?php if ( array_key_exists( $column, $visible ) ) : ?> checked<?php endif; ?>>
223
+ <?php esc_html_e( $label ); ?>
224
+ </label>
225
+ </li>
226
+ <?php
227
+ endforeach;
228
+ ?>
229
+ </ul>
230
+ </fieldset>
231
+
232
+ <button type="submit" class="button button-primary">
233
+ <?php _e( 'Update', 'restaurant-reservations' ); ?>
234
+ </button>
235
+ <a href="#" class="button" id="rtb-cancel-column-modal">
236
+ <?php _e( 'Cancel', 'restaurant-reservations' ); ?>
237
+ </a>
238
+ <div class="action-status">
239
+ <span class="spinner loading"></span>
240
+ <span class="dashicons dashicons-no-alt error"></span>
241
+ <span class="dashicons dashicons-yes success"></span>
242
+ </div>
243
+ </form>
244
+ </div>
245
+ </div>
246
+
247
+ <!-- Restaurant Reservations details modal -->
248
+ <div id="rtb-details-modal" class="rtb-admin-modal">
249
+ <div class="rtb-details-form rtb-container">
250
+ <div class="rtb-details-data"></div>
251
+ <a href="#" class="button" id="rtb-cancel-details-modal">
252
+ <?php _e( 'Close', 'restaurant-reservations' ); ?>
253
+ </a>
254
+ </div>
255
+ </div>
256
+
257
<!-- Restaurant Reservations error message modal -->
258
<div id="rtb-error-modal" class="rtb-admin-modal">
259
<div class="rtb-error rtb-container">
610
wp_send_json_success();
611
}
612
613
+ /**
614
+ * Handle ajax requests to configure columns
615
+ *
616
+ * @since 1.3.1
617
+ */
618
+ public function column_modal_ajax() {
619
+
620
+ global $rtb_controller;
621
+
622
+ // Authenticate request
623
+ if ( !check_ajax_referer( 'rtb-admin', 'nonce' ) || !current_user_can( 'manage_bookings' ) ) {
624
+ $this->nopriv_ajax();
625
+ }
626
+
627
+ if ( !isset( $_POST['columns'] ) || !is_array( $_POST['columns'] ) || empty( $_POST['columns'] ) ) {
628
+ wp_send_json_error(
629
+ array(
630
+ 'error' => 'no_columns',
631
+ 'msg' => __( 'You must select at least one column to display.', 'restaurant-reservations' ),
632
+ )
633
+ );
634
+ }
635
+
636
+ $settings = get_option( 'rtb-settings' );
637
+ $settings['bookings-table-columns'] = array_map( 'sanitize_key', $_POST['columns'] );
638
+ update_option( 'rtb-settings', $settings );
639
+
640
+ wp_send_json_success();
641
+ }
642
643
/**
644
* Validate post status and notification fields
includes/Compatibility.class.php CHANGED
@@ -24,6 +24,9 @@ class rtbCompatibility {
24
// Run a filter deprecrated in 1.4.3
25
add_filter( 'rtb_bookings_table_views_date_range', array( $this, 'rtn_bookings_table_views_schedule' ) );
26
27
}
28
29
/**
@@ -56,6 +59,56 @@ class rtbCompatibility {
56
return apply_filters( 'rtn_bookings_table_views_schedule', $views );
57
}
58
59
}
60
} // endif
61
24
// Run a filter deprecrated in 1.4.3
25
add_filter( 'rtb_bookings_table_views_date_range', array( $this, 'rtn_bookings_table_views_schedule' ) );
26
27
+ // Make sure custom fields don't completely disappear in 1.5
28
+ add_action( 'admin_init', array( $this, 'maybe_bridge_cffrtb_to_1_5' ) );
29
+
30
}
31
32
/**
59
return apply_filters( 'rtn_bookings_table_views_schedule', $views );
60
}
61
62
+ /**
63
+ * Check whether or not we need to run some compatibiilty code for older
64
+ * versions of the Custom Fields addon.
65
+ *
66
+ * @since 0.1
67
+ */
68
+ public function maybe_bridge_cffrtb_to_1_5() {
69
+ if ( !function_exists( 'cffrtbInit' ) || !function_exists( 'get_plugin_data' ) ) {
70
+ return;
71
+ }
72
+
73
+ $cffrtb = get_plugin_data( cffrtbInit::$plugin_dir . '/custom-fields-for-rtb.php', false );
74
+ if ( !isset( $cffrtb['Version'] ) || $cffrtb['Version'] >= 1.2 ) {
75
+ return;
76
+ }
77
+
78
+ add_filter( 'rtb_bookings_table_column_details', array( $this, 'add_cffrtb_fields_to_details' ), 11, 2 );
79
+ }
80
+
81
+ /**
82
+ * Add custom fields output to details column
83
+ *
84
+ * This function eases the transition to v1.5 for users of the Custom Fields
85
+ * addon. Some of the details around how the custom field data is added to
86
+ * the bookings table was changed. If the user is using an outdated version
87
+ * of Custom Fields, this function will ensure the data gets dropped into
88
+ * the new details column. There is still some wonky behavior: the custom
89
+ * fields appear as potential columns but adding them won't do anything.
90
+ * But this will at least ensure that the data doesn't disappear and users
91
+ * can then update to get the full functionality.
92
+ *
93
+ * @since 1.5
94
+ */
95
+ public function add_cffrtb_fields_to_details( $details, $booking ) {
96
+
97
+ if ( !isset( $booking->custom_fields ) ) {
98
+ return $details;
99
+ }
100
+
101
+ $fields = cffrtbInit()->fields->get_booking_fields_display_array( $booking );
102
+ foreach( $fields as $field ) {
103
+ $details[] = array(
104
+ 'label' => $field['title'],
105
+ 'value' => $field['display_val'],
106
+ );
107
+ }
108
+
109
+ return $details;
110
+ }
111
+
112
}
113
} // endif
114
includes/Query.class.php CHANGED
@@ -101,10 +101,9 @@ class rtbQuery {
101
$args['date_query'] = $date_query;
102
}
103
} elseif ( $args['date_range'] === 'today' ) {
104
- $today = getdate();
105
- $args['year'] = $today['year'];
106
- $args['monthnum'] = $today['mon'];
107
- $args['day'] = $today['mday'];
108
109
} elseif ( $args['date_range'] === 'upcoming' ) {
110
$args['date_query'] = array(
101
$args['date_query'] = $date_query;
102
}
103
} elseif ( $args['date_range'] === 'today' ) {
104
+ $args['year'] = date( 'Y', current_time( 'timestamp' ) );
105
+ $args['monthnum'] = date( 'm', current_time( 'timestamp' ) );
106
+ $args['day'] = date( 'd', current_time( 'timestamp' ) );
107
108
} elseif ( $args['date_range'] === 'upcoming' ) {
109
$args['date_query'] = array(
includes/WP_List_Table.BookingsTable.class.php CHANGED
@@ -75,13 +75,21 @@ class rtbBookingsTable extends WP_List_Table {
75
public $action_result = array();
76
77
/**
78
- * Type of nulk or quick action last performed
79
*
80
* @var string
81
* @since 1.4.6
82
*/
83
public $last_action = '';
84
85
/**
86
* Initialize the table and perform any requested actions
87
*
@@ -118,6 +126,9 @@ class rtbBookingsTable extends WP_List_Table {
118
$this->bookings_data();
119
120
$this->base_url = admin_url( 'admin.php?page=' . RTB_BOOKING_POST_TYPE );
121
}
122
123
/**
@@ -307,21 +318,70 @@ class rtbBookingsTable extends WP_List_Table {
307
308
/**
309
* Retrieve the table columns
310
* @since 0.0.1
311
*/
312
public function get_columns() {
313
- $columns = array(
314
'cb' => '<input type="checkbox" />', //Render a checkbox instead of text
315
'date' => __( 'Date', 'restaurant-reservations' ),
316
'party' => __( 'Party', 'restaurant-reservations' ),
317
'name' => __( 'Name', 'restaurant-reservations' ),
318
'email' => __( 'Email', 'restaurant-reservations' ),
319
'phone' => __( 'Phone', 'restaurant-reservations' ),
320
- 'message' => __( 'Message', 'restaurant-reservations' ),
321
- 'status' => __( 'Status', 'restaurant-reservations' )
322
);
323
324
- return apply_filters( 'rtb_bookings_table_columns', $columns );
325
}
326
327
/**
@@ -369,13 +429,6 @@ class rtbBookingsTable extends WP_List_Table {
369
case 'phone' :
370
$value = $booking->phone;
371
break;
372
- case 'message' :
373
- $value = '';
374
- if ( trim( $booking->message ) ) {
375
- $value = '<a href="#" class="rtb-show-message" data-id="message-' . esc_attr( $booking->ID ) . '"><span class="dashicons dashicons-testimonial"></span></a>';
376
- $value .= '<div class="rtb-message-data">' . $booking->message . '</div>';
377
- }
378
- break;
379
case 'status' :
380
global $rtb_controller;
381
if ( !empty( $rtb_controller->cpts->booking_statuses[$booking->post_status] ) ) {
@@ -386,6 +439,28 @@ class rtbBookingsTable extends WP_List_Table {
386
$value = $booking->post_status;
387
}
388
break;
389
default:
390
$value = isset( $booking->$column_name ) ? $booking->$column_name : '';
391
break;
@@ -407,6 +482,44 @@ class rtbBookingsTable extends WP_List_Table {
407
);
408
}
409
410
/**
411
* Retrieve the bulk actions
412
* @since 0.0.1
@@ -583,7 +696,7 @@ class rtbBookingsTable extends WP_List_Table {
583
} elseif ( !empty( $_GET['date_range'] ) ) {
584
585
if ( $_GET['date_range'] == 'today' ) {
586
- $where .= " AND p.post_date >= '" . date( 'Y-m-d' ) . "' AND p.post_date <= '" . date( 'Y-m-d', current_time( 'timestamp' ) + 86400 ) . "'";
587
}
588
589
// Default date setting is to show upcoming bookings
75
public $action_result = array();
76
77
/**
78
+ * Type of bulk or quick action last performed
79
*
80
* @var string
81
* @since 1.4.6
82
*/
83
public $last_action = '';
84
85
+ /**
86
+ * Stored reference to visible columns
87
+ *
88
+ * @var string
89
+ * @since 1.5
90
+ */
91
+ public $visible_columns = array();
92
+
93
/**
94
* Initialize the table and perform any requested actions
95
*
126
$this->bookings_data();
127
128
$this->base_url = admin_url( 'admin.php?page=' . RTB_BOOKING_POST_TYPE );
129
+
130
+ // Add default items to the details column if they've been hidden
131
+ add_filter( 'rtb_bookings_table_column_details', array( $this, 'add_details_column_items' ), 10, 2 );
132
}
133
134
/**
318
319
/**
320
* Retrieve the table columns
321
+ *
322
* @since 0.0.1
323
*/
324
public function get_columns() {
325
+
326
+ // Prevent the lookup from running over and over again on a single
327
+ // page load
328
+ if ( !empty( $this->visible_columns ) ) {
329
+ return $this->visible_columns;
330
+ }
331
+
332
+ $all_default_columns = $this->get_all_default_columns();
333
+
334
+ global $rtb_controller;
335
+ $visible_columns = $rtb_controller->settings->get_setting( 'bookings-table-columns' );
336
+ if ( empty( $visible_columns ) ) {
337
+ $columns = $all_default_columns;
338
+ } else {
339
+ $columns = array();
340
+ $columns['cb'] = $all_default_columns['cb'];
341
+ $columns['date'] = $all_default_columns['date'];
342
+
343
+ foreach( $all_default_columns as $key => $column ) {
344
+ if ( in_array( $key, $visible_columns ) ) {
345
+ $columns[$key] = $all_default_columns[$key];
346
+ }
347
+ }
348
+ $columns['details'] = $all_default_columns['details'];
349
+ }
350
+
351
+ $this->visible_columns = apply_filters( 'rtb_bookings_table_columns', $columns );
352
+
353
+ return $this->visible_columns;
354
+ }
355
+
356
+ /**
357
+ * Retrieve all default columns
358
+ *
359
+ * @since 1.5
360
+ */
361
+ public function get_all_default_columns() {
362
+ return array(
363
'cb' => '<input type="checkbox" />', //Render a checkbox instead of text
364
'date' => __( 'Date', 'restaurant-reservations' ),
365
'party' => __( 'Party', 'restaurant-reservations' ),
366
'name' => __( 'Name', 'restaurant-reservations' ),
367
'email' => __( 'Email', 'restaurant-reservations' ),
368
'phone' => __( 'Phone', 'restaurant-reservations' ),
369
+ 'status' => __( 'Status', 'restaurant-reservations' ),
370
+ 'details' => __( 'Details', 'restaurant-reservations' ),
371
);
372
+ }
373
374
+ /**
375
+ * Retrieve all available columns
376
+ *
377
+ * This is used to get all columns including those deactivated and filtered
378
+ * out via get_columns().
379
+ *
380
+ * @since 1.5
381
+ */
382
+ public function get_all_columns() {
383
+ $columns = $this->get_all_default_columns();
384
+ return apply_filters( 'rtb_bookings_all_table_columns', $columns );
385
}
386
387
/**
429
case 'phone' :
430
$value = $booking->phone;
431
break;
432
case 'status' :
433
global $rtb_controller;
434
if ( !empty( $rtb_controller->cpts->booking_statuses[$booking->post_status] ) ) {
439
$value = $booking->post_status;
440
}
441
break;
442
+ case 'details' :
443
+ $value = '';
444
+
445
+ $details = array();
446
+ if ( trim( $booking->message ) ) {
447
+ $details[] = array(
448
+ 'label' => __( 'Message', 'restaurant-reservations' ),
449
+ 'value' => $booking->message,
450
+ );
451
+ }
452
+
453
+ $details = apply_filters( 'rtb_bookings_table_column_details', $details, $booking );
454
+
455
+ if ( !empty( $details ) ) {
456
+ $value = '<a href="#" class="rtb-show-details" data-id="details-' . esc_attr( $booking->ID ) . '"><span class="dashicons dashicons-testimonial"></span></a>';
457
+ $value .= '<div class="rtb-details-data"><ul class="details">';
458
+ foreach( $details as $detail ) {
459
+ $value .= '<li><div class="label">' . $detail['label'] . '</div><div class="value">' . $detail['value'] . '</div></li>';
460
+ }
461
+ $value .= '</ul></div>';
462
+ }
463
+ break;
464
default:
465
$value = isset( $booking->$column_name ) ? $booking->$column_name : '';
466
break;
482
);
483
}
484
485
+ /**
486
+ * Add hidden columns values to the details column
487
+ *
488
+ * This only handles the default columns. Custom data needs to hook in and
489
+ * add it's own items to the $details array.
490
+ *
491
+ * @since 1.5
492
+ */
493
+ public function add_details_column_items( $details, $booking ) {
494
+ global $rtb_controller;
495
+ $visible_columns = $this->get_columns();
496
+ $default_columns = $this->get_all_default_columns();
497
+
498
+ // Columns which can't be hidden
499
+ unset( $default_columns['cb'] );
500
+ unset( $default_columns['details'] );
501
+ unset( $default_columns['date'] );
502
+
503
+ $detail_columns = array_diff( $default_columns, $visible_columns );
504
+
505
+ if ( !empty( $detail_columns ) ) {
506
+ foreach( $detail_columns as $key => $label ) {
507
+
508
+ $value = $this->column_default( $booking, $key );
509
+ if ( empty( $value ) ) {
510
+ continue;
511
+ }
512
+
513
+ $details[] = array(
514
+ 'label' => $label,
515
+ 'value' => $value,
516
+ );
517
+ }
518
+ }
519
+
520
+ return $details;
521
+ }
522
+
523
/**
524
* Retrieve the bulk actions
525
* @since 0.0.1
696
} elseif ( !empty( $_GET['date_range'] ) ) {
697
698
if ( $_GET['date_range'] == 'today' ) {
699
+ $where .= " AND p.post_date >= '" . date( 'Y-m-d', current_time( 'timestamp' ) ) . "' AND p.post_date < '" . date( 'Y-m-d', current_time( 'timestamp' ) + 86400 ) . "'";
700
}
701
702
// Default date setting is to show upcoming bookings
languages/restaurant-reservations.pot CHANGED
@@ -2,10 +2,10 @@
2
# This file is distributed under the same license as the Restaurant Reservations package.
3
msgid ""
4
msgstr ""
5
- "Project-Id-Version: Restaurant Reservations 1.4.9\n"
6
"Report-Msgid-Bugs-To: "
7
"http://wordpress.org/support/plugin/restaurant-reservations\n"
8
- "POT-Creation-Date: 2015-10-06 18:38:20+00:00\n"
9
"MIME-Version: 1.0\n"
10
"Content-Type: text/plain; charset=utf-8\n"
11
"Content-Transfer-Encoding: 8bit\n"
@@ -26,7 +26,7 @@ msgstr ""
26
"X-Textdomain-Support: yes\n"
27
28
#: includes/Addons.class.php:101
29
- #: includes/WP_List_Table.BookingsTable.class.php:347
30
msgid "Loading"
31
msgstr ""
32
@@ -52,91 +52,104 @@ msgid ""
52
"target=\"_blank\">support forums</a>."
53
msgstr ""
54
55
- #: includes/AdminBookings.class.php:67
56
msgid "Restaurant Bookings"
57
msgstr ""
58
59
- #: includes/AdminBookings.class.php:68 includes/CustomPostTypes.class.php:42
60
msgid "Add New"
61
msgstr ""
62
63
- #: includes/AdminBookings.class.php:116 restaurant-reservations.php:226
64
msgid "Add Booking"
65
msgstr ""
66
67
- #: includes/AdminBookings.class.php:119 includes/AdminBookings.class.php:160
68
msgid "Cancel"
69
msgstr ""
70
71
- #: includes/AdminBookings.class.php:140 includes/AdminBookings.class.php:157
72
- #: includes/WP_List_Table.BookingsTable.class.php:366
73
msgid "Send Email"
74
msgstr ""
75
76
- #: includes/AdminBookings.class.php:147
77
msgid "Subject"
78
msgstr ""
79
80
- #: includes/AdminBookings.class.php:151 includes/Settings.class.php:826
81
- #: includes/WP_List_Table.BookingsTable.class.php:320
82
msgid "Message"
83
msgstr ""
84
85
- #: includes/AdminBookings.class.php:174
86
msgid "Close"
87
msgstr ""
88
89
- #: includes/AdminBookings.class.php:240
90
msgid "Booking Status"
91
msgstr ""
92
93
- #: includes/AdminBookings.class.php:248
94
msgid "Send notifications"
95
msgstr ""
96
97
- #: includes/AdminBookings.class.php:253
98
msgid "Learn more"
99
msgstr ""
100
101
- #: includes/AdminBookings.class.php:254
102
msgid ""
103
"When adding a booking or changing a booking's status with this form, no "
104
"email notifications will be sent. Check this option if you want to send "
105
"email notifications."
106
msgstr ""
107
108
- #: includes/AdminBookings.class.php:308
109
msgid "You have been logged out. Please %slogin again%s."
110
msgstr ""
111
112
- #: includes/AdminBookings.class.php:344
113
msgid ""
114
"This booking has been sent to the %sTrash%s where it can not be edited. Set "
115
"the booking to Pending or Confirmed to edit it."
116
msgstr ""
117
118
- #: includes/AdminBookings.class.php:361
119
msgid "The booking could not be retrieved. Please reload the page and try again."
120
msgstr ""
121
122
- #: includes/AdminBookings.class.php:443
123
msgid ""
124
"Unable to trash this post. Please try again. If you continue to have "
125
"trouble, please refresh the page."
126
msgstr ""
127
128
- #: includes/AdminBookings.class.php:485
129
msgid "Please enter a message before sending the email."
130
msgstr ""
131
132
- #: includes/AdminBookings.class.php:494
133
msgid "The email could not be sent because some critical information was missing."
134
msgstr ""
135
136
- #: includes/AdminBookings.class.php:506
137
msgid "There was an error loading the booking and the email was not sent."
138
msgstr ""
139
140
#: includes/AdminPageSettingLicenseKey.class.php:193
141
msgid "Invalid"
142
msgstr ""
@@ -215,12 +228,12 @@ msgstr ""
215
216
#: includes/CustomPostTypes.class.php:38 includes/CustomPostTypes.class.php:40
217
#: includes/CustomPostTypes.class.php:41
218
- #: includes/WP_List_Table.BookingsTable.class.php:97
219
msgid "Bookings"
220
msgstr ""
221
222
#: includes/CustomPostTypes.class.php:39
223
- #: includes/WP_List_Table.BookingsTable.class.php:96
224
msgid "Booking"
225
msgstr ""
226
@@ -675,7 +688,7 @@ msgid "Book a table"
675
msgstr ""
676
677
#: includes/Settings.class.php:770
678
- #: includes/WP_List_Table.BookingsTable.class.php:315
679
msgid "Date"
680
msgstr ""
681
@@ -684,7 +697,7 @@ msgid "Time"
684
msgstr ""
685
686
#: includes/Settings.class.php:782
687
- #: includes/WP_List_Table.BookingsTable.class.php:316
688
msgid "Party"
689
msgstr ""
690
@@ -693,17 +706,17 @@ msgid "Contact Details"
693
msgstr ""
694
695
#: includes/Settings.class.php:798
696
- #: includes/WP_List_Table.BookingsTable.class.php:317
697
msgid "Name"
698
msgstr ""
699
700
#: includes/Settings.class.php:804
701
- #: includes/WP_List_Table.BookingsTable.class.php:318
702
msgid "Email"
703
msgstr ""
704
705
#: includes/Settings.class.php:813
706
- #: includes/WP_List_Table.BookingsTable.class.php:319
707
msgid "Phone"
708
msgstr ""
709
@@ -759,123 +772,127 @@ msgstr ""
759
msgid "Current date and time"
760
msgstr ""
761
762
- #: includes/WP_List_Table.BookingsTable.class.php:207
763
msgid "Upcoming"
764
msgstr ""
765
766
- #: includes/WP_List_Table.BookingsTable.class.php:208
767
msgid "Today"
768
msgstr ""
769
770
- #: includes/WP_List_Table.BookingsTable.class.php:209
771
- #: includes/WP_List_Table.BookingsTable.class.php:267
772
msgid "All"
773
msgstr ""
774
775
- #: includes/WP_List_Table.BookingsTable.class.php:225
776
msgid "Start Date:"
777
msgstr ""
778
779
- #: includes/WP_List_Table.BookingsTable.class.php:226
780
msgid "Start Date"
781
msgstr ""
782
783
- #: includes/WP_List_Table.BookingsTable.class.php:227
784
msgid "End Date:"
785
msgstr ""
786
787
- #: includes/WP_List_Table.BookingsTable.class.php:228
788
msgid "End Date"
789
msgstr ""
790
791
- #: includes/WP_List_Table.BookingsTable.class.php:229
792
msgid "Apply"
793
msgstr ""
794
795
- #: includes/WP_List_Table.BookingsTable.class.php:231
796
msgid "Clear Filter"
797
msgstr ""
798
799
- #: includes/WP_List_Table.BookingsTable.class.php:268
800
msgid "Pending"
801
msgstr ""
802
803
- #: includes/WP_List_Table.BookingsTable.class.php:269
804
msgid "Confirmed"
805
msgstr ""
806
807
- #: includes/WP_List_Table.BookingsTable.class.php:270
808
msgid "Closed"
809
msgstr ""
810
811
- #: includes/WP_List_Table.BookingsTable.class.php:271
812
- #: includes/WP_List_Table.BookingsTable.class.php:352
813
msgid "Trash"
814
msgstr ""
815
816
- #: includes/WP_List_Table.BookingsTable.class.php:321
817
msgid "Status"
818
msgstr ""
819
820
- #: includes/WP_List_Table.BookingsTable.class.php:351
821
msgid "Edit"
822
msgstr ""
823
824
- #: includes/WP_List_Table.BookingsTable.class.php:416
825
msgid "Delete"
826
msgstr ""
827
828
- #: includes/WP_List_Table.BookingsTable.class.php:417
829
msgid "Set To Confirmed"
830
msgstr ""
831
832
- #: includes/WP_List_Table.BookingsTable.class.php:418
833
msgid "Set To Pending Review"
834
msgstr ""
835
836
- #: includes/WP_List_Table.BookingsTable.class.php:419
837
msgid "Set To Closed"
838
msgstr ""
839
840
- #: includes/WP_List_Table.BookingsTable.class.php:533
841
msgid "%d booking deleted successfully."
842
msgid_plural "%d bookings deleted successfully."
843
msgstr[0] ""
844
msgstr[1] ""
845
846
- #: includes/WP_List_Table.BookingsTable.class.php:536
847
msgid "%d booking confirmed."
848
msgid_plural "%d bookings confirmed."
849
msgstr[0] ""
850
msgstr[1] ""
851
852
- #: includes/WP_List_Table.BookingsTable.class.php:539
853
msgid "%d booking set to pending."
854
msgid_plural "%d bookings set to pending."
855
msgstr[0] ""
856
msgstr[1] ""
857
858
- #: includes/WP_List_Table.BookingsTable.class.php:542
859
msgid "%d booking closed."
860
msgid_plural "%d bookings closed."
861
msgstr[0] ""
862
msgstr[1] ""
863
864
- #: includes/WP_List_Table.BookingsTable.class.php:554
865
msgid "%d booking had errors and could not be processed."
866
msgid_plural "%d bookings had errors and could not be processed."
867
msgstr[0] ""
868
msgstr[1] ""
869
870
- #: includes/WP_List_Table.BookingsTable.class.php:681
871
msgid "You're viewing bookings that have been moved to the trash."
872
msgstr ""
873
874
- #: includes/WP_List_Table.BookingsTable.class.php:690
875
msgid "Only today's bookings are being shown."
876
msgstr ""
877
878
- #: includes/WP_List_Table.BookingsTable.class.php:692
879
msgid "Only upcoming bookings are being shown."
880
msgstr ""
881
@@ -921,9 +938,9 @@ msgstr ""
921
msgid "Restaurant Reservations"
922
msgstr ""
923
924
- #. #-#-#-#-# restaurant-reservations.pot (Restaurant Reservations 1.4.9) #-#-#-#-#
925
#. Plugin URI of the plugin/theme
926
- #. #-#-#-#-# restaurant-reservations.pot (Restaurant Reservations 1.4.9) #-#-#-#-#
927
#. Author URI of the plugin/theme
928
msgid "http://themeofthecrop.com"
929
msgstr ""
@@ -985,17 +1002,17 @@ msgid ""
985
"sent to the email address you provided."
986
msgstr ""
987
988
- #: includes/AdminBookings.class.php:43
989
msgctxt "Title of admin page that lists bookings"
990
msgid "Bookings"
991
msgstr ""
992
993
- #: includes/AdminBookings.class.php:44
994
msgctxt "Title of bookings admin menu item"
995
msgid "Bookings"
996
msgstr ""
997
998
- #: includes/AdminBookings.class.php:143
999
msgctxt "Label next to the email address to which an email will be sent"
1000
msgid "To"
1001
msgstr ""
@@ -1319,32 +1336,32 @@ msgctxt "Brief default description of a scheduling exception when no times are s
1319
msgid "Closed all day"
1320
msgstr ""
1321
1322
- #: includes/WP_List_Table.BookingsTable.class.php:158
1323
- #: includes/WP_List_Table.BookingsTable.class.php:160
1324
msgctxt ""
1325
"No date limit in a date range, eg 2014-* would mean any date from 2014 or "
1326
"after"
1327
msgid "*"
1328
msgstr ""
1329
1330
- #: includes/WP_List_Table.BookingsTable.class.php:159
1331
msgctxt "Separator between two dates in a date range"
1332
msgid "&mdash;"
1333
msgstr ""
1334
1335
- #: includes/WP_List_Table.BookingsTable.class.php:384
1336
msgctxt "Status label for bookings put in the trash"
1337
msgid "Trash"
1338
msgstr ""
1339
1340
- #: includes/WP_List_Table.BookingsTable.class.php:683
1341
msgctxt ""
1342
"Indicates which booking status is currently being filtered in the list of "
1343
"bookings."
1344
msgid "You're viewing bookings that have been marked as %s."
1345
msgstr ""
1346
1347
- #: includes/WP_List_Table.BookingsTable.class.php:688
1348
msgctxt "Notification of booking date range, eg - bookings from 2014-12-02-2014-12-05"
1349
msgid "Only bookings from %s are being shown."
1350
msgstr ""
2
# This file is distributed under the same license as the Restaurant Reservations package.
3
msgid ""
4
msgstr ""
5
+ "Project-Id-Version: Restaurant Reservations 1.5\n"
6
"Report-Msgid-Bugs-To: "
7
"http://wordpress.org/support/plugin/restaurant-reservations\n"
8
+ "POT-Creation-Date: 2015-12-17 15:05:31+00:00\n"
9
"MIME-Version: 1.0\n"
10
"Content-Type: text/plain; charset=utf-8\n"
11
"Content-Transfer-Encoding: 8bit\n"
26
"X-Textdomain-Support: yes\n"
27
28
#: includes/Addons.class.php:101
29
+ #: includes/WP_List_Table.BookingsTable.class.php:407
30
msgid "Loading"
31
msgstr ""
32
52
"target=\"_blank\">support forums</a>."
53
msgstr ""
54
55
+ #: includes/AdminBookings.class.php:72
56
msgid "Restaurant Bookings"
57
msgstr ""
58
59
+ #: includes/AdminBookings.class.php:73 includes/CustomPostTypes.class.php:42
60
msgid "Add New"
61
msgstr ""
62
63
+ #: includes/AdminBookings.class.php:106 includes/AdminBookings.class.php:208
64
+ msgid "Columns"
65
+ msgstr ""
66
+
67
+ #: includes/AdminBookings.class.php:146 restaurant-reservations.php:226
68
msgid "Add Booking"
69
msgstr ""
70
71
+ #: includes/AdminBookings.class.php:149 includes/AdminBookings.class.php:190
72
+ #: includes/AdminBookings.class.php:236
73
msgid "Cancel"
74
msgstr ""
75
76
+ #: includes/AdminBookings.class.php:170 includes/AdminBookings.class.php:187
77
+ #: includes/WP_List_Table.BookingsTable.class.php:426
78
msgid "Send Email"
79
msgstr ""
80
81
+ #: includes/AdminBookings.class.php:177
82
msgid "Subject"
83
msgstr ""
84
85
+ #: includes/AdminBookings.class.php:181 includes/Settings.class.php:826
86
+ #: includes/WP_List_Table.BookingsTable.class.php:448
87
msgid "Message"
88
msgstr ""
89
90
+ #: includes/AdminBookings.class.php:233
91
+ msgid "Update"
92
+ msgstr ""
93
+
94
+ #: includes/AdminBookings.class.php:252 includes/AdminBookings.class.php:261
95
msgid "Close"
96
msgstr ""
97
98
+ #: includes/AdminBookings.class.php:327
99
msgid "Booking Status"
100
msgstr ""
101
102
+ #: includes/AdminBookings.class.php:335
103
msgid "Send notifications"
104
msgstr ""
105
106
+ #: includes/AdminBookings.class.php:340
107
msgid "Learn more"
108
msgstr ""
109
110
+ #: includes/AdminBookings.class.php:341
111
msgid ""
112
"When adding a booking or changing a booking's status with this form, no "
113
"email notifications will be sent. Check this option if you want to send "
114
"email notifications."
115
msgstr ""
116
117
+ #: includes/AdminBookings.class.php:395
118
msgid "You have been logged out. Please %slogin again%s."
119
msgstr ""
120
121
+ #: includes/AdminBookings.class.php:431
122
msgid ""
123
"This booking has been sent to the %sTrash%s where it can not be edited. Set "
124
"the booking to Pending or Confirmed to edit it."
125
msgstr ""
126
127
+ #: includes/AdminBookings.class.php:448
128
msgid "The booking could not be retrieved. Please reload the page and try again."
129
msgstr ""
130
131
+ #: includes/AdminBookings.class.php:530
132
msgid ""
133
"Unable to trash this post. Please try again. If you continue to have "
134
"trouble, please refresh the page."
135
msgstr ""
136
137
+ #: includes/AdminBookings.class.php:572
138
msgid "Please enter a message before sending the email."
139
msgstr ""
140
141
+ #: includes/AdminBookings.class.php:581
142
msgid "The email could not be sent because some critical information was missing."
143
msgstr ""
144
145
+ #: includes/AdminBookings.class.php:593
146
msgid "There was an error loading the booking and the email was not sent."
147
msgstr ""
148
149
+ #: includes/AdminBookings.class.php:631
150
+ msgid "You must select at least one column to display."
151
+ msgstr ""
152
+
153
#: includes/AdminPageSettingLicenseKey.class.php:193
154
msgid "Invalid"
155
msgstr ""
228
229
#: includes/CustomPostTypes.class.php:38 includes/CustomPostTypes.class.php:40
230
#: includes/CustomPostTypes.class.php:41
231
+ #: includes/WP_List_Table.BookingsTable.class.php:105
232
msgid "Bookings"
233
msgstr ""
234
235
#: includes/CustomPostTypes.class.php:39
236
+ #: includes/WP_List_Table.BookingsTable.class.php:104
237
msgid "Booking"
238
msgstr ""
239
688
msgstr ""
689
690
#: includes/Settings.class.php:770
691
+ #: includes/WP_List_Table.BookingsTable.class.php:364
692
msgid "Date"
693
msgstr ""
694
697
msgstr ""
698
699
#: includes/Settings.class.php:782
700
+ #: includes/WP_List_Table.BookingsTable.class.php:365
701
msgid "Party"
702
msgstr ""
703
706
msgstr ""
707
708
#: includes/Settings.class.php:798
709
+ #: includes/WP_List_Table.BookingsTable.class.php:366
710
msgid "Name"
711
msgstr ""
712
713
#: includes/Settings.class.php:804
714
+ #: includes/WP_List_Table.BookingsTable.class.php:367
715
msgid "Email"
716
msgstr ""
717
718
#: includes/Settings.class.php:813
719
+ #: includes/WP_List_Table.BookingsTable.class.php:368
720
msgid "Phone"
721
msgstr ""
722
772
msgid "Current date and time"
773
msgstr ""
774
775
+ #: includes/WP_List_Table.BookingsTable.class.php:218
776
msgid "Upcoming"
777
msgstr ""
778
779
+ #: includes/WP_List_Table.BookingsTable.class.php:219
780
msgid "Today"
781
msgstr ""
782
783
+ #: includes/WP_List_Table.BookingsTable.class.php:220
784
+ #: includes/WP_List_Table.BookingsTable.class.php:278
785
msgid "All"
786
msgstr ""
787
788
+ #: includes/WP_List_Table.BookingsTable.class.php:236
789
msgid "Start Date:"
790
msgstr ""
791
792
+ #: includes/WP_List_Table.BookingsTable.class.php:237
793
msgid "Start Date"
794
msgstr ""
795
796
+ #: includes/WP_List_Table.BookingsTable.class.php:238
797
msgid "End Date:"
798
msgstr ""
799
800
+ #: includes/WP_List_Table.BookingsTable.class.php:239
801
msgid "End Date"
802
msgstr ""
803
804
+ #: includes/WP_List_Table.BookingsTable.class.php:240
805
msgid "Apply"
806
msgstr ""
807
808
+ #: includes/WP_List_Table.BookingsTable.class.php:242
809
msgid "Clear Filter"
810
msgstr ""
811
812
+ #: includes/WP_List_Table.BookingsTable.class.php:279
813
msgid "Pending"
814
msgstr ""
815
816
+ #: includes/WP_List_Table.BookingsTable.class.php:280
817
msgid "Confirmed"
818
msgstr ""
819
820
+ #: includes/WP_List_Table.BookingsTable.class.php:281
821
msgid "Closed"
822
msgstr ""
823
824
+ #: includes/WP_List_Table.BookingsTable.class.php:282
825
+ #: includes/WP_List_Table.BookingsTable.class.php:412
826
msgid "Trash"
827
msgstr ""
828
829
+ #: includes/WP_List_Table.BookingsTable.class.php:369
830
msgid "Status"
831
msgstr ""
832
833
+ #: includes/WP_List_Table.BookingsTable.class.php:370
834
+ msgid "Details"
835
+ msgstr ""
836
+
837
+ #: includes/WP_List_Table.BookingsTable.class.php:411
838
msgid "Edit"
839
msgstr ""
840
841
+ #: includes/WP_List_Table.BookingsTable.class.php:529
842
msgid "Delete"
843
msgstr ""
844
845
+ #: includes/WP_List_Table.BookingsTable.class.php:530
846
msgid "Set To Confirmed"
847
msgstr ""
848
849
+ #: includes/WP_List_Table.BookingsTable.class.php:531
850
msgid "Set To Pending Review"
851
msgstr ""
852
853
+ #: includes/WP_List_Table.BookingsTable.class.php:532
854
msgid "Set To Closed"
855
msgstr ""
856
857
+ #: includes/WP_List_Table.BookingsTable.class.php:646
858
msgid "%d booking deleted successfully."
859
msgid_plural "%d bookings deleted successfully."
860
msgstr[0] ""
861
msgstr[1] ""
862
863
+ #: includes/WP_List_Table.BookingsTable.class.php:649
864
msgid "%d booking confirmed."
865
msgid_plural "%d bookings confirmed."
866
msgstr[0] ""
867
msgstr[1] ""
868
869
+ #: includes/WP_List_Table.BookingsTable.class.php:652
870
msgid "%d booking set to pending."
871
msgid_plural "%d bookings set to pending."
872
msgstr[0] ""
873
msgstr[1] ""
874
875
+ #: includes/WP_List_Table.BookingsTable.class.php:655
876
msgid "%d booking closed."
877
msgid_plural "%d bookings closed."
878
msgstr[0] ""
879
msgstr[1] ""
880
881
+ #: includes/WP_List_Table.BookingsTable.class.php:667
882
msgid "%d booking had errors and could not be processed."
883
msgid_plural "%d bookings had errors and could not be processed."
884
msgstr[0] ""
885
msgstr[1] ""
886
887
+ #: includes/WP_List_Table.BookingsTable.class.php:794
888
msgid "You're viewing bookings that have been moved to the trash."
889
msgstr ""
890
891
+ #: includes/WP_List_Table.BookingsTable.class.php:803
892
msgid "Only today's bookings are being shown."
893
msgstr ""
894
895
+ #: includes/WP_List_Table.BookingsTable.class.php:805
896
msgid "Only upcoming bookings are being shown."
897
msgstr ""
898
938
msgid "Restaurant Reservations"
939
msgstr ""
940
941
+ #. #-#-#-#-# restaurant-reservations.pot (Restaurant Reservations 1.5) #-#-#-#-#
942
#. Plugin URI of the plugin/theme
943
+ #. #-#-#-#-# restaurant-reservations.pot (Restaurant Reservations 1.5) #-#-#-#-#
944
#. Author URI of the plugin/theme
945
msgid "http://themeofthecrop.com"
946
msgstr ""
1002
"sent to the email address you provided."
1003
msgstr ""
1004
1005
+ #: includes/AdminBookings.class.php:48
1006
msgctxt "Title of admin page that lists bookings"
1007
msgid "Bookings"
1008
msgstr ""
1009
1010
+ #: includes/AdminBookings.class.php:49
1011
msgctxt "Title of bookings admin menu item"
1012
msgid "Bookings"
1013
msgstr ""
1014
1015
+ #: includes/AdminBookings.class.php:173
1016
msgctxt "Label next to the email address to which an email will be sent"
1017
msgid "To"
1018
msgstr ""
1336
msgid "Closed all day"
1337
msgstr ""
1338
1339
+ #: includes/WP_List_Table.BookingsTable.class.php:169
1340
+ #: includes/WP_List_Table.BookingsTable.class.php:171
1341
msgctxt ""
1342
"No date limit in a date range, eg 2014-* would mean any date from 2014 or "
1343
"after"
1344
msgid "*"
1345
msgstr ""
1346
1347
+ #: includes/WP_List_Table.BookingsTable.class.php:170
1348
msgctxt "Separator between two dates in a date range"
1349
msgid "&mdash;"
1350
msgstr ""
1351
1352
+ #: includes/WP_List_Table.BookingsTable.class.php:437
1353
msgctxt "Status label for bookings put in the trash"
1354
msgid "Trash"
1355
msgstr ""
1356
1357
+ #: includes/WP_List_Table.BookingsTable.class.php:796
1358
msgctxt ""
1359
"Indicates which booking status is currently being filtered in the list of "
1360
"bookings."
1361
msgid "You're viewing bookings that have been marked as %s."
1362
msgstr ""
1363
1364
+ #: includes/WP_List_Table.BookingsTable.class.php:801
1365
msgctxt "Notification of booking date range, eg - bookings from 2014-12-02-2014-12-05"
1366
msgid "Only bookings from %s are being shown."
1367
msgstr ""
readme.txt CHANGED
@@ -5,7 +5,7 @@ Plugin URL: http://themeofthecrop.com
5
Requires at Least: 3.8
6
Tested Up To: 4.4
7
Tags: restaurant, reservations, bookings, table bookings, restaurant reservation, table reservation
8
- Stable tag: 1.4.10
9
License: GPLv2 or later
10
Donate link: http://themeofthecrop.com
11
@@ -106,6 +106,13 @@ The addon, [Custom Fields for Restaurant Reservations](http://themeofthecrop.com
106
107
== Changelog ==
108
109
= 1.4.10 (2015-10-29) =
110
* Fix: Allow settings page required capability to be filtered later
111
* Fix: Compatibility issue with old versions of jQuery
@@ -249,6 +256,9 @@ The addon, [Custom Fields for Restaurant Reservations](http://themeofthecrop.com
249
250
== Upgrade Notice ==
251
252
= 1.4.10 =
253
This update includes a new Spanish translation and a few minor fixes. Updating isn't necessary for most people.
254
5
Requires at Least: 3.8
6
Tested Up To: 4.4
7
Tags: restaurant, reservations, bookings, table bookings, restaurant reservation, table reservation
8
+ Stable tag: 1.5
9
License: GPLv2 or later
10
Donate link: http://themeofthecrop.com
11
106
107
== Changelog ==
108
109
+ = 1.5 (2015-12-17) =
110
+ * Fix: pickadate iOS bug
111
+ * Fix: Bookings table's Today view didn't respect WordPress timezone setting
112
+ * Add: Allow bookings table columns to be toggled on/off
113
+ * Update: Convert message column/row drop-down to a details modal for all hidden columns
114
+ * Update: Put focus into message field when expanded in booking form
115
+
116
= 1.4.10 (2015-10-29) =
117
* Fix: Allow settings page required capability to be filtered later
118
* Fix: Compatibility issue with old versions of jQuery
256
257
== Upgrade Notice ==
258
259
+ = 1.5 =
260
+ This update adds the ability to configure which columns are visible in the bookings table. It works with the Custom Fields addon. If you have added fields using custom code, please read the release notification at themeofthecrop.com before updating.
261
+
262
= 1.4.10 =
263
This update includes a new Spanish translation and a few minor fixes. Updating isn't necessary for most people.
264
restaurant-reservations.php CHANGED
@@ -3,7 +3,7 @@
3
* Plugin Name: Restaurant Reservations
4
* Plugin URI: http://themeofthecrop.com
5
* Description: Accept restaurant reservations and bookings online.
6
- * Version: 1.4.10
7
* Author: Theme of the Crop
8
* Author URI: http://themeofthecrop.com
9
* License: GNU General Public License v2.0 or later
3
* Plugin Name: Restaurant Reservations
4
* Plugin URI: http://themeofthecrop.com
5
* Description: Accept restaurant reservations and bookings online.
6
+ * Version: 1.5
7
* Author: Theme of the Crop
8
* Author URI: http://themeofthecrop.com
9
* License: GNU General Public License v2.0 or later