Event Tickets - Version 4.5

Version Description

Download this release

Release Info

Developer bordoni
Plugin Icon 128x128 Event Tickets
Version 4.5
Comparing to
See all releases

Code changes from version 4.4.10 to 4.5

common/lang/tribe-common.pot CHANGED
@@ -4,11 +4,11 @@ msgid ""
4
  msgstr ""
5
  "Project-Id-Version: Tribe Common 4.5.5\n"
6
  "Report-Msgid-Bugs-To: http://m.tri.be/191x\n"
7
- "POT-Creation-Date: 2017-06-14 15:06:01+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=UTF-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
11
- "PO-Revision-Date: 2017-06-14 15:06\n"
12
  "Last-Translator: \n"
13
  "Language-Team: \n"
14
 
4
  msgstr ""
5
  "Project-Id-Version: Tribe Common 4.5.5\n"
6
  "Report-Msgid-Bugs-To: http://m.tri.be/191x\n"
7
+ "POT-Creation-Date: 2017-06-15 15:13:57+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=UTF-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
11
+ "PO-Revision-Date: 2017-06-15 15:13\n"
12
  "Last-Translator: \n"
13
  "Language-Team: \n"
14
 
common/readme.txt CHANGED
@@ -1 +1,6 @@
1
  === Tribe Common ===
 
 
 
 
 
1
  === Tribe Common ===
