Restaurant Reservations - Version 1.1

Version Description

This update improves internationalization (i8n) by attempting to determine the appropriate language for the booking form datepicker from your WordPress settings. It also adds a setting to pick a language manually from a list of supported languages. This update also adds options to block late bookings at least 4 hours or 1 day in advance. Thanks to Remco and Roland for their early feedback.

Download this release

Release Info

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

Code changes from version 1.0.2 to 1.1

assets/js/booking-form.js CHANGED
@@ -28,8 +28,17 @@ jQuery(document).ready(function ($) {
28
  // Declare datepicker
29
  var $date_input = $( '#rtb-date' ).pickadate({
30
  format: rtb_pickadate.date_format,
 
 
31
  min: true,
32
  container: 'body',
 
 
 
 
 
 
 
33
  });
34
 
35
  // Declare timepicker
@@ -39,7 +48,7 @@ jQuery(document).ready(function ($) {
39
 
40
  var datepicker = $date_input.pickadate( 'picker' );
41
  var timepicker = $time_input.pickatime( 'picker' );
42
-
43
  if ( typeof datepicker == 'undefined' ) {
44
  return;
45
  }
@@ -48,6 +57,10 @@ jQuery(document).ready(function ($) {
48
  if ( rtb_pickadate.disable_dates.length ) {
49
  datepicker.set( 'disable', rtb_pickadate.disable_dates );
50
  }
 
 
 
 
51
 
52
  // Update timepicker on pageload and whenever the datepicker is closed
53
  rtb_update_timepicker_range();
@@ -65,7 +78,12 @@ jQuery(document).ready(function ($) {
65
  timepicker.set( 'enable', false );
66
  timepicker.set( 'disable', false );
67
 
68
- var selected_date = new Date( datepicker.get() );
 
 
 
 
 
69
  var selected_date_year = selected_date.getFullYear();
70
  var selected_date_month = selected_date.getMonth();
71
  var selected_date_date = selected_date.getDate();
28
  // Declare datepicker
29
  var $date_input = $( '#rtb-date' ).pickadate({
30
  format: rtb_pickadate.date_format,
31
+ formatSubmit: 'yyyy/mm/dd',
32
+ hiddenName: true,
33
  min: true,
34
  container: 'body',
35
+ // this prevents translations from overwriting the start of the
36
+ // week. ideally, in the future, support for this can be added, but
37
+ // at the moment I can't figure out how to check the datepicker's
38
+ // firstDay setting and update my disabled dates values
39
+ // accordingly.
40
+ // @todo support start of the week based on language file
41
+ firstDay: 0,
42
  });
43
 
44
  // Declare timepicker
48
 
49
  var datepicker = $date_input.pickadate( 'picker' );
50
  var timepicker = $time_input.pickatime( 'picker' );
51
+
52
  if ( typeof datepicker == 'undefined' ) {
53
  return;
54
  }
57
  if ( rtb_pickadate.disable_dates.length ) {
58
  datepicker.set( 'disable', rtb_pickadate.disable_dates );
59
  }
60
+
61
+ if ( rtb_pickadate.late_bookings === '1440' ) {
62
+ datepicker.set( 'min', 1 );
63
+ }
64
 
65
  // Update timepicker on pageload and whenever the datepicker is closed
66
  rtb_update_timepicker_range();
78
  timepicker.set( 'enable', false );
79
  timepicker.set( 'disable', false );
80
 
81
+ if ( datepicker.get() === '' ) {
82
+ timepicker.set( 'disable', true );
83
+ return;
84
+ }
85
+
86
+ selected_date = new Date( datepicker.get( 'select', 'yyyy/mm/dd' ) );
87
  var selected_date_year = selected_date.getFullYear();
88
  var selected_date_month = selected_date.getMonth();
89
  var selected_date_date = selected_date.getDate();
includes/Booking.class.php CHANGED
@@ -219,10 +219,17 @@ class rtbBooking {
219
  } else {
220
  $late_bookings_seconds = $late_bookings * 60; // Late bookings allowance in seconds
221
  if ( $request->format( 'U' ) < ( current_time( 'timestamp' ) + $late_bookings_seconds ) ) {
 
 
 
 
 
 
 
222
  $this->validation_errors[] = array(
223
  'field' => 'time',
224
  'error_msg' => 'Booking request made too close to the reserved time',
225
- 'message' => sprintf( __( 'Sorry, bookings must be made more than %s minutes in advance.', RTB_TEXTDOMAIN ), $late_bookings ),
226
  );
227
  }
228
  }
219
  } else {
220
  $late_bookings_seconds = $late_bookings * 60; // Late bookings allowance in seconds
221
  if ( $request->format( 'U' ) < ( current_time( 'timestamp' ) + $late_bookings_seconds ) ) {
222
+ if ( $late_bookings >= 1440 ) {
223
+ $late_bookings_message = sprintf( __( 'Sorry, bookings must be made more than %s days in advance.', RTB_TEXTDOMAIN ), $late_bookings / 1440 );
224
+ } elseif ( $late_bookings >= 60 ) {
225
+ $late_bookings_message = sprintf( __( 'Sorry, bookings must be made more than %s hours in advance.', RTB_TEXTDOMAIN ), $late_bookings / 60 );
226
+ } else {
227
+ $late_bookings_message = sprintf( __( 'Sorry, bookings must be made more than %s mings in advance.', RTB_TEXTDOMAIN ), $late_bookings );
228
+ }
229
  $this->validation_errors[] = array(
230
  'field' => 'time',
231
  'error_msg' => 'Booking request made too close to the reserved time',
232
+ 'message' => $late_bookings_message,
233
  );
234
  }
235
  }
includes/Settings.class.php CHANGED
@@ -20,6 +20,49 @@ class rtbSettings {
20
  * @since 0.0.1
21
  */
22
  public $settings = array();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
23
 
24
  public function __construct() {
25
 
@@ -122,6 +165,11 @@ Sorry, we could not accomodate your booking request. We\'re full or not open at
122
  RTB_TEXTDOMAIN
123
  ),
124
  );
 
 
 
 
 
125
 
126
  $this->defaults = apply_filters( 'rtb_defaults', $this->defaults );
127
  }
@@ -171,14 +219,14 @@ Sorry, we could not accomodate your booking request. We\'re full or not open at
171
  'parent_menu' => 'rtb-bookings',
172
  'description' => '',
173
  'capability' => 'manage_options',
174
- 'default_tab' => 'general',
175
  )
176
  );
177
 
178
  $sap->add_section(
179
  'rtb-settings',
180
  array(
181
- 'id' => 'general',
182
  'title' => __( 'General', RTB_TEXTDOMAIN ),
183
  'is_tab' => true,
184
  )
@@ -186,7 +234,7 @@ Sorry, we could not accomodate your booking request. We\'re full or not open at
186
 
187
  $sap->add_setting(
188
  'rtb-settings',
189
- 'general',
190
  'post',
191
  array(
192
  'id' => 'booking-page',
@@ -203,7 +251,7 @@ Sorry, we could not accomodate your booking request. We\'re full or not open at
203
 
204
  $sap->add_setting(
205
  'rtb-settings',
206
- 'general',
207
  'textarea',
208
  array(
209
  'id' => 'success-message',
@@ -215,7 +263,7 @@ Sorry, we could not accomodate your booking request. We\'re full or not open at
215
 
216
  $sap->add_setting(
217
  'rtb-settings',
218
- 'general',
219
  'text',
220
  array(
221
  'id' => 'date-format',
@@ -227,7 +275,7 @@ Sorry, we could not accomodate your booking request. We\'re full or not open at
227
 
228
  $sap->add_setting(
229
  'rtb-settings',
230
- 'general',
231
  'text',
232
  array(
233
  'id' => 'time-format',
@@ -237,10 +285,25 @@ Sorry, we could not accomodate your booking request. We\'re full or not open at
237
  )
238
  );
239
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
240
  $sap->add_section(
241
  'rtb-settings',
242
  array(
243
- 'id' => 'schedule',
244
  'title' => __( 'Booking Schedule', RTB_TEXTDOMAIN ),
245
  'is_tab' => true,
246
  )
@@ -248,7 +311,7 @@ Sorry, we could not accomodate your booking request. We\'re full or not open at
248
 
249
  $sap->add_setting(
250
  'rtb-settings',
251
- 'schedule',
252
  'scheduler',
253
  array(
254
  'id' => 'schedule-open',
@@ -272,7 +335,7 @@ Sorry, we could not accomodate your booking request. We\'re full or not open at
272
 
273
  $sap->add_setting(
274
  'rtb-settings',
275
- 'schedule',
276
  'scheduler',
277
  array(
278
  'id' => 'schedule-closed',
@@ -290,7 +353,7 @@ Sorry, we could not accomodate your booking request. We\'re full or not open at
290
 
291
  $sap->add_setting(
292
  'rtb-settings',
293
- 'schedule',
294
  'select',
295
  array(
296
  'id' => 'early-bookings',
@@ -310,7 +373,7 @@ Sorry, we could not accomodate your booking request. We\'re full or not open at
310
 
311
  $sap->add_setting(
312
  'rtb-settings',
313
- 'schedule',
314
  'select',
315
  array(
316
  'id' => 'late-bookings',
@@ -319,10 +382,12 @@ Sorry, we could not accomodate your booking request. We\'re full or not open at
319
  'blank_option' => false,
320
  'options' => array(
321
  '' => __( 'Up to the last minute', RTB_TEXTDOMAIN ),
322
- '15' => __( 'Up to 15 minutes in advance', RTB_TEXTDOMAIN ),
323
- '30' => __( 'Up to 30 minutes in advance', RTB_TEXTDOMAIN ),
324
- '45' => __( 'Up to 45 minutes in advance', RTB_TEXTDOMAIN ),
325
- '60' => __( 'Up to 1 hour in advance', RTB_TEXTDOMAIN ),
 
 
326
  )
327
  )
328
  );
@@ -330,7 +395,7 @@ Sorry, we could not accomodate your booking request. We\'re full or not open at
330
  $sap->add_section(
331
  'rtb-settings',
332
  array(
333
- 'id' => 'notifications',
334
  'title' => __( 'Notifications', RTB_TEXTDOMAIN ),
335
  'is_tab' => true,
336
  )
@@ -338,7 +403,7 @@ Sorry, we could not accomodate your booking request. We\'re full or not open at
338
 
339
  $sap->add_setting(
340
  'rtb-settings',
341
- 'notifications',
342
  'text',
343
  array(
344
  'id' => 'reply-to-name',
@@ -350,7 +415,7 @@ Sorry, we could not accomodate your booking request. We\'re full or not open at
350
 
351
  $sap->add_setting(
352
  'rtb-settings',
353
- 'notifications',
354
  'text',
355
  array(
356
  'id' => 'reply-to-address',
@@ -362,7 +427,7 @@ Sorry, we could not accomodate your booking request. We\'re full or not open at
362
 
363
  $sap->add_setting(
364
  'rtb-settings',
365
- 'notifications',
366
  'toggle',
367
  array(
368
  'id' => 'admin-email-option',
@@ -373,7 +438,7 @@ Sorry, we could not accomodate your booking request. We\'re full or not open at
373
 
374
  $sap->add_setting(
375
  'rtb-settings',
376
- 'notifications',
377
  'text',
378
  array(
379
  'id' => 'admin-email-address',
@@ -386,9 +451,9 @@ Sorry, we could not accomodate your booking request. We\'re full or not open at
386
  $sap->add_section(
387
  'rtb-settings',
388
  array(
389
- 'id' => 'notifications-templates',
390
  'title' => __( 'Email Templates', RTB_TEXTDOMAIN ),
391
- 'tab' => 'notifications',
392
  'description' => 'Adjust the messages that are emailed to users and admins during the booking process.',
393
  )
394
  );
@@ -397,7 +462,7 @@ Sorry, we could not accomodate your booking request. We\'re full or not open at
397
  // can easily add/edit without conflicting with each other.
398
  $sap->add_setting(
399
  'rtb-settings',
400
- 'notifications-templates',
401
  'html',
402
  array(
403
  'id' => 'template-tags-description',
@@ -436,7 +501,7 @@ Sorry, we could not accomodate your booking request. We\'re full or not open at
436
 
437
  $sap->add_setting(
438
  'rtb-settings',
439
- 'notifications-templates',
440
  'text',
441
  array(
442
  'id' => 'subject-booking-admin',
@@ -448,7 +513,7 @@ Sorry, we could not accomodate your booking request. We\'re full or not open at
448
 
449
  $sap->add_setting(
450
  'rtb-settings',
451
- 'notifications-templates',
452
  'editor',
453
  array(
454
  'id' => 'template-booking-admin',
@@ -460,7 +525,7 @@ Sorry, we could not accomodate your booking request. We\'re full or not open at
460
 
461
  $sap->add_setting(
462
  'rtb-settings',
463
- 'notifications-templates',
464
  'text',
465
  array(
466
  'id' => 'subject-booking-user',
@@ -472,7 +537,7 @@ Sorry, we could not accomodate your booking request. We\'re full or not open at
472
 
473
  $sap->add_setting(
474
  'rtb-settings',
475
- 'notifications-templates',
476
  'editor',
477
  array(
478
  'id' => 'template-booking-user',
@@ -484,7 +549,7 @@ Sorry, we could not accomodate your booking request. We\'re full or not open at
484
 
485
  $sap->add_setting(
486
  'rtb-settings',
487
- 'notifications-templates',
488
  'text',
489
  array(
490
  'id' => 'subject-confirmed-user',
@@ -496,7 +561,7 @@ Sorry, we could not accomodate your booking request. We\'re full or not open at
496
 
497
  $sap->add_setting(
498
  'rtb-settings',
499
- 'notifications-templates',
500
  'editor',
501
  array(
502
  'id' => 'template-confirmed-user',
@@ -508,7 +573,7 @@ Sorry, we could not accomodate your booking request. We\'re full or not open at
508
 
509
  $sap->add_setting(
510
  'rtb-settings',
511
- 'notifications-templates',
512
  'text',
513
  array(
514
  'id' => 'subject-rejected-user',
@@ -520,7 +585,7 @@ Sorry, we could not accomodate your booking request. We\'re full or not open at
520
 
521
  $sap->add_setting(
522
  'rtb-settings',
523
- 'notifications-templates',
524
  'editor',
525
  array(
526
  'id' => 'template-rejected-user',
20
  * @since 0.0.1
21
  */
22
  public $settings = array();
23
+
24
+ /**
25
+ *
26
+ */
27
+ public $supported_i8n = array(
28
+ 'ar' => 'ar',
29
+ 'bg_BG' => 'bg_BG',
30
+ 'bs_BA' => 'bs_BA',
31
+ 'ca_ES' => 'ca_ES',
32
+ 'cs_CZ' => 'cs_CZ',
33
+ 'da_DK' => 'da_DK',
34
+ 'de_DE' => 'de_DE',
35
+ 'el_GR' => 'el_GR',
36
+ 'es_ES' => 'es_ES',
37
+ 'et_EE' => 'et_EE',
38
+ 'eu_ES' => 'eu_ES',
39
+ 'fi_FI' => 'fi_FI',
40
+ 'fr_FR' => 'fr_FR',
41
+ 'gl_ES' => 'gl_ES',
42
+ 'he_IL' => 'he_IL',
43
+ 'hr_HR' => 'hr_HR',
44
+ 'hu_HU' => 'hu_HU',
45
+ 'id_ID' => 'id_ID',
46
+ 'is_IS' => 'is_IS',
47
+ 'it_IT' => 'it_IT',
48
+ 'ja_JP' => 'ja_JP',
49
+ 'ko_KR' => 'ko_KR',
50
+ 'nl_NL' => 'nl_NL',
51
+ 'no_NO' => 'no_NO',
52
+ 'pl_PL' => 'pl_PL',
53
+ 'pt_BR' => 'pt_BR',
54
+ 'pt_PT' => 'pt_PT',
55
+ 'ro_RO' => 'ro_RO',
56
+ 'ru_RU' => 'ru_RU',
57
+ 'sk_SK' => 'sk_SK',
58
+ 'sl_SI' => 'sl_SI',
59
+ 'sv_SE' => 'sv_SE',
60
+ 'th_TH' => 'th_TH',
61
+ 'tr_TR' => 'tr_TR',
62
+ 'uk_UA' => 'uk_UA',
63
+ 'zh_CN' => 'zh_CN',
64
+ 'zh_TW' => 'zh_TW',
65
+ );
66
 
67
  public function __construct() {
68
 
165
  RTB_TEXTDOMAIN
166
  ),
167
  );
168
+
169
+ $i8n = get_bloginfo( 'language' );
170
+ if ( array_key_exists( $i8n, $this->supported_i8n ) ) {
171
+ $this->defaults['i8n'] = $i8n;
172
+ }
173
 
174
  $this->defaults = apply_filters( 'rtb_defaults', $this->defaults );
175
  }
219
  'parent_menu' => 'rtb-bookings',
220
  'description' => '',
221
  'capability' => 'manage_options',
222
+ 'default_tab' => 'rtb-general',
223
  )
224
  );
225
 
226
  $sap->add_section(
227
  'rtb-settings',
228
  array(
229
+ 'id' => 'rtb-general',
230
  'title' => __( 'General', RTB_TEXTDOMAIN ),
231
  'is_tab' => true,
232
  )
234
 
235
  $sap->add_setting(
236
  'rtb-settings',
237
+ 'rtb-general',
238
  'post',
239
  array(
240
  'id' => 'booking-page',
251
 
252
  $sap->add_setting(
253
  'rtb-settings',
254
+ 'rtb-general',
255
  'textarea',
256
  array(
257
  'id' => 'success-message',
263
 
264
  $sap->add_setting(
265
  'rtb-settings',
266
+ 'rtb-general',
267
  'text',
268
  array(
269
  'id' => 'date-format',
275
 
276
  $sap->add_setting(
277
  'rtb-settings',
278
+ 'rtb-general',
279
  'text',
280
  array(
281
  'id' => 'time-format',
285
  )
286
  );
287
 
288
+ // Add i8n setting for pickadate if the frontend assets are to be loaded
289
+ if ( RTB_LOAD_FRONTEND_ASSETS ) {
290
+ $sap->add_setting(
291
+ 'rtb-settings',
292
+ 'rtb-general',
293
+ 'select',
294
+ array(
295
+ 'id' => 'i8n',
296
+ 'title' => __( 'Language', RTB_TEXTDOMAIN ),
297
+ 'description' => __( 'Select a language to use for the booking form datepicker if it is different than your WordPress language setting.', RTB_TEXTDOMAIN ),
298
+ 'options' => $this->supported_i8n,
299
+ )
300
+ );
301
+ }
302
+
303
  $sap->add_section(
304
  'rtb-settings',
305
  array(
306
+ 'id' => 'rtb-schedule',
307
  'title' => __( 'Booking Schedule', RTB_TEXTDOMAIN ),
308
  'is_tab' => true,
309
  )
311
 
312
  $sap->add_setting(
313
  'rtb-settings',
314
+ 'rtb-schedule',
315
  'scheduler',
316
  array(
317
  'id' => 'schedule-open',
335
 
336
  $sap->add_setting(
337
  'rtb-settings',
338
+ 'rtb-schedule',
339
  'scheduler',
340
  array(
341
  'id' => 'schedule-closed',
353
 
354
  $sap->add_setting(
355
  'rtb-settings',
356
+ 'rtb-schedule',
357
  'select',
358
  array(
359
  'id' => 'early-bookings',
373
 
374
  $sap->add_setting(
375
  'rtb-settings',
376
+ 'rtb-schedule',
377
  'select',
378
  array(
379
  'id' => 'late-bookings',
382
  'blank_option' => false,
383
  'options' => array(
384
  '' => __( 'Up to the last minute', RTB_TEXTDOMAIN ),
385
+ '15' => __( 'At least 15 minutes in advance', RTB_TEXTDOMAIN ),
386
+ '30' => __( 'At least 30 minutes in advance', RTB_TEXTDOMAIN ),
387
+ '45' => __( 'At least 45 minutes in advance', RTB_TEXTDOMAIN ),
388
+ '60' => __( 'At least 1 hour in advance', RTB_TEXTDOMAIN ),
389
+ '240' => __( 'At least 4 hours in advance', RTB_TEXTDOMAIN ),
390
+ '1440' => __( 'At least 1 day in advance', RTB_TEXTDOMAIN ),
391
  )
392
  )
393
  );
395
  $sap->add_section(
396
  'rtb-settings',
397
  array(
398
+ 'id' => 'rtb-notifications',
399
  'title' => __( 'Notifications', RTB_TEXTDOMAIN ),
400
  'is_tab' => true,
401
  )
403
 
404
  $sap->add_setting(
405
  'rtb-settings',
406
+ 'rtb-notifications',
407
  'text',
408
  array(
409
  'id' => 'reply-to-name',
415
 
416
  $sap->add_setting(
417
  'rtb-settings',
418
+ 'rtb-notifications',
419
  'text',
420
  array(
421
  'id' => 'reply-to-address',
427
 
428
  $sap->add_setting(
429
  'rtb-settings',
430
+ 'rtb-notifications',
431
  'toggle',
432
  array(
433
  'id' => 'admin-email-option',
438
 
439
  $sap->add_setting(
440
  'rtb-settings',
441
+ 'rtb-notifications',
442
  'text',
443
  array(
444
  'id' => 'admin-email-address',
451
  $sap->add_section(
452
  'rtb-settings',
453
  array(
454
+ 'id' => 'rtb-notifications-templates',
455
  'title' => __( 'Email Templates', RTB_TEXTDOMAIN ),
456
+ 'tab' => 'rtb-notifications',
457
  'description' => 'Adjust the messages that are emailed to users and admins during the booking process.',
458
  )
459
  );
462
  // can easily add/edit without conflicting with each other.
463
  $sap->add_setting(
464
  'rtb-settings',
465
+ 'rtb-notifications-templates',
466
  'html',
467
  array(
468
  'id' => 'template-tags-description',
501
 
502
  $sap->add_setting(
503
  'rtb-settings',
504
+ 'rtb-notifications-templates',
505
  'text',
506
  array(
507
  'id' => 'subject-booking-admin',
513
 
514
  $sap->add_setting(
515
  'rtb-settings',
516
+ 'rtb-notifications-templates',
517
  'editor',
518
  array(
519
  'id' => 'template-booking-admin',
525
 
526
  $sap->add_setting(
527
  'rtb-settings',
528
+ 'rtb-notifications-templates',
529
  'text',
530
  array(
531
  'id' => 'subject-booking-user',
537
 
538
  $sap->add_setting(
539
  'rtb-settings',
540
+ 'rtb-notifications-templates',
541
  'editor',
542
  array(
543
  'id' => 'template-booking-user',
549
 
550
  $sap->add_setting(
551
  'rtb-settings',
552
+ 'rtb-notifications-templates',
553
  'text',
554
  array(
555
  'id' => 'subject-confirmed-user',
561
 
562
  $sap->add_setting(
563
  'rtb-settings',
564
+ 'rtb-notifications-templates',
565
  'editor',
566
  array(
567
  'id' => 'template-confirmed-user',
573
 
574
  $sap->add_setting(
575
  'rtb-settings',
576
+ 'rtb-notifications-templates',
577
  'text',
578
  array(
579
  'id' => 'subject-rejected-user',
585
 
586
  $sap->add_setting(
587
  'rtb-settings',
588
+ 'rtb-notifications-templates',
589
  'editor',
590
  array(
591
  'id' => 'template-rejected-user',
includes/template-functions.php CHANGED
@@ -167,15 +167,15 @@ function rtb_enqueue_assets() {
167
 
168
  wp_enqueue_style( 'rtb-booking-form' );
169
 
170
- wp_enqueue_style( 'pickadate-default', RTB_PLUGIN_URL . '/lib/simple-admin-pages/lib/pickadate/themes/default.css' );
171
- wp_enqueue_style( 'pickadate-date', RTB_PLUGIN_URL . '/lib/simple-admin-pages/lib/pickadate/themes/default.date.css' );
172
- wp_enqueue_style( 'pickadate-time', RTB_PLUGIN_URL . '/lib/simple-admin-pages/lib/pickadate/themes/default.time.css' );
173
- wp_enqueue_script( 'pickadate', RTB_PLUGIN_URL . '/lib/simple-admin-pages/lib/pickadate/picker.js', array( 'jquery' ), '', true );
174
- wp_enqueue_script( 'pickadate-date', RTB_PLUGIN_URL . '/lib/simple-admin-pages/lib/pickadate/picker.date.js', array( 'jquery' ), '', true );
175
- wp_enqueue_script( 'pickadate-time', RTB_PLUGIN_URL . '/lib/simple-admin-pages/lib/pickadate/picker.time.js', array( 'jquery' ), '', true );
176
- wp_enqueue_script( 'pickadate-legacy', RTB_PLUGIN_URL . '/lib/simple-admin-pages/lib/pickadate/legacy.js', array( 'jquery' ), '', true );
177
- // @todo is there some way I can enqueue this for RTL languages
178
- // wp_enqueue_style( 'pickadate-rtl', RTB_PLUGIN_URL . '/lib/simple-admin-pages/lib/pickadate/themes/rtl.css' );
179
 
180
  wp_enqueue_script( 'rtb-booking-form' );
181
 
167
 
168
  wp_enqueue_style( 'rtb-booking-form' );
169
 
170
+ wp_enqueue_style( 'pickadate-default' );
171
+ wp_enqueue_style( 'pickadate-date' );
172
+ wp_enqueue_style( 'pickadate-time' );
173
+ wp_enqueue_script( 'pickadate' );
174
+ wp_enqueue_script( 'pickadate-date' );
175
+ wp_enqueue_script( 'pickadate-time' );
176
+ wp_enqueue_script( 'pickadate-legacy' );
177
+ wp_enqueue_script( 'pickadate-i8n' ); // only registered if needed
178
+ wp_enqueue_style( 'pickadate-rtl' ); // only registered if needed
179
 
180
  wp_enqueue_script( 'rtb-booking-form' );
181
 
lib/simple-admin-pages/lib/pickadate/translations/ar.js CHANGED
@@ -1 +1 @@
1
- $.extend($.fn.pickadate.defaults,{monthsFull:["يناير","فبراير","مارس","ابريل","مايو","يونيو","يوليو","اغسطس","سبتمبر","اكتوبر","نوفمبر","ديسمبر"],monthsShort:["يناير","فبراير","مارس","ابريل","مايو","يونيو","يوليو","اغسطس","سبتمبر","اكتوبر","نوفمبر","ديسمبر"],weekdaysFull:["الاحد","الاثنين","الثلاثاء","الاربعاء","الخميس","الجمعة","السبت"],weekdaysShort:["الاحد","الاثنين","الثلاثاء","الاربعاء","الخميس","الجمعة","السبت"],today:"اليوم",clear:"مسح",format:"yyyy mmmm dd",formatSubmit:"yyyy/mm/dd"});
1
+ jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:["يناير","فبراير","مارس","ابريل","مايو","يونيو","يوليو","اغسطس","سبتمبر","اكتوبر","نوفمبر","ديسمبر"],monthsShort:["يناير","فبراير","مارس","ابريل","مايو","يونيو","يوليو","اغسطس","سبتمبر","اكتوبر","نوفمبر","ديسمبر"],weekdaysFull:["الاحد","الاثنين","الثلاثاء","الاربعاء","الخميس","الجمعة","السبت"],weekdaysShort:["الاحد","الاثنين","الثلاثاء","الاربعاء","الخميس","الجمعة","السبت"],today:"اليوم",clear:"مسح",format:"yyyy mmmm dd",formatSubmit:"yyyy/mm/dd"});
readme.txt CHANGED
@@ -3,9 +3,9 @@ Contributors: NateWr
3
  Author URI: https://github.com/NateWr
4
  Plugin URL: http://themeofthecrop.com
5
  Requires at Least: 3.8
6
- Tested Up To: 3.9
7
  Tags: restaurant, reservations, bookings, table bookings, restaurant reservation, table reservation
8
- Stable tag: 1.0.2
9
  License: GPLv2 or later
10
  Donate link: http://themeofthecrop.com
11
 
@@ -23,11 +23,13 @@ Accept restaurant reservations and table bookings online. Quickly confirm or rej
23
  * Add your booking form to any page, post or widget area
24
  * Customize all notification messages, and date and time formats
25
 
26
- This plugin is under active development. More features will be added to this plugin and addons will be created which extend the functionality or integrate with third-party services. Follow future developments at [Theme of the Crop](http://themeofthecrop.com/?utm_source=Plugin&utm_medium=Plugin%20Description&utm_campaign=Restaurant%20Reservations) or read the Upgrade Notices when you see updates for this plugin in your WordPress admin panel.
 
 
27
 
28
  = How to use =
29
 
30
- There is a short guide to using the plugin in the /docs/ folder. It can be accessed by following the Help link listed under the plugin on the Plugins page in your WordPress admin area. Not sure where that is? One of the screenshots for this plugin will show you where to find it.
31
 
32
  = Developers =
33
 
@@ -54,6 +56,12 @@ This plugin is packed with hooks so you can extend it, customize it and rebrand
54
 
55
  == Changelog ==
56
 
 
 
 
 
 
 
57
  = 1.0.2 (2014-05-08) =
58
  * Remove development tool from codebase
59
 
@@ -65,5 +73,8 @@ This plugin is packed with hooks so you can extend it, customize it and rebrand
65
 
66
  == Upgrade Notice ==
67
 
 
 
 
68
  = 1.0.2 =
69
  This update removes a bit of code that was used for development purposes. Please update as this code could be run by any user on the frontend.
3
  Author URI: https://github.com/NateWr
4
  Plugin URL: http://themeofthecrop.com
5
  Requires at Least: 3.8
6
+ Tested Up To: 3.9.1
7
  Tags: restaurant, reservations, bookings, table bookings, restaurant reservation, table reservation
8
+ Stable tag: 1.1
9
  License: GPLv2 or later
10
  Donate link: http://themeofthecrop.com
11
 
23
  * Add your booking form to any page, post or widget area
24
  * Customize all notification messages, and date and time formats
25
 
26
+ More features will be added to this plugin and addons will be created which extend the functionality or integrate with third-party services. Follow future developments at [Theme of the Crop](http://themeofthecrop.com/?utm_source=Plugin&utm_medium=Plugin%20Description&utm_campaign=Restaurant%20Reservations) or read the Upgrade Notices when you see updates for this plugin in your WordPress admin panel.
27
+
28
+ This plugin is part of a group of plugins in development for restaurants. Check out the [Food and Drink Menu](http://wordpress.org/plugins/food-and-drink-menu/) plugin as well.
29
 
30
  = How to use =
31
 
32
+ There is a short guide to using the plugin in the /docs/ folder. It can be accessed by following the Help link listed under the plugin on the Plugins page in your WordPress admin area. Not sure where that is? One of the [screenshots](http://wordpress.org/plugins/restaurant-reservations/screenshots/) for this plugin will show you where to find it.
33
 
34
  = Developers =
35
 
56
 
57
  == Changelog ==
58
 
59
+ = 1.1 (2014-05-12) =
60
+ * Attempt to load the correct language for the datepicker from the WordPress settings
61
+ * Add support for choosing a language for the datepicker if different from WordPress settings
62
+ * Allow late bookings to be blocked 4 hours and 1 day in advance
63
+ * Fix: don't show settings under WordPress's core General settings page
64
+
65
  = 1.0.2 (2014-05-08) =
66
  * Remove development tool from codebase
67
 
73
 
74
  == Upgrade Notice ==
75
 
76
+ = 1.1 =
77
+ This update improves internationalization (i8n) by attempting to determine the appropriate language for the booking form datepicker from your WordPress settings. It also adds a setting to pick a language manually from a list of supported languages. This update also adds options to block late bookings at least 4 hours or 1 day in advance. Thanks to Remco and Roland for their early feedback.
78
+
79
  = 1.0.2 =
80
  This update removes a bit of code that was used for development purposes. Please update as this code could be run by any user on the frontend.
restaurant-reservations.php CHANGED
@@ -3,13 +3,13 @@
3
  * Plugin Name: Restaurant Reservations
4
  * Plugin URI: http://themeofthecrop.com
5
  * Description: Accept restaurant reservations and bookings online.
6
- * Version: 1.0.2
7
  * Author: Theme of the Crop
8
  * Author URI: http://themeofthecrop.com
9
  * License: GNU General Public License v2.0 or later
10
  * License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
  * Requires at least: 3.8
12
- * Tested up to: 3.9
13
  *
14
  * Text Domain: rtbdomain
15
  * Domain Path: /languages/
@@ -237,6 +237,24 @@ class rtbInit {
237
  return;
238
  }
239
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
240
  wp_register_style( 'rtb-booking-form', RTB_PLUGIN_URL . '/assets/css/booking-form.css' );
241
  wp_register_script( 'rtb-booking-form', RTB_PLUGIN_URL . '/assets/js/booking-form.js', array( 'jquery' ) );
242
  }
3
  * Plugin Name: Restaurant Reservations
4
  * Plugin URI: http://themeofthecrop.com
5
  * Description: Accept restaurant reservations and bookings online.
6
+ * Version: 1.1
7
  * Author: Theme of the Crop
8
  * Author URI: http://themeofthecrop.com
9
  * License: GNU General Public License v2.0 or later
10
  * License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
  * Requires at least: 3.8
12
+ * Tested up to: 3.9.1
13
  *
14
  * Text Domain: rtbdomain
15
  * Domain Path: /languages/
237
  return;
238
  }
239
 
240
+ wp_register_style( 'pickadate-default', RTB_PLUGIN_URL . '/lib/simple-admin-pages/lib/pickadate/themes/default.css' );
241
+ wp_register_style( 'pickadate-date', RTB_PLUGIN_URL . '/lib/simple-admin-pages/lib/pickadate/themes/default.date.css' );
242
+ wp_register_style( 'pickadate-time', RTB_PLUGIN_URL . '/lib/simple-admin-pages/lib/pickadate/themes/default.time.css' );
243
+ wp_register_script( 'pickadate', RTB_PLUGIN_URL . '/lib/simple-admin-pages/lib/pickadate/picker.js', array( 'jquery' ), '', true );
244
+ wp_register_script( 'pickadate-date', RTB_PLUGIN_URL . '/lib/simple-admin-pages/lib/pickadate/picker.date.js', array( 'jquery' ), '', true );
245
+ wp_register_script( 'pickadate-time', RTB_PLUGIN_URL . '/lib/simple-admin-pages/lib/pickadate/picker.time.js', array( 'jquery' ), '', true );
246
+ wp_register_script( 'pickadate-legacy', RTB_PLUGIN_URL . '/lib/simple-admin-pages/lib/pickadate/legacy.js', array( 'jquery' ), '', true );
247
+
248
+ $i8n = $this->settings->get_setting( 'i8n' );
249
+ if ( !empty( $i8n ) ) {
250
+ wp_register_script( 'pickadate-i8n', RTB_PLUGIN_URL . '/lib/simple-admin-pages/lib/pickadate/translations/' . esc_attr( $i8n ) . '.js', array( 'jquery' ), '', true );
251
+
252
+ // Arabic and Hebrew are right-to-left languages
253
+ if ( $i8n == 'ar' || $i8n == 'he_IL' ) {
254
+ wp_register_style( 'pickadate-rtl', RTB_PLUGIN_URL . '/lib/simple-admin-pages/lib/pickadate/themes/rtl.css' );
255
+ }
256
+ }
257
+
258
  wp_register_style( 'rtb-booking-form', RTB_PLUGIN_URL . '/assets/css/booking-form.css' );
259
  wp_register_script( 'rtb-booking-form', RTB_PLUGIN_URL . '/assets/js/booking-form.js', array( 'jquery' ) );
260
  }