Restaurant Reservations - Version 1.4.1

Version Description

This update is a maintenance release that fixes a couple minor issues, adds French and Italian translations, and includes some under-the-hood changes to support upcoming extensions.

Download this release

Release Info

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

Code changes from version 1.4 to 1.4.1

assets/css/admin.css CHANGED
@@ -436,3 +436,18 @@
436
margin: 0;
437
}
438
}
436
margin: 0;
437
}
438
}
439
+
440
+ /* License page */
441
+ .rtb-license-setting .status {
442
+ display: inline-block;
443
+ padding: 4px;
444
+ color: #fff;
445
+ }
446
+
447
+ .rtb-license-setting .status.valid {
448
+ background: #069106;
449
+ }
450
+
451
+ .rtb-license-setting .status.inactive {
452
+ background: #BE0A0A;
453
+ }
assets/js/admin.js CHANGED
@@ -167,7 +167,7 @@ jQuery(document).ready(function ($) {
167
* Reset booking form fields
168
*/
169
function rtb_reset_booking_form_modal_fields() {
170
- rtb_booking_modal_fields.find( 'input, select, textarea' ).val( '' );
171
rtb_booking_modal_fields.find( 'input[name=rtb-notifications]' ).removeAttr( 'checked' );
172
}
173
167
* Reset booking form fields
168
*/
169
function rtb_reset_booking_form_modal_fields() {
170
+ rtb_booking_modal_fields.find( 'input,select, textarea' ).not( 'input[type="checkbox"],input[type="radio"]' ).val( '' );
171
rtb_booking_modal_fields.find( 'input[name=rtb-notifications]' ).removeAttr( 'checked' );
172
}
173
includes/AdminBookings.class.php CHANGED
@@ -154,7 +154,7 @@ class rtbAdminBookings {
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' ); ?>
@@ -368,7 +368,21 @@ class rtbAdminBookings {
368
369
// Set up $_POST object for validation
370
foreach( $_POST['booking'] as $field ) {
371
- $_POST[ $field['name'] ] = $field['value'];
372
}
373
374
require_once( RTB_PLUGIN_DIR . '/includes/Booking.class.php' );
154
</fieldset>
155
156
<button type="submit" class="button-primary">
157
+ <?php _e( 'Send Email', 'restaurant-reservations' ); ?>
158
</button>
159
<a href="#" class="button" id="rtb-cancel-email-modal">
160
<?php _e( 'Cancel', 'restaurant-reservations' ); ?>
368
369
// Set up $_POST object for validation
370
foreach( $_POST['booking'] as $field ) {
371
+
372
+ // $field is setup by jQuery's serializeArray(), which will preserve
373
+ // array indicators in field names. So name[] is passed as "name[]"
374
+ // instead of "name". Let's strip out any trailing brackets to match
375
+ // the normal behaviour when receiving $_POST data on the server.
376
+ if ( substr( $field['name'], -2 ) === '[]' ) {
377
+ $name = substr( $field['name'], 0, -2 );
378
+ if ( !isset( $_POST[ $name ] ) ) {
379
+ $_POST[ $name ] = array();
380
+ }
381
+ $_POST[ $name ][] = $field['value'];
382
+ } else {
383
+ $_POST[ $field['name'] ] = $field['value'];
384
+ }
385
+
386
}
387
388
require_once( RTB_PLUGIN_DIR . '/includes/Booking.class.php' );
includes/AdminPageSettingLicenseKey.class.php ADDED
@@ -0,0 +1,422 @@
1
+ <?php
2
+ if ( !defined( 'ABSPATH' ) ) exit;
3
+
4
+ if ( !class_exists( 'rtbAdminPageSettingLicenseKey' ) ) {
5
+ /**
6
+ * Add a setting to Simple Admin Pages to register and verify an
7
+ * EDD Software Licensing key.
8
+ *
9
+ * This class is modelled on AdminPageSetting.class.php in the
10
+ * Simple Admin Pages Library. But it doesn't extend that class
11
+ * due to rules within the library about how versions are
12
+ * managed.
13
+ *
14
+ * See: https://github.com/NateWr/simple-admin-pages
15
+ *
16
+ * @since 1.4.1
17
+ */
18
+ class rtbAdminPageSettingLicenseKey {
19
+
20
+ /**
21
+ * Scripts to load for this component
22
+ *
23
+ * @since 1.4.1
24
+ */
25
+ public $scripts = array();
26
+
27
+ /**
28
+ * Styles to load for this component
29
+ *
30
+ * @since 1.4.1
31
+ */
32
+ public $styles = array();
33
+
34
+ /**
35
+ * Product slug on the store
36
+ *
37
+ * @since 1.4.1
38
+ */
39
+ public $product;
40
+
41
+ /**
42
+ * Store URL which manages license data
43
+ *
44
+ * @since 1.4.1
45
+ */
46
+ public $store_url;
47
+
48
+ /**
49
+ * Translateable strings required for this component
50
+ *
51
+ * @since 1.4.1
52
+ */
53
+ public $strings = array(
54
+ 'active' => null, // __( 'Active', 'textdomain' ),
55
+ 'expired' => null, // __( 'Expired', 'textdomain' ),
56
+ 'inactive' => null, // __( 'Inactive', 'textdomain' ),
57
+ 'expiry' => null, // _x( 'Expiry', 'Label before the expiration date of the license key', textdomain' ),
58
+ 'deactivate' => null, // __( 'Deactivate License', 'textdomain' ),
59
+ );
60
+
61
+ /**
62
+ * Initialize the setting
63
+ *
64
+ * @since 1.4.1
65
+ */
66
+ public function __construct( $args ) {
67
+
68
+ // Parse the values passed
69
+ $this->parse_args( $args );
70
+
71
+ // Get any existing value
72
+ $this->set_value();
73
+
74
+ // Set an error if the object is missing necessary data
75
+ if ( $this->missing_data() ) {
76
+ $this->set_error();
77
+ }
78
+
79
+ // Process a license activation/deactivation
80
+ add_filter( 'admin_init', array( $this, 'process_action' ), 100 );
81
+ }
82
+
83
+ /**
84
+ * Parse the arguments passed in the construction and assign them to
85
+ * internal variables.
86
+ *
87
+ * @since 1.4.1
88
+ */
89
+ private function parse_args( $args ) {
90
+ foreach ( $args as $key => $val ) {
91
+ switch ( $key ) {
92
+
93
+ case 'id' :
94
+ $this->{$key} = esc_attr( $val );
95
+
96
+ case 'title' :
97
+ $this->{$key} = esc_attr( $val );
98
+
99
+ case 'product' :
100
+ $this->{$key} = sanitize_key( $val );
101
+
102
+ case 'url' :
103
+ $this->{$key} = sanitize_text_field( $val );
104
+
105
+ default :
106
+ $this->{$key} = $val;
107
+
108
+ }
109
+ }
110
+ }
111
+
112
+ /**
113
+ * Check for missing data when setup.
114
+ *
115
+ * @since 1.4.1
116
+ */
117
+ private function missing_data() {
118
+
119
+ // Required fields
120
+ if ( empty( $this->id ) ) {
121
+ $this->set_error(
122
+ array(
123
+ 'type' => 'missing_data',
124
+ 'data' => 'id'
125
+ )
126
+ );
127
+ }
128
+ if ( empty( $this->title ) ) {
129
+ $this->set_error(
130
+ array(
131
+ 'type' => 'missing_data',
132
+ 'data' => 'title'
133
+ )
134
+ );
135
+ }
136
+ }
137
+
138
+ /**
139
+ * Set a value
140
+ *
141
+ * @since 1.4.1
142
+ */
143
+ public function set_value( $val = null ) {
144
+
145
+ if ( $val === null ) {
146
+ $option_group_value = get_option( $this->page );
147
+ $val = isset( $option_group_value[ $this->id ] ) ? $option_group_value[ $this->id ] : '';
148
+ }
149
+
150
+ $this->value = $this->esc_value( $val );
151
+ }
152
+
153
+ /**
154
+ * Escape the value to display it in text fields and other input fields
155
+ *
156
+ * @since 1.4.1
157
+ */
158
+ public function esc_value( $val ) {
159
+
160
+ $value = array(
161
+ 'api_key' => '',
162
+ 'status' => false,
163
+ 'expiry' => false,
164
+ );
165
+
166
+ if ( empty( $val ) || empty( $val['api_key'] ) ) {
167
+ return $value;
168
+ }
169
+
170
+ $value['api_key'] = esc_attr( $val['api_key'] );
171
+
172
+ if ( !empty( $val['status'] ) ) {
173
+ $value['status'] = esc_attr( $val['status'] );
174
+ }
175
+
176
+ if ( !empty( $val['expiry'] ) ) {
177
+ $value['expiry'] = esc_attr( $val['expiry'] );
178
+ }
179
+
180
+ return $value;
181
+ }
182
+
183
+ /**
184
+ * Display this setting
185
+ *
186
+ * @since 1.4.1
187
+ */
188
+ public function display_setting() {
189
+
190
+ // Set a flag for the output
191
+ $is_active = $this->value['status'] == 'valid' ? true : false;
192
+ $status = empty( $this->value['status'] ) ? 'inactive' : $this->value['status'];
193
+ $status_string = !empty( $this->strings[ $status] ) ? $this->strings[ $status ] : __( 'Invalid', 'restaurant-reservations' );
194
+
195
+ // Compile activation/deactivation URL
196
+ if ( !empty( $this->value['api_key'] ) ) {
197
+ $url = add_query_arg(
198
+ array(
199
+ 'id' => $this->id,
200
+ )
201
+ );
202
+ if ( $is_active ) {
203
+ $url = add_query_arg( 'action', 'deactivate', $url );
204
+ } else {
205
+ $url = add_query_arg( 'action', 'activate', $url );
206
+ }
207
+ }
208
+ ?>
209
+
210
+ <div class="rtb-license-setting" data-id="<?php echo esc_attr( $this->id ); ?>">
211
+ <input name="<?php echo $this->get_input_name(); ?>[api_key]" type="text" id="<?php echo $this->get_input_name(); ?>[api_key]" value="<?php echo $this->value['api_key']; ?>"<?php echo !empty( $this->placeholder ) ? ' placeholder="' . esc_attr( $this->placeholder ) . '"' : ''; ?> class="regular-text">
212
+
213
+ <?php if ( !empty( $this->value['api_key'] ) ) : ?>
214
+ <span class="status <?php echo $is_active ? 'valid' : 'inactive'; ?>">
215
+ <?php echo $status_string; ?>
216
+ </span>
217
+
218
+ <a href="<?php echo esc_url( $url ); ?>" class="button">
219
+ <?php echo $is_active ? $this->strings['deactivate'] : $this->strings['activate']; ?>
220
+ </a>
221
+
222
+ <span class="spinner"></span>
223
+
224
+ <?php endif;
225
+
226
+ $this->display_description();
227
+
228
+ ?>
229
+
230
+ </div>
231
+
232
+ <?php
233
+ }
234
+
235
+ /**
236
+ * Display a description for this setting
237
+ *
238
+ * @since 1.4.1
239
+ */
240
+ public function display_description() {
241
+
242
+ if ( !empty( $this->description ) ) : ?>
243
+
244
+ <p class="description"><?php echo $this->description; ?></p>
245
+
246
+ <?php endif;
247
+ }
248
+
249
+ /**
250
+ * Generate an option input field name, using the grouped schema.
251
+ *
252
+ * @since 1.4.1
253
+ */
254
+ public function get_input_name() {
255
+ return esc_attr( $this->page ) . '[' . esc_attr( $this->id ) . ']';
256
+ }
257
+
258
+
259
+ /**
260
+ * Sanitize the array of text inputs for this setting
261
+ *
262
+ * @since 1.4.1
263
+ */
264
+ public function sanitize_callback_wrapper( $values ) {
265
+
266
+ $output = array(
267
+ 'api_key' => '',
268
+ 'status' => false,
269
+ 'expiry' => false,
270
+ );
271
+
272
+ if ( empty( $values ) || empty( $values['api_key'] ) ) {
273
+ return $output;
274
+ }
275
+
276
+ $output['api_key'] = trim( sanitize_text_field( $values['api_key'] ) );
277
+
278
+ // Clear status and expiry when a license key has changed
279
+ global $rtb_controller;
280
+ $old = $rtb_controller->settings->get_setting( $this->id );
281
+ if ( empty( $old['api_key'] ) || $old['api_key'] !== $output['api_key'] ) {
282
+ return $output;
283
+ }
284
+
285
+ // Preserve old status values
286
+ $output = array_merge( $old, $output );
287
+
288
+ return $output;
289
+ }
290
+
291
+ /**
292
+ * Add and register this setting
293
+ *
294
+ * @since 1.4.1
295
+ */
296
+ public function add_settings_field( $section_id ) {
297
+
298
+ add_settings_field(
299
+ $this->id,
300
+ $this->title,
301
+ array( $this, 'display_setting' ),
302
+ $this->tab,
303
+ $section_id
304
+ );
305
+
306
+ }
307
+
308
+ /**
309
+ * Set an error
310
+ *
311
+ * @since 1.4.1
312
+ */
313
+ public function set_error( $error ) {
314
+ $this->errors[] = array_merge(
315
+ $error,
316
+ array(
317
+ 'class' => get_class( $this ),
318
+ 'id' => $this->id,
319
+ 'backtrace' => debug_backtrace()
320
+ )
321
+ );
322
+ }
323
+
324
+ /**
325
+ * Process a license activation if requested
326
+ *
327
+ * @since 1.4.1
328
+ */
329
+ public function process_action() {
330
+
331
+ if ( !current_user_can( 'manage_options' ) || empty( $_GET['tab'] ) || $_GET['tab'] !== 'rtb-licenses' || empty( $_GET['action'] ) || empty( $_GET['id'] ) || $_GET['id'] !== $this->id ) {
332
+ return;
333
+ }
334
+
335
+ $params = array();
336
+ $params['edd_action'] = $_GET['action'] === 'activate' ? 'activate_license' : 'deactivate_license';
337
+ $params['license'] = sanitize_text_field( $this->value['api_key'] );
338
+ $params['item_name'] = urlencode( $this->product );
339
+
340
+ $response = wp_remote_get( add_query_arg( $params, $this->store_url ), array( 'timeout' => 15, 'sslverify' => false ) );
341
+
342
+ if ( is_wp_error( $response ) ) {
343
+ $url = remove_query_arg( array( 'id', 'action' ) );
344
+ $url = add_query_arg( 'license_result', 'response_wp_error', $url );
345
+ header( 'Location: ' . $url );
346
+ }
347
+
348
+ $license_data = json_decode( wp_remote_retrieve_body( $response ) );
349
+
350
+
351
+ if ( $params['edd_action'] == 'activate' ) {
352
+ $result = $this->process_activation_response( $license_data );
353
+ } else {
354
+ $result = $this->process_activation_response( $license_data );
355
+ }
356
+
357
+ // Construct a URL to redirect back to the tab
358
+ $url = remove_query_arg( array( 'id', 'action' ) );
359
+ $url = add_query_arg(
360
+ array(
361
+ 'license_result' => $result ? 1 : 0,
362
+ 'action' => $_GET['action'] == 'activate' ? 'activate' : 'deactivate',
363
+ ),
364
+ $url
365
+ );
366
+
367
+ // If the result failed maybe add note on why
368
+ if ( !$result && !empty( $license_data->error ) ) {
369
+ $url = add_query_arg( 'result_error', $license_data->error, $url );
370
+ }
371
+
372
+ header( 'Location: ' . $url );
373
+
374
+ }
375
+
376
+ /**
377
+ * Process the response to an activation request
378
+ *
379
+ * @since 1.4.1
380
+ */
381
+ public function process_activation_response( $license_data ) {
382
+
383
+ if ( ( !empty( $license_data->error ) && ( $license_data->error == 'missing' || $license_data->error == 'item_name_mismatch' ) ) || $license_data->license == 'invalid' ) {
384
+ $this->value['status'] = 'invalid';
385
+ $this->value['expiry'] = false;
386
+ } else {
387
+ $this->value['status'] = $license_data->license;
388
+ $this->value['expiry'] = $license_data->expires;
389
+ }
390
+
391
+ $rtb_settings = get_option( $this->page );
392
+ $rtb_settings[ $this->id ] = $this->value;
393
+
394
+ update_option( $this->page, $rtb_settings );
395
+
396
+ return $license_data->license == 'valid' || $license_data->license == 'deactivated';
397
+ }
398
+
399
+ /**
400
+ * Process the response to an deactivation request
401
+ *
402
+ * @since 1.4.1
403
+ */
404
+ public function process_deactivation_response( $license_data ) {
405
+
406
+ if ( $license_data->license !== 'deactivated' ) {
407
+ return false;
408
+ } else {
409
+ $this->value['status'] = false;
410
+ $this->value['expiry'] = false;
411
+ }
412
+
413
+ $rtb_settings = get_option( $this->page );
414
+ $rtb_settings[ $this->id ] = $this->value;
415
+
416
+ update_option( $this->page, $rtb_settings );
417
+
418
+ return true;
419
+ }
420
+
421
+ }
422
+ } // endif;
includes/Licenses.class.php ADDED
@@ -0,0 +1,265 @@
1
+ <?php
2
+ if ( !defined( 'ABSPATH' ) ) exit;
3
+
4
+ if ( !class_exists( 'rtbLicenses' ) ) {
5
+ /**
6
+ * Class to handle license keys when an addon
7
+ * is enabled.
8
+ *
9
+ * This will add a tab to the settings page as long as at least
10
+ * one addon has enabled it by setting its $enabled parameter
11
+ * to `true`. It will also perform the license check and plugin
12
+ * update procedures.
13
+ *
14
+ * If no addons are enabled, it does not phone home or perform
15
+ * any additional actions.
16
+ *
17
+ * @since 1.4.1
18
+ */
19
+ class rtbLicenses {
20
+
21
+ /**
22
+ * Array of licensed products to manage
23
+ *
24
+ * @since 1.4.1
25
+ */
26
+ public $licensed_products = array();
27
+
28
+ /**
29
+ * Path to load license setting class file
30
+ *
31
+ * @since 1.4.1
32
+ */
33
+ public $sap_extension_path;
34
+
35
+ /**
36
+ * Filename of the setting class to handle a
37
+ * license key input field.
38
+ *
39
+ * @since 1.4.1
40
+ */
41
+ public $sap_setting_file;
42
+
43
+ /**
44
+ * Class name of the setting file to load
45
+ * when handling a license key input field.
46
+ *
47
+ * Should contain the class referenced in
48
+ * $sap_setting_class.
49
+ *
50
+ * @since 1.4.1
51
+ */
52
+ public $sap_setting_class;
53
+
54
+ /**
55
+ * Initialize the license handling
56
+ *
57
+ * @since 1.4.1
58
+ */
59
+ public function __construct() {
60
+
61
+ $this->sap_extension_path = RTB_PLUGIN_DIR . '/includes/';
62
+ $this->sap_setting_file = 'AdminPageSettingLicenseKey.class.php';
63
+ $this->sap_setting_class = 'rtbAdminPageSettingLicenseKey';
64
+
65
+ // Check and process updates
66
+ add_action( 'admin_init', array( $this, 'load_plugin_updater' ), 20 );
67
+
68
+ // Add a licenses tab as the last tab in the settings page
69
+ add_filter( 'rtb_settings_page', array( $this, 'add_licenses_tab' ), 100 );
70
+
71
+ // Enqueue assets on licenses page
72
+ add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_assets' ) );
73
+
74
+ // Show a success/failed message on license activation/deactivation
75
+ add_action( 'admin_notices', array( $this, 'admin_notices' ) );
76
+ }
77
+
78
+ /**
79
+ * Check if a licensing system should be enabled
80
+ *
81
+ * @since 1.4.1
82
+ */
83
+ public function is_enabled() {
84
+
85
+ if ( count( $this->licensed_products ) ) {
86
+ return true;
87
+ }
88
+
89
+ return false;
90
+ }
91
+
92
+ /**
93
+ * Add a licensed product to manage
94
+ *
95
+ * This should be called in admin_init (before priority 20) so that
96
+ * the updater knows what products to check.
97
+ *
98
+ * @since 1.4.1
99
+ */
100
+ public function add_licensed_product( $product ) {
101
+ $this->licensed_products[ $product['id'] ] = $product;
102
+ }
103
+
104
+ /**
105
+ * Add a licenses tab as the last tab in the settings page
106
+ *
107
+ * @since 1.4.1
108
+ */
109
+ public function add_licenses_tab( $sap ) {
110
+
111
+ if ( !$this->is_enabled() ) {
112
+ return $sap;
113
+ }
114
+
115
+ $sap->add_section(
116
+ 'rtb-settings',
117
+ array(
118
+ 'id' => 'rtb-licenses',
119
+ 'title' => __( 'Licenses', 'restaurant-reservations' ),
120
+ 'is_tab' => true,
121
+ )
122
+ );
123
+
124
+ $sap->lib_extension_path = $this->sap_extension_path;
125
+
126
+ global $rtb_controller;
127
+ foreach( $this->licensed_products as $product ) {
128
+ $sap->add_setting(
129
+ 'rtb-settings',
130
+ 'rtb-licenses',
131
+ array(
132
+ 'id' => 'rtb-license-key',
133
+ 'filename' => $rtb_controller->licenses->sap_setting_file,
134
+ 'class' => $rtb_controller->licenses->sap_setting_class,
135
+ ),
136
+ $product
137
+ );
138
+ }
139
+
140
+ do_action( 'rtb_settings_licenses', $sap );
141
+
142
+
143
+ return $sap;
144
+ }
145
+
146
+ /**
147
+ * Check if we're on the licenses page
148
+ *
149
+ * @since 1.4.1
150
+ */
151
+ public function is_license_page() {
152
+
153
+ global $rtb_controller;
154
+
155
+ // Use the page reference in $admin_page_hooks because
156
+ // it changes in SOME hooks when it is translated.
157
+ // https://core.trac.wordpress.org/ticket/18857
158
+ global $admin_page_hooks;
159
+
160
+ $screen = get_current_screen();
161
+ if ( empty( $screen ) || empty( $admin_page_hooks['rtb-bookings'] ) ) {
162
+ return false;
163
+ }
164
+
165
+ if ( $screen->base != $admin_page_hooks['rtb-bookings'] . '_page_rtb-settings' || empty( $_GET['tab'] ) || $_GET['tab'] !== 'rtb-licenses' ) {
166
+ return false;
167
+ }
168
+
169
+ return true;
170
+ }
171
+
172
+ /**
173
+ * Enqueue JavaScript and CSS files on the licenses page
174
+ *
175
+ * @since 1.4.1
176
+ */
177
+ public function enqueue_assets() {
178
+
179
+ if ( !$this->is_license_page() ) {
180
+ return;
181
+ }
182
+
183
+ wp_enqueue_style( 'rtb-admin', RTB_PLUGIN_URL . '/assets/css/admin.css' );
184
+ }
185
+
186
+ /**
187
+ * Show admin notices on license activation/deactivation attempts
188
+ *
189
+ * @since 1.4.1
190
+ */
191
+ public function admin_notices() {
192
+
193
+ if ( !$this->is_license_page() || !isset( $_GET['license_result'] ) || $_GET['license_result'] != 0 || empty( $_GET['action'] ) ) {
194
+ return;
195
+ }
196
+
197
+ $error = empty( $_GET['result_error'] ) ? '' : $_GET['result_error'];
198
+
199
+ if ( $_GET['action'] == 'deactivate' ) {
200
+ $msg = __( 'Your attempt to deactivate a license key failed. Please try again later or contact support for help.', 'restaurant-reservations' );
201
+ } else {
202
+
203
+ if ( $error == 'no_activations_left' ) {
204
+ $msg = sprintf( __( 'You have reached the activation limit for this license. If you have the license activated on other sites you will need to deactivate them or purchase more license keys from %sTheme of the Crop%s.', 'restaurant-reservations' ), '<a href="http://themeofthecrop.com/">', '</a>' );
205
+ } else {
206
+ $msg = __( 'Your attempt to activate a license key failed. Please check the license key and try again.', 'restaurant-reservations' );
207
+ }
208
+ }
209
+
210
+ ?>
211
+
212
+ <div class="error">
213
+ <p><?php echo $msg; ?></p>
214
+ </div>
215
+
216
+ <?php
217
+
218
+ }
219
+
220
+ /**
221
+ * Load plugin updater library for Easy Digital Downloads Software
222
+ * Licensing API
223
+ *
224
+ * @since 0.3
225
+ */
226
+ public function load_plugin_updater() {
227
+
228
+ if ( !$this->is_enabled() ) {
229
+ return;
230
+ }
231
+
232
+ if ( !class_exists( 'RTB_EDD_SL_Plugin_Updater' ) ) {
233
+
234
+ if ( !file_exists( RTB_PLUGIN_DIR . '/lib/EDD_SL_Plugin_Updater.class.php' ) ) {
235
+ return;
236
+ }
237
+
238
+ require_once( RTB_PLUGIN_DIR . '/lib/EDD_SL_Plugin_Updater.class.php' );
239
+ }
240
+
241
+ global $rtb_controller;
242
+
243
+ $this->updaters = array();
244
+ foreach( $this->licensed_products as $product ) {
245
+
246
+ $license = $rtb_controller->settings->get_setting( $product['id'] );
247
+
248
+ if ( empty( $license ) || empty( $license['api_key']) ) {
249
+ continue;
250
+ }
251
+
252
+ new RTB_EDD_SL_Plugin_Updater(
253
+ $product['store_url'],
254
+ $product['plugin_path'],
255
+ array(
256
+ 'version' => $product['version'],
257
+ 'license' => $license['api_key'],
258
+ 'item_name' => $product['product'],
259
+ 'author' => $product['author'],
260
+ )
261
+ );
262
+ }
263
+ }
264
+ }
265
+ } // endif
includes/Query.class.php ADDED
@@ -0,0 +1,230 @@
1
+ <?php
2
+ if ( !defined( 'ABSPATH' ) ) exit;
3
+
4
+ if ( !class_exists( 'rtbQuery' ) ) {
5
+ /**
6
+ * Class to handle common queries used to pull bookings from
7
+ * the database.
8
+ *
9
+ * Bookings can be retrieved with specific date ranges, common
10
+ * date params (today/upcoming), etc. This class is intended for
11
+ * the base plugin as well as extensions or custom projects which
12
+ * need a stable mechanism for reliably retrieving bookings data.
13
+ *
14
+ * Queries return an array of rtbBooking objects.
15
+ *
16
+ * @since 1.4.1
17
+ */
18
+ class rtbQuery {
19
+
20
+ /**
21
+ * Query args
22
+ *
23
+ * Passed to WP_Query
24
+ * http://codex.wordpress.org/Class_Reference/WP_Query
25
+ *
26
+ * @since 1.4.1
27
+ */
28
+ public $args = array();
29
+
30
+ /**
31
+ * Query context
32
+ *
33
+ * Defines the context in which the query is run.
34
+ * Useful for hooking into the right query without
35
+ * tampering with others.
36
+ *
37
+ * @since 1.4.1
38
+ */
39
+ public $context;
40
+
41
+ /**
42
+ * Instantiate the query with an array of arguments
43
+ *
44
+ * This supports all WP_Query args as well as several
45
+ * short-hand arguments for common needs. Short-hands
46
+ * include:
47
+ *
48
+ * date_range string today|upcoming|dates
49
+ * start_date string don't get bookings before this
50
+ * end_date string don't get bookings after this
51
+ *
52
+ * @see rtbQuery::prepare_args()
53
+ * @param args array Options to tailor the query
54
+ * @param context string Context for the query, used
55
+ * in filters
56
+ * @since 1.4.1
57
+ */
58
+ public function __construct( $args = array(), $context = '' ) {
59
+
60
+ global $rtb_controller;
61
+
62
+ $defaults = array(
63
+ 'post_type' => RTB_BOOKING_POST_TYPE,
64
+ 'posts_per_page' => 10,
65
+ 'date_range' => 'upcoming',
66
+ 'post_status' => array_keys( $rtb_controller->cpts->booking_statuses ),
67
+ 'order' => 'ASC',
68
+ 'paged' => 1,
69
+ );
70
+
71
+ $this->args = wp_parse_args( $args, $defaults );
72
+
73
+ $this->context = $context;
74
+
75
+ }
76
+
77
+ /**
78
+ * Parse the args array and convert custom arguments
79
+ * for use by WP_Query
80
+ *
81
+ * @since 1.4.1
82
+ */
83
+ public function prepare_args() {
84
+
85
+ $args = $this->args;
86
+
87
+ if ( is_string( $args['date_range'] ) ) {
88
+
89
+ if ( $args['date_range'] === 'today' ) {
90
+ $today = getdate();
91
+ $args['year'] = $today['year'];
92
+ $args['monthnum'] = $today['mon'];
93
+ $args['day'] = $today['mday'];
94
+
95
+ } elseif ( $args['date_range'] === 'upcoming' ) {
96
+ $args['date_query'] = array(
97
+ array(
98
+ 'after' => '-1 hour', // show bookings that have just passed
99
+ )
100
+ );
101
+ } elseif ( !empty( $args['start_date'] ) || !empty( $args['end_date'] ) ) {
102
+ $date_query = array( 'inclusive' => true );
103
+
104
+ if ( !empty( $args['start_date'] ) ) {
105
+ $date_query['after'] = sanitize_text_field( $args['start_date'] );
106
+ }
107
+
108
+ if ( !empty( $args['end_date'] ) ) {
109
+ $date_query['before'] = sanitize_text_field( $args['end_date'] );
110
+ }
111
+
112
+ if ( count( $date_query ) ) {
113
+ $args['date_query'] = $date_query;
114
+ }
115
+ }
116
+ }
117
+
118
+ if ( !empty( $args['post_status'] ) ) {
119
+ if ( is_string( $args['post_status'] ) ) {
120
+
121
+ // Parse a comma-separated string of statuses
122
+ if ( strpos( $args['post_status'], ',' ) !== false ) {
123
+ $statuses = explode( ',', $args['post_status'] );
124
+ $args['post_status'] = array();
125
+ foreach( $statuses as $status ) {
126
+ $args['post_status'][] = sanitize_key( $status );
127
+ }
128
+ } else {
129
+ $args['post_status'] = sanitize_key( $_REQUEST['status'] );
130
+ }
131
+ }
132
+ }
133
+
134
+ $this->args = $args;
135
+
136
+ return $this->args;
137
+ }
138
+
139
+ /**
140
+ * Parse $_REQUEST args and store in $this->args
141
+ *
142
+ * @since 1.4.1
143
+ */
144
+ public function parse_request_args() {
145
+
146
+ $args = array();
147
+
148
+ if ( !empty( $_REQUEST['paged'] ) ) {
149
+ $args['paged'] = (int) $_REQUEST['paged'];
150
+ }
151
+
152
+ if ( !empty( $_REQUEST['posts_per_page'] ) ) {
153
+ $args['posts_per_page'] = (int) $_REQUEST['posts_per_page'];
154
+ }
155
+
156
+ if ( !empty( $_REQUEST['status'] ) ) {
157
+ if ( is_string( $_REQUEST['status'] ) ) {
158
+ $args['post_status'] = sanitize_text_field( $_REQUEST['status'] );
159
+ } elseif ( is_array( $_REQUEST['status'] ) ) {
160
+ $args['post_status'] = array();
161
+ foreach( $_REQUEST['status'] as $status ) {
162
+ $args['post_status'][] = sanitize_key( $status );
163
+ }
164
+ }
165
+ }
166
+
167
+ if ( !empty( $_REQUEST['orderby'] ) ) {
168
+ $args['orderby'] = sanitize_key( $_REQUEST['orderby'] );
169
+ }
170
+
171
+ if ( !empty( $_REQUEST['order'] ) && $_REQUEST['order'] === 'DESC' ) {
172
+ $args['order'] = $_REQUEST['orderby'];
173
+ }
174
+
175
+ if ( !empty( $_REQUEST['start_date'] ) ) {
176
+ $args['start_date'] = sanitize_text_field( $_REQUEST['start_date'] );
177
+ }
178
+
179
+ if ( !empty( $_REQUEST['end_date'] ) ) {
180
+ $args['end_date'] = sanitize_text_field( $_REQUEST['end_date'] );
181
+ }
182
+
183
+ if ( !empty( $_REQUEST['date_range'] ) ) {
184
+ $args['date_range'] = sanitize_key( $_REQUEST['date_range'] );
185
+ }
186
+
187
+ if ( !empty( $_REQUEST['start_date'] ) ) {
188
+ $args['start_date'] = sanitize_text_field( $_REQUEST['start_date'] );
189
+ }
190
+
191
+ if ( !empty( $_REQUEST['end_date'] ) ) {
192
+ $args['end_date'] = sanitize_text_field( $_REQUEST['end_date'] );
193
+ }
194
+
195
+ $this->args = array_merge( $this->args, $args );
196
+ }
197
+
198
+ /**
199
+ * Retrieve query results
200
+ *
201
+ * @since 1.4.1
202
+ */
203
+ public function get_bookings() {
204
+
205
+ $bookings = array();
206
+
207
+ $args = apply_filters( 'rtb_query_args', $this->args, $this->context );
208
+
209
+ $query = new WP_Query( $args );
210
+
211
+ if ( $query->have_posts() ) {
212
+ require_once( RTB_PLUGIN_DIR . '/includes/Booking.class.php' );
213
+
214
+ while( $query->have_posts() ) {
215
+ $query->the_post();
216
+
217
+ $booking = new rtbBooking();
218
+ if ( $booking->load_post( $query->post ) ) {
219
+ $bookings[] = $booking;
220
+ }
221
+ }
222
+ }
223
+
224
+ $this->bookings = $bookings;
225
+
226
+ return $this->bookings;
227
+ }
228
+
229
+ }
230
+ } // endif
includes/Settings.class.php CHANGED
@@ -1,7 +1,7 @@
1
<?php
2
if ( !defined( 'ABSPATH' ) ) exit;
3
4
- if ( !class_exists( 'rtbBooking' ) ) {
5
/**
6
* Class to handle configurable settings for Restaurant Reservations
7
*
1
<?php
2
if ( !defined( 'ABSPATH' ) ) exit;
3
4
+ if ( !class_exists( 'rtbSettings' ) ) {
5
/**
6
* Class to handle configurable settings for Restaurant Reservations
7
*
includes/WP_List_Table.BookingsTable.class.php CHANGED
@@ -253,17 +253,33 @@ class rtbBookingsTable extends WP_List_Table {
253
return apply_filters( 'rtb_bookings_table_views_status', $views );
254
}
255
256
/**
257
* Generates content for a single row of the table
258
* @since 0.0.1
259
*/
260
public function single_row( $item ) {
261
- static $row_class = '';
262
- $row_class = ( $row_class == '' ? 'alternate' : '' );
263
264
- echo '<tr class="' . esc_attr( $item->post_status );
265
- echo $row_class == '' ? '' : ' ' . $row_class;
266
- echo '">';
267
$this->single_row_columns( $item );
268
echo '</tr>';
269
}
@@ -584,72 +600,23 @@ class rtbBookingsTable extends WP_List_Table {
584
public function bookings_data() {
585
586
$args = array(
587
- 'post_type' => RTB_BOOKING_POST_TYPE,
588
'posts_per_page' => $this->per_page,
589
- 'paged' => isset( $_GET['paged'] ) ? $_GET['paged'] : 1,
590
- 'post_status' => isset( $_GET['status'] ) ? $_GET['status'] : array( 'confirmed', 'pending', 'closed' ),
591
);
592
593
- if ( isset( $_GET['orderby'] ) ) {
594
- $args['orderby'] = $_GET['orderby'];
595
}
596
597
- $args['order'] = !empty( $_GET['order'] ) ? $_GET['order'] : 'ASC';
598
-
599
- if ( $this->filter_start_date !== null || $this->filter_end_date !== null ) {
600
-
601
- $date_query = array();
602
-
603
- if ( $this->filter_start_date !== null ) {
604
- $date_query['after'] = $this->filter_start_date;
605
- }
606
-
607
- if ( $this->filter_end_date !== null ) {
608
- $date_query['before'] = $this->filter_end_date;
609
- }
610
-
611
- if ( count( $date_query ) ) {
612
- $args['date_query'] = $date_query;
613
- }
614
-
615
- } elseif ( !empty( $_GET['schedule'] ) ) {
616
-
617
- if ( $_GET['schedule'] == 'today' ) {
618
- $today = getdate();
619
- $args['year'] = $today['year'];
620
- $args['monthnum'] = $today['mon'];
621
- $args['day'] = $today['mday'];
622
- }
623
-
624
- // Default date setting is to show upcoming bookings
625
- } elseif ( empty( $_GET['schedule'] ) ) {
626
- $args['date_query'] = array(
627
- array(
628
- 'after' => '-1 hour', // show bookings that have just passed
629
- )
630
- );
631
- if ( empty( $_GET['order'] ) ) {
632
- $args['order'] = 'ASC';
633
- }
634
-
635
}
636
637
- $args = apply_filters( 'rtb_bookings_table_query_args', $args );
638
-
639
- // Make query
640
- $query = new WP_Query( $args );
641
642
- if ( $query->have_posts() ) {
643
- while ( $query->have_posts() ) {
644
- $query->the_post();
645
-
646
- require_once( RTB_PLUGIN_DIR . '/includes/Booking.class.php' );
647
- $booking = new rtbBooking();
648
- if ( $booking->load_post( $query->post ) ) {
649
- $this->bookings[] = $booking;
650
- }
651
- }
652
- }
653
}
654
655
/**
253
return apply_filters( 'rtb_bookings_table_views_status', $views );
254
}
255
256
+ /**
257
+ * Extra controls to be displayed between bulk actions and pagination
258
+ *
259
+ * @param string pos Position of this tablenav: `top` or `btm`
260
+ * @since 1.4.1
261
+ */
262
+ public function extra_tablenav( $pos ) {
263
+ do_action( 'rtb_bookings_table_actions', $pos );
264
+ }
265
+
266
/**
267
* Generates content for a single row of the table
268
* @since 0.0.1
269
*/
270
public function single_row( $item ) {
271
+ static $row_alternate_class = '';
272
+ $row_alternate_class = ( $row_alternate_class == '' ? 'alternate' : '' );
273
+
274
+ $row_classes = array( esc_attr( $item->post_status ) );
275
+
276
+ if ( !empty( $row_alternate_class ) ) {
277
+ $row_classes[] = $row_alternate_class;
278
+ }
279
+
280
+ $row_classes = apply_filters( 'rtb_admin_bookings_list_row_classes', $row_classes, $item );
281
282
+ echo '<tr class="' . implode( ' ', $row_classes ) . '">';
283
$this->single_row_columns( $item );
284
echo '</tr>';
285
}
600
public function bookings_data() {
601
602
$args = array(
603
'posts_per_page' => $this->per_page,
604
);
605
606
+ if ( !empty( $this->filter_start_date ) ) {
607
+ $args['start_date'] = $this->filter_start_date;
608
}
609
610
+ if ( !empty( $this->filter_end_date ) ) {
611
+ $args['end_date'] = $this->filter_end_date;
612
}
613
614
+ $query = new rtbQuery( $args, 'bookings-table' );
615
+ $query->parse_request_args();
616
+ $query->prepare_args();
617
+ $query->args = apply_filters( 'rtb_bookings_table_query_args', $query->args );
618
619
+ $this->bookings = $query->get_bookings();
620
}
621
622
/**
includes/template-functions.php CHANGED
@@ -341,7 +341,7 @@ function rtb_print_form_checkbox_field( $slug, $title, $value, $args ) {
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; ?>
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; ?>-<?php echo esc_attr( $opt_value ); ?>" 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; ?>
languages/restaurant-reservations-de_DE.mo CHANGED
Binary file
languages/restaurant-reservations-de_DE.po CHANGED
@@ -2,8 +2,8 @@ msgid ""
2
msgstr ""
3
"Project-Id-Version: Restaurant Reservations 1.2.3\n"
4
"Report-Msgid-Bugs-To: \n"
5
- "POT-Creation-Date: 2015-02-03 17:54+0100\n"
6
- "PO-Revision-Date: 2015-02-03 18:15+0100\n"
7
"Last-Translator: admin <admin@example.com>\n"
8
"Language-Team: mediaOffice GbR <support@mediaoffice.de>\n"
9
"Language: de\n"
@@ -93,50 +93,71 @@ msgstr ""
93
"href=\"http://wordpress.org/support/plugin/restaurant-reservations\" \n"
94
"target=\"_blank\">support forums</a>."
95
96
- #: ../includes/AdminBookings.class.php:41
97
msgctxt "Title of admin page that lists bookings"
98
msgid "Bookings"
99
msgstr "Reservierungen"
100
101
- #: ../includes/AdminBookings.class.php:42
102
msgctxt "Title of bookings admin menu item"
103
msgid "Bookings"
104
msgstr "Reservierungen"
105
106
- #: ../includes/AdminBookings.class.php:65
107
msgid "Restaurant Bookings"
108
msgstr "Reservierungen"
109
110
- #: ../includes/AdminBookings.class.php:66
111
#: ../includes/CustomPostTypes.class.php:42
112
msgid "Add New"
113
msgstr "Neu hinzufügen"
114
115
- #: ../includes/AdminBookings.class.php:111 ../restaurant-reservations.php:217
116
msgid "Add Booking"
117
msgstr "Reservierung hinzufügen"
118
119
- #: ../includes/AdminBookings.class.php:114
120
msgid "Cancel"
121
msgstr "Abbrechen"
122
123
- #: ../includes/AdminBookings.class.php:128
124
msgid "Close"
125
msgstr "Schliessen"
126
127
- #: ../includes/AdminBookings.class.php:194
128
msgid "Booking Status"
129
msgstr "Status der Reservierungen"
130
131
- #: ../includes/AdminBookings.class.php:202
132
msgid "Send notifications"
133
msgstr "Benachrichtigunen versenden"
134
135
- #: ../includes/AdminBookings.class.php:207
136
msgid "Learn more"
137
msgstr "mehr Informationen"
138
139
- #: ../includes/AdminBookings.class.php:208
140
msgid ""
141
"When adding a booking or changing a booking's status with this form, no "
142
"email notifications will be sent. Check this option if you want to send "
@@ -146,12 +167,12 @@ msgstr ""
146
"Statusänderungen innerhalb dieses Formulars versandt. Wählen Sie diese "
147
"Option an, falls sie doch Email Benachrichtigungen versenden wollen."
148
149
- #: ../includes/AdminBookings.class.php:262
150
#, php-format
151
msgid "You have been logged out. Please %slogin again%s."
152
msgstr "Sie wurden abgemeldet. Bitte %smelden%s Sie sich wieder an."
153
154
- #: ../includes/AdminBookings.class.php:298
155
#, php-format
156
msgid ""
157
"This booking has been sent to the %sTrash%s where it can not be edited. Set "
@@ -161,14 +182,14 @@ msgstr ""
161
"sie nicht bearbeitet werden. Bitte setzten Sie den Status auf \"Pendent\" "
162
"oder \"Bestätigt\" um sie bearbeiten zu können."
163
164
- #: ../includes/AdminBookings.class.php:315
165
msgid ""
166
"The booking could not be retrieved. Please reload the page and try again."
167
msgstr ""
168
"Ihre Reservierung konnte nicht geladen werden. Bitte laden Sie die Seite neu "
169
"und versuchen Sie es noch einmal."
170
171
- #: ../includes/AdminBookings.class.php:383
172
msgid ""
173
"Unable to trash this post. Please try again. If you continue to have "
174
"trouble, please refresh the page."
@@ -177,11 +198,27 @@ msgstr ""
177
"versuchen Sie es nocheinmal. Falls Sie dann immer noch Probleme haben, laden "
178
"Sie die Seite neu."
179
180
- #: ../includes/Booking.class.php:178
181
msgid "Please enter the date you would like to book."
182
msgstr "Bitte geben Sie das Datum ein an dem Sie einen Tisch buchen wollen."
183
184
- #: ../includes/Booking.class.php:188
185
msgid ""
186
"The date you entered is not valid. Please select from one of the dates in "
187
"the calendar."
@@ -189,11 +226,11 @@ msgstr ""
189
"Das eingegebene Datum ist nicht gültig. Bitte wählen Sie ein Datum im "
190
"Kalender."
191
192
- #: ../includes/Booking.class.php:199
193
msgid "Please enter the time you would like to book."
194
msgstr "Bitte geben Sie die Zeit ein an dem Sie einen Tisch buchen wollen."
195
196
- #: ../includes/Booking.class.php:209
197
msgid ""
198
"The time you entered is not valid. Please select from one of the times "
199
"provided."
@@ -201,78 +238,78 @@ msgstr ""
201
"Die eingegebene Zeit ist nicht gültig. Bitte wählen sie eine Zeit aus der "
202
"Zeitleiste."
203
204
- #: ../includes/Booking.class.php:226
205
#, php-format
206
msgid "Sorry, bookings can not be made more than %s days in advance."
207
msgstr ""
208
"Wir bitten um Entschuldigung. Reservierungen können nicht mehr als %s Tage "
209
"im Voraus gebucht werden."
210
211
- #: ../includes/Booking.class.php:237
212
msgid "Sorry, bookings can not be made in the past."
213
msgstr ""
214
"Wir bitten um Entschuldigung. Reservierungen können nicht in der "
215
"Vergangenheit gebucht werden."
216
217
- #: ../includes/Booking.class.php:245
218
#, php-format
219
msgid "Sorry, bookings must be made more than %s days in advance."
220
msgstr ""
221
"Wir bitten um Entschuldigung. Reservierungen müssen mehr als %s Tage im "
222
"Voraus gebucht werden."
223
224
- #: ../includes/Booking.class.php:247
225
#, php-format
226
msgid "Sorry, bookings must be made more than %s hours in advance."
227
msgstr ""
228
"Wir bitten um Entschuldigung. Reservierungen müssen mehr als %s Tage im "
229
"Voraus gebucht werden."
230
231
- #: ../includes/Booking.class.php:249
232
#, php-format
233
- msgid "Sorry, bookings must be made more than %s mings in advance."
234
msgstr ""
235
"Wir bitten um Entschuldigung. Reservierungen müssen mehr als %s Minuten im "
236
"Voraus gebucht werden."
237
238
- #: ../includes/Booking.class.php:288
239
msgid "Sorry, no bookings are being accepted then."
240
msgstr ""
241
"Wir bitten um Entschuldigung. Zu diesem Zeitpunkt können wir keine "
242
"Reservierung annehmen."
243
244
- #: ../includes/Booking.class.php:340
245
msgid "Sorry, no bookings are being accepted on that date."
246
msgstr ""
247
"Wir bitten um Entschuldigung. Zu diesem Datum können wir keine Reservierung "
248
"annehmen."
249
250
- #: ../includes/Booking.class.php:346
251
msgid "Sorry, no bookings are being accepted at that time."
252
msgstr ""
253
"Wir bitten um Entschuldigung. Für diese Uhrzeit können wir keine "
254
"Reservierung annehmen."
255
256
- #: ../includes/Booking.class.php:368
257
msgid "Please enter a name for this booking."
258
msgstr "Bitte geben Sie an auf welchen Namen Sie den Tisch reservieren wollen."
259
260
- #: ../includes/Booking.class.php:378
261
msgid "Please let us know how many people will be in your party."
262
msgstr "Bitte sagen sie uns wieviele Plätze Sie am Tisch benötigen."
263
264
- #: ../includes/Booking.class.php:388
265
#, php-format
266
msgid "We only accept bookings for parties of up to %d people."
267
msgstr "Wir können leider nur Reservierungen bis %d Personen annehmen."
268
269
- #: ../includes/Booking.class.php:399
270
msgid "Please enter an email address so we can confirm your booking."
271
msgstr ""
272
"Bitte geben Sie Ihre Email Adresse ein damit wir Ihnen die Reservierung "
273
"bestätigen können."
274
275
- #: ../includes/Booking.class.php:421
276
msgid "Please complete this field to request a booking."
277
msgstr ""
278
"Bitte füllen Sie dieses Feld aus um eine Tischreserverationsanfrage "
@@ -342,7 +379,7 @@ msgstr[1] "Bestätigt für <span class=\"count\">(%s)</span> Gäste"
342
#: ../includes/CustomPostTypes.class.php:97
343
msgctxt "Booking status for a closed booking"
344
msgid "Closed"
345
- msgstr "Geschlossen"
346
347
#: ../includes/CustomPostTypes.class.php:104
348
#, php-format
@@ -581,19 +618,27 @@ msgstr ""
581
"<em>Diese Mitteilung haben Sie vom {site_link} um {current_time} erhalten.</"
582
"em>"
583
584
- #: ../includes/Settings.class.php:218 ../includes/Settings.class.php:219
585
msgid "Settings"
586
msgstr "Einstellungen"
587
588
- #: ../includes/Settings.class.php:231
589
msgid "General"
590
msgstr "Generelle Einstellungen"
591
592
- #: ../includes/Settings.class.php:242
593
msgid "Booking Page"
594
msgstr "Reservierungsseite"
595
596
- #: ../includes/Settings.class.php:243
597
msgid ""
598
"Select a page on your site to automatically display the booking form and "
599
"confirmation message."
@@ -601,29 +646,29 @@ msgstr ""
601
"Wähen Sie eine Seite zur automatischen Anzeige des Buchungsformulars und "
602
"einer Bestätigungsmitteilung."
603
604
- #: ../includes/Settings.class.php:259
605
msgid "Max Party Size"
606
msgstr "Maximale Anzahl Personen pro Reservierung"
607
608
- #: ../includes/Settings.class.php:260
609
msgid "Set a maximum allowed party size for bookings."
610
msgstr "Definieren Sie die maximale Anzahl Gäste für eine Tischreservertion."
611
612
- #: ../includes/Settings.class.php:272
613
msgid "Success Message"
614
msgstr "Erfolgsmeldung"
615
616
- #: ../includes/Settings.class.php:273
617
msgid "Enter the message to display when a booking request is made."
618
msgstr ""
619
"Legen Sie die Mitteilung fest die erscheint, wenn eine Reservierungsanfrage "
620
"abgeschickt wurde"
621
622
- #: ../includes/Settings.class.php:284
623
msgid "Date Format"
624
msgstr "Datumsformat"
625
626
- #: ../includes/Settings.class.php:285
627
#, php-format
628
msgid ""
629
"Define how the date is formatted on the booking form. %sFormatting rules%s. "
@@ -636,11 +681,11 @@ msgstr ""
636
"Benachrichtigungsmeldungen zu ändern, müssen Sie Ihre generellen %sWordPress "
637
"Einstellungen%s entsprechend anpassen."
638
639
- #: ../includes/Settings.class.php:296
640
msgid "Time Format"
641
msgstr "Zeitformat"
642
643
- #: ../includes/Settings.class.php:297
644
#, php-format
645
msgid ""
646
"Define how the time is formatted on the booking form. %sFormatting rules%s. "
@@ -653,11 +698,11 @@ msgstr ""
653
"Benachrichtigungsmeldungen zu ändern, müssen Sie Ihre generellen \n"
654
"%sWordPress Einstellungen%s entsprechend anpassen."
655
656
- #: ../includes/Settings.class.php:310
657
msgid "Language"
658
msgstr "Sprache"
659
660
- #: ../includes/Settings.class.php:311
661
msgid ""
662
"Select a language to use for the booking form datepicker if it is different "
663
"than your WordPress language setting."
@@ -665,100 +710,100 @@ msgstr ""
665
"Wählen Sie eine Sprache für die Datumsauswahl, falls diese unterschiedlich "
666
"von Ihrer WordPress Spracheinstellung ist."
667
668
- #: ../includes/Settings.class.php:321
669
msgid "Booking Schedule"
670
msgstr "Reservierungsplan"
671
672
- #: ../includes/Settings.class.php:328
673
msgid "Add new scheduling rule"
674
msgstr "Neue Reservierungsregel hinzufügen"
675
676
- #: ../includes/Settings.class.php:329
677
msgctxt "Format of a scheduling rule"
678
msgid "Weekly"
679
msgstr "Wöchentlich"
680
681
- #: ../includes/Settings.class.php:330
682
msgctxt "Format of a scheduling rule"
683
msgid "Monthly"
684
msgstr "Monatlich"
685
686
- #: ../includes/Settings.class.php:331
687
msgctxt "Format of a scheduling rule"
688
msgid "Date"
689
msgstr "Täglich"
690
691
- #: ../includes/Settings.class.php:332
692
msgctxt "Label for selecting days of the week in a scheduling rule"
693
msgid "Days of the week"
694
msgstr "Tage in der Woche"
695
696
- #: ../includes/Settings.class.php:333
697
msgctxt "Label for selecting weeks of the month in a scheduling rule"
698
msgid "Weeks of the month"
699
msgstr "Wochen eines Monats"
700
701
- #: ../includes/Settings.class.php:334
702
msgctxt "Label to select a date for a scheduling rule"
703
msgid "Date"
704
msgstr "Datum"
705
706
- #: ../includes/Settings.class.php:335
707
msgctxt "Label to select a time slot for a scheduling rule"
708
msgid "Time"
709
msgstr "Uhrzeit"
710
711
- #: ../includes/Settings.class.php:336
712
msgctxt "Label to set a scheduling rule to last all day"
713
msgid "All day"
714
msgstr "Ganztägig"
715
716
- #: ../includes/Settings.class.php:337
717
msgctxt "Label for the starting time of a scheduling rule"
718
msgid "Start"
719
msgstr "Startzeit"
720
721
- #: ../includes/Settings.class.php:338
722
msgctxt "Label for the ending time of a scheduling rule"
723
msgid "End"
724
msgstr "Endzeit"
725
726
- #: ../includes/Settings.class.php:339
727
#, php-format
728
msgctxt ""
729
"Prompt displayed when a scheduling rule is set without any time restrictions"
730
msgid "All day long. Want to %sset a time slot%s?"
731
msgstr "Ganztägig. Wollen Sie eine %sZeitdauer%s festlegen?"
732
733
- #: ../includes/Settings.class.php:340
734
msgctxt "Toggle a scheduling rule open and closed"
735
msgid "Open and close this rule"
736
msgstr "Öffnen und Schliessen dieser Regel"
737
738
- #: ../includes/Settings.class.php:341
739
msgctxt "Delete a scheduling rule"
740
msgid "Delete rule"
741
msgstr "Regel löschen"
742
743
- #: ../includes/Settings.class.php:342
744
msgid "Delete scheduling rule"
745
msgstr "Reservierungsregel löschen"
746
747
- #: ../includes/Settings.class.php:343
748
msgctxt ""
749
"Brief default description of a scheduling rule when no weekdays or weeks are "
750
"included in the rule"
751
msgid "Never"
752
msgstr "Nie"
753
754
- #: ../includes/Settings.class.php:344
755
msgctxt ""
756
"Brief default description of a scheduling rule when all the weekdays/weeks "
757
"are included in the rule"
758
msgid "Every day"
759
msgstr "Täglich"
760
761
- #: ../includes/Settings.class.php:345
762
#, php-format
763
msgctxt ""
764
"Brief default description of a scheduling rule when some weekdays are "
@@ -768,7 +813,7 @@ msgctxt ""
768
msgid "%s on the %s week of the month"
769
msgstr "%s der %s Wochen des Monats"
770
771
- #: ../includes/Settings.class.php:346
772
#, php-format
773
msgctxt ""
774
"Brief default description of a scheduling rule when some weeks of the month "
@@ -778,86 +823,86 @@ msgctxt ""
778
msgid "%s week of the month"
779
msgstr "%s Woche des Monats"
780
781
- #: ../includes/Settings.class.php:347
782
msgctxt "Brief default description of a scheduling rule when no times are set"
783
msgid "All day"
784
msgstr "Täglich"
785
786
- #: ../includes/Settings.class.php:348
787
msgctxt ""
788
"Brief default description of a scheduling rule when an end time is set but "
789
"no start time. If the end time is 6pm, it will read: Ends at 6pm"
790
msgid "Ends at"
791
msgstr "Endet um"
792
793
- #: ../includes/Settings.class.php:349
794
msgctxt ""
795
"Brief default description of a scheduling rule when a start time is set but "
796
"no end time. If the start time is 6pm, it will read: Starts at 6pm"
797
msgid "Starts at"
798
msgstr "Beginnt um"
799
800
- #: ../includes/Settings.class.php:350
801
msgctxt "Separator between times of a scheduling rule"
802
msgid "&mdash;"
803
msgstr "&mdash;"
804
805
- #: ../includes/Settings.class.php:359
806
msgid "Schedule"
807
msgstr "Regel"
808
809
- #: ../includes/Settings.class.php:360
810
msgid "Define the weekly schedule during which you accept bookings."
811
msgstr ""
812
"Definieren Sie den wöchentlichen Zeitraum in welchem Sie Reservierungen "
813
"annehmen"
814
815
- #: ../includes/Settings.class.php:362
816
msgctxt "Monday abbreviation"
817
msgid "Mo"
818
msgstr "Mo"
819
820
- #: ../includes/Settings.class.php:363
821
msgctxt "Tuesday abbreviation"
822
msgid "Tu"
823
msgstr "Di"
824
825
- #: ../includes/Settings.class.php:364
826
msgctxt "Wednesday abbreviation"
827
msgid "We"
828
msgstr "Mi"
829
830
- #: ../includes/Settings.class.php:365
831
msgctxt "Thursday abbreviation"
832
msgid "Th"
833
msgstr "Do"
834
835
- #: ../includes/Settings.class.php:366
836
msgctxt "Friday abbreviation"
837
msgid "Fr"
838
msgstr "Fr"
839
840
- #: ../includes/Settings.class.php:367
841
msgctxt "Saturday abbreviation"
842
msgid "Sa"
843
msgstr "Sa"
844
845
- #: ../includes/Settings.class.php:368
846
msgctxt "Sunday abbreviation"
847
msgid "Su"
848
msgstr "So"
849
850
- #: ../includes/Settings.class.php:378
851
msgctxt ""
852
"Brief default description of a scheduling exception when no times are set"
853
msgid "Closed all day"
854
msgstr "Ganzer Tag geschlossen"
855
856
- #: ../includes/Settings.class.php:385
857
msgid "Exceptions"
858
msgstr "Ausnahmen"
859
860
- #: ../includes/Settings.class.php:386
861
msgid ""
862
"Define special opening hours for holidays, events or other needs. Leave the "
863
"time empty if you're closed all day."
@@ -866,79 +911,79 @@ msgstr ""
866
"oder bei anderen Situationen. Lassen Sie das Zeitfeld leer wenn Sie den "
867
"ganzen Tag geschlossen haben"
868
869
- #: ../includes/Settings.class.php:401
870
msgid "Early Bookings"
871
msgstr "Vorausbuchungen"
872
873
- #: ../includes/Settings.class.php:402
874
msgid "Select how early customers can make their booking."
875
msgstr "Wählen Sie wie lange im Voraus Gäste einen Tisch reservieren können"
876
877
- #: ../includes/Settings.class.php:405
878
msgid "Any time"
879
msgstr "Immer"
880
881
- #: ../includes/Settings.class.php:406
882
msgid "Up to 1 day in advance"
883
msgstr "Bis einen Tag im Voraus"
884
885
- #: ../includes/Settings.class.php:407
886
msgid "Up to 1 week in advance"
887
msgstr "Bis eine Woche im Voraus"
888
889
- #: ../includes/Settings.class.php:408
890
msgid "Up to 2 weeks in advance"
891
msgstr "Bis zwei Wochen im Voraus"
892
893
- #: ../includes/Settings.class.php:409
894
msgid "Up to 30 days in advance"
895
msgstr "Bis 30 Tage im Voraus"
896
897
- #: ../includes/Settings.class.php:410
898
msgid "Up to 90 days in advance"
899
msgstr "Bis 90 Tage im Voraus"
900
901
- #: ../includes/Settings.class.php:421
902
msgid "Late Bookings"
903
msgstr "Kurzfristige Reservierungen"
904
905
- #: ../includes/Settings.class.php:422
906
msgid "Select how late customers can make their booking."
907
msgstr "Wählen Sie wie kurzfristig Gäste noch einen Tisch reservieren können."
908
909
- #: ../includes/Settings.class.php:425
910
msgid "Up to the last minute"
911
msgstr "Bis zur letzen Minute"
912
913
- #: ../includes/Settings.class.php:426
914
msgid "At least 15 minutes in advance"
915
msgstr "Bis 15 Minuten davor"
916
917
- #: ../includes/Settings.class.php:427
918
msgid "At least 30 minutes in advance"
919
msgstr "Bis 30 Minuten davor"
920
921
- #: ../includes/Settings.class.php:428
922
msgid "At least 45 minutes in advance"
923
msgstr "Bis 45 Minuten davor"
924
925
- #: ../includes/Settings.class.php:429
926
msgid "At least 1 hour in advance"
927
msgstr "Bis 1 Stunde davor"
928
929
- #: ../includes/Settings.class.php:430
930
msgid "At least 4 hours in advance"
931
msgstr "Bis 4 Stunden davor"
932
933
- #: ../includes/Settings.class.php:431
934
msgid "At least 1 day in advance"
935
msgstr "Bis einen Tag davor"
936
937
- #: ../includes/Settings.class.php:442
938
msgid "Date Pre-selection"
939
msgstr "Vorwahl des Datums"
940
941
- #: ../includes/Settings.class.php:443
942
msgid ""
943
"When the booking form is loaded, should it automatically attempt to select a "
944
"valid date?"
@@ -946,51 +991,51 @@ msgstr ""
946
"Soll beim Aufruf des Reservierungsformulares automatisch ein gültiges Datum "
947
"voreingestellt sein?"
948
949
- #: ../includes/Settings.class.php:446
950
msgid "Select today if valid"
951
msgstr "Wählen Sie heute sofern dies gültig ist."
952
953
- #: ../includes/Settings.class.php:447
954
msgid "Select today or next valid date"
955
msgstr "Wählen Sie heute oder das nächste gültige Datum aus"
956
957
- #: ../includes/Settings.class.php:448
958
msgid "Leave empty"
959
msgstr "Leer lassen"
960
961
- #: ../includes/Settings.class.php:459
962
msgid "Time Interval"
963
msgstr "Zeitspanne"
964
965
- #: ../includes/Settings.class.php:460
966
msgid "Select the number of minutes between each available time."
967
msgstr "Wählen sie die Anzahl Minuten zwischen jeder verfügbaren Zeit."
968
969
- #: ../includes/Settings.class.php:463
970
msgid "Every 30 minutes"
971
msgstr "Alle 30 Minuten"
972
973
- #: ../includes/Settings.class.php:464
974
msgid "Every 15 minutes"
975
msgstr "Alle 15 Minuten"
976
977
- #: ../includes/Settings.class.php:465
978
msgid "Every 10 minutes"
979
msgstr "Alle 10 Minuten"
980
981
- #: ../includes/Settings.class.php:466
982
msgid "Every 5 minutes"
983
msgstr "Alle 5 Minuten"
984
985
- #: ../includes/Settings.class.php:475
986
msgid "Notifications"
987
msgstr "Benachrichtigung"
988
989
- #: ../includes/Settings.class.php:486
990
msgid "Reply-To Name"
991
msgstr "Name für die Rückantwort"
992
993
- #: ../includes/Settings.class.php:487
994
msgid ""
995
"The name which should appear in the Reply-To field of a user notification "
996
"email"
@@ -998,11 +1043,11 @@ msgstr ""
998
"Der Name die im Rückantwortfeld einer Benachrichtigungs-Email an einen Gast "
999
"erscheinen soll."
1000
1001
- #: ../includes/Settings.class.php:498
1002
msgid "Reply-To Email Address"
1003
msgstr "Email Adresse für die Rückantwort"
1004
1005
- #: ../includes/Settings.class.php:499
1006
msgid ""
1007
"The email address which should appear in the Reply-To field of a user "
1008
"notification email."
@@ -1010,11 +1055,11 @@ msgstr ""
1010
"Email Adresse die im Rückantwortfeld einer Benachrichtigungs-Email an einen "
1011
"Gast erscheinen soll."
1012
1013
- #: ../includes/Settings.class.php:510
1014
msgid "Admin Notification"
1015
msgstr "Administrator Benachrichtigung"
1016
1017
- #: ../includes/Settings.class.php:511
1018
msgid ""
1019
"Send an email notification to an administrator when a new booking is "
1020
"requested."
@@ -1022,21 +1067,21 @@ msgstr ""
1022
"Sende eine Email Benachrichtigung an den Administrator wenn eine neue "
1023
"Reservierung angefragt worden ist."
1024
1025
- #: ../includes/Settings.class.php:521
1026
msgid "Admin Email Address"
1027
msgstr "Email Adresse des Administrators"
1028
1029
- #: ../includes/Settings.class.php:522
1030
msgid "The email address where admin notifications should be sent."
1031
msgstr ""
1032
"Email Adresse an die Administratoren-Benachrichtigungen gesendet werden "
1033
"sollen."
1034
1035
- #: ../includes/Settings.class.php:531
1036
msgid "Email Templates"
1037
msgstr "Email Vorlagen"
1038
1039
- #: ../includes/Settings.class.php:533
1040
msgid ""
1041
"Adjust the messages that are emailed to users and admins during the booking "
1042
"process."
@@ -1044,11 +1089,11 @@ msgstr ""
1044
"Passen Sie die E-Mail Nachrichten entsprechend an , die Reservierenden und "
1045
"Administratoren bei einer Reservierung automatisch zugeschickt werden."
1046
1047
- #: ../includes/Settings.class.php:543
1048
msgid "Template Tags"
1049
msgstr "Vorlagen Tags"
1050
1051
- #: ../includes/Settings.class.php:545
1052
msgid ""
1053
"Use the following tags to automatically add booking information to the "
1054
"emails. Tags labeled with an asterisk (*) can be used in the email subject "
@@ -1058,19 +1103,19 @@ msgstr ""
1058
"Emails hinzuzufügen. Tages die mit einem Stern (*) bezeichnet sind können "
1059
"auch in der Betreffzeile verwendet werden."
1060
1061
- #: ../includes/Settings.class.php:556
1062
msgid "Admin Notification Subject"
1063
msgstr "Betreffzeile für Adminstratorenbenachrichtigungen"
1064
1065
- #: ../includes/Settings.class.php:557
1066
msgid "The email subject for admin notifications."
1067
msgstr "Email Betreffzeile für Adminstratorenbenachrichtigungen"
1068
1069
- #: ../includes/Settings.class.php:568
1070
msgid "Admin Notification Email"
1071
msgstr "Email für Adminstratorenbenachrichtigungen"
1072
1073
- #: ../includes/Settings.class.php:569
1074
msgid ""
1075
"Enter the email an admin should receive when an initial booking request is "
1076
"made."
@@ -1078,21 +1123,21 @@ msgstr ""
1078
"Legen Sie die Email fest, die ein Adminstrator bei einer "
1079
"Reservierungsanfrage erhalten soll."
1080
1081
- #: ../includes/Settings.class.php:580
1082
msgid "New Request Email Subject"
1083
msgstr "Betreffzeile für eine neue Reservierungsanfrage"
1084
1085
- #: ../includes/Settings.class.php:581
1086
msgid ""
1087
"The email subject a user should receive when they make an initial booking "
1088
"request."
1089
msgstr "Die Email-Betreffzeile für eine neue Reservierungsanfrage"
1090
1091
- #: ../includes/Settings.class.php:592
1092
msgid "New Request Email"
1093
msgstr "Email einer neuer Reservierungsanfrage"
1094
1095
- #: ../includes/Settings.class.php:593
1096
msgid ""
1097
"Enter the email a user should receive when they make an initial booking "
1098
"request."
@@ -1100,11 +1145,11 @@ msgstr ""
1100
"Legen Sie die Email fest die ein Gast erhalten soll, wenn er eine "
1101
"Reservierungsanfrage geschickt hat."
1102
1103
- #: ../includes/Settings.class.php:604
1104
msgid "Confirmed Email Subject"
1105
msgstr "Betreffzeile für ein Bestätigungsemail"
1106
1107
- #: ../includes/Settings.class.php:605
1108
msgid ""
1109
"The email subject a user should receive when their booking has been "
1110
"confirmed."
@@ -1112,139 +1157,147 @@ msgstr ""
1112
"Betreffzeile einer Email die ein Gast erhalten soll wenn seine Reservierung "
1113
"bestätigt worden ist."
1114
1115
- #: ../includes/Settings.class.php:616
1116
msgid "Confirmed Email"
1117
msgstr "Bestätigungs-Email"
1118
1119
- #: ../includes/Settings.class.php:617
1120
msgid ""
1121
"Enter the email a user should receive when their booking has been confirmed."
1122
msgstr ""
1123
"Legen Sie die Email fest die ein Gast erhalten soll, wenn seine Reservierung "
1124
"bestätigt wird."
1125
1126
- #: ../includes/Settings.class.php:628
1127
msgid "Rejected Email Subject"
1128
msgstr "Betreffzeile für ein Ablehnungs-Email"
1129
1130
- #: ../includes/Settings.class.php:629
1131
msgid ""
1132
"The email subject a user should receive when their booking has been rejected."
1133
msgstr ""
1134
"Betreffzeile für einer Email die ein Gast erhalten soll falls seine "
1135
"Reservierungsanfrage abgelehnt werden musste."
1136
1137
- #: ../includes/Settings.class.php:640
1138
msgid "Rejected Email"
1139
msgstr "Ablehnungs-Email"
1140
1141
- #: ../includes/Settings.class.php:641
1142
msgid ""
1143
"Enter the email a user should receive when their booking has been rejected."
1144
msgstr ""
1145
"Legen Sie die Email fest die ein Gast erhalten soll, wenn seine "
1146
"Reservierungsanfrage abgelehnt werden muss."
1147
1148
- #: ../includes/Settings.class.php:659
1149
msgid "Any size"
1150
msgstr "Beliebige Anzahl"
1151
1152
- #: ../includes/Settings.class.php:743
1153
msgid "Book a table"
1154
msgstr "Reservierungsdaten"
1155
1156
- #: ../includes/Settings.class.php:746
1157
#: ../includes/WP_List_Table.BookingsTable.class.php:278
1158
msgid "Date"
1159
msgstr "Datum"
1160
1161
- #: ../includes/Settings.class.php:752
1162
msgid "Time"
1163
msgstr "Uhrzeit"
1164
1165
- #: ../includes/Settings.class.php:758
1166
#: ../includes/WP_List_Table.BookingsTable.class.php:279
1167
msgid "Party"
1168
msgstr "Personen"
1169
1170
- #: ../includes/Settings.class.php:771
1171
msgid "Contact Details"
1172
msgstr "Kontaktdaten"
1173
1174
- #: ../includes/Settings.class.php:774
1175
#: ../includes/WP_List_Table.BookingsTable.class.php:280
1176
msgid "Name"
1177
- msgstr "Name"
1178
1179
- #: ../includes/Settings.class.php:780
1180
#: ../includes/WP_List_Table.BookingsTable.class.php:281
1181
msgid "Email"
1182
- msgstr "Email"
1183
1184
- #: ../includes/Settings.class.php:789
1185
#: ../includes/WP_List_Table.BookingsTable.class.php:282
1186
msgid "Phone"
1187
msgstr "Telefonnummer"
1188
1189
- #: ../includes/Settings.class.php:797
1190
msgid "Add a Message"
1191
msgstr "Nachricht hinzufügen"
1192
1193
- #: ../includes/Settings.class.php:802
1194
- #: ../includes/WP_List_Table.BookingsTable.class.php:283
1195
- msgid "Message"
1196
- msgstr "Meldung"
1197
-
1198
- #: ../includes/Settings.class.php:847
1199
msgid "Email of the user who made the booking"
1200
msgstr "* Email an den Gast der die Reservierung gemacht hat"
1201
1202
- #: ../includes/Settings.class.php:848
1203
msgid "* Name of the user who made the booking"
1204
msgstr "* Name des Gastes auf den der Tisch reserviert ist"
1205
1206
- #: ../includes/Settings.class.php:849
1207
msgid "* Number of people booked"
1208
msgstr "* Anzahl der Gäste"
1209
1210
- #: ../includes/Settings.class.php:850
1211
msgid "* Date and time of the booking"
1212
msgstr "* Datum und Zeit der Reservierung"
1213
1214
- #: ../includes/Settings.class.php:851
1215
msgid "Phone number if supplied with the request"
1216
msgstr "Telefonnummer der Anfrage, falls angegeben"
1217
1218
- #: ../includes/Settings.class.php:852
1219
msgid "Message added to the request"
1220
msgstr "Gästemitteilung die der Anfrage hinzugefügt wurden"
1221
1222
- #: ../includes/Settings.class.php:853
1223
msgid "A link to the admin panel showing pending bookings"
1224
msgstr "Verweis zum Admin Panel das unbestätigte Reservierungen anzeigt "
1225
1226
- #: ../includes/Settings.class.php:854
1227
msgid ""
1228
"A link to confirm this booking. Only include this in admin notifications"
1229
msgstr ""
1230
"Link um diese Reservierung zu bestätigen. Nur bei Benachrichtigungen für "
1231
"Administratoren einfügen"
1232
1233
- #: ../includes/Settings.class.php:855
1234
msgid "A link to reject this booking. Only include this in admin notifications"
1235
msgstr ""
1236
"Link um diese Reservierung abzulehnen. Nur bei Benachrichtigungen für "
1237
"Administratoren einfügen"
1238
1239
- #: ../includes/Settings.class.php:856
1240
msgid "The name of this website"
1241
msgstr "Der Name dieser Webseite"
1242
1243
- #: ../includes/Settings.class.php:857
1244
msgid "A link to this website"
1245
msgstr "Ein Link zu dieser Webseite"
1246
1247
- #: ../includes/Settings.class.php:858
1248
msgid "Current date and time"
1249
msgstr "Aktuelle Zeit und Datum"
1250
@@ -1308,7 +1361,7 @@ msgstr "Bestätigt"
1308
1309
#: ../includes/WP_List_Table.BookingsTable.class.php:249
1310
msgid "Closed"
1311
- msgstr "Geschlossen"
1312
1313
#: ../includes/WP_List_Table.BookingsTable.class.php:250
1314
#: ../includes/WP_List_Table.BookingsTable.class.php:315
@@ -1323,56 +1376,56 @@ msgstr "Status"
1323
msgid "Edit"
1324
msgstr "Bearbeiten"
1325
1326
- #: ../includes/WP_List_Table.BookingsTable.class.php:344
1327
msgctxt "Status label for bookings put in the trash"
1328
msgid "Trash"
1329
msgstr "Papierkorb"
1330
1331
- #: ../includes/WP_List_Table.BookingsTable.class.php:376
1332
msgid "Delete"
1333
msgstr "Löschen"
1334
1335
- #: ../includes/WP_List_Table.BookingsTable.class.php:377
1336
msgid "Set To Confirmed"
1337
msgstr "Auf \"Bestätigt\" gestellt"
1338
1339
- #: ../includes/WP_List_Table.BookingsTable.class.php:378
1340
msgid "Set To Pending Review"
1341
msgstr "Auf \"Unbestätigt\" gestellt"
1342
1343
- #: ../includes/WP_List_Table.BookingsTable.class.php:379
1344
msgid "Set To Closed"
1345
msgstr "Auf \"Abgelehnt\" gestellt"
1346
1347
- #: ../includes/WP_List_Table.BookingsTable.class.php:494
1348
#, php-format
1349
msgid "%d booking deleted successfully."
1350
msgid_plural "%d bookings deleted successfully."
1351
msgstr[0] "%d Reservierung erfolgreich gelöscht "
1352
msgstr[1] "%d Reservierungen erfolgreich gelöscht "
1353
1354
- #: ../includes/WP_List_Table.BookingsTable.class.php:497
1355
#, php-format
1356
msgid "%d booking confirmed."
1357
msgid_plural "%d bookings confirmed."
1358
msgstr[0] "%d Reservierung bestätigt "
1359
msgstr[1] "%d Reservierungen bestätigt "
1360
1361
- #: ../includes/WP_List_Table.BookingsTable.class.php:500
1362
#, php-format
1363
msgid "%d booking set to pending."
1364
msgid_plural "%d bookings set to pending."
1365
msgstr[0] "%d Reservierung unbestätigt gestellt"
1366
msgstr[1] "%d Reservierungen unbestätigt gestellt"
1367
1368
- #: ../includes/WP_List_Table.BookingsTable.class.php:503
1369
#, php-format
1370
msgid "%d booking closed."
1371
msgid_plural "%d bookings closed."
1372
msgstr[0] "%d Reservierung abgelehnt"
1373
msgstr[1] "%d Reservierungen abgelehnt"
1374
1375
- #: ../includes/WP_List_Table.BookingsTable.class.php:515
1376
#, php-format
1377
msgid "%d booking had errors and could not be processed."
1378
msgid_plural "%d bookings had errors and could not be processed."
@@ -1380,11 +1433,11 @@ msgstr[0] "%d Reservierung hatte Fehler und konnte nicht verarbeitet werden."
1380
msgstr[1] ""
1381
"%d Reservierungen hatten Fehler und konnten nicht verarbeitet werden."
1382
1383
- #: ../includes/WP_List_Table.BookingsTable.class.php:691
1384
msgid "You're viewing bookings that have been moved to the trash."
1385
msgstr "Sie sehen Reservierungen die in den Papierkorb verschoben worden sind."
1386
1387
- #: ../includes/WP_List_Table.BookingsTable.class.php:693
1388
#, php-format
1389
msgctxt ""
1390
"Indicates which booking status is currently being filtered in the list of "
@@ -1392,18 +1445,18 @@ msgctxt ""
1392
msgid "You're viewing bookings that have been marked as %s."
1393
msgstr "Sie sehen eine Reservierung die als %s markiert wurde."
1394
1395
- #: ../includes/WP_List_Table.BookingsTable.class.php:698
1396
#, php-format
1397
msgctxt ""
1398
"Notification of booking date range, eg - bookings from 2014-12-02-2014-12-05"
1399
msgid "Only bookings from %s are being shown."
1400
msgstr "Es werden nur Reservierungen im Zeitraum %s angezeigt."
1401
1402
- #: ../includes/WP_List_Table.BookingsTable.class.php:700
1403
msgid "Only today's bookings are being shown."
1404
msgstr "Es werden nur Reservierungen von heute angezeigt."
1405
1406
- #: ../includes/WP_List_Table.BookingsTable.class.php:702
1407
msgid "Only upcoming bookings are being shown."
1408
msgstr "Es werden nur zukünfitige Reservierungen angezeigt."
1409
2
msgstr ""
3
"Project-Id-Version: Restaurant Reservations 1.2.3\n"
4
"Report-Msgid-Bugs-To: \n"
5
+ "POT-Creation-Date: 2015-03-02 13:17+0100\n"
6
+ "PO-Revision-Date: 2015-03-02 13:30+0100\n"
7
"Last-Translator: admin <admin@example.com>\n"
8
"Language-Team: mediaOffice GbR <support@mediaoffice.de>\n"
9
"Language: de\n"
93
"href=\"http://wordpress.org/support/plugin/restaurant-reservations\" \n"
94
"target=\"_blank\">support forums</a>."
95
96
+ #: ../includes/AdminBookings.class.php:43
97
msgctxt "Title of admin page that lists bookings"
98
msgid "Bookings"
99
msgstr "Reservierungen"
100
101
+ #: ../includes/AdminBookings.class.php:44
102
msgctxt "Title of bookings admin menu item"
103
msgid "Bookings"
104
msgstr "Reservierungen"
105
106
+ #: ../includes/AdminBookings.class.php:67
107
msgid "Restaurant Bookings"
108
msgstr "Reservierungen"
109
110
+ #: ../includes/AdminBookings.class.php:68
111
#: ../includes/CustomPostTypes.class.php:42
112
msgid "Add New"
113
msgstr "Neu hinzufügen"
114
115
+ #: ../includes/AdminBookings.class.php:116
116
+ #: ../includes/AdminBookings.class.php:157 ../restaurant-reservations.php:217
117
msgid "Add Booking"
118
msgstr "Reservierung hinzufügen"
119
120
+ #: ../includes/AdminBookings.class.php:119
121
+ #: ../includes/AdminBookings.class.php:160
122
msgid "Cancel"
123
msgstr "Abbrechen"
124
125
+ #: ../includes/AdminBookings.class.php:140
126
+ #: ../includes/WP_List_Table.BookingsTable.class.php:329
127
+ msgid "Send Email"
128
+ msgstr "E-Mail senden"
129
+
130
+ #: ../includes/AdminBookings.class.php:143
131
+ msgctxt "Label next to the email address to which an email will be sent"
132
+ msgid "To"
133
+ msgstr "An"
134
+
135
+ #: ../includes/AdminBookings.class.php:147
136
+ msgid "Subject"
137
+ msgstr "Betreff"
138
+
139
+ #: ../includes/AdminBookings.class.php:151 ../includes/Settings.class.php:817
140
+ #: ../includes/WP_List_Table.BookingsTable.class.php:283
141
+ msgid "Message"
142
+ msgstr "Meldung"
143
+
144
+ #: ../includes/AdminBookings.class.php:174
145
msgid "Close"
146
msgstr "Schliessen"
147
148
+ #: ../includes/AdminBookings.class.php:240
149
msgid "Booking Status"
150
msgstr "Status der Reservierungen"
151
152
+ #: ../includes/AdminBookings.class.php:248
153
msgid "Send notifications"
154
msgstr "Benachrichtigunen versenden"
155
156
+ #: ../includes/AdminBookings.class.php:253
157
msgid "Learn more"
158
msgstr "mehr Informationen"
159
160
+ #: ../includes/AdminBookings.class.php:254
161
msgid ""
162
"When adding a booking or changing a booking's status with this form, no "
163
"email notifications will be sent. Check this option if you want to send "
167
"Statusänderungen innerhalb dieses Formulars versandt. Wählen Sie diese "
168
"Option an, falls sie doch Email Benachrichtigungen versenden wollen."
169
170
+ #: ../includes/AdminBookings.class.php:308
171
#, php-format
172
msgid "You have been logged out. Please %slogin again%s."
173
msgstr "Sie wurden abgemeldet. Bitte %smelden%s Sie sich wieder an."
174
175
+ #: ../includes/AdminBookings.class.php:344
176
#, php-format
177
msgid ""
178
"This booking has been sent to the %sTrash%s where it can not be edited. Set "
182
"sie nicht bearbeitet werden. Bitte setzten Sie den Status auf \"Pendent\" "
183
"oder \"Bestätigt\" um sie bearbeiten zu können."
184
185
+ #: ../includes/AdminBookings.class.php:361
186
msgid ""
187
"The booking could not be retrieved. Please reload the page and try again."
188
msgstr ""
189
"Ihre Reservierung konnte nicht geladen werden. Bitte laden Sie die Seite neu "
190
"und versuchen Sie es noch einmal."
191
192
+ #: ../includes/AdminBookings.class.php:429
193
msgid ""
194
"Unable to trash this post. Please try again. If you continue to have "
195
"trouble, please refresh the page."
198
"versuchen Sie es nocheinmal. Falls Sie dann immer noch Probleme haben, laden "
199
"Sie die Seite neu."
200
201
+ #: ../includes/AdminBookings.class.php:471
202
+ msgid "Please enter a message before sending the email."
203
+ msgstr "Bitte geben Sie eine Nachricht ein bevor Sie die E-Mail verschicken."
204
+
205
+ #: ../includes/AdminBookings.class.php:480
206
+ msgid ""
207
+ "The email could not be sent because some critical information was missing."
208
+ msgstr ""
209
+ "Die E-Mail konnte nicht gesendet werden, weil einige wichtige Informationen "
210
+ "fehlten."
211
+
212
+ #: ../includes/AdminBookings.class.php:492
213
+ msgid "There was an error loading the booking and the email was not sent."
214
+ msgstr ""
215
+ "Fehler beim Laden der Reservierungsdaten. Es wurde keine E-Mail verschickt."
216
+
217
+ #: ../includes/Booking.class.php:180
218
msgid "Please enter the date you would like to book."
219
msgstr "Bitte geben Sie das Datum ein an dem Sie einen Tisch buchen wollen."
220
221
+ #: ../includes/Booking.class.php:190
222
msgid ""
223
"The date you entered is not valid. Please select from one of the dates in "
224
"the calendar."
226
"Das eingegebene Datum ist nicht gültig. Bitte wählen Sie ein Datum im "
227
"Kalender."
228
229
+ #: ../includes/Booking.class.php:201
230
msgid "Please enter the time you would like to book."
231
msgstr "Bitte geben Sie die Zeit ein an dem Sie einen Tisch buchen wollen."
232
233
+ #: ../includes/Booking.class.php:211
234
msgid ""
235
"The time you entered is not valid. Please select from one of the times "
236
"provided."
238
"Die eingegebene Zeit ist nicht gültig. Bitte wählen sie eine Zeit aus der "
239
"Zeitleiste."
240
241
+ #: ../includes/Booking.class.php:228
242
#, php-format
243
msgid "Sorry, bookings can not be made more than %s days in advance."
244
msgstr ""
245
"Wir bitten um Entschuldigung. Reservierungen können nicht mehr als %s Tage "
246
"im Voraus gebucht werden."
247
248
+ #: ../includes/Booking.class.php:239
249
msgid "Sorry, bookings can not be made in the past."
250
msgstr ""
251
"Wir bitten um Entschuldigung. Reservierungen können nicht in der "
252
"Vergangenheit gebucht werden."
253
254
+ #: ../includes/Booking.class.php:247
255
#, php-format
256
msgid "Sorry, bookings must be made more than %s days in advance."
257
msgstr ""
258
"Wir bitten um Entschuldigung. Reservierungen müssen mehr als %s Tage im "
259
"Voraus gebucht werden."
260
261
+ #: ../includes/Booking.class.php:249
262
#, php-format
263
msgid "Sorry, bookings must be made more than %s hours in advance."
264
msgstr ""
265
"Wir bitten um Entschuldigung. Reservierungen müssen mehr als %s Tage im "
266
"Voraus gebucht werden."
267
268
+ #: ../includes/Booking.class.php:251
269
#, php-format
270
+ msgid "Sorry, bookings must be made more than %s minutes in advance."
271
msgstr ""
272
"Wir bitten um Entschuldigung. Reservierungen müssen mehr als %s Minuten im "
273
"Voraus gebucht werden."
274
275
+ #: ../includes/Booking.class.php:290
276
msgid "Sorry, no bookings are being accepted then."
277
msgstr ""
278
"Wir bitten um Entschuldigung. Zu diesem Zeitpunkt können wir keine "
279
"Reservierung annehmen."
280
281
+ #: ../includes/Booking.class.php:342
282
msgid "Sorry, no bookings are being accepted on that date."
283
msgstr ""
284
"Wir bitten um Entschuldigung. Zu diesem Datum können wir keine Reservierung "
285
"annehmen."
286
287
+ #: ../includes/Booking.class.php:348
288
msgid "Sorry, no bookings are being accepted at that time."
289
msgstr ""
290
"Wir bitten um Entschuldigung. Für diese Uhrzeit können wir keine "
291
"Reservierung annehmen."
292
293
+ #: ../includes/Booking.class.php:370
294
msgid "Please enter a name for this booking."
295
msgstr "Bitte geben Sie an auf welchen Namen Sie den Tisch reservieren wollen."
296
297
+ #: ../includes/Booking.class.php:380
298
msgid "Please let us know how many people will be in your party."
299
msgstr "Bitte sagen sie uns wieviele Plätze Sie am Tisch benötigen."
300
301
+ #: ../includes/Booking.class.php:390
302
#, php-format
303
msgid "We only accept bookings for parties of up to %d people."
304
msgstr "Wir können leider nur Reservierungen bis %d Personen annehmen."
305
306
+ #: ../includes/Booking.class.php:401
307
msgid "Please enter an email address so we can confirm your booking."
308
msgstr ""
309
"Bitte geben Sie Ihre Email Adresse ein damit wir Ihnen die Reservierung "
310
"bestätigen können."
311
312
+ #: ../includes/Booking.class.php:423
313
msgid "Please complete this field to request a booking."
314
msgstr ""
315
"Bitte füllen Sie dieses Feld aus um eine Tischreserverationsanfrage "
379
#: ../includes/CustomPostTypes.class.php:97
380
msgctxt "Booking status for a closed booking"
381
msgid "Closed"
382
+ msgstr "Abgelehnt"
383
384
#: ../includes/CustomPostTypes.class.php:104
385
#, php-format
618
"<em>Diese Mitteilung haben Sie vom {site_link} um {current_time} erhalten.</"
619
"em>"
620
621
+ #: ../includes/Settings.class.php:170
622
+ #, php-format
623
+ msgctxt ""
624
+ "Default email subject sent to users when the admin sends a custom notice "
625
+ "email from the bookings panel."
626
+ msgid "Update regarding your booking at %s"
627
+ msgstr "Wir konnten leider Ihre Reservierung im %s nicht annehmen"
628
+
629
+ #: ../includes/Settings.class.php:221 ../includes/Settings.class.php:222
630
msgid "Settings"
631
msgstr "Einstellungen"
632
633
+ #: ../includes/Settings.class.php:234
634
msgid "General"
635
msgstr "Generelle Einstellungen"
636
637
+ #: ../includes/Settings.class.php:245
638
msgid "Booking Page"
639
msgstr "Reservierungsseite"
640
641
+ #: ../includes/Settings.class.php:246
642
msgid ""
643
"Select a page on your site to automatically display the booking form and "
644
"confirmation message."
646
"Wähen Sie eine Seite zur automatischen Anzeige des Buchungsformulars und "
647
"einer Bestätigungsmitteilung."
648
649
+ #: ../includes/Settings.class.php:262
650
msgid "Max Party Size"
651
msgstr "Maximale Anzahl Personen pro Reservierung"
652
653
+ #: ../includes/Settings.class.php:263
654
msgid "Set a maximum allowed party size for bookings."
655
msgstr "Definieren Sie die maximale Anzahl Gäste für eine Tischreservertion."
656
657
+ #: ../includes/Settings.class.php:275
658
msgid "Success Message"
659
msgstr "Erfolgsmeldung"
660
661
+ #: ../includes/Settings.class.php:276
662
msgid "Enter the message to display when a booking request is made."
663
msgstr ""
664
"Legen Sie die Mitteilung fest die erscheint, wenn eine Reservierungsanfrage "
665
"abgeschickt wurde"
666
667
+ #: ../includes/Settings.class.php:287
668
msgid "Date Format"
669
msgstr "Datumsformat"
670
671
+ #: ../includes/Settings.class.php:288
672
#, php-format
673
msgid ""
674
"Define how the date is formatted on the booking form. %sFormatting rules%s. "
681
"Benachrichtigungsmeldungen zu ändern, müssen Sie Ihre generellen %sWordPress "
682
"Einstellungen%s entsprechend anpassen."
683
684
+ #: ../includes/Settings.class.php:299
685
msgid "Time Format"
686
msgstr "Zeitformat"
687
688
+ #: ../includes/Settings.class.php:300
689
#, php-format
690
msgid ""
691
"Define how the time is formatted on the booking form. %sFormatting rules%s. "
698
"Benachrichtigungsmeldungen zu ändern, müssen Sie Ihre generellen \n"
699
"%sWordPress Einstellungen%s entsprechend anpassen."
700
701
+ #: ../includes/Settings.class.php:313
702
msgid "Language"
703
msgstr "Sprache"
704
705
+ #: ../includes/Settings.class.php:314
706
msgid ""
707
"Select a language to use for the booking form datepicker if it is different "
708
"than your WordPress language setting."
710
"Wählen Sie eine Sprache für die Datumsauswahl, falls diese unterschiedlich "
711
"von Ihrer WordPress Spracheinstellung ist."
712
713
+ #: ../includes/Settings.class.php:324
714
msgid "Booking Schedule"
715
msgstr "Reservierungsplan"
716
717
+ #: ../includes/Settings.class.php:331
718
msgid "Add new scheduling rule"
719
msgstr "Neue Reservierungsregel hinzufügen"
720
721
+ #: ../includes/Settings.class.php:332
722
msgctxt "Format of a scheduling rule"
723
msgid "Weekly"
724
msgstr "Wöchentlich"
725
726
+ #: ../includes/Settings.class.php:333
727
msgctxt "Format of a scheduling rule"
728
msgid "Monthly"
729
msgstr "Monatlich"
730
731
+ #: ../includes/Settings.class.php:334
732
msgctxt "Format of a scheduling rule"
733
msgid "Date"
734
msgstr "Täglich"
735
736
+ #: ../includes/Settings.class.php:335
737
msgctxt "Label for selecting days of the week in a scheduling rule"
738
msgid "Days of the week"
739
msgstr "Tage in der Woche"
740
741
+ #: ../includes/Settings.class.php:336
742
msgctxt "Label for selecting weeks of the month in a scheduling rule"
743
msgid "Weeks of the month"
744
msgstr "Wochen eines Monats"
745
746
+ #: ../includes/Settings.class.php:337
747
msgctxt "Label to select a date for a scheduling rule"
748
msgid "Date"
749
msgstr "Datum"
750
751
+ #: ../includes/Settings.class.php:338
752
msgctxt "Label to select a time slot for a scheduling rule"
753
msgid "Time"
754
msgstr "Uhrzeit"
755
756
+ #: ../includes/Settings.class.php:339
757
msgctxt "Label to set a scheduling rule to last all day"
758
msgid "All day"
759
msgstr "Ganztägig"
760
761
+ #: ../includes/Settings.class.php:340
762
msgctxt "Label for the starting time of a scheduling rule"
763
msgid "Start"
764
msgstr "Startzeit"
765
766
+ #: ../includes/Settings.class.php:341
767
msgctxt "Label for the ending time of a scheduling rule"
768
msgid "End"
769
msgstr "Endzeit"
770
771
+ #: ../includes/Settings.class.php:342
772
#, php-format
773
msgctxt ""
774
"Prompt displayed when a scheduling rule is set without any time restrictions"
775
msgid "All day long. Want to %sset a time slot%s?"
776
msgstr "Ganztägig. Wollen Sie eine %sZeitdauer%s festlegen?"
777
778
+ #: ../includes/Settings.class.php:343
779
msgctxt "Toggle a scheduling rule open and closed"
780
msgid "Open and close this rule"
781
msgstr "Öffnen und Schliessen dieser Regel"
782
783
+ #: ../includes/Settings.class.php:344
784
msgctxt "Delete a scheduling rule"
785
msgid "Delete rule"
786
msgstr "Regel löschen"
787
788
+ #: ../includes/Settings.class.php:345
789
msgid "Delete scheduling rule"
790
msgstr "Reservierungsregel löschen"
791
792
+ #: ../includes/Settings.class.php:346
793
msgctxt ""
794
"Brief default description of a scheduling rule when no weekdays or weeks are "
795