2
+
3
+ = [4.5.6] 2017-06-22 =
4
+
5
+ * Fix - Resolved issue where the Meta Chunker attempted to inappropriately chunk meta for post post_types [80857]
6
+ * Language - 0 new strings added, 0 updated, 1 fuzzied, and 0 obsoleted [tribe-common]
common/src/Tribe/Main.php CHANGED
@@ -17,7 +17,7 @@ class Tribe__Main {
17
  const OPTIONNAME = 'tribe_events_calendar_options';
18
  const OPTIONNAMENETWORK = 'tribe_events_calendar_network_options';
19
 
20
- const VERSION = '4.5.5';
21
 
22
  const FEED_URL = 'https://theeventscalendar.com/feed/';
23
 
17
  const OPTIONNAME = 'tribe_events_calendar_options';
18
  const OPTIONNAMENETWORK = 'tribe_events_calendar_network_options';
19
 
20
+ const VERSION = '4.5.6';
21
 
22
  const FEED_URL = 'https://theeventscalendar.com/feed/';
23
 
common/src/Tribe/Meta/Chunker.php CHANGED
@@ -34,6 +34,11 @@
34
  * or filter the `tribe_meta_chunker_post_types` filter.
35
  */
36
  class Tribe__Meta__Chunker {
 
 
 
 
 
37
  /**
38
  * @var string
39
  */
@@ -44,6 +49,12 @@ class Tribe__Meta__Chunker {
44
  */
45
  protected $chunks_cache = null;
46
 
 
 
 
 
 
 
47
  /**
48
  * @var string The separator that's used to mark the start of each chunk.
49
  */
@@ -52,7 +63,7 @@ class Tribe__Meta__Chunker {
52
  /**
53
  * @var array The post types supported by the Chunker.
54
  */
55
- protected $post_types = array( 'post' );
56
 
57
  /**
58
  * @var int The filter priority at which Chunker will operate on meta CRUD operations.
@@ -87,7 +98,7 @@ class Tribe__Meta__Chunker {
87
  add_filter( 'update_post_metadata', array( $this, 'filter_update_metadata' ), $this->filter_priority, 4 );
88
  add_filter( 'delete_post_metadata', array( $this, 'filter_delete_metadata' ), $this->filter_priority, 3 );
89
  add_filter( 'add_post_metadata', array( $this, 'filter_add_metadata' ), $this->filter_priority, 4 );
90
- add_filter( 'get_post_metadata', array( $this, 'filter_get_metadata' ), $this->filter_priority, 3 );
91
  add_action( 'deleted_post', array( $this, 'remove_post_entry' ) );
92
  }
93
 
@@ -103,7 +114,8 @@ class Tribe__Meta__Chunker {
103
  return;
104
  }
105
 
106
- $this->chunks_cache = array();
 
107
 
108
  $chunked_keys = get_option( $this->chunked_keys_option_name );
109
 
@@ -115,6 +127,7 @@ class Tribe__Meta__Chunker {
115
  if ( ! is_array( $keys ) || empty( $keys ) ) {
116
  continue;
117
  }
 
118
  foreach ( $keys as $key ) {
119
  $this->chunks_cache[ $this->get_key( $post_id, $key ) ] = null;
120
  }
@@ -181,6 +194,8 @@ class Tribe__Meta__Chunker {
181
  $this->chunks_cache[ $key ] = null;
182
  }
183
 
 
 
184
  $option = (array) get_option( $this->chunked_keys_option_name );
185
 
186
  if ( ! isset( $option[ $post_id ] ) ) {
@@ -238,8 +253,26 @@ class Tribe__Meta__Chunker {
238
  return $check;
239
  }
240
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
241
  $this->delete_chunks( $object_id, $meta_key );
242
  $this->remove_checksum_for( $object_id, $meta_key );
 
243
 
244
  if ( $this->should_be_chunked( $object_id, $meta_key, $meta_value ) ) {
245
  $this->insert_chunks( $object_id, $meta_key );
@@ -266,9 +299,20 @@ class Tribe__Meta__Chunker {
266
  protected function applies( $object_id, $meta_key ) {
267
  $applies = ! $this->is_chunker_logic_meta_key( $meta_key )
268
  && $this->is_supported_post_type( $object_id )
269
- && ( empty( $meta_key ) || $this->is_chunkable( $object_id, $meta_key ) );
270
 
271
- return $applies;
 
 
 
 
 
 
 
 
 
 
 
272
  }
273
 
274
  /**
@@ -285,17 +329,20 @@ class Tribe__Meta__Chunker {
285
  /**
286
  * Whether a post ID and meta key couple is registered as chunkable or not.
287
  *
 
 
 
288
  * @param int $post_id
289
  * @param string $meta_key
290
  *
291
  * @return bool
292
  */
293
- public function is_chunkable( $post_id, $meta_key ) {
294
- $key = $this->get_key( $post_id, $meta_key );
295
-
296
  $this->prime_chunks_cache();
297
 
298
- return array_key_exists( $key, $this->chunks_cache );
 
 
299
  }
300
 
301
  /**
@@ -612,12 +659,29 @@ class Tribe__Meta__Chunker {
612
  return $check;
613
  }
614
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
615
  $has_chunked_meta = $this->is_chunked( $object_id, $meta_key );
616
  if ( ! $has_chunked_meta ) {
617
  return $check;
618
  }
619
  $this->cache_delete( $object_id, $meta_key );
620
  $this->delete_chunks( $object_id, $meta_key );
 
621
 
622
  return true;
623
  }
@@ -670,12 +734,11 @@ class Tribe__Meta__Chunker {
670
  * Unhooks the Chunker from the metadata operations.
671
  */
672
  public function unhook() {
673
- foreach ( $this->post_types as $post_type ) {
674
- remove_filter( "update_{$post_type}_metadata", array( $this, 'filter_update_metadata' ), $this->filter_priority );
675
- remove_filter( "delete_{$post_type}_metadata", array( $this, 'filter_delete_metadata' ), $this->filter_priority );
676
- remove_filter( "add_{$post_type}_metadata", array( $this, 'filter_add_metadata' ), $this->filter_priority );
677
- remove_filter( "get_{$post_type}_metadata", array( $this, 'filter_get_metadata' ), $this->filter_priority );
678
- }
679
  }
680
 
681
  /**
@@ -690,27 +753,46 @@ class Tribe__Meta__Chunker {
690
  *
691
  * @see get_metadata()
692
  */
693
- public function filter_get_metadata( $check, $object_id, $meta_key ) {
694
  if ( ! $this->applies( $object_id, $meta_key ) ) {
695
  return $check;
696
  }
697
 
 
 
 
 
 
 
 
698
  // getting all the meta
699
  if ( empty( $meta_key ) ) {
700
- return $this->get_all_meta_for( $object_id );
701
  }
702
 
703
- $key = $this->get_key( $object_id, $meta_key );
704
- if ( $this->is_chunked( $object_id, $meta_key ) ) {
705
- $glued = maybe_unserialize( $this->glue_chunks( $this->chunks_cache[ $key ] ) );
706
- }
707
 
708
- if ( ! empty( $glued ) ) {
709
- // why not take $single into account? See condition check on the filter to understand.
710
- return array( $glued );
711
- }
 
 
 
 
 
 
 
 
712
 
713
- return $check;
 
 
 
 
714
  }
715
 
716
  /**
@@ -777,6 +859,21 @@ class Tribe__Meta__Chunker {
777
  * @return array|null|object
778
  */
779
  protected function get_all_meta( $object_id ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
780
  /** @var wpdb $wpdb */
781
  global $wpdb;
782
  $query = $wpdb->prepare( "SELECT meta_key, meta_value FROM {$wpdb->postmeta} WHERE post_id = %d", $object_id );
@@ -823,6 +920,15 @@ class Tribe__Meta__Chunker {
823
  return $this->chunked_keys_option_name;
824
  }
825
 
 
 
 
 
 
 
 
 
 
826
  /**
827
  * Asserts that a meta key is not a chunk meta key.
828
  *
@@ -854,4 +960,4 @@ class Tribe__Meta__Chunker {
854
  delete_option( $this->chunked_keys_option_name );
855
  }
856
  }
857
- }
34
  * or filter the `tribe_meta_chunker_post_types` filter.
35
  */
36
  class Tribe__Meta__Chunker {
37
+ /**
38
+ * @var string The key used to cache the class results in the WordPress object cache.
39
+ */
40
+ protected $cache_group = 'post_meta';
41
+
42
  /**
43
  * @var string
44
  */
49
  */
50
  protected $chunks_cache = null;
51
 
52
+ /**
53
+ * @var array The cache that will store the IDs of the posts that have at least one meta key registered
54
+ * for chunking.
55
+ */
56
+ protected $post_ids_cache = null;
57
+
58
  /**
59
  * @var string The separator that's used to mark the start of each chunk.
60
  */
63
  /**
64
  * @var array The post types supported by the Chunker.
65
  */
66
+ protected $post_types = array();
67
 
68
  /**
69
  * @var int The filter priority at which Chunker will operate on meta CRUD operations.
98
  add_filter( 'update_post_metadata', array( $this, 'filter_update_metadata' ), $this->filter_priority, 4 );
99
  add_filter( 'delete_post_metadata', array( $this, 'filter_delete_metadata' ), $this->filter_priority, 3 );
100
  add_filter( 'add_post_metadata', array( $this, 'filter_add_metadata' ), $this->filter_priority, 4 );
101
+ add_filter( 'get_post_metadata', array( $this, 'filter_get_metadata' ), $this->filter_priority, 4 );
102
  add_action( 'deleted_post', array( $this, 'remove_post_entry' ) );
103
  }
104
 
114
  return;
115
  }
116
 
117
+ $this->chunks_cache = array();
118
+ $this->post_ids_cache = array();
119
 
120
  $chunked_keys = get_option( $this->chunked_keys_option_name );
121
 
127
  if ( ! is_array( $keys ) || empty( $keys ) ) {
128
  continue;
129
  }
130
+ $this->post_ids_cache[] = $post_id;
131
  foreach ( $keys as $key ) {
132
  $this->chunks_cache[ $this->get_key( $post_id, $key ) ] = null;
133
  }
194
  $this->chunks_cache[ $key ] = null;
195
  }
196
 
197
+ $this->post_ids_cache[] = $post_id;
198
+
199
  $option = (array) get_option( $this->chunked_keys_option_name );
200
 
201
  if ( ! isset( $option[ $post_id ] ) ) {
253
  return $check;
254
  }
255
 
256
+ /**
257
+ * Filters the chunked meta update operation.
258
+ *
259
+ * Returning a non null value here will make the function return that value immediately.
260
+ *
261
+ * @param mixed $updated
262
+ * @param int $object_id The post ID
263
+ * @param string $meta_key
264
+ * @param mixed $meta_value
265
+ *
266
+ * @since 4.5.6
267
+ */
268
+ $updated = apply_filters( 'tribe_meta_chunker_update_meta', null, $object_id, $meta_key, $meta_value );
269
+ if ( null !== $updated ) {
270
+ return $updated;
271
+ }
272
+
273
  $this->delete_chunks( $object_id, $meta_key );
274
  $this->remove_checksum_for( $object_id, $meta_key );
275
+ wp_cache_delete( $object_id, $this->cache_group );
276
 
277
  if ( $this->should_be_chunked( $object_id, $meta_key, $meta_value ) ) {
278
  $this->insert_chunks( $object_id, $meta_key );
299
  protected function applies( $object_id, $meta_key ) {
300
  $applies = ! $this->is_chunker_logic_meta_key( $meta_key )
301
  && $this->is_supported_post_type( $object_id )
302
+ && $this->is_chunkable( $object_id, $meta_key );
303
 
304
+ /**
305
+ * Filters whether the meta chunker will apply to a post ID and meta key or not.
306
+ *
307
+ * The `$meta_key` parameter might be empty.
308
+ *
309
+ * @param bool $applies
310
+ * @param int $object_id
311
+ * @param string $meta_key
312
+ *
313
+ * @since 4.5.6
314
+ */
315
+ return apply_filters( 'tribe_meta_chunker_applies', $applies, $object_id, $meta_key );
316
  }
317
 
318
  /**
329
  /**
330
  * Whether a post ID and meta key couple is registered as chunkable or not.
331
  *
332
+ * If no meta key is passed then the function will check if there is at least
333
+ * one meta key registered for chunking for the specified post ID.
334
+ *
335
  * @param int $post_id
336
  * @param string $meta_key
337
  *
338
  * @return bool
339
  */
340
+ public function is_chunkable( $post_id, $meta_key = null ) {
 
 
341
  $this->prime_chunks_cache();
342
 
343
+ return ! empty( $meta_key )
344
+ ? array_key_exists( $this->get_key( $post_id, $meta_key ), $this->chunks_cache )
345
+ : in_array( $post_id, $this->post_ids_cache );
346
  }
347
 
348
  /**
659
  return $check;
660
  }
661
 
662
+ /**
663
+ * Filters the value returned when deleting a specific meta for a post.
664
+ *
665
+ * Returning a non null value here will make the function return that value immediately.
666
+ *
667
+ * @param mixed $deleted
668
+ * @param int $object_id The post ID
669
+ * @param string $meta_key The requested meta key
670
+ *
671
+ * @since 4.5.6
672
+ */
673
+ $deleted = apply_filters( 'tribe_meta_chunker_delete_meta', null, $object_id, $meta_key );
674
+ if ( null !== $deleted ) {
675
+ return $deleted;
676
+ }
677
+
678
  $has_chunked_meta = $this->is_chunked( $object_id, $meta_key );
679
  if ( ! $has_chunked_meta ) {
680
  return $check;
681
  }
682
  $this->cache_delete( $object_id, $meta_key );
683
  $this->delete_chunks( $object_id, $meta_key );
684
+ wp_cache_delete( $object_id, $this->cache_group );
685
 
686
  return true;
687
  }
734
  * Unhooks the Chunker from the metadata operations.
735
  */
736
  public function unhook() {
737
+ remove_filter( 'update_post_metadata', array( $this, 'filter_update_metadata' ), $this->filter_priority );
738
+ remove_filter( 'delete_post_metadata', array( $this, 'filter_delete_metadata' ), $this->filter_priority );
739
+ remove_filter( 'add_post_metadata', array( $this, 'filter_add_metadata' ), $this->filter_priority );
740
+ remove_filter( 'get_post_metadata', array( $this, 'filter_get_metadata' ), $this->filter_priority );
741
+ remove_action( 'deleted_post', array( $this, 'remove_post_entry' ) );
 
742
  }
743
 
744
  /**
753
  *
754
  * @see get_metadata()
755
  */
756
+ public function filter_get_metadata( $check, $object_id, $meta_key, $single ) {
757
  if ( ! $this->applies( $object_id, $meta_key ) ) {
758
  return $check;
759
  }
760
 
761
+ $all_meta = wp_cache_get( $object_id, $this->cache_group );
762
+
763
+ if ( ! $all_meta ) {
764
+ $all_meta = $this->get_all_meta_for( $object_id );
765
+ wp_cache_set( $object_id, $all_meta, $this->cache_group );
766
+ }
767
+
768
  // getting all the meta
769
  if ( empty( $meta_key ) ) {
770
+ return $all_meta;
771
  }
772
 
773
+ // why not take $single into account? See condition check on the filter to understand.
774
+ $meta_value = isset( $all_meta[ $meta_key ] )
775
+ ? array_map( 'maybe_unserialize', $all_meta[ $meta_key ] )
776
+ : '';
777
 
778
+ /**
779
+ * Filters the value returned when getting a specific meta for a post.
780
+ *
781
+ * Returning a non null value here will make the function return that value immediately.
782
+ *
783
+ * @param mixed $meta_value
784
+ * @param int $object_id The post ID
785
+ * @param string $meta_key The requested meta key
786
+ *
787
+ * @since 4.5.6
788
+ */
789
+ $meta_value = apply_filters( 'tribe_meta_chunker_get_meta', $meta_value, $object_id, $meta_key );
790
 
791
+ if ( $single ) {
792
+ return (array) $meta_value;
793
+ } else {
794
+ return ! empty( $meta_value ) ? $meta_value : '';
795
+ }
796
  }
797
 
798
  /**
859
  * @return array|null|object
860
  */
861
  protected function get_all_meta( $object_id ) {
862
+ /**
863
+ * Filters the value returned when getting all the meta for a post.
864
+ *
865
+ * Returning a non null value here will make the function return that value immediately.
866
+ *
867
+ * @param mixed $all_meta
868
+ * @param int $object_id The post ID
869
+ *
870
+ * @since 4.5.6
871
+ */
872
+ $all_meta = apply_filters( 'tribe_meta_chunker_get_all_meta', null, $object_id );
873
+ if ( null !== $all_meta ) {
874
+ return $all_meta;
875
+ }
876
+
877
  /** @var wpdb $wpdb */
878
  global $wpdb;
879
  $query = $wpdb->prepare( "SELECT meta_key, meta_value FROM {$wpdb->postmeta} WHERE post_id = %d", $object_id );
920
  return $this->chunked_keys_option_name;
921
  }
922
 
923
+ /**
924
+ * Returns the cache group used by the meta chunker.
925
+ *
926
+ * @return string
927
+ */
928
+ public function get_cache_group() {
929
+ return $this->cache_group;
930
+ }
931
+
932
  /**
933
  * Asserts that a meta key is not a chunk meta key.
934
  *
960
  delete_option( $this->chunked_keys_option_name );
961
  }
962
  }
963
+ }
common/src/resources/css/tribe-ui.css ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * This CSS file was auto-generated via PostCSS
3
+ *
4
+ * Contributors should avoid editing this file, but instead edit the associated
5
+ * src/resources/postcss/ file. For more information, check out our engineering
6
+ * docs on how we handle CSS in our engineering docs.
7
+ *
8
+ * @see: http://moderntribe.github.io/products-engineering/css/
9
+ */
10
+
11
+ .tribe-button {
12
+ border: 0;
13
+ border-radius: 3px;
14
+ background: #009FF1 -webkit-linear-gradient( top, #009FF1, #0080DB );
15
+ background: #009FF1 linear-gradient( to bottom, #009FF1, #0080DB );
16
+ cursor: pointer;
17
+ color: #fff;
18
+ display: inline-block;
19
+ font-size: 14px;
20
+ font-weight: 400;
21
+ font-family: sans-serif;
22
+ letter-spacing: 1px;
23
+ line-height: 1;
24
+ height: auto;
25
+ padding: 10px;
26
+ text-align: center;
27
+ -webkit-transition: all .15s ease-in;
28
+ transition: all .15s ease-in;
29
+ -webkit-font-smoothing: subpixel-antialiased;
30
+ }
31
+
32
+ .tribe-button:hover,
33
+ .tribe-button:active,
34
+ .tribe-button:focus {
35
+ background: #0080DB;
36
+ }
common/src/resources/css/tribe-ui.min.css ADDED
@@ -0,0 +1 @@
 
1
+ .tribe-button{border:0;border-radius:3px;background:#009ff1 -webkit-linear-gradient(top,#009ff1,#0080db);background:#009ff1 linear-gradient(180deg,#009ff1,#0080db);cursor:pointer;color:#fff;display:inline-block;font-size:14px;font-weight:400;font-family:sans-serif;letter-spacing:1px;line-height:1;height:auto;padding:10px;text-align:center;-webkit-transition:all .15s ease-in;transition:all .15s ease-in;-webkit-font-smoothing:subpixel-antialiased}.tribe-button:active,.tribe-button:focus,.tribe-button:hover{background:#0080db}
common/src/resources/images/spirit-animal.png CHANGED
Binary file
common/src/resources/postcss/tribe-ui.pcss ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ :root {
2
+ --button-light-color: #009FF1;
3
+ --button-dark-color: #0080DB;
4
+ }
5
+
6
+ .tribe-button {
7
+ border: 0;
8
+ border-radius: 3px;
9
+ background: var(--button-light-color) linear-gradient( to bottom, var(--button-light-color), var(--button-dark-color) );
10
+ cursor: pointer;
11
+ color: #fff;
12
+ display: inline-block;
13
+ font-size: 14px;
14
+ font-weight: 400;
15
+ font-family: sans-serif;
16
+ letter-spacing: 1px;
17
+ line-height: 1;
18
+ height: auto;
19
+ padding: 10px;
20
+ text-align: center;
21
+ transition: all .15s ease-in;
22
+ -webkit-font-smoothing: subpixel-antialiased;
23
+
24
+ &:hover,
25
+ &:active,
26
+ &:focus {
27
+ background: var(--button-dark-color);
28
+ }
29
+ }
common/tribe-common.php CHANGED
@@ -1,7 +1,7 @@
1
  <?php
2
  /*
3
  Description: An event settings framework for managing shared options
4
- Version: 4.5.5
5
  Author: Modern Tribe, Inc.
6
  Author URI: http://m.tri.be/1x
7
  Text Domain: tribe-common
1
  <?php
2
  /*
3
  Description: An event settings framework for managing shared options
4
+ Version: 4.5.6
5
  Author: Modern Tribe, Inc.
6
  Author URI: http://m.tri.be/1x
7
  Text Domain: tribe-common
event-tickets.php CHANGED
@@ -2,7 +2,7 @@
2
  /*
3
  Plugin Name: Event Tickets
4
  Description: Event Tickets allows your guests to RSVP from any post, page, or event.
5
- Version: 4.4.10
6
  Author: Modern Tribe, Inc.
7
  Author URI: http://m.tri.be/28
8
  License: GPLv2 or later
2
  /*
3
  Plugin Name: Event Tickets
4
  Description: Event Tickets allows your guests to RSVP from any post, page, or event.
5
+ Version: 4.5
6
  Author: Modern Tribe, Inc.
7
  Author URI: http://m.tri.be/28
8
  License: GPLv2 or later
lang/event-tickets-cs_CZ.po CHANGED
@@ -10,16 +10,45 @@ msgstr ""
10
  "X-Generator: GlotPress/1.0-alpha-1100\n"
11
  "Project-Id-Version: Event Tickets\n"
12
 
13
- #: src/views/tickets/rsvp.php:158
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
14
  msgid "You must have JavaScript activated to purchase tickets. Please enable JavaScript in your browser."
15
  msgstr ""
16
 
17
- #: src/template-tags/tickets.php:280
18
  msgctxt "ticket stock message (remaining stock)"
19
  msgid "%1$d Remaining"
20
  msgstr ""
21
 
22
- #: src/template-tags/tickets.php:283
23
  msgctxt "ticket stock message (pending stock)"
24
  msgid "%1$d Awaiting Review"
25
  msgstr ""
@@ -104,20 +133,20 @@ msgstr ""
104
  msgid "Location of Tickets form"
105
  msgstr ""
106
 
107
- #: src/template-tags/tickets.php:265
108
  msgid "Sold"
109
  msgstr ""
110
 
111
- #: src/template-tags/tickets.php:267
112
  msgctxt "separate going and remain RSVPs"
113
  msgid "RSVP'd Going"
114
  msgstr ""
115
 
116
- #: src/template-tags/tickets.php:272
117
  msgid "%s %d"
118
  msgstr ""
119
 
120
- #: src/template-tags/tickets.php:278
121
  msgctxt "ticket global stock message (remaining stock)"
122
  msgid "%1$d Remaining of the global stock"
123
  msgstr ""
@@ -163,12 +192,12 @@ msgctxt "order status label"
163
  msgid "RSVP: "
164
  msgstr ""
165
 
166
- #: src/views/tickets/rsvp.php:24
167
  msgctxt "form heading"
168
  msgid "RSVP"
169
  msgstr ""
170
 
171
- #: src/views/tickets/rsvp.php:127
172
  msgctxt "order status label"
173
  msgid "RSVP"
174
  msgstr ""
@@ -442,11 +471,11 @@ msgctxt "post type label"
442
  msgid "RSVPs"
443
  msgstr ""
444
 
445
- #: src/Tribe/Main.php:589
446
  msgid "Welcome to Event Tickets"
447
  msgstr ""
448
 
449
- #: src/Tribe/Main.php:724
450
  msgctxt "button text"
451
  msgid "RSVP"
452
  msgstr ""
@@ -470,16 +499,16 @@ msgctxt "attendee summary"
470
  msgid "Not Going:"
471
  msgstr ""
472
 
473
- #: src/Tribe/RSVP.php:158
474
  msgctxt "ticket provider"
475
  msgid "RSVP"
476
  msgstr ""
477
 
478
- #: src/Tribe/RSVP.php:274
479
  msgid "RSVP Tickets"
480
  msgstr ""
481
 
482
- #: src/Tribe/RSVP.php:275
483
  msgid "RSVP Ticket"
484
  msgstr ""
485
 
@@ -555,11 +584,11 @@ msgstr ""
555
  msgid "You can require that users log into your site before they are able to RSVP (or buy tickets). Please review your WordPress Membership option (via the General Settings admin screen) before adjusting this setting."
556
  msgstr ""
557
 
558
- #: src/template-tags/tickets.php:262
559
  msgid "global inventory"
560
  msgstr ""
561
 
562
- #: src/template-tags/tickets.php:285
563
  msgctxt "ticket stock message (cancelled stock)"
564
  msgid "%1$d Cancelled"
565
  msgstr ""
@@ -626,19 +655,19 @@ msgstr "Zobrazit (%s)"
626
  msgid "Update %s"
627
  msgstr "Aktualizovat"
628
 
629
- #: src/views/tickets/rsvp.php:38
630
  msgid "Please fill in the RSVP confirmation name and email fields."
631
  msgstr ""
632
 
633
- #: src/views/tickets/rsvp.php:98
634
  msgid "Send RSVP confirmation to:"
635
  msgstr ""
636
 
637
- #: src/views/tickets/rsvp.php:137
638
  msgid "Don't list me on the public attendee list"
639
  msgstr "Neuvádějte mě na veřejném seznamu účastníků"
640
 
641
- #: src/views/tickets/rsvp.php:147
642
  msgid "Login to RSVP"
643
  msgstr ""
644
 
@@ -646,7 +675,7 @@ msgstr ""
646
  msgid "Event Tickets allows your guests to RSVP from any post, page, or event."
647
  msgstr ""
648
 
649
- #: src/Tribe/Main.php:724
650
  msgid "Buy"
651
  msgstr ""
652
 
@@ -658,35 +687,35 @@ msgstr ""
658
  msgid "Please enter in without thousand separators and currency symbols."
659
  msgstr ""
660
 
661
- #: src/Tribe/RSVP.php:734
662
  msgid "You confirmed you will not be attending %s"
663
  msgstr ""
664
 
665
- #: src/Tribe/Tickets.php:946
666
  msgid "Use global stock"
667
  msgstr ""
668
 
669
- #: src/Tribe/Tickets.php:947
670
  msgid "Use global stock but cap sales"
671
  msgstr ""
672
 
673
- #: src/Tribe/Tickets.php:948
674
  msgid "Independent (do not use global stock)"
675
  msgstr ""
676
 
677
- #: src/Tribe/Tickets.php:1405
678
  msgid "Tickets are not available as this %s has passed."
679
  msgstr ""
680
 
681
- #: src/Tribe/Tickets.php:1407
682
  msgid "Tickets are not yet available."
683
  msgstr ""
684
 
685
- #: src/Tribe/Tickets.php:1409
686
  msgid "Tickets are no longer available."
687
  msgstr ""
688
 
689
- #: src/Tribe/Tickets.php:1411
690
  msgid "There are no tickets available at this time."
691
  msgstr ""
692
 
@@ -777,39 +806,39 @@ msgstr ""
777
  msgid "Free"
778
  msgstr "Zdarma"
779
 
780
- #: src/Tribe/Main.php:488
781
  msgid "If you have a valid license for one of our paid plugins, you can %s in our premium support forums. Our support team monitors the forums and will respond to your thread within 24-48 hours (during the week)."
782
  msgstr ""
783
 
784
- #: src/Tribe/RSVP.php:996
785
  msgid "You can't RSVP more than the total remaining tickets."
786
  msgstr "Nemůžete potvrdit účast pro více než kolik je k dispozici zbývajících vstupenek."
787
 
788
- #: src/Tribe/RSVP.php:1408
789
  msgid "Return to the %1$sAttendees Report%2$s."
790
  msgstr "Zpět na %1$spřehled účastníků%2$s."
791
 
792
- #: src/Tribe/RSVP.php:1415
793
  msgid "Post updated. %1$s"
794
  msgstr "Příspěvek byl aktualizován. %1$s"
795
 
796
- #: src/Tribe/RSVP.php:1419
797
  msgid "Post published. %1$s"
798
  msgstr "Příspěvek byl publikován. %1$s"
799
 
800
- #: src/Tribe/RSVP.php:1422
801
  msgid "Post submitted."
802
  msgstr "Příspěvek byl odeslán ke schválení."
803
 
804
- #: src/Tribe/RSVP.php:1423
805
  msgid "Post scheduled."
806
  msgstr "Příspěvek bude automaticky publikován."
807
 
808
- #: src/Tribe/RSVP.php:1424
809
  msgid "Post draft updated."
810
  msgstr "Koncept příspěvku byl uložen."
811
 
812
- #: src/Tribe/Tickets.php:661
813
  msgid "Editing the ticket price is currently disallowed."
814
  msgstr "Upravovaní ceny vstupenky není aktuálně povoleno."
815
 
@@ -861,59 +890,59 @@ msgstr "Zrušit"
861
  msgid "When The Events Calendar and Event Tickets are both activated, The Events Calendar must be running version %1$s or greater. Please %2$supdate now.%3$s"
862
  msgstr ""
863
 
864
- #: src/Tribe/Main.php:434
865
  msgid "Support for Event Tickets"
866
  msgstr ""
867
 
868
- #: src/Tribe/Main.php:436
869
  msgid "Settings overview"
870
  msgstr "Přehled nastavení"
871
 
872
- #: src/Tribe/Main.php:437
873
  msgid "Features overview"
874
  msgstr "Přehled funkcí"
875
 
876
- #: src/Tribe/Main.php:438
877
  msgid "Troubleshooting common problems"
878
  msgstr ""
879
 
880
- #: src/Tribe/Main.php:439
881
  msgid "Customizing Event Tickets"
882
  msgstr ""
883
 
884
- #: src/Tribe/Main.php:456
885
  msgid "New User Primer"
886
  msgstr ""
887
 
888
- #: src/Tribe/Main.php:458
889
  msgid "We are committed to helping you sell tickets for your event. Check out our handy %s to get started."
890
  msgstr ""
891
 
892
- #: src/Tribe/Main.php:475
893
  msgid "open-source forum on WordPress.org"
894
  msgstr ""
895
 
896
- #: src/Tribe/Main.php:476
897
  msgid "If you have tried the above steps and are still having trouble, you can post a new thread to our %s. Our support staff monitors these forums once a week and would be happy to assist you there."
898
  msgstr ""
899
 
900
- #: src/Tribe/Main.php:478
901
  msgid "premium support on our website"
902
  msgstr ""
903
 
904
- #: src/Tribe/Main.php:479
905
  msgid "Events Tickets Plus"
906
  msgstr "Events Tickets Plus"
907
 
908
- #: src/Tribe/Main.php:480
909
  msgid "Looking for more immediate support? We offer %1$s with the purchase of any of our premium plugins (like %2$s). Pick up a license and you can post there directly and expect a response within 24-48 hours during weekdays."
910
  msgstr ""
911
 
912
- #: src/Tribe/Main.php:482 src/Tribe/Main.php:487
913
  msgid "post a thread"
914
  msgstr ""
915
 
916
- #: src/Tribe/Main.php:483
917
  msgid "Already have Events Tickets Plus? You can %s in our premium support forums. Our support team monitors the forums and will respond to your thread within 24-48 hours (during the week)."
918
  msgstr ""
919
 
@@ -951,7 +980,7 @@ msgid "Print"
951
  msgstr "Tisk"
952
 
953
  #: src/Tribe/Attendees_Table.php:490
954
- #: src/admin-views/admin-welcome-message.php:36 src/views/tickets/rsvp.php:118
955
  msgid "Email"
956
  msgstr "Email"
957
 
@@ -975,32 +1004,32 @@ msgstr "Obrázek v záhlaví vstupenky"
975
  msgid "Set as ticket header"
976
  msgstr "Použít jako obrázek v záhlaví vstupenky"
977
 
978
- #: src/Tribe/RSVP.php:236
979
  msgctxt "Attendee number"
980
  msgid "Attendee %1$s"
981
  msgstr "Účastník %1$s"
982
 
983
- #: src/Tribe/RSVP.php:704
984
  msgid "Your tickets from %s"
985
  msgstr "Vaše vstupenky z webu %s"
986
 
987
- #: src/Tribe/RSVP.php:990
988
  msgid "Your RSVP has been received! Check your email for your RSVP confirmation."
989
  msgstr "Vaše potvrzení účasti bylo přijato. Zkontrolujte prosím emailovou schránku, kam byl odeslán kontrolní email."
990
 
991
- #: src/Tribe/RSVP.php:1001
992
  msgid "In order to RSVP, you must enter your name and a valid email address."
993
  msgstr "Pro potvrzení účasti musíte zadat své jméno a platnou emailovou adresu."
994
 
995
- #: src/Tribe/RSVP.php:1140
996
  msgid "(deleted)"
997
  msgstr "(smazáno)"
998
 
999
- #: src/Tribe/Tickets.php:429
1000
  msgid "Your ticket has been saved."
1001
  msgstr "Vaše vstupenka byla uložena."
1002
 
1003
- #: src/Tribe/Tickets.php:607
1004
  msgid "Your ticket has been deleted."
1005
  msgstr "Vaše vstupenka byla smazána."
1006
 
@@ -1189,25 +1218,25 @@ msgstr "Kupující"
1189
  msgid "RSVP"
1190
  msgstr "Potvrzení účasti"
1191
 
1192
- #: src/views/tickets/rsvp.php:68
1193
  msgid "%1$s out of %2$s available"
1194
  msgstr "%1$s z celkem %2$s k dispozici"
1195
 
1196
- #: src/views/tickets/rsvp.php:72
1197
  msgid "Out of stock!"
1198
  msgstr "Není skladem!"
1199
 
1200
- #: src/views/tickets/rsvp.php:110
1201
  msgid "Full Name"
1202
  msgstr ""
1203
 
1204
- #: src/views/tickets/rsvp.php:149
1205
  msgid "Confirm RSVP"
1206
  msgstr "Potvrdit účast"
1207
 
1208
- #. #-#-#-#-# event-tickets.pot (Event Tickets 4.4.10) #-#-#-#-#
1209
  #. Plugin Name of the plugin/theme
1210
- #: src/Tribe/Main.php:502
1211
  msgid "Event Tickets"
1212
  msgstr "Event Tickets"
1213
 
10
  "X-Generator: GlotPress/1.0-alpha-1100\n"
11
  "Project-Id-Version: Event Tickets\n"
12
 
13
+ #: src/template-tags/tickets.php:185
14
+ msgctxt "list view stock sold out"
15
+ msgid "Sold out"
16
+ msgstr ""
17
+
18
+ #: src/template-tags/tickets.php:197
19
+ msgid "%s spot left"
20
+ msgid_plural "%s spots left"
21
+ msgstr[0] ""
22
+ msgstr[1] ""
23
+ msgstr[2] ""
24
+
25
+ #: src/template-tags/tickets.php:199
26
+ msgid "%s ticket left"
27
+ msgid_plural "%s tickets left"
28
+ msgstr[0] ""
29
+ msgstr[1] ""
30
+ msgstr[2] ""
31
+
32
+ #: src/template-tags/tickets.php:208
33
+ msgctxt "list view rsvp now ticket button"
34
+ msgid "RSVP Now!"
35
+ msgstr ""
36
+
37
+ #: src/template-tags/tickets.php:211
38
+ msgctxt "list view buy now ticket button"
39
+ msgid "Buy Now!"
40
+ msgstr ""
41
+
42
+ #: src/views/tickets/rsvp.php:189
43
  msgid "You must have JavaScript activated to purchase tickets. Please enable JavaScript in your browser."
44
  msgstr ""
45
 
46
+ #: src/template-tags/tickets.php:386
47
  msgctxt "ticket stock message (remaining stock)"
48
  msgid "%1$d Remaining"
49
  msgstr ""
50
 
51
+ #: src/template-tags/tickets.php:389
52
  msgctxt "ticket stock message (pending stock)"
53
  msgid "%1$d Awaiting Review"
54
  msgstr ""
133
  msgid "Location of Tickets form"
134
  msgstr ""
135
 
136
+ #: src/template-tags/tickets.php:371
137
  msgid "Sold"
138
  msgstr ""
139
 
140
+ #: src/template-tags/tickets.php:373
141
  msgctxt "separate going and remain RSVPs"
142
  msgid "RSVP'd Going"
143
  msgstr ""
144
 
145
+ #: src/template-tags/tickets.php:378
146
  msgid "%s %d"
147
  msgstr ""
148
 
149
+ #: src/template-tags/tickets.php:384
150
  msgctxt "ticket global stock message (remaining stock)"
151
  msgid "%1$d Remaining of the global stock"
152
  msgstr ""
192
  msgid "RSVP: "
193
  msgstr ""
194
 
195
+ #: src/views/tickets/rsvp.php:32
196
  msgctxt "form heading"
197
  msgid "RSVP"
198
  msgstr ""
199
 
200
+ #: src/views/tickets/rsvp.php:143
201
  msgctxt "order status label"
202
  msgid "RSVP"
203
  msgstr ""
471
  msgid "RSVPs"
472
  msgstr ""
473
 
474
+ #: src/Tribe/Main.php:596
475
  msgid "Welcome to Event Tickets"
476
  msgstr ""
477
 
478
+ #: src/Tribe/Main.php:731
479
  msgctxt "button text"
480
  msgid "RSVP"
481
  msgstr ""
499
  msgid "Not Going:"
500
  msgstr ""
501
 
502
+ #: src/Tribe/RSVP.php:163
503
  msgctxt "ticket provider"
504
  msgid "RSVP"
505
  msgstr ""
506
 
507
+ #: src/Tribe/RSVP.php:279
508
  msgid "RSVP Tickets"
509
  msgstr ""
510
 
511
+ #: src/Tribe/RSVP.php:280
512
  msgid "RSVP Ticket"
513
  msgstr ""
514
 
584
  msgid "You can require that users log into your site before they are able to RSVP (or buy tickets). Please review your WordPress Membership option (via the General Settings admin screen) before adjusting this setting."
585
  msgstr ""
586
 
587
+ #: src/template-tags/tickets.php:368
588
  msgid "global inventory"
589
  msgstr ""
590
 
591
+ #: src/template-tags/tickets.php:391
592
  msgctxt "ticket stock message (cancelled stock)"
593
  msgid "%1$d Cancelled"
594
  msgstr ""
655
  msgid "Update %s"
656
  msgstr "Aktualizovat"
657
 
658
+ #: src/views/tickets/rsvp.php:50
659
  msgid "Please fill in the RSVP confirmation name and email fields."
660
  msgstr ""
661
 
662
+ #: src/views/tickets/rsvp.php:114
663
  msgid "Send RSVP confirmation to:"
664
  msgstr ""
665
 
666
+ #: src/views/tickets/rsvp.php:159
667
  msgid "Don't list me on the public attendee list"
668
  msgstr "Neuvádějte mě na veřejném seznamu účastníků"
669
 
670
+ #: src/views/tickets/rsvp.php:171
671
  msgid "Login to RSVP"
672
  msgstr ""
673
 
675
  msgid "Event Tickets allows your guests to RSVP from any post, page, or event."
676
  msgstr ""
677
 
678
+ #: src/Tribe/Main.php:731
679
  msgid "Buy"
680
  msgstr ""
681
 
687
  msgid "Please enter in without thousand separators and currency symbols."
688
  msgstr ""
689
 
690
+ #: src/Tribe/RSVP.php:743
691
  msgid "You confirmed you will not be attending %s"
692
  msgstr ""
693
 
694
+ #: src/Tribe/Tickets.php:986
695
  msgid "Use global stock"
696
  msgstr ""
697
 
698
+ #: src/Tribe/Tickets.php:987
699
  msgid "Use global stock but cap sales"
700
  msgstr ""
701
 
702
+ #: src/Tribe/Tickets.php:988
703
  msgid "Independent (do not use global stock)"
704
  msgstr ""
705
 
706
+ #: src/Tribe/Tickets.php:1573
707
  msgid "Tickets are not available as this %s has passed."
708
  msgstr ""
709
 
710
+ #: src/Tribe/Tickets.php:1575
711
  msgid "Tickets are not yet available."
712
  msgstr ""
713
 
714
+ #: src/Tribe/Tickets.php:1577
715
  msgid "Tickets are no longer available."
716
  msgstr ""
717
 
718
+ #: src/Tribe/Tickets.php:1579
719
  msgid "There are no tickets available at this time."
720
  msgstr ""
721
 
806
  msgid "Free"
807
  msgstr "Zdarma"
808
 
809
+ #: src/Tribe/Main.php:495
810
  msgid "If you have a valid license for one of our paid plugins, you can %s in our premium support forums. Our support team monitors the forums and will respond to your thread within 24-48 hours (during the week)."
811
  msgstr ""
812
 
813
+ #: src/Tribe/RSVP.php:973
814
  msgid "You can't RSVP more than the total remaining tickets."
815
  msgstr "Nemůžete potvrdit účast pro více než kolik je k dispozici zbývajících vstupenek."
816
 
817
+ #: src/Tribe/RSVP.php:1513
818
  msgid "Return to the %1$sAttendees Report%2$s."
819
  msgstr "Zpět na %1$spřehled účastníků%2$s."
820
 
821
+ #: src/Tribe/RSVP.php:1520
822
  msgid "Post updated. %1$s"
823
  msgstr "Příspěvek byl aktualizován. %1$s"
824
 
825
+ #: src/Tribe/RSVP.php:1524
826
  msgid "Post published. %1$s"
827
  msgstr "Příspěvek byl publikován. %1$s"
828
 
829
+ #: src/Tribe/RSVP.php:1527
830
  msgid "Post submitted."
831
  msgstr "Příspěvek byl odeslán ke schválení."
832
 
833
+ #: src/Tribe/RSVP.php:1528
834
  msgid "Post scheduled."
835
  msgstr "Příspěvek bude automaticky publikován."
836
 
837
+ #: src/Tribe/RSVP.php:1529
838
  msgid "Post draft updated."
839
  msgstr "Koncept příspěvku byl uložen."
840
 
841
+ #: src/Tribe/Tickets.php:701
842
  msgid "Editing the ticket price is currently disallowed."
843
  msgstr "Upravovaní ceny vstupenky není aktuálně povoleno."
844
 
890
  msgid "When The Events Calendar and Event Tickets are both activated, The Events Calendar must be running version %1$s or greater. Please %2$supdate now.%3$s"
891
  msgstr ""
892
 
893
+ #: src/Tribe/Main.php:441
894
  msgid "Support for Event Tickets"
895
  msgstr ""
896
 
897
+ #: src/Tribe/Main.php:443
898
  msgid "Settings overview"
899
  msgstr "Přehled nastavení"
900
 
901
+ #: src/Tribe/Main.php:444
902
  msgid "Features overview"
903
  msgstr "Přehled funkcí"
904
 
905
+ #: src/Tribe/Main.php:445
906
  msgid "Troubleshooting common problems"
907
  msgstr ""
908
 
909
+ #: src/Tribe/Main.php:446
910
  msgid "Customizing Event Tickets"
911
  msgstr ""
912
 
913
+ #: src/Tribe/Main.php:463
914
  msgid "New User Primer"
915
  msgstr ""
916
 
917
+ #: src/Tribe/Main.php:465
918
  msgid "We are committed to helping you sell tickets for your event. Check out our handy %s to get started."
919
  msgstr ""
920
 
921
+ #: src/Tribe/Main.php:482
922
  msgid "open-source forum on WordPress.org"
923
  msgstr ""
924
 
925
+ #: src/Tribe/Main.php:483
926
  msgid "If you have tried the above steps and are still having trouble, you can post a new thread to our %s. Our support staff monitors these forums once a week and would be happy to assist you there."
927
  msgstr ""
928
 
929
+ #: src/Tribe/Main.php:485
930
  msgid "premium support on our website"
931
  msgstr ""
932
 
933
+ #: src/Tribe/Main.php:486
934
  msgid "Events Tickets Plus"
935
  msgstr "Events Tickets Plus"
936
 
937
+ #: src/Tribe/Main.php:487
938
  msgid "Looking for more immediate support? We offer %1$s with the purchase of any of our premium plugins (like %2$s). Pick up a license and you can post there directly and expect a response within 24-48 hours during weekdays."
939
  msgstr ""
940
 
941
+ #: src/Tribe/Main.php:489 src/Tribe/Main.php:494
942
  msgid "post a thread"
943
  msgstr ""
944
 
945
+ #: src/Tribe/Main.php:490
946
  msgid "Already have Events Tickets Plus? You can %s in our premium support forums. Our support team monitors the forums and will respond to your thread within 24-48 hours (during the week)."
947
  msgstr ""
948
 
980
  msgstr "Tisk"
981
 
982
  #: src/Tribe/Attendees_Table.php:490
983
+ #: src/admin-views/admin-welcome-message.php:36 src/views/tickets/rsvp.php:134
984
  msgid "Email"
985
  msgstr "Email"
986
 
1004
  msgid "Set as ticket header"
1005
  msgstr "Použít jako obrázek v záhlaví vstupenky"
1006
 
1007
+ #: src/Tribe/RSVP.php:241
1008
  msgctxt "Attendee number"
1009
  msgid "Attendee %1$s"
1010
  msgstr "Účastník %1$s"
1011
 
1012
+ #: src/Tribe/RSVP.php:712
1013
  msgid "Your tickets from %s"
1014
  msgstr "Vaše vstupenky z webu %s"
1015
 
1016
+ #: src/Tribe/RSVP.php:967
1017
  msgid "Your RSVP has been received! Check your email for your RSVP confirmation."
1018
  msgstr "Vaše potvrzení účasti bylo přijato. Zkontrolujte prosím emailovou schránku, kam byl odeslán kontrolní email."
1019
 
1020
+ #: src/Tribe/RSVP.php:978
1021
  msgid "In order to RSVP, you must enter your name and a valid email address."
1022
  msgstr "Pro potvrzení účasti musíte zadat své jméno a platnou emailovou adresu."
1023
 
1024
+ #: src/Tribe/RSVP.php:1222
1025
  msgid "(deleted)"
1026
  msgstr "(smazáno)"
1027
 
1028
+ #: src/Tribe/Tickets.php:469
1029
  msgid "Your ticket has been saved."
1030
  msgstr "Vaše vstupenka byla uložena."
1031
 
1032
+ #: src/Tribe/Tickets.php:647
1033
  msgid "Your ticket has been deleted."
1034
  msgstr "Vaše vstupenka byla smazána."
1035
 
1218
  msgid "RSVP"
1219
  msgstr "Potvrzení účasti"
1220
 
1221
+ #: src/views/tickets/rsvp.php:84
1222
  msgid "%1$s out of %2$s available"
1223
  msgstr "%1$s z celkem %2$s k dispozici"
1224
 
1225
+ #: src/views/tickets/rsvp.php:88
1226
  msgid "Out of stock!"
1227
  msgstr "Není skladem!"
1228
 
1229
+ #: src/views/tickets/rsvp.php:126
1230
  msgid "Full Name"
1231
  msgstr ""
1232
 
1233
+ #: src/views/tickets/rsvp.php:180
1234
  msgid "Confirm RSVP"
1235
  msgstr "Potvrdit účast"
1236
 
1237
+ #. #-#-#-#-# event-tickets.pot (Event Tickets 4.5dev1) #-#-#-#-#
1238
  #. Plugin Name of the plugin/theme
1239
+ #: src/Tribe/Main.php:509
1240
  msgid "Event Tickets"
1241
  msgstr "Event Tickets"
1242
 
lang/event-tickets-de_DE.po CHANGED
@@ -10,16 +10,43 @@ msgstr ""
10
  "X-Generator: GlotPress/1.0-alpha-1100\n"
11
  "Project-Id-Version: Event Tickets\n"
12
 
13
- #: src/views/tickets/rsvp.php:158
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
14
  msgid "You must have JavaScript activated to purchase tickets. Please enable JavaScript in your browser."
15
  msgstr ""
16
 
17
- #: src/template-tags/tickets.php:280
18
  msgctxt "ticket stock message (remaining stock)"
19
  msgid "%1$d Remaining"
20
  msgstr ""
21
 
22
- #: src/template-tags/tickets.php:283
23
  msgctxt "ticket stock message (pending stock)"
24
  msgid "%1$d Awaiting Review"
25
  msgstr ""
@@ -104,20 +131,20 @@ msgstr ""
104
  msgid "Location of Tickets form"
105
  msgstr ""
106
 
107
- #: src/template-tags/tickets.php:265
108
  msgid "Sold"
109
  msgstr "Verkauft"
110
 
111
- #: src/template-tags/tickets.php:267
112
  msgctxt "separate going and remain RSVPs"
113
  msgid "RSVP'd Going"
114
  msgstr ""
115
 
116
- #: src/template-tags/tickets.php:272
117
  msgid "%s %d"
118
  msgstr ""
119
 
120
- #: src/template-tags/tickets.php:278
121
  msgctxt "ticket global stock message (remaining stock)"
122
  msgid "%1$d Remaining of the global stock"
123
  msgstr ""
@@ -161,12 +188,12 @@ msgctxt "order status label"
161
  msgid "RSVP: "
162
  msgstr ""
163
 
164
- #: src/views/tickets/rsvp.php:24
165
  msgctxt "form heading"
166
  msgid "RSVP"
167
  msgstr ""
168
 
169
- #: src/views/tickets/rsvp.php:127
170
  msgctxt "order status label"
171
  msgid "RSVP"
172
  msgstr ""
@@ -438,11 +465,11 @@ msgctxt "post type label"
438
  msgid "RSVPs"
439
  msgstr ""
440
 
441
- #: src/Tribe/Main.php:589
442
  msgid "Welcome to Event Tickets"
443
  msgstr ""
444
 
445
- #: src/Tribe/Main.php:724
446
  msgctxt "button text"
447
  msgid "RSVP"
448
  msgstr ""
@@ -466,16 +493,16 @@ msgctxt "attendee summary"
466
  msgid "Not Going:"
467
  msgstr ""
468
 
469
- #: src/Tribe/RSVP.php:158
470
  msgctxt "ticket provider"
471
  msgid "RSVP"
472
  msgstr ""
473
 
474
- #: src/Tribe/RSVP.php:274
475
  msgid "RSVP Tickets"
476
  msgstr ""
477
 
478
- #: src/Tribe/RSVP.php:275
479
  msgid "RSVP Ticket"
480
  msgstr ""
481
 
@@ -551,11 +578,11 @@ msgstr ""
551
  msgid "You can require that users log into your site before they are able to RSVP (or buy tickets). Please review your WordPress Membership option (via the General Settings admin screen) before adjusting this setting."
552
  msgstr ""
553
 
554
- #: src/template-tags/tickets.php:262
555
  msgid "global inventory"
556
  msgstr ""
557
 
558
- #: src/template-tags/tickets.php:285
559
  msgctxt "ticket stock message (cancelled stock)"
560
  msgid "%1$d Cancelled"
561
  msgstr ""
@@ -620,19 +647,19 @@ msgstr "%s anschauen"
620
  msgid "Update %s"
621
  msgstr "%s aktualisieren"
622
 
623
- #: src/views/tickets/rsvp.php:38
624
  msgid "Please fill in the RSVP confirmation name and email fields."
625
  msgstr ""
626
 
627
- #: src/views/tickets/rsvp.php:98
628
  msgid "Send RSVP confirmation to:"
629
  msgstr ""
630
 
631
- #: src/views/tickets/rsvp.php:137
632
  msgid "Don't list me on the public attendee list"
633
  msgstr "Zeige mich nicht auf der öffentlichen Teilnehmerliste"
634
 
635
- #: src/views/tickets/rsvp.php:147
636
  msgid "Login to RSVP"
637
  msgstr ""
638
 
@@ -640,7 +667,7 @@ msgstr ""
640
  msgid "Event Tickets allows your guests to RSVP from any post, page, or event."
641
  msgstr ""
642
 
643
- #: src/Tribe/Main.php:724
644
  msgid "Buy"
645
  msgstr ""
646
 
@@ -652,35 +679,35 @@ msgstr ""
652
  msgid "Please enter in without thousand separators and currency symbols."
653
  msgstr ""
654
 
655
- #: src/Tribe/RSVP.php:734
656
  msgid "You confirmed you will not be attending %s"
657
  msgstr ""
658
 
659
- #: src/Tribe/Tickets.php:946
660
  msgid "Use global stock"
661
  msgstr ""
662
 
663
- #: src/Tribe/Tickets.php:947
664
  msgid "Use global stock but cap sales"
665
  msgstr ""
666
 
667
- #: src/Tribe/Tickets.php:948
668
  msgid "Independent (do not use global stock)"
669
  msgstr ""
670
 
671
- #: src/Tribe/Tickets.php:1405
672
  msgid "Tickets are not available as this %s has passed."
673
  msgstr ""
674
 
675
- #: src/Tribe/Tickets.php:1407
676
  msgid "Tickets are not yet available."
677
  msgstr ""
678
 
679
- #: src/Tribe/Tickets.php:1409
680
  msgid "Tickets are no longer available."
681
  msgstr ""
682
 
683
- #: src/Tribe/Tickets.php:1411
684
  msgid "There are no tickets available at this time."
685
  msgstr ""
686
 
@@ -770,39 +797,39 @@ msgstr ""
770
  msgid "Free"
771
  msgstr "Kostenlos"
772
 
773
- #: src/Tribe/Main.php:488
774
  msgid "If you have a valid license for one of our paid plugins, you can %s in our premium support forums. Our support team monitors the forums and will respond to your thread within 24-48 hours (during the week)."
775
  msgstr ""
776
 
777
- #: src/Tribe/RSVP.php:996
778
  msgid "You can't RSVP more than the total remaining tickets."
779
  msgstr ""
780
 
781
- #: src/Tribe/RSVP.php:1408
782
  msgid "Return to the %1$sAttendees Report%2$s."
783
  msgstr ""
784
 
785
- #: src/Tribe/RSVP.php:1415
786
  msgid "Post updated. %1$s"
787
  msgstr ""
788
 
789
- #: src/Tribe/RSVP.php:1419
790
  msgid "Post published. %1$s"
791
  msgstr ""
792
 
793
- #: src/Tribe/RSVP.php:1422
794
  msgid "Post submitted."
795
  msgstr ""
796
 
797
- #: src/Tribe/RSVP.php:1423
798
  msgid "Post scheduled."
799
  msgstr ""
800
 
801
- #: src/Tribe/RSVP.php:1424
802
  msgid "Post draft updated."
803
  msgstr ""
804
 
805
- #: src/Tribe/Tickets.php:661
806
  msgid "Editing the ticket price is currently disallowed."
807
  msgstr ""
808
 
@@ -854,59 +881,59 @@ msgstr "Abbrechen"
854
  msgid "When The Events Calendar and Event Tickets are both activated, The Events Calendar must be running version %1$s or greater. Please %2$supdate now.%3$s"
855
  msgstr ""
856
 
857
- #: src/Tribe/Main.php:434
858
  msgid "Support for Event Tickets"
859
  msgstr ""
860
 
861
- #: src/Tribe/Main.php:436
862
  msgid "Settings overview"
863
  msgstr ""
864
 
865
- #: src/Tribe/Main.php:437
866
  msgid "Features overview"
867
  msgstr ""
868
 
869
- #: src/Tribe/Main.php:438
870
  msgid "Troubleshooting common problems"
871
  msgstr ""
872
 
873
- #: src/Tribe/Main.php:439
874
  msgid "Customizing Event Tickets"
875
  msgstr ""
876
 
877
- #: src/Tribe/Main.php:456
878
  msgid "New User Primer"
879
  msgstr ""
880
 
881
- #: src/Tribe/Main.php:458
882
  msgid "We are committed to helping you sell tickets for your event. Check out our handy %s to get started."
883
  msgstr ""
884
 
885
- #: src/Tribe/Main.php:475
886
  msgid "open-source forum on WordPress.org"
887
  msgstr ""
888
 
889
- #: src/Tribe/Main.php:476
890
  msgid "If you have tried the above steps and are still having trouble, you can post a new thread to our %s. Our support staff monitors these forums once a week and would be happy to assist you there."
891
  msgstr ""
892
 
893
- #: src/Tribe/Main.php:478
894
  msgid "premium support on our website"
895
  msgstr ""
896
 
897
- #: src/Tribe/Main.php:479
898
  msgid "Events Tickets Plus"
899
  msgstr ""
900
 
901
- #: src/Tribe/Main.php:480
902
  msgid "Looking for more immediate support? We offer %1$s with the purchase of any of our premium plugins (like %2$s). Pick up a license and you can post there directly and expect a response within 24-48 hours during weekdays."
903
  msgstr ""
904
 
905
- #: src/Tribe/Main.php:482 src/Tribe/Main.php:487
906
  msgid "post a thread"
907
  msgstr ""
908
 
909
- #: src/Tribe/Main.php:483
910
  msgid "Already have Events Tickets Plus? You can %s in our premium support forums. Our support team monitors the forums and will respond to your thread within 24-48 hours (during the week)."
911
  msgstr ""
912
 
@@ -944,7 +971,7 @@ msgid "Print"
944
  msgstr "Drucken"
945
 
946
  #: src/Tribe/Attendees_Table.php:490
947
- #: src/admin-views/admin-welcome-message.php:36 src/views/tickets/rsvp.php:118
948
  msgid "Email"
949
  msgstr "E-Mail"
950
 
@@ -968,32 +995,32 @@ msgstr "Karten Bild"
968
  msgid "Set as ticket header"
969
  msgstr "Ein Karten Bild senden"
970
 
971
- #: src/Tribe/RSVP.php:236
972
  msgctxt "Attendee number"
973
  msgid "Attendee %1$s"
974
  msgstr "Teilnehmende %1$s"
975
 
976
- #: src/Tribe/RSVP.php:704
977
  msgid "Your tickets from %s"
978
  msgstr "Ihre Tickets von %s"
979
 
980
- #: src/Tribe/RSVP.php:990
981
  msgid "Your RSVP has been received! Check your email for your RSVP confirmation."
982
  msgstr ""
983
 
984
- #: src/Tribe/RSVP.php:1001
985
  msgid "In order to RSVP, you must enter your name and a valid email address."
986
  msgstr ""
987
 
988
- #: src/Tribe/RSVP.php:1140
989
  msgid "(deleted)"
990
  msgstr "(gelöscht)"
991
 
992
- #: src/Tribe/Tickets.php:429
993
  msgid "Your ticket has been saved."
994
  msgstr "Ihre Karte wurde gespeichert."
995
 
996
- #: src/Tribe/Tickets.php:607
997
  msgid "Your ticket has been deleted."
998
  msgstr "Ihre Karte wurde gelöscht."
999
 
@@ -1182,25 +1209,25 @@ msgstr "Käufer"
1182
  msgid "RSVP"
1183
  msgstr "RSVP"
1184
 
1185
- #: src/views/tickets/rsvp.php:68
1186
  msgid "%1$s out of %2$s available"
1187
  msgstr "%1$s von %2$s verfügbar"
1188
 
1189
- #: src/views/tickets/rsvp.php:72
1190
  msgid "Out of stock!"
1191
  msgstr "Ausverkauft!"
1192
 
1193
- #: src/views/tickets/rsvp.php:110
1194
  msgid "Full Name"
1195
  msgstr ""
1196
 
1197
- #: src/views/tickets/rsvp.php:149
1198
  msgid "Confirm RSVP"
1199
  msgstr "RSVP bestätigen"
1200
 
1201
- #. #-#-#-#-# event-tickets.pot (Event Tickets 4.4.10) #-#-#-#-#
1202
  #. Plugin Name of the plugin/theme
1203
- #: src/Tribe/Main.php:502
1204
  msgid "Event Tickets"
1205
  msgstr "Veranstaltungstickets"
1206
 
10
  "X-Generator: GlotPress/1.0-alpha-1100\n"
11
  "Project-Id-Version: Event Tickets\n"
12
 
13
+ #: src/template-tags/tickets.php:185
14
+ msgctxt "list view stock sold out"
15
+ msgid "Sold out"
16
+ msgstr ""
17
+
18
+ #: src/template-tags/tickets.php:197
19
+ msgid "%s spot left"
20
+ msgid_plural "%s spots left"
21
+ msgstr[0] ""
22
+ msgstr[1] ""
23
+
24
+ #: src/template-tags/tickets.php:199
25
+ msgid "%s ticket left"
26
+ msgid_plural "%s tickets left"
27
+ msgstr[0] ""
28
+ msgstr[1] ""
29
+
30
+ #: src/template-tags/tickets.php:208
31
+ msgctxt "list view rsvp now ticket button"
32
+ msgid "RSVP Now!"
33
+ msgstr ""
34
+
35
+ #: src/template-tags/tickets.php:211
36
+ msgctxt "list view buy now ticket button"
37
+ msgid "Buy Now!"
38
+ msgstr ""
39
+
40
+ #: src/views/tickets/rsvp.php:189
41
  msgid "You must have JavaScript activated to purchase tickets. Please enable JavaScript in your browser."
42
  msgstr ""
43
 
44
+ #: src/template-tags/tickets.php:386
45
  msgctxt "ticket stock message (remaining stock)"
46
  msgid "%1$d Remaining"
47
  msgstr ""
48
 
49
+ #: src/template-tags/tickets.php:389
50
  msgctxt "ticket stock message (pending stock)"
51
  msgid "%1$d Awaiting Review"
52
  msgstr ""
131
  msgid "Location of Tickets form"
132
  msgstr ""
133
 
134
+ #: src/template-tags/tickets.php:371
135
  msgid "Sold"
136
  msgstr "Verkauft"
137
 
138
+ #: src/template-tags/tickets.php:373
139
  msgctxt "separate going and remain RSVPs"
140
  msgid "RSVP'd Going"
141
  msgstr ""
142
 
143
+ #: src/template-tags/tickets.php:378
144
  msgid "%s %d"
145
  msgstr ""
146
 
147
+ #: src/template-tags/tickets.php:384
148
  msgctxt "ticket global stock message (remaining stock)"
149
  msgid "%1$d Remaining of the global stock"
150
  msgstr ""
188
  msgid "RSVP: "
189
  msgstr ""
190
 
191
+ #: src/views/tickets/rsvp.php:32
192
  msgctxt "form heading"
193
  msgid "RSVP"
194
  msgstr ""
195
 
196
+ #: src/views/tickets/rsvp.php:143
197
  msgctxt "order status label"
198
  msgid "RSVP"
199
  msgstr ""
465
  msgid "RSVPs"
466
  msgstr ""
467
 
468
+ #: src/Tribe/Main.php:596
469
  msgid "Welcome to Event Tickets"
470
  msgstr ""
471
 
472
+ #: src/Tribe/Main.php:731
473
  msgctxt "button text"
474
  msgid "RSVP"
475
  msgstr ""
493
  msgid "Not Going:"
494
  msgstr ""
495
 
496
+ #: src/Tribe/RSVP.php:163
497
  msgctxt "ticket provider"
498
  msgid "RSVP"
499
  msgstr ""
500
 
501
+ #: src/Tribe/RSVP.php:279
502
  msgid "RSVP Tickets"
503
  msgstr ""
504
 
505
+ #: src/Tribe/RSVP.php:280
506
  msgid "RSVP Ticket"
507
  msgstr ""
508
 
578
  msgid "You can require that users log into your site before they are able to RSVP (or buy tickets). Please review your WordPress Membership option (via the General Settings admin screen) before adjusting this setting."
579
  msgstr ""
580
 
581
+ #: src/template-tags/tickets.php:368
582
  msgid "global inventory"
583
  msgstr ""
584
 
585
+ #: src/template-tags/tickets.php:391
586
  msgctxt "ticket stock message (cancelled stock)"
587
  msgid "%1$d Cancelled"
588
  msgstr ""
647
  msgid "Update %s"
648
  msgstr "%s aktualisieren"
649
 
650
+ #: src/views/tickets/rsvp.php:50
651
  msgid "Please fill in the RSVP confirmation name and email fields."
652
  msgstr ""
653
 
654
+ #: src/views/tickets/rsvp.php:114
655
  msgid "Send RSVP confirmation to:"
656
  msgstr ""
657
 
658
+ #: src/views/tickets/rsvp.php:159
659
  msgid "Don't list me on the public attendee list"
660
  msgstr "Zeige mich nicht auf der öffentlichen Teilnehmerliste"
661
 
662
+ #: src/views/tickets/rsvp.php:171
663
  msgid "Login to RSVP"
664
  msgstr ""
665
 
667
  msgid "Event Tickets allows your guests to RSVP from any post, page, or event."
668
  msgstr ""
669
 
670
+ #: src/Tribe/Main.php:731
671
  msgid "Buy"
672
  msgstr ""
673
 
679
  msgid "Please enter in without thousand separators and currency symbols."
680
  msgstr ""
681
 
682
+ #: src/Tribe/RSVP.php:743
683
  msgid "You confirmed you will not be attending %s"
684
  msgstr ""
685
 
686
+ #: src/Tribe/Tickets.php:986
687
  msgid "Use global stock"
688
  msgstr ""
689
 
690
+ #: src/Tribe/Tickets.php:987
691
  msgid "Use global stock but cap sales"
692
  msgstr ""
693
 
694
+ #: src/Tribe/Tickets.php:988
695
  msgid "Independent (do not use global stock)"
696
  msgstr ""
697
 
698
+ #: src/Tribe/Tickets.php:1573
699
  msgid "Tickets are not available as this %s has passed."
700
  msgstr ""
701
 
702
+ #: src/Tribe/Tickets.php:1575
703
  msgid "Tickets are not yet available."
704
  msgstr ""
705
 
706
+ #: src/Tribe/Tickets.php:1577
707
  msgid "Tickets are no longer available."
708
  msgstr ""
709
 
710
+ #: src/Tribe/Tickets.php:1579
711
  msgid "There are no tickets available at this time."
712
  msgstr ""
713
 
797
  msgid "Free"
798
  msgstr "Kostenlos"
799
 
800
+ #: src/Tribe/Main.php:495
801
  msgid "If you have a valid license for one of our paid plugins, you can %s in our premium support forums. Our support team monitors the forums and will respond to your thread within 24-48 hours (during the week)."
802
  msgstr ""
803
 
804
+ #: src/Tribe/RSVP.php:973
805
  msgid "You can't RSVP more than the total remaining tickets."
806
  msgstr ""
807
 
808
+ #: src/Tribe/RSVP.php:1513
809
  msgid "Return to the %1$sAttendees Report%2$s."
810
  msgstr ""
811
 
812
+ #: src/Tribe/RSVP.php:1520
813
  msgid "Post updated. %1$s"
814
  msgstr ""
815
 
816
+ #: src/Tribe/RSVP.php:1524
817
  msgid "Post published. %1$s"
818
  msgstr ""
819
 
820
+ #: src/Tribe/RSVP.php:1527
821
  msgid "Post submitted."
822
  msgstr ""
823
 
824
+ #: src/Tribe/RSVP.php:1528
825
  msgid "Post scheduled."
826
  msgstr ""
827
 
828
+ #: src/Tribe/RSVP.php:1529
829
  msgid "Post draft updated."
830
  msgstr ""
831
 
832
+ #: src/Tribe/Tickets.php:701
833
  msgid "Editing the ticket price is currently disallowed."
834
  msgstr ""
835
 
881
  msgid "When The Events Calendar and Event Tickets are both activated, The Events Calendar must be running version %1$s or greater. Please %2$supdate now.%3$s"
882
  msgstr ""
883
 
884
+ #: src/Tribe/Main.php:441
885
  msgid "Support for Event Tickets"
886
  msgstr ""
887
 
888
+ #: src/Tribe/Main.php:443
889
  msgid "Settings overview"
890
  msgstr ""
891
 
892
+ #: src/Tribe/Main.php:444
893
  msgid "Features overview"
894
  msgstr ""
895
 
896
+ #: src/Tribe/Main.php:445
897
  msgid "Troubleshooting common problems"
898
  msgstr ""
899
 
900
+ #: src/Tribe/Main.php:446
901
  msgid "Customizing Event Tickets"
902
  msgstr ""
903
 
904
+ #: src/Tribe/Main.php:463
905
  msgid "New User Primer"
906
  msgstr ""
907
 
908
+ #: src/Tribe/Main.php:465
909
  msgid "We are committed to helping you sell tickets for your event. Check out our handy %s to get started."
910
  msgstr ""
911
 
912
+ #: src/Tribe/Main.php:482
913
  msgid "open-source forum on WordPress.org"
914
  msgstr ""
915
 
916
+ #: src/Tribe/Main.php:483
917
  msgid "If you have tried the above steps and are still having trouble, you can post a new thread to our %s. Our support staff monitors these forums once a week and would be happy to assist you there."
918
  msgstr ""
919
 
920
+ #: src/Tribe/Main.php:485
921
  msgid "premium support on our website"
922
  msgstr ""
923
 
924
+ #: src/Tribe/Main.php:486
925
  msgid "Events Tickets Plus"
926
  msgstr ""
927
 
928
+ #: src/Tribe/Main.php:487
929
  msgid "Looking for more immediate support? We offer %1$s with the purchase of any of our premium plugins (like %2$s). Pick up a license and you can post there directly and expect a response within 24-48 hours during weekdays."
930
  msgstr ""
931
 
932
+ #: src/Tribe/Main.php:489 src/Tribe/Main.php:494
933
  msgid "post a thread"
934
  msgstr ""
935
 
936
+ #: src/Tribe/Main.php:490
937
  msgid "Already have Events Tickets Plus? You can %s in our premium support forums. Our support team monitors the forums and will respond to your thread within 24-48 hours (during the week)."
938
  msgstr ""
939
 
971
  msgstr "Drucken"
972
 
973
  #: src/Tribe/Attendees_Table.php:490
974
+ #: src/admin-views/admin-welcome-message.php:36 src/views/tickets/rsvp.php:134
975
  msgid "Email"
976
  msgstr "E-Mail"
977
 
995
  msgid "Set as ticket header"
996
  msgstr "Ein Karten Bild senden"
997
 
998
+ #: src/Tribe/RSVP.php:241
999
  msgctxt "Attendee number"
1000
  msgid "Attendee %1$s"
1001
  msgstr "Teilnehmende %1$s"
1002
 
1003
+ #: src/Tribe/RSVP.php:712
1004
  msgid "Your tickets from %s"
1005
  msgstr "Ihre Tickets von %s"
1006
 
1007
+ #: src/Tribe/RSVP.php:967
1008
  msgid "Your RSVP has been received! Check your email for your RSVP confirmation."
1009
  msgstr ""
1010
 
1011
+ #: src/Tribe/RSVP.php:978
1012
  msgid "In order to RSVP, you must enter your name and a valid email address."
1013
  msgstr ""
1014
 
1015
+ #: src/Tribe/RSVP.php:1222
1016
  msgid "(deleted)"
1017
  msgstr "(gelöscht)"
1018
 
1019
+ #: src/Tribe/Tickets.php:469
1020
  msgid "Your ticket has been saved."
1021
  msgstr "Ihre Karte wurde gespeichert."
1022
 
1023
+ #: src/Tribe/Tickets.php:647
1024
  msgid "Your ticket has been deleted."
1025
  msgstr "Ihre Karte wurde gelöscht."
1026
 
1209
  msgid "RSVP"
1210
  msgstr "RSVP"
1211
 
1212
+ #: src/views/tickets/rsvp.php:84
1213
  msgid "%1$s out of %2$s available"
1214
  msgstr "%1$s von %2$s verfügbar"
1215
 
1216
+ #: src/views/tickets/rsvp.php:88
1217
  msgid "Out of stock!"
1218
  msgstr "Ausverkauft!"
1219
 
1220
+ #: src/views/tickets/rsvp.php:126
1221
  msgid "Full Name"
1222
  msgstr ""
1223
 
1224
+ #: src/views/tickets/rsvp.php:180
1225
  msgid "Confirm RSVP"
1226
  msgstr "RSVP bestätigen"
1227
 
1228
+ #. #-#-#-#-# event-tickets.pot (Event Tickets 4.5dev1) #-#-#-#-#
1229
  #. Plugin Name of the plugin/theme
1230
+ #: src/Tribe/Main.php:509
1231
  msgid "Event Tickets"
1232
  msgstr "Veranstaltungstickets"
1233
 
lang/event-tickets-nl_NL.po CHANGED
@@ -10,16 +10,43 @@ msgstr ""
10
  "X-Generator: GlotPress/1.0-alpha-1100\n"
11
  "Project-Id-Version: Event Tickets\n"
12
 
13
- #: src/views/tickets/rsvp.php:158
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
14
  msgid "You must have JavaScript activated to purchase tickets. Please enable JavaScript in your browser."
15
  msgstr ""
16
 
17
- #: src/template-tags/tickets.php:280
18
  msgctxt "ticket stock message (remaining stock)"
19
  msgid "%1$d Remaining"
20
  msgstr ""
21
 
22
- #: src/template-tags/tickets.php:283
23
  msgctxt "ticket stock message (pending stock)"
24
  msgid "%1$d Awaiting Review"
25
  msgstr ""
@@ -104,20 +131,20 @@ msgstr ""
104
  msgid "Location of Tickets form"
105
  msgstr ""
106
 
107
- #: src/template-tags/tickets.php:265
108
  msgid "Sold"
109
  msgstr "Verkocht"
110
 
111
- #: src/template-tags/tickets.php:267
112
  msgctxt "separate going and remain RSVPs"
113
  msgid "RSVP'd Going"
114
  msgstr ""
115
 
116
- #: src/template-tags/tickets.php:272
117
  msgid "%s %d"
118
  msgstr ""
119
 
120
- #: src/template-tags/tickets.php:278
121
  msgctxt "ticket global stock message (remaining stock)"
122
  msgid "%1$d Remaining of the global stock"
123
  msgstr ""
@@ -161,12 +188,12 @@ msgctxt "order status label"
161
  msgid "RSVP: "
162
  msgstr ""
163
 
164
- #: src/views/tickets/rsvp.php:24
165
  msgctxt "form heading"
166
  msgid "RSVP"
167
  msgstr ""
168
 
169
- #: src/views/tickets/rsvp.php:127
170
  msgctxt "order status label"
171
  msgid "RSVP"
172
  msgstr ""
@@ -438,11 +465,11 @@ msgctxt "post type label"
438
  msgid "RSVPs"
439
  msgstr ""
440
 
441
- #: src/Tribe/Main.php:589
442
  msgid "Welcome to Event Tickets"
443
  msgstr ""
444
 
445
- #: src/Tribe/Main.php:724
446
  msgctxt "button text"
447
  msgid "RSVP"
448
  msgstr ""
@@ -466,16 +493,16 @@ msgctxt "attendee summary"
466
  msgid "Not Going:"
467
  msgstr ""
468
 
469
- #: src/Tribe/RSVP.php:158
470
  msgctxt "ticket provider"
471
  msgid "RSVP"
472
  msgstr ""
473
 
474
- #: src/Tribe/RSVP.php:274
475
  msgid "RSVP Tickets"
476
  msgstr ""
477
 
478
- #: src/Tribe/RSVP.php:275
479
  msgid "RSVP Ticket"
480
  msgstr ""
481
 
@@ -551,11 +578,11 @@ msgstr ""
551
  msgid "You can require that users log into your site before they are able to RSVP (or buy tickets). Please review your WordPress Membership option (via the General Settings admin screen) before adjusting this setting."
552
  msgstr ""
553
 
554
- #: src/template-tags/tickets.php:262
555
  msgid "global inventory"
556
  msgstr ""
557
 
558
- #: src/template-tags/tickets.php:285
559
  msgctxt "ticket stock message (cancelled stock)"
560
  msgid "%1$d Cancelled"
561
  msgstr ""
@@ -620,19 +647,19 @@ msgstr "Bekijk %s"
620
  msgid "Update %s"
621
  msgstr "Werk %s bij"
622
 
623
- #: src/views/tickets/rsvp.php:38
624
  msgid "Please fill in the RSVP confirmation name and email fields."
625
  msgstr ""
626
 
627
- #: src/views/tickets/rsvp.php:98
628
  msgid "Send RSVP confirmation to:"
629
  msgstr ""
630
 
631
- #: src/views/tickets/rsvp.php:137
632
  msgid "Don't list me on the public attendee list"
633
  msgstr "Laat mij niet zien op de publieke deelnemerslijst"
634
 
635
- #: src/views/tickets/rsvp.php:147
636
  msgid "Login to RSVP"
637
  msgstr ""
638
 
@@ -640,7 +667,7 @@ msgstr ""
640
  msgid "Event Tickets allows your guests to RSVP from any post, page, or event."
641
  msgstr ""
642
 
643
- #: src/Tribe/Main.php:724
644
  msgid "Buy"
645
  msgstr ""
646
 
@@ -652,35 +679,35 @@ msgstr ""
652
  msgid "Please enter in without thousand separators and currency symbols."
653
  msgstr ""
654
 
655
- #: src/Tribe/RSVP.php:734
656
  msgid "You confirmed you will not be attending %s"
657
  msgstr ""
658
 
659
- #: src/Tribe/Tickets.php:946
660
  msgid "Use global stock"
661
  msgstr ""
662
 
663
- #: src/Tribe/Tickets.php:947
664
  msgid "Use global stock but cap sales"
665
  msgstr ""
666
 
667
- #: src/Tribe/Tickets.php:948
668
  msgid "Independent (do not use global stock)"
669
  msgstr ""
670
 
671
- #: src/Tribe/Tickets.php:1405
672
  msgid "Tickets are not available as this %s has passed."
673
  msgstr ""
674
 
675
- #: src/Tribe/Tickets.php:1407
676
  msgid "Tickets are not yet available."
677
  msgstr ""
678
 
679
- #: src/Tribe/Tickets.php:1409
680
  msgid "Tickets are no longer available."
681
  msgstr ""
682
 
683
- #: src/Tribe/Tickets.php:1411
684
  msgid "There are no tickets available at this time."
685
  msgstr ""
686
 
@@ -770,39 +797,39 @@ msgstr ""
770
  msgid "Free"
771
  msgstr "Gratis"
772
 
773
- #: src/Tribe/Main.php:488
774
  msgid "If you have a valid license for one of our paid plugins, you can %s in our premium support forums. Our support team monitors the forums and will respond to your thread within 24-48 hours (during the week)."
775
  msgstr ""
776
 
777
- #: src/Tribe/RSVP.php:996
778
  msgid "You can't RSVP more than the total remaining tickets."
779
  msgstr ""
780
 
781
- #: src/Tribe/RSVP.php:1408
782
  msgid "Return to the %1$sAttendees Report%2$s."
783
  msgstr ""
784
 
785
- #: src/Tribe/RSVP.php:1415
786
  msgid "Post updated. %1$s"
787
  msgstr ""
788
 
789
- #: src/Tribe/RSVP.php:1419
790
  msgid "Post published. %1$s"
791
  msgstr ""
792
 
793
- #: src/Tribe/RSVP.php:1422
794
  msgid "Post submitted."
795
  msgstr ""
796
 
797
- #: src/Tribe/RSVP.php:1423
798
  msgid "Post scheduled."
799
  msgstr ""
800
 
801
- #: src/Tribe/RSVP.php:1424
802
  msgid "Post draft updated."
803
  msgstr ""
804
 
805
- #: src/Tribe/Tickets.php:661
806
  msgid "Editing the ticket price is currently disallowed."
807
  msgstr ""
808
 
@@ -854,59 +881,59 @@ msgstr "Annuleren"
854
  msgid "When The Events Calendar and Event Tickets are both activated, The Events Calendar must be running version %1$s or greater. Please %2$supdate now.%3$s"
855
  msgstr ""
856
 
857
- #: src/Tribe/Main.php:434
858
  msgid "Support for Event Tickets"
859
  msgstr ""
860
 
861
- #: src/Tribe/Main.php:436
862
  msgid "Settings overview"
863
  msgstr ""
864
 
865
- #: src/Tribe/Main.php:437
866
  msgid "Features overview"
867
  msgstr ""
868
 
869
- #: src/Tribe/Main.php:438
870
  msgid "Troubleshooting common problems"
871
  msgstr ""
872
 
873
- #: src/Tribe/Main.php:439
874
  msgid "Customizing Event Tickets"
875
  msgstr ""
876
 
877
- #: src/Tribe/Main.php:456
878
  msgid "New User Primer"
879
  msgstr ""
880
 
881
- #: src/Tribe/Main.php:458
882
  msgid "We are committed to helping you sell tickets for your event. Check out our handy %s to get started."
883
  msgstr ""
884
 
885
- #: src/Tribe/Main.php:475
886
  msgid "open-source forum on WordPress.org"
887
  msgstr ""
888
 
889
- #: src/Tribe/Main.php:476
890
  msgid "If you have tried the above steps and are still having trouble, you can post a new thread to our %s. Our support staff monitors these forums once a week and would be happy to assist you there."
891
  msgstr ""
892
 
893
- #: src/Tribe/Main.php:478
894
  msgid "premium support on our website"
895
  msgstr ""
896
 
897
- #: src/Tribe/Main.php:479
898
  msgid "Events Tickets Plus"
899
  msgstr "Events Tickets Plus"
900
 
901
- #: src/Tribe/Main.php:480
902
  msgid "Looking for more immediate support? We offer %1$s with the purchase of any of our premium plugins (like %2$s). Pick up a license and you can post there directly and expect a response within 24-48 hours during weekdays."
903
  msgstr ""
904
 
905
- #: src/Tribe/Main.php:482 src/Tribe/Main.php:487
906
  msgid "post a thread"
907
  msgstr ""
908
 
909
- #: src/Tribe/Main.php:483
910
  msgid "Already have Events Tickets Plus? You can %s in our premium support forums. Our support team monitors the forums and will respond to your thread within 24-48 hours (during the week)."
911
  msgstr ""
912
 
@@ -944,7 +971,7 @@ msgid "Print"
944
  msgstr "Print"
945
 
946
  #: src/Tribe/Attendees_Table.php:490
947
- #: src/admin-views/admin-welcome-message.php:36 src/views/tickets/rsvp.php:118
948
  msgid "Email"
949
  msgstr "E-mail"
950
 
@@ -968,32 +995,32 @@ msgstr "Ticket header afbeelding"
968
  msgid "Set as ticket header"
969
  msgstr "Stel in als ticket header"
970
 
971
- #: src/Tribe/RSVP.php:236
972
  msgctxt "Attendee number"
973
  msgid "Attendee %1$s"
974
  msgstr "Deelnemer %1$s"
975
 
976
- #: src/Tribe/RSVP.php:704
977
  msgid "Your tickets from %s"
978
  msgstr "Uw tickets van %s"
979
 
980
- #: src/Tribe/RSVP.php:990
981
  msgid "Your RSVP has been received! Check your email for your RSVP confirmation."
982
  msgstr "Uw RSVP is ontvangen! Controleer uw e-mail voor de bevestiging van uw RSVP."
983
 
984
- #: src/Tribe/RSVP.php:1001
985
  msgid "In order to RSVP, you must enter your name and a valid email address."
986
  msgstr "Om RSVP, moet u uw naam en een geldig e-mailadres invoeren."
987
 
988
- #: src/Tribe/RSVP.php:1140
989
  msgid "(deleted)"
990
  msgstr "(verwijderd)"
991
 
992
- #: src/Tribe/Tickets.php:429
993
  msgid "Your ticket has been saved."
994
  msgstr "Je ticket is opgeslagen."
995
 
996
- #: src/Tribe/Tickets.php:607
997
  msgid "Your ticket has been deleted."
998
  msgstr "Je ticket is verwijderd."
999
 
@@ -1182,25 +1209,25 @@ msgstr "Koper"
1182
  msgid "RSVP"
1183
  msgstr "RSVP"
1184
 
1185
- #: src/views/tickets/rsvp.php:68
1186
  msgid "%1$s out of %2$s available"
1187
  msgstr "%1$s uit %2$s beschikbaar"
1188
 
1189
- #: src/views/tickets/rsvp.php:72
1190
  msgid "Out of stock!"
1191
  msgstr "Uitverkocht!"
1192
 
1193
- #: src/views/tickets/rsvp.php:110
1194
  msgid "Full Name"
1195
  msgstr ""
1196
 
1197
- #: src/views/tickets/rsvp.php:149
1198
  msgid "Confirm RSVP"
1199
  msgstr "RSVP bevestigen"
1200
 
1201
- #. #-#-#-#-# event-tickets.pot (Event Tickets 4.4.10) #-#-#-#-#
1202
  #. Plugin Name of the plugin/theme
1203
- #: src/Tribe/Main.php:502
1204
  msgid "Event Tickets"
1205
  msgstr "Event Tickets"
1206
 
10
  "X-Generator: GlotPress/1.0-alpha-1100\n"
11
  "Project-Id-Version: Event Tickets\n"
12
 
13
+ #: src/template-tags/tickets.php:185
14
+ msgctxt "list view stock sold out"
15
+ msgid "Sold out"
16
+ msgstr ""
17
+
18
+ #: src/template-tags/tickets.php:197
19
+ msgid "%s spot left"
20
+ msgid_plural "%s spots left"
21
+ msgstr[0] ""
22
+ msgstr[1] ""
23
+
24
+ #: src/template-tags/tickets.php:199
25
+ msgid "%s ticket left"
26
+ msgid_plural "%s tickets left"
27
+ msgstr[0] ""
28
+ msgstr[1] ""
29
+
30
+ #: src/template-tags/tickets.php:208
31
+ msgctxt "list view rsvp now ticket button"
32
+ msgid "RSVP Now!"
33
+ msgstr ""
34
+
35
+ #: src/template-tags/tickets.php:211
36
+ msgctxt "list view buy now ticket button"
37
+ msgid "Buy Now!"
38
+ msgstr ""
39
+
40
+ #: src/views/tickets/rsvp.php:189
41
  msgid "You must have JavaScript activated to purchase tickets. Please enable JavaScript in your browser."
42
  msgstr ""
43
 
44
+ #: src/template-tags/tickets.php:386
45
  msgctxt "ticket stock message (remaining stock)"
46
  msgid "%1$d Remaining"
47
  msgstr ""
48
 
49
+ #: src/template-tags/tickets.php:389
50
  msgctxt "ticket stock message (pending stock)"
51
  msgid "%1$d Awaiting Review"
52
  msgstr ""
131
  msgid "Location of Tickets form"
132
  msgstr ""
133
 
134
+ #: src/template-tags/tickets.php:371
135
  msgid "Sold"
136
  msgstr "Verkocht"
137
 
138
+ #: src/template-tags/tickets.php:373
139
  msgctxt "separate going and remain RSVPs"
140
  msgid "RSVP'd Going"
141
  msgstr ""
142
 
143
+ #: src/template-tags/tickets.php:378
144
  msgid "%s %d"
145
  msgstr ""
146
 
147
+ #: src/template-tags/tickets.php:384
148
  msgctxt "ticket global stock message (remaining stock)"
149
  msgid "%1$d Remaining of the global stock"
150
  msgstr ""
188
  msgid "RSVP: "
189
  msgstr ""
190
 
191
+ #: src/views/tickets/rsvp.php:32
192
  msgctxt "form heading"
193
  msgid "RSVP"
194
  msgstr ""
195
 
196
+ #: src/views/tickets/rsvp.php:143
197
  msgctxt "order status label"
198
  msgid "RSVP"
199
  msgstr ""
465
  msgid "RSVPs"
466
  msgstr ""
467
 
468
+ #: src/Tribe/Main.php:596
469
  msgid "Welcome to Event Tickets"
470
  msgstr ""
471
 
472
+ #: src/Tribe/Main.php:731
473
  msgctxt "button text"
474
  msgid "RSVP"
475
  msgstr ""
493
  msgid "Not Going:"
494
  msgstr ""
495
 
496
+ #: src/Tribe/RSVP.php:163
497
  msgctxt "ticket provider"
498
  msgid "RSVP"
499
  msgstr ""
500
 
501
+ #: src/Tribe/RSVP.php:279
502
  msgid "RSVP Tickets"
503
  msgstr ""
504
 
505
+ #: src/Tribe/RSVP.php:280
506
  msgid "RSVP Ticket"
507
  msgstr ""
508
 
578
  msgid "You can require that users log into your site before they are able to RSVP (or buy tickets). Please review your WordPress Membership option (via the General Settings admin screen) before adjusting this setting."
579
  msgstr ""
580
 
581
+ #: src/template-tags/tickets.php:368
582
  msgid "global inventory"
583
  msgstr ""
584
 
585
+ #: src/template-tags/tickets.php:391
586
  msgctxt "ticket stock message (cancelled stock)"
587
  msgid "%1$d Cancelled"
588
  msgstr ""
647
  msgid "Update %s"
648
  msgstr "Werk %s bij"
649
 
650
+ #: src/views/tickets/rsvp.php:50
651
  msgid "Please fill in the RSVP confirmation name and email fields."
652
  msgstr ""
653
 
654
+ #: src/views/tickets/rsvp.php:114
655
  msgid "Send RSVP confirmation to:"
656
  msgstr ""
657
 
658
+ #: src/views/tickets/rsvp.php:159
659
  msgid "Don't list me on the public attendee list"
660
  msgstr "Laat mij niet zien op de publieke deelnemerslijst"
661
 
662
+ #: src/views/tickets/rsvp.php:171
663
  msgid "Login to RSVP"
664
  msgstr ""
665
 
667
  msgid "Event Tickets allows your guests to RSVP from any post, page, or event."
668
  msgstr ""
669
 
670
+ #: src/Tribe/Main.php:731
671
  msgid "Buy"
672
  msgstr ""
673
 
679
  msgid "Please enter in without thousand separators and currency symbols."
680
  msgstr ""
681
 
682
+ #: src/Tribe/RSVP.php:743
683
  msgid "You confirmed you will not be attending %s"
684
  msgstr ""
685
 
686
+ #: src/Tribe/Tickets.php:986
687
  msgid "Use global stock"
688
  msgstr ""
689
 
690
+ #: src/Tribe/Tickets.php:987
691
  msgid "Use global stock but cap sales"
692
  msgstr ""
693
 
694
+ #: src/Tribe/Tickets.php:988
695
  msgid "Independent (do not use global stock)"
696
  msgstr ""
697
 
698
+ #: src/Tribe/Tickets.php:1573
699
  msgid "Tickets are not available as this %s has passed."
700
  msgstr ""
701
 
702
+ #: src/Tribe/Tickets.php:1575
703
  msgid "Tickets are not yet available."
704
  msgstr ""
705
 
706
+ #: src/Tribe/Tickets.php:1577
707
  msgid "Tickets are no longer available."
708
  msgstr ""
709
 
710
+ #: src/Tribe/Tickets.php:1579
711
  msgid "There are no tickets available at this time."
712
  msgstr ""
713
 
797
  msgid "Free"
798
  msgstr "Gratis"
799
 
800
+ #: src/Tribe/Main.php:495
801
  msgid "If you have a valid license for one of our paid plugins, you can %s in our premium support forums. Our support team monitors the forums and will respond to your thread within 24-48 hours (during the week)."
802
  msgstr ""
803
 
804
+ #: src/Tribe/RSVP.php:973
805
  msgid "You can't RSVP more than the total remaining tickets."
806
  msgstr ""
807
 
808
+ #: src/Tribe/RSVP.php:1513
809
  msgid "Return to the %1$sAttendees Report%2$s."
810
  msgstr ""
811
 
812
+ #: src/Tribe/RSVP.php:1520
813
  msgid "Post updated. %1$s"
814
  msgstr ""
815
 
816
+ #: src/Tribe/RSVP.php:1524
817
  msgid "Post published. %1$s"
818
  msgstr ""
819
 
820
+ #: src/Tribe/RSVP.php:1527
821
  msgid "Post submitted."
822
  msgstr ""
823
 
824
+ #: src/Tribe/RSVP.php:1528
825
  msgid "Post scheduled."
826
  msgstr ""
827
 
828
+ #: src/Tribe/RSVP.php:1529
829
  msgid "Post draft updated."
830
  msgstr ""
831
 
832
+ #: src/Tribe/Tickets.php:701
833
  msgid "Editing the ticket price is currently disallowed."
834
  msgstr ""
835
 
881
  msgid "When The Events Calendar and Event Tickets are both activated, The Events Calendar must be running version %1$s or greater. Please %2$supdate now.%3$s"
882
  msgstr ""
883
 
884
+ #: src/Tribe/Main.php:441
885
  msgid "Support for Event Tickets"
886
  msgstr ""
887
 
888
+ #: src/Tribe/Main.php:443
889
  msgid "Settings overview"
890
  msgstr ""
891
 
892
+ #: src/Tribe/Main.php:444
893
  msgid "Features overview"
894
  msgstr ""
895
 
896
+ #: src/Tribe/Main.php:445
897
  msgid "Troubleshooting common problems"
898
  msgstr ""
899
 
900
+ #: src/Tribe/Main.php:446
901
  msgid "Customizing Event Tickets"
902
  msgstr ""
903
 
904
+ #: src/Tribe/Main.php:463
905
  msgid "New User Primer"
906
  msgstr ""
907
 
908
+ #: src/Tribe/Main.php:465
909
  msgid "We are committed to helping you sell tickets for your event. Check out our handy %s to get started."
910
  msgstr ""
911
 
912
+ #: src/Tribe/Main.php:482
913
  msgid "open-source forum on WordPress.org"
914
  msgstr ""
915
 
916
+ #: src/Tribe/Main.php:483
917
  msgid "If you have tried the above steps and are still having trouble, you can post a new thread to our %s. Our support staff monitors these forums once a week and would be happy to assist you there."
918
  msgstr ""
919
 
920
+ #: src/Tribe/Main.php:485
921
  msgid "premium support on our website"
922
  msgstr ""
923
 
924
+ #: src/Tribe/Main.php:486
925
  msgid "Events Tickets Plus"
926
  msgstr "Events Tickets Plus"
927
 
928
+ #: src/Tribe/Main.php:487
929
  msgid "Looking for more immediate support? We offer %1$s with the purchase of any of our premium plugins (like %2$s). Pick up a license and you can post there directly and expect a response within 24-48 hours during weekdays."
930
  msgstr ""
931
 
932
+ #: src/Tribe/Main.php:489 src/Tribe/Main.php:494
933
  msgid "post a thread"
934
  msgstr ""
935
 
936
+ #: src/Tribe/Main.php:490
937
  msgid "Already have Events Tickets Plus? You can %s in our premium support forums. Our support team monitors the forums and will respond to your thread within 24-48 hours (during the week)."
938
  msgstr ""
939
 
971
  msgstr "Print"
972
 
973
  #: src/Tribe/Attendees_Table.php:490
974
+ #: src/admin-views/admin-welcome-message.php:36 src/views/tickets/rsvp.php:134
975
  msgid "Email"
976
  msgstr "E-mail"
977
 
995
  msgid "Set as ticket header"
996
  msgstr "Stel in als ticket header"
997
 
998
+ #: src/Tribe/RSVP.php:241
999
  msgctxt "Attendee number"
1000
  msgid "Attendee %1$s"
1001
  msgstr "Deelnemer %1$s"
1002
 
1003
+ #: src/Tribe/RSVP.php:712
1004
  msgid "Your tickets from %s"
1005
  msgstr "Uw tickets van %s"
1006
 
1007
+ #: src/Tribe/RSVP.php:967
1008
  msgid "Your RSVP has been received! Check your email for your RSVP confirmation."
1009
  msgstr "Uw RSVP is ontvangen! Controleer uw e-mail voor de bevestiging van uw RSVP."
1010
 
1011
+ #: src/Tribe/RSVP.php:978
1012
  msgid "In order to RSVP, you must enter your name and a valid email address."
1013
  msgstr "Om RSVP, moet u uw naam en een geldig e-mailadres invoeren."
1014
 
1015
+ #: src/Tribe/RSVP.php:1222
1016
  msgid "(deleted)"
1017
  msgstr "(verwijderd)"
1018
 
1019
+ #: src/Tribe/Tickets.php:469
1020
  msgid "Your ticket has been saved."
1021
  msgstr "Je ticket is opgeslagen."
1022
 
1023
+ #: src/Tribe/Tickets.php:647
1024
  msgid "Your ticket has been deleted."
1025
  msgstr "Je ticket is verwijderd."
1026
 
1209
  msgid "RSVP"
1210
  msgstr "RSVP"
1211
 
1212
+ #: src/views/tickets/rsvp.php:84
1213
  msgid "%1$s out of %2$s available"
1214
  msgstr "%1$s uit %2$s beschikbaar"
1215
 
1216
+ #: src/views/tickets/rsvp.php:88
1217
  msgid "Out of stock!"
1218
  msgstr "Uitverkocht!"
1219
 
1220
+ #: src/views/tickets/rsvp.php:126
1221
  msgid "Full Name"
1222
  msgstr ""
1223
 
1224
+ #: src/views/tickets/rsvp.php:180
1225
  msgid "Confirm RSVP"
1226
  msgstr "RSVP bevestigen"
1227
 
1228
+ #. #-#-#-#-# event-tickets.pot (Event Tickets 4.5dev1) #-#-#-#-#
1229
  #. Plugin Name of the plugin/theme
1230
+ #: src/Tribe/Main.php:509
1231
  msgid "Event Tickets"
1232
  msgstr "Event Tickets"
1233
 
lang/event-tickets.pot CHANGED
@@ -2,13 +2,13 @@
2
  # This file is distributed under the same license as the Event Tickets package.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: Event Tickets 4.4.10\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/event-tickets\n"
7
- "POT-Creation-Date: 2017-06-14 15:16:52+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=UTF-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
11
- "PO-Revision-Date: 2017-06-14 15:16\n"
12
  "Last-Translator: \n"
13
  "Language-Team: \n"
14
 
@@ -224,7 +224,7 @@ msgid "Print"
224
  msgstr ""
225
 
226
  #: src/Tribe/Attendees_Table.php:490
227
- #: src/admin-views/admin-welcome-message.php:36 src/views/tickets/rsvp.php:118
228
  msgid "Email"
229
  msgstr ""
230
 
@@ -304,95 +304,95 @@ msgid ""
304
  "Calendar must be running version %1$s or greater. Please %2$supdate now.%3$s"
305
  msgstr ""
306
 
307
- #: src/Tribe/Main.php:434
308
  msgid "Support for Event Tickets"
309
  msgstr ""
310
 
311
- #: src/Tribe/Main.php:436
312
  msgid "Settings overview"
313
  msgstr ""
314
 
315
- #: src/Tribe/Main.php:437
316
  msgid "Features overview"
317
  msgstr ""
318
 
319
- #: src/Tribe/Main.php:438
320
  msgid "Troubleshooting common problems"
321
  msgstr ""
322
 
323
- #: src/Tribe/Main.php:439
324
  msgid "Customizing Event Tickets"
325
  msgstr ""
326
 
327
- #: src/Tribe/Main.php:456
328
  msgid "New User Primer"
329
  msgstr ""
330
 
331
- #: src/Tribe/Main.php:458
332
  msgid ""
333
  "We are committed to helping you sell tickets for your event. Check out our "
334
  "handy %s to get started."
335
  msgstr ""
336
 
337
- #: src/Tribe/Main.php:475
338
  msgid "open-source forum on WordPress.org"
339
  msgstr ""
340
 
341
- #: src/Tribe/Main.php:476
342
  msgid ""
343
  "If you have tried the above steps and are still having trouble, you can post "
344
  "a new thread to our %s. Our support staff monitors these forums once a week "
345
  "and would be happy to assist you there."
346
  msgstr ""
347
 
348
- #: src/Tribe/Main.php:478
349
  msgid "premium support on our website"
350
  msgstr ""
351
 
352
- #: src/Tribe/Main.php:479
353
  msgid "Events Tickets Plus"
354
  msgstr ""
355
 
356
- #: src/Tribe/Main.php:480
357
  msgid ""
358
  "Looking for more immediate support? We offer %1$s with the purchase of any "
359
  "of our premium plugins (like %2$s). Pick up a license and you can post there "
360
  "directly and expect a response within 24-48 hours during weekdays."
361
  msgstr ""
362
 
363
- #: src/Tribe/Main.php:482 src/Tribe/Main.php:487
364
  msgid "post a thread"
365
  msgstr ""
366
 
367
- #: src/Tribe/Main.php:483
368
  msgid ""
369
  "Already have Events Tickets Plus? You can %s in our premium support forums. "
370
  "Our support team monitors the forums and will respond to your thread within "
371
  "24-48 hours (during the week)."
372
  msgstr ""
373
 
374
- #: src/Tribe/Main.php:488
375
  msgid ""
376
  "If you have a valid license for one of our paid plugins, you can %s in our "
377
  "premium support forums. Our support team monitors the forums and will "
378
  "respond to your thread within 24-48 hours (during the week)."
379
  msgstr ""
380
 
381
- #. #-#-#-#-# event-tickets.pot (Event Tickets 4.4.10) #-#-#-#-#
382
  #. Plugin Name of the plugin/theme
383
- #: src/Tribe/Main.php:502
384
  msgid "Event Tickets"
385
  msgstr ""
386
 
387
- #: src/Tribe/Main.php:589
388
  msgid "Welcome to Event Tickets"
389
  msgstr ""
390
 
391
- #: src/Tribe/Main.php:724
392
  msgid "Buy"
393
  msgstr ""
394
 
395
- #: src/Tribe/Main.php:724
396
  msgctxt "button text"
397
  msgid "RSVP"
398
  msgstr ""
@@ -434,110 +434,110 @@ msgctxt "attendee summary"
434
  msgid "Not Going:"
435
  msgstr ""
436
 
437
- #: src/Tribe/RSVP.php:158
438
  msgctxt "ticket provider"
439
  msgid "RSVP"
440
  msgstr ""
441
 
442
- #: src/Tribe/RSVP.php:236
443
  msgctxt "Attendee number"
444
  msgid "Attendee %1$s"
445
  msgstr ""
446
 
447
- #: src/Tribe/RSVP.php:274
448
  msgid "RSVP Tickets"
449
  msgstr ""
450
 
451
- #: src/Tribe/RSVP.php:275
452
  msgid "RSVP Ticket"
453
  msgstr ""
454
 
455
- #: src/Tribe/RSVP.php:704
456
  msgid "Your tickets from %s"
457
  msgstr ""
458
 
459
- #: src/Tribe/RSVP.php:734
460
  msgid "You confirmed you will not be attending %s"
461
  msgstr ""
462
 
463
- #: src/Tribe/RSVP.php:990
464
  msgid ""
465
  "Your RSVP has been received! Check your email for your RSVP confirmation."
466
  msgstr ""
467
 
468
- #: src/Tribe/RSVP.php:996
469
  msgid "You can't RSVP more than the total remaining tickets."
470
  msgstr ""
471
 
472
- #: src/Tribe/RSVP.php:1001
473
  msgid "In order to RSVP, you must enter your name and a valid email address."
474
  msgstr ""
475
 
476
- #: src/Tribe/RSVP.php:1140
477
  msgid "(deleted)"
478
  msgstr ""
479
 
480
- #: src/Tribe/RSVP.php:1408
481
  msgid "Return to the %1$sAttendees Report%2$s."
482
  msgstr ""
483
 
484
- #: src/Tribe/RSVP.php:1415
485
  msgid "Post updated. %1$s"
486
  msgstr ""
487
 
488
- #: src/Tribe/RSVP.php:1419
489
  msgid "Post published. %1$s"
490
  msgstr ""
491
 
492
- #: src/Tribe/RSVP.php:1422
493
  msgid "Post submitted."
494
  msgstr ""
495
 
496
- #: src/Tribe/RSVP.php:1423
497
  msgid "Post scheduled."
498
  msgstr ""
499
 
500
- #: src/Tribe/RSVP.php:1424
501
  msgid "Post draft updated."
502
  msgstr ""
503
 
504
- #: src/Tribe/Tickets.php:429
505
  msgid "Your ticket has been saved."
506
  msgstr ""
507
 
508
- #: src/Tribe/Tickets.php:607
509
  msgid "Your ticket has been deleted."
510
  msgstr ""
511
 
512
- #: src/Tribe/Tickets.php:661
513
  msgid "Editing the ticket price is currently disallowed."
514
  msgstr ""
515
 
516
- #: src/Tribe/Tickets.php:946
517
  msgid "Use global stock"
518
  msgstr ""
519
 
520
- #: src/Tribe/Tickets.php:947
521
  msgid "Use global stock but cap sales"
522
  msgstr ""
523
 
524
- #: src/Tribe/Tickets.php:948
525
  msgid "Independent (do not use global stock)"
526
  msgstr ""
527
 
528
- #: src/Tribe/Tickets.php:1405
529
  msgid "Tickets are not available as this %s has passed."
530
  msgstr ""
531
 
532
- #: src/Tribe/Tickets.php:1407
533
  msgid "Tickets are not yet available."
534
  msgstr ""
535
 
536
- #: src/Tribe/Tickets.php:1409
537
  msgid "Tickets are no longer available."
538
  msgstr ""
539
 
540
- #: src/Tribe/Tickets.php:1411
541
  msgid "There are no tickets available at this time."
542
  msgstr ""
543
 
@@ -1078,39 +1078,66 @@ msgid ""
1078
  "General Settings admin screen) before adjusting this setting."
1079
  msgstr ""
1080
 
1081
- #: src/template-tags/tickets.php:262
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1082
  msgid "global inventory"
1083
  msgstr ""
1084
 
1085
- #: src/template-tags/tickets.php:265
1086
  msgid "Sold"
1087
  msgstr ""
1088
 
1089
- #: src/template-tags/tickets.php:267
1090
  msgctxt "separate going and remain RSVPs"
1091
  msgid "RSVP'd Going"
1092
  msgstr ""
1093
 
1094
- #: src/template-tags/tickets.php:272
1095
  msgid "%s %d"
1096
  msgstr ""
1097
 
1098
- #: src/template-tags/tickets.php:278
1099
  msgctxt "ticket global stock message (remaining stock)"
1100
  msgid "%1$d Remaining of the global stock"
1101
  msgstr ""
1102
 
1103
- #: src/template-tags/tickets.php:280
1104
  msgctxt "ticket stock message (remaining stock)"
1105
  msgid "%1$d Remaining"
1106
  msgstr ""
1107
 
1108
- #: src/template-tags/tickets.php:283
1109
  msgctxt "ticket stock message (pending stock)"
1110
  msgid "%1$d Awaiting Review"
1111
  msgstr ""
1112
 
1113
- #: src/template-tags/tickets.php:285
1114
  msgctxt "ticket stock message (cancelled stock)"
1115
  msgid "%1$d Cancelled"
1116
  msgstr ""
@@ -1241,49 +1268,49 @@ msgstr ""
1241
  msgid "Update %s"
1242
  msgstr ""
1243
 
1244
- #: src/views/tickets/rsvp.php:24
1245
  msgctxt "form heading"
1246
  msgid "RSVP"
1247
  msgstr ""
1248
 
1249
- #: src/views/tickets/rsvp.php:38
1250
  msgid "Please fill in the RSVP confirmation name and email fields."
1251
  msgstr ""
1252
 
1253
- #: src/views/tickets/rsvp.php:68
1254
  msgid "%1$s out of %2$s available"
1255
  msgstr ""
1256
 
1257
- #: src/views/tickets/rsvp.php:72
1258
  msgid "Out of stock!"
1259
  msgstr ""
1260
 
1261
- #: src/views/tickets/rsvp.php:98
1262
  msgid "Send RSVP confirmation to:"
1263
  msgstr ""
1264
 
1265
- #: src/views/tickets/rsvp.php:110
1266
  msgid "Full Name"
1267
  msgstr ""
1268
 
1269
- #: src/views/tickets/rsvp.php:127
1270
  msgctxt "order status label"
1271
  msgid "RSVP"
1272
  msgstr ""
1273
 
1274
- #: src/views/tickets/rsvp.php:137
1275
  msgid "Don't list me on the public attendee list"
1276
  msgstr ""
1277
 
1278
- #: src/views/tickets/rsvp.php:147
1279
  msgid "Login to RSVP"
1280
  msgstr ""
1281
 
1282
- #: src/views/tickets/rsvp.php:149
1283
  msgid "Confirm RSVP"
1284
  msgstr ""
1285
 
1286
- #: src/views/tickets/rsvp.php:158
1287
  msgid ""
1288
  "You must have JavaScript activated to purchase tickets. Please enable "
1289
  "JavaScript in your browser."
2
  # This file is distributed under the same license as the Event Tickets package.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: Event Tickets 4.5dev1\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/event-tickets\n"
7
+ "POT-Creation-Date: 2017-06-15 16:28:24+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=UTF-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
11
+ "PO-Revision-Date: 2017-06-15 16:28\n"
12
  "Last-Translator: \n"
13
  "Language-Team: \n"
14
 
224
  msgstr ""
225
 
226
  #: src/Tribe/Attendees_Table.php:490
227
+ #: src/admin-views/admin-welcome-message.php:36 src/views/tickets/rsvp.php:134
228
  msgid "Email"
229
  msgstr ""
230
 
304
  "Calendar must be running version %1$s or greater. Please %2$supdate now.%3$s"
305
  msgstr ""
306
 
307
+ #: src/Tribe/Main.php:441
308
  msgid "Support for Event Tickets"
309
  msgstr ""
310
 
311
+ #: src/Tribe/Main.php:443
312
  msgid "Settings overview"
313
  msgstr ""
314
 
315
+ #: src/Tribe/Main.php:444
316
  msgid "Features overview"
317
  msgstr ""
318
 
319
+ #: src/Tribe/Main.php:445
320
  msgid "Troubleshooting common problems"
321
  msgstr ""
322
 
323
+ #: src/Tribe/Main.php:446
324
  msgid "Customizing Event Tickets"
325
  msgstr ""
326
 
327
+ #: src/Tribe/Main.php:463
328
  msgid "New User Primer"
329
  msgstr ""
330
 
331
+ #: src/Tribe/Main.php:465
332
  msgid ""
333
  "We are committed to helping you sell tickets for your event. Check out our "
334
  "handy %s to get started."
335
  msgstr ""
336
 
337
+ #: src/Tribe/Main.php:482
338
  msgid "open-source forum on WordPress.org"
339
  msgstr ""
340
 
341
+ #: src/Tribe/Main.php:483
342
  msgid ""
343
  "If you have tried the above steps and are still having trouble, you can post "
344
  "a new thread to our %s. Our support staff monitors these forums once a week "
345
  "and would be happy to assist you there."
346
  msgstr ""
347
 
348
+ #: src/Tribe/Main.php:485
349
  msgid "premium support on our website"
350
  msgstr ""
351
 
352
+ #: src/Tribe/Main.php:486
353
  msgid "Events Tickets Plus"
354
  msgstr ""
355
 
356
+ #: src/Tribe/Main.php:487
357
  msgid ""
358
  "Looking for more immediate support? We offer %1$s with the purchase of any "
359
  "of our premium plugins (like %2$s). Pick up a license and you can post there "
360
  "directly and expect a response within 24-48 hours during weekdays."
361
  msgstr ""
362
 
363
+ #: src/Tribe/Main.php:489 src/Tribe/Main.php:494
364
  msgid "post a thread"
365
  msgstr ""
366
 
367
+ #: src/Tribe/Main.php:490
368
  msgid ""
369
  "Already have Events Tickets Plus? You can %s in our premium support forums. "
370
  "Our support team monitors the forums and will respond to your thread within "
371
  "24-48 hours (during the week)."
372
  msgstr ""
373
 
374
+ #: src/Tribe/Main.php:495
375
  msgid ""
376
  "If you have a valid license for one of our paid plugins, you can %s in our "
377
  "premium support forums. Our support team monitors the forums and will "
378
  "respond to your thread within 24-48 hours (during the week)."
379
  msgstr ""
380
 
381
+ #. #-#-#-#-# event-tickets.pot (Event Tickets 4.5dev1) #-#-#-#-#
382
  #. Plugin Name of the plugin/theme
383
+ #: src/Tribe/Main.php:509
384
  msgid "Event Tickets"
385
  msgstr ""
386
 
387
+ #: src/Tribe/Main.php:596
388
  msgid "Welcome to Event Tickets"
389
  msgstr ""
390
 
391
+ #: src/Tribe/Main.php:731
392
  msgid "Buy"
393
  msgstr ""
394
 
395
+ #: src/Tribe/Main.php:731
396
  msgctxt "button text"
397
  msgid "RSVP"
398
  msgstr ""
434
  msgid "Not Going:"
435
  msgstr ""
436
 
437
+ #: src/Tribe/RSVP.php:163
438
  msgctxt "ticket provider"
439
  msgid "RSVP"
440
  msgstr ""
441
 
442
+ #: src/Tribe/RSVP.php:241
443
  msgctxt "Attendee number"
444
  msgid "Attendee %1$s"
445
  msgstr ""
446
 
447
+ #: src/Tribe/RSVP.php:279
448
  msgid "RSVP Tickets"
449
  msgstr ""
450
 
451
+ #: src/Tribe/RSVP.php:280
452
  msgid "RSVP Ticket"
453
  msgstr ""
454
 
455
+ #: src/Tribe/RSVP.php:712
456
  msgid "Your tickets from %s"
457
  msgstr ""
458
 
459
+ #: src/Tribe/RSVP.php:743
460
  msgid "You confirmed you will not be attending %s"
461
  msgstr ""
462
 
463
+ #: src/Tribe/RSVP.php:967
464
  msgid ""
465
  "Your RSVP has been received! Check your email for your RSVP confirmation."
466
  msgstr ""
467
 
468
+ #: src/Tribe/RSVP.php:973
469
  msgid "You can't RSVP more than the total remaining tickets."
470
  msgstr ""
471
 
472
+ #: src/Tribe/RSVP.php:978
473
  msgid "In order to RSVP, you must enter your name and a valid email address."
474
  msgstr ""
475
 
476
+ #: src/Tribe/RSVP.php:1222
477
  msgid "(deleted)"
478
  msgstr ""
479
 
480
+ #: src/Tribe/RSVP.php:1513
481
  msgid "Return to the %1$sAttendees Report%2$s."
482
  msgstr ""
483
 
484
+ #: src/Tribe/RSVP.php:1520
485
  msgid "Post updated. %1$s"
486
  msgstr ""
487
 
488
+ #: src/Tribe/RSVP.php:1524
489
  msgid "Post published. %1$s"
490
  msgstr ""
491
 
492
+ #: src/Tribe/RSVP.php:1527
493
  msgid "Post submitted."
494
  msgstr ""
495
 
496
+ #: src/Tribe/RSVP.php:1528
497
  msgid "Post scheduled."
498
  msgstr ""
499
 
500
+ #: src/Tribe/RSVP.php:1529
501
  msgid "Post draft updated."
502
  msgstr ""
503
 
504
+ #: src/Tribe/Tickets.php:469
505
  msgid "Your ticket has been saved."
506
  msgstr ""
507
 
508
+ #: src/Tribe/Tickets.php:647
509
  msgid "Your ticket has been deleted."
510
  msgstr ""
511
 
512
+ #: src/Tribe/Tickets.php:701
513
  msgid "Editing the ticket price is currently disallowed."
514
  msgstr ""
515
 
516
+ #: src/Tribe/Tickets.php:986
517
  msgid "Use global stock"
518
  msgstr ""
519
 
520
+ #: src/Tribe/Tickets.php:987
521
  msgid "Use global stock but cap sales"
522
  msgstr ""
523
 
524
+ #: src/Tribe/Tickets.php:988
525
  msgid "Independent (do not use global stock)"
526
  msgstr ""
527
 
528
+ #: src/Tribe/Tickets.php:1573
529
  msgid "Tickets are not available as this %s has passed."
530
  msgstr ""
531
 
532
+ #: src/Tribe/Tickets.php:1575
533
  msgid "Tickets are not yet available."
534
  msgstr ""
535
 
536
+ #: src/Tribe/Tickets.php:1577
537
  msgid "Tickets are no longer available."
538
  msgstr ""
539
 
540
+ #: src/Tribe/Tickets.php:1579
541
  msgid "There are no tickets available at this time."
542
  msgstr ""
543
 
1078
  "General Settings admin screen) before adjusting this setting."
1079
  msgstr ""
1080
 
1081
+ #: src/template-tags/tickets.php:185
1082
+ msgctxt "list view stock sold out"
1083
+ msgid "Sold out"
1084
+ msgstr ""
1085
+
1086
+ #: src/template-tags/tickets.php:197
1087
+ msgid "%s spot left"
1088
+ msgid_plural "%s spots left"
1089
+ msgstr[0] ""
1090
+ msgstr[1] ""
1091
+
1092
+ #: src/template-tags/tickets.php:199
1093
+ msgid "%s ticket left"
1094
+ msgid_plural "%s tickets left"
1095
+ msgstr[0] ""
1096
+ msgstr[1] ""
1097
+
1098
+ #: src/template-tags/tickets.php:208
1099
+ msgctxt "list view rsvp now ticket button"
1100
+ msgid "RSVP Now!"
1101
+ msgstr ""
1102
+
1103
+ #: src/template-tags/tickets.php:211
1104
+ msgctxt "list view buy now ticket button"
1105
+ msgid "Buy Now!"
1106
+ msgstr ""
1107
+
1108
+ #: src/template-tags/tickets.php:368
1109
  msgid "global inventory"
1110
  msgstr ""
1111
 
1112
+ #: src/template-tags/tickets.php:371
1113
  msgid "Sold"
1114
  msgstr ""
1115
 
1116
+ #: src/template-tags/tickets.php:373
1117
  msgctxt "separate going and remain RSVPs"
1118
  msgid "RSVP'd Going"
1119
  msgstr ""
1120
 
1121
+ #: src/template-tags/tickets.php:378
1122
  msgid "%s %d"
1123
  msgstr ""
1124
 
1125
+ #: src/template-tags/tickets.php:384
1126
  msgctxt "ticket global stock message (remaining stock)"
1127
  msgid "%1$d Remaining of the global stock"
1128
  msgstr ""
1129
 
1130
+ #: src/template-tags/tickets.php:386
1131
  msgctxt "ticket stock message (remaining stock)"
1132
  msgid "%1$d Remaining"
1133
  msgstr ""
1134
 
1135
+ #: src/template-tags/tickets.php:389
1136
  msgctxt "ticket stock message (pending stock)"
1137
  msgid "%1$d Awaiting Review"
1138
  msgstr ""
1139
 
1140
+ #: src/template-tags/tickets.php:391
1141
  msgctxt "ticket stock message (cancelled stock)"
1142
  msgid "%1$d Cancelled"
1143
  msgstr ""
1268
  msgid "Update %s"
1269
  msgstr ""
1270
 
1271
+ #: src/views/tickets/rsvp.php:32
1272
  msgctxt "form heading"
1273
  msgid "RSVP"
1274
  msgstr ""
1275
 
1276
+ #: src/views/tickets/rsvp.php:50
1277
  msgid "Please fill in the RSVP confirmation name and email fields."
1278
  msgstr ""
1279
 
1280
+ #: src/views/tickets/rsvp.php:84
1281
  msgid "%1$s out of %2$s available"
1282
  msgstr ""
1283
 
1284
+ #: src/views/tickets/rsvp.php:88
1285
  msgid "Out of stock!"
1286
  msgstr ""
1287
 
1288
+ #: src/views/tickets/rsvp.php:114
1289
  msgid "Send RSVP confirmation to:"
1290
  msgstr ""
1291
 
1292
+ #: src/views/tickets/rsvp.php:126
1293
  msgid "Full Name"
1294
  msgstr ""
1295
 
1296
+ #: src/views/tickets/rsvp.php:143
1297
  msgctxt "order status label"
1298
  msgid "RSVP"
1299
  msgstr ""
1300
 
1301
+ #: src/views/tickets/rsvp.php:159
1302
  msgid "Don't list me on the public attendee list"
1303
  msgstr ""
1304
 
1305
+ #: src/views/tickets/rsvp.php:171
1306
  msgid "Login to RSVP"
1307
  msgstr ""
1308
 
1309
+ #: src/views/tickets/rsvp.php:180
1310
  msgid "Confirm RSVP"
1311
  msgstr ""
1312
 
1313
+ #: src/views/tickets/rsvp.php:189
1314
  msgid ""
1315
  "You must have JavaScript activated to purchase tickets. Please enable "
1316
  "JavaScript in your browser."
readme.txt CHANGED
@@ -3,8 +3,8 @@
3
  Contributors: ModernTribe, aguseo, borkweb, barry.hughes, bordoni, brianjessee, brook-tribe, courane01, faction23, GeoffBel, geoffgraham, ggwicz, jbrinley, leahkoerper, lucatume, mastromktg, mat-lipe, MZAWeb, neillmcshea, nicosantos, patriciahillebrandt, peterchester, reid.peifer, roblagatta, ryancurban, shane.pearlman, shelbelliott, tribecari, vicskf, zbtirrell
4
  Tags: RSVP, events, tickets, event management, calendar, ticket sales, community, registration, api, dates, date, posts, workshop, conference, meeting, seminar, concert, summit, ticket integration, event ticketing
5
  Requires at least: 3.9
 
6
  Tested up to: 4.8
7
- Stable tag: 4.4.10
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
@@ -233,6 +233,17 @@ The plugin is produced by [Modern Tribe Inc](http://m.tri.be/18uc).
233
 
234
  == Changelog ==
235
 
 
 
 
 
 
 
 
 
 
 
 
236
  = [4.4.10] 2017-06-14 =
237
 
238
  * Fix - Allow importing of RSVP tickets with sale dates, even when time is not specified [77608]
3
  Contributors: ModernTribe, aguseo, borkweb, barry.hughes, bordoni, brianjessee, brook-tribe, courane01, faction23, GeoffBel, geoffgraham, ggwicz, jbrinley, leahkoerper, lucatume, mastromktg, mat-lipe, MZAWeb, neillmcshea, nicosantos, patriciahillebrandt, peterchester, reid.peifer, roblagatta, ryancurban, shane.pearlman, shelbelliott, tribecari, vicskf, zbtirrell
4
  Tags: RSVP, events, tickets, event management, calendar, ticket sales, community, registration, api, dates, date, posts, workshop, conference, meeting, seminar, concert, summit, ticket integration, event ticketing
5
  Requires at least: 3.9
6
+ Stable tag: 4.5
7
  Tested up to: 4.8
 
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
233
 
234
  == Changelog ==
235
 
236
+ = [4.5] 2017-06-22 =
237
+
238
+ * Feature - Show remaining ticket count, buy now or rsvp now buttons in list views of The Events Calendar [71092 & 71094]
239
+ * Feature - An API to get ticket, attendee, event, and order infomation from a post id for RSVP, EDD, and WooCommerce Tickets [74363]
240
+ * Fix - Resolved issue where the Meta Chunker attempted to inappropriately chunk meta for post post_types [80857]
241
+ * Fix - Resolve Thunderbird for Windows rendering of Tickets email
242
+ * Tweak - Added filters: `tribe_tickets_buy_button`
243
+ * Tweak - Changed views: `tickets/rsvp`, `tickets/email`
244
+ * Language - 5 new strings added, 65 updated, 0 fuzzied, and 0 obsoleted [event-tickets]
245
+ * Language - 0 new strings added, 0 updated, 1 fuzzied, and 0 obsoleted [tribe-common]
246
+
247
  = [4.4.10] 2017-06-14 =
248
 
249
  * Fix - Allow importing of RSVP tickets with sale dates, even when time is not specified [77608]
src/Tribe/Data_API.php ADDED
@@ -0,0 +1,475 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ /**
5
+ * Class to connect ticketing infomation requests with ticket provider
6
+ *
7
+ * Class Tribe__Tickets__Data_API
8
+ */
9
+ class Tribe__Tickets__Data_API {
10
+
11
+ protected $active_modules;
12
+ protected $ticket_types = array();
13
+ protected $ticket_class = array();
14
+
15
+ /**
16
+ * Class constructor
17
+ */
18
+ public function __construct() {
19
+ $this->active_modules = Tribe__Tickets__Tickets::modules();
20
+ $this->setup_data();
21
+ }
22
+
23
+ /**
24
+ * Setup activate ticket classes and field for data api
25
+ */
26
+ protected function setup_data() {
27
+
28
+ foreach ( Tribe__Tickets__Tickets::modules() as $module_class => $module_instance ) {
29
+
30
+ /**
31
+ * The usage of plain `$module_class::ATTENDEE_EVENT_KEY` will throw a `T_PAAMAYIM_NEKUDOTAYIM`
32
+ * when using PHP 5.2, which is a fatal.
33
+ *
34
+ * So we have to construct the constant name using a string and use the `constant` function.
35
+ */
36
+ $types['order'] = constant( "$module_class::ORDER_OBJECT" );
37
+ $types['product'] = $module_class::get_instance()->ticket_object;
38
+ $types['ticket'] = constant( "$module_class::ATTENDEE_OBJECT" );
39
+ if ( 'Tribe__Tickets__RSVP' === $module_class ) {
40
+ $types['ticket'] = $module_class::get_instance()->ticket_object;
41
+ }
42
+ $types['attendee'] = constant( "$module_class::ATTENDEE_OBJECT" );
43
+
44
+ $this->ticket_class[ $module_class ] = array();
45
+
46
+ foreach ( $types as $key => $value ) {
47
+
48
+ $this->ticket_types[ $key ][] = $value;
49
+ $this->ticket_class[ $module_class ][ $key ] = $value;
50
+
51
+ }
52
+ if ( 'Tribe__Tickets_Plus__Commerce__EDD__Main' === $module_class ) {
53
+ $this->ticket_class[ $module_class ]['tribe_for_event'] = $module_class::$event_key;
54
+ } else {
55
+ $this->ticket_class[ $module_class ]['tribe_for_event'] = $module_class::get_instance()->event_key;
56
+ }
57
+
58
+ $this->ticket_class[ $module_class ]['event_id_key'] = constant( "$module_class::ATTENDEE_EVENT_KEY" );
59
+ $this->ticket_class[ $module_class ]['order_id_key'] = constant( "$module_class::ATTENDEE_ORDER_KEY" );
60
+ }
61
+
62
+ $this->ticket_types['events'][] = class_exists( 'Tribe__Events__Main' ) ? Tribe__Events__Main::POSTTYPE : '';
63
+
64
+ }
65
+
66
+ /**
67
+ * Detect what is available in the custom post type by the id passed to it
68
+ *
69
+ * @param null $post id or post object
70
+ *
71
+ * @return array|bool array includes infomation available and the tribe_tickets_tickets class to use
72
+ */
73
+ public function detect_by_id( $post = null ) {
74
+
75
+ // only the rsvp order key is non numeric
76
+ if ( is_object( $post ) && ! empty( $post->ID ) ) {
77
+ $post = (int) $post->ID;
78
+ $cpt = get_post_type( $post->ID );
79
+ } elseif ( ! is_numeric( $post ) ) {
80
+ $post = esc_attr( $post );
81
+ $cpt = $this->check_rsvp_order_key_exists( $post );
82
+ } else {
83
+ $post = absint( $post );
84
+ $cpt = get_post_type( $post );
85
+ }
86
+
87
+ // if no custom post type
88
+ if ( ! $cpt ) {
89
+ return false;
90
+ }
91
+
92
+ $cpt_arr = array();
93
+ $cpt_arr['post_type'] = $cpt;
94
+
95
+ foreach ( $this->ticket_types as $type => $cpts ) {
96
+ if ( in_array( $cpt, $cpts ) ) {
97
+ $cpt_arr[] = $type;
98
+ }
99
+ }
100
+
101
+ foreach ( $this->ticket_class as $classes => $cpts ) {
102
+ if ( in_array( $cpt, $cpts ) ) {
103
+ $cpt_arr['class'] = $classes;
104
+ }
105
+ }
106
+
107
+ return $cpt_arr;
108
+ }
109
+
110
+ /**
111
+ * Return Array of Event IDs when passed an Order, Ticket, or Attendee ID
112
+ *
113
+ * @param $post_id
114
+ *
115
+ * @return array
116
+ */
117
+ public function get_event_ids( $post_id ) {
118
+ $services = $this->detect_by_id( $post_id );
119
+ if ( ! is_array( $services ) ) {
120
+ $services = array();
121
+ }
122
+
123
+ // if this id is not an order id or a ticket id return
124
+ $is_ticket_related = array_intersect( array( 'order', 'ticket', 'attendee', 'product' ), $services );
125
+ if ( ! $is_ticket_related ) {
126
+ return array();
127
+ }
128
+
129
+ // if no post type or module class return
130
+ if ( empty( $services['post_type'] ) || empty( $services['class'] ) ) {
131
+ return array();
132
+ }
133
+
134
+ $module_class = $services['class'];
135
+
136
+ /**
137
+ * if we have a rsvp order with a unique rsvp order key
138
+ * change $post_id to the first rsvp post's id
139
+ */
140
+ if ( ! is_numeric( $post_id ) && 'Tribe__Tickets__RSVP' === $module_class ) {
141
+ $post_id = $this->get_rsvp_post_id_from_order_key( $post_id );
142
+ }
143
+ $event_id_key = $this->ticket_class[ $module_class ]['event_id_key'];
144
+ $event_ids = array();
145
+
146
+ $is_product = array_intersect( array( 'product' ), $services );
147
+ if ( $is_product ) {
148
+ $tribe_for_event = $this->ticket_class[ $module_class ]['tribe_for_event'];
149
+ $event_ids[] = (int) get_post_meta( $post_id, $tribe_for_event, true );
150
+
151
+ return $event_ids;
152
+ }
153
+
154
+
155
+ // if rsvp or a ticket id get the connected id field
156
+ $is_ticket_attendee = array_intersect( array( 'ticket', 'attendee' ), $services );
157
+ if ( 'Tribe__Tickets__RSVP' === $module_class || $is_ticket_attendee ) {
158
+ $event_ids[] = (int) get_post_meta( $post_id, $event_id_key, true );
159
+
160
+ return $event_ids;
161
+ }
162
+
163
+ $ticket_cpt = $this->ticket_class[ $module_class ]['ticket'];
164
+ $order_id_key = $this->ticket_class[ $module_class ]['order_id_key'];
165
+
166
+ if ( ! $order_id_key ) {
167
+ return array();
168
+ }
169
+
170
+ $order_tickets = get_posts( array(
171
+ 'post_type' => $ticket_cpt,
172
+ 'meta_key' => $order_id_key,
173
+ 'meta_value' => $post_id,
174
+ 'posts_per_page' => - 1,
175
+ ) );
176
+
177
+ foreach ( $order_tickets as $ticket ) {
178
+
179
+ $event_id = get_post_meta( $ticket->ID, $event_id_key, true );
180
+
181
+ if ( ! in_array( $event_id, $event_ids ) ) {
182
+ $event_ids[] = (int) $event_id;
183
+ }
184
+ }
185
+
186
+ return $event_ids;
187
+ }
188
+
189
+
190
+ /**
191
+ * Return Ticket Provider by Order, Product, Attendee, or Ticket ID
192
+ *
193
+ * @param $post_id
194
+ *
195
+ * @return bool/object
196
+ */
197
+ public function get_ticket_provider( $post_id ) {
198
+ $services = $this->detect_by_id( $post_id );
199
+
200
+ // if no module class return
201
+ if ( empty( $services['class'] ) || ! class_exists( $services['class'] ) ) {
202
+ return false;
203
+ }
204
+
205
+ return $services['class']::get_instance();
206
+ }
207
+
208
+ /**
209
+ * Get attendee(s) by id
210
+ *
211
+ * @param $post_id
212
+ * @param null $context
213
+ *
214
+ * @return mixed
215
+ */
216
+ public function get_attendees_by_id( $post_id, $context = null ) {
217
+ return $this->get_attendees( $post_id, $context );
218
+ }
219
+
220
+ /**
221
+ * Return if attendee(s) have meta fields with data
222
+ *
223
+ * @param $post_id
224
+ * @param null $context
225
+ *
226
+ * @return bool
227
+ */
228
+ public function attendees_has_meta_data( $post_id, $context = null ) {
229
+ $attendees = $this->get_attendees( $post_id, $context );
230
+ if ( ! is_array( $attendees ) ) {
231
+ return false;
232
+ }
233
+
234
+ return $this->attendees_meta_check( false, $attendees );
235
+ }
236
+
237
+ /**
238
+ * Return if tickets have meta fields
239
+ *
240
+ * @param $post_id
241
+ * @param null $context
242
+ *
243
+ * @return bool
244
+ */
245
+ public function ticket_has_meta_fields( $post_id, $context = null ) {
246
+ $services = $this->detect_by_id( $post_id );
247
+ if ( ! is_array( $services ) ) {
248
+ $services = array();
249
+ }
250
+
251
+ $has_meta_fields = false;
252
+ $products = '';
253
+
254
+ // if no class then look for tickets by event/post id
255
+ if ( ! isset( $services['class'] ) ) {
256
+ $products = $this->get_product_ids_from_tickets( Tribe__Tickets__Tickets::get_all_event_tickets( $post_id ) );
257
+ }
258
+
259
+ // if no product ids and id is not ticket related return false
260
+ $is_ticket_related = array_intersect( array( 'order', 'ticket', 'attendee', 'product' ), $services );
261
+ if ( ! $products && ! $is_ticket_related ) {
262
+ return false;
263
+ }
264
+
265
+ // if the id is a product add the id to the array
266
+ $is_product = array_intersect( array( 'product' ), $services );
267
+ if ( ! $products && $is_product ) {
268
+ $products[] = absint( $post_id );
269
+ }
270
+
271
+ //elseif handle order id ticket&attendee
272
+ $is_order_ticket_attendee = array_intersect( array( 'order', 'ticket', 'attendee' ), $services );
273
+ if ( ! $products && $is_order_ticket_attendee ) {
274
+ $products = $this->get_product_ids_from_attendees( $this->get_attendees( $post_id, $context, $services ) );
275
+ }
276
+
277
+ if ( is_array( $products ) ) {
278
+ $has_meta_fields = $this->check_for_meta_fields_by_product_id( $products );
279
+ }
280
+
281
+ return $has_meta_fields;
282
+ }
283
+
284
+ /**
285
+ * Return an array of product ids from an array of ticket objects
286
+ *
287
+ * @param $tickets array an array of ticket objects
288
+ *
289
+ * @return array
290
+ */
291
+ protected function get_product_ids_from_tickets( $tickets ) {
292
+ $product_ids = array();
293
+ foreach ( $tickets as $ticket ) {
294
+ if ( isset( $ticket->ID ) && ! in_array( $ticket->ID, $product_ids ) ) {
295
+ $product_ids[] = $ticket->ID;
296
+ }
297
+ }
298
+
299
+ return $product_ids;
300
+ }
301
+
302
+ /**
303
+ * Return an array of product ids from an array of attendee(s)
304
+ *
305
+ * @param $attendees array an array of attendee(s)
306
+ *
307
+ * @return array
308
+ */
309
+ protected function get_product_ids_from_attendees( $attendees ) {
310
+ $product_ids = array();
311
+ foreach ( $attendees as $attendee ) {
312
+ if ( isset( $attendee['product_id'] ) && ! in_array( $attendee['product_id'], $product_ids ) ) {
313
+ $product_ids[] = $attendee['product_id'];
314
+ }
315
+ }
316
+
317
+ return $product_ids;
318
+ }
319
+
320
+ /**
321
+ * Return true if meta enabled and fields are
322
+ *
323
+ * @param $products array an array of product ids
324
+ *
325
+ * @return bool
326
+ */
327
+ protected function check_for_meta_fields_by_product_id( $products ) {
328
+ $has_meta_fields = false;
329
+ foreach ( $products as $product_id ) {
330
+ $meta_enabled = get_post_meta( $product_id, '_tribe_tickets_meta_enabled', true );
331
+ $meta_fields = get_post_meta( $product_id, '_tribe_tickets_meta', true );
332
+ if ( $meta_enabled && $meta_fields ) {
333
+ $has_meta_fields = true;
334
+ }
335
+ }
336
+
337
+ return $has_meta_fields;
338
+ }
339
+
340
+ /**
341
+ * Get attendee(s) from any id
342
+ *
343
+ * @param $post_id
344
+ * @param $context
345
+ *
346
+ * @return mixed
347
+ */
348
+ protected function get_attendees( $post_id, $context, $services = false ) {
349
+ if ( ! $services ) {
350
+ $services = $this->detect_by_id( $post_id );
351
+ }
352
+
353
+ /**
354
+ * if a post id is passed with rsvp order context
355
+ * get the order key to return all attendees by the key
356
+ */
357
+ if ( 'rsvp_order' === $context && is_numeric( $post_id ) ) {
358
+ $post_id = $this->get_rsvp_order_key( $post_id );
359
+ }
360
+
361
+ // if no provider class, use the passed id to return attendee(s)
362
+ if ( ! isset( $services['class'] ) && is_numeric( $post_id ) ) {
363
+ return Tribe__Tickets__Tickets::get_event_attendees( $post_id );
364
+ } elseif ( ! isset( $services['class'] ) && ! is_numeric( $post_id ) ) {
365
+ return array();
366
+ }
367
+
368
+ return $services['class']::get_instance()->get_attendees_by_id( $post_id, $services['post_type'] );
369
+
370
+ }
371
+
372
+ /**
373
+ * Check if attendee(s) have meta data
374
+ *
375
+ * @param $has_meta
376
+ * @param $attendees
377
+ * @param $has_meta_fields
378
+ *
379
+ * @return bool
380
+ */
381
+ protected function attendees_meta_check( $has_meta, $attendees ) {
382
+ foreach ( $attendees as $attendee ) {
383
+ if ( isset( $attendee['attendee_meta'] ) && ! empty( $attendee['attendee_meta'] ) ) {
384
+ $has_meta = true;
385
+ }
386
+ }
387
+
388
+ return $has_meta;
389
+ }
390
+
391
+
392
+ /**
393
+ * Check if a order key passed exists and return attendee object name
394
+ *
395
+ * @param $order_key
396
+ *
397
+ * @return string
398
+ */
399
+ protected function check_rsvp_order_key_exists( $order_key ) {
400
+
401
+ $attendees_query = $this->query_by_rsvp_order_key( $order_key );
402
+ if ( ! $attendees_query->have_posts() ) {
403
+ return '';
404
+ }
405
+
406
+ return Tribe__Tickets__RSVP::ATTENDEE_OBJECT;
407
+ }
408
+
409
+ /**
410
+ * Get the rsvp order key from a post id
411
+ *
412
+ * @param $post_id
413
+ *
414
+ * @return mixed
415
+ */
416
+ protected function get_rsvp_order_key( $post_id ) {
417
+ $order_key = get_post_meta( $post_id, Tribe__Tickets__RSVP::get_instance()->order_key, true );
418
+ if ( ! $order_key ) {
419
+ return $post_id;
420
+ }
421
+
422
+ return $order_key;
423
+ }
424
+
425
+ /**
426
+ * Get a post id when passing a rsvp order key
427
+ * Since all rsvp orders will be from one post,
428
+ * we only need to return the first match
429
+ *
430
+ * @param $order_key
431
+ *
432
+ * @return false|int|string
433
+ */
434
+ protected function get_rsvp_post_id_from_order_key( $order_key ) {
435
+ $attendees_query = $this->query_by_rsvp_order_key( $order_key, 1 );
436
+ if ( ! $attendees_query->have_posts() ) {
437
+ return '';
438
+ }
439
+
440
+ $post_id = '';
441
+
442
+ while ( $attendees_query->have_posts() ) {
443
+ $attendees_query->the_post();
444
+ $post_id = get_the_ID();
445
+ }
446
+
447
+ wp_reset_postdata();
448
+
449
+ return $post_id;
450
+ }
451
+
452
+
453
+ /**
454
+ * Query RSVP Orders by the Order Key
455
+ *
456
+ * @param $order_key
457
+ * @param string $post_per_page
458
+ *
459
+ * @return WP_Query
460
+ */
461
+ protected function query_by_rsvp_order_key( $order_key, $post_per_page = '-1' ) {
462
+ $attendees_query = new WP_Query( array(
463
+ 'posts_per_page' => $post_per_page,
464
+ 'post_type' => Tribe__Tickets__RSVP::ATTENDEE_OBJECT,
465
+ 'meta_key' => Tribe__Tickets__RSVP::get_instance()->order_key,
466
+ 'meta_value' => esc_attr( $order_key ),
467
+ 'orderby' => 'ID',
468
+ 'order' => 'ASC',
469
+ ) );
470
+
471
+ return $attendees_query;
472
+ }
473
+
474
+ }
475
+
src/Tribe/Main.php CHANGED
@@ -5,17 +5,17 @@ class Tribe__Tickets__Main {
5
  /**
6
  * Current version of this plugin
7
  */
8
- const VERSION = '4.4.10';
9
 
10
  /**
11
  * Min required The Events Calendar version
12
  */
13
- const MIN_TEC_VERSION = '4.4';
14
 
15
  /**
16
  * Min required version of Tribe Common
17
  */
18
- const MIN_COMMON_VERSION = '4.4';
19
 
20
  /**
21
  * Name of the provider
@@ -331,6 +331,9 @@ class Tribe__Tickets__Main {
331
  add_filter( 'tribe_support_registered_template_systems', array( $this, 'add_template_updates_check' ) );
332
  add_action( 'plugins_loaded', array( 'Tribe__Support', 'getInstance' ) );
333
 
 
 
 
334
  // Hook to oembeds
335
  add_action( 'tribe_events_embed_after_the_cost_value', array( $this, 'inject_buy_button_into_oembed' ) );
336
  add_action( 'embed_head', array( $this, 'embed_head' ) );
@@ -371,6 +374,9 @@ class Tribe__Tickets__Main {
371
  tribe_singleton( 'tickets.query', 'Tribe__Tickets__Query', array( 'hook' ) );
372
  tribe( 'tickets.query' );
373
 
 
 
 
374
  // View links, columns and screen options
375
  if ( is_admin() ) {
376
  tribe_singleton( 'tickets.admin.views', 'Tribe__Tickets__Admin__Views', array( 'hook' ) );
@@ -411,16 +417,17 @@ class Tribe__Tickets__Main {
411
  */
412
  public function add_linking_archor() {
413
  _deprecated_function( __METHOD__, '4.4.8', 'Tribe__Tickets__Main::add_linking_anchor' );
414
- $this->add_linking_anchor();
415
  }
416
 
417
  /**
418
  * Prints a div with an ID that can be used to link to the ticket form location.
419
  *
420
  * The height is specified inline to ensure this works x-browser.
 
 
421
  */
422
  public function add_linking_anchor() {
423
- echo '<div id="buy-tickets" style="height: 1px;"></div>';
424
  }
425
 
426
  /**
5
  /**
6
  * Current version of this plugin
7
  */
8
+ const VERSION = '4.5';
9
 
10
  /**
11
  * Min required The Events Calendar version
12
  */
13
+ const MIN_TEC_VERSION = '4.5.6';
14
 
15
  /**
16
  * Min required version of Tribe Common
17
  */
18
+ const MIN_COMMON_VERSION = '4.5.6';
19
 
20
  /**
21
  * Name of the provider
331
  add_filter( 'tribe_support_registered_template_systems', array( $this, 'add_template_updates_check' ) );
332
  add_action( 'plugins_loaded', array( 'Tribe__Support', 'getInstance' ) );
333
 
334
+ // Setup Front End Display
335
+ add_action( 'tribe_events_inside_cost', 'tribe_tickets_buy_button', 10, 0 );
336
+
337
  // Hook to oembeds
338
  add_action( 'tribe_events_embed_after_the_cost_value', array( $this, 'inject_buy_button_into_oembed' ) );
339
  add_action( 'embed_head', array( $this, 'embed_head' ) );
374
  tribe_singleton( 'tickets.query', 'Tribe__Tickets__Query', array( 'hook' ) );
375
  tribe( 'tickets.query' );
376
 
377
+ // Tribe Data API Init
378
+ tribe_singleton( 'tickets.data_api', 'Tribe__Tickets__Data_API' );
379
+
380
  // View links, columns and screen options
381
  if ( is_admin() ) {
382
  tribe_singleton( 'tickets.admin.views', 'Tribe__Tickets__Admin__Views', array( 'hook' ) );
417
  */
418
  public function add_linking_archor() {
419
  _deprecated_function( __METHOD__, '4.4.8', 'Tribe__Tickets__Main::add_linking_anchor' );
 
420
  }
421
 
422
  /**
423
  * Prints a div with an ID that can be used to link to the ticket form location.
424
  *
425
  * The height is specified inline to ensure this works x-browser.
426
+ *
427
+ * @deprecated 4.6
428
  */
429
  public function add_linking_anchor() {
430
+ _deprecated_function( __METHOD__, '4.5' );
431
  }
432
 
433
  /**
src/Tribe/RSVP.php CHANGED
@@ -8,6 +8,11 @@ class Tribe__Tickets__RSVP extends Tribe__Tickets__Tickets {
8
  */
9
  const ATTENDEE_OBJECT = 'tribe_rsvp_attendees';
10
 
 
 
 
 
 
11
  /**
12
  * Meta key that relates Attendees and Events.
13
  *
@@ -651,7 +656,10 @@ class Tribe__Tickets__RSVP extends Tribe__Tickets__Tickets {
651
  }
652
 
653
  public function send_tickets_email( $order_id ) {
654
- $all_attendees = $this->get_attendees_by_transaction( $order_id );
 
 
 
655
  $to_send = array();
656
 
657
  if ( empty( $all_attendees ) ) {
@@ -714,7 +722,8 @@ class Tribe__Tickets__RSVP extends Tribe__Tickets__Tickets {
714
  * @param int $event_id
715
  */
716
  public function send_non_attendance_confirmation( $order_id, $event_id ) {
717
- $attendees = $this->get_attendees_by_transaction( $order_id );
 
718
 
719
  if ( empty( $attendees ) ) {
720
  return;
@@ -742,38 +751,6 @@ class Tribe__Tickets__RSVP extends Tribe__Tickets__Tickets {
742
  wp_mail( $to, $subject, $content, $headers, $attachments );
743
  }
744
 
745
- protected function get_attendees_by_transaction( $order_id ) {
746
- $attendees = array();
747
- $query = new WP_Query( array(
748
- 'post_type' => self::ATTENDEE_OBJECT,
749
- 'meta_key' => $this->order_key,
750
- 'meta_value' => $order_id,
751
- 'posts_per_page' => - 1,
752
- ) );
753
-
754
- foreach ( $query->posts as $post ) {
755
- $product = get_post( get_post_meta( $post->ID, self::ATTENDEE_PRODUCT_KEY, true ) );
756
- $ticket_unique_id = get_post_meta( $post->ID, '_unique_id', true );
757
- $ticket_unique_id = $ticket_unique_id === '' ? $post->ID : $ticket_unique_id;
758
-
759
- $attendees[] = array(
760
- 'event_id' => get_post_meta( $post->ID, self::ATTENDEE_EVENT_KEY, true ),
761
- 'product_id' => ! empty( $product ) ? $product->ID : false,
762
- 'ticket_name' => ! empty( $product ) ? $product->post_title : false,
763
- 'holder_name' => get_post_meta( $post->ID, $this->full_name, true ),
764
- 'holder_email' => get_post_meta( $post->ID, $this->email, true ),
765
- 'order_id' => $order_id,
766
- 'ticket_id' => $ticket_unique_id,
767
- 'qr_ticket_id' => $post->ID,
768
- 'security_code' => get_post_meta( $post->ID, $this->security_code, true ),
769
- 'optout' => (bool) get_post_meta( $post->ID, self::ATTENDEE_OPTOUT_KEY, true ),
770
- 'ticket_sent' => (bool) get_post_meta( $post->ID, self::ATTENDEE_TICKET_SENT, true ),
771
- );
772
- }
773
-
774
- return $attendees;
775
- }
776
-
777
  /**
778
  * Generates the validation code that will be printed in the ticket.
779
  * It purpose is to be used to validate the ticket at the door of an event.
@@ -912,7 +889,7 @@ class Tribe__Tickets__RSVP extends Tribe__Tickets__Tickets {
912
  }
913
 
914
  //Store name so we can still show it in the attendee list
915
- $attendees = $this->get_attendees( $event_id );
916
  $post_to_delete = get_post( $ticket_id );
917
 
918
  foreach ( (array) $attendees as $attendee ) {
@@ -1087,7 +1064,123 @@ class Tribe__Tickets__RSVP extends Tribe__Tickets__Tickets {
1087
  }
1088
 
1089
  /**
1090
- * Get all the attendees for an event. It returns an array with the
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1091
  * following fields:
1092
  *
1093
  * order_id
@@ -1102,23 +1195,12 @@ class Tribe__Tickets__RSVP extends Tribe__Tickets__Tickets {
1102
  * check_in
1103
  * provider
1104
  *
1105
- * @param $event_id
 
1106
  *
1107
  * @return array
1108
  */
1109
- protected function get_attendees( $event_id ) {
1110
- $attendees_query = new WP_Query( array(
1111
- 'posts_per_page' => - 1,
1112
- 'post_type' => self::ATTENDEE_OBJECT,
1113
- 'meta_key' => self::ATTENDEE_EVENT_KEY,
1114
- 'meta_value' => $event_id,
1115
- 'orderby' => 'ID',
1116
- 'order' => 'DESC',
1117
- ) );
1118
-
1119
- if ( ! $attendees_query->have_posts() ) {
1120
- return array();
1121
- }
1122
 
1123
  $attendees = array();
1124
 
@@ -1139,21 +1221,44 @@ class Tribe__Tickets__RSVP extends Tribe__Tickets__Tickets {
1139
  $product = get_post( $product_id );
1140
  $product_title = ( ! empty( $product ) ) ? $product->post_title : get_post_meta( $attendee->ID, $this->deleted_product, true ) . ' ' . __( '(deleted)', 'event-tickets' );
1141
 
1142
- $attendee_data = array_merge(
1143
- $this->get_order_data( $attendee->ID ),
1144
- array(
1145
- 'optout' => $optout,
1146
- 'ticket' => $product_title,
1147
- 'attendee_id' => $attendee->ID,
1148
- 'security' => $security,
1149
- 'product_id' => $product_id,
1150
- 'check_in' => $checkin,
1151
- 'order_status' => $status,
1152
- 'order_status_label' => $status_label,
1153
- 'user_id' => $user_id,
1154
- 'ticket_sent' => $ticket_sent,
1155
- )
1156
- );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1157
 
1158
  /**
1159
  * Allow users to filter the Attendee Data
@@ -1161,10 +1266,10 @@ class Tribe__Tickets__RSVP extends Tribe__Tickets__Tickets {
1161
  * @var array An associative array with the Information of the Attendee
1162
  * @var string What Provider is been used
1163
  * @var WP_Post Attendee Object
1164
- * @var int Event ID
1165
  *
1166
  */
1167
- $attendee_data = apply_filters( 'tribe_tickets_attendee_data', $attendee_data, 'rsvp', $attendee, $event_id );
1168
 
1169
  $attendees[] = $attendee_data;
1170
  }
8
  */
9
  const ATTENDEE_OBJECT = 'tribe_rsvp_attendees';
10
 
11
+ /**
12
+ * Name of the CPT that holds Orders
13
+ */
14
+ const ORDER_OBJECT = 'tribe_rsvp_attendees';
15
+
16
  /**
17
  * Meta key that relates Attendees and Events.
18
  *
656
  }
657
 
658
  public function send_tickets_email( $order_id ) {
659
+
660
+
661
+ $all_attendees = $this->get_attendees_by_id( $order_id );
662
+
663
  $to_send = array();
664
 
665
  if ( empty( $all_attendees ) ) {
722
  * @param int $event_id
723
  */
724
  public function send_non_attendance_confirmation( $order_id, $event_id ) {
725
+
726
+ $attendees = $this->get_attendees_by_id( $order_id );
727
 
728
  if ( empty( $attendees ) ) {
729
  return;
751
  wp_mail( $to, $subject, $content, $headers, $attachments );
752
  }
753
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
754
  /**
755
  * Generates the validation code that will be printed in the ticket.
756
  * It purpose is to be used to validate the ticket at the door of an event.
889
  }
890
 
891
  //Store name so we can still show it in the attendee list
892
+ $attendees = $this->get_attendees_by_id( $event_id );
893
  $post_to_delete = get_post( $ticket_id );
894
 
895
  foreach ( (array) $attendees as $attendee ) {
1064
  }
1065
 
1066
  /**
1067
+ * Get attendees by id and associated post type
1068
+ * or default to using $post_id
1069
+ *
1070
+ * @param $post_id
1071
+ * @param null $post_type
1072
+ *
1073
+ * @return array|mixed
1074
+ */
1075
+ public function get_attendees_by_id( $post_id, $post_type = null ) {
1076
+
1077
+ // RSVP Orders are a unique hash
1078
+ if ( ! is_numeric( $post_id ) ) {
1079
+ $post_type = 'rsvp_order_hash';
1080
+ }
1081
+
1082
+ if ( ! $post_type ) {
1083
+ $post_type = get_post_type( $post_id );
1084
+ }
1085
+
1086
+ switch ( $post_type ) {
1087
+
1088
+ case self::ATTENDEE_OBJECT :
1089
+
1090
+ return $this->get_attendees_by_attendee_id( $post_id );
1091
+
1092
+ break;
1093
+
1094
+ case 'rsvp_order_hash' :
1095
+
1096
+ return $this->get_attendees_by_order_id( $post_id );
1097
+
1098
+ break;
1099
+ default :
1100
+
1101
+ return $this->get_attendees_by_post_id( $post_id );
1102
+
1103
+ break;
1104
+ }
1105
+
1106
+ }
1107
+
1108
+ /**
1109
+ * Get RSVP Tickets Attendees for an Post by id
1110
+ *
1111
+ * @param $post_id
1112
+ *
1113
+ * @return array
1114
+ */
1115
+ protected function get_attendees_by_post_id( $post_id ) {
1116
+
1117
+ $attendees_query = new WP_Query( array(
1118
+ 'posts_per_page' => - 1,
1119
+ 'post_type' => self::ATTENDEE_OBJECT,
1120
+ 'meta_key' => self::ATTENDEE_EVENT_KEY,
1121
+ 'meta_value' => $post_id,
1122
+ 'orderby' => 'ID',
1123
+ 'order' => 'ASC',
1124
+ ) );
1125
+
1126
+ if ( ! $attendees_query->have_posts() ) {
1127
+ return array();
1128
+ }
1129
+
1130
+ return $this->get_attendees( $attendees_query, $post_id );
1131
+
1132
+ }
1133
+
1134
+ /**
1135
+ * Get Attendees by ticket/attendee ID
1136
+ *
1137
+ * @param $attendee_id
1138
+ *
1139
+ * @return array
1140
+ */
1141
+ protected function get_attendees_by_attendee_id( $attendee_id ) {
1142
+
1143
+ $attendees_query = new WP_Query( array(
1144
+ 'p' => $attendee_id,
1145
+ 'post_type' => self::ATTENDEE_OBJECT,
1146
+ ) );
1147
+
1148
+ if ( ! $attendees_query->have_posts() ) {
1149
+ return array();
1150
+ }
1151
+
1152
+ return $this->get_attendees( $attendees_query, $attendee_id );
1153
+
1154
+ }
1155
+
1156
+ /**
1157
+ * Get attendees by order id
1158
+ *
1159
+ * @param $order_id
1160
+ *
1161
+ * @return array
1162
+ */
1163
+ protected function get_attendees_by_order_id( $order_id ) {
1164
+
1165
+ $attendees_query = new WP_Query( array(
1166
+ 'posts_per_page' => - 1,
1167
+ 'post_type' => self::ATTENDEE_OBJECT,
1168
+ 'meta_key' => $this->order_key,
1169
+ 'meta_value' => esc_attr( $order_id ),
1170
+ 'orderby' => 'ID',
1171
+ 'order' => 'ASC',
1172
+ ) );
1173
+
1174
+ if ( ! $attendees_query->have_posts() ) {
1175
+ return array();
1176
+ }
1177
+
1178
+ return $this->get_attendees( $attendees_query, $order_id );
1179
+
1180
+ }
1181
+
1182
+ /**
1183
+ * Get all the attendees for post type. It returns an array with the
1184
  * following fields:
1185
  *
1186
  * order_id
1195
  * check_in
1196
  * provider
1197
  *
1198
+ * @param $attendees_query
1199
+ * @param $post_id
1200
  *
1201
  * @return array
1202
  */
1203
+ protected function get_attendees( WP_Query $attendees_query, $post_id ) {
 
 
 
 
 
 
 
 
 
 
 
 
1204
 
1205
  $attendees = array();
1206
 
1221
  $product = get_post( $product_id );
1222
  $product_title = ( ! empty( $product ) ) ? $product->post_title : get_post_meta( $attendee->ID, $this->deleted_product, true ) . ' ' . __( '(deleted)', 'event-tickets' );
1223
 
1224
+ $ticket_unique_id = get_post_meta( $attendee->ID, '_unique_id', true );
1225
+ $ticket_unique_id = $ticket_unique_id === '' ? $attendee->ID : $ticket_unique_id;
1226
+
1227
+ $meta = '';
1228
+ if ( class_exists( 'Tribe__Tickets_Plus__Meta' ) ) {
1229
+ $meta = get_post_meta( $attendee->ID, Tribe__Tickets_Plus__Meta::META_KEY, true );
1230
+
1231
+ // Process Meta to include value, slug, and label
1232
+ if ( ! empty( $meta ) ) {
1233
+ $meta = $this->process_attendee_meta( $product_id, $meta );
1234
+ }
1235
+ }
1236
+
1237
+ $attendee_data = array_merge( $this->get_order_data( $attendee->ID ), array(
1238
+ 'optout' => $optout,
1239
+ 'ticket' => $product_title,
1240
+ 'attendee_id' => $attendee->ID,
1241
+ 'security' => $security,
1242
+ 'product_id' => $product_id,
1243
+ 'check_in' => $checkin,
1244
+ 'order_status' => $status,
1245
+ 'order_status_label' => $status_label,
1246
+ 'user_id' => $user_id,
1247
+ 'ticket_sent' => $ticket_sent,
1248
+
1249
+ // Fields for Email Tickets
1250
+ 'event_id' => get_post_meta( $attendee->ID, self::ATTENDEE_EVENT_KEY, true ),
1251
+ 'ticket_name' => ! empty( $product ) ? $product->post_title : false,
1252
+ 'holder_name' => get_post_meta( $attendee->ID, $this->full_name, true ),
1253
+ 'holder_email' => get_post_meta( $attendee->ID, $this->email, true ),
1254
+ 'order_id' => $attendee->ID,
1255
+ 'ticket_id' => $ticket_unique_id,
1256
+ 'qr_ticket_id' => $attendee->ID,
1257
+ 'security_code' => $security,
1258
+
1259
+ // Attendee Meta
1260
+ 'attendee_meta' => $meta,
1261
+ ) );
1262
 
1263
  /**
1264
  * Allow users to filter the Attendee Data
1266
  * @var array An associative array with the Information of the Attendee
1267
  * @var string What Provider is been used
1268
  * @var WP_Post Attendee Object
1269
+ * @var int Post ID
1270
  *
1271
  */
1272
+ $attendee_data = apply_filters( 'tribe_tickets_attendee_data', $attendee_data, 'rsvp', $attendee, $post_id );
1273
 
1274
  $attendees[] = $attendee_data;
1275
  }
src/Tribe/Ticket_Object.php CHANGED
@@ -400,6 +400,9 @@ if ( ! class_exists( 'Tribe__Tickets__Ticket_Object' ) ) {
400
  $this->stock = $value;
401
  }
402
 
 
 
 
403
  // return the new Stock
404
  return $this->stock;
405
  }
400
  $this->stock = $value;
401
  }
402
 
403
+ // if stock is negative, force it to 0
404
+ $this->stock = 0 >= $this->stock ? 0 : $this->stock;
405
+
406
  // return the new Stock
407
  return $this->stock;
408
  }
src/Tribe/Tickets.php CHANGED
@@ -238,15 +238,56 @@ if ( ! class_exists( 'Tribe__Tickets__Tickets' ) ) {
238
  */
239
  abstract protected function get_tickets( $event_id );
240
 
 
 
 
 
 
 
 
 
 
 
 
241
  /**
242
  * Get all the attendees (sold tickets) for an event
 
243
  * @abstract
244
  *
245
- * @param $event_id
246
  *
247
  * @return mixed
248
  */
249
- abstract protected function get_attendees( $event_id );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
250
 
251
  /**
252
  * Mark an attendee as checked in
@@ -363,7 +404,6 @@ if ( ! class_exists( 'Tribe__Tickets__Tickets' ) ) {
363
  $ticket_form_hook = $this->get_ticket_form_hook();
364
 
365
  if ( ! empty( $ticket_form_hook ) ) {
366
- add_action( $ticket_form_hook, array( Tribe__Tickets__Main::instance(), 'add_linking_anchor' ), 4 );
367
  add_action( $ticket_form_hook, array( $this, 'front_end_tickets_form' ), 5 );
368
  }
369
 
@@ -739,7 +779,7 @@ if ( ! class_exists( 'Tribe__Tickets__Tickets' ) ) {
739
  if ( false === $attendees_from_cache && empty( $attendees ) ) {
740
  foreach ( self::modules() as $class => $module ) {
741
  $obj = call_user_func( array( $class, 'get_instance' ) );
742
- $attendees = array_merge( $attendees, $obj->get_attendees( $event_id ) );
743
  }
744
 
745
  // Set the `ticket_exists` flag on attendees if the ticket they are associated with
@@ -779,7 +819,7 @@ if ( ! class_exists( 'Tribe__Tickets__Tickets' ) ) {
779
  * @return array
780
  */
781
  public function get_attendees_array( $event_id ) {
782
- return $this->get_attendees( $event_id );
783
  }
784
 
785
  /**
@@ -969,6 +1009,84 @@ if ( ! class_exists( 'Tribe__Tickets__Tickets' ) ) {
969
  self::$frontend_ticket_data += $tickets;
970
  }
971
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
972
  /**
973
  * Takes any global stock data and makes it available via a wp_localize_script() call.
974
  */
@@ -1198,9 +1316,11 @@ if ( ! class_exists( 'Tribe__Tickets__Tickets' ) ) {
1198
  }
1199
 
1200
  /**
1201
- * Given a valid order ID, returns the event ID it relates to or else boolean false
1202
  * if it cannot be determined.
1203
  *
 
 
1204
  * @param int $order_id
1205
  * @return mixed int|bool
1206
  */
@@ -1305,6 +1425,56 @@ if ( ! class_exists( 'Tribe__Tickets__Tickets' ) ) {
1305
  return (string) $attendee_event_key;
1306
  }
1307
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1308
  /**
1309
  * Returns the meta key used to link ticket types with the base event.
1310
  *
238
  */
239
  abstract protected function get_tickets( $event_id );
240
 
241
+ /**
242
+ * Get attendees by id and associated post type
243
+ * or default to using $post_id
244
+ *
245
+ * @param $post_id
246
+ * @param null $post_type
247
+ *
248
+ * @return array|mixed
249
+ */
250
+ abstract public function get_attendees_by_id( $post_id );
251
+
252
  /**
253
  * Get all the attendees (sold tickets) for an event
254
+ *
255
  * @abstract
256
  *
257
+ * @param $post_id
258
  *
259
  * @return mixed
260
  */
261
+ abstract protected function get_attendees_by_post_id( $post_id );
262
+
263
+ /**
264
+ * Get Attendees by ticket/attendee ID
265
+ *
266
+ * @param $attendee_id
267
+ *
268
+ * @return array
269
+ */
270
+ abstract protected function get_attendees_by_attendee_id( $attendee_id );
271
+
272
+ /**
273
+ * Get attendees by order id
274
+ *
275
+ * @param $order_id
276
+ *
277
+ * @return array
278
+ */
279
+ abstract protected function get_attendees_by_order_id( $order_id );
280
+
281
+
282
+ /**
283
+ * Get attendees from provided query
284
+ *
285
+ * @param WP_Query $attendees_query
286
+ * @param $post_id
287
+ *
288
+ * @return mixed
289
+ */
290
+ abstract protected function get_attendees( WP_Query $attendees_query, $post_id );
291
 
292
  /**
293
  * Mark an attendee as checked in
404
  $ticket_form_hook = $this->get_ticket_form_hook();
405
 
406
  if ( ! empty( $ticket_form_hook ) ) {
 
407
  add_action( $ticket_form_hook, array( $this, 'front_end_tickets_form' ), 5 );
408
  }
409
 
779
  if ( false === $attendees_from_cache && empty( $attendees ) ) {
780
  foreach ( self::modules() as $class => $module ) {
781
  $obj = call_user_func( array( $class, 'get_instance' ) );
782
+ $attendees = array_merge( $attendees, $obj->get_attendees_by_post_id( $event_id ) );
783
  }
784
 
785
  // Set the `ticket_exists` flag on attendees if the ticket they are associated with
819
  * @return array
820
  */
821
  public function get_attendees_array( $event_id ) {
822
+ return $this->get_attendees_by_post_id( $event_id );
823
  }
824
 
825
  /**
1009
  self::$frontend_ticket_data += $tickets;
1010
  }
1011
 
1012
+ /**
1013
+ * Returns Ticket and RSVP Count for an Event
1014
+ *
1015
+ * @param $event_id
1016
+ *
1017
+ * @return array
1018
+ */
1019
+ public static function get_ticket_counts( $event_id ) {
1020
+
1021
+ $tickets = self::get_all_event_tickets( $event_id );
1022
+
1023
+ // if no tickets or rsvp return empty array
1024
+ if ( ! $tickets ) {
1025
+ return array();
1026
+ }
1027
+
1028
+ /**
1029
+ * This order is important so we that tickets overwrite RSVP on
1030
+ * the Buy Now Button on the front-end
1031
+ */
1032
+ $types['rsvp'] = array(
1033
+ 'count' => 0,
1034
+ 'stock' => 0,
1035
+ 'unlimited' => 0,
1036
+ 'available' => 0,
1037
+ );
1038
+ $types['tickets'] = array(
1039
+ 'count' => 0, // count of tickets currently for sale
1040
+ 'stock' => 0, // current stock of tickets available for sale
1041
+ 'global' => 0, // global stock ticket
1042
+ 'unlimited' => 0, // unlimited stock tickets
1043
+ 'available' => 0, // are tickets available for sale right now
1044
+ );
1045
+
1046
+ foreach ( $tickets as $ticket ) {
1047
+ // If a ticket is not current for sale do not count it
1048
+ if ( ! tribe_events_ticket_is_on_sale( $ticket ) ) {
1049
+ continue;
1050
+ }
1051
+
1052
+ // if ticket and not rsvp add to ticket array
1053
+ if ( 'Tribe__Tickets__RSVP' !== $ticket->provider_class ) {
1054
+ $types['tickets']['count'] ++;
1055
+
1056
+ if ( Tribe__Tickets__Global_Stock::GLOBAL_STOCK_MODE === $ticket->global_stock_mode() && 0 === $types['tickets']['global'] ) {
1057
+ $types['tickets']['global'] ++;
1058
+ } elseif ( Tribe__Tickets__Global_Stock::GLOBAL_STOCK_MODE === $ticket->global_stock_mode() && 1 === $types['tickets']['global'] ) {
1059
+ continue;
1060
+ }
1061
+
1062
+ $types['tickets']['stock'] = $types['tickets']['stock'] + $ticket->stock;
1063
+
1064
+ if ( 0 !== $types['tickets']['stock'] ) {
1065
+ $types['tickets']['available'] ++;
1066
+ }
1067
+
1068
+ if ( ! $ticket->manage_stock() ) {
1069
+ $types['tickets']['unlimited'] ++;
1070
+ $types['tickets']['available'] ++;
1071
+ }
1072
+ } else {
1073
+ $types['rsvp']['count'] ++;
1074
+
1075
+ $types['rsvp']['stock'] = $types['rsvp']['stock'] + $ticket->stock;
1076
+ if ( 0 !== $types['rsvp']['stock'] ) {
1077
+ $types['rsvp']['available'] ++;
1078
+ }
1079
+
1080
+ if ( ! $ticket->manage_stock() ) {
1081
+ $types['rsvp']['unlimited'] ++;
1082
+ $types['rsvp']['available'] ++;
1083
+ }
1084
+ }
1085
+ }
1086
+
1087
+ return $types;
1088
+ }
1089
+
1090
  /**
1091
  * Takes any global stock data and makes it available via a wp_localize_script() call.
1092
  */
1316
  }
1317
 
1318
  /**
1319
+ * Given a valid order ID, returns a single event ID it relates to or else boolean false
1320
  * if it cannot be determined.
1321
  *
1322
+ * @see Use tribe_tickets_get_event_ids() to return an array of all event ids for an order
1323
+ *
1324
  * @param int $order_id
1325
  * @return mixed int|bool
1326
  */
1425
  return (string) $attendee_event_key;
1426
  }
1427
 
1428
+ /**
1429
+ * Process the attendee meta into an array with value, slug, and label
1430
+ *
1431
+ * @param $product_id
1432
+ * @param $meta
1433
+ *
1434
+ * @return array
1435
+ */
1436
+ public function process_attendee_meta( $product_id, $meta ) {
1437
+
1438
+ $meta_vals = array();
1439
+
1440
+ if ( ! class_exists( 'Tribe__Tickets_Plus__Main' ) ) {
1441
+ return $meta_vals;
1442
+ }
1443
+
1444
+ $meta_field_objs = Tribe__Tickets_Plus__Main::instance()->meta()->get_meta_fields_by_ticket( $product_id );
1445
+
1446
+ foreach ( $meta_field_objs as $field ) {
1447
+ $value = null;
1448
+
1449
+ if ( 'checkbox' === $field->type ) {
1450
+ $field_prefix = $field->slug . '_';
1451
+ $value = array();
1452
+
1453
+ foreach ( $meta as $full_key => $check_value ) {
1454
+ if ( 0 === strpos( $full_key, $field_prefix ) ) {
1455
+ $short_key = substr( $full_key, strlen( $field_prefix ) );
1456
+ $value[ $short_key ] = $check_value;
1457
+ }
1458
+ }
1459
+
1460
+ if ( empty( $value ) ) {
1461
+ $value = null;
1462
+ }
1463
+ } elseif ( isset( $meta[ $field->slug ] ) ) {
1464
+ $value = $meta[ $field->slug ];
1465
+ }
1466
+
1467
+ $meta_vals[ $field->slug ] = array(
1468
+ 'slug' => $field->slug,
1469
+ 'label' => $field->label,
1470
+ 'value' => $value,
1471
+ );
1472
+ }
1473
+
1474
+ return $meta_vals;
1475
+
1476
+ }
1477
+
1478
  /**
1479
  * Returns the meta key used to link ticket types with the base event.
1480
  *
src/resources/css/rsvp.css CHANGED
@@ -24,34 +24,6 @@
24
  padding: 10px;
25
  }
26
 
27
- .tribe-events-tickets {
28
- position: relative;
29
-
30
- }
31
-
32
- .tribe-events-tickets .tribe-link-tickets-message {
33
- background: rgba(200, 200, 200, .8);
34
- bottom: 0;
35
- left: 0;
36
- position: absolute;
37
- right: 0;
38
- text-align: center;
39
- top: 0;
40
- }
41
-
42
- .tribe-events-tickets .tribe-link-tickets-message .no-javascript-msg {
43
- left: 50%;
44
- position: absolute;
45
- top: 50%;
46
- -webkit-transform: translate(-50%, -50%);
47
- transform: translate(-50%, -50%);
48
- width: 90%;
49
- }
50
-
51
- .tribe-events-tickets td {
52
- padding: 8px 10px;
53
- }
54
-
55
  .tribe-events-style-full .tribe-events-tickets .tribe-tickets-attendee table,
56
  .tribe-events-style-full .tribe-events-tickets .tribe-tickets-attendee tr,
57
  .tribe-events-style-full .tribe-events-tickets .tribe-tickets-attendee td,
@@ -104,6 +76,7 @@
104
  }
105
 
106
  .tribe-rsvp-list > .tribe-item {
 
107
  padding: 20px;
108
  border: 1px solid #ededed;
109
  border-bottom: 0;
@@ -162,6 +135,7 @@
162
  }
163
 
164
  .tribe-answer .type-label {
 
165
  padding-right: .5em;
166
  }
167
 
@@ -172,6 +146,9 @@
172
  .tribe-answer select {
173
  background: white;
174
  border: 1px solid #ddd;
 
 
 
175
  }
176
 
177
  .tribe-rsvp h2 {
@@ -207,118 +184,134 @@
207
  box-shadow: none;
208
  }
209
 
210
- /* = Tickets Front End Styles
211
  =============================================*/
212
 
213
- .tribe-tickets-rsvp .tribe-events-tickets-title {
214
- font-family: sans-serif;
 
 
 
 
 
 
215
  }
216
 
217
- .tribe-tickets-rsvp .tribe-events-tickets {
 
 
218
  background: #f8f8f8;
 
219
  border-radius: 3px;
220
- padding: 0;
221
  }
222
 
223
- .tribe-tickets-rsvp table,
224
- .tribe-tickets-rsvp th,
225
- .tribe-tickets-rsvp td {
 
226
  border: 0;
227
  }
228
 
229
- .tribe-tickets-rsvp .add-to-cart {
230
- padding: 0 10px 16px;
231
  }
232
 
233
- .tribe-tickets-rsvp .tribe-ticket.quantity {
 
 
 
 
 
 
 
234
  border-bottom: 1px solid #dfdfdf;
235
- display: block;
236
- padding: 16px 10px 8px 10px;
237
  }
238
 
239
- .tribe-tickets-rsvp .tribe-ticket.quantity input.tribe-ticket-quantity {
240
  background-color: #fff;
241
  border-radius: 3px;
242
  margin-bottom: 5px;
243
  padding: 5px 10px;
 
244
  width: 4.375em;
245
  }
246
 
247
- .tribe-tickets-rsvp .tribe-tickets-remaining {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
248
  color: #777;
249
  display: block;
250
  font-size: 11px;
251
  }
252
 
253
- .tribe-tickets-rsvp .tribe-tickets-attendees-list-optout label {
254
  color: #777;
255
  font-size: 13px;
256
  }
257
 
258
- .tribe-tickets-rsvp .tickets_name,
259
- .tribe-tickets-rsvp .tickets_name p,
260
- .tribe-tickets-rsvp .tickets_description {
 
 
 
 
 
 
261
  border-bottom: 1px solid #dfdfdf;
262
  color: #464646;
263
  font-size: 15px;
264
- padding: 16px 10px 8px 10px;
265
- }
266
-
267
- .tribe-events-style-full.tribe-events-style-theme h2.tribe-events-tickets-title {
268
- font-size: 17px;
 
 
 
 
 
 
 
 
 
 
 
 
 
269
  }
270
 
271
- #tribe-events .button {
272
- border: 0;
273
- border-radius: 3px;
274
- background: -webkit-linear-gradient( top, #009FF1, #0080DB);
275
- background: linear-gradient( to bottom, #009FF1, #0080DB);
276
- cursor: pointer;
277
- color: #fff;
278
- display: inline-block;
279
- font-size: 14px;
280
- font-weight: 400;
281
- font-family: sans-serif;
282
- letter-spacing: 1px;
283
- line-height: 1;
284
  height: auto;
285
- margin-top: 16px;
286
- margin-top: 1rem;
287
- padding: 10px;
288
- text-align: center;
289
- -webkit-transition: all .15s ease-in-out;
290
- transition: all .15s ease-in-out;
291
- -webkit-font-smoothing: subpixel-antialiased;
292
  }
293
 
294
- .clear {
295
- *zoom: 1;
296
- }
297
-
298
- .clear:before,
299
- .clear:after {
300
- content: '';
301
- display: table;
302
- }
303
-
304
- .clear:after {
305
- clear: both;
306
- }
307
 
308
- .tribe-tickets-rsvp input[type="date"],
309
- .tribe-tickets-rsvp input[type="time"],
310
- .tribe-tickets-rsvp input[type="datetime-local"],
311
- .tribe-tickets-rsvp input[type="week"],
312
- .tribe-tickets-rsvp input[type="month"],
313
- .tribe-tickets-rsvp input[type="text"],
314
- .tribe-tickets-rsvp input[type="email"],
315
- .tribe-tickets-rsvp input[type="url"],
316
- .tribe-tickets-rsvp input[type="password"],
317
- .tribe-tickets-rsvp input[type="search"],
318
- .tribe-tickets-rsvp input[type="tel"],
319
- .tribe-tickets-rsvp input[type="number"],
320
- .tribe-tickets-rsvp textarea,
321
- .tribe-tickets-rsvp select {
322
- background: #fff;
323
  }
324
 
 
 
 
 
 
24
  padding: 10px;
25
  }
26
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
27
  .tribe-events-style-full .tribe-events-tickets .tribe-tickets-attendee table,
28
  .tribe-events-style-full .tribe-events-tickets .tribe-tickets-attendee tr,
29
  .tribe-events-style-full .tribe-events-tickets .tribe-tickets-attendee td,
76
  }
77
 
78
  .tribe-rsvp-list > .tribe-item {
79
+ min-height: 105px;
80
  padding: 20px;
81
  border: 1px solid #ededed;
82
  border-bottom: 0;
135
  }
136
 
137
  .tribe-answer .type-label {
138
+ margin-bottom: 0;
139
  padding-right: .5em;
140
  }
141
 
146
  .tribe-answer select {
147
  background: white;
148
  border: 1px solid #ddd;
149
+ height: 30px;
150
+ line-height: 1;
151
+ margin-left: 5px;
152
  }
153
 
154
  .tribe-rsvp h2 {
184
  box-shadow: none;
185
  }
186
 
187
+ /* = Tickets & RSVP Modules Front End Styles
188
  =============================================*/
189
 
190
+ /* Title */
191
+
192
+ .tribe-events-tickets-title.tribe--rsvp {
193
+ margin: 0;
194
+ }
195
+
196
+ .tribe-events-style-full.tribe-events-style-theme h2.tribe-events-tickets-title {
197
+ font-size: 90%;
198
  }
199
 
200
+ /* Tickets Table */
201
+
202
+ .tribe-events-tickets {
203
  background: #f8f8f8;
204
+ border: 0;
205
  border-radius: 3px;
206
+ position: relative;
207
  }
208
 
209
+ .tribe-events-tickets table,
210
+ .tribe-events-tickets th,
211
+ .tribe-events-tickets td,
212
+ .tribe-events-tickets .woocommerce.add-to-cart {
213
  border: 0;
214
  }
215
 
216
+ .tribe-events-tickets td {
217
+ padding: 8px 10px;
218
  }
219
 
220
+ .tribe-events-tickets .woocommerce.add-to-cart {
221
+ padding: 16px;
222
+ }
223
+
224
+ .tribe-events-tickets .woocommerce,
225
+ .tribe-events-tickets .tickets_name,
226
+ .tribe-events-tickets .tickets_description,
227
+ .tribe-events-tickets .tickets_price {
228
  border-bottom: 1px solid #dfdfdf;
 
 
229
  }
230
 
231
+ .tribe-events-tickets .woocommerce .quantity input {
232
  background-color: #fff;
233
  border-radius: 3px;
234
  margin-bottom: 5px;
235
  padding: 5px 10px;
236
+ text-align: left;
237
  width: 4.375em;
238
  }
239
 
240
+ .tribe-events-tickets .tribe-link-tickets-message {
241
+ background: rgba(200, 200, 200, .8);
242
+ bottom: 0;
243
+ left: 0;
244
+ position: absolute;
245
+ right: 0;
246
+ text-align: center;
247
+ top: 0;
248
+ }
249
+
250
+ .tribe-events-tickets .tribe-link-tickets-message .no-javascript-msg {
251
+ left: 50%;
252
+ position: absolute;
253
+ top: 50%;
254
+ -webkit-transform: translate(-50%, -50%);
255
+ transform: translate(-50%, -50%);
256
+ width: 90%;
257
+ }
258
+
259
+ .tribe-events-tickets .tribe-tickets-remaining {
260
  color: #777;
261
  display: block;
262
  font-size: 11px;
263
  }
264
 
265
+ .tribe-events-tickets .tribe-tickets-attendees-list-optout label {
266
  color: #777;
267
  font-size: 13px;
268
  }
269
 
270
+ .tribe-events-tickets .tribe-tickets-attendees-list-optout input[type="radio"] + label,
271
+ .tribe-events-tickets .tribe-tickets-attendees-list-optout input[type="checkbox"] + label {
272
+ display: inline-block;
273
+ }
274
+
275
+ .tribe-events-tickets .tickets_name,
276
+ .tribe-events-tickets .tickets_name p,
277
+ .tribe-events-tickets .tickets_description,
278
+ .tribe-events-tickets .tickets_price {
279
  border-bottom: 1px solid #dfdfdf;
280
  color: #464646;
281
  font-size: 15px;
282
+ padding: 16px 10px;
283
+ }
284
+
285
+ .tribe-events-tickets input[type="date"],
286
+ .tribe-events-tickets input[type="time"],
287
+ .tribe-events-tickets input[type="datetime-local"],
288
+ .tribe-events-tickets input[type="week"],
289
+ .tribe-events-tickets input[type="month"],
290
+ .tribe-events-tickets input[type="text"],
291
+ .tribe-events-tickets input[type="email"],
292
+ .tribe-events-tickets input[type="url"],
293
+ .tribe-events-tickets input[type="password"],
294
+ .tribe-events-tickets input[type="search"],
295
+ .tribe-events-tickets input[type="tel"],
296
+ .tribe-events-tickets input[type="number"],
297
+ .tribe-events-tickets textarea,
298
+ .tribe-events-tickets select {
299
+ background: #fff;
300
  }
301
 
302
+ .tribe-events-tickets header {
 
 
 
 
 
 
 
 
 
 
 
 
303
  height: auto;
 
 
 
 
 
 
 
304
  }
305
 
306
+ /* RSVP Table (differences only) */
 
 
 
 
 
 
 
 
 
 
 
 
307
 
308
+ .tribe-events-tickets-rsvp .tribe-ticket.quantity {
309
+ border-bottom: 1px solid #dfdfdf;
310
+ width: 192px;
 
 
 
 
 
 
 
 
 
 
 
 
311
  }
312
 
313
+ .tribe-events-tickets-rsvp .tribe-ticket.quantity input {
314
+ margin-bottom: 5px;
315
+ padding: 5px 10px;
316
+ width: 4.375em;
317
+ }
src/resources/css/rsvp.min.css CHANGED
@@ -1 +1 @@
1
- .tribe-rsvp{padding:20px 0}.tribe-tickets-meta-row{display:none}.tribe-tickets-has-rsvp .tribe-tickets-meta-row{display:table-row}.tribe-tickets-attendee{padding:10px}.tribe-events-tickets{position:relative}.tribe-events-tickets .tribe-link-tickets-message{background:hsla(0,0%,78%,.8);bottom:0;left:0;position:absolute;right:0;text-align:center;top:0}.tribe-events-tickets .tribe-link-tickets-message .no-javascript-msg{left:50%;position:absolute;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);width:90%}.tribe-events-tickets td{padding:8px 10px}.tribe-events-style-full .tribe-events-tickets .tribe-tickets-attendee table,.tribe-events-style-full .tribe-events-tickets .tribe-tickets-attendee td,.tribe-events-style-full .tribe-events-tickets .tribe-tickets-attendee tr,.tribe-events-tickets .tribe-tickets-attendee table,.tribe-events-tickets .tribe-tickets-attendee td,.tribe-events-tickets .tribe-tickets-attendee tr{border:0}.tribe-rsvp-message-display .tribe-rsvp-messages{display:block}.tribe-rsvp-messages{display:none;padding:10px 10px 5px}.tribe-rsvp-message{border-radius:3px;border-style:solid;border-width:1px;font-size:12px;margin:0 0 5px;padding:0 .6em}.tribe-rsvp-message-success{background-color:#ffffe0;border-color:#e6db55}.tribe-rsvp-message-error{background-color:#ffebe8;border-color:#c00}.tribe-ticket-quantity{width:100%}.tickets-unavailable{font-style:italic}.tribe-rsvp-list{list-style:none;padding:0;margin:0}.tribe-rsvp-list>.tribe-item{padding:20px;border:1px solid #ededed;border-bottom:0}.tribe-rsvp-list>.tribe-item:last-child{border-bottom:1px solid #ededed;margin-bottom:20px}.tribe-rsvp-list>.tribe-item.tribe-disabled{background-color:#efefef;border-color:#ddd;color:#717171}.tribe-rsvp-list>.tribe-item.tribe-disabled:last-child{border-bottom-color:#ddd}.tribe-rsvp-list>.tribe-item .tribe-answer{float:right;display:inline-block}.tribe-rsvp-list>.tribe-item table{border:0;margin:0}.tribe-rsvp-list>.tribe-item td{border:0}.list-attendee{color:#999;display:inline-block;letter-spacing:1px;text-transform:uppercase}.tribe-submit-tickets-form{margin-top:20px}.user-details{margin:0 0 1.5em}.user-details p{margin:0 0 .5em}.tribe-answer{line-height:2}.tribe-answer .type-label{padding-right:.5em}.tribe-answer label{display:block}.tribe-answer select{background:#fff;border:1px solid #ddd}.tribe-rsvp h2{margin-bottom:20px;line-height:1.2}.event-tickets-meta-label{font-weight:700;margin:0 1em 0 0}.tribe-theme-parent-twentysixteen .comment-content a,.tribe-theme-parent-twentysixteen .entry-content a,.tribe-theme-parent-twentysixteen .entry-footer a:hover,.tribe-theme-parent-twentysixteen .entry-summary a,.tribe-theme-parent-twentysixteen .logged-in-as a,.tribe-theme-parent-twentysixteen .pingback .comment-body>a,.tribe-theme-parent-twentysixteen .site-info a:hover,.tribe-theme-parent-twentysixteen .taxonomy-description a,.tribe-theme-parent-twentysixteen .textwidget a,.tribe-theme-twentysixteen .comment-content a,.tribe-theme-twentysixteen .entry-content a,.tribe-theme-twentysixteen .entry-footer a:hover,.tribe-theme-twentysixteen .entry-summary a,.tribe-theme-twentysixteen .logged-in-as a,.tribe-theme-twentysixteen .pingback .comment-body>a,.tribe-theme-twentysixteen .site-info a:hover,.tribe-theme-twentysixteen .taxonomy-description a,.tribe-theme-twentysixteen .textwidget a{box-shadow:none}.tribe-tickets-rsvp .tribe-events-tickets-title{font-family:sans-serif}.tribe-tickets-rsvp .tribe-events-tickets{background:#f8f8f8;border-radius:3px;padding:0}.tribe-tickets-rsvp table,.tribe-tickets-rsvp td,.tribe-tickets-rsvp th{border:0}.tribe-tickets-rsvp .add-to-cart{padding:0 10px 16px}.tribe-tickets-rsvp .tribe-ticket.quantity{border-bottom:1px solid #dfdfdf;display:block;padding:16px 10px 8px}.tribe-tickets-rsvp .tribe-ticket.quantity input.tribe-ticket-quantity{background-color:#fff;border-radius:3px;margin-bottom:5px;padding:5px 10px;width:4.375em}.tribe-tickets-rsvp .tribe-tickets-remaining{color:#777;display:block;font-size:11px}.tribe-tickets-rsvp .tribe-tickets-attendees-list-optout label{color:#777;font-size:13px}.tribe-tickets-rsvp .tickets_description,.tribe-tickets-rsvp .tickets_name,.tribe-tickets-rsvp .tickets_name p{border-bottom:1px solid #dfdfdf;color:#464646;font-size:15px;padding:16px 10px 8px}.tribe-events-style-full.tribe-events-style-theme h2.tribe-events-tickets-title{font-size:17px}#tribe-events .button{border:0;border-radius:3px;background:-webkit-linear-gradient(top,#009ff1,#0080db);background:linear-gradient(180deg,#009ff1,#0080db);cursor:pointer;color:#fff;display:inline-block;font-size:14px;font-weight:400;font-family:sans-serif;letter-spacing:1px;line-height:1;height:auto;margin-top:16px;margin-top:1rem;padding:10px;text-align:center;-webkit-transition:all .15s ease-in-out;transition:all .15s ease-in-out;-webkit-font-smoothing:subpixel-antialiased}.clear{*zoom:1}.clear:after,.clear:before{content:"";display:table}.clear:after{clear:both}.tribe-tickets-rsvp input[type=date],.tribe-tickets-rsvp input[type=datetime-local],.tribe-tickets-rsvp input[type=email],.tribe-tickets-rsvp input[type=month],.tribe-tickets-rsvp input[type=number],.tribe-tickets-rsvp input[type=password],.tribe-tickets-rsvp input[type=search],.tribe-tickets-rsvp input[type=tel],.tribe-tickets-rsvp input[type=text],.tribe-tickets-rsvp input[type=time],.tribe-tickets-rsvp input[type=url],.tribe-tickets-rsvp input[type=week],.tribe-tickets-rsvp select,.tribe-tickets-rsvp textarea{background:#fff}
1
+ .tribe-rsvp{padding:20px 0}.tribe-tickets-meta-row{display:none}.tribe-tickets-has-rsvp .tribe-tickets-meta-row{display:table-row}.tribe-tickets-attendee{padding:10px}.tribe-events-style-full .tribe-events-tickets .tribe-tickets-attendee table,.tribe-events-style-full .tribe-events-tickets .tribe-tickets-attendee td,.tribe-events-style-full .tribe-events-tickets .tribe-tickets-attendee tr,.tribe-events-tickets .tribe-tickets-attendee table,.tribe-events-tickets .tribe-tickets-attendee td,.tribe-events-tickets .tribe-tickets-attendee tr{border:0}.tribe-rsvp-message-display .tribe-rsvp-messages{display:block}.tribe-rsvp-messages{display:none;padding:10px 10px 5px}.tribe-rsvp-message{border-radius:3px;border-style:solid;border-width:1px;font-size:12px;margin:0 0 5px;padding:0 .6em}.tribe-rsvp-message-success{background-color:#ffffe0;border-color:#e6db55}.tribe-rsvp-message-error{background-color:#ffebe8;border-color:#c00}.tribe-ticket-quantity{width:100%}.tickets-unavailable{font-style:italic}.tribe-rsvp-list{list-style:none;padding:0;margin:0}.tribe-rsvp-list>.tribe-item{min-height:105px;padding:20px;border:1px solid #ededed;border-bottom:0}.tribe-rsvp-list>.tribe-item:last-child{border-bottom:1px solid #ededed;margin-bottom:20px}.tribe-rsvp-list>.tribe-item.tribe-disabled{background-color:#efefef;border-color:#ddd;color:#717171}.tribe-rsvp-list>.tribe-item.tribe-disabled:last-child{border-bottom-color:#ddd}.tribe-rsvp-list>.tribe-item .tribe-answer{float:right;display:inline-block}.tribe-rsvp-list>.tribe-item table{border:0;margin:0}.tribe-rsvp-list>.tribe-item td{border:0}.list-attendee{color:#999;display:inline-block;letter-spacing:1px;text-transform:uppercase}.tribe-submit-tickets-form{margin-top:20px}.user-details{margin:0 0 1.5em}.user-details p{margin:0 0 .5em}.tribe-answer{line-height:2}.tribe-answer .type-label{margin-bottom:0;padding-right:.5em}.tribe-answer label{display:block}.tribe-answer select{background:#fff;border:1px solid #ddd;height:30px;line-height:1;margin-left:5px}.tribe-rsvp h2{margin-bottom:20px;line-height:1.2}.event-tickets-meta-label{font-weight:700;margin:0 1em 0 0}.tribe-theme-parent-twentysixteen .comment-content a,.tribe-theme-parent-twentysixteen .entry-content a,.tribe-theme-parent-twentysixteen .entry-footer a:hover,.tribe-theme-parent-twentysixteen .entry-summary a,.tribe-theme-parent-twentysixteen .logged-in-as a,.tribe-theme-parent-twentysixteen .pingback .comment-body>a,.tribe-theme-parent-twentysixteen .site-info a:hover,.tribe-theme-parent-twentysixteen .taxonomy-description a,.tribe-theme-parent-twentysixteen .textwidget a,.tribe-theme-twentysixteen .comment-content a,.tribe-theme-twentysixteen .entry-content a,.tribe-theme-twentysixteen .entry-footer a:hover,.tribe-theme-twentysixteen .entry-summary a,.tribe-theme-twentysixteen .logged-in-as a,.tribe-theme-twentysixteen .pingback .comment-body>a,.tribe-theme-twentysixteen .site-info a:hover,.tribe-theme-twentysixteen .taxonomy-description a,.tribe-theme-twentysixteen .textwidget a{box-shadow:none}.tribe-events-tickets-title.tribe--rsvp{margin:0}.tribe-events-style-full.tribe-events-style-theme h2.tribe-events-tickets-title{font-size:90%}.tribe-events-tickets{background:#f8f8f8;border:0;border-radius:3px;position:relative}.tribe-events-tickets .woocommerce.add-to-cart,.tribe-events-tickets table,.tribe-events-tickets td,.tribe-events-tickets th{border:0}.tribe-events-tickets td{padding:8px 10px}.tribe-events-tickets .woocommerce.add-to-cart{padding:16px}.tribe-events-tickets .tickets_description,.tribe-events-tickets .tickets_name,.tribe-events-tickets .tickets_price,.tribe-events-tickets .woocommerce{border-bottom:1px solid #dfdfdf}.tribe-events-tickets .woocommerce .quantity input{background-color:#fff;border-radius:3px;margin-bottom:5px;padding:5px 10px;text-align:left;width:4.375em}.tribe-events-tickets .tribe-link-tickets-message{background:hsla(0,0%,78%,.8);bottom:0;left:0;position:absolute;right:0;text-align:center;top:0}.tribe-events-tickets .tribe-link-tickets-message .no-javascript-msg{left:50%;position:absolute;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);width:90%}.tribe-events-tickets .tribe-tickets-remaining{color:#777;display:block;font-size:11px}.tribe-events-tickets .tribe-tickets-attendees-list-optout label{color:#777;font-size:13px}.tribe-events-tickets .tribe-tickets-attendees-list-optout input[type=checkbox]+label,.tribe-events-tickets .tribe-tickets-attendees-list-optout input[type=radio]+label{display:inline-block}.tribe-events-tickets .tickets_description,.tribe-events-tickets .tickets_name,.tribe-events-tickets .tickets_name p,.tribe-events-tickets .tickets_price{border-bottom:1px solid #dfdfdf;color:#464646;font-size:15px;padding:16px 10px}.tribe-events-tickets input[type=date],.tribe-events-tickets input[type=datetime-local],.tribe-events-tickets input[type=email],.tribe-events-tickets input[type=month],.tribe-events-tickets input[type=number],.tribe-events-tickets input[type=password],.tribe-events-tickets input[type=search],.tribe-events-tickets input[type=tel],.tribe-events-tickets input[type=text],.tribe-events-tickets input[type=time],.tribe-events-tickets input[type=url],.tribe-events-tickets input[type=week],.tribe-events-tickets select,.tribe-events-tickets textarea{background:#fff}.tribe-events-tickets header{height:auto}.tribe-events-tickets-rsvp .tribe-ticket.quantity{border-bottom:1px solid #dfdfdf;width:192px}.tribe-events-tickets-rsvp .tribe-ticket.quantity input{margin-bottom:5px;padding:5px 10px;width:4.375em}
src/resources/js/frontend-ticket-form.js CHANGED
@@ -287,4 +287,14 @@ var tribe_tickets_ticket_form = {};
287
  $( function() {
288
  my.init();
289
  } );
 
 
 
 
 
 
 
 
 
 
290
  } )( jQuery, tribe_tickets_ticket_form );
287
  $( function() {
288
  my.init();
289
  } );
290
+
291
+ // Listen for any clicks on an element in the document with the `link` class
292
+ $( document ).on( 'click', '.button-events-list', function( e ) {
293
+ // Prevent the default action (e.g. submit the form)
294
+ e.preventDefault();
295
+
296
+ // Get the URL specified in the form
297
+ var url = e.target.parentElement.action;
298
+ window.location = url;
299
+ } );
300
  } )( jQuery, tribe_tickets_ticket_form );
src/resources/js/frontend-ticket-form.min.js CHANGED
@@ -1 +1 @@
1
- var tribe_tickets_ticket_form={};!function(t,e){var _,c;e.init=function(){_=t(".tribe-events-tickets"),c=_.find(".quantity").find(".qty"),c.on("change",e.on_quantity_change)},e.on_quantity_change=function(){var _=t(this),c=e.get_matching_ticket_id(this);e.ticket_uses_global_stock(c)?e.global_stock_quantity_changed(_,c):e.normal_stock_quantity_changed(_,c)},e.global_stock_quantity_changed=function(t,_){var c=t.val(),i=e.get_event_id(_),a=e.get_cap(_),o=e.get_global_stock(i),n=e.currently_requested_global_event_stock(i);n>o&&(c-=n-o),e.stock_mode_is_capped(_)&&c>a&&(c=a),0>=c&&(c=0),t.val(c),e.update_available_stock_counts(i)},e.normal_stock_quantity_changed=function(t,c){var i,a=t.val(),o=e.get_single_stock(c);a>o&&(a=o),t.val(a),i=o-a,_.find(".available-stock[data-product-id="+c+"]").html(i)},e.update_available_stock_counts=function(c){var i=e.get_tickets_of(c),a=e.get_global_stock(c)-e.currently_requested_global_event_stock(c);for(var o in i)if(i.hasOwnProperty(o)){a<0&&(a=0);var n=i[o];if("global"===n.mode&&_.find(".available-stock[data-product-id="+o+"]").html(a),"capped"===n.mode){var r=Math.min(a,n.cap),s=parseInt(t("[data-product-id="+o+"]").find("input").val(),10),d=n.cap-s;d<0?d=0:d>r&&(d=r),_.find(".available-stock[data-product-id="+o+"]").html(d)}}},e.get_matching_ticket_id=function(e){var _=t(e).closest("[data-product-id]");if(_.length)return _.data("product-id")},e.get_ticket_property=function(t,e){if("object"!=typeof tribe_tickets_stock_data)return!1;var _=tribe_tickets_stock_data.tickets[t];return"undefined"!==tribe_tickets_stock_data.tickets[t]&&_[e]},e.get_tickets_of=function(t){if("object"!=typeof tribe_tickets_stock_data)return!1;var e=[];for(var _ in tribe_tickets_stock_data.tickets){var c=tribe_tickets_stock_data.tickets[_];t===c.event_id&&(e[_]=c)}return e},e.currently_requested_global_event_stock=function(t){var c=0,i=e.get_tickets_of(t);for(var a in i)switch(tribe_tickets_stock_data.tickets[a].mode){case"global":case"capped":c+=parseInt(_.find("[data-product-id="+a+"]").find(".qty").val(),10)}return c},e.get_event_property=function(t,e){if("object"!=typeof tribe_tickets_stock_data)return!1;var _=tribe_tickets_stock_data.events[t];return"undefined"!==tribe_tickets_stock_data.events[t]&&_[e]},e.stock_mode_is_global=function(t){return"global"===e.get_mode(t)},e.stock_mode_is_capped=function(t){return"capped"===e.get_mode(t)},e.ticket_uses_global_stock=function(t){return e.stock_mode_is_capped(t)||e.stock_mode_is_global(t)},e.get_mode=function(t){return e.get_ticket_property(t,"mode")},e.get_event_id=function(t){return e.get_ticket_property(t,"event_id")},e.get_cap=function(t){return e.get_ticket_property(t,"cap")},e.get_global_stock=function(t){return e.get_event_property(t,"stock")},e.get_single_stock=function(t){return e.get_ticket_property(t,"stock")},t(function(){e.init()})}(jQuery,tribe_tickets_ticket_form);
1
+ var tribe_tickets_ticket_form={};!function(t,e){var _,c;e.init=function(){_=t(".tribe-events-tickets"),c=_.find(".quantity").find(".qty"),c.on("change",e.on_quantity_change)},e.on_quantity_change=function(){var _=t(this),c=e.get_matching_ticket_id(this);e.ticket_uses_global_stock(c)?e.global_stock_quantity_changed(_,c):e.normal_stock_quantity_changed(_,c)},e.global_stock_quantity_changed=function(t,_){var c=t.val(),i=e.get_event_id(_),n=e.get_cap(_),a=e.get_global_stock(i),o=e.currently_requested_global_event_stock(i);o>a&&(c-=o-a),e.stock_mode_is_capped(_)&&c>n&&(c=n),0>=c&&(c=0),t.val(c),e.update_available_stock_counts(i)},e.normal_stock_quantity_changed=function(t,c){var i,n=t.val(),a=e.get_single_stock(c);n>a&&(n=a),t.val(n),i=a-n,_.find(".available-stock[data-product-id="+c+"]").html(i)},e.update_available_stock_counts=function(c){var i=e.get_tickets_of(c),n=e.get_global_stock(c)-e.currently_requested_global_event_stock(c);for(var a in i)if(i.hasOwnProperty(a)){n<0&&(n=0);var o=i[a];if("global"===o.mode&&_.find(".available-stock[data-product-id="+a+"]").html(n),"capped"===o.mode){var r=Math.min(n,o.cap),s=parseInt(t("[data-product-id="+a+"]").find("input").val(),10),d=o.cap-s;d<0?d=0:d>r&&(d=r),_.find(".available-stock[data-product-id="+a+"]").html(d)}}},e.get_matching_ticket_id=function(e){var _=t(e).closest("[data-product-id]");if(_.length)return _.data("product-id")},e.get_ticket_property=function(t,e){if("object"!=typeof tribe_tickets_stock_data)return!1;var _=tribe_tickets_stock_data.tickets[t];return"undefined"!==tribe_tickets_stock_data.tickets[t]&&_[e]},e.get_tickets_of=function(t){if("object"!=typeof tribe_tickets_stock_data)return!1;var e=[];for(var _ in tribe_tickets_stock_data.tickets){var c=tribe_tickets_stock_data.tickets[_];t===c.event_id&&(e[_]=c)}return e},e.currently_requested_global_event_stock=function(t){var c=0,i=e.get_tickets_of(t);for(var n in i)switch(tribe_tickets_stock_data.tickets[n].mode){case"global":case"capped":c+=parseInt(_.find("[data-product-id="+n+"]").find(".qty").val(),10)}return c},e.get_event_property=function(t,e){if("object"!=typeof tribe_tickets_stock_data)return!1;var _=tribe_tickets_stock_data.events[t];return"undefined"!==tribe_tickets_stock_data.events[t]&&_[e]},e.stock_mode_is_global=function(t){return"global"===e.get_mode(t)},e.stock_mode_is_capped=function(t){return"capped"===e.get_mode(t)},e.ticket_uses_global_stock=function(t){return e.stock_mode_is_capped(t)||e.stock_mode_is_global(t)},e.get_mode=function(t){return e.get_ticket_property(t,"mode")},e.get_event_id=function(t){return e.get_ticket_property(t,"event_id")},e.get_cap=function(t){return e.get_ticket_property(t,"cap")},e.get_global_stock=function(t){return e.get_event_property(t,"stock")},e.get_single_stock=function(t){return e.get_ticket_property(t,"stock")},t(function(){e.init()}),t(document).on("click",".button-events-list",function(t){t.preventDefault();var e=t.target.parentElement.action;window.location=e})}(jQuery,tribe_tickets_ticket_form);
src/resources/postcss/rsvp.pcss CHANGED
@@ -1,3 +1,10 @@
 
 
 
 
 
 
 
1
  .tribe-rsvp {
2
  padding: 20px 0;
3
  }
@@ -14,33 +21,6 @@
14
  padding: 10px;
15
  }
16
 
17
- .tribe-events-tickets {
18
- position: relative;
19
-
20
- .tribe-link-tickets-message {
21
- background: rgba(200, 200, 200, .8);
22
- bottom: 0;
23
- left: 0;
24
- position: absolute;
25
- right: 0;
26
- text-align: center;
27
- top: 0;
28
-
29
- .no-javascript-msg {
30
- left: 50%;
31
- position: absolute;
32
- top: 50%;
33
- transform: translate(-50%, -50%);
34
- width: 90%;
35
- }
36
- }
37
-
38
- }
39
-
40
- .tribe-events-tickets td {
41
- padding: 8px 10px;
42
- }
43
-
44
  .tribe-events-style-full .tribe-events-tickets .tribe-tickets-attendee,
45
  .tribe-events-tickets .tribe-tickets-attendee {
46
  table,
@@ -92,6 +72,7 @@
92
  margin: 0;
93
 
94
  > .tribe-item {
 
95
  padding: 20px;
96
  border: 1px solid #ededed;
97
  border-bottom: 0;
@@ -150,14 +131,20 @@
150
  line-height: 2;
151
 
152
  .type-label {
 
153
  padding-right: .5em;
154
  }
 
155
  label {
156
  display: block;
157
  }
 
158
  select {
159
  background: white;
160
  border: 1px solid #ddd;
 
 
 
161
  }
162
  }
163
 
@@ -190,110 +177,111 @@
190
  }
191
  }
192
 
193
-
194
- /* = Tickets Front End Styles
195
  =============================================*/
196
 
197
- .tribe-tickets-rsvp {
198
 
199
- .tribe-events-tickets-title {
200
- font-family: sans-serif;
201
- }
202
 
203
- .tribe-events-tickets {
204
- background: #f8f8f8;
205
- border-radius: 3px;
206
- padding: 0;
207
  }
 
 
 
 
 
 
 
 
 
208
 
209
  table,
210
  th,
211
- td {
 
212
  border: 0;
213
  }
214
 
215
- .add-to-cart {
216
- padding: 0 10px 16px;
217
  }
218
 
219
- .tribe-ticket.quantity {
220
- border-bottom: 1px solid #dfdfdf;
221
- display: block;
222
- padding: 16px 10px 8px 10px;
223
-
224
- input.tribe-ticket-quantity {
225
- background-color: #fff;
226
- border-radius: 3px;
227
- margin-bottom: 5px;
228
- padding: 5px 10px;
229
- width: 4.375em;
230
- }
231
  }
232
 
233
- .tribe-tickets-remaining {
234
- color: #777;
235
- display: block;
236
- font-size: 11px;
 
237
  }
238
 
239
- .tribe-tickets-attendees-list-optout label {
240
- color: #777;
241
- font-size: 13px;
 
 
 
 
 
 
 
 
242
  }
243
 
244
- .tickets_name,
245
- .tickets_name p,
246
- .tickets_description {
247
- border-bottom: 1px solid #dfdfdf;
248
- color: #464646;
249
- font-size: 15px;
250
- padding: 16px 10px 8px 10px;
251
- }
252
- }
253
 
254
- .tribe-events-style-full.tribe-events-style-theme {
255
- h2.tribe-events-tickets-title {
256
- font-size: 17px;
 
 
 
 
257
  }
258
- }
259
 
260
- #tribe-events {
261
- .button {
262
- border: 0;
263
- border-radius: 3px;
264
- background: linear-gradient( to bottom, #009FF1, #0080DB);
265
- cursor: pointer;
266
- color: #fff;
267
- display: inline-block;
268
- font-size: 14px;
269
- font-weight: 400;
270
- font-family: sans-serif;
271
- letter-spacing: 1px;
272
- line-height: 1;
273
- height: auto;
274
- margin-top: 1rem;
275
- padding: 10px;
276
- text-align: center;
277
- transition: all .15s ease-in-out;
278
- -webkit-font-smoothing: subpixel-antialiased;
279
  }
280
- }
281
 
282
- .clear {
283
- *zoom: 1;
 
 
 
284
 
285
- &:before,
286
- &:after {
287
- content: '';
288
- display: table;
289
  }
290
 
291
- &:after {
292
- clear: both;
 
 
 
 
 
 
293
  }
294
- }
295
 
296
- .tribe-tickets-rsvp {
297
  input[type="date"],
298
  input[type="time"],
299
  input[type="datetime-local"],
@@ -310,5 +298,24 @@
310
  select {
311
  background: #fff;
312
  }
 
 
 
 
313
  }
314
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ :root {
2
+ --text-light-color: #777;
3
+ --text-dark-color: #464646;
4
+ --border-color: #dfdfdf;
5
+ --table-background-color: #f8f8f8;
6
+ }
7
+
8
  .tribe-rsvp {
9
  padding: 20px 0;
10
  }
21
  padding: 10px;
22
  }
23
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
24
  .tribe-events-style-full .tribe-events-tickets .tribe-tickets-attendee,
25
  .tribe-events-tickets .tribe-tickets-attendee {
26
  table,
72
  margin: 0;
73
 
74
  > .tribe-item {
75
+ min-height: 105px;
76
  padding: 20px;
77
  border: 1px solid #ededed;
78
  border-bottom: 0;
131
  line-height: 2;
132
 
133
  .type-label {
134
+ margin-bottom: 0;
135
  padding-right: .5em;
136
  }
137
+
138
  label {
139
  display: block;
140
  }
141
+
142
  select {
143
  background: white;
144
  border: 1px solid #ddd;
145
+ height: 30px;
146
+ line-height: 1;
147
+ margin-left: 5px;
148
  }
149
  }
150
 
177
  }
178
  }
