Restaurant Reservations - Version 1.4

Version Description

Thanks to sponsorship from Gemini Design, the plugin now supports sending an email directly to customers from the list of bookings, so you can request more details or suggest an alternative booking time. This update also improves the German translation and adds a Hebrew translation. Read the full changelog for details.

Download this release

Release Info

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

Code changes from version 1.3 to 1.4

assets/css/admin.css CHANGED
@@ -85,7 +85,7 @@
85
width: 5em;
86
}
87
88
- #rtb-bookings-table .column-date .actions {
89
line-height: 28px;
90
opacity: 0;
91
-webkit-transition: opacity 0.3s 0;
@@ -93,7 +93,7 @@
93
transition: opacity 0.3s 0;
94
}
95
96
- #rtb-bookings-table tr:hover .column-date .actions {
97
opacity: 1;
98
}
99
@@ -211,41 +211,55 @@
211
transition-duration: 0.3s;
212
}
213
214
- #rtb-booking-modal fieldset {
215
padding: 0;
216
}
217
218
- #rtb-booking-modal label {
219
color: #777;
220
font-style: italic;
221
}
222
223
- #rtb-booking-modal button {
224
margin-top: 1em;
225
margin-right: 1em;
226
}
227
228
- #rtb-booking-modal .button {
229
margin-top: 1em;
230
}
231
232
- #rtb-booking-modal button,
233
- #rtb-booking-modal .button {
234
opacity: 1;
235
transition: opacity .25s ease-in-out;
236
-moz-transition: opacity .25s ease-in-out;
237
-webkit-transition: opacity .25s ease-in-out;
238
}
239
240
- #rtb-booking-modal button:disabled,
241
- #rtb-booking-modal .button:disabled {
242
opacity: 0.5;
243
transition: opacity .25s ease-in-out;
244
-moz-transition: opacity .25s ease-in-out;
245
-webkit-transition: opacity .25s ease-in-out;
246
}
247
248
- #rtb-booking-modal .action-status {
249
display: inline-block;
250
float: right;
251
margin-top: 1em;
@@ -255,11 +269,11 @@
255
-webkit-transition: opacity .25s ease-in-out;
256
}
257
258
- #rtb-booking-modal .action-status.is-visible {
259
opacity: 1;
260
}
261
262
- #rtb-booking-modal .action-status > span {
263
display: none;
264
background-position: 4px;
265
margin: 0;
@@ -269,30 +283,41 @@
269
font-size: 28px;
270
}
271
272
- #rtb-booking-modal .action-status > .spinner {
273
display: block;
274
}
275
276
- #rtb-booking-modal .action-status > .success {
277
color: #7ad03a;
278
}
279
280
- #rtb-booking-modal .action-status > .error {
281
color: #dd3d36;
282
}
283
284
- #rtb-booking-modal .rtb-error {
285
background: #dd3d36;
286
}
287
288
- #rtb-booking-modal .rtb-error a {
289
color: #fff;
290
}
291
292
- #rtb-booking-modal input[type="text"],
293
- #rtb-booking-modal input[type="email"],
294
- #rtb-booking-modal textarea {
295
max-width: 100%;
296
}
297
298
.rtb-description {
85
width: 5em;
86
}
87
88
+ #rtb-bookings-table td .actions {
89
line-height: 28px;
90
opacity: 0;
91
-webkit-transition: opacity 0.3s 0;
93
transition: opacity 0.3s 0;
94
}
95
96
+ #rtb-bookings-table tr:hover td .actions {
97
opacity: 1;
98
}
99
211
transition-duration: 0.3s;
212
}
213
214
+ .rtb-admin-modal fieldset {
215
padding: 0;
216
}
217
218
+ .rtb-admin-modal fieldset > div {
219
+ margin-top: 1em;
220
+ }
221
+
222
+ .rtb-admin-modal legend {
223
+ font-size: 1.5em;
224
+ margin: 0 0 0.83em;
225
+ font-weight: 400;
226
+ padding: 0;
227
+ }
228
+
229
+ .rtb-admin-modal label {
230
color: #777;
231
font-style: italic;
232
+ display: block;
233
}
234
235
+ #rtb-booking-modal button,
236
+ #rtb-email-modal button {
237
margin-top: 1em;
238
margin-right: 1em;
239
}
240
241
+ #rtb-booking-modal .button,
242
+ #rtb-email-modal .button {
243
margin-top: 1em;
244
}
245
246
+ .rtb-admin-modal button,
247
+ .rtb-admin-modal .button {
248
opacity: 1;
249
transition: opacity .25s ease-in-out;
250
-moz-transition: opacity .25s ease-in-out;
251
-webkit-transition: opacity .25s ease-in-out;
252
}
253
254
+ .rtb-admin-modal button:disabled,
255
+ .rtb-admin-modal .button:disabled {
256
opacity: 0.5;
257
transition: opacity .25s ease-in-out;
258
-moz-transition: opacity .25s ease-in-out;
259
-webkit-transition: opacity .25s ease-in-out;
260
}
261
262
+ .rtb-admin-modal .action-status {
263
display: inline-block;
264
float: right;
265
margin-top: 1em;
269
-webkit-transition: opacity .25s ease-in-out;
270
}
271
272
+ .rtb-admin-modal .action-status.is-visible {
273
opacity: 1;
274
}
275
276
+ .rtb-admin-modal .action-status > span {
277
display: none;
278
background-position: 4px;
279
margin: 0;
283
font-size: 28px;
284
}
285
286
+ .rtb-admin-modal .action-status > .spinner {
287
display: block;
288
}
289
290
+ .rtb-admin-modal .action-status > .success {
291
color: #7ad03a;
292
}
293
294
+ .rtb-admin-modal .action-status > .error {
295
color: #dd3d36;
296
}
297
298
+ #rtb-booking-form .rtb-error {
299
background: #dd3d36;
300
}
301
302
+ #rtb-booking-form .rtb-error a {
303
color: #fff;
304
}
305
306
+ .rtb-admin-modal input[type="text"],
307
+ .rtb-admin-modal input[type="email"],
308
+ .rtb-admin-modal input[type="tel"],
309
+ .rtb-admin-modal textarea {
310
max-width: 100%;
311
+ width: 100%;
312
+ }
313
+
314
+ #rtb-email-modal .rtb-email-to {
315
+ font-weight: 700;
316
+ color: #777;
317
+ }
318
+
319
+ #rtb-email-modal textarea {
320
+ min-height: 12em;
321
}
322
323
.rtb-description {
assets/js/admin.js CHANGED
@@ -19,19 +19,30 @@ jQuery(document).ready(function ($) {
19
return false;
20
});
21
22
- // Register clicks on edit/delete links
23
- $( '#rtb-bookings-table .column-date .actions' ).click( function(e) {
24
25
var target = $(e.target);
26
- var cell = target.parent().parent();
27
28
- rtb_booking_loading_spinner( true, cell );
29
30
if ( target.data( 'action' ) == 'edit' ) {
31
rtb_get_booking( target.data( 'id' ), cell );
32
33
} else if ( target.data( 'action' ) == 'trash' ) {
34
rtb_trash_booking( target.data( 'id' ), cell );
35
}
36
37
e.preventDefault();
@@ -56,6 +67,10 @@ jQuery(document).ready(function ($) {
56
var rtb_booking_modal_submit = rtb_booking_modal.find( 'button' );
57
var rtb_booking_modal_cancel = rtb_booking_modal.find( '#rtb-cancel-booking-modal' );
58
var rtb_booking_modal_action_status = rtb_booking_modal.find( '.action-status' );
59
var rtb_booking_modal_error = $( '#rtb-error-modal' );
60
var rtb_booking_modal_error_msg = rtb_booking_modal_error.find( '.rtb-error-msg' );
61
@@ -112,6 +127,31 @@ jQuery(document).ready(function ($) {
112
}
113
}
114
115
/**
116
* Initialize form field events
117
*/
@@ -206,27 +246,28 @@ jQuery(document).ready(function ($) {
206
/**
207
* Show the appropriate result status icon
208
*/
209
- function rtb_show_action_status( status ) {
210
211
- rtb_booking_modal_action_status.find( 'span' ).hide();
212
213
if ( status === true ) {
214
- rtb_booking_modal_action_status.find( '.success' ).show();
215
} else if ( status === false ) {
216
- rtb_booking_modal_action_status.find( '.error' ).show();
217
} else {
218
- rtb_booking_modal_action_status.find( '.spinner' ).show();
219
}
220
}
221
222
// Initialize form field events on load
223
rtb_init_booking_form_modal_fields();
224
225
- // Reset the form on load
226
// This fixes a strange bug in Firefox where disabled buttons would
227
// persist after the page refreshed. I'm guessing its a cache issue
228
// but this will just reset everything again
229
rtb_toggle_booking_form_modal( false );
230
231
// Show booking form modal
232
$( '.add-booking' ).click( function() {
@@ -244,11 +285,14 @@ jQuery(document).ready(function ($) {
244
}
245
});
246
247
- // Close booking form modal and error modal when ESC is keyed
248
- $(document).keyup( function(e) {
249
- if ( e.which == '27' ) {
250
- rtb_toggle_booking_form_modal( false );
251
- rtb_toggle_booking_form_error_modal( false );
252
}
253
});
254
@@ -259,6 +303,15 @@ jQuery(document).ready(function ($) {
259
}
260
});
261
262
// Submit booking form modal
263
rtb_booking_modal_submit.click( function(e) {
264
@@ -273,7 +326,7 @@ jQuery(document).ready(function ($) {
273
rtb_booking_modal_submit.prop( 'disabled', true );
274
rtb_booking_modal_cancel.prop( 'disabled', true );
275
rtb_booking_modal_action_status.addClass( 'is-visible' );
276
- rtb_show_action_status( 'loading' );
277
278
var params = {};
279
@@ -313,7 +366,7 @@ jQuery(document).ready(function ($) {
313
rtb_booking_modal_submit.prop( 'disabled', false );
314
}
315
316
- rtb_show_action_status( r.success );
317
318
// Hide result status icon after a few seconds
319
setTimeout( function() {
@@ -322,6 +375,63 @@ jQuery(document).ready(function ($) {
322
});
323
});
324
325
// Show the addons
326
if ( $( '#rtb-addons' ).length ) {
327
19
return false;
20
});
21
22
+ // Register clicks on action links
23
+ $( '#rtb-bookings-table tr .actions' ).click( function(e) {
24
+
25
+ e.stopPropagation();
26
27
var target = $(e.target);
28
+ var action = target.data( 'action' );
29
30
+ if ( !action ) {
31
+ return;
32
+ }
33
+
34
+ var cell = target.parent().parent();
35
36
if ( target.data( 'action' ) == 'edit' ) {
37
+ rtb_booking_loading_spinner( true, cell );
38
rtb_get_booking( target.data( 'id' ), cell );
39
40
} else if ( target.data( 'action' ) == 'trash' ) {
41
+ rtb_booking_loading_spinner( true, cell );
42
rtb_trash_booking( target.data( 'id' ), cell );
43
+
44
+ } else if ( target.data( 'action' ) == 'email') {
45
+ rtb_toggle_email_modal( true, target.data( 'id'), target.data( 'email' ), target.data( 'name' ) );
46
}
47
48
e.preventDefault();
67
var rtb_booking_modal_submit = rtb_booking_modal.find( 'button' );
68
var rtb_booking_modal_cancel = rtb_booking_modal.find( '#rtb-cancel-booking-modal' );
69
var rtb_booking_modal_action_status = rtb_booking_modal.find( '.action-status' );
70
+ var rtb_email_modal = $( '#rtb-email-modal' );
71
+ var rtb_email_modal_submit = rtb_email_modal.find( 'button' );
72
+ var rtb_email_modal_cancel = rtb_email_modal.find( '#rtb-cancel-email-modal' );
73
+ var rtb_email_modal_action_status = rtb_email_modal.find( '.action-status' );
74
var rtb_booking_modal_error = $( '#rtb-error-modal' );
75
var rtb_booking_modal_error_msg = rtb_booking_modal_error.find( '.rtb-error-msg' );
76
127
}
128
}
129
130
+ /**
131
+ * Show or hide the email form modal
132
+ */
133
+ function rtb_toggle_email_modal( show, id, email, name ) {
134
+
135
+ if ( show ) {
136
+ rtb_email_modal.scrollTop( 0 ).addClass( 'is-visible' );
137
+ rtb_email_modal.find( 'input[name=ID]' ).val( id );
138
+ rtb_email_modal.find( 'input[name=email]' ).val( email );
139
+ rtb_email_modal.find( 'input[name=name]' ).val( name );
140
+ rtb_email_modal.find( '.rtb-email-to' ).html( name + ' <' + email + '>' );
141
+
142
+ $( 'body' ).addClass( 'rtb-hide-body-scroll' );
143
+
144
+ } else {
145
+ rtb_email_modal.removeClass( 'is-visible' );
146
+ rtb_email_modal.find( '.rtb-email-to' ).html( '' );
147
+ rtb_email_modal.find( 'textarea, input[type="hidden"], input[type="text"]' ).val( '' );
148
+ rtb_email_modal_submit.prop( 'disabled', false );
149
+ rtb_email_modal_cancel.prop( 'disabled', false );
150
+
151
+ $( 'body' ).removeClass( 'rtb-hide-body-scroll' );
152
+ }
153
+ }
154
+
155
/**
156
* Initialize form field events
157
*/
246
/**
247
* Show the appropriate result status icon
248
*/
249
+ function rtb_show_action_status( el, status ) {
250
251
+ el.find( 'span' ).hide();
252
253
if ( status === true ) {
254
+ el.find( '.success' ).show();
255
} else if ( status === false ) {
256
+ el.find( '.error' ).show();
257
} else {
258
+ el.find( '.spinner' ).show();
259
}
260
}
261
262
// Initialize form field events on load
263
rtb_init_booking_form_modal_fields();
264
265
+ // Reset the forms on load
266
// This fixes a strange bug in Firefox where disabled buttons would
267
// persist after the page refreshed. I'm guessing its a cache issue
268
// but this will just reset everything again
269
rtb_toggle_booking_form_modal( false );
270
+ rtb_toggle_email_modal( false );
271
272
// Show booking form modal
273
$( '.add-booking' ).click( function() {
285
}
286
});
287
288
+ // Close email modal when background or cancel button is clicked
289
+ rtb_email_modal.click( function(e) {
290
+ if ( $(e.target).is( rtb_email_modal ) ) {
291
+ rtb_toggle_email_modal( false );
292
+ }
293
+
294
+ if ( $(e.target).is( rtb_email_modal_cancel ) && rtb_email_modal_cancel.prop( 'disabled' ) === false ) {
295
+ rtb_toggle_email_modal( false );
296
}
297
});
298
303
}
304
});
305
306
+ // Close modals when ESC is keyed
307
+ $(document).keyup( function(e) {
308
+ if ( e.which == '27' ) {
309
+ rtb_toggle_booking_form_modal( false );
310
+ rtb_toggle_email_modal( false );
311
+ rtb_toggle_booking_form_error_modal( false );
312
+ }
313
+ });
314
+
315
// Submit booking form modal
316
rtb_booking_modal_submit.click( function(e) {
317
326
rtb_booking_modal_submit.prop( 'disabled', true );
327
rtb_booking_modal_cancel.prop( 'disabled', true );
328
rtb_booking_modal_action_status.addClass( 'is-visible' );
329
+ rtb_show_action_status( rtb_booking_modal_action_status, 'loading' );
330
331
var params = {};
332
366
rtb_booking_modal_submit.prop( 'disabled', false );
367
}
368
369
+ rtb_show_action_status( rtb_booking_modal_action_status, r.success );
370
371
// Hide result status icon after a few seconds
372
setTimeout( function() {
375
});
376
});
377
378
+ // Submit email form modal
379
+ rtb_email_modal_submit.click( function(e) {
380
+
381
+ e.preventDefault();
382
+ e.stopPropagation();
383
+
384
+ if ( $(this).prop( 'disabled' ) === true ) {
385
+ return;
386
+ }
387
+
388
+ // Loading
389
+ rtb_email_modal_submit.prop( 'disabled', true );
390
+ rtb_email_modal_cancel.prop( 'disabled', true );
391
+ rtb_email_modal_action_status.addClass( 'is-visible' );
392
+ rtb_show_action_status( rtb_email_modal_action_status, 'loading' );
393
+
394
+ var params = {};
395
+
396
+ params.action = 'rtb-admin-email-modal';
397
+ params.nonce = rtb_admin.nonce;
398
+ params.email = rtb_email_modal.find( 'form' ).serializeArray();
399
+
400
+ var data = $.param( params );
401
+
402
+ var jqhxr = $.post( ajaxurl, data, function( r ) {
403
+
404
+ if ( r.success ) {
405
+
406
+ rtb_show_action_status( rtb_email_modal_action_status, r.success );
407
+
408
+ // Hide result status icon after a few seconds
409
+ setTimeout( function() {
410
+ rtb_email_modal.find( '.action-status' ).removeClass( 'is-visible' );
411
+ rtb_toggle_email_modal( false );
412
+ }, 1000 );
413
+
414
+ } else {
415
+
416
+ if ( typeof r.data == 'unspecified' || typeof r.data.error == 'unspecified' ) {
417
+ rtb_toggle_booking_form_error_modal( true, rtb_admin.strings.error_unspecified );
418
+ } else {
419
+ rtb_toggle_booking_form_error_modal( true, r.data.msg );
420
+ }
421
+
422
+ rtb_email_modal_cancel.prop( 'disabled', false );
423
+ rtb_email_modal_submit.prop( 'disabled', false );
424
+
425
+ rtb_show_action_status( rtb_email_modal_action_status, false );
426
+
427
+ // Hide result status icon after a few seconds
428
+ setTimeout( function() {
429
+ rtb_email_modal.find( '.action-status' ).removeClass( 'is-visible' );
430
+ }, 4000 );
431
+ }
432
+ });
433
+ });
434
+
435
// Show the addons
436
if ( $( '#rtb-addons' ).length ) {
437
includes/AdminBookings.class.php CHANGED
@@ -22,6 +22,8 @@ class rtbAdminBookings {
22
add_action( 'wp_ajax_rtb-admin-booking-modal', array( $this, 'booking_modal_ajax' ) );
23
add_action( 'wp_ajax_nopriv_rtb-admin-trash-booking' , array( $this , 'nopriv_ajax' ) );
24
add_action( 'wp_ajax_rtb-admin-trash-booking', array( $this, 'trash_booking_ajax' ) );
25
26
// Validate post status and notification fields
27
add_action( 'rtb_validate_booking_submission', array( $this, 'validate_admin_fields' ) );
@@ -86,8 +88,11 @@ class rtbAdminBookings {
86
* @since 0.0.1
87
*/
88
public function print_booking_form_modal() {
89
?>
90
91
<div id="rtb-booking-modal" class="rtb-admin-modal">
92
<div class="rtb-booking-form rtb-container">
93
<form method="POST">
@@ -121,6 +126,47 @@ class rtbAdminBookings {
121
</form>
122
</div>
123
</div>
124
<!-- Restaurant Reservations error message modal -->
125
<div id="rtb-error-modal" class="rtb-admin-modal">
126
<div class="rtb-error rtb-container">
@@ -391,11 +437,79 @@ class rtbAdminBookings {
391
)
392
);
393
}
394
395
396
397
}
398
399
/**
400
* Validate post status and notification fields
401
* @since 1.3
22
add_action( 'wp_ajax_rtb-admin-booking-modal', array( $this, 'booking_modal_ajax' ) );
23
add_action( 'wp_ajax_nopriv_rtb-admin-trash-booking' , 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
28
// Validate post status and notification fields
29
add_action( 'rtb_validate_booking_submission', array( $this, 'validate_admin_fields' ) );
88
* @since 0.0.1
89
*/
90
public function print_booking_form_modal() {
91
+
92
+ global $rtb_controller;
93
?>
94
95
+ <!-- Restaurant Reservations add/edit booking modal -->
96
<div id="rtb-booking-modal" class="rtb-admin-modal">
97
<div class="rtb-booking-form rtb-container">
98
<form method="POST">
126
</form>
127
</div>
128
</div>
129
+
130
+ <!-- Restaurant Reservations send email modal -->
131
+ <div id="rtb-email-modal" class="rtb-admin-modal">
132
+ <div class="rtb-email-form rtb-container">
133
+ <form method="POST">
134
+ <input type="hidden" name="action" value="admin_send_email">
135
+ <input type="hidden" name="ID" value="">
136
+ <input type="hidden" name="name" value="">
137
+ <input type="hidden" name="email" value="">
138
+
139
+ <fieldset>
140
+ <legend><?php _e( 'Send Email', 'retaurant-reservations' ); ?></legend>
141
+
142
+ <div class="to">
143
+ <label for="rtb-email-to"><?php _ex( 'To', 'Label next to the email address to which an email will be sent', 'restaurant-reservations' ); ?></label>
144
+ <span class="rtb-email-to"></span>
145
+ </div>
146
+ <div class="subject">
147
+ <label for="rtb-email-subject"><?php _e( 'Subject', 'restaurant-reservations' ); ?></label>
148
+ <input type="text" name="rtb-email-subject" placeholder="<?php echo $rtb_controller->settings->get_setting( 'subject-admin-notice'); ?>">
149
+ </div>
150
+ <div class="message">
151
+ <label for="rtb-email-message"><?php _e( 'Message', 'restaurant-reservations' ); ?></label>
152
+ <textarea name="rtb-email-message" id="rtb-email-message"></textarea>
153
+ </div>
154
+ </fieldset>
155
+
156
+ <button type="submit" class="button-primary">
157
+ <?php _e( 'Add Booking', 'restaurant-reservations' ); ?>
158
+ </button>
159
+ <a href="#" class="button" id="rtb-cancel-email-modal">
160
+ <?php _e( 'Cancel', 'restaurant-reservations' ); ?>
161
+ </a>
162
+ <div class="action-status">
163
+ <span class="spinner loading"></span>
164
+ <span class="dashicons dashicons-no-alt error"></span>
165
+ <span class="dashicons dashicons-yes success"></span>
166
+ </div>
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">
437
)
438
);
439
}
440
+ }
441
+
442
+ /**
443
+ * Handle ajax requests to send an email
444
+ *
445
+ * @since 1.3.1
446
+ */
447
+ public function email_modal_ajax() {
448
+
449
+ global $rtb_controller;
450
+
451
+ // Authenticate request
452
+ if ( !check_ajax_referer( 'rtb-admin', 'nonce' ) || !current_user_can( 'manage_bookings' ) ) {
453
+ $this->nopriv_ajax();
454
+ }
455
+
456
+ // Set up $_POST object for validation
457
+ foreach( $_POST['email'] as $field ) {
458
+ $_POST[ $field['name'] ] = $field['value'];
459
+ }
460
+
461
+ $id = (int) $_POST['ID'];
462
+ $name = sanitize_text_field( $_POST['name'] );
463
+ $email = sanitize_text_field( $_POST['email'] );
464
+ $subject = stripcslashes( sanitize_text_field( $_POST['rtb-email-subject'] ) );
465
+ $message = stripcslashes( wp_kses_post( $_POST['rtb-email-message'] ) );
466
+
467
+ if ( empty( $message ) ) {
468
+ wp_send_json_error(
469
+ array(
470
+ 'error' => 'email_missing_message',
471
+ 'msg' => __( 'Please enter a message before sending the email.', 'restaurant-reservations' ),
472
+ )
473
+ );
474
+ }
475
476
+ if ( empty( $id ) || empty( $name ) || empty( $email ) ) {
477
+ wp_send_json_error(
478
+ array(
479
+ 'error' => 'email_missing_data',
480
+ 'msg' => __( 'The email could not be sent because some critical information was missing.', 'restaurant-reservations' ),
481
+ )
482
+ );
483
+ }
484
485
+ require_once( RTB_PLUGIN_DIR . '/includes/Booking.class.php' );
486
+ $booking = new rtbBooking();
487
488
+ if ( !$booking->load_post( $id ) ) {
489
+ wp_send_json_error(
490
+ array(
491
+ 'error' => 'email_missing_booking',
492
+ 'msg' => __( 'There was an error loading the booking and the email was not sent.', 'restaurant-reservations' ),
493
+ )
494
+ );
495
+ }
496
+
497
+ $email = new rtbNotificationEmail( 'admin_email_notice', 'user' );
498
+ $email->subject = empty( $subject ) ? $rtb_controller->settings->get_setting( 'subject-admin-notice' ) : $subject;
499
+ $email->message = $message;
500
+ $email->set_booking( $booking );
501
+ if ( $email->prepare_notification() ) {
502
+ $email->send_notification();
503
+ }
504
+
505
+ // Store email in postmeta for log
506
+ $booking->add_log( 'email', $email->subject, $email->message );
507
+ $booking->insert_post_data();
508
+
509
+ wp_send_json_success();
510
}
511
512
+
513
/**
514
* Validate post status and notification fields
515
* @since 1.3
includes/Booking.class.php CHANGED
@@ -79,6 +79,7 @@ class rtbBooking {
79
'email' => '',
80
'phone' => '',
81
'date_submission' => '',
82
);
83
84
$meta_defaults = apply_filters( 'rtb_booking_metadata_defaults', $meta_defaults );
@@ -93,6 +94,7 @@ class rtbBooking {
93
$this->email = $meta['email'];
94
$this->phone = $meta['phone'];
95
$this->date_submission = $meta['date_submission'];
96
}
97
98
/**
@@ -246,7 +248,7 @@ class rtbBooking {
246
} elseif ( $late_bookings >= 60 ) {
247
$late_bookings_message = sprintf( __( 'Sorry, bookings must be made more than %s hours in advance.', 'restaurant-reservations' ), $late_bookings / 60 );
248
} else {
249
- $late_bookings_message = sprintf( __( 'Sorry, bookings must be made more than %s mings in advance.', 'restaurant-reservations' ), $late_bookings );
250
}
251
$this->validation_errors[] = array(
252
'field' => 'time',
@@ -406,15 +408,15 @@ class rtbBooking {
406
407
// Post Status (define a default post status is none passed)
408
if ( !empty( $_POST['rtb-post-status'] ) && array_key_exists( $_POST['rtb-post-status'], $rtb_controller->cpts->booking_statuses ) ) {
409
- $this->status = sanitize_text_field( stripslashes_deep( $_POST['rtb-post-status'] ) );
410
} else {
411
- $this->status = 'pending';
412
}
413
414
// Check if any required fields are empty
415
$required_fields = $rtb_controller->settings->get_required_fields();
416
foreach( $required_fields as $slug => $field ) {
417
- if ( !$this->field_has_error( $slug ) && empty( $_POST[ 'rtb-' . $slug ] ) ) {
418
$this->validation_errors[] = array(
419
'field' => $slug,
420
'post_variable' => '',
@@ -459,7 +461,43 @@ class rtbBooking {
459
}
460
461
/**
462
- * Insert post data for a new booking.
463
* @since 0.0.1
464
*/
465
public function insert_post_data() {
@@ -469,7 +507,7 @@ class rtbBooking {
469
'post_title' => $this->name,
470
'post_content' => $this->message,
471
'post_date' => $this->date,
472
- 'post_status' => $this->status,
473
);
474
475
if ( !empty( $this->ID ) ) {
@@ -494,6 +532,10 @@ class rtbBooking {
494
'date_submission' => current_time( 'timestamp' ),
495
);
496
497
$meta = apply_filters( 'rtb_insert_booking_metadata', $meta, $this );
498
499
return update_post_meta( $this->ID, 'rtb', $meta );
79
'email' => '',
80
'phone' => '',
81
'date_submission' => '',
82
+ 'logs' => array(),
83
);
84
85
$meta_defaults = apply_filters( 'rtb_booking_metadata_defaults', $meta_defaults );
94
$this->email = $meta['email'];
95
$this->phone = $meta['phone'];
96
$this->date_submission = $meta['date_submission'];
97
+ $this->logs = $meta['logs'];
98
}
99
100
/**
248
} elseif ( $late_bookings >= 60 ) {
249
$late_bookings_message = sprintf( __( 'Sorry, bookings must be made more than %s hours in advance.', 'restaurant-reservations' ), $late_bookings / 60 );
250
} else {
251
+ $late_bookings_message = sprintf( __( 'Sorry, bookings must be made more than %s minutes in advance.', 'restaurant-reservations' ), $late_bookings );
252
}
253
$this->validation_errors[] = array(
254
'field' => 'time',
408
409
// Post Status (define a default post status is none passed)
410
if ( !empty( $_POST['rtb-post-status'] ) && array_key_exists( $_POST['rtb-post-status'], $rtb_controller->cpts->booking_statuses ) ) {
411
+ $this->post_status = sanitize_text_field( stripslashes_deep( $_POST['rtb-post-status'] ) );
412
} else {
413
+ $this->post_status = 'pending';
414
}
415
416
// Check if any required fields are empty
417
$required_fields = $rtb_controller->settings->get_required_fields();
418
foreach( $required_fields as $slug => $field ) {
419
+ if ( !$this->field_has_error( $slug ) && $this->is_field_empty( $slug ) ) {
420
$this->validation_errors[] = array(
421
'field' => $slug,
422
'post_variable' => '',
461
}
462
463
/**
464
+ * Check if a field is missing
465
+ *
466
+ * Checks for empty strings and arrays, but accepts '0'
467
+ * @since 0.1
468
+ */
469
+ public function is_field_empty( $slug ) {
470
+
471
+ $input = isset( $_POST['rtb-' . $slug ] ) ? $_POST['rtb-' . $slug] : '';
472
+
473
+ if ( ( is_string( $input ) && trim( $input ) == '' ) ||
474
+ ( is_array( $input ) && empty( $input ) ) ) {
475
+ return true;
476
+ }
477
+
478
+ return false;
479
+ }
480
+
481
+ /**
482
+ * Add a log entry to the booking
483
+ *
484
+ * @since 1.3.1
485
+ */
486
+ public function add_log( $type, $title, $message = '', $datetime = null ) {
487
+
488
+ if ( empty( $datetime ) ) {
489
+ $datetime = date( 'Y-m-d H:i:s');
490
+ }
491
+
492
+ if ( empty( $this->logs ) ) {
493
+ $this->logs = array();
494
+ }
495
+
496
+ array_push( $this->logs, array( $type, $title, $message, $datetime ) );
497
+ }
498
+
499
+ /**
500
+ * Insert post data for a new booking or update a booking
501
* @since 0.0.1
502
*/
503
public function insert_post_data() {
507
'post_title' => $this->name,
508
'post_content' => $this->message,
509
'post_date' => $this->date,
510
+ 'post_status' => $this->post_status,
511
);
512
513
if ( !empty( $this->ID ) ) {
532
'date_submission' => current_time( 'timestamp' ),
533
);
534
535
+ if ( !empty( $this->logs ) ) {
536
+ $meta['logs'] = $this->logs;
537
+ }
538
+
539
$meta = apply_filters( 'rtb_insert_booking_metadata', $meta, $this );
540
541
return update_post_meta( $this->ID, 'rtb', $meta );
includes/Notification.Email.class.php CHANGED
@@ -72,7 +72,7 @@ class rtbNotificationEmail extends rtbNotification {
72
empty( $this->message) ) {
73
return false;
74
}
75
-
76
return true;
77
}
78
@@ -135,8 +135,10 @@ class rtbNotificationEmail extends rtbNotification {
135
136
} elseif ( $this->event == 'pending_to_closed' ) {
137
$subject = $rtb_controller->settings->get_setting( 'subject-rejected-user' );
138
} else {
139
- $subject = '';
140
}
141
142
$this->subject = $this->process_subject_template( apply_filters( 'rtb_notification_email_subject', $subject, $this ) );
@@ -183,8 +185,10 @@ class rtbNotificationEmail extends rtbNotification {
183
if ( $this->target == 'user' ) {
184
$template = $this->get_template( 'template-rejected-user' );
185
}
186
} else {
187
- $template = '';
188
}
189
190
$template = apply_filters( 'rtb_notification_email_template', $template, $this );
72
empty( $this->message) ) {
73
return false;
74
}
75
+
76
return true;
77
}
78
135
136
} elseif ( $this->event == 'pending_to_closed' ) {
137
$subject = $rtb_controller->settings->get_setting( 'subject-rejected-user' );
138
+
139
+ // Use a subject that's been appended manually if available
140
} else {
141
+ $subject = empty( $this->subject ) ? '' : $this->subject;
142
}
143
144
$this->subject = $this->process_subject_template( apply_filters( 'rtb_notification_email_subject', $subject, $this ) );
185
if ( $this->target == 'user' ) {
186
$template = $this->get_template( 'template-rejected-user' );
187
}
188
+
189
+ // Use a message that's been appended manually if available
190
} else {
191
+ $template = empty( $this->message ) ? '' : $this->message;
192
}
193
194
$template = apply_filters( 'rtb_notification_email_template', $template, $this );
includes/Notifications.class.php CHANGED
@@ -100,8 +100,8 @@ class rtbNotifications {
100
101
// If the post status is not pending, trigger a post status
102
// transition as though it's gone from pending_to_{status}
103
- if ( $booking->status != 'pending' ) {
104
- do_action( 'pending_to_' . $booking->status, get_post( $booking->ID ) );
105
106
// Otherwise proceed with the new_submission event
107
} else {
100
101
// If the post status is not pending, trigger a post status
102
// transition as though it's gone from pending_to_{status}
103
+ if ( $booking->post_status != 'pending' ) {
104
+ do_action( 'pending_to_' . $booking->post_status, get_post( $booking->ID ) );
105
106
// Otherwise proceed with the new_submission event
107
} else {
includes/Settings.class.php CHANGED
@@ -165,6 +165,9 @@ Sorry, we could not accomodate your booking request. We\'re full or not open at
165
'Default email sent to users when they make a new booking request. The tags in {brackets} will be replaced by the appropriate content and should be left in place. HTML is allowed, but be aware that many email clients do not handle HTML very well.',
166
'restaurant-reservations'
167
),
168
);
169
170
$i8n = str_replace( '-', '_', get_bloginfo( 'language' ) );
@@ -643,6 +646,18 @@ Sorry, we could not accomodate your booking request. We\'re full or not open at
643
)
644
);
645
646
$sap = apply_filters( 'rtb_settings_page', $sap );
647
648
$sap->add_admin_menus();
165
'Default email sent to users when they make a new booking request. The tags in {brackets} will be replaced by the appropriate content and should be left in place. HTML is allowed, but be aware that many email clients do not handle HTML very well.',
166
'restaurant-reservations'
167
),
168
+
169
+ // Email sent to a user with a custom update notice from the admin
170
+ 'subject-admin-notice' => sprintf( _x( 'Update regarding your booking at %s', 'Default email subject sent to users when the admin sends a custom notice email from the bookings panel.', 'restaurant-reservations' ), get_bloginfo( 'name' ) ),
171
);
172
173
$i8n = str_replace( '-', '_', get_bloginfo( 'language' ) );
646
)
647
);
648
649
+ $sap->add_setting(
650
+ 'rtb-settings',
651
+ 'rtb-notifications-templates',
652
+ 'text',
653
+ array(
654
+ 'id' => 'subject-admin-notice',
655
+ 'title' => __( 'Admin Update Subject', 'restaurant-reservations' ),
656
+ 'description' => sprintf( __( 'The email subject a user should receive when an admin sends them a custom email message from the %sbookings panel%s.', 'restaurant-reservations' ), '<a href="' . admin_url( '?page=rtb-bookings' ) . '">', '</a>' ),
657
+ 'placeholder' => $this->defaults['subject-admin-notice'],
658
+ )
659
+ );
660
+
661
$sap = apply_filters( 'rtb_settings_page', $sap );
662
663
$sap->add_admin_menus();
includes/WP_List_Table.BookingsTable.class.php CHANGED
@@ -325,6 +325,9 @@ class rtbBookingsTable extends WP_List_Table {
325
break;
326
case 'email' :
327
$value = $booking->email;
328
break;
329
case 'phone' :
330
$value = $booking->phone;
325
break;
326
case 'email' :
327
$value = $booking->email;
328
+ $value .= '<div class="actions">';
329
+ $value .= '<a href="#" data-id="' . esc_attr( $booking->ID ) . '" data-action="email" data-email="' . esc_attr( $booking->email ) . '" data-name="' . $booking->name . '">' . __( 'Send Email', 'restaurant-reservations' ) . '</a>';
330
+ $value .= '</div>';
331
break;
332
case 'phone' :
333
$value = $booking->phone;
includes/template-functions.php CHANGED
@@ -296,7 +296,7 @@ function rtb_print_form_select_field( $slug, $title, $value, $args ) {
296
297
$slug = esc_attr( $slug );
298
$value = esc_attr( $value );
299
- $options = $args['options'];
300
$classes = isset( $args['classes'] ) ? $args['classes'] : array();
301
302
?>
@@ -318,6 +318,98 @@ function rtb_print_form_select_field( $slug, $title, $value, $args ) {
318
}
319
} // endif;
320
321
/**
322
* Print the Add Message link to display the message field
323
* @since 1.3
296
297
$slug = esc_attr( $slug );
298
$value = esc_attr( $value );
299
+ $options = is_array( $args['options'] ) ? $args['options'] : array();
300
$classes = isset( $args['classes'] ) ? $args['classes'] : array();
301
302
?>
318
}
319
} // endif;
320
321
+ /**
322
+ * Print a checkbox form field
323
+ *
324
+ * @uses rtb_print_form_tick_field
325
+ * @since 1.3.1
326
+ */
327
+ if ( !function_exists( 'rtb_print_form_checkbox_field' ) ) {
328
+ function rtb_print_form_checkbox_field( $slug, $title, $value, $args ) {
329
+
330
+ $slug = esc_attr( $slug );
331
+ $value = !empty( $value ) ? array_map( 'esc_attr', $value ) : array();
332
+ $options = is_array( $args['options'] ) ? $args['options'] : array();
333
+ $classes = isset( $args['classes'] ) ? $args['classes'] : array();
334
+
335
+ ?>
336
+
337
+ <div <?php echo rtb_print_element_class( $slug, $classes ); ?>>
338
+ <?php echo rtb_print_form_error( $slug ); ?>
339
+ <label>
340
+ <?php echo $title; ?>
341
+ </label>
342
+ <?php foreach ( $options as $opt_value => $opt_label ) : ?>
343
+ <label>
344
+ <input type="checkbox" name="rtb-<?php echo $slug; ?>[]" id="rtb-<?php echo $slug; ?>" value="<?php echo esc_attr( $opt_value ); ?>"<?php echo !empty( $value ) && in_array( $opt_value, $value ) ? ' checked' : ''; ?>>
345
+ <?php echo $opt_label; ?>
346
+ </label>
347
+ <?php endforeach; ?>
348
+ </div>
349
+
350
+ <?php
351
+ }
352
+ } // endif;
353
+
354
+ /**
355
+ * Print a radio button form field
356
+ *
357
+ * @uses rtb_print_form_tick_field
358
+ * @since 1.3.1
359
+ */
360
+ if ( !function_exists( 'rtb_print_form_radio_field' ) ) {
361
+ function rtb_print_form_radio_field( $slug, $title, $value, $args ) {
362
+
363
+ $slug = esc_attr( $slug );
364
+ $value = esc_attr( $value );
365
+ $options = is_array( $args['options'] ) ? $args['options'] : array();
366
+ $classes = isset( $args['classes'] ) ? $args['classes'] : array();
367
+
368
+ ?>
369
+
370
+ <div <?php echo rtb_print_element_class( $slug, $classes ); ?>>
371
+ <?php echo rtb_print_form_error( $slug ); ?>
372
+ <label>
373
+ <?php echo $title; ?>
374
+ </label>
375
+ <?php foreach ( $options as $opt_value => $opt_label ) : ?>
376
+ <label>
377
+ <input type="radio" name="rtb-<?php echo $slug; ?>" id="rtb-<?php echo $slug; ?>" value="<?php echo esc_attr( $opt_value ); ?>" <?php checked( $opt_value, $value ); ?>>
378
+ <?php echo $opt_label; ?>
379
+ </label>
380
+ <?php endforeach; ?>
381
+ </div>
382
+
383
+ <?php
384
+ }
385
+ } // endif;
386
+
387
+ /**
388
+ * Print a confirm prompt form field
389
+ *
390
+ * @since 1.3.1
391
+ */
392
+ if ( !function_exists( 'rtb_print_form_confirm_field' ) ) {
393
+ function rtb_print_form_confirm_field( $slug, $title, $value, $args ) {
394
+
395
+ $slug = esc_attr( $slug );
396
+ $value = esc_attr( $value );
397
+ $classes = isset( $args['classes'] ) ? $args['classes'] : array();
398
+
399
+ ?>
400
+
401
+ <div <?php echo rtb_print_element_class( $slug, $classes ); ?>>
402
+ <label for="rtb-<?php echo $slug; ?>">
403
+ <input type="checkbox" name="rtb-<?php echo $slug; ?>" id="rtb-<?php echo $slug; ?>" value="1" <?php checked( $value, 1 ); ?>>
404
+ <?php echo $title; ?>
405
+ </label>
406
+ </div>
407
+
408
+ <?php
409
+
410
+ }
411
+ } // endif;
412
+
413
/**
414
* Print the Add Message link to display the message field
415
* @since 1.3
languages/restaurant-reservations-cs_CZ.mo ADDED
Binary file
languages/restaurant-reservations-cs_CZ.po ADDED
@@ -0,0 +1,1324 @@
1
+ # Copyright (C) 2015 Restaurant Reservations
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.2.3\n"
6
+ "Report-Msgid-Bugs-To: http://wordpress.org/support/plugin/restaurant-reservations\n"
7
+ "POT-Creation-Date: 2015-01-23 11:25:35+00:00\n"
8
+ "MIME-Version: 1.0\n"
9
+ "Content-Type: text/plain; charset=UTF-8\n"
10
+ "Content-Transfer-Encoding: 8bit\n"
11
+ "PO-Revision-Date: 2015-02-08 19:45+0100\n"
12
+ "X-Generator: Poedit 1.7.3\n"
13
+ "X-Poedit-KeywordsList: __;_e;_x:1,2c;_ex:1,2c;_n:1,2;_nx:1,2,4c;_n_noop:1,2;"
14
+ "_nx_noop:1,2,3c;esc_attr__;esc_html__;esc_attr_e;esc_html_e;esc_attr_x:1,2c;"
15
+ "esc_html_x:1,2c\n"
16
+ "Language: cs_CZ\n"
17
+ "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
18
+ "X-Poedit-SourceCharset: UTF-8\n"
19
+ "X-Poedit-Basepath: ../\n"
20
+ "X-Textdomain-Support: yes\n"
21
+ "Last-Translator: \n"
22
+ "Language-Team: \n"
23
+ "X-Poedit-SearchPath-0: .\n"
24
+
25
+ #: includes/Addons.class.php:98 includes/WP_List_Table.BookingsTable.class.php:310
26
+ msgid "Loading"
27
+ msgstr "Nahrávám"
28
+
29
+ #: includes/Addons.class.php:135
30
+ msgid "Addons for Restaurant Reservations"
31
+ msgstr "Doplňky pro Restaurant Reservations"
32
+
33
+ #: includes/Addons.class.php:157
34
+ msgid "You have been logged out. Please login again to retrieve the addons."
35
+ msgstr "Byl jste odhlášen. Pro vrácení addonů se znovu přihlaste."
36
+
37
+ #: includes/Addons.class.php:173
38
+ msgid ""
39
+ "You do not have permission to access this page. Please login to an administrator "
40
+ "account if you have one."
41
+ msgstr ""
42
+ "Nemáte povolení k zobrazení této stránky. Přihlaste se prosím přes administrátorský "
43
+ "účet, pokud můžete."
44
+
45
+ #: includes/Addons.class.php:201
46
+ msgid ""
47
+ "The addons list could not be retrieved. Please <a href=\"\">try again</a>. If the "
48
+ "problem persists over time, please report it on the <a href=\"http://wordpress.org/"
49
+ "support/plugin/restaurant-reservations\" target=\"_blank\">support forums</a>."
50
+ msgstr ""
51
+ "Seznam addonů nemohl být zobrazen. Prosím <a href=\"\">zkuste to znovu</a>. Pokud "
52
+ "problém přetrvá, prosím ohlaste to na <a href=\"http://wordpress.org/support/plugin/"
53
+ "restaurant-reservations\" target=\"_blank\">podporu</a>."
54
+
55
+ #: includes/AdminBookings.class.php:65
56
+ msgid "Restaurant Bookings"
57
+ msgstr "Rezervace"
58
+
59
+ #: includes/AdminBookings.class.php:66 includes/CustomPostTypes.class.php:42
60
+ msgid "Add New"
61
+ msgstr "Přidat novou"
62
+
63
+ #: includes/AdminBookings.class.php:111 restaurant-reservations.php:217
64
+ msgid "Add Booking"
65
+ msgstr "Přidat rezervaci"
66
+
67
+ #: includes/AdminBookings.class.php:114
68
+ msgid "Cancel"
69
+ msgstr "Zrušit"
70
+
71
+ #: includes/AdminBookings.class.php:128
72
+ msgid "Close"
73
+ msgstr "Zavřít"
74
+
75
+ #: includes/AdminBookings.class.php:194
76
+ msgid "Booking Status"
77
+ msgstr "Stav rezervace"
78
+
79
+ #: includes/AdminBookings.class.php:202
80
+ msgid "Send notifications"
81
+ msgstr "Zaslat upozornění"
82
+
83
+ #: includes/AdminBookings.class.php:207
84
+ msgid "Learn more"
85
+ msgstr "Zjistit více"
86
+
87
+ #: includes/AdminBookings.class.php:208
88
+ msgid ""
89
+ "When adding a booking or changing a booking's status with this form, no email "
90
+ "notifications will be sent. Check this option if you want to send email notifications."
91
+ msgstr ""
92
+ "Pokud přidáváte nebo měníte rezervaci tímto formulářem, nebude Vám zasláno oznámení "
93
+ "emailem. Zaškrtněte tuto možnost, chcete-li zasílat oznámení emailem."
94
+
95
+ #: includes/AdminBookings.class.php:262
96
+ msgid "You have been logged out. Please %slogin again%s."
97
+ msgstr "Byl jste odhlášen. Prosím %spřihlaste se znovu%s."
98
+
99
+ #: includes/AdminBookings.class.php:298
100
+ msgid ""
101
+ "This booking has been sent to the %sTrash%s where it can not be edited. Set the "
102
+ "booking to Pending or Confirmed to edit it."
103
+ msgstr ""
104
+ "Tato rezervace byla poslána do %skoše%s, kde nemůže být dále měněna. Pro možnost "
105
+ "úpravy označte rezervaci jako nevyřízenou či potvrzenou."
106
+
107
+ #: includes/AdminBookings.class.php:315
108
+ msgid "The booking could not be retrieved. Please reload the page and try again."
109
+ msgstr ""
110
+ "Tato rezervace nejde dále upravovat. Prosím, znovu načtěte stránku a zkuste to znovu."
111
+
112
+ #: includes/AdminBookings.class.php:383
113
+ msgid ""
114
+ "Unable to trash this post. Please try again. If you continue to have trouble, please "
115
+ "refresh the page."
116
+ msgstr ""
117
+ "Není možné článek smazat. Zkuste to prosím znovu. Pokud potíže přetrvají, zkuste "
118
+ "obnovit stránku."
119
+
120
+ #: includes/Booking.class.php:178
121
+ msgid "Please enter the date you would like to book."
122
+ msgstr "Zadejte prosím datum, které si chcete zarezervovat."
123
+
124
+ #: includes/Booking.class.php:188
125
+ msgid ""
126
+ "The date you entered is not valid. Please select from one of the dates in the calendar."
127
+ msgstr "Zadané datum není platné. Vyberte prosím datum z kalendáře."
128
+
129
+ #: includes/Booking.class.php:199
130
+ msgid "Please enter the time you would like to book."
131
+ msgstr "Zadejte prosím čas, který si chcete zarezervovat."
132
+
133
+ #: includes/Booking.class.php:209
134
+ msgid "The time you entered is not valid. Please select from one of the times provided."
135
+ msgstr "Zadaný čas není platný. Vyberte si prosím jeden z nabízených časů."
136
+
137
+ #: includes/Booking.class.php:226
138
+ msgid "Sorry, bookings can not be made more than %s days in advance."
139
+ msgstr "Je nám líto, rezervaci nelze provést více než %s dní dopředu."
140
+
141
+ #: includes/Booking.class.php:237
142
+ msgid "Sorry, bookings can not be made in the past."
143
+ msgstr "Je nám líto, rezervace nelze nastavit do minulosti."
144
+
145
+ #: includes/Booking.class.php:245
146
+ msgid "Sorry, bookings must be made more than %s days in advance."
147
+ msgstr "Je nám líto, rezervace musí být provedena více než %s dní dopředu."
148
+
149
+ #: includes/Booking.class.php:247
150
+ msgid "Sorry, bookings must be made more than %s hours in advance."
151
+ msgstr "Je nám líto, rezervace musí být provedena více než %s hodin dopředu."
152
+
153
+ #: includes/Booking.class.php:249
154
+ msgid "Sorry, bookings must be made more than %s mings in advance."
155
+ msgstr ""
156
+
157
+ #: includes/Booking.class.php:288
158
+ msgid "Sorry, no bookings are being accepted then."
159
+ msgstr "Je nám líto, není možné provést rezervaci."
160
+
161
+ #: includes/Booking.class.php:340
162
+ msgid "Sorry, no bookings are being accepted on that date."
163
+ msgstr "Je nám líto, není možné provést rezervaci na toto datum."
164
+
165
+ #: includes/Booking.class.php:346
166
+ msgid "Sorry, no bookings are being accepted at that time."
167
+ msgstr "Je nám líto, není možné provést rezervaci na tento čas."
168
+
169
+ #: includes/Booking.class.php:368
170
+ msgid "Please enter a name for this booking."
171
+ msgstr "Prosím zadejte jméno pro tuto rezervaci."
172
+
173
+ #: includes/Booking.class.php:378
174
+ msgid "Please let us know how many people will be in your party."
175
+ msgstr "Zadejte prosím, kolik míst si přejete rezervovat."
176
+
177
+ #: includes/Booking.class.php:388
178
+ msgid "We only accept bookings for parties of up to %d people."
179
+ msgstr "Přijímáme rezervace pouze do %d míst."
180
+
181
+ #: includes/Booking.class.php:399
182
+ msgid "Please enter an email address so we can confirm your booking."
183
+ msgstr "Zadejte prosím emailovou adresu, abychom Vám pomohli rezervaci potvrdit."
184
+
185
+ #: includes/Booking.class.php:421
186
+ msgid "Please complete this field to request a booking."
187
+ msgstr "Pro rezervaci prosím vyplňte toto pole."
188
+
189
+ #: includes/CustomPostTypes.class.php:38 includes/CustomPostTypes.class.php:40
190
+ #: includes/CustomPostTypes.class.php:41
191
+ #: includes/WP_List_Table.BookingsTable.class.php:76
192
+ msgid "Bookings"
193
+ msgstr "Rezervace"
194
+
195
+ #: includes/CustomPostTypes.class.php:39
196
+ #: includes/WP_List_Table.BookingsTable.class.php:75
197
+ msgid "Booking"
198
+ msgstr "Rezervace"
199
+
200
+ #: includes/CustomPostTypes.class.php:43
201
+ msgid "Add New Booking"
202
+ msgstr "Přidat novou rezervaci"
203
+
204
+ #: includes/CustomPostTypes.class.php:44 restaurant-reservations.php:218
205
+ msgid "Edit Booking"
206
+ msgstr "Uprravit rezervaci"
207
+
208
+ #: includes/CustomPostTypes.class.php:45
209
+ msgid "New Booking"
210
+ msgstr "Nová rezervace"
211
+
212
+ #: includes/CustomPostTypes.class.php:46
213
+ msgid "View Booking"
214
+ msgstr "zobrazit rezervaci"
215
+
216
+ #: includes/CustomPostTypes.class.php:47
217
+ msgid "Search Bookings"
218
+ msgstr "Hledat v rezervacích"
219
+
220
+ #: includes/CustomPostTypes.class.php:48
221
+ msgid "No bookings found"
222
+ msgstr "Žádné rezervace nebyly nalezeny"
223
+
224
+ #: includes/CustomPostTypes.class.php:49
225
+ msgid "No bookings found in trash"
226
+ msgstr "žádné rezervace nebyly nalezeny v koši"
227
+
228
+ #: includes/CustomPostTypes.class.php:50
229
+ msgid "All Bookings"
230
+ msgstr "všechny rezervace"
231
+
232
+ #: includes/CustomPostTypes.class.php:93
233
+ msgid "Confirmed <span class=\"count\">(%s)</span>"
234
+ msgid_plural "Confirmed <span class=\"count\">(%s)</span>"
235
+ msgstr[0] "Potvrzena <span class=\"count\">(%s)</span>"
236
+ msgstr[1] "Potvrzeny <span class=\"count\">(%s)</span>"
237
+ msgstr[2] "Potvrzených <span class=\"count\">(%s)</span>"
238
+
239
+ #: includes/CustomPostTypes.class.php:104
240
+ msgid "Closed <span class=\"count\">(%s)</span>"
241
+ msgid_plural "Closed <span class=\"count\">(%s)</span>"
242
+ msgstr[0] "Uzavřena <span class=\"count\">(%s)</span>"
243
+ msgstr[1] "Uzavřeny <span class=\"count\">(%s)</span>"
244
+ msgstr[2] "Uzavřených <span class=\"count\">(%s)</span>"
245
+
246
+ #: includes/Notification.class.php:88
247
+ msgid "View pending bookings"
248
+ msgstr "Zobrazit nevyřízené rezervace"
249
+
250
+ #: includes/Notification.class.php:89
251
+ msgid "Confirm this booking"
252
+ msgstr "Potvrdit tuto rezervaci"
253
+
254
+ #: includes/Notification.class.php:90
255
+ msgid "Reject this booking"
256
+ msgstr "Odmítnout tuto rezervaci"
257
+
258
+ #: includes/Settings.class.php:218 includes/Settings.class.php:219
259
+ msgid "Settings"
260
+ msgstr "Nastavení"
261
+
262
+ #: includes/Settings.class.php:231
263
+ msgid "General"
264
+ msgstr "Obecné"
265
+
266
+ #: includes/Settings.class.php:242
267
+ msgid "Booking Page"
268
+ msgstr "Rezervační stránka"
269
+
270
+ #: includes/Settings.class.php:243
271
+ msgid ""
272
+ "Select a page on your site to automatically display the booking form and confirmation "
273
+ "message."
274
+ msgstr ""
275
+ "Vyberte stránku na Vašem webu, kde se bude automaticky zobrazovat rezervační formulář "
276
+ "a potvrzovací zpráva."
277
+
278
+ #: includes/Settings.class.php:259
279
+ msgid "Max Party Size"
280
+ msgstr "Maximální počet míst"
281
+
282
+ #: includes/Settings.class.php:260
283
+ msgid "Set a maximum allowed party size for bookings."
284
+ msgstr "Zadat maximální povolený počet míst pro rezervaci."
285
+
286
+ #: includes/Settings.class.php:272
287
+ msgid "Success Message"
288
+ msgstr "Zpráva o úspěchu"
289
+
290
+ #: includes/Settings.class.php:273
291
+ msgid "Enter the message to display when a booking request is made."
292
+ msgstr "Zadejte zprávu, která se zobrazí, když bude zadán požadavek o rezervaci."
293
+
294
+ #: includes/Settings.class.php:284
295
+ msgid "Date Format"
296
+ msgstr "formát data"
297
+
298
+ #: includes/Settings.class.php:285
299
+ msgid ""
300
+ "Define how the date is formatted on the booking form. %sFormatting rules%s. This only "
301
+ "changes the format on the booking form. To change the date format in notification "
302
+ "messages, modify your general %sWordPress Settings%s."
303
+ msgstr ""
304
+ "Definujte, v jakém formátu bude datum na rezervačním formuláři. %sPravidla formátování"
305
+ "%s. Formát bude změněn pouze na tomto rezervačním formuláři. Pro změnu formátu data v "
306
+ "oznámeních, upravte obecná %sNastavení WordPressu%s."
307
+
308
+ #: includes/Settings.class.php:296
309
+ msgid "Time Format"
310
+ msgstr "Formát času"
311
+
312
+ #: includes/Settings.class.php:297
313
+ msgid ""
314
+ "Define how the time is formatted on the booking form. %sFormatting rules%s. This only "
315
+ "changes the format on the booking form. To change the time format in notification "
316
+ "messages, modify your general %sWordPress Settings%s."
317
+ msgstr ""
318
+ "Definujte, v jakém formátu bude čas na rezervačním formuláři. %sPravidla formátování"
319
+ "%s. Formát bude změněn pouze na tomto rezervačním formuláři. Pro změnu formátu času v "
320
+ "oznámeních, upravte obecná %sNastavení WordPressu%s."
321
+
322
+ #: includes/Settings.class.php:310
323
+ msgid "Language"
324
+ msgstr "Jazyk"
325
+
326
+ #: includes/Settings.class.php:311
327
+ msgid ""
328
+ "Select a language to use for the booking form datepicker if it is different than your "
329
+ "WordPress language setting."
330
+ msgstr ""
331
+ "Zvolte jazyk v rezervačním formuláři, pokud je jiný než vaše jazykové nastavení "
332
+ "WordPressu."
333
+
334
+ #: includes/Settings.class.php:321
335
+ msgid "Booking Schedule"
336
+ msgstr "Plán rezervací"
337
+
338
+ #: includes/Settings.class.php:328
339
+ msgid "Add new scheduling rule"
340
+ msgstr "Přidat nové plánovací pravidlo"
341
+
342
+ #: includes/Settings.class.php:342
343
+ msgid "Delete scheduling rule"
344
+ msgstr "Smazat plánovací pravidlo"
345
+
346
+ #: includes/Settings.class.php:359
347
+ msgid "Schedule"
348
+ msgstr "Plán"
349
+
350
+ #: includes/Settings.class.php:360
351
+ msgid "Define the weekly schedule during which you accept bookings."
352
+ msgstr "Definovat týdenní plán, kdy budete přijímat rezervace."
353
+
354
+ #: includes/Settings.class.php:385
355
+ msgid "Exceptions"
356
+ msgstr "Výjimky"
357
+
358
+ #: includes/Settings.class.php:386
359
+ msgid ""
360
+ "Define special opening hours for holidays, events or other needs. Leave the time empty "
361
+ "if you're closed all day."
362
+ msgstr ""
363
+ "Zadat speciální otevírací dobu pro svátky, významné události a plánované akce. Pokud "
364
+ "budete mít zavřeno celý den, nevyplňujte čas."
365
+
366
+ #: includes/Settings.class.php:401
367
+ msgid "Early Bookings"
368
+ msgstr "časné rezervace"
369
+
370
+ #: includes/Settings.class.php:402
371
+ msgid "Select how early customers can make their booking."
372
+ msgstr "Zvolte, jak dopředu mohou zákazníci zadávat rezervace."
373
+
374
+ #: includes/Settings.class.php:405
375
+ msgid "Any time"
376
+ msgstr "Kdykoliv"
377
+
378
+ #: includes/Settings.class.php:406
379
+ msgid "Up to 1 day in advance"
380
+ msgstr "Až 1 den předem"
381
+
382
+ #: includes/Settings.class.php:407
383
+ msgid "Up to 1 week in advance"
384
+ msgstr "Až 1 týden předem"
385
+
386
+ #: includes/Settings.class.php:408
387
+ msgid "Up to 2 weeks in advance"
388
+ msgstr "Až 2 týdny předem"
389
+
390
+ #: includes/Settings.class.php:409
391
+ msgid "Up to 30 days in advance"
392
+ msgstr "Až 30 dní předem"
393
+
394
+ #: includes/Settings.class.php:410
395
+ msgid "Up to 90 days in advance"
396
+ msgstr "Až 90 dní předem"
397
+
398
+ #: includes/Settings.class.php:421
399
+ msgid "Late Bookings"
400
+ msgstr "Pozdní rezervace"
401
+
402
+ #: includes/Settings.class.php:422
403
+ msgid "Select how late customers can make their booking."
404
+ msgstr "Zvolte, jak nepozději mohou zákazníci zadávat své rezervace."
405
+
406
+ #: includes/Settings.class.php:425
407
+ msgid "Up to the last minute"
408
+ msgstr "Až do poslední minuty"
409
+
410
+ #: includes/Settings.class.php:426
411
+ msgid "At least 15 minutes in advance"
412
+ msgstr "Alespoň 15 minut předem"
413
+
414
+ #: includes/Settings.class.php:427
415
+ msgid "At least 30 minutes in advance"
416
+ msgstr "Alespoň 30 minut předem"
417
+
418
+ #: includes/Settings.class.php:428
419
+ msgid "At least 45 minutes in advance"
420
+ msgstr "Alespoň 45 minut předem"
421
+
422
+ #: includes/Settings.class.php:429
423
+ msgid "At least 1 hour in advance"
424
+ msgstr "Alespoň 1 hodinu předem"
425
+
426
+ #: includes/Settings.class.php:430
427
+ msgid "At least 4 hours in advance"
428
+ msgstr "Alespoň 4 hodiny předem"
429
+
430
+ #: includes/Settings.class.php:431
431
+ msgid "At least 1 day in advance"
432
+ msgstr "Alespoň 1 den předem"
433
+
434
+ #: includes/Settings.class.php:442
435
+ msgid "Date Pre-selection"
436
+ msgstr "Výběr data"
437
+
438
+ #: includes/Settings.class.php:443
439
+ msgid ""
440
+ "When the booking form is loaded, should it automatically attempt to select a valid "
441
+ "date?"
442
+ msgstr ""
443
+ "Když se načte rezervační formulář, má se automaticky pokusit vybrat platné datum?"
444
+
445
+ #: includes/Settings.class.php:446
446
+ msgid "Select today if valid"
447
+ msgstr "Vybrat dnešek, pokud je datum platné"
448
+
449
+ #: includes/Settings.class.php:447
450
+ msgid "Select today or next valid date"
451
+ msgstr "Vybrat dnešek nebo příští platné datum"
452
+
453
+ #: includes/Settings.class.php:448
454
+ msgid "Leave empty"
455
+ msgstr "Nechat prázdné"
456
+
457
+ #: includes/Settings.class.php:459
458
+ msgid "Time Interval"
459
+ msgstr "Časový interval"
460
+
461
+ #: includes/Settings.class.php:460
462
+ msgid "Select the number of minutes between each available time."
463
+ msgstr "Vyberte počet minut mezi časem, který je k dispozici."
464
+
465
+ #: includes/Settings.class.php:463
466
+ msgid "Every 30 minutes"
467
+ msgstr "Každých 30 minut"
468
+
469
+ #: includes/Settings.class.php:464
470
+ msgid "Every 15 minutes"
471
+ msgstr "Každých 15 minut"
472
+
473
+ #: includes/Settings.class.php:465
474
+ msgid "Every 10 minutes"
475
+ msgstr "Každých 10 minut"
476
+
477
+ #: includes/Settings.class.php:466
478
+ msgid "Every 5 minutes"
479
+ msgstr "Každých 5 minut"
480
+
481
+ #: includes/Settings.class.php:475
482
+ msgid "Notifications"
483
+ msgstr "Oznámení"
484
+
485
+ #: includes/Settings.class.php:486
486
+ msgid "Reply-To Name"
487
+ msgstr "Jméno odesílatele"
488
+
489
+ #: includes/Settings.class.php:487
490
+ msgid "The name which should appear in the Reply-To field of a user notification email"
491
+ msgstr "Jméno, které se bude objevovat v poli odesílatele v oznamovacím emailu uživatele"
492
+
493
+ #: includes/Settings.class.php:498
494
+ msgid "Reply-To Email Address"
495
+ msgstr "email odesílatele"
496
+
497
+ #: includes/Settings.class.php:499
498
+ msgid ""
499
+ "The email address which should appear in the Reply-To field of a user notification "
500
+ "email."
501
+ msgstr "Email, který se bude objevovat v poli odesílatele v oznamovacím emailu uživatele"
502
+
503
+ #: includes/Settings.class.php:510
504
+ msgid "Admin Notification"
505
+ msgstr "Oznámení admina"
506
+
507
+ #: includes/Settings.class.php:511
508
+ msgid "Send an email notification to an administrator when a new booking is requested."
509
+ msgstr "Zaslat oznámení emailem administrátorovi, když bude zadána nová rezervace."
510
+
511
+ #: includes/Settings.class.php:521
512
+ msgid "Admin Email Address"
513
+ msgstr "Email administrátora"
514
+
515
+ #: includes/Settings.class.php:522
516
+ msgid "The email address where admin notifications should be sent."
517
+ msgstr "email, kam budou zasílány oznámení administrátorovi."
518
+
519
+ #: includes/Settings.class.php:531
520
+ msgid "Email Templates"
521
+ msgstr "Šablony emailu"
522
+
523
+ #: includes/Settings.class.php:533
524
+ msgid ""
525
+ "Adjust the messages that are emailed to users and admins during the booking process."
526
+ msgstr "Upravit zprávy. které jsou při rezervaci zasílány uživatelům a administrátorům."
527
+
528
+ #: includes/Settings.class.php:543
529
+ msgid "Template Tags"
530
+ msgstr "Štítky šablony"
531
+
532
+ #: includes/Settings.class.php:545
533
+ msgid ""
534
+ "Use the following tags to automatically add booking information to the emails. Tags "
535
+ "labeled with an asterisk (*) can be used in the email subject as well."
536
+ msgstr ""
537
+ "Použít následující štítky k automatickému přidání informací o rezervací do emailu. "
538
+ "Štítky označené hvězdičkou (*) mohou být použité také v předmětu emailu."
539
+
540
+ #: includes/Settings.class.php:556
541
+ msgid "Admin Notification Subject"
542
+ msgstr "Předmět oznámení administrátorovi"
543
+
544
+ #: includes/Settings.class.php:557
545
+ msgid "The email subject for admin notifications."
546
+ msgstr "Předmět emailu pro oznámení administrátorovi."
547
+
548
+ #: includes/Settings.class.php:568
549
+ msgid "Admin Notification Email"
550
+ msgstr "Oznamovací email administrátorovi"
551
+
552
+ #: includes/Settings.class.php:569
553
+ msgid "Enter the email an admin should receive when an initial booking request is made."
554
+ msgstr ""
555
+ "Zadejte text emailu, který dostane administrátor, když dojde k zadání žádosti o "
556
+ "rezervaci."
557
+
558
+ #: includes/Settings.class.php:580
559
+ msgid "New Request Email Subject"
560
+ msgstr "Předmět emailu o nové žádosti"
561
+
562
+ #: includes/Settings.class.php:581
563
+ msgid ""
564
+ "The email subject a user should receive when they make an initial booking request."
565
+ msgstr ""
566
+ "Tento předmět bude mít email, který dostane uživatel, když zadá žádost o rezervaci."
567
+
568
+ #: includes/Settings.class.php:592
569
+ msgid "New Request Email"
570
+ msgstr "Nová žádost email"
571
+
572
+ #: includes/Settings.class.php:593
573
+ msgid "Enter the email a user should receive when they make an initial booking request."
574
+ msgstr ""
575
+ "Zadejte text emailu, který dostane uživatel, když dojde k zadání žádosti o rezervaci."
576
+
577
+ #: includes/Settings.class.php:604
578
+ msgid "Confirmed Email Subject"
579
+ msgstr "Potvrzeno - předmět emailu"
580
+
581
+ #: includes/Settings.class.php:605
582
+ msgid "The email subject a user should receive when their booking has been confirmed."
583
+ msgstr ""
584
+ "Tento předmět bude mít email, který dostane uživatel, když bude jeho rezervace "
585
+ "potvrzená."
586
+
587
+ #: includes/Settings.class.php:616
588
+ msgid "Confirmed Email"
589
+ msgstr "Potvrzeno - email"
590
+
591
+ #: includes/Settings.class.php:617
592
+ msgid "Enter the email a user should receive when their booking has been confirmed."
593
+ msgstr "Zadejte text emailu, který dostane uživatel, když bude jeho rezervace potvrzena."
594
+
595
+ #: includes/Settings.class.php:628
596
+ msgid "Rejected Email Subject"
597
+ msgstr "Odmítnuto - předmět emailu"
598
+
599
+ #: includes/Settings.class.php:629
600
+ msgid "The email subject a user should receive when their booking has been rejected."
601
+ msgstr ""
602
+ "Tento předmět bude mít email, který dostane uživatel, když bude jeho rezervace "
603
+ "odmítnutá."
604
+
605
+ #: includes/Settings.class.php:640
606
+ msgid "Rejected Email"
607
+ msgstr "Odmítnuto - email"
608
+
609
+ #: includes/Settings.class.php:641
610
+ msgid "Enter the email a user should receive when their booking has been rejected."
611
+ msgstr "Zadejte text emailu, který dostane uživatel, když bude jeho rezervace odmítntua."
612
+
613
+ #: includes/Settings.class.php:659
614
+ msgid "Any size"
615
+ msgstr "Libovolná velikost"
616
+
617
+ #: includes/Settings.class.php:743
618
+ msgid "Book a table"
619
+ msgstr "Zarezervovat stůl"
620
+
621
+ #: includes/Settings.class.php:746 includes/WP_List_Table.BookingsTable.class.php:278
622
+ msgid "Date"
623
+ msgstr "Datum"
624
+
625
+ #: includes/Settings.class.php:752
626
+ msgid "Time"
627
+ msgstr "Čas"
628
+
629
+ #: includes/Settings.class.php:758 includes/WP_List_Table.BookingsTable.class.php:279
630
+ msgid "Party"
631
+ msgstr "Počet hostů"
632
+
633
+ #: includes/Settings.class.php:771
634
+ msgid "Contact Details"
635
+ msgstr "Kontaktní detaily"
636
+
637
+ #: includes/Settings.class.php:774 includes/WP_List_Table.BookingsTable.class.php:280
638
+ msgid "Name"
639
+ msgstr "Jméno"
640
+
641
+ #: includes/Settings.class.php:780 includes/WP_List_Table.BookingsTable.class.php:281
642
+ msgid "Email"
643
+ msgstr "Email"
644
+
645
+ #: includes/Settings.class.php:789 includes/WP_List_Table.BookingsTable.class.php:282
646
+ msgid "Phone"
647
+ msgstr "Telefon"
648
+
649
+ #: includes/Settings.class.php:797
650
+ msgid "Add a Message"
651
+ msgstr "Přidat zprávu"
652
+
653
+ #: includes/Settings.class.php:802 includes/WP_List_Table.BookingsTable.class.php:283
654
+ msgid "Message"
655
+ msgstr "Zpráva"
656
+
657
+ #: includes/Settings.class.php:847
658
+ msgid "Email of the user who made the booking"
659
+ msgstr "Email uživatele, který provedl rezervaci"
660
+
661
+ #: includes/Settings.class.php:848
662
+ msgid "* Name of the user who made the booking"
663
+ msgstr "* Jméno uživatele, který provedl rezervaci"
664
+
665
+ #: includes/Settings.class.php:849
666
+ msgid "* Number of people booked"
667
+ msgstr "* Počet rezervovaných míst"
668
+
669
+ #: includes/Settings.class.php:850
670
+ msgid "* Date and time of the booking"
671
+ msgstr "* Datum a čas rezervace"
672
+
673
+ #: includes/Settings.class.php:851
674
+ msgid "Phone number if supplied with the request"
675
+ msgstr "Telefonní číslo, pokud je zadáno"
676
+
677
+ #: includes/Settings.class.php:852
678
+ msgid "Message added to the request"
679
+ msgstr "Zpráva"
680
+
681
+ #: includes/Settings.class.php:853
682
+ msgid "A link to the admin panel showing pending bookings"
683
+ msgstr "Odkaz na panel administrátora pro zobrazení nevyřízených rezervací"
684
+
685
+ #: includes/Settings.class.php:854
686
+ msgid "A link to confirm this booking. Only include this in admin notifications"
687
+ msgstr ""
688
+ "Odkaz na potvrzení této rezervace. Připojovat pouze k oznámením pro administrátora"
689
+
690
+ #: includes/Settings.class.php:855
691
+ msgid "A link to reject this booking. Only include this in admin notifications"
692
+ msgstr ""
693
+ "Odkaz na odmítnutí této rezervace. Připojovat pouze k oznámením pro administrátora"
694
+
695
+ #: includes/Settings.class.php:856
696
+ msgid "The name of this website"
697
+ msgstr "Jméno webové stránky"
698
+
699
+ #: includes/Settings.class.php:857
700
+ msgid "A link to this website"
701
+ msgstr "Odkaz na webovou stránku"
702
+
703
+ #: includes/Settings.class.php:858
704
+ msgid "Current date and time"
705
+ msgstr "Čas a datum"
706
+
707
+ #: includes/WP_List_Table.BookingsTable.class.php:186
708
+ msgid "Upcoming"
709
+ msgstr "Nadcházející"
710
+
711
+ #: includes/WP_List_Table.BookingsTable.class.php:187
712
+ msgid "Today"
713
+ msgstr "dnes"
714
+
715
+ #: includes/WP_List_Table.BookingsTable.class.php:188
716
+ #: includes/WP_List_Table.BookingsTable.class.php:246
717
+ msgid "All"
718
+ msgstr "Vše"
719
+
720
+ #: includes/WP_List_Table.BookingsTable.class.php:204
721
+ msgid "Start Date:"
722
+ msgstr "Počáteční datum:"
723
+
724
+ #: includes/WP_List_Table.BookingsTable.class.php:205
725
+ msgid "Start Date"
726
+ msgstr "Počáteční datum"
727
+
728
+ #: includes/WP_List_Table.BookingsTable.class.php:206
729
+ msgid "End Date:"
730
+ msgstr "Konečné datum:"
731
+
732
+ #: includes/WP_List_Table.BookingsTable.class.php:207
733
+ msgid "End Date"
734
+ msgstr "Konečné datum"
735
+
736
+ #: includes/WP_List_Table.BookingsTable.class.php:208
737
+ msgid "Apply"
738
+ msgstr "Potvrdit"
739
+
740
+ #: includes/WP_List_Table.BookingsTable.class.php:210
741
+ msgid "Clear Filter"
742
+ msgstr "Vymazat filtr"
743
+
744
+ #: includes/WP_List_Table.BookingsTable.class.php:247
745
+ msgid "Pending"
746
+ msgstr "Nevyřízené"
747
+
748
+ #: includes/WP_List_Table.BookingsTable.class.php:248
749
+ msgid "Confirmed"
750
+ msgstr "Potvrzené"
751
+
752
+ #: includes/WP_List_Table.BookingsTable.class.php:249
753
+ msgid "Closed"
754
+ msgstr "Uzavřené"
755
+
756
+ #: includes/WP_List_Table.BookingsTable.class.php:250
757
+ #: includes/WP_List_Table.BookingsTable.class.php:315
758
+ msgid "Trash"
759
+ msgstr "Koš"
760
+
761
+ #: includes/WP_List_Table.BookingsTable.class.php:284
762
+ msgid "Status"
763
+ msgstr "Status"
764
+
765
+ #: includes/WP_List_Table.BookingsTable.class.php:314
766
+ msgid "Edit"
767
+ msgstr "Upravit"
768
+
769
+ #: includes/WP_List_Table.BookingsTable.class.php:376
770
+ msgid "Delete"
771
+ msgstr "Smazat"
772
+
773
+ #: includes/WP_List_Table.BookingsTable.class.php:377
774
+ msgid "Set To Confirmed"
775
+ msgstr "Označit jako potvrzený"
776
+
777
+ #: includes/WP_List_Table.BookingsTable.class.php:378
778
+ msgid "Set To Pending Review"
779
+ msgstr "Označit jako nevyřízený"
780
+
781
+ #: includes/WP_List_Table.BookingsTable.class.php:379
782
+ msgid "Set To Closed"
783
+ msgstr "Označit jako uzavřený"
784
+
785
+ #: includes/WP_List_Table.BookingsTable.class.php:494
786
+ msgid "%d booking deleted successfully."
787
+ msgid_plural "%d bookings deleted successfully."
788
+ msgstr[0] "%d rezervace byla úspěšně smazaná."
789
+ msgstr[1] "%d rezervace byly úspěšné smazány."
790
+ msgstr[2] "%d rezervací bylo úspěšně smazaných."
791
+
792
+ #: includes/WP_List_Table.BookingsTable.class.php:497
793
+ msgid "%d booking confirmed."
794
+ msgid_plural "%d bookings confirmed."
795
+ msgstr[0] "%d rezervace byla potvrzena."
796
+ msgstr[1] "%d rezervace byly potvrzeny."
797
+ msgstr[2] "%d rezervací bylo potvrzených."
798
+
799
+ #: includes/WP_List_Table.BookingsTable.class.php:500
800
+ msgid "%d booking set to pending."
801
+ msgid_plural "%d bookings set to pending."
802
+ msgstr[0] "%d rezervace byla označena jako nevyřízená."
803
+ msgstr[1] "%d rezervace byly označeny jako nevyřízené."
804
+ msgstr[2] "%d rezervací bylo označených jako nevyřízené."
805
+
806
+ #: includes/WP_List_Table.BookingsTable.class.php:503
807
+ msgid "%d booking closed."
808
+ msgid_plural "%d bookings closed."
809
+ msgstr[0] "%d rezervace byla označena jako uzavřená."
810
+ msgstr[1] "%d rezervace byly označeny jako uzavřené."
811
+ msgstr[2] "%d rezervací bylo označených jako uzavřené."
812
+
813
+ #: includes/WP_List_Table.BookingsTable.class.php:515
814
+ msgid "%d booking had errors and could not be processed."
815
+ msgid_plural "%d bookings had errors and could not be processed."
816
+ msgstr[0] "%d rezervace obsahovala chyby a nemohla být zpracována."
817
+ msgstr[1] "%d rezervace obsahovaly chyby a nemohly být zpracovány."
818
+ msgstr[2] "%d rezervací obsahovalo chyby a nemohly být zpracovány."
819
+
820
+ #: includes/WP_List_Table.BookingsTable.class.php:691
821
+ msgid "You're viewing bookings that have been moved to the trash."
822
+ msgstr "Jsou zobrazeny rezervace, které byly přesunuty do koše."
823
+
824
+ #: includes/WP_List_Table.BookingsTable.class.php:700
825
+ msgid "Only today's bookings are being shown."
826
+ msgstr "Jsou zobrazeny pouze dnešní rezervace."
827
+
828
+ #: includes/WP_List_Table.BookingsTable.class.php:702
829
+ msgid "Only upcoming bookings are being shown."
830
+ msgstr "Jsou zobrazeny pouze budoucí rezervace."
831
+
832
+ #: includes/WP_Widget.BookingFormWidget.class.php:25
833
+ msgid "Booking Form"
834
+ msgstr "Rezervační formulář"
835
+
836
+ #: includes/WP_Widget.BookingFormWidget.class.php:26
837
+ msgid "Display a form to accept bookings."
838
+ msgstr "Zobrazit formulář pro přijetí rezervací."
839
+
840
+ #: includes/WP_Widget.BookingFormWidget.class.php:64
841
+ msgid "Title"
842
+ msgstr "Název"
843
+
844
+ #: includes/template-functions.php:106
845
+ msgid "Request Booking"
846
+ msgstr "Rezervovat"
847
+
848
+ #: restaurant-reservations.php:148
849
+ msgid "Booking Manager"
850
+ msgstr "Manager rezervací"
851
+
852
+ #: restaurant-reservations.php:219
853
+ msgid ""
854
+ "An unspecified error occurred. Please try again. If the problem persists, try logging "
855
+ "out and logging back in."
856
+ msgstr ""
857
+ "Došlo k nespecifikované chybě. Zkuste to prosím později. Pokud potíže přetrvají, "
858
+ "zkuste se odhlásit a znovu přihlásit."
859
+
860
+ #: restaurant-reservations.php:281
861
+ msgid "View the help documentation for Restaurant Reservations"
862
+ msgstr "Zobrazit pomocnou dokumentaci pro Rezervace"
863
+
864
+ #: restaurant-reservations.php:281
865
+ msgid "Help"
866
+ msgstr "Pomoc"
867
+
868
+ #. Plugin Name of the plugin/theme
869
+ msgid "Restaurant Reservations"
870
+ msgstr "Rezervace"
871
+
872
+ #. Plugin URI of the plugin/theme
873
+ #. Author URI of the plugin/theme
874
+ msgid "http://themeofthecrop.com"
875
+ msgstr "http://themeofthecrop.com"
876
+
877
+ #. Description of the plugin/theme
878
+ msgid "Accept restaurant reservations and bookings online."
879
+ msgstr "Přijímejte rezervace online."
880
+
881
+ #. Author of the plugin/theme
882
+ msgid "Theme of the Crop"
883
+ msgstr "Theme of the Crop"
884
+
885
+ #: includes/Addons.class.php:99
886
+ msgctxt "Error message when retrieving list of addons"
887
+ msgid "An unknown error occured."
888
+ msgstr "Došlo k neznámé chybě."
889
+
890
+ #: includes/Addons.class.php:100
891
+ msgctxt "Label for an addon that is already installed and activated."
892
+ msgid "Already Installed"
893
+ msgstr "Už bylo nainstalováno"
894
+
895
+ #: includes/Addons.class.php:101
896
+ msgctxt "Label for an addon that is not yet released."
897
+ msgid "Coming Soon"
898
+ msgstr "Již brzy k dispozici"
899
+
900
+ #: includes/Addons.class.php:102
901
+ msgctxt "Label for an addon that is free."
902
+ msgid "Free"
903
+ msgstr "Zdarma"
904
+
905
+ #: includes/Addons.class.php:103
906
+ msgctxt "Label for an addon that is released."
907
+ msgid "Get It"
908
+ msgstr "Stáhnout"
909
+
910
+ #: includes/Addons.class.php:117
911
+ msgctxt "Title of addons page"
912
+ msgid "Addons"
913
+ msgstr "Addons"
914
+
915
+ #: includes/Addons.class.php:118
916
+ msgctxt "Title of addons page in the admin menu"
917
+ msgid "Addons"
918
+ msgstr "Addons"
919
+
920
+ #: includes/AdminBookings.class.php:41
921
+ msgctxt "Title of admin page that lists bookings"
922
+ msgid "Bookings"
923
+ msgstr "Rezervace"
924
+
925
+ #: includes/AdminBookings.class.php:42
926
+ msgctxt "Title of bookings admin menu item"
927
+ msgid "Bookings"
928
+ msgstr "Rezervace"
929
+
930
+ #: includes/CustomPostTypes.class.php:80
931
+ msgctxt "Booking status when it is pending review"
932
+ msgid "Pending"
933
+ msgstr "Nevyřízené"
934
+
935
+ #: includes/CustomPostTypes.class.php:86
936
+ msgctxt "Booking status for a confirmed booking"
937
+ msgid "Confirmed"
938
+ msgstr "Potvrzené"
939
+
940
+ #: includes/CustomPostTypes.class.php:97
941
+ msgctxt "Booking status for a closed booking"
942
+ msgid "Closed"
943
+ msgstr "Uzavřené"
944
+
945
+ #: includes/Settings.class.php:83
946
+ msgctxt "restaurant-reservations"
947
+ msgid ""
948
+ "Thanks, your booking request is waiting to be confirmed. Updates will be sent to the "
949
+ "email address you provided."
950
+ msgstr ""
951
+ "Děkujeme, Vaše rezervace čeká na potvrzení. Aktuální stav Vám bude zaslán na Vaši "
952
+ "emailovou adresu."
953
+
954
+ #: includes/Settings.class.php:84
955
+ msgctxt ""
956
+ "Default date format for display. Must match formatting rules at http://amsul.ca/"
957
+ "pickadate.js/date.htm#formatting-rules"
958
+ msgid "mmmm d, yyyy"
959
+ msgstr "d mmmm, yyyy"
960
+
961
+ #: includes/Settings.class.php:85
962
+ msgctxt ""
963
+ "Default time format for display. Must match formatting rules at http://amsul.ca/"
964
+ "pickadate.js/time.htm#formats"
965
+ msgid "h:i A"
966
+ msgstr "H:i"
967
+
968
+ #: includes/Settings.class.php:86
969
+ msgctxt "Default interval in minutes when selecting a time."
970
+ msgid "30"
971
+ msgstr "30"
972
+
973
+ #: includes/Settings.class.php:96
974
+ msgctxt "Default email subject for admin notifications of new bookings"
975
+ msgid "New Booking Request"
976
+ msgstr "Nová rezervace"
977
+
978
+ #: includes/Settings.class.php:97
979
+ msgctxt ""
980
+ "Default email sent to the admin when a new booking request is made. The tags in "
981
+ "{brackets} will be replaced by the appropriate content and should be left in place. "
982
+ "HTML is allowed, but be aware that many email clients do not handle HTML very well."
983
+ msgid ""
984
+ "A new booking request has been made at {site_name}:\n"
985
+ "\n"
986
+ "{user_name}\n"
987
+ "{party} people\n"
988
+ "{date}\n"
989
+ "\n"
990
+ "{bookings_link}\n"
991
+ "{confirm_link}\n"
992
+ "{close_link}\n"
993
+ "\n"
994
+ "&nbsp;\n"
995
+ "\n"
996
+ "<em>This message was sent by {site_link} on {current_time}.</em>"
997
+ msgstr ""
998
+ "Nová rezervace byla vytvořena na {site_name}:\n"
999
+ "\n"
1000
+ "{user_name}\n"
1001
+ "{party} people\n"
1002
+ "{date}\n"
1003
+ "\n"
1004
+ "{bookings_link}\n"
1005
+ "{confirm_link}\n"
1006
+ "{close_link}\n"
1007
+ "\n"
1008
+ "&nbsp;\n"
1009
+ "\n"
1010