179
 
180
+ /* = Tickets & RSVP Modules Front End Styles
 
181
  =============================================*/
182
 
183
+ /* Title */
184
 
185
+ .tribe-events-tickets-title.tribe--rsvp {
186
+ margin: 0;
187
+ }
188
 
189
+
190
+ .tribe-events-style-full.tribe-events-style-theme {
191
+ h2.tribe-events-tickets-title {
192
+ font-size: 90%;
193
  }
194
+ }
195
+
196
+ /* Tickets Table */
197
+ .tribe-events-tickets {
198
+ background: var(--table-background-color);
199
+ border: 0;
200
+ border-radius: 3px;
201
+ position: relative;
202
+
203
 
204
  table,
205
  th,
206
+ td,
207
+ .woocommerce.add-to-cart {
208
  border: 0;
209
  }
210
 
211
+ td {
212
+ padding: 8px 10px;
213
  }
214
 
215
+ .woocommerce.add-to-cart {
216
+ padding: 16px;
 
 
 
 
 
 
 
 
 
 
217
  }
218
 
219
+ .woocommerce,
220
+ .tickets_name,
221
+ .tickets_description,
222
+ .tickets_price {
223
+ border-bottom: 1px solid var(--border-color);
224
  }
225
 
226
+ .woocommerce {
227
+ .quantity {
228
+ input {
229
+ background-color: #fff;
230
+ border-radius: 3px;
231
+ margin-bottom: 5px;
232
+ padding: 5px 10px;
233
+ text-align: left;
234
+ width: 4.375em;
235
+ }
236
+ }
237
  }
238
 
239
+ .tribe-link-tickets-message {
240
+ background: rgba(200, 200, 200, .8);
241
+ bottom: 0;
242
+ left: 0;
243
+ position: absolute;
244
+ right: 0;
245
+ text-align: center;
246
+ top: 0;
 
247
 
248
+ .no-javascript-msg {
249
+ left: 50%;
250
+ position: absolute;
251
+ top: 50%;
252
+ transform: translate(-50%, -50%);
253
+ width: 90%;
254
+ }
255
  }
 
256
 
257
+ .tribe-tickets-remaining {
258
+ color: var(--text-light-color);
259
+ display: block;
260
+ font-size: 11px;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
261
  }
 
262
 
263
+ .tribe-tickets-attendees-list-optout {
264
+ label {
265
+ color: var( --text-light-color );
266
+ font-size: 13px;
267
+ }
268
 
269
+ input[type="radio"] + label,
270
+ input[type="checkbox"] + label {
271
+ display: inline-block;
272
+ }
273
  }
274
 
275
+ .tickets_name,
276
+ .tickets_name p,
277
+ .tickets_description,
278
+ .tickets_price {
279
+ border-bottom: 1px solid var(--border-color);
280
+ color: var(--text-dark-color);
281
+ font-size: 15px;
282
+ padding: 16px 10px;
283
  }
 
284
 
 
285
  input[type="date"],
286
  input[type="time"],
287
  input[type="datetime-local"],
298
  select {
299
  background: #fff;
300
  }
301
+
302
+ header {
303
+ height: auto;
304
+ }
305
  }
306
 
307
+
308
+ /* RSVP Table (differences only) */
309
+ .tribe-events-tickets-rsvp {
310
+
311
+ .tribe-ticket.quantity {
312
+ border-bottom: 1px solid var(--border-color);
313
+ width: 192px;
314
+
315
+ input {
316
+ margin-bottom: 5px;
317
+ padding: 5px 10px;
318
+ width: 4.375em;
319
+ }
320
+ }
321
+ }
src/template-tags/tickets.php CHANGED
@@ -147,7 +147,110 @@ if ( ! function_exists( 'tribe_events_count_available_tickets' ) ) {
147
  }
148
  }//end if
149
 
150
- if ( ! function_exists( 'tribe_events_has_unlimited_stock_tickets' ) ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
151
  /**
152
  * Returns true if the event contains one or more tickets which are not
153
  * subject to any inventory limitations.
@@ -162,6 +265,7 @@ if ( ! function_exists( 'tribe_events_has_unlimited_stock_tickets' ) ) {
162
  }
163
 
164
  foreach ( Tribe__Tickets__Tickets::get_all_event_tickets( $event->ID ) as $ticket ) {
 
165
  if ( Tribe__Tickets__Ticket_Object::UNLIMITED_STOCK === $ticket->stock() ) {
166
  return true;
167
  }
@@ -230,6 +334,25 @@ if ( ! function_exists( 'tribe_events_ticket_is_on_sale' ) ) {
230
  }
231
  }//end if
232
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
233
  if ( ! function_exists( 'tribe_tickets_get_ticket_stock_message' ) ) {
234
  /**
235
  * Gets the "tickets sold" message for a given ticket
@@ -291,8 +414,6 @@ if ( ! function_exists( 'tribe_tickets_get_ticket_stock_message' ) ) {
291
  }
292
 
293
  $message = sprintf( '%1$d %2$s%3$s', absint( $sold ), esc_html( $sold_label ), esc_html( $status ) );
294
-
295
-
296
  }
297
 
298
  return $message;
@@ -483,7 +604,6 @@ function tribe_tickets_get_template_part( $slug, $name = null, array $data = nul
483
  }
484
  }
485
 
486
-
487
  if ( ! function_exists( 'tribe_tickets_post_type_enabled' ) ) {
488
  /**
489
  * Returns whether or not the provided post type allows tickets to be attached
@@ -497,3 +617,76 @@ if ( ! function_exists( 'tribe_tickets_post_type_enabled' ) ) {
497
  return in_array( $post_type, $post_types );
498
  }
499
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
147
  }
148
  }//end if
149
 
150
+ if ( ! function_exists( 'tribe_tickets_buy_button' ) ) {
151
+
152
+ /**
153
+ * Echos Remaining Ticket Count and Purchase Buttons for an Event
154
+ *
155
+ * @since 4.5
156
+ *
157
+ * @param bool $echo Whether or not we should print
158
+ *
159
+ * @return string
160
+ */
161
+ function tribe_tickets_buy_button( $echo = true ) {
162
+ $event_id = get_the_ID();
163
+
164
+ // check if there are any tickets on sale
165
+ if ( ! tribe_events_has_tickets_on_sale( $event_id ) ) {
166
+ return null;
167
+ }
168
+
169
+ // get an array for ticket and rsvp counts
170
+ $types = Tribe__Tickets__Tickets::get_ticket_counts( $event_id );
171
+
172
+ // if no rsvp or tickets return
173
+ if ( ! $types ) {
174
+ return null;
175
+ }
176
+
177
+ $html = array();
178
+ $parts = array();
179
+
180
+ // If we have tickets or RSVP, but everything is Sold Out then display the Sold Out message
181
+ foreach ( $types as $type => $data ) {
182
+ if ( ! $data['count'] ) {
183
+ continue;
184
+ }
185
+
186
+ if ( ! $data['available'] ) {
187
+ $parts[ $type . '-stock' ] = '<span class="tribe-out-of-stock">' . esc_html_x( 'Sold out', 'list view stock sold out', 'event-tickets' ) . '</span>';
188
+
189
+ // Only re-aply if we don't have a stock yet
190
+ if ( empty( $html['stock'] ) ) {
191
+ $html['stock'] = $parts[ $type . '-stock' ];
192
+ }
193
+ } else {
194
+ $stock = $data['stock'];
195
+ if ( $data['unlimited'] || ! $data['stock'] ) {
196
+ // if unlimited tickets, tickets with no stock and rsvp, or no tickets and rsvp unlimited - hide the remaining count
197
+ $stock = false;
198
+ }
199
+
200
+ $stock_html = '';
201
+ if ( $stock ) {
202
+ $number = number_format_i18n( $stock );
203
+ if ( 'rsvp' === $type ) {
204
+ $text = _n( '%s spot left', '%s spots left', $stock, 'event-tickets' );
205
+ } else {
206
+ $text = _n( '%s ticket left', '%s tickets left', $stock, 'event-tickets' );
207
+ }
208
+
209
+ $stock_html = '<span class="tribe-tickets-left">'
210
+ . esc_html( sprintf( $text, $number ) )
211
+ . '</span>';
212
+ }
213
+
214
+ $parts[ $type . '-stock' ] = $html['stock'] = $stock_html;
215
+
216
+ if ( 'rsvp' === $type ) {
217
+ $button_label = esc_html_x( 'RSVP Now!', 'list view rsvp now ticket button', 'event-tickets' );
218
+ $button_anchor = '#rsvp-now';
219
+ } else {
220
+ $button_label = esc_html_x( 'Buy Now!', 'list view buy now ticket button', 'event-tickets' );
221
+ $button_anchor = '#buy-tickets';
222
+ }
223
+
224
+ $button = '<form method="get" action="' . esc_url( get_the_permalink( $event_id ) . $button_anchor ) . '">'
225
+ . '<button type="submit" name="tickets_process" class="tribe-button">' . $button_label . '</button>'
226
+ . '</form>';
227
+
228
+ $parts[ $type . '-button' ] = $html['button'] = $button;
229
+ }
230
+ }
231
+
232
+ /**
233
+ * Filter the ticket count and purchase button
234
+ *
235
+ * @since 4.5
236
+ *
237
+ * @param array $html An array with the final HTML
238
+ * @param array $parts An array with all the possible parts of the HTMl button
239
+ * @param array $types Ticket and RSVP count array for event
240
+ * @param int $event_id Post Event ID
241
+ */
242
+ $html = apply_filters( 'tribe_tickets_buy_button', $html, $parts, $types, $event_id );
243
+ $html = implode( "\n", $html );
244
+
245
+ if ( $echo ) {
246
+ echo $html;
247
+ }
248
+
249
+ return $html;
250
+ }
251
+ }
252
+
253
+ if ( ! function_exists( 'tribe_tickets_has_unlimited_stock_tickets' ) ) {
254
  /**
255
  * Returns true if the event contains one or more tickets which are not
256
  * subject to any inventory limitations.
265
  }
266
 
267
  foreach ( Tribe__Tickets__Tickets::get_all_event_tickets( $event->ID ) as $ticket ) {
268
+ // Using equal operator as identical comparison operator causes this to always be false
269
  if ( Tribe__Tickets__Ticket_Object::UNLIMITED_STOCK === $ticket->stock() ) {
270
  return true;
271
  }
334
  }
335
  }//end if
336
 
337
+ if ( ! function_exists( 'tribe_events_has_tickets_on_sale' ) ) {
338
+ /**
339
+ * Checks if the event has any tickets on sale
340
+ *
341
+ * @param int $event_id
342
+ *
343
+ * @return bool
344
+ */
345
+ function tribe_events_has_tickets_on_sale( $event_id ) {
346
+ $has_tickets_on_sale = false;
347
+ $tickets = Tribe__Tickets__Tickets::get_all_event_tickets( $event_id );
348
+ foreach ( $tickets as $ticket ) {
349
+ $has_tickets_on_sale = ( $has_tickets_on_sale || tribe_events_ticket_is_on_sale( $ticket ) );
350
+ }
351
+
352
+ return $has_tickets_on_sale;
353
+ }
354
+ }
355
+
356
  if ( ! function_exists( 'tribe_tickets_get_ticket_stock_message' ) ) {
357
  /**
358
  * Gets the "tickets sold" message for a given ticket
414
  }
415
 
416
  $message = sprintf( '%1$d %2$s%3$s', absint( $sold ), esc_html( $sold_label ), esc_html( $status ) );
 
 
417
  }
418
 
419
  return $message;
604
  }
605
  }
606
 
 
607
  if ( ! function_exists( 'tribe_tickets_post_type_enabled' ) ) {
608
  /**
609
  * Returns whether or not the provided post type allows tickets to be attached
617
  return in_array( $post_type, $post_types );
618
  }
619
  }
620
+
621
+ if ( ! function_exists( 'tribe_tickets_get_event_ids' ) ) {
622
+
623
+ /**
624
+ * Gets an array of event ids when passing an id
625
+ *
626
+ * @param integer|string $id a rsvp order key, order id, attendee id, ticket id, or product id
627
+ *
628
+ * @return array
629
+ */
630
+ function tribe_tickets_get_event_ids( $id ) {
631
+ return tribe( 'tickets.data_api' )->get_event_ids( $id );
632
+ }
633
+ }
634
+
635
+ if ( ! function_exists( 'tribe_tickets_get_ticket_provider' ) ) {
636
+
637
+ /**
638
+ * Gets the ticket provider class when passed an id
639
+ *
640
+ * @param integer|string $id a rsvp order key, order id, attendee id, ticket id, or product id
641
+ *
642
+ * @return bool|object
643
+ */
644
+ function tribe_tickets_get_ticket_provider( $id ) {
645
+ return tribe( 'tickets.data_api' )->get_ticket_provider( $id );
646
+ }
647
+ }
648
+
649
+ if ( ! function_exists( 'tribe_tickets_get_attendees' ) ) {
650
+
651
+ /**
652
+ * Get attendee(s) by an id
653
+ *
654
+ * @param integer|string $id a rsvp order key, order id, attendee id, ticket id, or event id
655
+ * @param null $context use 'rsvp_order' to get all rsvp tickets from an order based off the post id and not the order key
656
+ *
657
+ * @return array() an array of all attendee(s) data including custom attendee meta for a given id
658
+ */
659
+ function tribe_tickets_get_attendees( $id, $context = null ) {
660
+ return tribe( 'tickets.data_api' )->get_attendees_by_id( $id, $context );
661
+ }
662
+ }
663
+
664
+ if ( ! function_exists( 'tribe_tickets_has_meta_data' ) ) {
665
+
666
+ /**
667
+ * Return true or false if a given id has meta data
668
+ *
669
+ * @param integer|string $id a rsvp order key, order id, attendee id, ticket id, or event id
670
+ * @param null $context use 'rsvp_order' to get all rsvp tickets from an order based off the post id and not the order key
671
+ *
672
+ * @return bool
673
+ */
674
+ function tribe_tickets_has_meta_data( $id, $context = null ) {
675
+ return tribe( 'tickets.data_api' )->attendees_has_meta_data( $id, $context );
676
+ }
677
+ }
678
+
679
+ if ( ! function_exists( 'tribe_tickets_has_meta_fields' ) ) {
680
+
681
+ /**
682
+ * Return true or false if a given id has meta fields
683
+ *
684
+ * @param integer|string $id a rsvp order key, order id, attendee id, ticket id, or event id
685
+ * @param null $context use 'rsvp_order' to get all rsvp tickets from an order based off the post id and not the order key
686
+ *
687
+ * @return bool
688
+ */
689
+ function tribe_tickets_has_meta_fields( $id, $context = null ) {
690
+ return tribe( 'tickets.data_api' )->ticket_has_meta_fields( $id, $context );
691
+ }
692
+ }
src/views/tickets/email.php CHANGED
@@ -16,7 +16,7 @@
16
  * 'security_code')
17
  *
18
  * @package TribeEventsCalendar
19
- * @version 4.4.3
20
  *
21
  */
22
  ?>
@@ -233,7 +233,7 @@
233
  $count ++;
234
 
235
  if ( $count == 2 ) {
236
- $break = 'page-break-before: always !important;';
237
  }
238
 
239
  $event = get_post( $ticket['event_id'] );
16
  * 'security_code')
17
  *
18
  * @package TribeEventsCalendar
19
+ * @version 4.5
20
  *
21
  */
22
  ?>
233
  $count ++;
234
 
235
  if ( $count == 2 ) {
236
+ $break = 'page-break-before:always !important;';
237
  }
238
 
239
  $event = get_post( $ticket['event_id'] );
src/views/tickets/rsvp.php CHANGED
@@ -6,7 +6,7 @@
6
  *
7
  * [your-theme]/tribe-events/tickets/rsvp.php
8
  *
9
- * @version 4.4.9
10
  *
11
  * @var bool $must_login
12
  */
@@ -20,8 +20,18 @@ $messages = Tribe__Tickets__RSVP::get_instance()->get_messages();
20
  $messages_class = $messages ? 'tribe-rsvp-message-display' : '';
21
  $now = current_time( 'timestamp' );
22
  ?>
23
- <form action="" class="tribe-tickets-rsvp cart <?php echo esc_attr( $messages_class ); ?>" method="post" enctype='multipart/form-data'>
24
- <h2 class="tribe-events-tickets-title"><?php echo esc_html_x( 'RSVP', 'form heading', 'event-tickets' ) ?></h2>
 
 
 
 
 
 
 
 
 
 
25
  <div class="tribe-rsvp-messages">
26
  <?php
27
  if ( $messages ) {
@@ -34,11 +44,14 @@ $now = current_time( 'timestamp' );
34
  }//end foreach
35
  }//end if
36
  ?>
37
- <div class="tribe-rsvp-message tribe-rsvp-message-error tribe-rsvp-message-confirmation-error" style="display:none;">
 
 
38
  <?php esc_html_e( 'Please fill in the RSVP confirmation name and email fields.', 'event-tickets' ); ?>
39
  </div>
40
  </div>
41
- <table width="100%" class="tribe-events-tickets tribe-events-tickets-rsvp">
 
42
  <?php
43
  foreach ( $tickets as $ticket ) {
44
  // if the ticket isn't an RSVP ticket, then let's skip it
@@ -52,35 +65,38 @@ $now = current_time( 'timestamp' );
52
 
53
  $is_there_any_product = true;
54
  $is_there_any_product_to_sell = $ticket->is_in_stock();
55
-
56
- if ( $is_there_any_product_to_sell ) {
57
- $are_products_available = true;
58
- }
59
- ?>
60
- <tr class="tribe-rsvp-ticket-row-<?php echo absint( $ticket->ID ); ?>">
61
- <td class="tribe-ticket quantity" data-product-id="<?php echo esc_attr( $ticket->ID ); ?>">
62
- <input type="hidden" name="product_id[]" value="<?php echo absint( $ticket->ID ); ?>">
63
- <?php if ( $is_there_any_product_to_sell ): ?>
64
- <input type="number" class="tribe-ticket-quantity" min="0" max="<?php echo esc_attr( $ticket->remaining() ); ?>" name="quantity_<?php echo absint( $ticket->ID ); ?>" value="0" <?php disabled( $must_login ); ?> >
65
-
66
- <?php if ( $ticket->managing_stock() ): ?>
67
- <span class="tribe-tickets-remaining">
68
- <?php echo sprintf( esc_html__( '%1$s out of %2$s available', 'event-tickets' ), $ticket->remaining(), $ticket->original_stock() ); ?>
69
- </span>
 
 
 
 
 
 
70
  <?php endif; ?>
71
- <?php else: ?>
72
- <span class="tickets_nostock"><?php esc_html_e( 'Out of stock!', 'event-tickets' ); ?></span>
73
- <?php endif; ?>
74
- </td>
75
- <td class="tickets_name">
76
- <?php echo esc_html( $ticket->name ); ?>
77
- </td>
78
- <td class="tickets_description" colspan="2">
79
- <?php echo esc_html( $ticket->description ); ?>
80
- </td>
81
- </tr>
82
 
83
- <?php
84
  /**
85
  * Allows injection of HTML after an RSVP ticket table row
86
  *
@@ -92,7 +108,7 @@ $now = current_time( 'timestamp' );
92
  }
93
  ?>
94
 
95
- <?php if ( $are_products_available ) : ?>
96
  <tr class="tribe-tickets-meta-row">
97
  <td colspan="4" class="tribe-tickets-attendees">
98
  <header><?php esc_html_e( 'Send RSVP confirmation to:', 'event-tickets' ); ?></header>
@@ -130,11 +146,18 @@ $now = current_time( 'timestamp' );
130
  <?php Tribe__Tickets__Tickets_View::instance()->render_rsvp_selector( 'attendee[order_status]', '' ); ?>
131
  </td>
132
  </tr>
 
133
  <?php if ( class_exists( 'Tribe__Tickets_Plus__Attendees_List' ) && ! Tribe__Tickets_Plus__Attendees_List::is_hidden_on( get_the_ID() ) ) : ?>
134
  <tr class="tribe-tickets-attendees-list-optout">
135
  <td colspan="4">
136
- <input type="checkbox" name="attendee[optout]" id="tribe-tickets-attendees-list-optout">
137
- <label for="tribe-tickets-attendees-list-optout"><?php esc_html_e( 'Don\'t list me on the public attendee list', 'event-tickets' ); ?></label>
 
 
 
 
 
 
138
  </td>
139
  </tr>
140
  <?php endif; ?>
@@ -143,15 +166,23 @@ $now = current_time( 'timestamp' );
143
  </tr>
144
  <tr>
145
  <td colspan="4" class="add-to-cart">
146
- <?php if ( $must_login ): ?>
147
- <a href="<?php echo Tribe__Tickets__Tickets::get_login_url(); ?>"><?php esc_html_e( 'Login to RSVP', 'event-tickets' );?></a>
 
 
148
  <?php else: ?>
149
- <button type="submit" name="tickets_process" value="1" class="button alt"><?php esc_html_e( 'Confirm RSVP', 'event-tickets' );?></button>
 
 
 
 
 
 
 
150
  <?php endif; ?>
151
  </td>
152
  </tr>
153
  <?php endif; ?>
154
-
155
  <noscript>
156
  <tr>
157
  <td class="tribe-link-tickets-message">
6
  *
7
  * [your-theme]/tribe-events/tickets/rsvp.php
8
  *
9
+ * @version 4.5
10
  *
11
  * @var bool $must_login
12
  */
20
  $messages_class = $messages ? 'tribe-rsvp-message-display' : '';
21
  $now = current_time( 'timestamp' );
22
  ?>
23
+
24
+ <form
25
+ id="rsvp-now"
26
+ action=""
27
+ class="tribe-tickets-rsvp cart <?php echo esc_attr( $messages_class ); ?>"
28
+ method="post"
29
+ enctype='multipart/form-data'
30
+ >
31
+ <h2 class="tribe-events-tickets-title tribe--rsvp">
32
+ <?php echo esc_html_x( 'RSVP', 'form heading', 'event-tickets' ) ?>
33
+ </h2>
34
+
35
  <div class="tribe-rsvp-messages">
36
  <?php
37
  if ( $messages ) {
44
  }//end foreach
45
  }//end if
46
  ?>
47
+
48
+ <div
49
+ class="tribe-rsvp-message tribe-rsvp-message-error tribe-rsvp-message-confirmation-error" style="display:none;">
50
  <?php esc_html_e( 'Please fill in the RSVP confirmation name and email fields.', 'event-tickets' ); ?>
51
  </div>
52
  </div>
53
+
54
+ <table class="tribe-events-tickets tribe-events-tickets-rsvp">
55
  <?php
56
  foreach ( $tickets as $ticket ) {
57
  // if the ticket isn't an RSVP ticket, then let's skip it
65
 
66
  $is_there_any_product = true;
67
  $is_there_any_product_to_sell = $ticket->is_in_stock();
68
+ ?>
69
+ <tr>
70
+ <td class="tribe-ticket quantity" data-product-id="<?php echo esc_attr( $ticket->ID ); ?>">
71
+ <input type="hidden" name="product_id[]" value="<?php echo absint( $ticket->ID ); ?>">
72
+ <?php if ( $is_there_any_product_to_sell ) : ?>
73
+ <input
74
+ type="number"
75
+ class="tribe-ticket-quantity"
76
+ min="0"
77
+ max="<?php echo esc_attr( $ticket->remaining() ); ?>"
78
+ name="quantity_<?php echo absint( $ticket->ID ); ?>"
79
+ value="0"
80
+ <?php disabled( $must_login ); ?>
81
+ >
82
+ <?php if ( $ticket->managing_stock() ) : ?>
83
+ <span class="tribe-tickets-remaining">
84
+ <?php echo sprintf( esc_html__( '%1$s out of %2$s available', 'event-tickets' ), $ticket->remaining(), $ticket->original_stock() ); ?>
85
+ </span>
86
+ <?php endif; ?>
87
+ <?php else: ?>
88
+ <span class="tickets_nostock"><?php esc_html_e( 'Out of stock!', 'event-tickets' ); ?></span>
89
  <?php endif; ?>
90
+ </td>
91
+ <td class="tickets_name">
92
+ <?php echo esc_html( $ticket->name ); ?>
93
+ </td>
94
+ <td class="tickets_description" colspan="2">
95
+ <?php echo esc_html( $ticket->description ); ?>
96
+ </td>
97
+ </tr>
98
+ <?php
 
 
99
 
 
100
  /**
101
  * Allows injection of HTML after an RSVP ticket table row
102
  *
108
  }
109
  ?>
110
 
111
+ <?php if ( $is_there_any_product_to_sell ) : ?>
112
  <tr class="tribe-tickets-meta-row">
113
  <td colspan="4" class="tribe-tickets-attendees">
114
  <header><?php esc_html_e( 'Send RSVP confirmation to:', 'event-tickets' ); ?></header>
146
  <?php Tribe__Tickets__Tickets_View::instance()->render_rsvp_selector( 'attendee[order_status]', '' ); ?>
147
  </td>
148
  </tr>
149
+
150
  <?php if ( class_exists( 'Tribe__Tickets_Plus__Attendees_List' ) && ! Tribe__Tickets_Plus__Attendees_List::is_hidden_on( get_the_ID() ) ) : ?>
151
  <tr class="tribe-tickets-attendees-list-optout">
152
  <td colspan="4">
153
+ <input
154
+ type="checkbox"
155
+ name="attendee[optout]"
156
+ id="tribe-tickets-attendees-list-optout"
157
+ >
158
+ <label for="tribe-tickets-attendees-list-optout">
159
+ <?php esc_html_e( 'Don\'t list me on the public attendee list', 'event-tickets' ); ?>
160
+ </label>
161
  </td>
162
  </tr>
163
  <?php endif; ?>
166
  </tr>
167
  <tr>
168
  <td colspan="4" class="add-to-cart">
169
+ <?php if ( $must_login ) : ?>
170
+ <a href="<?php echo esc_url( Tribe__Tickets__Tickets::get_login_url() ); ?>">
171
+ <?php esc_html_e( 'Login to RSVP', 'event-tickets' );?>
172
+ </a>
173
  <?php else: ?>
174
+ <button
175
+ type="submit"
176
+ name="tickets_process"
177
+ value="1"
178
+ class="tribe-button tribe-button--rsvp"
179
+ >
180
+ <?php esc_html_e( 'Confirm RSVP', 'event-tickets' );?>
181
+ </button>
182
  <?php endif; ?>
183
  </td>
184
  </tr>
185
  <?php endif; ?>
 
186
  <noscript>
187
  <tr>
188
  <td class="tribe-link-tickets-message">