The Events Calendar - Version 3.2

Version Description

  • Incorporated the much-fabled CSV importer! Import CSV files directly into your The Events Calendar/Events Calendar PRO site (for an overview on how to use it, read this: http://m.tri.be/9t)
  • Implemented code requesting that search engines do not index calendar pages that have no events to display
  • Addressed a number of Twenty Thirteen theme compatibility fixes
  • Improved how date and time are displayed on single event entries for single day events (thanks to Robin for the heads up!)
  • Added a suggestion by the Organizer email field to obfuscate email addresses published on your site (thanks, Thea, for requesting this on our UserVoice page!)
  • Improved compliance with PHP strict standards (thanks to Bryan in the forums for making this request!)
  • Added more flexible formatting options for event schedule details
  • Incorporated a fix to improve behaviors of the tribe_is_month() template tag (thanks jhned at the WordPress.org forums for this report!)
  • Added a fix for when "show events in main blog loop" option disrupts certain static home pages (thanks to yorkshiretots for reporting this on the forum!)
  • Added a fix for when the "show events in main blog loop" option disrupts the product listing on WooCommerce storefront for certain users (thanks to forge for the first report on this!)
  • Fixed an issue with broken commenting that appeared on some templates (thanks to Tom for first reporting this at the PRO forums!)
  • Added ability to create recurring events that happen every 5th occurence of a day in the month; e.g., every 5th Sunday (thanks to gregwiley for the original report!)
  • Fixed an issue where future recurring events displayed as having passed when object caching is enabled (a big thanks to Ray for first bringing this up on the forums!)
  • Fixed the calculation used for determining all events in a month, which was causing the last day of multi-day events to be incorrectly left off (thanks to paracleteweb for first reporting this at the WordPress.org forums!)
  • Added code to make sure tribe_show_month() won't break any event views that come after it (thanks to our friend Big on the forums for the first report of this!)
  • Incorporated a number of enhancements to ease compatibility with Easy Digital Downloads (thanks for all your help, Pippin!)
  • Removed a PHP notice that arose when querying from events and other post types at the same time
  • Fixed an issue where inaccurate draft counts were appearing on the backend events list (thanks to Neil on the forums for the first report!)
  • Incorporated updated Icelandic translation by Baldvin Berndsen
Download this release

Release Info

Developer jazbek
Plugin Icon The Events Calendar
Version 3.2
Comparing to
See all releases

Code changes from version 3.1 to 3.2

Files changed (62) hide show
  1. admin-views/organizer-meta-box.php +3 -2
  2. admin-views/tribe-options-general.php +1 -1
  3. lang/tribe-events-calendar-is_IS.mo +0 -0
  4. lang/tribe-events-calendar-is_IS.po +24 -24
  5. lang/tribe-events-calendar.pot +590 -324
  6. lib/io/csv/admin-views/columns.php +78 -0
  7. lib/io/csv/admin-views/footer.php +5 -0
  8. lib/io/csv/admin-views/header.php +12 -0
  9. lib/io/csv/admin-views/import.php +71 -0
  10. lib/io/csv/admin-views/in-progress.php +26 -0
  11. lib/io/csv/admin-views/result.php +32 -0
  12. lib/io/csv/classes/TribeEventsImporter_AdminPage.php +229 -0
  13. lib/io/csv/classes/TribeEventsImporter_ColumnMapper.php +89 -0
  14. lib/io/csv/classes/TribeEventsImporter_FileImporter.php +183 -0
  15. lib/io/csv/classes/TribeEventsImporter_FileImporter_Events.php +165 -0
  16. lib/io/csv/classes/TribeEventsImporter_FileImporter_Organizers.php +46 -0
  17. lib/io/csv/classes/TribeEventsImporter_FileImporter_Venues.php +54 -0
  18. lib/io/csv/classes/TribeEventsImporter_FileReader.php +54 -0
  19. lib/io/csv/classes/TribeEventsImporter_FileUploader.php +63 -0
  20. lib/io/csv/classes/TribeEventsImporter_Plugin.php +30 -0
  21. lib/io/csv/ecp-events-importer.php +24 -0
  22. lib/template-classes/month.php +31 -14
  23. lib/template-classes/month.php.orig +0 -417
  24. lib/template-classes/single-event.php +3 -2
  25. lib/the-events-calendar.class.php +56 -35
  26. lib/tickets/tribe-tickets.php +3 -2
  27. lib/tribe-admin-events-list.class.php +30 -14
  28. lib/tribe-date-utils.class.php +31 -1
  29. lib/tribe-event-api.class.php +3 -3
  30. lib/tribe-event-exception.class.php +2 -2
  31. lib/tribe-event-query.class.php +83 -78
  32. lib/tribe-event-query.class.php.orig +0 -840
  33. lib/tribe-field.class.php +2 -2
  34. lib/tribe-settings-tab.class.php +2 -2
  35. lib/tribe-settings.class.php +16 -16
  36. lib/tribe-template-factory.class.php +45 -41
  37. lib/tribe-templates.class.php +183 -163
  38. lib/widget-list.class.php +2 -2
  39. public/advanced-functions/meta.php +60 -23
  40. public/template-tags/date.php +5 -3
  41. public/template-tags/general.php +61 -20
  42. public/template-tags/loop.php +9 -6
  43. public/template-tags/month.php +34 -8
  44. readme.txt +57 -23
  45. resources/events-admin.css +10 -1
  46. resources/events-admin.js +30 -0
  47. resources/events-admin.min.css +1 -1
  48. resources/events-admin.min.js +14 -14
  49. resources/tribe-events-ajax-calendar.js +7 -0
  50. resources/tribe-events-ajax-calendar.min.js +8 -8
  51. resources/tribe-events-ajax-list.js +3 -0
  52. resources/tribe-events-ajax-list.min.js +8 -8
  53. resources/tribe-events-bar.js +3 -2
  54. resources/tribe-events-bar.min.js +2 -2
  55. resources/tribe-events-full.css +32 -4
  56. resources/tribe-events-full.min.css +1 -1
  57. resources/tribe-events-skeleton.css +15 -3
  58. resources/tribe-events-skeleton.min.css +1 -1
  59. resources/tribe-events-theme.css +9 -4
  60. resources/tribe-events-theme.min.css +1 -1
  61. the-events-calendar.php +1 -1
  62. views/default-template.php +2 -2
admin-views/organizer-meta-box.php CHANGED
@@ -24,8 +24,9 @@ if ( !defined('ABSPATH') ) { die('-1'); }
24
  <td><input tabindex="<?php tribe_events_tab_index(); ?>" type='text' id='OrganizerWebsite' name='organizer[Website]' size='25' value='<?php echo isset($_OrganizerWebsite) ? esc_attr($_OrganizerWebsite) : ""; ?>' /></td>
25
  </tr>
26
  <tr class="organizer">
27
- <td><?php _e('Email:','tribe-events-calendar'); ?></td>
28
- <td><input tabindex="<?php tribe_events_tab_index(); ?>" type='text' id='OrganizerEmail' name='organizer[Email]' size='25' value='<?php echo isset($_OrganizerEmail) ? esc_attr($_OrganizerEmail) : ""; ?>' /></td>
 
29
  </tr>
30
 
31
  <script type="text/javascript">
24
  <td><input tabindex="<?php tribe_events_tab_index(); ?>" type='text' id='OrganizerWebsite' name='organizer[Website]' size='25' value='<?php echo isset($_OrganizerWebsite) ? esc_attr($_OrganizerWebsite) : ""; ?>' /></td>
25
  </tr>
26
  <tr class="organizer">
27
+ <td><?php _e('Email:','tribe-events-calendar'); ?>
28
+ <small><?php _e('You may want to consider <a href="http://wordpress.org/plugins/tags/obfuscate">obfuscating</a> any e-mail address published on your site to best avoid it getting harvested by spammers.', 'tribe-events-calendar'); ?></small></td>
29
+ <td class="organizer-email"><input tabindex="<?php tribe_events_tab_index(); ?>" type='text' id='OrganizerEmail' name='organizer[Email]' size='25' value='<?php echo isset($_OrganizerEmail) ? esc_attr($_OrganizerEmail) : ""; ?>' /></td>
30
  </tr>
31
 
32
  <script type="text/javascript">
admin-views/tribe-options-general.php CHANGED
@@ -135,7 +135,7 @@ $generalTab = array(
135
  ),
136
  'multiDayCutoffHelper' => array(
137
  'type' => 'html',
138
- 'html' => '<p class="tribe-field-indent tribe-field-description description">' . sprintf( __( 'Have events that run past midnight? Control when your day official ends to avoid awkwardly adding your event to the next day.', 'tribe-events-calendar' ) ) . '</p>',
139
  'conditional' => ( '' != get_option( 'permalink_structure' ) ),
140
  ),
141
  'defaultCurrencySymbol' => array(
135
  ),
136
  'multiDayCutoffHelper' => array(
137
  'type' => 'html',
138
+ 'html' => '<p class="tribe-field-indent tribe-field-description description">' . sprintf( __( "Have an event that runs past midnight? Select a time after that event's end to avoid showing the event on the next day's calendar.", 'tribe-events-calendar' ) ) . '</p>',
139
  'conditional' => ( '' != get_option( 'permalink_structure' ) ),
140
  ),
141
  'defaultCurrencySymbol' => array(
lang/tribe-events-calendar-is_IS.mo CHANGED
Binary file
lang/tribe-events-calendar-is_IS.po CHANGED
@@ -6,7 +6,7 @@ msgstr ""
6
  "Project-Id-Version: The Events Calendar\n"
7
  "Report-Msgid-Bugs-To: \n"
8
  "POT-Creation-Date: 2013-07-02 11:26-0800\n"
9
- "PO-Revision-Date: 2013-09-04 13:41-0000\n"
10
  "Last-Translator: Modern Tribe, Inc. <pro@tri.be>\n"
11
  "Language-Team: Modern Tribe, Inc. <pro@tri.be>\n"
12
  "Language: en_US\n"
@@ -36,7 +36,7 @@ msgstr "Síðast uppfært"
36
 
37
  #: ../admin-views/event-sidebar-options.php:11
38
  msgid "Hide From Event Listings"
39
- msgstr "Ekki sýn í viðburðar lista"
40
 
41
  #: ../admin-views/event-sidebar-options.php:12
42
  msgid "Sticky in Calendar View"
@@ -90,7 +90,7 @@ msgstr "Upplýsingar um staðsetningu viðburðar"
90
 
91
  #: ../admin-views/events-meta-box.php:93
92
  msgid "Event Organizer Details"
93
- msgstr "Upplýsingar um kipuleggjandi viðburðar"
94
 
95
  #: ../admin-views/events-meta-box.php:101
96
  msgid "Event Website"
@@ -175,7 +175,7 @@ msgstr ""
175
  msgid ""
176
  "Would you like to delete only this instance of the event, or all future "
177
  "events in this series?"
178
- msgstr "Viltu eyða þessum hluta viðburðarseríu, eða allri seríunni?"
179
 
180
  #: ../admin-views/recurrence-dialog.php:23
181
  msgid "All other future events in the series will not be deleted."
@@ -294,7 +294,7 @@ msgid ""
294
  "If you are familiar with HTML, you can add additional code before the event "
295
  "template. Some themes may require this to help with styling or layout."
296
  msgstr ""
297
- "Ef þú þekki til HTML, þá getur þú bætt viðbótar forritun á undan viðburðar "
298
  "sniðmáti. Þetta gæti þurft við sum þemu til að hjálpa til við útlit."
299
 
300
  #: ../admin-views/tribe-options-display.php:115
@@ -306,7 +306,7 @@ msgid ""
306
  "If you are familiar with HTML, you can add additional code after the event "
307
  "template. Some themes may require this to help with styling or layout."
308
  msgstr ""
309
- "Ef þú þekki til HTML, þá getur þú bætt viðbótar forritun á eftir viðburðar "
310
  "sniðmáti. Þetta gæti þurft við sum þemu til að hjálpa til við útlit."
311
 
312
  #: ../admin-views/tribe-options-general.php:14
@@ -331,7 +331,7 @@ msgid ""
331
  "meta, community events, ticket sales and more?"
332
  msgstr ""
333
  "Ertu að leyta að viðbótar virkni svo sem endurteknum viðburðum, sérsniðnu "
334
- "meta, samfélagslegum viðburðum, miðsölu ofl?"
335
 
336
  #: ../admin-views/tribe-options-general.php:28
337
  msgid "Check out the available add-ons"
@@ -439,7 +439,7 @@ msgstr "Núverandi viðburðar URL er: %s"
439
  #: ../admin-views/tribe-options-general.php:111
440
  #: ../public/template-tags/options.php:43
441
  msgid "Here is the iCal feed URL for your events:"
442
- msgstr "Hérna er iCal URL fyrir viðuburðinn:"
443
 
444
  #: ../admin-views/tribe-options-general.php:116
445
  msgid "Single event URL slug"
@@ -451,7 +451,7 @@ msgid ""
451
  "The above should ideally be plural, and this singular.<br />Your single "
452
  "event URL is: %s"
453
  msgstr ""
454
- "Ofangreint þarf helst að vera fleirtala, og þetta eintala. <br />Your single "
455
  "event URL is: %s"
456
 
457
  #: ../admin-views/tribe-options-general.php:128
@@ -476,7 +476,7 @@ msgid ""
476
  "future events, and changes made will not apply retroactively."
477
  msgstr ""
478
  "Stilling á sjálfgefnu gjaldmiðils merki fyrir kostnað viðburðar. Takið "
479
- "eftir, þetta hefur aðeins áhrif á komandi viðburði, og breytingar sem gerðar "
480
  "eru verða ekki afturvirkar."
481
 
482
  #: ../admin-views/tribe-options-general.php:149
@@ -490,7 +490,7 @@ msgstr "Virkja Google Maps"
490
  #: ../admin-views/tribe-options-general.php:154
491
  msgid "Check to enable maps for events and venues."
492
  msgstr ""
493
- "Haka við til að heimila virkni kort á viðburði og viðburðastaðsetningu."
494
 
495
  #: ../admin-views/tribe-options-general.php:161
496
  msgid "Google Maps default zoom level"
@@ -536,9 +536,9 @@ msgid ""
536
  "\" tab in the debug output."
537
  msgstr ""
538
  "Virkja þennan valkost til að skrá leiðréttar upplýsingar. Þetta skráist "
539
- "sjálfkrafa á PHP serverinn sem error log. Ef þú vilt sjá þessar "
540
- "upplýsingar í vafra þá mælum við með að setja þetta inn %s and look for the "
541
- "\"Tribe\" tab in the debug output."
542
 
543
  #: ../admin-views/tribe-options-general.php:185
544
  msgid "Debug Bar Plugin"
@@ -555,7 +555,7 @@ msgstr "Vinsamlega uppfærið!"
555
 
556
  #: ../admin-views/tribe-options-help.php:19
557
  msgid "You are up to date!"
558
- msgstr "Premium Add-OnsÞú ert með nýjustu útgáfuna!"
559
 
560
  #: ../admin-views/tribe-options-help.php:42
561
  msgid "The Events Calendar PRO"
@@ -842,7 +842,7 @@ msgid ""
842
  "This is where all of the global network settings for Modern Tribe's The "
843
  "Events Calendar can be modified."
844
  msgstr ""
845
- "Hérna eru mögulegt að breyta öllum net stillingar fyrir Modern Tribe The "
846
  "Events Calendar"
847
 
848
  #: ../admin-views/tribe-options-network.php:26
@@ -909,7 +909,7 @@ msgstr "Samantekt viðburðar"
909
 
910
  #: ../admin-views/tickets/attendees.php:22
911
  msgid "Event Details"
912
- msgstr "Viðuburðar upplýsingar"
913
 
914
  #: ../admin-views/tickets/attendees.php:24
915
  msgid "Start Date / Time:"
@@ -1072,7 +1072,7 @@ msgstr "liðinn"
1072
 
1073
  #: ../lib/the-events-calendar.class.php:495
1074
  msgid "venue"
1075
- msgstr "saðsetning"
1076
 
1077
  #: ../lib/the-events-calendar.class.php:509
1078
  #, php-format
@@ -1095,7 +1095,7 @@ msgid ""
1095
  "dependencies on The Events Calendar and will not function properly unless "
1096
  "paired with the right version. %sWant to pair an older version%s?"
1097
  msgstr ""
1098
- "Meðfylgjandi plugins eru unnrunnin: <b>%s</b>. Allar viðbætur innihalda "
1099
  "tengingu við The Events Calendar og munu ekki virka sem skyldi án þessa að "
1100
  "vera rétt. %sViltu para við eldri útgáfu%s?"
1101
 
@@ -1192,7 +1192,7 @@ msgstr "Engin lýsing hefur verið sett fyrir þennan viðburð."
1192
 
1193
  #: ../lib/the-events-calendar.class.php:1303
1194
  msgid "category"
1195
- msgstr "kategori"
1196
 
1197
  #: ../lib/the-events-calendar.class.php:1313
1198
  msgid "tag"
@@ -1358,7 +1358,7 @@ msgstr "Bæta við nýjum viðburðar flokk"
1358
 
1359
  #: ../lib/the-events-calendar.class.php:1388
1360
  msgid "New Event Category Name"
1361
- msgstr "Nafn á nýjum viðburðarflokki"
1362
 
1363
  #: ../lib/the-events-calendar.class.php:1404
1364
  #, php-format
@@ -1587,7 +1587,7 @@ msgstr "Nafnlaus skipuleggjandi"
1587
 
1588
  #: ../lib/the-events-calendar.class.php:3467
1589
  msgid "Event Options"
1590
- msgstr "Viðburðar valkostir"
1591
 
1592
  #: ../lib/the-events-calendar.class.php:3469
1593
  msgid "Venue Information"
@@ -1618,7 +1618,7 @@ msgid ""
1618
  "Looking for additional functionality including recurring events, ticket "
1619
  "sales, publicly submitted events, new views and more?"
1620
  msgstr ""
1621
- "Ertu að leyta að viðbótar virkni svo sem endurteknum viðburður, miðasölu, "
1622
  "innsendum viðburðum, ofl?"
1623
 
1624
  #: ../lib/the-events-calendar.class.php:3775
@@ -3299,7 +3299,7 @@ msgstr "Miðinn hefur vistast."
3299
 
3300
  #: ../lib/tickets/tribe-tickets.php:369
3301
  msgid "Your ticket has been deleted."
3302
- msgstr "Miðanumu hefur verið eytt."
3303
 
3304
  #: ../public/advanced-functions/meta.php:35
3305
  msgid "Start:"
6
  "Project-Id-Version: The Events Calendar\n"
7
  "Report-Msgid-Bugs-To: \n"
8
  "POT-Creation-Date: 2013-07-02 11:26-0800\n"
9
+ "PO-Revision-Date: 2013-10-02 20:26-0000\n"
10
  "Last-Translator: Modern Tribe, Inc. <pro@tri.be>\n"
11
  "Language-Team: Modern Tribe, Inc. <pro@tri.be>\n"
12
  "Language: en_US\n"
36
 
37
  #: ../admin-views/event-sidebar-options.php:11
38
  msgid "Hide From Event Listings"
39
+ msgstr "Ekki sýna í viðburðar lista"
40
 
41
  #: ../admin-views/event-sidebar-options.php:12
42
  msgid "Sticky in Calendar View"
90
 
91
  #: ../admin-views/events-meta-box.php:93
92
  msgid "Event Organizer Details"
93
+ msgstr "Upplýsingar um skipuleggjandi viðburðar"
94
 
95
  #: ../admin-views/events-meta-box.php:101
96
  msgid "Event Website"
175
  msgid ""
176
  "Would you like to delete only this instance of the event, or all future "
177
  "events in this series?"
178
+ msgstr "Viltu eyða þessum hluta viðburðarseríu eða allri seríunni?"
179
 
180
  #: ../admin-views/recurrence-dialog.php:23
181
  msgid "All other future events in the series will not be deleted."
294
  "If you are familiar with HTML, you can add additional code before the event "
295
  "template. Some themes may require this to help with styling or layout."
296
  msgstr ""
297
+ "Ef þú þekkir til HTML, þá getur þú bætt viðbótar forritun á undan viðburðar "
298
  "sniðmáti. Þetta gæti þurft við sum þemu til að hjálpa til við útlit."
299
 
300
  #: ../admin-views/tribe-options-display.php:115
306
  "If you are familiar with HTML, you can add additional code after the event "
307
  "template. Some themes may require this to help with styling or layout."
308
  msgstr ""
309
+ "Ef þú þekkir til HTML, þá getur þú bætt viðbótar forritun á eftir viðburðar "
310
  "sniðmáti. Þetta gæti þurft við sum þemu til að hjálpa til við útlit."
311
 
312
  #: ../admin-views/tribe-options-general.php:14
331
  "meta, community events, ticket sales and more?"
332
  msgstr ""
333
  "Ertu að leyta að viðbótar virkni svo sem endurteknum viðburðum, sérsniðnu "
334
+ "meta, samfélagslegum viðburðum, miðasölu ofl?"
335
 
336
  #: ../admin-views/tribe-options-general.php:28
337
  msgid "Check out the available add-ons"
439
  #: ../admin-views/tribe-options-general.php:111
440
  #: ../public/template-tags/options.php:43
441
  msgid "Here is the iCal feed URL for your events:"
442
+ msgstr "Hérna er iCal URL fyrir viðburðinn:"
443
 
444
  #: ../admin-views/tribe-options-general.php:116
445
  msgid "Single event URL slug"
451
  "The above should ideally be plural, and this singular.<br />Your single "
452
  "event URL is: %s"
453
  msgstr ""
454
+ "Ofangreint þarf helst að vera fleirtala og þetta eintala. <br />Your single "
455
  "event URL is: %s"
456
 
457
  #: ../admin-views/tribe-options-general.php:128
476
  "future events, and changes made will not apply retroactively."
477
  msgstr ""
478
  "Stilling á sjálfgefnu gjaldmiðils merki fyrir kostnað viðburðar. Takið "
479
+ "eftir, þetta hefur aðeins áhrif á komandi viðburði og breytingar sem gerðar "
480
  "eru verða ekki afturvirkar."
481
 
482
  #: ../admin-views/tribe-options-general.php:149
490
  #: ../admin-views/tribe-options-general.php:154
491
  msgid "Check to enable maps for events and venues."
492
  msgstr ""
493
+ "Haka við til að heimila virkni korta á viðburði og viðburðastaðsetningu."
494
 
495
  #: ../admin-views/tribe-options-general.php:161
496
  msgid "Google Maps default zoom level"
536
  "\" tab in the debug output."
537
  msgstr ""
538
  "Virkja þennan valkost til að skrá leiðréttar upplýsingar. Þetta skráist "
539
+ "sjálfkrafa á PHP serverinn sem error log. Ef þú vilt sjá þessar upplýsingar "
540
+ "í vafra þá mælum við með að setja þetta inn %s and look for the \"Tribe\" "
541
+ "tab in the debug output."
542
 
543
  #: ../admin-views/tribe-options-general.php:185
544
  msgid "Debug Bar Plugin"
555
 
556
  #: ../admin-views/tribe-options-help.php:19
557
  msgid "You are up to date!"
558
+ msgstr "Premium Add-Ons Þú ert með nýjustu útgáfuna!"
559
 
560
  #: ../admin-views/tribe-options-help.php:42
561
  msgid "The Events Calendar PRO"
842
  "This is where all of the global network settings for Modern Tribe's The "
843
  "Events Calendar can be modified."
844
  msgstr ""
845
+ "Hérna eru mögulegt að breyta öllum net stillingum fyrir Modern Tribe The "
846
  "Events Calendar"
847
 
848
  #: ../admin-views/tribe-options-network.php:26
909
 
910
  #: ../admin-views/tickets/attendees.php:22
911
  msgid "Event Details"
912
+ msgstr "Viðburðar upplýsingar"
913
 
914
  #: ../admin-views/tickets/attendees.php:24
915
  msgid "Start Date / Time:"
1072
 
1073
  #: ../lib/the-events-calendar.class.php:495
1074
  msgid "venue"
1075
+ msgstr "staðsetning"
1076
 
1077
  #: ../lib/the-events-calendar.class.php:509
1078
  #, php-format
1095
  "dependencies on The Events Calendar and will not function properly unless "
1096
  "paired with the right version. %sWant to pair an older version%s?"
1097
  msgstr ""
1098
+ "Meðfylgjandi plugins eru útrunnin: <b>%s</b>. Allar viðbætur innihalda "
1099
  "tengingu við The Events Calendar og munu ekki virka sem skyldi án þessa að "
1100
  "vera rétt. %sViltu para við eldri útgáfu%s?"
1101
 
1192
 
1193
  #: ../lib/the-events-calendar.class.php:1303
1194
  msgid "category"
1195
+ msgstr "flokkur"
1196
 
1197
  #: ../lib/the-events-calendar.class.php:1313
1198
  msgid "tag"
1358
 
1359
  #: ../lib/the-events-calendar.class.php:1388
1360
  msgid "New Event Category Name"
1361
+ msgstr "Nafn á nýjum viðburðarflokk"
1362
 
1363
  #: ../lib/the-events-calendar.class.php:1404
1364
  #, php-format
1587
 
1588
  #: ../lib/the-events-calendar.class.php:3467
1589
  msgid "Event Options"
1590
+ msgstr "Valkostir viðburða"
1591
 
1592
  #: ../lib/the-events-calendar.class.php:3469
1593
  msgid "Venue Information"
1618
  "Looking for additional functionality including recurring events, ticket "
1619
  "sales, publicly submitted events, new views and more?"
1620
  msgstr ""
1621
+ "Ertu að leyta að viðbótar virkni svo sem endurteknum viðburðum, miðasölu, "
1622
  "innsendum viðburðum, ofl?"
1623
 
1624
  #: ../lib/the-events-calendar.class.php:3775
3299
 
3300
  #: ../lib/tickets/tribe-tickets.php:369
3301
  msgid "Your ticket has been deleted."
3302
+ msgstr "Miða hefur verið eytt."
3303
 
3304
  #: ../public/advanced-functions/meta.php:35
3305
  msgid "Start:"
lang/tribe-events-calendar.pot CHANGED
@@ -1,25 +1,17 @@
1
- # POT for The Events Calendar 2.0 by Modern Tribe, Inc..
2
- # Copyright (C) Modern Tribe, Inc.
3
- # This file is distributed under the same license as the The Events Calendar package.
4
- msgid ""
5
- msgstr ""
6
- "Project-Id-Version: The Events Calendar\n"
7
- "Report-Msgid-Bugs-To: \n"
8
- "POT-Creation-Date: 2013-07-02 11:29-0800\n"
9
- "PO-Revision-Date: 2013-07-02 11:29-0800\n"
10
- "Last-Translator: Paul Hughes <paul@paulalexanderhughes.com>\n"
11
- "Language-Team: Modern Tribe, Inc. <pro@tri.be>\n"
12
- "Language: en_US\n"
13
  "MIME-Version: 1.0\n"
14
  "Content-Type: text/plain; charset=UTF-8\n"
15
  "Content-Transfer-Encoding: 8bit\n"
16
- "Plural-Forms: nplurals=2; plural=n != 1;\n"
 
 
17
  "X-Poedit-SourceCharset: UTF-8\n"
18
- "X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_n:1,2;__ngettext_noop:1,2;"
19
- "_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2\n"
20
- "X-Poedit-Basepath: ./\n"
21
- "X-Textdomain-Support: yes\n"
22
- "X-Generator: Poedit 1.5.5\n"
23
  "X-Poedit-SearchPath-0: ..\n"
24
 
25
  #: ../admin-views/app-shop.php:4
@@ -98,6 +90,7 @@ msgid "URL:"
98
  msgstr ""
99
 
100
  #: ../admin-views/events-meta-box.php:115
 
101
  msgid "Event Cost"
102
  msgstr ""
103
 
@@ -106,7 +99,7 @@ msgid "Currency Symbol:"
106
  msgstr ""
107
 
108
  #: ../admin-views/events-meta-box.php:122
109
- #: ../public/advanced-functions/meta.php:270
110
  msgid "Cost:"
111
  msgstr ""
112
 
@@ -121,25 +114,32 @@ msgstr ""
121
  #: ../admin-views/organizer-meta-box.php:19
122
  #: ../admin-views/venue-meta-box.php:93
123
  #: ../admin-views/tickets/attendees.php:39
124
- #: ../public/advanced-functions/meta.php:357
125
- #: ../public/advanced-functions/meta.php:419
126
  msgid "Phone:"
127
  msgstr ""
128
 
129
  #: ../admin-views/organizer-meta-box.php:23
130
  #: ../admin-views/venue-meta-box.php:97
131
  #: ../admin-views/tickets/attendees.php:45
132
- #: ../public/advanced-functions/meta.php:308
133
- #: ../public/advanced-functions/meta.php:383
134
- #: ../public/advanced-functions/meta.php:445
135
  msgid "Website:"
136
  msgstr ""
137
 
138
  #: ../admin-views/organizer-meta-box.php:27
139
- #: ../public/advanced-functions/meta.php:432
140
  msgid "Email:"
141
  msgstr ""
142
 
 
 
 
 
 
 
 
143
  #: ../admin-views/recurrence-dialog.php:13
144
  msgid ""
145
  "Would you like to change only this instance of the event, or all future "
@@ -269,24 +269,32 @@ msgid "Check this to use the classic header."
269
  msgstr ""
270
 
271
  #: ../admin-views/tribe-options-display.php:105
 
 
 
 
 
 
 
 
272
  msgid "Advanced Template Settings"
273
  msgstr ""
274
 
275
- #: ../admin-views/tribe-options-display.php:109
276
  msgid "Add HTML before event content"
277
  msgstr ""
278
 
279
- #: ../admin-views/tribe-options-display.php:110
280
  msgid ""
281
  "If you are familiar with HTML, you can add additional code before the event "
282
  "template. Some themes may require this to help with styling or layout."
283
  msgstr ""
284
 
285
- #: ../admin-views/tribe-options-display.php:115
286
  msgid "Add HTML after event content"
287
  msgstr ""
288
 
289
- #: ../admin-views/tribe-options-display.php:116
290
  msgid ""
291
  "If you are familiar with HTML, you can add additional code after the event "
292
  "template. Some themes may require this to help with styling or layout."
@@ -356,37 +364,44 @@ msgid "Number of events to show per page"
356
  msgstr ""
357
 
358
  #: ../admin-views/tribe-options-general.php:72
359
- msgid "Use Javascript to control page load"
 
 
 
 
 
 
360
  msgstr ""
361
 
362
  #: ../admin-views/tribe-options-general.php:73
363
- msgid "Enable ajax to live refresh content."
 
364
  msgstr ""
365
 
366
- #: ../admin-views/tribe-options-general.php:79
367
  msgid "Show comments"
368
  msgstr ""
369
 
370
- #: ../admin-views/tribe-options-general.php:80
371
  msgid "Enable comments on event pages."
372
  msgstr ""
373
 
374
- #: ../admin-views/tribe-options-general.php:86
375
  msgid "Include events in main blog loop"
376
  msgstr ""
377
 
378
- #: ../admin-views/tribe-options-general.php:87
379
  msgid ""
380
  "Show events with the site's other posts. When this box is checked, events "
381
  "will also continue to appear on the default events page."
382
  msgstr ""
383
 
384
- #: ../admin-views/tribe-options-general.php:93
385
- #: ../admin-views/tribe-options-general.php:99
386
  msgid "Events URL slug"
387
  msgstr ""
388
 
389
- #: ../admin-views/tribe-options-general.php:94
390
  #, php-format
391
  msgid ""
392
  "You cannot edit the slug for your events page as you do not have pretty "
@@ -395,97 +410,97 @@ msgid ""
395
  "\">enable pretty permalinks</a>."
396
  msgstr ""
397
 
398
- #: ../admin-views/tribe-options-general.php:106
399
  #: ../public/template-tags/options.php:20
400
  msgid "The slug used for building the events URL."
401
  msgstr ""
402
 
403
- #: ../admin-views/tribe-options-general.php:106
404
  #, php-format
405
  msgid "Your current events URL is: %s"
406
  msgstr ""
407
 
408
- #: ../admin-views/tribe-options-general.php:111
409
  #: ../public/template-tags/options.php:43
410
  msgid "Here is the iCal feed URL for your events:"
411
  msgstr ""
412
 
413
- #: ../admin-views/tribe-options-general.php:116
414
  msgid "Single event URL slug"
415
  msgstr ""
416
 
417
- #: ../admin-views/tribe-options-general.php:123
418
  #, php-format
419
  msgid ""
420
  "The above should ideally be plural, and this singular.<br />Your single "
421
  "event URL is: %s"
422
  msgstr ""
423
 
424
- #: ../admin-views/tribe-options-general.php:128
425
  msgid "End of day cutoff"
426
  msgstr ""
427
 
428
- #: ../admin-views/tribe-options-general.php:136
429
  msgid ""
430
- "Have events that run past midnight? Control when your day official ends to "
431
- "avoid awkwardly adding your event to the next day."
432
  msgstr ""
433
 
434
- #: ../admin-views/tribe-options-general.php:141
435
  msgid "Default currency symbol"
436
  msgstr ""
437
 
438
- #: ../admin-views/tribe-options-general.php:142
439
  msgid ""
440
  "Set the default currency symbol for event costs. Note that this only impacts "
441
  "future events, and changes made will not apply retroactively."
442
  msgstr ""
443
 
444
- #: ../admin-views/tribe-options-general.php:149
445
  msgid "Map Settings"
446
  msgstr ""
447
 
448
- #: ../admin-views/tribe-options-general.php:153
449
  msgid "Enable Google Maps"
450
  msgstr ""
451
 
452
- #: ../admin-views/tribe-options-general.php:154
453
  msgid "Check to enable maps for events and venues."
454
  msgstr ""
455
 
456
- #: ../admin-views/tribe-options-general.php:161
457
  msgid "Google Maps default zoom level"
458
  msgstr ""
459
 
460
- #: ../admin-views/tribe-options-general.php:162
461
  msgid "0 = zoomed out; 21 = zoomed in."
462
  msgstr ""
463
 
464
- #: ../admin-views/tribe-options-general.php:170
465
  msgid "Miscellaneous Settings"
466
  msgstr ""
467
 
468
- #: ../admin-views/tribe-options-general.php:174
469
  msgid "Duplicate Venues &amp; Organizers"
470
  msgstr ""
471
 
472
- #: ../admin-views/tribe-options-general.php:174
473
  #: ../lib/tribe-amalgamator.php:252
474
  msgid "Merge Duplicates"
475
  msgstr ""
476
 
477
- #: ../admin-views/tribe-options-general.php:174
478
  msgid ""
479
  "You might find duplicate venues and organizers when updating The Events "
480
  "Calendar from a pre-3.0 version. Click this button to automatically merge "
481
  "identical venues and organizers."
482
  msgstr ""
483
 
484
- #: ../admin-views/tribe-options-general.php:179
485
  msgid "Debug mode"
486
  msgstr ""
487
 
488
- #: ../admin-views/tribe-options-general.php:185
489
  #, php-format
490
  msgid ""
491
  "Enable this option to log debug information. By default this will log to "
@@ -494,15 +509,10 @@ msgid ""
494
  "\" tab in the debug output."
495
  msgstr ""
496
 
497
- #: ../admin-views/tribe-options-general.php:185
498
  msgid "Debug Bar Plugin"
499
  msgstr ""
500
 
501
- #: ../admin-views/tribe-options-help.php:18
502
- msgctxt "not available"
503
- msgid "n/a"
504
- msgstr ""
505
-
506
  #: ../admin-views/tribe-options-help.php:19
507
  msgid "You need to upgrade!"
508
  msgstr ""
@@ -544,9 +554,9 @@ msgid "FAQ"
544
  msgstr ""
545
 
546
  #: ../admin-views/tribe-options-help.php:79
547
- #: ../lib/the-events-calendar.class.php:743
548
- #: ../lib/the-events-calendar.class.php:3889
549
- #: ../lib/the-events-calendar.class.php:3980
550
  msgid "Help"
551
  msgstr ""
552
 
@@ -725,60 +735,53 @@ msgstr ""
725
  msgid "Not getting help?"
726
  msgstr ""
727
 
728
- #: ../admin-views/tribe-options-help.php:169
729
- #: ../lib/the-events-calendar.class.php:486
730
  #: ../lib/tribe-settings.class.php:135
731
  msgid "The Events Calendar"
732
  msgstr ""
733
 
734
- #: ../admin-views/tribe-options-help.php:173
735
  msgid "Latest Version:"
736
  msgstr ""
737
 
738
- #: ../admin-views/tribe-options-help.php:174
739
  msgid "Author:"
740
  msgstr ""
741
 
742
- #: ../admin-views/tribe-options-help.php:174
743
  msgid "Modern Tribe Inc"
744
  msgstr ""
745
 
746
- #: ../admin-views/tribe-options-help.php:175
747
  msgid "Requires:"
748
  msgstr ""
749
 
750
- #: ../admin-views/tribe-options-help.php:175
751
  msgid "WordPress "
752
  msgstr ""
753
 
754
- #: ../admin-views/tribe-options-help.php:176
755
  msgid "Wordpress.org Plugin Page"
756
  msgstr ""
757
 
758
- #: ../admin-views/tribe-options-help.php:181
759
  msgid "Average Rating"
760
  msgstr ""
761
 
762
- #: ../admin-views/tribe-options-help.php:185
763
- #, php-format
764
- msgid "Based on %d rating"
765
- msgid_plural "Based on %d ratings"
766
- msgstr[0] ""
767
- msgstr[1] ""
768
-
769
- #: ../admin-views/tribe-options-help.php:186
770
  msgid "Give us 5 stars!"
771
  msgstr ""
772
 
773
- #: ../admin-views/tribe-options-help.php:189
774
  msgid "Premium Add-Ons"
775
  msgstr ""
776
 
777
- #: ../admin-views/tribe-options-help.php:195
778
  msgid "(Coming Soon!)"
779
  msgstr ""
780
 
781
- #: ../admin-views/tribe-options-help.php:202
782
  msgid "News and Tutorials"
783
  msgstr ""
784
 
@@ -801,7 +804,7 @@ msgid "Venue Name:"
801
  msgstr ""
802
 
803
  #: ../admin-views/venue-meta-box.php:27
804
- #: ../public/advanced-functions/meta.php:371
805
  msgid "Address:"
806
  msgstr ""
807
 
@@ -998,35 +1001,35 @@ msgid ""
998
  "tickets will be available from now until the event ends."
999
  msgstr ""
1000
 
1001
- #: ../lib/the-events-calendar.class.php:491
1002
  msgid "month"
1003
  msgstr ""
1004
 
1005
- #: ../lib/the-events-calendar.class.php:492
1006
  msgid "upcoming"
1007
  msgstr ""
1008
 
1009
- #: ../lib/the-events-calendar.class.php:493
1010
  msgid "past"
1011
  msgstr ""
1012
 
1013
- #: ../lib/the-events-calendar.class.php:495
1014
  msgid "venue"
1015
  msgstr ""
1016
 
1017
- #: ../lib/the-events-calendar.class.php:509
1018
  #, php-format
1019
  msgid "Initializing Tribe Events on %s"
1020
  msgstr ""
1021
 
1022
- #: ../lib/the-events-calendar.class.php:622
1023
  #, php-format
1024
  msgid ""
1025
  "Your version of The Events Calendar is not up-to-date with one of your The "
1026
  "Events Calendar add-ons. Please %supdate now.%s"
1027
  msgstr ""
1028
 
1029
- #: ../lib/the-events-calendar.class.php:639
1030
  #, php-format
1031
  msgid ""
1032
  "The following plugins are out of date: <b>%s</b>. All add-ons contain "
@@ -1034,13 +1037,13 @@ msgid ""
1034
  "paired with the right version. %sWant to pair an older version%s?"
1035
  msgstr ""
1036
 
1037
- #: ../lib/the-events-calendar.class.php:703
1038
- #: ../lib/the-events-calendar.class.php:738
1039
- #: ../lib/the-events-calendar.class.php:740
1040
  msgid "Licenses"
1041
  msgstr ""
1042
 
1043
- #: ../lib/the-events-calendar.class.php:707
1044
  #, php-format
1045
  msgid ""
1046
  "<p>The license key you received when completing your purchase from %s will "
@@ -1058,531 +1061,546 @@ msgid ""
1058
  "and click \"Check Again\".</p>"
1059
  msgstr ""
1060
 
1061
- #: ../lib/the-events-calendar.class.php:730
1062
  msgid "General"
1063
  msgstr ""
1064
 
1065
- #: ../lib/the-events-calendar.class.php:731
1066
  msgid "Display"
1067
  msgstr ""
1068
 
1069
- #: ../lib/the-events-calendar.class.php:782
1070
  #, php-format
1071
  msgid ""
1072
  "Sorry, The Events Calendar requires WordPress %s or higher. Please upgrade "
1073
  "your WordPress install."
1074
  msgstr ""
1075
 
1076
- #: ../lib/the-events-calendar.class.php:785
1077
  #, php-format
1078
  msgid ""
1079
  "Sorry, The Events Calendar requires PHP %s or higher. Talk to your Web host "
1080
  "about moving you to a newer version of PHP."
1081
  msgstr ""
1082
 
1083
- #: ../lib/the-events-calendar.class.php:1000 ../lib/widget-list.class.php:151
1084
- #: ../public/template-tags/loop.php:137
1085
  msgid "Upcoming Events"
1086
  msgstr ""
1087
 
1088
- #: ../lib/the-events-calendar.class.php:1003
1089
- #: ../public/template-tags/loop.php:165
1090
  msgid "Past Events"
1091
  msgstr ""
1092
 
1093
- #: ../lib/the-events-calendar.class.php:1008
1094
- #: ../lib/the-events-calendar.class.php:1015
 
1095
  #, php-format
1096
  msgid "Events for %s"
1097
  msgstr ""
1098
 
1099
- #: ../lib/the-events-calendar.class.php:1010
1100
  msgid "Events this month"
1101
  msgstr ""
1102
 
1103
- #: ../lib/the-events-calendar.class.php:1022
1104
  #, php-format
1105
  msgid "Events at %s"
1106
  msgstr ""
1107
 
1108
- #: ../lib/the-events-calendar.class.php:1041
1109
  msgid "No description has been entered for this event."
1110
  msgstr ""
1111
 
1112
- #: ../lib/the-events-calendar.class.php:1303
1113
  msgid "category"
1114
  msgstr ""
1115
 
1116
- #: ../lib/the-events-calendar.class.php:1313
1117
  msgid "tag"
1118
  msgstr ""
1119
 
1120
- #: ../lib/the-events-calendar.class.php:1340
1121
- #: ../lib/the-events-calendar.class.php:3820
1122
- #: ../lib/the-events-calendar.class.php:3880
 
1123
  msgid "Events"
1124
  msgstr ""
1125
 
1126
- #: ../lib/the-events-calendar.class.php:1341
1127
  msgid "Event"
1128
  msgstr ""
1129
 
1130
- #: ../lib/the-events-calendar.class.php:1342
1131
- #: ../lib/the-events-calendar.class.php:1355
1132
- #: ../lib/the-events-calendar.class.php:1368
1133
  msgid "Add New"
1134
  msgstr ""
1135
 
1136
- #: ../lib/the-events-calendar.class.php:1343
1137
  msgid "Add New Event"
1138
  msgstr ""
1139
 
1140
- #: ../lib/the-events-calendar.class.php:1344
1141
  msgid "Edit Event"
1142
  msgstr ""
1143
 
1144
- #: ../lib/the-events-calendar.class.php:1345
1145
  msgid "New Event"
1146
  msgstr ""
1147
 
1148
- #: ../lib/the-events-calendar.class.php:1346
1149
  msgid "View Event"
1150
  msgstr ""
1151
 
1152
- #: ../lib/the-events-calendar.class.php:1347
1153
  msgid "Search Events"
1154
  msgstr ""
1155
 
1156
- #: ../lib/the-events-calendar.class.php:1348
1157
  msgid "No events found"
1158
  msgstr ""
1159
 
1160
- #: ../lib/the-events-calendar.class.php:1349
1161
  msgid "No events found in Trash"
1162
  msgstr ""
1163
 
1164
- #: ../lib/the-events-calendar.class.php:1353
1165
- #: ../lib/the-events-calendar.class.php:1465
 
1166
  msgid "Venues"
1167
  msgstr ""
1168
 
1169
- #: ../lib/the-events-calendar.class.php:1354
1170
- #: ../public/advanced-functions/meta.php:331 ../views/tickets/email.php:343
1171
  msgid "Venue"
1172
  msgstr ""
1173
 
1174
- #: ../lib/the-events-calendar.class.php:1356
1175
  msgid "Add New Venue"
1176
  msgstr ""
1177
 
1178
- #: ../lib/the-events-calendar.class.php:1357
1179
  msgid "Edit Venue"
1180
  msgstr ""
1181
 
1182
- #: ../lib/the-events-calendar.class.php:1358
1183
  msgid "New Venue"
1184
  msgstr ""
1185
 
1186
- #: ../lib/the-events-calendar.class.php:1359
1187
  msgid "View Venue"
1188
  msgstr ""
1189
 
1190
- #: ../lib/the-events-calendar.class.php:1360
1191
  msgid "Search Venues"
1192
  msgstr ""
1193
 
1194
- #: ../lib/the-events-calendar.class.php:1361
1195
  msgid "No venue found"
1196
  msgstr ""
1197
 
1198
- #: ../lib/the-events-calendar.class.php:1362
1199
  msgid "No venues found in Trash"
1200
  msgstr ""
1201
 
1202
- #: ../lib/the-events-calendar.class.php:1366
1203
- #: ../lib/the-events-calendar.class.php:1466
 
1204
  msgid "Organizers"
1205
  msgstr ""
1206
 
1207
- #: ../lib/the-events-calendar.class.php:1367
1208
- #: ../public/advanced-functions/meta.php:393 ../views/tickets/email.php:362
1209
  msgid "Organizer"
1210
  msgstr ""
1211
 
1212
- #: ../lib/the-events-calendar.class.php:1369
1213
  msgid "Add New Organizer"
1214
  msgstr ""
1215
 
1216
- #: ../lib/the-events-calendar.class.php:1370
1217
  msgid "Edit Organizer"
1218
  msgstr ""
1219
 
1220
- #: ../lib/the-events-calendar.class.php:1371
1221
  msgid "New Organizer"
1222
  msgstr ""
1223
 
1224
- #: ../lib/the-events-calendar.class.php:1372
1225
  msgid "View Organizer"
1226
  msgstr ""
1227
 
1228
- #: ../lib/the-events-calendar.class.php:1373
1229
  msgid "Search Organizers"
1230
  msgstr ""
1231
 
1232
- #: ../lib/the-events-calendar.class.php:1374
1233
  msgid "No organizer found"
1234
  msgstr ""
1235
 
1236
- #: ../lib/the-events-calendar.class.php:1375
1237
  msgid "No organizers found in Trash"
1238
  msgstr ""
1239
 
1240
- #: ../lib/the-events-calendar.class.php:1379
1241
- #: ../lib/tribe-admin-events-list.class.php:217
1242
  msgid "Event Categories"
1243
  msgstr ""
1244
 
1245
- #: ../lib/the-events-calendar.class.php:1380
1246
- #: ../public/template-tags/general.php:276
1247
  msgid "Event Category"
1248
  msgstr ""
1249
 
1250
- #: ../lib/the-events-calendar.class.php:1381
1251
  msgid "Search Event Categories"
1252
  msgstr ""
1253
 
1254
- #: ../lib/the-events-calendar.class.php:1382
1255
  msgid "All Event Categories"
1256
  msgstr ""
1257
 
1258
- #: ../lib/the-events-calendar.class.php:1383
1259
  msgid "Parent Event Category"
1260
  msgstr ""
1261
 
1262
- #: ../lib/the-events-calendar.class.php:1384
1263
  msgid "Parent Event Category:"
1264
  msgstr ""
1265
 
1266
- #: ../lib/the-events-calendar.class.php:1385
1267
  msgid "Edit Event Category"
1268
  msgstr ""
1269
 
1270
- #: ../lib/the-events-calendar.class.php:1386
1271
  msgid "Update Event Category"
1272
  msgstr ""
1273
 
1274
- #: ../lib/the-events-calendar.class.php:1387
1275
  msgid "Add New Event Category"
1276
  msgstr ""
1277
 
1278
- #: ../lib/the-events-calendar.class.php:1388
1279
  msgid "New Event Category Name"
1280
  msgstr ""
1281
 
1282
- #: ../lib/the-events-calendar.class.php:1404
1283
  #, php-format
1284
  msgid "Event updated. <a href=\"%s\">View event</a>"
1285
  msgstr ""
1286
 
1287
- #: ../lib/the-events-calendar.class.php:1405
1288
- #: ../lib/the-events-calendar.class.php:1422
1289
- #: ../lib/the-events-calendar.class.php:1439
1290
  msgid "Custom field updated."
1291
  msgstr ""
1292
 
1293
- #: ../lib/the-events-calendar.class.php:1406
1294
- #: ../lib/the-events-calendar.class.php:1423
1295
- #: ../lib/the-events-calendar.class.php:1440
1296
  msgid "Custom field deleted."
1297
  msgstr ""
1298
 
1299
- #: ../lib/the-events-calendar.class.php:1407
1300
  msgid "Event updated."
1301
  msgstr ""
1302
 
1303
- #: ../lib/the-events-calendar.class.php:1409
1304
  #, php-format
1305
  msgid "Event restored to revision from %s"
1306
  msgstr ""
1307
 
1308
- #: ../lib/the-events-calendar.class.php:1410
1309
  #, php-format
1310
  msgid "Event published. <a href=\"%s\">View event</a>"
1311
  msgstr ""
1312
 
1313
- #: ../lib/the-events-calendar.class.php:1411
1314
  msgid "Event saved."
1315
  msgstr ""
1316
 
1317
- #: ../lib/the-events-calendar.class.php:1412
1318
  #, php-format
1319
  msgid "Event submitted. <a target=\"_blank\" href=\"%s\">Preview event</a>"
1320
  msgstr ""
1321
 
1322
- #: ../lib/the-events-calendar.class.php:1413
1323
  #, php-format
1324
  msgid ""
1325
  "Event scheduled for: <strong>%1$s</strong>. <a target=\"_blank\" href=\"%2$s"
1326
  "\">Preview event</a>"
1327
  msgstr ""
1328
 
1329
- #: ../lib/the-events-calendar.class.php:1415
1330
- #: ../lib/the-events-calendar.class.php:1432
1331
- #: ../lib/the-events-calendar.class.php:1449
1332
  msgid "M j, Y @ G:i"
1333
  msgstr ""
1334
 
1335
- #: ../lib/the-events-calendar.class.php:1416
1336
  #, php-format
1337
  msgid "Event draft updated. <a target=\"_blank\" href=\"%s\">Preview event</a>"
1338
  msgstr ""
1339
 
1340
- #: ../lib/the-events-calendar.class.php:1421
1341
  #, php-format
1342
  msgid "Venue updated. <a href=\"%s\">View venue</a>"
1343
  msgstr ""
1344
 
1345
- #: ../lib/the-events-calendar.class.php:1424
1346
  msgid "Venue updated."
1347
  msgstr ""
1348
 
1349
- #: ../lib/the-events-calendar.class.php:1426
1350
  #, php-format
1351
  msgid "Venue restored to revision from %s"
1352
  msgstr ""
1353
 
1354
- #: ../lib/the-events-calendar.class.php:1427
1355
  #, php-format
1356
  msgid "Venue published. <a href=\"%s\">View venue</a>"
1357
  msgstr ""
1358
 
1359
- #: ../lib/the-events-calendar.class.php:1428
1360
  msgid "Venue saved."
1361
  msgstr ""
1362
 
1363
- #: ../lib/the-events-calendar.class.php:1429
1364
  #, php-format
1365
  msgid "Venue submitted. <a target=\"_blank\" href=\"%s\">Preview venue</a>"
1366
  msgstr ""
1367
 
1368
- #: ../lib/the-events-calendar.class.php:1430
1369
  #, php-format
1370
  msgid ""
1371
  "Venue scheduled for: <strong>%1$s</strong>. <a target=\"_blank\" href=\"%2$s"
1372
  "\">Preview venue</a>"
1373
  msgstr ""
1374
 
1375
- #: ../lib/the-events-calendar.class.php:1433
1376
  #, php-format
1377
  msgid "Venue draft updated. <a target=\"_blank\" href=\"%s\">Preview venue</a>"
1378
  msgstr ""
1379
 
1380
- #: ../lib/the-events-calendar.class.php:1438
1381
  #, php-format
1382
  msgid "Organizer updated. <a href=\"%s\">View organizer</a>"
1383
  msgstr ""
1384
 
1385
- #: ../lib/the-events-calendar.class.php:1441
1386
  msgid "Organizer updated."
1387
  msgstr ""
1388
 
1389
- #: ../lib/the-events-calendar.class.php:1443
1390
  #, php-format
1391
  msgid "Organizer restored to revision from %s"
1392
  msgstr ""
1393
 
1394
- #: ../lib/the-events-calendar.class.php:1444
1395
  #, php-format
1396
  msgid "Organizer published. <a href=\"%s\">View organizer</a>"
1397
  msgstr ""
1398
 
1399
- #: ../lib/the-events-calendar.class.php:1445
1400
  msgid "Organizer saved."
1401
  msgstr ""
1402
 
1403
- #: ../lib/the-events-calendar.class.php:1446
1404
  #, php-format
1405
  msgid ""
1406
  "Organizer submitted. <a target=\"_blank\" href=\"%s\">Preview organizer</a>"
1407
  msgstr ""
1408
 
1409
- #: ../lib/the-events-calendar.class.php:1447
1410
  #, php-format
1411
  msgid ""
1412
  "Organizer scheduled for: <strong>%1$s</strong>. <a target=\"_blank\" href="
1413
  "\"%2$s\">Preview organizer</a>"
1414
  msgstr ""
1415
 
1416
- #: ../lib/the-events-calendar.class.php:1450
1417
  #, php-format
1418
  msgid ""
1419
  "Organizer draft updated. <a target=\"_blank\" href=\"%s\">Preview organizer</"
1420
  "a>"
1421
  msgstr ""
1422
 
1423
- #: ../lib/the-events-calendar.class.php:1491
1424
  msgid "Use Saved Venue:"
1425
  msgstr ""
1426
 
1427
- #: ../lib/the-events-calendar.class.php:1520
1428
  msgid "Use Saved Organizer:"
1429
  msgstr ""
1430
 
1431
- #: ../lib/the-events-calendar.class.php:1556
1432
  msgid "Use New Venue"
1433
  msgstr ""
1434
 
1435
- #: ../lib/the-events-calendar.class.php:1558
1436
  msgid "My Venues"
1437
  msgstr ""
1438
 
1439
- #: ../lib/the-events-calendar.class.php:1563
1440
  msgid "Available Venues"
1441
  msgstr ""
1442
 
1443
- #: ../lib/the-events-calendar.class.php:1574
1444
  msgid "No saved venue exists."
1445
  msgstr ""
1446
 
1447
- #: ../lib/the-events-calendar.class.php:1608
1448
  msgid "Use New Organizer"
1449
  msgstr ""
1450
 
1451
- #: ../lib/the-events-calendar.class.php:1610
1452
  msgid "My Organizers"
1453
  msgstr ""
1454
 
1455
- #: ../lib/the-events-calendar.class.php:1615
1456
  msgid "Available Organizers"
1457
  msgstr ""
1458
 
1459
- #: ../lib/the-events-calendar.class.php:1626
1460
  msgid "No saved organizer exists."
1461
  msgstr ""
1462
 
1463
- #: ../lib/the-events-calendar.class.php:1753
1464
  msgid "Next"
1465
  msgstr ""
1466
 
1467
- #: ../lib/the-events-calendar.class.php:1754
1468
  msgid "Prev"
1469
  msgstr ""
1470
 
1471
- #: ../lib/the-events-calendar.class.php:1755
1472
  msgid "Today"
1473
  msgstr ""
1474
 
1475
- #: ../lib/the-events-calendar.class.php:1756
1476
  msgid "Done"
1477
  msgstr ""
1478
 
1479
- #: ../lib/the-events-calendar.class.php:1965
1480
  msgid "Network"
1481
  msgstr ""
1482
 
1483
- #: ../lib/the-events-calendar.class.php:2902
1484
  msgid "Unnamed Venue"
1485
  msgstr ""
1486
 
1487
- #: ../lib/the-events-calendar.class.php:2992
1488
  msgid "Unnamed Organizer"
1489
  msgstr ""
1490
 
1491
- #: ../lib/the-events-calendar.class.php:3467
 
 
 
 
 
1492
  msgid "Event Options"
1493
  msgstr ""
1494
 
1495
- #: ../lib/the-events-calendar.class.php:3469
1496
  msgid "Venue Information"
1497
  msgstr ""
1498
 
1499
- #: ../lib/the-events-calendar.class.php:3474
1500
  msgid "Organizer Information"
1501
  msgstr ""
1502
 
1503
- #: ../lib/the-events-calendar.class.php:3669
1504
  msgid "Support"
1505
  msgstr ""
1506
 
1507
- #: ../lib/the-events-calendar.class.php:3672
1508
  msgid "View All Add-Ons"
1509
  msgstr ""
1510
 
1511
- #: ../lib/the-events-calendar.class.php:3689
1512
  msgid "News from Modern Tribe"
1513
  msgstr ""
1514
 
1515
- #: ../lib/the-events-calendar.class.php:3770
1516
  msgid "Additional Functionality"
1517
  msgstr ""
1518
 
1519
- #: ../lib/the-events-calendar.class.php:3775
1520
  msgid ""
1521
  "Looking for additional functionality including recurring events, ticket "
1522
  "sales, publicly submitted events, new views and more?"
1523
  msgstr ""
1524
 
1525
- #: ../lib/the-events-calendar.class.php:3775
1526
  #, php-format
1527
  msgid "Check out the <a href=\"%s\">available add-ons</a>."
1528
  msgstr ""
1529
 
1530
- #: ../lib/the-events-calendar.class.php:3846
1531
- #: ../lib/the-events-calendar.class.php:3937
1532
  msgid "View Calendar"
1533
  msgstr ""
1534
 
1535
- #: ../lib/the-events-calendar.class.php:3854
1536
  msgid "Add Event"
1537
  msgstr ""
1538
 
1539
- #: ../lib/the-events-calendar.class.php:3863
1540
  msgid "Edit Events"
1541
  msgstr ""
1542
 
1543
- #: ../lib/the-events-calendar.class.php:3872
1544
- #: ../lib/the-events-calendar.class.php:3973
1545
  #: ../lib/tribe-settings.class.php:164
1546
  msgid "Settings"
1547
  msgstr ""
1548
 
1549
- #: ../lib/the-events-calendar.class.php:3908
1550
  #, php-format
1551
  msgid ""
1552
  "Welcome to The Events Calendar! Your events calendar can be found at %s. To "
1553
  "change the events slug, visit %sEvents -> Settings%s."
1554
  msgstr ""
1555
 
1556
- #: ../lib/the-events-calendar.class.php:3974
1557
  msgid "Calendar"
1558
  msgstr ""
1559
 
1560
- #: ../lib/the-events-calendar.class.php:4037
1561
  msgid "List"
1562
  msgstr ""
1563
 
1564
- #: ../lib/the-events-calendar.class.php:4048
1565
  msgid "Month"
1566
  msgstr ""
1567
 
1568
- #: ../lib/the-events-calendar.class.php:4088
 
 
 
 
 
 
1569
  msgid "Date"
1570
  msgstr ""
1571
 
1572
- #: ../lib/the-events-calendar.class.php:4091
1573
  msgid "Events In"
1574
  msgstr ""
1575
 
1576
- #: ../lib/the-events-calendar.class.php:4093
1577
  msgid "Events From"
1578
  msgstr ""
1579
 
1580
- #: ../lib/the-events-calendar.class.php:4276 ../views/list/nav.php:22
1581
  #: ../views/list/nav.php:28 ../views/list/nav.php:31
1582
  msgid "&laquo; Previous Events"
1583
  msgstr ""
1584
 
1585
- #: ../lib/the-events-calendar.class.php:4277 ../views/list/nav.php:40
1586
  #: ../views/list/nav.php:43 ../views/list/nav.php:49
1587
  msgid "Next Events &raquo;"
1588
  msgstr ""
@@ -1592,34 +1610,34 @@ msgstr ""
1592
  msgid "View &#8220;%s&#8221;"
1593
  msgstr ""
1594
 
1595
- #: ../lib/tribe-admin-events-list.class.php:222
1596
  msgid "Start Date"
1597
  msgstr ""
1598
 
1599
- #: ../lib/tribe-admin-events-list.class.php:223
1600
  msgid "End Date"
1601
  msgstr ""
1602
 
1603
- #: ../lib/tribe-admin-events-list.class.php:225
1604
  msgid "Recurring?"
1605
  msgstr ""
1606
 
1607
- #: ../lib/tribe-admin-events-list.class.php:282
1608
  #: ../lib/tickets/tribe-tickets-pro.php:229
1609
  msgid "Yes"
1610
  msgstr ""
1611
 
1612
- #: ../lib/tribe-admin-events-list.class.php:282
1613
  msgid "No"
1614
  msgstr ""
1615
 
1616
- #: ../lib/tribe-admin-events-list.class.php:360
1617
  #, php-format
1618
  msgid "All %s"
1619
  msgstr ""
1620
 
1621
  #: ../lib/tribe-app-shop.class.php:62 ../lib/tribe-app-shop.class.php:63
1622
- #: ../lib/tribe-app-shop.class.php:84
1623
  msgid "Event Add-Ons"
1624
  msgstr ""
1625
 
@@ -1627,7 +1645,7 @@ msgstr ""
1627
  msgid "Tribe"
1628
  msgstr ""
1629
 
1630
- #: ../lib/tribe-event-api.class.php:372 ../lib/tribe-view-helpers.class.php:44
1631
  #: ../public/template-tags/venue.php:240
1632
  msgid "United States"
1633
  msgstr ""
@@ -1637,19 +1655,19 @@ msgstr ""
1637
  msgid "Error"
1638
  msgstr ""
1639
 
1640
- #: ../lib/tribe-field.class.php:161
1641
  msgid "Invalid field type specified"
1642
  msgstr ""
1643
 
1644
- #: ../lib/tribe-field.class.php:414
1645
  msgid "No radio options specified"
1646
  msgstr ""
1647
 
1648
- #: ../lib/tribe-field.class.php:451
1649
  msgid "No checkbox options specified"
1650
  msgstr ""
1651
 
1652
- #: ../lib/tribe-field.class.php:505
1653
  msgid "No select options specified"
1654
  msgstr ""
1655
 
@@ -1698,52 +1716,53 @@ msgstr ""
1698
  msgid "None of your settings were saved. Please try again."
1699
  msgstr ""
1700
 
1701
- #: ../lib/tribe-settings.class.php:485
1702
- msgid ""
1703
- "The above setting was not saved. Other settings were successfully saved."
1704
- msgid_plural ""
1705
- "The above settings were not saved. Other settings were successfully saved."
1706
- msgstr[0] ""
1707
- msgstr[1] ""
1708
-
1709
  #: ../lib/tribe-settings.class.php:509
1710
  msgid "Settings saved."
1711
  msgstr ""
1712
 
1713
- #: ../lib/tribe-template-factory.class.php:225
1714
  #, php-format
1715
- msgid "There were no results found for <strong>\"%s\"</strong>."
1716
  msgstr ""
1717
 
1718
- #: ../lib/tribe-template-factory.class.php:235
1719
  #, php-format
1720
- msgid ""
1721
- "listed under %s. Check out past events for this category or view the full "
1722
- "calendar."
1723
  msgstr ""
1724
 
1725
- #: ../lib/tribe-template-factory.class.php:237
1726
  #, php-format
1727
  msgid ""
1728
- "listed under %s. Check out upcoming events for this category or view the "
1729
- "full calendar."
1730
  msgstr ""
1731
 
1732
- #: ../lib/tribe-template-factory.class.php:241
1733
  #, php-format
1734
- msgid "No events scheduled for <strong>%s</strong>. Please try another day."
 
 
1735
  msgstr ""
1736
 
1737
- #: ../lib/tribe-template-factory.class.php:245
1738
- msgid "No upcoming events "
1739
  msgstr ""
1740
 
1741
- #: ../lib/tribe-template-factory.class.php:247
1742
- msgid "No matching events "
 
1743
  msgstr ""
1744
 
1745
- #: ../lib/tribe-template-factory.class.php:250
1746
- msgid "No previous events "
 
 
 
 
 
 
 
 
1747
  msgstr ""
1748
 
1749
  #: ../lib/tribe-the-events-calendar-import.class.php:64
@@ -1799,11 +1818,6 @@ msgstr ""
1799
  msgid "Non-existant field validation function passed"
1800
  msgstr ""
1801
 
1802
- #: ../lib/tribe-validate.class.php:110
1803
- msgctxt "non-existant function name passed for field validation"
1804
- msgid "with function name:"
1805
- msgstr ""
1806
-
1807
  #: ../lib/tribe-validate.class.php:135 ../lib/tribe-validate.class.php:153
1808
  #, php-format
1809
  msgid "%s must contain numbers and letters only"
@@ -3059,22 +3073,282 @@ msgstr ""
3059
  msgid "Events List"
3060
  msgstr ""
3061
 
3062
- #: ../lib/widget-list.class.php:114
3063
  msgid "View All Events"
3064
  msgstr ""
3065
 
3066
- #: ../lib/widget-list.class.php:117
3067
  msgid "There are no upcoming events at this time."
3068
  msgstr ""
3069
 
3070
- #: ../lib/template-classes/month.php:75
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3071
  #, php-format
3072
  msgid ""
3073
  "There were no results found for <strong>\"%s\"</strong> this month. Try "
3074
  "searching next month."
3075
  msgstr ""
3076
 
3077
- #: ../lib/template-classes/single-event.php:99
3078
  msgid "This event has passed."
3079
  msgstr ""
3080
 
@@ -3109,29 +3383,29 @@ msgid "Security Code"
3109
  msgstr ""
3110
 
3111
  #: ../lib/tickets/tribe-tickets-attendees.php:74
3112
- #: ../lib/tickets/tribe-tickets-attendees.php:144
3113
- #: ../lib/tickets/tribe-tickets-attendees.php:200
3114
  msgid "Check in"
3115
  msgstr ""
3116
 
3117
- #: ../lib/tickets/tribe-tickets-attendees.php:145
3118
- #: ../lib/tickets/tribe-tickets-attendees.php:200
3119
  msgid "Undo Check in"
3120
  msgstr ""
3121
 
3122
- #: ../lib/tickets/tribe-tickets-attendees.php:179
3123
  msgid "Print"
3124
  msgstr ""
3125
 
3126
- #: ../lib/tickets/tribe-tickets-attendees.php:180
3127
  msgid "Email"
3128
  msgstr ""
3129
 
3130
- #: ../lib/tickets/tribe-tickets-attendees.php:181
3131
  msgid "Export"
3132
  msgstr ""
3133
 
3134
- #: ../lib/tickets/tribe-tickets-attendees.php:187
3135
  msgid "Filter by ticket #, order # or security code"
3136
  msgstr ""
3137
 
@@ -3175,47 +3449,53 @@ msgstr ""
3175
  msgid "Attendee List for: %s"
3176
  msgstr ""
3177
 
3178
- #: ../lib/tickets/tribe-tickets.php:292
3179
  msgid "Your ticket has been saved."
3180
  msgstr ""
3181
 
3182
- #: ../lib/tickets/tribe-tickets.php:369
3183
  msgid "Your ticket has been deleted."
3184
  msgstr ""
3185
 
3186
- #: ../public/advanced-functions/meta.php:35
3187
  msgid "Start:"
3188
  msgstr ""
3189
 
3190
- #: ../public/advanced-functions/meta.php:42
3191
  msgid "End:"
3192
  msgstr ""
3193
 
3194
- #: ../public/advanced-functions/meta.php:51
 
3195
  msgid "Date:"
3196
  msgstr ""
3197
 
3198
- #: ../public/advanced-functions/meta.php:233
 
 
 
 
 
3199
  msgid "Click to view a Google Map"
3200
  msgstr ""
3201
 
3202
- #: ../public/advanced-functions/meta.php:234
3203
  msgid "+ Google Map"
3204
  msgstr ""
3205
 
3206
- #: ../public/advanced-functions/meta.php:245
3207
  msgid "Details"
3208
  msgstr ""
3209
 
3210
- #: ../public/advanced-functions/meta.php:295
3211
  msgid "Event Tags:"
3212
  msgstr ""
3213
 
3214
- #: ../public/advanced-functions/meta.php:321
3215
  msgid "Origin:"
3216
  msgstr ""
3217
 
3218
- #: ../public/advanced-functions/meta.php:458
3219
  msgid "Event:"
3220
  msgstr ""
3221
 
@@ -3223,45 +3503,31 @@ msgstr ""
3223
  msgid "Category"
3224
  msgstr ""
3225
 
3226
- #: ../public/template-tags/general.php:306
3227
  msgid "Tags:"
3228
  msgstr ""
3229
 
3230
- #: ../public/template-tags/general.php:392
3231
  msgid "Loading Events"
3232
  msgstr ""
3233
 
3234
- #: ../public/template-tags/general.php:531
3235
  msgid "Free"
3236
  msgstr ""
3237
 
3238
- #: ../public/template-tags/general.php:703
3239
  msgid "Recurring Event"
3240
  msgstr ""
3241
 
3242
- #: ../public/template-tags/general.php:706
3243
  msgid "(See all)"
3244
  msgstr ""
3245
 
3246
- #: ../public/template-tags/general.php:982
3247
  #, php-format
3248
  msgid "Calendar powered by %sThe Events Calendar%s"
3249
  msgstr ""
3250
 
3251
- #: ../public/template-tags/loop.php:150
3252
- #, php-format
3253
- msgid "Events for %1$s"
3254
- msgstr ""
3255
-
3256
- #: ../public/template-tags/loop.php:158
3257
- #, php-format
3258
- msgid "Events for %1$s through %2$s"
3259
- msgstr ""
3260
-
3261
- #: ../public/template-tags/loop.php:171
3262
- msgid "Events for "
3263
- msgstr ""
3264
-
3265
  #: ../public/template-tags/options.php:20
3266
  #, php-format
3267
  msgid "Your current Events URL is %s"
@@ -3290,7 +3556,7 @@ msgstr ""
3290
  msgid "Find out more"
3291
  msgstr ""
3292
 
3293
- #: ../views/modules/bar.php:31 ../views/modules/bar.php:60
3294
  msgid "Find Events"
3295
  msgstr ""
3296
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: The Events Calendar 3.2\n"
4
+ "POT-Creation-Date: 2013-11-03 21:49-0500\n"
5
+ "PO-Revision-Date: 2013-11-03 22:11-0500\n"
6
+ "Last-Translator: \n"
7
+ "Language-Team: Modern Tribe, Inc. <support@tri.be>\n"
 
 
 
 
 
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=UTF-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
11
+ "X-Generator: Poedit 1.5.7\n"
12
+ "X-Poedit-KeywordsList: __;_e\n"
13
+ "X-Poedit-Basepath: .\n"
14
  "X-Poedit-SourceCharset: UTF-8\n"
 
 
 
 
 
15
  "X-Poedit-SearchPath-0: ..\n"
16
 
17
  #: ../admin-views/app-shop.php:4
90
  msgstr ""
91
 
92
  #: ../admin-views/events-meta-box.php:115
93
+ #: ../lib/io/csv/classes/TribeEventsImporter_ColumnMapper.php:61
94
  msgid "Event Cost"
95
  msgstr ""
96
 
99
  msgstr ""
100
 
101
  #: ../admin-views/events-meta-box.php:122
102
+ #: ../public/advanced-functions/meta.php:307
103
  msgid "Cost:"
104
  msgstr ""
105
 
114
  #: ../admin-views/organizer-meta-box.php:19
115
  #: ../admin-views/venue-meta-box.php:93
116
  #: ../admin-views/tickets/attendees.php:39
117
+ #: ../public/advanced-functions/meta.php:395
118
+ #: ../public/advanced-functions/meta.php:457
119
  msgid "Phone:"
120
  msgstr ""
121
 
122
  #: ../admin-views/organizer-meta-box.php:23
123
  #: ../admin-views/venue-meta-box.php:97
124
  #: ../admin-views/tickets/attendees.php:45
125
+ #: ../public/advanced-functions/meta.php:346
126
+ #: ../public/advanced-functions/meta.php:421
127
+ #: ../public/advanced-functions/meta.php:483
128
  msgid "Website:"
129
  msgstr ""
130
 
131
  #: ../admin-views/organizer-meta-box.php:27
132
+ #: ../public/advanced-functions/meta.php:470
133
  msgid "Email:"
134
  msgstr ""
135
 
136
+ #: ../admin-views/organizer-meta-box.php:28
137
+ msgid ""
138
+ "You may want to consider <a href=\"http://wordpress.org/plugins/tags/"
139
+ "obfuscate\">obfuscating</a> any e-mail address published on your site to "
140
+ "best avoid it getting harvested by spammers."
141
+ msgstr ""
142
+
143
  #: ../admin-views/recurrence-dialog.php:13
144
  msgid ""
145
  "Would you like to change only this instance of the event, or all future "
269
  msgstr ""
270
 
271
  #: ../admin-views/tribe-options-display.php:105
272
+ msgid "Month view events per day"
273
+ msgstr ""
274
+
275
+ #: ../admin-views/tribe-options-display.php:106
276
+ msgid "Allow more than the default 3 events per day in month view."
277
+ msgstr ""
278
+
279
+ #: ../admin-views/tribe-options-display.php:113
280
  msgid "Advanced Template Settings"
281
  msgstr ""
282
 
283
+ #: ../admin-views/tribe-options-display.php:117
284
  msgid "Add HTML before event content"
285
  msgstr ""
286
 
287
+ #: ../admin-views/tribe-options-display.php:118
288
  msgid ""
289
  "If you are familiar with HTML, you can add additional code before the event "
290
  "template. Some themes may require this to help with styling or layout."
291
  msgstr ""
292
 
293
+ #: ../admin-views/tribe-options-display.php:123
294
  msgid "Add HTML after event content"
295
  msgstr ""
296
 
297
+ #: ../admin-views/tribe-options-display.php:124
298
  msgid ""
299
  "If you are familiar with HTML, you can add additional code after the event "
300
  "template. Some themes may require this to help with styling or layout."
364
  msgstr ""
365
 
366
  #: ../admin-views/tribe-options-general.php:72
367
+ msgid "Use Javascript to control date filtering"
368
+ msgstr ""
369
+
370
+ #: ../admin-views/tribe-options-general.php:73
371
+ msgid ""
372
+ "This option is disabled when \"Disable the Event Search Bar\" is checked on "
373
+ "the Display settings tab."
374
  msgstr ""
375
 
376
  #: ../admin-views/tribe-options-general.php:73
377
+ msgid ""
378
+ "Enable live ajax for datepicker on front end (User submit not required)."
379
  msgstr ""
380
 
381
+ #: ../admin-views/tribe-options-general.php:81
382
  msgid "Show comments"
383
  msgstr ""
384
 
385
+ #: ../admin-views/tribe-options-general.php:82
386
  msgid "Enable comments on event pages."
387
  msgstr ""
388
 
389
+ #: ../admin-views/tribe-options-general.php:88
390
  msgid "Include events in main blog loop"
391
  msgstr ""
392
 
393
+ #: ../admin-views/tribe-options-general.php:89
394
  msgid ""
395
  "Show events with the site's other posts. When this box is checked, events "
396
  "will also continue to appear on the default events page."
397
  msgstr ""
398
 
399
+ #: ../admin-views/tribe-options-general.php:95
400
+ #: ../admin-views/tribe-options-general.php:101
401
  msgid "Events URL slug"
402
  msgstr ""
403
 
404
+ #: ../admin-views/tribe-options-general.php:96
405
  #, php-format
406
  msgid ""
407
  "You cannot edit the slug for your events page as you do not have pretty "
410
  "\">enable pretty permalinks</a>."
411
  msgstr ""
412
 
413
+ #: ../admin-views/tribe-options-general.php:108
414
  #: ../public/template-tags/options.php:20
415
  msgid "The slug used for building the events URL."
416
  msgstr ""
417
 
418
+ #: ../admin-views/tribe-options-general.php:108
419
  #, php-format
420
  msgid "Your current events URL is: %s"
421
  msgstr ""
422
 
423
+ #: ../admin-views/tribe-options-general.php:113
424
  #: ../public/template-tags/options.php:43
425
  msgid "Here is the iCal feed URL for your events:"
426
  msgstr ""
427
 
428
+ #: ../admin-views/tribe-options-general.php:118
429
  msgid "Single event URL slug"
430
  msgstr ""
431
 
432
+ #: ../admin-views/tribe-options-general.php:125
433
  #, php-format
434
  msgid ""
435
  "The above should ideally be plural, and this singular.<br />Your single "
436
  "event URL is: %s"
437
  msgstr ""
438
 
439
+ #: ../admin-views/tribe-options-general.php:130
440
  msgid "End of day cutoff"
441
  msgstr ""
442
 
443
+ #: ../admin-views/tribe-options-general.php:138
444
  msgid ""
445
+ "Have an event that runs past midnight? Select a time after that event's end "
446
+ "to avoid showing the event on the next day's calendar."
447
  msgstr ""
448
 
449
+ #: ../admin-views/tribe-options-general.php:143
450
  msgid "Default currency symbol"
451
  msgstr ""
452
 
453
+ #: ../admin-views/tribe-options-general.php:144
454
  msgid ""
455
  "Set the default currency symbol for event costs. Note that this only impacts "
456
  "future events, and changes made will not apply retroactively."
457
  msgstr ""
458
 
459
+ #: ../admin-views/tribe-options-general.php:151
460
  msgid "Map Settings"
461
  msgstr ""
462
 
463
+ #: ../admin-views/tribe-options-general.php:155
464
  msgid "Enable Google Maps"
465
  msgstr ""
466
 
467
+ #: ../admin-views/tribe-options-general.php:156
468
  msgid "Check to enable maps for events and venues."
469
  msgstr ""
470
 
471
+ #: ../admin-views/tribe-options-general.php:163
472
  msgid "Google Maps default zoom level"
473
  msgstr ""
474
 
475
+ #: ../admin-views/tribe-options-general.php:164
476
  msgid "0 = zoomed out; 21 = zoomed in."
477
  msgstr ""
478
 
479
+ #: ../admin-views/tribe-options-general.php:172
480
  msgid "Miscellaneous Settings"
481
  msgstr ""
482
 
483
+ #: ../admin-views/tribe-options-general.php:176
484
  msgid "Duplicate Venues &amp; Organizers"
485
  msgstr ""
486
 
487
+ #: ../admin-views/tribe-options-general.php:176
488
  #: ../lib/tribe-amalgamator.php:252
489
  msgid "Merge Duplicates"
490
  msgstr ""
491
 
492
+ #: ../admin-views/tribe-options-general.php:176
493
  msgid ""
494
  "You might find duplicate venues and organizers when updating The Events "
495
  "Calendar from a pre-3.0 version. Click this button to automatically merge "
496
  "identical venues and organizers."
497
  msgstr ""
498
 
499
+ #: ../admin-views/tribe-options-general.php:181
500
  msgid "Debug mode"
501
  msgstr ""
502
 
503
+ #: ../admin-views/tribe-options-general.php:187
504
  #, php-format
505
  msgid ""
506
  "Enable this option to log debug information. By default this will log to "
509
  "\" tab in the debug output."
510
  msgstr ""
511
 
512
+ #: ../admin-views/tribe-options-general.php:187
513
  msgid "Debug Bar Plugin"
514
  msgstr ""
515
 
 
 
 
 
 
516
  #: ../admin-views/tribe-options-help.php:19
517
  msgid "You need to upgrade!"
518
  msgstr ""
554
  msgstr ""
555
 
556
  #: ../admin-views/tribe-options-help.php:79
557
+ #: ../lib/the-events-calendar.class.php:765
558
+ #: ../lib/the-events-calendar.class.php:3929
559
+ #: ../lib/the-events-calendar.class.php:4022
560
  msgid "Help"
561
  msgstr ""
562
 
735
  msgid "Not getting help?"
736
  msgstr ""
737
 
738
+ #: ../admin-views/tribe-options-help.php:171
739
+ #: ../lib/the-events-calendar.class.php:508
740
  #: ../lib/tribe-settings.class.php:135
741
  msgid "The Events Calendar"
742
  msgstr ""
743
 
744
+ #: ../admin-views/tribe-options-help.php:175
745
  msgid "Latest Version:"
746
  msgstr ""
747
 
748
+ #: ../admin-views/tribe-options-help.php:176
749
  msgid "Author:"
750
  msgstr ""
751
 
752
+ #: ../admin-views/tribe-options-help.php:176
753
  msgid "Modern Tribe Inc"
754
  msgstr ""
755
 
756
+ #: ../admin-views/tribe-options-help.php:177
757
  msgid "Requires:"
758
  msgstr ""
759
 
760
+ #: ../admin-views/tribe-options-help.php:177
761
  msgid "WordPress "
762
  msgstr ""
763
 
764
+ #: ../admin-views/tribe-options-help.php:178
765
  msgid "Wordpress.org Plugin Page"
766
  msgstr ""
767
 
768
+ #: ../admin-views/tribe-options-help.php:183
769
  msgid "Average Rating"
770
  msgstr ""
771
 
772
+ #: ../admin-views/tribe-options-help.php:188
 
 
 
 
 
 
 
773
  msgid "Give us 5 stars!"
774
  msgstr ""
775
 
776
+ #: ../admin-views/tribe-options-help.php:191
777
  msgid "Premium Add-Ons"
778
  msgstr ""
779
 
780
+ #: ../admin-views/tribe-options-help.php:197
781
  msgid "(Coming Soon!)"
782
  msgstr ""
783
 
784
+ #: ../admin-views/tribe-options-help.php:204
785
  msgid "News and Tutorials"
786
  msgstr ""
787
 
804
  msgstr ""
805
 
806
  #: ../admin-views/venue-meta-box.php:27
807
+ #: ../public/advanced-functions/meta.php:409
808
  msgid "Address:"
809
  msgstr ""
810
 
1001
  "tickets will be available from now until the event ends."
1002
  msgstr ""
1003
 
1004
+ #: ../lib/the-events-calendar.class.php:513
1005
  msgid "month"
1006
  msgstr ""
1007
 
1008
+ #: ../lib/the-events-calendar.class.php:514
1009
  msgid "upcoming"
1010
  msgstr ""
1011
 
1012
+ #: ../lib/the-events-calendar.class.php:515
1013
  msgid "past"
1014
  msgstr ""
1015
 
1016
+ #: ../lib/the-events-calendar.class.php:517
1017
  msgid "venue"
1018
  msgstr ""
1019
 
1020
+ #: ../lib/the-events-calendar.class.php:531
1021
  #, php-format
1022
  msgid "Initializing Tribe Events on %s"
1023
  msgstr ""
1024
 
1025
+ #: ../lib/the-events-calendar.class.php:644
1026
  #, php-format
1027
  msgid ""
1028
  "Your version of The Events Calendar is not up-to-date with one of your The "
1029
  "Events Calendar add-ons. Please %supdate now.%s"
1030
  msgstr ""
1031
 
1032
+ #: ../lib/the-events-calendar.class.php:661
1033
  #, php-format
1034
  msgid ""
1035
  "The following plugins are out of date: <b>%s</b>. All add-ons contain "
1037
  "paired with the right version. %sWant to pair an older version%s?"
1038
  msgstr ""
1039
 
1040
+ #: ../lib/the-events-calendar.class.php:725
1041
+ #: ../lib/the-events-calendar.class.php:760
1042
+ #: ../lib/the-events-calendar.class.php:762
1043
  msgid "Licenses"
1044
  msgstr ""
1045
 
1046
+ #: ../lib/the-events-calendar.class.php:729
1047
  #, php-format
1048
  msgid ""
1049
  "<p>The license key you received when completing your purchase from %s will "
1061
  "and click \"Check Again\".</p>"
1062
  msgstr ""
1063
 
1064
+ #: ../lib/the-events-calendar.class.php:752
1065
  msgid "General"
1066
  msgstr ""
1067
 
1068
+ #: ../lib/the-events-calendar.class.php:753
1069
  msgid "Display"
1070
  msgstr ""
1071
 
1072
+ #: ../lib/the-events-calendar.class.php:804
1073
  #, php-format
1074
  msgid ""
1075
  "Sorry, The Events Calendar requires WordPress %s or higher. Please upgrade "
1076
  "your WordPress install."
1077
  msgstr ""
1078
 
1079
+ #: ../lib/the-events-calendar.class.php:807
1080
  #, php-format
1081
  msgid ""
1082
  "Sorry, The Events Calendar requires PHP %s or higher. Talk to your Web host "
1083
  "about moving you to a newer version of PHP."
1084
  msgstr ""
1085
 
1086
+ #: ../lib/the-events-calendar.class.php:1022 ../lib/widget-list.class.php:169
1087
+ #: ../public/template-tags/loop.php:138
1088
  msgid "Upcoming Events"
1089
  msgstr ""
1090
 
1091
+ #: ../lib/the-events-calendar.class.php:1025
1092
+ #: ../public/template-tags/loop.php:168
1093
  msgid "Past Events"
1094
  msgstr ""
1095
 
1096
+ #: ../lib/the-events-calendar.class.php:1030
1097
+ #: ../lib/the-events-calendar.class.php:1037
1098
+ #: ../public/template-tags/loop.php:173
1099
  #, php-format
1100
  msgid "Events for %s"
1101
  msgstr ""
1102
 
1103
+ #: ../lib/the-events-calendar.class.php:1032
1104
  msgid "Events this month"
1105
  msgstr ""
1106
 
1107
+ #: ../lib/the-events-calendar.class.php:1044
1108
  #, php-format
1109
  msgid "Events at %s"
1110
  msgstr ""
1111
 
1112
+ #: ../lib/the-events-calendar.class.php:1063
1113
  msgid "No description has been entered for this event."
1114
  msgstr ""
1115
 
1116
+ #: ../lib/the-events-calendar.class.php:1325
1117
  msgid "category"
1118
  msgstr ""
1119
 
1120
+ #: ../lib/the-events-calendar.class.php:1335
1121
  msgid "tag"
1122
  msgstr ""
1123
 
1124
+ #: ../lib/the-events-calendar.class.php:1362
1125
+ #: ../lib/the-events-calendar.class.php:3859
1126
+ #: ../lib/the-events-calendar.class.php:3920
1127
+ #: ../lib/io/csv/admin-views/import.php:31
1128
  msgid "Events"
1129
  msgstr ""
1130
 
1131
+ #: ../lib/the-events-calendar.class.php:1363
1132
  msgid "Event"
1133
  msgstr ""
1134
 
1135
+ #: ../lib/the-events-calendar.class.php:1364
1136
+ #: ../lib/the-events-calendar.class.php:1377
1137
+ #: ../lib/the-events-calendar.class.php:1390
1138
  msgid "Add New"
1139
  msgstr ""
1140
 
1141
+ #: ../lib/the-events-calendar.class.php:1365
1142
  msgid "Add New Event"
1143
  msgstr ""
1144
 
1145
+ #: ../lib/the-events-calendar.class.php:1366
1146
  msgid "Edit Event"
1147
  msgstr ""
1148
 
1149
+ #: ../lib/the-events-calendar.class.php:1367
1150
  msgid "New Event"
1151
  msgstr ""
1152
 
1153
+ #: ../lib/the-events-calendar.class.php:1368
1154
  msgid "View Event"
1155
  msgstr ""
1156
 
1157
+ #: ../lib/the-events-calendar.class.php:1369
1158
  msgid "Search Events"
1159
  msgstr ""
1160
 
1161
+ #: ../lib/the-events-calendar.class.php:1370
1162
  msgid "No events found"
1163
  msgstr ""
1164
 
1165
+ #: ../lib/the-events-calendar.class.php:1371
1166
  msgid "No events found in Trash"
1167
  msgstr ""
1168
 
1169
+ #: ../lib/the-events-calendar.class.php:1375
1170
+ #: ../lib/the-events-calendar.class.php:1487
1171
+ #: ../lib/io/csv/admin-views/import.php:29
1172
  msgid "Venues"
1173
  msgstr ""
1174
 
1175
+ #: ../lib/the-events-calendar.class.php:1376
1176
+ #: ../public/advanced-functions/meta.php:369 ../views/tickets/email.php:343
1177
  msgid "Venue"
1178
  msgstr ""
1179
 
1180
+ #: ../lib/the-events-calendar.class.php:1378
1181
  msgid "Add New Venue"
1182
  msgstr ""
1183
 
1184
+ #: ../lib/the-events-calendar.class.php:1379
1185
  msgid "Edit Venue"
1186
  msgstr ""
1187
 
1188
+ #: ../lib/the-events-calendar.class.php:1380
1189
  msgid "New Venue"
1190
  msgstr ""
1191
 
1192
+ #: ../lib/the-events-calendar.class.php:1381
1193
  msgid "View Venue"
1194
  msgstr ""
1195
 
1196
+ #: ../lib/the-events-calendar.class.php:1382
1197
  msgid "Search Venues"
1198
  msgstr ""
1199
 
1200
+ #: ../lib/the-events-calendar.class.php:1383
1201
  msgid "No venue found"
1202
  msgstr ""
1203
 
1204
+ #: ../lib/the-events-calendar.class.php:1384
1205
  msgid "No venues found in Trash"
1206
  msgstr ""
1207
 
1208
+ #: ../lib/the-events-calendar.class.php:1388
1209
+ #: ../lib/the-events-calendar.class.php:1488
1210
+ #: ../lib/io/csv/admin-views/import.php:30
1211
  msgid "Organizers"
1212
  msgstr ""
1213
 
1214
+ #: ../lib/the-events-calendar.class.php:1389
1215
+ #: ../public/advanced-functions/meta.php:431 ../views/tickets/email.php:362
1216
  msgid "Organizer"
1217
  msgstr ""
1218
 
1219
+ #: ../lib/the-events-calendar.class.php:1391
1220
  msgid "Add New Organizer"
1221
  msgstr ""
1222
 
1223
+ #: ../lib/the-events-calendar.class.php:1392
1224
  msgid "Edit Organizer"
1225
  msgstr ""
1226
 
1227
+ #: ../lib/the-events-calendar.class.php:1393
1228
  msgid "New Organizer"
1229
  msgstr ""
1230
 
1231
+ #: ../lib/the-events-calendar.class.php:1394
1232
  msgid "View Organizer"
1233
  msgstr ""
1234
 
1235
+ #: ../lib/the-events-calendar.class.php:1395
1236
  msgid "Search Organizers"
1237
  msgstr ""
1238
 
1239
+ #: ../lib/the-events-calendar.class.php:1396
1240
  msgid "No organizer found"
1241
  msgstr ""
1242
 
1243
+ #: ../lib/the-events-calendar.class.php:1397
1244
  msgid "No organizers found in Trash"
1245
  msgstr ""
1246
 
1247
+ #: ../lib/the-events-calendar.class.php:1401
1248
+ #: ../lib/tribe-admin-events-list.class.php:226
1249
  msgid "Event Categories"
1250
  msgstr ""
1251
 
1252
+ #: ../lib/the-events-calendar.class.php:1402
1253
+ #: ../lib/io/csv/classes/TribeEventsImporter_ColumnMapper.php:63
1254
  msgid "Event Category"
1255
  msgstr ""
1256
 
1257
+ #: ../lib/the-events-calendar.class.php:1403
1258
  msgid "Search Event Categories"
1259
  msgstr ""
1260
 
1261
+ #: ../lib/the-events-calendar.class.php:1404
1262
  msgid "All Event Categories"
1263
  msgstr ""
1264
 
1265
+ #: ../lib/the-events-calendar.class.php:1405
1266
  msgid "Parent Event Category"
1267
  msgstr ""
1268
 
1269
+ #: ../lib/the-events-calendar.class.php:1406
1270
  msgid "Parent Event Category:"
1271
  msgstr ""
1272
 
1273
+ #: ../lib/the-events-calendar.class.php:1407
1274
  msgid "Edit Event Category"
1275
  msgstr ""
1276
 
1277
+ #: ../lib/the-events-calendar.class.php:1408
1278
  msgid "Update Event Category"
1279
  msgstr ""
1280
 
1281
+ #: ../lib/the-events-calendar.class.php:1409
1282
  msgid "Add New Event Category"
1283
  msgstr ""
1284
 
1285
+ #: ../lib/the-events-calendar.class.php:1410
1286
  msgid "New Event Category Name"
1287
  msgstr ""
1288
 
1289
+ #: ../lib/the-events-calendar.class.php:1426
1290
  #, php-format
1291
  msgid "Event updated. <a href=\"%s\">View event</a>"
1292
  msgstr ""
1293
 
1294
+ #: ../lib/the-events-calendar.class.php:1427
1295
+ #: ../lib/the-events-calendar.class.php:1444
1296
+ #: ../lib/the-events-calendar.class.php:1461
1297
  msgid "Custom field updated."
1298
  msgstr ""
1299
 
1300
+ #: ../lib/the-events-calendar.class.php:1428
1301
+ #: ../lib/the-events-calendar.class.php:1445
1302
+ #: ../lib/the-events-calendar.class.php:1462
1303
  msgid "Custom field deleted."
1304
  msgstr ""
1305
 
1306
+ #: ../lib/the-events-calendar.class.php:1429
1307
  msgid "Event updated."
1308
  msgstr ""
1309
 
1310
+ #: ../lib/the-events-calendar.class.php:1431
1311
  #, php-format
1312
  msgid "Event restored to revision from %s"
1313
  msgstr ""
1314
 
1315
+ #: ../lib/the-events-calendar.class.php:1432
1316
  #, php-format
1317
  msgid "Event published. <a href=\"%s\">View event</a>"
1318
  msgstr ""
1319
 
1320
+ #: ../lib/the-events-calendar.class.php:1433
1321
  msgid "Event saved."
1322
  msgstr ""
1323
 
1324
+ #: ../lib/the-events-calendar.class.php:1434
1325
  #, php-format
1326
  msgid "Event submitted. <a target=\"_blank\" href=\"%s\">Preview event</a>"
1327
  msgstr ""
1328
 
1329
+ #: ../lib/the-events-calendar.class.php:1435
1330
  #, php-format
1331
  msgid ""
1332
  "Event scheduled for: <strong>%1$s</strong>. <a target=\"_blank\" href=\"%2$s"
1333
  "\">Preview event</a>"
1334
  msgstr ""
1335
 
1336
+ #: ../lib/the-events-calendar.class.php:1437
1337
+ #: ../lib/the-events-calendar.class.php:1454
1338
+ #: ../lib/the-events-calendar.class.php:1471
1339
  msgid "M j, Y @ G:i"
1340
  msgstr ""
1341
 
1342
+ #: ../lib/the-events-calendar.class.php:1438
1343
  #, php-format
1344
  msgid "Event draft updated. <a target=\"_blank\" href=\"%s\">Preview event</a>"
1345
  msgstr ""
1346
 
1347
+ #: ../lib/the-events-calendar.class.php:1443
1348
  #, php-format
1349
  msgid "Venue updated. <a href=\"%s\">View venue</a>"
1350
  msgstr ""
1351
 
1352
+ #: ../lib/the-events-calendar.class.php:1446
1353
  msgid "Venue updated."
1354
  msgstr ""
1355
 
1356
+ #: ../lib/the-events-calendar.class.php:1448
1357
  #, php-format
1358
  msgid "Venue restored to revision from %s"
1359
  msgstr ""
1360
 
1361
+ #: ../lib/the-events-calendar.class.php:1449
1362
  #, php-format
1363
  msgid "Venue published. <a href=\"%s\">View venue</a>"
1364
  msgstr ""
1365
 
1366
+ #: ../lib/the-events-calendar.class.php:1450
1367
  msgid "Venue saved."
1368
  msgstr ""
1369
 
1370
+ #: ../lib/the-events-calendar.class.php:1451
1371
  #, php-format
1372
  msgid "Venue submitted. <a target=\"_blank\" href=\"%s\">Preview venue</a>"
1373
  msgstr ""
1374
 
1375
+ #: ../lib/the-events-calendar.class.php:1452
1376
  #, php-format
1377
  msgid ""
1378
  "Venue scheduled for: <strong>%1$s</strong>. <a target=\"_blank\" href=\"%2$s"
1379
  "\">Preview venue</a>"
1380
  msgstr ""
1381
 
1382
+ #: ../lib/the-events-calendar.class.php:1455
1383
  #, php-format
1384
  msgid "Venue draft updated. <a target=\"_blank\" href=\"%s\">Preview venue</a>"
1385
  msgstr ""
1386
 
1387
+ #: ../lib/the-events-calendar.class.php:1460
1388
  #, php-format
1389
  msgid "Organizer updated. <a href=\"%s\">View organizer</a>"
1390
  msgstr ""
1391
 
1392
+ #: ../lib/the-events-calendar.class.php:1463
1393
  msgid "Organizer updated."
1394
  msgstr ""
1395
 
1396
+ #: ../lib/the-events-calendar.class.php:1465
1397
  #, php-format
1398
  msgid "Organizer restored to revision from %s"
1399
  msgstr ""
1400
 
1401
+ #: ../lib/the-events-calendar.class.php:1466
1402
  #, php-format
1403
  msgid "Organizer published. <a href=\"%s\">View organizer</a>"
1404
  msgstr ""
1405
 
1406
+ #: ../lib/the-events-calendar.class.php:1467
1407
  msgid "Organizer saved."
1408
  msgstr ""
1409
 
1410
+ #: ../lib/the-events-calendar.class.php:1468
1411
  #, php-format
1412
  msgid ""
1413
  "Organizer submitted. <a target=\"_blank\" href=\"%s\">Preview organizer</a>"
1414
  msgstr ""
1415
 
1416
+ #: ../lib/the-events-calendar.class.php:1469
1417
  #, php-format
1418
  msgid ""
1419
  "Organizer scheduled for: <strong>%1$s</strong>. <a target=\"_blank\" href="
1420
  "\"%2$s\">Preview organizer</a>"
1421
  msgstr ""
1422
 
1423
+ #: ../lib/the-events-calendar.class.php:1472
1424
  #, php-format
1425
  msgid ""
1426
  "Organizer draft updated. <a target=\"_blank\" href=\"%s\">Preview organizer</"
1427
  "a>"
1428
  msgstr ""
1429
 
1430
+ #: ../lib/the-events-calendar.class.php:1513
1431
  msgid "Use Saved Venue:"
1432
  msgstr ""
1433
 
1434
+ #: ../lib/the-events-calendar.class.php:1542
1435
  msgid "Use Saved Organizer:"
1436
  msgstr ""
1437
 
1438
+ #: ../lib/the-events-calendar.class.php:1582
1439
  msgid "Use New Venue"
1440
  msgstr ""
1441
 
1442
+ #: ../lib/the-events-calendar.class.php:1584
1443
  msgid "My Venues"
1444
  msgstr ""
1445
 
1446
+ #: ../lib/the-events-calendar.class.php:1589
1447
  msgid "Available Venues"
1448
  msgstr ""
1449
 
1450
+ #: ../lib/the-events-calendar.class.php:1600
1451
  msgid "No saved venue exists."
1452
  msgstr ""
1453
 
1454
+ #: ../lib/the-events-calendar.class.php:1639
1455
  msgid "Use New Organizer"
1456
  msgstr ""
1457
 
1458
+ #: ../lib/the-events-calendar.class.php:1641
1459
  msgid "My Organizers"
1460
  msgstr ""
1461
 
1462
+ #: ../lib/the-events-calendar.class.php:1646
1463
  msgid "Available Organizers"
1464
  msgstr ""
1465
 
1466
+ #: ../lib/the-events-calendar.class.php:1657
1467
  msgid "No saved organizer exists."
1468
  msgstr ""
1469
 
1470
+ #: ../lib/the-events-calendar.class.php:1784
1471
  msgid "Next"
1472
  msgstr ""
1473
 
1474
+ #: ../lib/the-events-calendar.class.php:1785
1475
  msgid "Prev"
1476
  msgstr ""
1477
 
1478
+ #: ../lib/the-events-calendar.class.php:1786
1479
  msgid "Today"
1480
  msgstr ""
1481
 
1482
+ #: ../lib/the-events-calendar.class.php:1787
1483
  msgid "Done"
1484
  msgstr ""
1485
 
1486
+ #: ../lib/the-events-calendar.class.php:1996
1487
  msgid "Network"
1488
  msgstr ""
1489
 
1490
+ #: ../lib/the-events-calendar.class.php:2924
1491
  msgid "Unnamed Venue"
1492
  msgstr ""
1493
 
1494
+ #: ../lib/the-events-calendar.class.php:3014
1495
  msgid "Unnamed Organizer"
1496
  msgstr ""
1497
 
1498
+ #: ../lib/the-events-calendar.class.php:3474
1499
+ #: ../lib/the-events-calendar.class.php:3491
1500
+ msgid "Date out of range."
1501
+ msgstr ""
1502
+
1503
+ #: ../lib/the-events-calendar.class.php:3504
1504
  msgid "Event Options"
1505
  msgstr ""
1506
 
1507
+ #: ../lib/the-events-calendar.class.php:3506
1508
  msgid "Venue Information"
1509
  msgstr ""
1510
 
1511
+ #: ../lib/the-events-calendar.class.php:3511
1512
  msgid "Organizer Information"
1513
  msgstr ""
1514
 
1515
+ #: ../lib/the-events-calendar.class.php:3708
1516
  msgid "Support"
1517
  msgstr ""
1518
 
1519
+ #: ../lib/the-events-calendar.class.php:3711
1520
  msgid "View All Add-Ons"
1521
  msgstr ""
1522
 
1523
+ #: ../lib/the-events-calendar.class.php:3728
1524
  msgid "News from Modern Tribe"
1525
  msgstr ""
1526
 
1527
+ #: ../lib/the-events-calendar.class.php:3809
1528
  msgid "Additional Functionality"
1529
  msgstr ""
1530
 
1531
+ #: ../lib/the-events-calendar.class.php:3814
1532
  msgid ""
1533
  "Looking for additional functionality including recurring events, ticket "
1534
  "sales, publicly submitted events, new views and more?"
1535
  msgstr ""
1536
 
1537
+ #: ../lib/the-events-calendar.class.php:3814
1538
  #, php-format
1539
  msgid "Check out the <a href=\"%s\">available add-ons</a>."
1540
  msgstr ""
1541
 
1542
+ #: ../lib/the-events-calendar.class.php:3886
1543
+ #: ../lib/the-events-calendar.class.php:3977
1544
  msgid "View Calendar"
1545
  msgstr ""
1546
 
1547
+ #: ../lib/the-events-calendar.class.php:3894
1548
  msgid "Add Event"
1549
  msgstr ""
1550
 
1551
+ #: ../lib/the-events-calendar.class.php:3903
1552
  msgid "Edit Events"
1553
  msgstr ""
1554
 
1555
+ #: ../lib/the-events-calendar.class.php:3912
1556
+ #: ../lib/the-events-calendar.class.php:4013
1557
  #: ../lib/tribe-settings.class.php:164
1558
  msgid "Settings"
1559
  msgstr ""
1560
 
1561
+ #: ../lib/the-events-calendar.class.php:3948
1562
  #, php-format
1563
  msgid ""
1564
  "Welcome to The Events Calendar! Your events calendar can be found at %s. To "
1565
  "change the events slug, visit %sEvents -> Settings%s."
1566
  msgstr ""
1567
 
1568
+ #: ../lib/the-events-calendar.class.php:4014
1569
  msgid "Calendar"
1570
  msgstr ""
1571
 
1572
+ #: ../lib/the-events-calendar.class.php:4064
1573
  msgid "List"
1574
  msgstr ""
1575
 
1576
+ #: ../lib/the-events-calendar.class.php:4075
1577
  msgid "Month"
1578
  msgstr ""
1579
 
1580
+ #: ../lib/the-events-calendar.class.php:4094
1581
+ #: ../lib/the-events-calendar.class.php:4096
1582
+ msgid "Search"
1583
+ msgstr ""
1584
+
1585
+ #: ../lib/the-events-calendar.class.php:4116
1586
+ #: ../lib/the-events-calendar.class.php:4128
1587
  msgid "Date"
1588
  msgstr ""
1589
 
1590
+ #: ../lib/the-events-calendar.class.php:4119
1591
  msgid "Events In"
1592
  msgstr ""
1593
 
1594
+ #: ../lib/the-events-calendar.class.php:4121
1595
  msgid "Events From"
1596
  msgstr ""
1597
 
1598
+ #: ../lib/the-events-calendar.class.php:4313 ../views/list/nav.php:22
1599
  #: ../views/list/nav.php:28 ../views/list/nav.php:31
1600
  msgid "&laquo; Previous Events"
1601
  msgstr ""
1602
 
1603
+ #: ../lib/the-events-calendar.class.php:4314 ../views/list/nav.php:40
1604
  #: ../views/list/nav.php:43 ../views/list/nav.php:49
1605
  msgid "Next Events &raquo;"
1606
  msgstr ""
1610
  msgid "View &#8220;%s&#8221;"
1611
  msgstr ""
1612
 
1613
+ #: ../lib/tribe-admin-events-list.class.php:231
1614
  msgid "Start Date"
1615
  msgstr ""
1616
 
1617
+ #: ../lib/tribe-admin-events-list.class.php:232
1618
  msgid "End Date"
1619
  msgstr ""
1620
 
1621
+ #: ../lib/tribe-admin-events-list.class.php:234
1622
  msgid "Recurring?"
1623
  msgstr ""
1624
 
1625
+ #: ../lib/tribe-admin-events-list.class.php:298
1626
  #: ../lib/tickets/tribe-tickets-pro.php:229
1627
  msgid "Yes"
1628
  msgstr ""
1629
 
1630
+ #: ../lib/tribe-admin-events-list.class.php:298
1631
  msgid "No"
1632
  msgstr ""
1633
 
1634
+ #: ../lib/tribe-admin-events-list.class.php:376
1635
  #, php-format
1636
  msgid "All %s"
1637
  msgstr ""
1638
 
1639
  #: ../lib/tribe-app-shop.class.php:62 ../lib/tribe-app-shop.class.php:63
1640
+ #: ../lib/tribe-app-shop.class.php:87
1641
  msgid "Event Add-Ons"
1642
  msgstr ""
1643
 
1645
  msgid "Tribe"
1646
  msgstr ""
1647
 
1648
+ #: ../lib/tribe-event-api.class.php:374 ../lib/tribe-view-helpers.class.php:44
1649
  #: ../public/template-tags/venue.php:240
1650
  msgid "United States"
1651
  msgstr ""
1655
  msgid "Error"
1656
  msgstr ""
1657
 
1658
+ #: ../lib/tribe-field.class.php:168
1659
  msgid "Invalid field type specified"
1660
  msgstr ""
1661
 
1662
+ #: ../lib/tribe-field.class.php:438
1663
  msgid "No radio options specified"
1664
  msgstr ""
1665
 
1666
+ #: ../lib/tribe-field.class.php:475
1667
  msgid "No checkbox options specified"
1668
  msgstr ""
1669
 
1670
+ #: ../lib/tribe-field.class.php:530
1671
  msgid "No select options specified"
1672
  msgstr ""
1673
 
1716
  msgid "None of your settings were saved. Please try again."
1717
  msgstr ""
1718
 
 
 
 
 
 
 
 
 
1719
  #: ../lib/tribe-settings.class.php:509
1720
  msgid "Settings saved."
1721
  msgstr ""
1722
 
1723
+ #: ../lib/tribe-template-factory.class.php:256
1724
  #, php-format
1725
+ msgid "There were no results found for <strong>\"%s\"</strong>."
1726
  msgstr ""
1727
 
1728
+ #: ../lib/tribe-template-factory.class.php:259
1729
  #, php-format
1730
+ msgid "No results were found for events in or near <strong>\"%s\"</strong>."
 
 
1731
  msgstr ""
1732
 
1733
+ #: ../lib/tribe-template-factory.class.php:262
1734
  #, php-format
1735
  msgid ""
1736
+ "No upcoming events listed under %s. Check out upcoming events for this "
1737
+ "category or view the full calendar."
1738
  msgstr ""
1739
 
1740
+ #: ../lib/tribe-template-factory.class.php:265
1741
  #, php-format
1742
+ msgid ""
1743
+ "No matching events listed under %s. Check out upcoming events for this "
1744
+ "category or view the full calendar."
1745
  msgstr ""
1746
 
1747
+ #: ../lib/tribe-template-factory.class.php:268
1748
+ msgid "No previous events "
1749
  msgstr ""
1750
 
1751
+ #: ../lib/tribe-template-factory.class.php:271
1752
+ #: ../lib/template-classes/month.php:115
1753
+ msgid "There were no results found."
1754
  msgstr ""
1755
 
1756
+ #: ../lib/tribe-templates.class.php:471
1757
+ #, php-format
1758
+ msgid "Template overrides should be moved to the correct subdirectory: %s"
1759
+ msgstr ""
1760
+
1761
+ #: ../lib/tribe-templates.class.php:512
1762
+ #, php-format
1763
+ msgid ""
1764
+ "Template overrides should be moved to the correct subdirectory: "
1765
+ "tribe_get_template_part('%s')"
1766
  msgstr ""
1767
 
1768
  #: ../lib/tribe-the-events-calendar-import.class.php:64
1818
  msgid "Non-existant field validation function passed"
1819
  msgstr ""
1820
 
 
 
 
 
 
1821
  #: ../lib/tribe-validate.class.php:135 ../lib/tribe-validate.class.php:153
1822
  #, php-format
1823
  msgid "%s must contain numbers and letters only"
3073
  msgid "Events List"
3074
  msgstr ""
3075
 
3076
+ #: ../lib/widget-list.class.php:124
3077
  msgid "View All Events"
3078
  msgstr ""
3079
 
3080
+ #: ../lib/widget-list.class.php:127
3081
  msgid "There are no upcoming events at this time."
3082
  msgstr ""
3083
 
3084
+ #: ../lib/io/csv/admin-views/columns.php:22
3085
+ #, php-format
3086
+ msgid "Column Mapping: %s"
3087
+ msgstr ""
3088
+
3089
+ #: ../lib/io/csv/admin-views/columns.php:28
3090
+ msgid "Please choose the fields that best match the columns in your CSV file."
3091
+ msgstr ""
3092
+
3093
+ #: ../lib/io/csv/admin-views/columns.php:33
3094
+ msgid "Column Headings"
3095
+ msgstr ""
3096
+
3097
+ #: ../lib/io/csv/admin-views/columns.php:34
3098
+ msgid "Event Fields"
3099
+ msgstr ""
3100
+
3101
+ #: ../lib/io/csv/admin-views/columns.php:45
3102
+ msgid "Perform Import"
3103
+ msgstr ""
3104
+
3105
+ #: ../lib/io/csv/admin-views/header.php:11
3106
+ msgid "Events Import (CSV)"
3107
+ msgstr ""
3108
+
3109
+ #: ../lib/io/csv/admin-views/import.php:17
3110
+ msgid "Please import venues and organizers <i>before</i> events."
3111
+ msgstr ""
3112
+
3113
+ #: ../lib/io/csv/admin-views/import.php:19
3114
+ msgid ""
3115
+ "<ol><li><strong>Organizer import requires:</strong> Organizer Name</"
3116
+ "li><li><strong>Venue import requires:</strong> Venue Name</"
3117
+ "li><li><strong>Event import requires:</strong> Event Name and Event Start "
3118
+ "Date</li></ol>"
3119
+ msgstr ""
3120
+
3121
+ #: ../lib/io/csv/admin-views/import.php:20
3122
+ msgid ""
3123
+ "To begin importing data, please choose the type of import and the CSV file."
3124
+ msgstr ""
3125
+
3126
+ #: ../lib/io/csv/admin-views/import.php:27
3127
+ msgid "Import Type:"
3128
+ msgstr ""
3129
+
3130
+ #: ../lib/io/csv/admin-views/import.php:39
3131
+ msgid "CSV File:"
3132
+ msgstr ""
3133
+
3134
+ #: ../lib/io/csv/admin-views/import.php:42
3135
+ msgid ""
3136
+ "Upload a properly formatted, UTF-8 encoded CSV file. Not sure if your file "
3137
+ "is UTF-8 encoded? Make sure to specify the character encoding when you save "
3138
+ "the file, or pass it through a <a href='http://i-tools.org/charset/exec?"
3139
+ "dest=utf-8&src=auto&download=1'>conversion tool</a>."
3140
+ msgstr ""
3141
+
3142
+ #: ../lib/io/csv/admin-views/import.php:50
3143
+ msgid "This file has column names in the first row"
3144
+ msgstr ""
3145
+
3146
+ #: ../lib/io/csv/admin-views/import.php:61
3147
+ msgid "Import CSV File"
3148
+ msgstr ""
3149
+
3150
+ #: ../lib/io/csv/admin-views/result.php:13
3151
+ msgid "Import Result"
3152
+ msgstr ""
3153
+
3154
+ #: ../lib/io/csv/admin-views/result.php:15
3155
+ msgid "Import complete!"
3156
+ msgstr ""
3157
+
3158
+ #: ../lib/io/csv/admin-views/result.php:17
3159
+ #, php-format
3160
+ msgid "Inserted: %d"
3161
+ msgstr ""
3162
+
3163
+ #: ../lib/io/csv/admin-views/result.php:18
3164
+ #, php-format
3165
+ msgid "Updated: %d"
3166
+ msgstr ""
3167
+
3168
+ #: ../lib/io/csv/admin-views/result.php:19
3169
+ #, php-format
3170
+ msgid "Skipped: %d"
3171
+ msgstr ""
3172
+
3173
+ #: ../lib/io/csv/admin-views/result.php:23
3174
+ msgid "The import statistics above have the following meaning:"
3175
+ msgstr ""
3176
+
3177
+ #: ../lib/io/csv/admin-views/result.php:24
3178
+ msgid ""
3179
+ "<ol><li><strong>Inserted:</strong> A new item was inserted successfully.</"
3180
+ "li><li><strong>Updated:</strong> An item was found with the same name and/or "
3181
+ "start date. The existing item was updated with the new value from the file.</"
3182
+ "li><li><strong>Skipped:</strong> A row was found in the CSV file that could "
3183
+ "not be imported. Please see below for the invalid rows.</li></ol>"
3184
+ msgstr ""
3185
+
3186
+ #: ../lib/io/csv/admin-views/result.php:27
3187
+ #, php-format
3188
+ msgid "Skipped row numbers: %s"
3189
+ msgstr ""
3190
+
3191
+ #: ../lib/io/csv/classes/TribeEventsImporter_AdminPage.php:15
3192
+ #: ../lib/io/csv/classes/TribeEventsImporter_AdminPage.php:16
3193
+ msgid "CSV Import"
3194
+ msgstr ""
3195
+
3196
+ #: ../lib/io/csv/classes/TribeEventsImporter_AdminPage.php:29
3197
+ #: ../lib/io/csv/classes/TribeEventsImporter_AdminPage.php:147
3198
+ msgid "The file went away. Please try again."
3199
+ msgstr ""
3200
+
3201
+ #: ../lib/io/csv/classes/TribeEventsImporter_AdminPage.php:113
3202
+ msgid "We were unable to process your request. Please try again."
3203
+ msgstr ""
3204
+
3205
+ #: ../lib/io/csv/classes/TribeEventsImporter_AdminPage.php:154
3206
+ msgid "<p>The following fields are required for a successful import:</p>"
3207
+ msgstr ""
3208
+
3209
+ #: ../lib/io/csv/classes/TribeEventsImporter_ColumnMapper.php:33
3210
+ msgid "Do Not Import"
3211
+ msgstr ""
3212
+
3213
+ #: ../lib/io/csv/classes/TribeEventsImporter_ColumnMapper.php:50
3214
+ msgid "Event Name"
3215
+ msgstr ""
3216
+
3217
+ #: ../lib/io/csv/classes/TribeEventsImporter_ColumnMapper.php:51
3218
+ msgid "Event Description"
3219
+ msgstr ""
3220
+
3221
+ #: ../lib/io/csv/classes/TribeEventsImporter_ColumnMapper.php:52
3222
+ msgid "Event Start Date"
3223
+ msgstr ""
3224
+
3225
+ #: ../lib/io/csv/classes/TribeEventsImporter_ColumnMapper.php:53
3226
+ msgid "Event Start Time"
3227
+ msgstr ""
3228
+
3229
+ #: ../lib/io/csv/classes/TribeEventsImporter_ColumnMapper.php:54
3230
+ msgid "Event End Date"
3231
+ msgstr ""
3232
+
3233
+ #: ../lib/io/csv/classes/TribeEventsImporter_ColumnMapper.php:55
3234
+ msgid "Event End Time"
3235
+ msgstr ""
3236
+
3237
+ #: ../lib/io/csv/classes/TribeEventsImporter_ColumnMapper.php:56
3238
+ msgid "All Day Event"
3239
+ msgstr ""
3240
+
3241
+ #: ../lib/io/csv/classes/TribeEventsImporter_ColumnMapper.php:57
3242
+ msgid "Event Venue Name"
3243
+ msgstr ""
3244
+
3245
+ #: ../lib/io/csv/classes/TribeEventsImporter_ColumnMapper.php:58
3246
+ msgid "Event Organizer Name"
3247
+ msgstr ""
3248
+
3249
+ #: ../lib/io/csv/classes/TribeEventsImporter_ColumnMapper.php:59
3250
+ msgid "Event Show Map Link"
3251
+ msgstr ""
3252
+
3253
+ #: ../lib/io/csv/classes/TribeEventsImporter_ColumnMapper.php:60
3254
+ msgid "Event Show Map"
3255
+ msgstr ""
3256
+
3257
+ #: ../lib/io/csv/classes/TribeEventsImporter_ColumnMapper.php:62
3258
+ msgid "Event Phone"
3259
+ msgstr ""
3260
+
3261
+ #: ../lib/io/csv/classes/TribeEventsImporter_ColumnMapper.php:70
3262
+ msgid "Venue Name"
3263
+ msgstr ""
3264
+
3265
+ #: ../lib/io/csv/classes/TribeEventsImporter_ColumnMapper.php:71
3266
+ msgid "Venue Country"
3267
+ msgstr ""
3268
+
3269
+ #: ../lib/io/csv/classes/TribeEventsImporter_ColumnMapper.php:72
3270
+ msgid "Venue Address"
3271
+ msgstr ""
3272
+
3273
+ #: ../lib/io/csv/classes/TribeEventsImporter_ColumnMapper.php:73
3274
+ msgid "Venue Addres 2"
3275
+ msgstr ""
3276
+
3277
+ #: ../lib/io/csv/classes/TribeEventsImporter_ColumnMapper.php:74
3278
+ msgid "Venue City"
3279
+ msgstr ""
3280
+
3281
+ #: ../lib/io/csv/classes/TribeEventsImporter_ColumnMapper.php:75
3282
+ msgid "Venue State/Province"
3283
+ msgstr ""
3284
+
3285
+ #: ../lib/io/csv/classes/TribeEventsImporter_ColumnMapper.php:76
3286
+ msgid "Venue Zip"
3287
+ msgstr ""
3288
+
3289
+ #: ../lib/io/csv/classes/TribeEventsImporter_ColumnMapper.php:77
3290
+ msgid "Venue Phone"
3291
+ msgstr ""
3292
+
3293
+ #: ../lib/io/csv/classes/TribeEventsImporter_ColumnMapper.php:83
3294
+ msgid "Organizer Name"
3295
+ msgstr ""
3296
+
3297
+ #: ../lib/io/csv/classes/TribeEventsImporter_ColumnMapper.php:84
3298
+ msgid "Organizer Email"
3299
+ msgstr ""
3300
+
3301
+ #: ../lib/io/csv/classes/TribeEventsImporter_ColumnMapper.php:85
3302
+ msgid "Organizer Website"
3303
+ msgstr ""
3304
+
3305
+ #: ../lib/io/csv/classes/TribeEventsImporter_ColumnMapper.php:86
3306
+ msgid "Organizer Phone"
3307
+ msgstr ""
3308
+
3309
+ #: ../lib/io/csv/classes/TribeEventsImporter_FileImporter.php:38
3310
+ #, php-format
3311
+ msgid "No importer defined for %s"
3312
+ msgstr ""
3313
+
3314
+ #: ../lib/io/csv/classes/TribeEventsImporter_FileImporter.php:110
3315
+ #, php-format
3316
+ msgid "Missing required fields in row %d."
3317
+ msgstr ""
3318
+
3319
+ #: ../lib/io/csv/classes/TribeEventsImporter_FileImporter.php:117
3320
+ #, php-format
3321
+ msgid "Failed to import record in row %d."
3322
+ msgstr ""
3323
+
3324
+ #: ../lib/io/csv/classes/TribeEventsImporter_FileImporter.php:126
3325
+ #, php-format
3326
+ msgid "%s (post ID %d) updated."
3327
+ msgstr ""
3328
+
3329
+ #: ../lib/io/csv/classes/TribeEventsImporter_FileImporter.php:130
3330
+ #, php-format
3331
+ msgid "%s (post ID %d) created."
3332
+ msgstr ""
3333
+
3334
+ #: ../lib/io/csv/classes/TribeEventsImporter_FileUploader.php:28
3335
+ #, php-format
3336
+ msgid "Temporary file not found. Could not save %s."
3337
+ msgstr ""
3338
+
3339
+ #: ../lib/io/csv/classes/TribeEventsImporter_FileUploader.php:36
3340
+ #, php-format
3341
+ msgid "Could not save %s."
3342
+ msgstr ""
3343
+
3344
+ #: ../lib/template-classes/month.php:112
3345
  #, php-format
3346
  msgid ""
3347
  "There were no results found for <strong>\"%s\"</strong> this month. Try "
3348
  "searching next month."
3349
  msgstr ""
3350
 
3351
+ #: ../lib/template-classes/single-event.php:101
3352
  msgid "This event has passed."
3353
  msgstr ""
3354
 
3383
  msgstr ""
3384
 
3385
  #: ../lib/tickets/tribe-tickets-attendees.php:74
3386
+ #: ../lib/tickets/tribe-tickets-attendees.php:151
3387
+ #: ../lib/tickets/tribe-tickets-attendees.php:207
3388
  msgid "Check in"
3389
  msgstr ""
3390
 
3391
+ #: ../lib/tickets/tribe-tickets-attendees.php:152
3392
+ #: ../lib/tickets/tribe-tickets-attendees.php:207
3393
  msgid "Undo Check in"
3394
  msgstr ""
3395
 
3396
+ #: ../lib/tickets/tribe-tickets-attendees.php:186
3397
  msgid "Print"
3398
  msgstr ""
3399
 
3400
+ #: ../lib/tickets/tribe-tickets-attendees.php:187
3401
  msgid "Email"
3402
  msgstr ""
3403
 
3404
+ #: ../lib/tickets/tribe-tickets-attendees.php:188
3405
  msgid "Export"
3406
  msgstr ""
3407
 
3408
+ #: ../lib/tickets/tribe-tickets-attendees.php:194
3409
  msgid "Filter by ticket #, order # or security code"
3410
  msgstr ""
3411
 
3449
  msgid "Attendee List for: %s"
3450
  msgstr ""
3451
 
3452
+ #: ../lib/tickets/tribe-tickets.php:298
3453
  msgid "Your ticket has been saved."
3454
  msgstr ""
3455
 
3456
+ #: ../lib/tickets/tribe-tickets.php:375
3457
  msgid "Your ticket has been deleted."
3458
  msgstr ""
3459
 
3460
+ #: ../public/advanced-functions/meta.php:39
3461
  msgid "Start:"
3462
  msgstr ""
3463
 
3464
+ #: ../public/advanced-functions/meta.php:46
3465
  msgid "End:"
3466
  msgstr ""
3467
 
3468
+ #: ../public/advanced-functions/meta.php:57
3469
+ #: ../public/advanced-functions/meta.php:67
3470
  msgid "Date:"
3471
  msgstr ""
3472
 
3473
+ #: ../public/advanced-functions/meta.php:76
3474
+ #: ../public/advanced-functions/meta.php:85
3475
+ msgid "Time:"
3476
+ msgstr ""
3477
+
3478
+ #: ../public/advanced-functions/meta.php:270
3479
  msgid "Click to view a Google Map"
3480
  msgstr ""
3481
 
3482
+ #: ../public/advanced-functions/meta.php:271
3483
  msgid "+ Google Map"
3484
  msgstr ""
3485
 
3486
+ #: ../public/advanced-functions/meta.php:282
3487
  msgid "Details"
3488
  msgstr ""
3489
 
3490
+ #: ../public/advanced-functions/meta.php:333
3491
  msgid "Event Tags:"
3492
  msgstr ""
3493
 
3494
+ #: ../public/advanced-functions/meta.php:359
3495
  msgid "Origin:"
3496
  msgstr ""
3497
 
3498
+ #: ../public/advanced-functions/meta.php:496
3499
  msgid "Event:"
3500
  msgstr ""
3501
 
3503
  msgid "Category"
3504
  msgstr ""
3505
 
3506
+ #: ../public/template-tags/general.php:307
3507
  msgid "Tags:"
3508
  msgstr ""
3509
 
3510
+ #: ../public/template-tags/general.php:408
3511
  msgid "Loading Events"
3512
  msgstr ""
3513
 
3514
+ #: ../public/template-tags/general.php:546
3515
  msgid "Free"
3516
  msgstr ""
3517
 
3518
+ #: ../public/template-tags/general.php:718
3519
  msgid "Recurring Event"
3520
  msgstr ""
3521
 
3522
+ #: ../public/template-tags/general.php:721
3523
  msgid "(See all)"
3524
  msgstr ""
3525
 
3526
+ #: ../public/template-tags/general.php:1033
3527
  #, php-format
3528
  msgid "Calendar powered by %sThe Events Calendar%s"
3529
  msgstr ""
3530
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3531
  #: ../public/template-tags/options.php:20
3532
  #, php-format
3533
  msgid "Your current Events URL is %s"
3556
  msgid "Find out more"
3557
  msgstr ""
3558
 
3559
+ #: ../views/modules/bar.php:31 ../views/modules/bar.php:61
3560
  msgid "Find Events"
3561
  msgstr ""
3562
 
lib/io/csv/admin-views/columns.php ADDED
@@ -0,0 +1,78 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * @var string[] $messages
4
+ * @var string $import_type
5
+ * @var string[] $header
6
+ */
7
+ // Don't load directly
8
+ if ( !defined( 'ABSPATH' ) ) {
9
+ die( '-1' );
10
+ }
11
+
12
+ $mapper = new TribeEventsImporter_ColumnMapper( $import_type );
13
+ if ( isset($_POST['column_map']) ) {
14
+ $mapper->set_defaults($_POST['column_map']);
15
+ } else {
16
+ $mapper->set_defaults(get_option('tribe_events_import_column_mapping', array()));
17
+ }
18
+
19
+ require_once 'header.php';
20
+ ?>
21
+
22
+ <h3><?php echo sprintf( __( 'Column Mapping: %s', 'tribe-events-calendar' ), ucwords( $import_type ) ) ?></h3>
23
+
24
+ <?php if ( !empty( $messages ) ): ?>
25
+ <div class="error"><?php echo implode( '', $messages ); ?></div>
26
+ <?php endif; ?>
27
+ <div class="form">
28
+ <p><?php _e( 'Please choose the fields that best match the columns in your CSV file.', 'tribe-events-calendar' ) ?></p>
29
+
30
+ <form method="POST">
31
+ <table class="">
32
+ <thead>
33
+ <th><?php _e( 'Column Headings', 'tribe-events-calendar' ); ?></th>
34
+ <th><?php _e( 'Event Fields', 'tribe-events-calendar' ); ?></th>
35
+ </thead>
36
+ <?php foreach ( $header as $col => $title ): ?>
37
+ <tr>
38
+ <td><?php echo $title ?></td>
39
+ <td><?php echo $mapper->make_select_box( $col ) ?></td>
40
+ </tr>
41
+ <?php endforeach ?>
42
+
43
+ <tr>
44
+ <td colspan="2">
45
+ <?php submit_button(__('Perform Import', 'tribe-events-calendar')); ?>
46
+ </td>
47
+ </tr>
48
+
49
+ </table>
50
+
51
+ <input type="hidden" name="import_type" value="<?php echo $import_type ?>"/>
52
+ <input type="hidden" name="ecp_import_action" value="import"/>
53
+
54
+
55
+ </form>
56
+ </div>
57
+
58
+ <?php
59
+ /* This doesn't seem to do anything. Hiding it for now
60
+ /*<script>
61
+ jQuery(document).ready(function() {
62
+ jQuery('.tribe-events-imnporter-custom-field').css('visibility', 'hidden');
63
+ });
64
+
65
+ function tribeShowCf(field, col){
66
+
67
+ if( jQuery('select[name="column_map['+col+']"]').val() == 'custom_field' ){
68
+ jQuery('select[name="txt_'+col+'"]').css('visibility', 'visible');
69
+ }else{
70
+ jQuery('select[name="txt_'+col+'"]').css('visibility', 'hidden');
71
+ }
72
+
73
+ }
74
+ </script>/* */
75
+ ?>
76
+ <?php
77
+ require_once 'footer.php';
78
+ ?>
lib/io/csv/admin-views/footer.php ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
1
+ <?php
2
+ // Don't load directly
3
+ if ( !defined('ABSPATH') ) { die('-1'); }
4
+ ?>
5
+ </div></div>
lib/io/csv/admin-views/header.php ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ // Don't load directly
3
+ if ( !defined('ABSPATH') ) { die('-1'); }
4
+ ?>
5
+ <style type="text/css">
6
+ div.tribe_settings{
7
+ width:90%;
8
+ }
9
+ </style>
10
+ <div class="tribe_settings wrap">
11
+ <?php screen_icon(); ?><h2><?php _e( 'Events Import (CSV)', 'tribe-events-calendar' ) ?></h2>
12
+ <div class="form">
lib/io/csv/admin-views/import.php ADDED
@@ -0,0 +1,71 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ // Don't load directly
3
+ if ( !defined( 'ABSPATH' ) ) {
4
+ die( '-1' );
5
+ }
6
+
7
+ require_once 'header.php';
8
+ ?>
9
+ <?php if ( !empty( $messages ) ): ?>
10
+ <div class="error">
11
+ <?php foreach ( $messages as $message): ?>
12
+ <p><?php echo $message; ?></p>
13
+ <?php endforeach; ?>
14
+ </div>
15
+ <?php endif; ?>
16
+ <p class="error">
17
+ <strong><?php _e( 'Please import venues and organizers <i>before</i> events.', 'tribe-events-calendar' ) ?></strong>
18
+ </p>
19
+ <p><?php echo _e( '<ol><li><strong>Organizer import requires:</strong> Organizer Name</li><li><strong>Venue import requires:</strong> Venue Name</li><li><strong>Event import requires:</strong> Event Name and Event Start Date</li></ol>', 'tribe-events-calendar' ) ?></p>
20
+ <p><?php _e( 'To begin importing data, please choose the type of import and the CSV file.', 'tribe-events-calendar' ) ?></p>
21
+
22
+ <form method="POST" enctype="multipart/form-data">
23
+ <table class="form-table">
24
+ <tr>
25
+ <td>
26
+ <label title="Import Type">
27
+ <?php _e( 'Import Type:', 'tribe-events-calendar' ) ?>
28
+ <select name="import_type" id="events-import-import-type">
29
+ <option value="venues"><?php _e( 'Venues', 'tribe-events-calendar' ) ?></option>
30
+ <option value="organizers"><?php _e( 'Organizers', 'tribe-events-calendar' ) ?></option>
31
+ <option value="events" selected="selected"><?php _e( 'Events', 'tribe-events-calendar' ) ?></option>
32
+ </select>
33
+ </label>
34
+ </td>
35
+ </tr>
36
+ <tr>
37
+ <td>
38
+ <label title="File">
39
+ <?php _e( 'CSV File:', 'tribe-events-calendar' ) ?>
40
+ <input type="file" name="import_file" id="events-import-csv-file"/>
41
+ </label>
42
+ <p class="description"><?php _e( "Upload a properly formatted, UTF-8 encoded CSV file. Not sure if your file is UTF-8 encoded? Make sure to specify the character encoding when you save the file, or pass it through a <a href='http://i-tools.org/charset/exec?dest=utf-8&src=auto&download=1'>conversion tool</a>.", 'tribe-events-calendar' ); ?></p>
43
+ </td>
44
+ </tr>
45
+
46
+ <tr>
47
+ <td>
48
+ <label title="Header Row">
49
+ <input type="checkbox" name="import_header" value="1" id="events-import-csv-file" checked="checked" />
50
+ <?php _e( 'This file has column names in the first row', 'tribe-events-calendar' ) ?>
51
+ </label>
52
+ </td>
53
+ </tr>
54
+
55
+ </table>
56
+
57
+ <table class="form-table">
58
+ <tr>
59
+ <td>
60
+ <input type="submit" class="button-primary" style=""
61
+ value="<?php _e( 'Import CSV File', 'tribe-events-calendar' ) ?>"/>
62
+ <input type="hidden" name="MAX_FILE_SIZE" value="<?php echo( 2 * 1024 * 1024 ); ?>"/>
63
+ <input type="hidden" name="ecp_import_action" value="map"/>
64
+ </td>
65
+ </tr>
66
+ </table>
67
+ </form>
68
+
69
+ <?php
70
+ require_once 'footer.php';
71
+ ?>
lib/io/csv/admin-views/in-progress.php ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * @var string[] $messages
4
+ */
5
+
6
+ // Don't load directly
7
+ if ( !defined('ABSPATH') ) { die('-1'); }
8
+
9
+
10
+ require_once 'header.php';
11
+ ?>
12
+
13
+ <h3>Importing Data</h3>
14
+
15
+ <ul>
16
+ <?php foreach ( $messages as $message ): ?>
17
+ <li><?php esc_html_e($message); ?></li>
18
+ <?php endforeach; ?>
19
+ </ul>
20
+
21
+ <p>Redirecting...</p>
22
+
23
+ <?php
24
+ require_once 'footer.php';
25
+ ?>
26
+ <script>window.location.href='<?php echo add_query_arg( array('action'=>'continue') ); ?>';</script>
lib/io/csv/admin-views/result.php ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * @var int[] $log Keys: 'created', 'updated', 'skipped'
4
+ * @var int[] $skipped Row IDs of skipped/unparseable rows
5
+ */
6
+
7
+ // Don't load directly
8
+ if ( !defined('ABSPATH') ) { die('-1'); }
9
+
10
+ require_once 'header.php';
11
+ ?>
12
+
13
+ <h3><?php _e( 'Import Result', 'tribe-events-calendar' ) ?></h3>
14
+
15
+ <p><strong><?php _e('Import complete!', 'tribe-events-calendar'); ?></strong></p>
16
+ <ul>
17
+ <li><?php printf(__('Inserted: %d', 'tribe-events-calendar'), $log['created']); ?></li>
18
+ <li><?php printf(__('Updated: %d', 'tribe-events-calendar'), $log['updated']); ?></li>
19
+ <li><?php printf(__('Skipped: %d', 'tribe-events-calendar'), $log['skipped']); ?></li>
20
+ </ul>
21
+
22
+
23
+ <p><?php _e( 'The import statistics above have the following meaning:', 'tribe-events-calendar') ?></p>
24
+ <?php _e( '<ol><li><strong>Inserted:</strong> A new item was inserted successfully.</li><li><strong>Updated:</strong> An item was found with the same name and/or start date. The existing item was updated with the new value from the file.</li><li><strong>Skipped:</strong> A row was found in the CSV file that could not be imported. Please see below for the invalid rows.</li></ol>', 'tribe-events-calendar' ) ?>
25
+
26
+ <?php if ( !empty($skipped) ): ?>
27
+ <p><?php printf(__('Skipped row numbers: %s', 'tribe-events-calendar'), implode(', ', $skipped)); ?></p>
28
+ <?php endif; ?>
29
+
30
+ <?php
31
+ require_once 'footer.php';
32
+ ?>
lib/io/csv/classes/TribeEventsImporter_AdminPage.php ADDED
@@ -0,0 +1,229 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Class TribeEventsImporter_AdminPage
5
+ */
6
+ class TribeEventsImporter_AdminPage {
7
+ private $state = '';
8
+ private $output = '';
9
+ private $messages = array();
10
+ private $errors = array();
11
+
12
+ public function register_admin_page() {
13
+ add_submenu_page(
14
+ 'edit.php?post_type='.TribeEvents::POSTTYPE,
15
+ __('CSV Import','tribe-events-calendar'),
16
+ __('CSV Import','tribe-events-calendar'),
17
+ 'administrator',
18
+ 'events-importer',
19
+ array( $this, 'render_admin_page_contents' )
20
+ );
21
+ }
22
+
23
+ public function render_admin_page_contents() {
24
+ switch ( $this->state ) {
25
+ case 'map':
26
+ try {
27
+ $file = new TribeEventsImporter_FileReader(TribeEventsImporter_FileUploader::get_file_path());
28
+ } catch ( RuntimeException $e ) {
29
+ $this->errors[] = __('The file went away. Please try again.', 'tribe-events-calendar');
30
+ $this->state = '';
31
+ return $this->render_admin_page_contents();
32
+ }
33
+ $header = $file->get_header();
34
+ if ( get_option( 'tribe_events_importer_has_header', 0 ) == 0 ) {
35
+ $letter = 'A';
36
+ $size = count($header);
37
+ $header = array();
38
+ for ( $i = 0 ; $i < $size ; $i++ ) {
39
+ $header[] = $letter++;
40
+ }
41
+ }
42
+ $import_type = get_option( 'tribe_events_import_type' );
43
+ $messages = $this->errors;
44
+ include( TribeEventsImporter_Plugin::path('admin-views/columns.php') );
45
+ break;
46
+ case 'importing':
47
+ $messages = $this->messages;
48
+ include( TribeEventsImporter_Plugin::path('admin-views/in-progress.php') );
49
+ break;
50
+ case 'complete':
51
+ $log = get_option( 'tribe_events_import_log' );
52
+ $skipped = get_option( 'tribe_events_import_failed_rows', array() );
53
+ include( TribeEventsImporter_Plugin::path('admin-views/result.php') );
54
+ break;
55
+ default:
56
+ $messages = $this->errors;
57
+ include( TribeEventsImporter_Plugin::path('admin-views/import.php') );
58
+ break;
59
+ }
60
+ }
61
+
62
+ public function handle_submission() {
63
+ $action = $this->get_action();
64
+ if ( empty($action) ) {
65
+ return;
66
+ }
67
+
68
+ ob_start();
69
+ switch ( $action ) {
70
+ case 'map':
71
+ $this->handle_file_submission();
72
+ break;
73
+
74
+ case 'import':
75
+ if ( $this->handle_column_mapping() ) {
76
+ $this->begin_import();
77
+ } else {
78
+ $this->state = 'map';
79
+ }
80
+ break;
81
+
82
+ case 'continue':
83
+ $this->continue_import();
84
+ break;
85
+
86
+ default:
87
+ // Should never get here.
88
+ break;
89
+ }
90
+ $this->output = ob_get_clean();
91
+ }
92
+
93
+ private function get_action() {
94
+ $action = '';
95
+ if ( isset( $_POST[ 'ecp_import_action' ] ) ) {
96
+ $action = trim( $_POST[ 'ecp_import_action' ] );
97
+ }
98
+ if ( isset($_GET['action']) ) {
99
+ $action = trim( $_GET[ 'action' ] );
100
+ }
101
+ if ( !empty($action) ) {
102
+ if ( !in_array( $action, array('import', 'map', 'continue') ) ) {
103
+ $action = '';
104
+ }
105
+ }
106
+ return $action;
107
+ }
108
+
109
+ private function handle_file_submission() {
110
+ $this->state = 'map';
111
+
112
+ if ( empty($_POST['import_type']) || empty($_FILES['import_file']['name']) ) {
113
+ $this->errors[] = __('We were unable to process your request. Please try again.', 'tribe-events-calendar');
114
+ $this->state = '';
115
+ return;
116
+ }
117
+
118
+ $import_type = $_POST[ 'import_type' ];
119
+ update_option( 'tribe_events_import_type', $import_type );
120
+
121
+ try {
122
+ $file_handler = new TribeEventsImporter_FileUploader($_FILES['import_file']);
123
+ $file_handler->save_file();
124
+ } catch ( RuntimeException $e ) {
125
+ $this->errors[] = $e->getMessage();
126
+ $this->state = '';
127
+ return;
128
+ }
129
+
130
+ if( isset($_POST[ 'import_header' ]) && $_POST[ 'import_header' ] ){
131
+ update_option( 'tribe_events_importer_has_header', 1 );
132
+ } else {
133
+ update_option( 'tribe_events_importer_has_header', 0 );
134
+ }
135
+ }
136
+
137
+ private function handle_column_mapping() {
138
+ // Deconstruct mapping.
139
+ if ( empty($_POST['column_map']) ) {
140
+ return FALSE;
141
+ }
142
+ $column_mapping = $_POST['column_map'];
143
+
144
+ try {
145
+ $importer = $this->get_importer();
146
+ } catch ( RuntimeException $e ) {
147
+ $this->errors[] = __('The file went away. Please try again.', 'tribe-events-calendar');
148
+ return FALSE;
149
+ }
150
+ $required_fields = $importer->get_required_fields();
151
+ $missing = array_diff($required_fields, $column_mapping);
152
+ if ( !empty($missing) ) {
153
+ $mapper = new TribeEventsImporter_ColumnMapper(get_option( 'tribe_events_import_type' ));
154
+ $message = __('<p>The following fields are required for a successful import:</p>', 'tribe-events-calendar');
155
+ $message .= '<ul style="list-style-type: disc; margin-left: 1.5em;">';
156
+ foreach ( $missing as $key ) {
157
+ $message .= '<li>'.$mapper->get_column_label($key).'</li>';
158
+ }
159
+ $message .= '</ul>';
160
+ $this->errors[] = $message;
161
+ return FALSE;
162
+ }
163
+
164
+ update_option('tribe_events_import_column_mapping', $column_mapping);
165
+ return TRUE;
166
+ }
167
+
168
+ private function begin_import() {
169
+ $this->reset_tracking_options();
170
+ $this->continue_import();
171
+ }
172
+
173
+ private function reset_tracking_options() {
174
+ update_option( 'tribe_events_importer_offset', get_option( 'tribe_events_importer_has_header', 0 ) );
175
+ update_option( 'tribe_events_import_log', array( 'updated' => 0, 'created' => 0, 'skipped' => 0 ) );
176
+ update_option( 'tribe_events_import_failed_rows', array() );
177
+ }
178
+
179
+ private function continue_import() {
180
+ $importer = $this->get_importer();
181
+ $offset = get_option('tribe_events_importer_offset');
182
+ if ( $offset == -1 ) {
183
+ $this->state = 'complete';
184
+ $this->clean_up_after_import();
185
+ } else {
186
+ $this->state = 'importing';
187
+ $importer->set_offset($offset);
188
+ $this->do_import($importer);
189
+ $this->log_import_results($importer);
190
+ }
191
+ }
192
+
193
+ private function do_import( TribeEventsImporter_FileImporter $importer ) {
194
+ $importer->do_import();
195
+
196
+ $this->messages = $importer->get_log_messages();
197
+
198
+ $new_offset = $importer->import_complete() ? -1 : $importer->get_last_completed_row();
199
+ update_option('tribe_events_importer_offset', $new_offset);
200
+ }
201
+
202
+ private function get_importer() {
203
+ $type = get_option('tribe_events_import_type');
204
+ $file_reader = new TribeEventsImporter_FileReader(TribeEventsImporter_FileUploader::get_file_path());
205
+ $importer = TribeEventsImporter_FileImporter::get_importer($type, $file_reader);
206
+ $importer->set_map(get_option('tribe_events_import_column_mapping', array()));
207
+ $importer->set_type(get_option('tribe_events_import_type'));
208
+ $importer->set_limit(100);
209
+ $importer->set_offset(get_option('tribe_events_importer_has_header', 0));
210
+ return $importer;
211
+ }
212
+
213
+ private function log_import_results( TribeEventsImporter_FileImporter $importer ) {
214
+ $log = get_option( 'tribe_events_import_log' );
215
+ $log['updated'] += $importer->get_updated_post_count();
216
+ $log['created'] += $importer->get_new_post_count();
217
+ $log['skipped'] += $importer->get_skipped_row_count();
218
+ update_option( 'tribe_events_import_log', $log );
219
+
220
+ $skipped_rows = $importer->get_skipped_row_numbers();
221
+ $previously_skipped_rows = get_option( 'tribe_events_import_failed_rows', array() );
222
+ $skipped_rows = $previously_skipped_rows + $skipped_rows;
223
+ update_option( 'tribe_events_import_failed_rows', $skipped_rows );
224
+ }
225
+
226
+ private function clean_up_after_import() {
227
+ TribeEventsImporter_FileUploader::clear_old_files();
228
+ }
229
+ }
lib/io/csv/classes/TribeEventsImporter_ColumnMapper.php ADDED
@@ -0,0 +1,89 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Class TribeEventsImporter_ColumnMapper
5
+ */
6
+ class TribeEventsImporter_ColumnMapper {
7
+ private $column_names = array();
8
+ private $import_type = '';
9
+ private $defaults = array();
10
+
11
+ public function __construct( $import_type ) {
12
+ $this->import_type = $import_type;
13
+ switch ( $this->import_type ) {
14
+ case 'events':
15
+ $this->column_names = $this->get_event_column_names();
16
+ break;
17
+ case 'venues':
18
+ $this->column_names = $this->get_venue_column_names();
19
+ break;
20
+ case 'organizers':
21
+ $this->column_names = $this->get_organizer_column_names();
22
+ break;
23
+ }
24
+ }
25
+
26
+ public function set_defaults( $defaults ) {
27
+ $this->defaults = $defaults;
28
+ }
29
+
30
+ public function make_select_box( $index ) {
31
+ $selected = isset($this->defaults[$index]) ? $this->defaults[$index] : '';
32
+ $html = '<select name="column_map[' . $index . ']">';
33
+ $html .= '<option value="">' . __( 'Do Not Import', 'tribe-events-calendar' ) . '</option>';
34
+ foreach( $this->column_names as $key => $value ) {
35
+ $html .= sprintf('<option value="%s" %s>%s</option>', esc_attr($key), selected($selected, $key, FALSE), esc_html($value));
36
+ }
37
+ $html .= '</select>';
38
+ return $html;
39
+ }
40
+
41
+ public function get_column_label( $key ) {
42
+ if ( isset($this->column_names[$key]) ) {
43
+ return $this->column_names[$key];
44
+ }
45
+ return '';
46
+ }
47
+
48
+ private function get_event_column_names() {
49
+ return array(
50
+ 'event_name' => __('Event Name', 'tribe-events-calendar'),
51
+ 'event_description' => __('Event Description', 'tribe-events-calendar'),
52
+ 'event_start_date' => __('Event Start Date', 'tribe-events-calendar'),
53
+ 'event_start_time' => __('Event Start Time', 'tribe-events-calendar'),
54
+ 'event_end_date' => __('Event End Date', 'tribe-events-calendar'),
55
+ 'event_end_time' => __('Event End Time', 'tribe-events-calendar'),
56
+ 'event_all_day' => __('All Day Event', 'tribe-events-calendar'),
57
+ 'event_venue_name' => __('Event Venue Name', 'tribe-events-calendar'),
58
+ 'event_organizer_name' => __('Event Organizer Name', 'tribe-events-calendar'),
59
+ 'event_show_map_link' => __('Event Show Map Link', 'tribe-events-calendar'),
60
+ 'event_show_map' => __('Event Show Map', 'tribe-events-calendar'),
61
+ 'event_cost' => __('Event Cost', 'tribe-events-calendar'),
62
+ 'event_phone' => __('Event Phone', 'tribe-events-calendar'),
63
+ 'event_category' => __('Event Category', 'tribe-events-calendar'),
64
+ //'event_hide' => __('Event Hide From Upcoming', 'tribe-events-calendar'),
65
+ );
66
+ }
67
+
68
+ private function get_venue_column_names() {
69
+ return array(
70
+ 'venue_name' => __('Venue Name', 'tribe-events-calendar'),
71
+ 'venue_country' => __('Venue Country', 'tribe-events-calendar'),
72
+ 'venue_address' => __('Venue Address', 'tribe-events-calendar'),
73
+ 'venue_address2' => __('Venue Addres 2', 'tribe-events-calendar'),
74
+ 'venue_city' => __('Venue City', 'tribe-events-calendar'),
75
+ 'venue_state' => __('Venue State/Province', 'tribe-events-calendar'),
76
+ 'venue_zip' => __('Venue Zip', 'tribe-events-calendar'),
77
+ 'venue_phone' => __('Venue Phone', 'tribe-events-calendar'),
78
+ );
79
+ }
80
+
81
+ private function get_organizer_column_names() {
82
+ return array(
83
+ 'organizer_name' => __('Organizer Name', 'tribe-events-calendar'),
84
+ 'organizer_email' => __('Organizer Email', 'tribe-events-calendar'),
85
+ 'organizer_website' => __('Organizer Website', 'tribe-events-calendar'),
86
+ 'organizer_phone' => __('Organizer Phone', 'tribe-events-calendar'),
87
+ );
88
+ }
89
+ }
lib/io/csv/classes/TribeEventsImporter_FileImporter.php ADDED
@@ -0,0 +1,183 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Class TribeEventsImporter_FileImporter
5
+ */
6
+ abstract class TribeEventsImporter_FileImporter {
7
+ protected $required_fields = array();
8
+
9
+ /** @var TribeEventsImporter_FileReader */
10
+ private $reader = NULL;
11
+ private $map = array();
12
+ private $inverted_map = array();
13
+ private $type = '';
14
+ private $limit = 100;
15
+ private $offset = 0;
16
+ private $errors = array();
17
+ private $updated = 0;
18
+ private $created = 0;
19
+ private $skipped = array();
20
+ private $log = array();
21
+
22
+ /**
23
+ * @param string $type
24
+ * @param TribeEventsImporter_FileReader $file_reader
25
+ *
26
+ * @return TribeEventsImporter_FileImporter
27
+ * @throws InvalidArgumentException
28
+ */
29
+ public static function get_importer( $type, TribeEventsImporter_FileReader $file_reader ) {
30
+ switch ( $type ) {
31
+ case 'events':
32
+ return new TribeEventsImporter_FileImporter_Events($file_reader);
33
+ case 'venues':
34
+ return new TribeEventsImporter_FileImporter_Venues($file_reader);
35
+ case 'organizers':
36
+ return new TribeEventsImporter_FileImporter_Organizers($file_reader);
37
+ default:
38
+ throw new InvalidArgumentException(sprintf(__('No importer defined for %s', 'tribe-events-calendar'), $type));
39
+ }
40
+ }
41
+
42
+ /**
43
+ * @param TribeEventsImporter_FileReader $file_reader
44
+ */
45
+ public function __construct( TribeEventsImporter_FileReader $file_reader ) {
46
+ $this->reader = $file_reader;
47
+ }
48
+
49
+ public function set_map( array $map_array ) {
50
+ $this->map = $map_array;
51
+ $this->inverted_map = array_flip($this->map);
52
+ }
53
+
54
+ public function set_type( $type ) {
55
+ $this->type = $type;
56
+ }
57
+
58
+ public function set_limit( $limit ) {
59
+ $this->limit = (int)$limit;
60
+ }
61
+
62
+ public function set_offset( $offset ) {
63
+ $this->offset = (int)$offset;
64
+ }
65
+
66
+ public function do_import() {
67
+ $this->reader->set_row($this->offset);
68
+ for ( $i = 0 ; $i < $this->limit && !$this->import_complete() ; $i++ ) {
69
+ set_time_limit( 30 );
70
+ $this->import_next_row();
71
+ }
72
+ }
73
+
74
+ public function get_last_completed_row() {
75
+ return $this->reader->get_last_line_number_read()+1;
76
+ }
77
+
78
+ public function import_complete() {
79
+ return $this->reader->at_end_of_file();
80
+ }
81
+
82
+ public function get_updated_post_count() {
83
+ return $this->updated;
84
+ }
85
+
86
+ public function get_new_post_count() {
87
+ return $this->created;
88
+ }
89
+
90
+ public function get_skipped_row_count() {
91
+ return count($this->skipped);
92
+ }
93
+
94
+ public function get_skipped_row_numbers() {
95
+ return $this->skipped;
96
+ }
97
+
98
+ public function get_log_messages() {
99
+ return $this->log;
100
+ }
101
+
102
+ public function get_required_fields() {
103
+ return $this->required_fields;
104
+ }
105
+
106
+ protected function import_next_row() {
107
+ $record = $this->reader->read_next_row();
108
+ $row = $this->reader->get_last_line_number_read()+1;
109
+ if ( !$this->is_valid_record($record) ) {
110
+ $this->log[$row] = sprintf(__('Missing required fields in row %d.', 'tribe-events-calendar', $row));
111
+ $this->skipped[] = $row;
112
+ return;
113
+ }
114
+ try {
115
+ $this->update_or_create_post($record);
116
+ } catch ( Exception $e ) {
117
+ $this->log[$row] = sprintf(__('Failed to import record in row %d.', 'tribe-events-calendar'), $row);
118
+ $this->skipped[] = $row;
119
+ }
120
+ }
121
+
122
+ protected function update_or_create_post( array $record ) {
123
+ if ( $id = $this->match_existing_post($record) ) {
124
+ $this->update_post($id, $record);
125
+ $this->updated++;
126
+ $this->log[$this->reader->get_last_line_number_read()+1] = sprintf( __('%s (post ID %d) updated.', 'tribe-events-calendar'), get_the_title($id), $id );
127
+ } else {
128
+ $id = $this->create_post($record);
129
+ $this->created++;
130
+ $this->log[$this->reader->get_last_line_number_read()+1] = sprintf( __('%s (post ID %d) created.', 'tribe-events-calendar'), get_the_title($id), $id );
131
+ }
132
+ }
133
+
134
+ abstract protected function match_existing_post( array $record );
135
+
136
+ abstract protected function update_post( $post_id, array $record );
137
+
138
+ abstract protected function create_post( array $record );
139
+
140
+ protected function is_valid_record( array $record ) {
141
+ foreach ( $this->get_required_fields() as $field ) {
142
+ if ( $this->get_value_by_key( $record, $field ) == '' ) {
143
+ return FALSE;
144
+ }
145
+ }
146
+ return TRUE;
147
+ }
148
+
149
+ protected function get_value_by_key( array $record, $key ) {
150
+ if ( !isset($this->inverted_map[$key]) ) {
151
+ return '';
152
+ }
153
+ if ( !isset($record[$this->inverted_map[$key]]) ) {
154
+ return '';
155
+ }
156
+ return $record[$this->inverted_map[$key]];
157
+ }
158
+
159
+ protected function find_matching_post_id( $name, $post_type ) {
160
+ if ( empty( $name ) ) {
161
+ return 0;
162
+ }
163
+ $query_args = array(
164
+ 'post_type' => $post_type,
165
+ 'post_status' => 'publish',
166
+ 'post_title' => $name,
167
+ 'fields' => 'ids',
168
+ );
169
+ add_filter( 'posts_search', array( $this, 'filter_query_for_title_search' ), 10, 2 );
170
+ $ids = get_posts( $query_args );
171
+ remove_filter( 'posts_search', array( $this, 'filter_query_for_title_search' ), 10, 2 );
172
+ return empty( $ids ) ? 0 : reset( $ids );
173
+ }
174
+
175
+ public function filter_query_for_title_search( $search, WP_Query $wp_query ) {
176
+ $title = $wp_query->get('post_title');
177
+ if ( !empty($title) ) {
178
+ global $wpdb;
179
+ $search .= $wpdb->prepare(" AND {$wpdb->posts}.post_title=%s", $title);
180
+ }
181
+ return $search;
182
+ }
183
+ }
lib/io/csv/classes/TribeEventsImporter_FileImporter_Events.php ADDED
@@ -0,0 +1,165 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Class TribeEventsImporter_FileImporter_Events
5
+ */
6
+ class TribeEventsImporter_FileImporter_Events extends TribeEventsImporter_FileImporter {
7
+
8
+ protected $required_fields = array('event_name', 'event_start_date');
9
+
10
+ protected function match_existing_post( array $record ) {
11
+ $start_date = $this->get_event_start_date( $record );
12
+ $end_date = $this->get_event_end_date( $record );
13
+ $query_args = array(
14
+ 'post_type' => TribeEvents::POSTTYPE,
15
+ 'post_title' => $this->get_value_by_key( $record, 'event_name' ),
16
+ 'meta_query' => array(
17
+ array(
18
+ 'key' => '_EventStartDate',
19
+ 'value' => $start_date,
20
+ ),
21
+ ),
22
+ 'fields' => 'ids',
23
+ 'posts_per_page' => 1,
24
+ );
25
+ if ( !empty($end_date) ) {
26
+ $query_args['meta_query'][] = array(
27
+ 'key' => '_EventEndDate',
28
+ 'value' => $end_date,
29
+ );
30
+ }
31
+ add_filter( 'posts_search', array( $this, 'filter_query_for_title_search' ), 10, 2 );
32
+ $matches = get_posts($query_args);
33
+ remove_filter( 'posts_search', array( $this, 'filter_query_for_title_search' ), 10, 2 );
34
+ if ( empty($matches) ) {
35
+ return 0;
36
+ }
37
+ return reset($matches);
38
+ }
39
+
40
+ protected function update_post( $post_id, array $record ) {
41
+ $event = $this->build_event_array( $record );
42
+ TribeEventsAPI::updateEvent( $post_id, $event );
43
+ }
44
+
45
+
46
+ protected function create_post( array $record ) {
47
+ $event = $this->build_event_array( $record );
48
+ $id = TribeEventsAPI::createEvent( $event );
49
+ return $id;
50
+ }
51
+
52
+ private function get_event_start_date( array $record ) {
53
+ $start_date = $this->get_value_by_key( $record, 'event_start_date' );
54
+ $start_time = $this->get_value_by_key( $record, 'event_start_time' );
55
+ if ( !empty($start_time) ) {
56
+ $start_date .= ' '.$start_time;
57
+ }
58
+ $start_date = date('Y-m-d H:i:s', strtotime($start_date));
59
+ return $start_date;
60
+ }
61
+
62
+ private function get_event_end_date( array $record ) {
63
+ $end_date = $this->get_value_by_key( $record, 'event_end_date' );
64
+ $end_time = $this->get_value_by_key( $record, 'event_end_time' );
65
+ if ( !empty($end_time) ) {
66
+ $end_date .= ' '.$end_time;
67
+ }
68
+ if ( !empty($end_date) ) {
69
+ $end_date = date('Y-m-d H:i:s', strtotime($end_date));
70
+ }
71
+ $start_date = $this->get_event_start_date( $record );
72
+ if ( $end_date < $start_date ) {
73
+ $end_date = $start_date;
74
+ }
75
+ return $end_date;
76
+ }
77
+
78
+ private function is_all_day( array $record ) {
79
+ $all_day = FALSE;
80
+ if ( in_array(strtolower($this->get_value_by_key( $record, 'event_all_day' )), array('yes', 'true', '1')) ) {
81
+ $all_day = TRUE;
82
+ }
83
+ return $all_day;
84
+ }
85
+
86
+ private function build_event_array( array $record ) {
87
+ $start_date = strtotime($this->get_event_start_date($record));
88
+ $end_date = strtotime($this->get_event_end_date($record));
89
+ $all_day = $this->is_all_day( $record ) ? 'yes' : NULL;
90
+
91
+ $event = array(
92
+ 'post_type' => TribeEvents::POSTTYPE,
93
+ 'post_title' => $this->get_value_by_key( $record, 'event_name' ),
94
+ 'post_status' => 'publish',
95
+ 'post_content' => $this->get_value_by_key( $record, 'event_description' ),
96
+ 'EventStartDate' => date( 'Y-m-d', $start_date ),
97
+ 'EventStartHour' => date( 'h', $start_date ),
98
+ 'EventStartMinute' => date( 'i', $start_date ),
99
+ 'EventStartMeridian' => date( 'a', $start_date ),
100
+ 'EventEndDate' => date( 'Y-m-d', $end_date ),
101
+ 'EventEndHour' => date( 'h', $end_date ),
102
+ 'EventEndMinute' => date( 'i', $end_date ),
103
+ 'EventEndMeridian' => date( 'a', $end_date ),
104
+ 'EventShowMapLink' => $this->get_value_by_key( $record, 'event_show_map_link' ),
105
+ 'EventShowMap' => $this->get_value_by_key( $record, 'event_show_map' ),
106
+ 'EventCost' => $this->get_value_by_key( $record, 'event_cost' ),
107
+ 'EventAllDay' => $all_day,
108
+ 'EventHideFromUpcoming' => $this->get_value_by_key( $record, 'event_hide' )
109
+ );
110
+
111
+ if ( $organizer_id = $this->find_matching_organizer_id($record) ) {
112
+ $event['Organizer'] = array( 'OrganizerID' => $organizer_id );
113
+ }
114
+
115
+ if ( $venue_id = $this->find_matching_venue_id($record) ) {
116
+ $event['Venue'] = array( 'VenueID' => $venue_id );
117
+ }
118
+
119
+ if ( $cats = $this->get_value_by_key( $record, 'event_category' ) ) {
120
+ $event['tax_input'][TribeEvents::TAXONOMY] = $this->translate_terms_to_ids(explode(',',$cats));
121
+ }
122
+
123
+ return $event;
124
+
125
+ }
126
+
127
+ private function find_matching_organizer_id( $record ) {
128
+ $name = $this->get_value_by_key( $record, 'event_organizer_name' );
129
+ return $this->find_matching_post_id( $name, TribeEvents::ORGANIZER_POST_TYPE );
130
+ }
131
+
132
+ private function find_matching_venue_id( $record ) {
133
+ $name = $this->get_value_by_key( $record, 'event_venue_name' );
134
+ return $this->find_matching_post_id( $name, TribeEvents::VENUE_POST_TYPE );
135
+ }
136
+
137
+ /**
138
+ * When passing terms to wp_insert_post(), we're required to have IDs
139
+ * for hierarchical taxonomies, not strings
140
+ *
141
+ * @param array $terms
142
+ * @return int[]
143
+ */
144
+ private function translate_terms_to_ids( array $terms ) {
145
+ $term_ids = array();
146
+ // duplicating some code from wp_set_object_terms()
147
+ foreach ( $terms as $term) {
148
+ if ( !strlen(trim($term)) )
149
+ continue;
150
+
151
+ if ( !$term_info = term_exists($term, TribeEvents::TAXONOMY) ) {
152
+ // Skip if a non-existent term ID is passed.
153
+ if ( is_int($term) )
154
+ continue;
155
+ $term_info = wp_insert_term($term, TribeEvents::TAXONOMY);
156
+ }
157
+ if ( is_wp_error($term_info) ) {
158
+ continue;
159
+ }
160
+ $term_ids[] = $term_info['term_id'];
161
+ }
162
+ return $term_ids;
163
+ }
164
+
165
+ }
lib/io/csv/classes/TribeEventsImporter_FileImporter_Organizers.php ADDED
@@ -0,0 +1,46 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Class TribeEventsImporter_FileImporter_Organizers
5
+ */
6
+ class TribeEventsImporter_FileImporter_Organizers extends TribeEventsImporter_FileImporter {
7
+
8
+ protected $required_fields = array('organizer_name');
9
+
10
+ protected function match_existing_post( array $record ) {
11
+ $name = $this->get_value_by_key( $record, 'organizer_name' );
12
+ $id = $this->find_matching_post_id( $name, TribeEvents::ORGANIZER_POST_TYPE );
13
+ return $id;
14
+ }
15
+
16
+ protected function update_post( $post_id, array $record ) {
17
+ $this->hack_to_remove_broken_filters();
18
+ $organizer = $this->build_organizer_array( $record );
19
+ TribeEventsAPI::updateOrganizer( $post_id, $organizer );
20
+ }
21
+
22
+ protected function create_post( array $record ) {
23
+ $this->hack_to_remove_broken_filters();
24
+ $organizer = $this->build_organizer_array( $record );
25
+ $id = TribeEventsAPI::createOrganizer( $organizer );
26
+ return $id;
27
+ }
28
+
29
+ private function build_organizer_array( array $record ) {
30
+ $organizer = array(
31
+ 'Organizer' => $this->get_value_by_key( $record, 'organizer_name' ),
32
+ 'Email' => $this->get_value_by_key( $record, 'organizer_email' ),
33
+ 'Phone' => $this->get_value_by_key( $record, 'organizer_phone' ),
34
+ 'Website' => $this->get_value_by_key( $record, 'organizer_website' ),
35
+ );
36
+ return $organizer;
37
+ }
38
+
39
+ private function hack_to_remove_broken_filters() {
40
+ // a stupid hack for some stupid code
41
+ // the callback will automatically replace every organizer title with "Unnamed Organizer"
42
+ $TribeEvents = TribeEvents::instance();
43
+ remove_action( 'save_post', array( $TribeEvents, 'save_organizer_data' ), 16, 2 );
44
+ }
45
+
46
+ }
lib/io/csv/classes/TribeEventsImporter_FileImporter_Venues.php ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Class TribeEventsImporter_FileImporter_Venues
5
+ */
6
+ class TribeEventsImporter_FileImporter_Venues extends TribeEventsImporter_FileImporter {
7
+
8
+ protected $required_fields = array('venue_name');
9
+
10
+ protected function match_existing_post( array $record ) {
11
+ $name = $this->get_value_by_key( $record, 'venue_name' );
12
+ $id = $this->find_matching_post_id( $name, TribeEvents::VENUE_POST_TYPE );
13
+ return $id;
14
+ }
15
+
16
+ protected function update_post( $post_id, array $record ) {
17
+ $this->hack_to_remove_broken_filters();
18
+ $venue = $this->build_venue_array( $record );
19
+ TribeEventsAPI::updateVenue( $post_id, $venue );
20
+ }
21
+
22
+ protected function create_post( array $record ) {
23
+ $this->hack_to_remove_broken_filters();
24
+ $venue = $this->build_venue_array( $record );
25
+ $id = TribeEventsAPI::createVenue( $venue );
26
+ return $id;
27
+ }
28
+
29
+ private function build_venue_array( array $record ) {
30
+ $venue_address = trim( $this->get_value_by_key( $record, 'venue_address' ) . ' ' . $this->get_value_by_key( $record, 'venue_address2' ) );
31
+ $venue = array(
32
+ 'Venue' => $this->get_value_by_key( $record, 'venue_name' ),
33
+ 'Address' => $venue_address,
34
+ 'City' => $this->get_value_by_key( $record, 'venue_city' ),
35
+ 'Country' => $this->get_value_by_key( $record, 'venue_country' ),
36
+ 'Province' => $this->get_value_by_key( $record, 'venue_state' ),
37
+ 'State' => $this->get_value_by_key( $record, 'venue_state' ),
38
+ 'Zip' => $this->get_value_by_key( $record, 'venue_zip' ),
39
+ 'Phone' => $this->get_value_by_key( $record, 'venue_phone' ),
40
+ );
41
+ if ( empty($venue['Country']) ) {
42
+ $venue['Country'] = 'United States';
43
+ }
44
+ return $venue;
45
+ }
46
+
47
+ private function hack_to_remove_broken_filters() {
48
+ // a stupid hack for some stupid code
49
+ // the callback will automatically replace every Venue title with "Unnamed Venue"
50
+ $TribeEvents = TribeEvents::instance();
51
+ remove_action( 'save_post', array( $TribeEvents, 'save_venue_data' ), 16, 2 );
52
+ }
53
+
54
+ }
lib/io/csv/classes/TribeEventsImporter_FileReader.php ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Class TribeEventsImporter_FileReader
5
+ */
6
+ class TribeEventsImporter_FileReader {
7
+ private $path = '';
8
+ private $file = NULL;
9
+ private $last_line_read = 0;
10
+
11
+ public function __construct( $file_path ) {
12
+ ini_set("auto_detect_line_endings", true);
13
+ $this->path = $file_path;
14
+ $this->file = new SplFileObject($this->path);
15
+ $this->file->setFlags(SplFileObject::SKIP_EMPTY|SplFileObject::READ_CSV|SplFileObject::READ_AHEAD|SplFileObject::DROP_NEW_LINE);
16
+ }
17
+
18
+ public function __destruct() {
19
+ $this->file = NULL;
20
+ }
21
+
22
+ public function get_header() {
23
+ $this->file->rewind();
24
+ $row = $this->file->current();
25
+ return $row;
26
+ }
27
+
28
+ public function set_row( $row_number ) {
29
+ $this->file->seek($row_number);
30
+ }
31
+
32
+ public function read_row( $row_number ) {
33
+ $this->set_row($row_number);
34
+ return $this->read_next_row();
35
+ }
36
+
37
+ public function read_next_row() {
38
+ $this->last_line_read = $this->file->key();
39
+ if ( !$this->file->valid() ) {
40
+ return array();
41
+ }
42
+ $row = $this->file->current();
43
+ $this->file->next();
44
+ return $row;
45
+ }
46
+
47
+ public function get_last_line_number_read() {
48
+ return $this->last_line_read;
49
+ }
50
+
51
+ public function at_end_of_file() {
52
+ return !$this->file->valid();
53
+ }
54
+ }
lib/io/csv/classes/TribeEventsImporter_FileUploader.php ADDED
@@ -0,0 +1,63 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Class TribeEventsImporter_FileUploader
5
+ */
6
+ class TribeEventsImporter_FileUploader {
7
+ private $name = '';
8
+ private $type = '';
9
+ private $tmp_name = '';
10
+ private $error = 0;
11
+ private $size = 0;
12
+
13
+ public function __construct( $file_array ) {
14
+ $this->name = $file_array['name'];
15
+ $this->type = $file_array['type'];
16
+ $this->tmp_name = $file_array['tmp_name'];
17
+ $this->error = $file_array['error'];
18
+ $this->size = $file_array['size'];
19
+ }
20
+
21
+ public function save_file() {
22
+ $this->validate_temporary_file();
23
+ $this->permanently_save_file();
24
+ }
25
+
26
+ private function validate_temporary_file() {
27
+ if ( !file_exists($this->tmp_name) ) {
28
+ throw new RuntimeException( sprintf(__('Temporary file not found. Could not save %s.', 'tribe-events-calendar'), $this->name));
29
+ }
30
+ }
31
+
32
+ private function permanently_save_file() {
33
+ self::clear_old_files();
34
+ $moved = move_uploaded_file( $this->tmp_name, self::get_file_path() );
35
+ if ( !$moved ) {
36
+ throw new RuntimeException( sprintf(__('Could not save %s.', 'tribe-events-calendar'), $this->name));
37
+ }
38
+ }
39
+
40
+ public static function clear_old_files() {
41
+ $path = self::get_file_path();
42
+ if ( file_exists($path) ) {
43
+ unlink($path);
44
+ }
45
+
46
+ $dir = self::get_upload_directory();
47
+ rmdir($dir);
48
+ }
49
+
50
+ public static function get_file_path() {
51
+ $path = trailingslashit(self::get_upload_directory());
52
+ $path .= 'tribe-import.csv';
53
+ return $path;
54
+ }
55
+
56
+ private static function get_upload_directory() {
57
+ $upload_dir_array = wp_upload_dir();
58
+ $path = $upload_dir_array['basedir'];
59
+ $path = trailingslashit($path).'tribe-importer';
60
+ wp_mkdir_p($path);
61
+ return $path;
62
+ }
63
+ }
lib/io/csv/classes/TribeEventsImporter_Plugin.php ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Class TribeEventsImporter_Plugin
5
+ */
6
+ class TribeEventsImporter_Plugin {
7
+ private static $plugin_basename = '';
8
+ /** @var TribeEventsImporter_AdminPage */
9
+ private static $admin = NULL;
10
+
11
+ public static function path( $path ) {
12
+ $base = dirname(dirname(__FILE__));
13
+ $path = $base . DIRECTORY_SEPARATOR . $path;
14
+ return untrailingslashit($path);
15
+ }
16
+
17
+ public static function set_plugin_basename( $basename ) {
18
+ self::$plugin_basename = $basename;
19
+ }
20
+
21
+ public static function initialize_admin() {
22
+ self::$admin = new TribeEventsImporter_AdminPage();
23
+ add_action( 'admin_menu', array( self::$admin, 'register_admin_page' ) );
24
+ add_action( 'load-tribe_events_page_events-importer', array( self::$admin, 'handle_submission' ) );
25
+ }
26
+
27
+ public static function get_admin_object() {
28
+ return self::$admin;
29
+ }
30
+ }
lib/io/csv/ecp-events-importer.php ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ if ( !function_exists( 'Tribe_Events_Importer_Load' ) ) {
4
+
5
+ function Tribe_Events_Importer_Load() {
6
+ TribeEventsImporter_Plugin::set_plugin_basename(plugin_basename(__FILE__));
7
+ if ( is_admin() ) {
8
+ add_action( 'init', array('TribeEventsImporter_Plugin', 'initialize_admin'), 10, 0 );
9
+ }
10
+ }
11
+
12
+ add_action( 'plugins_loaded', 'Tribe_Events_Importer_Load' );
13
+
14
+ function TribeEventsImporter_autoload( $classname ) {
15
+ if ( strpos( $classname, 'TribeEventsImporter' ) === 0 ) {
16
+ $path = dirname( __FILE__ ) . DIRECTORY_SEPARATOR . 'classes' . DIRECTORY_SEPARATOR . $classname . '.php';
17
+ if ( file_exists( $path ) ) {
18
+ include( $path );
19
+ }
20
+ }
21
+ }
22
+
23
+ spl_autoload_register( 'TribeEventsImporter_autoload' );
24
+ }
lib/template-classes/month.php CHANGED
@@ -92,18 +92,28 @@ if( !class_exists('Tribe_Events_Month_Template')){
92
  **/
93
  public function set_notices() {
94
  global $wp_query;
 
 
95
  // setup a search term for query or via ajax
96
- if( !empty( $wp_query->query_vars['s'] )){
97
  $search_term = $wp_query->query_vars['s'];
98
- } else if( !empty($_POST['tribe-bar-search'])) {
99
- $search_term = $_POST['tribe-bar-search'];
 
100
  }
101
 
102
- $total_counts = array_unique(self::$event_daily_counts);
 
 
 
 
103
 
104
- if( count($total_counts) < 2 && !empty($search_term)) {
105
  TribeEvents::setNotice( 'event-search-no-results', sprintf( __( 'There were no results found for <strong>"%s"</strong> this month. Try searching next month.', 'tribe-events-calendar' ), esc_html( $search_term ) ) );
106
  }
 
 
 
107
  }
108
 
109
 
@@ -130,6 +140,13 @@ if( !class_exists('Tribe_Events_Month_Template')){
130
 
131
  self::$event_daily_counts = $result['counts'];
132
  self::$event_daily_ids = $result['event_ids'];
 
 
 
 
 
 
 
133
  }
134
 
135
 
@@ -182,20 +199,20 @@ if( !class_exists('Tribe_Events_Month_Template')){
182
  * @since 3.0
183
  **/
184
  public function setup_view() {
 
185
 
186
- $tribe_ecp = TribeEvents::instance();
187
- $tribe_ecp->date = isset( self::$args['eventDate'] ) ? self::$args['eventDate'] : tribe_get_month_view_date();
188
 
189
- do_action('log', 'eventDate', 'tribe-events-query', $tribe_ecp->date);
190
 
191
  // get all upcoming ids to hide so we're not querying 31 times
192
  self::$hide_upcoming_ids = TribeEventsQuery::getHideFromUpcomingEvents();
193
 
194
- list( $year, $month ) = explode( '-', $tribe_ecp->date );
 
195
 
196
  $startOfWeek = get_option( 'start_of_week', 0 );
197
 
198
- $first_day_of_month = date( 'Y-m-01', strtotime( $tribe_ecp->date ) );
199
 
200
  self::get_daily_counts($first_day_of_month);
201
 
@@ -216,14 +233,14 @@ if( !class_exists('Tribe_Events_Month_Template')){
216
  $days = array();
217
 
218
  // setup counters
219
- $rawOffset = date( 'w', strtotime($tribe_ecp->date) ) - $startOfWeek;
220
  $prev_month_offset = (int) ( ( $rawOffset < 0 ) ? $rawOffset + 7 : $rawOffset ); // month begins on day x
221
- $days_in_month = (int) date( 't', strtotime($tribe_ecp->date) );
222
  $days_in_calendar = $days_in_month + $prev_month_offset;
223
  while ($days_in_calendar % 7 > 0) {
224
  $days_in_calendar++;
225
  }
226
- $week = 0;
227
  $cur_calendar_day = 0;
228
 
229
  // fill month with required days for previous month
@@ -406,7 +423,7 @@ if( !class_exists('Tribe_Events_Month_Template')){
406
  if ($day['events']->current_post + 1 == $day['events']->post_count) {
407
  $classes[] = 'tribe-events-last';
408
  }
409
-
410
  return $classes;
411
  }
412
  } // class Tribe_Events_Month_Template
92
  **/
93
  public function set_notices() {
94
  global $wp_query;
95
+ $search_term = '';
96
+
97
  // setup a search term for query or via ajax
98
+ if ( ! empty( $wp_query->query_vars['s'] ) ) {
99
  $search_term = $wp_query->query_vars['s'];
100
+ }
101
+ elseif ( ! empty($_REQUEST['tribe-bar-search'] ) ) {
102
+ $search_term = $_REQUEST['tribe-bar-search'];
103
  }
104
 
105
+ // If there are no events we should be able to reduce the event_daily_counts array (the number of events in
106
+ // each day this month) to a single element with a value of 0. Where a keyword search returns no events then
107
+ // event_daily_counts may simply be empty.
108
+ $event_counts = array_unique(self::$event_daily_counts);
109
+ $no_events = ( 1 === count($event_counts) && 0 === current($event_counts) ) || empty(self::$event_daily_counts);
110
 
111
+ if ( $no_events && ! empty($search_term)) {
112
  TribeEvents::setNotice( 'event-search-no-results', sprintf( __( 'There were no results found for <strong>"%s"</strong> this month. Try searching next month.', 'tribe-events-calendar' ), esc_html( $search_term ) ) );
113
  }
114
+ elseif ( $no_events ) {
115
+ TribeEvents::setNotice( 'event-search-no-results', __( 'There were no results found.', 'tribe-events-calendar-pro' ) );
116
+ }
117
  }
118
 
119
 
140
 
141
  self::$event_daily_counts = $result['counts'];
142
  self::$event_daily_ids = $result['event_ids'];
143
+
144
+ foreach ( self::$event_daily_counts as $daily_count ) {
145
+ if ( $daily_count > 0 ) {
146
+ add_filter( 'tribe_events_month_has_events', '__return_true' );
147
+ break;
148
+ }
149
+ }
150
  }
151
 
152
 
199
  * @since 3.0
200
  **/
201
  public function setup_view() {
202
+ $requested_date = isset( self::$args['eventDate'] ) ? self::$args['eventDate'] : tribe_get_month_view_date();
203
 
204
+ $first_day_of_month = date( 'Y-m-01', strtotime( $requested_date ) );
 
205
 
206
+ do_action('log', 'eventDate', 'tribe-events-query', $first_day_of_month);
207
 
208
  // get all upcoming ids to hide so we're not querying 31 times
209
  self::$hide_upcoming_ids = TribeEventsQuery::getHideFromUpcomingEvents();
210
 
211
+ $year = date('Y', strtotime($first_day_of_month));
212
+ $month = date('m', strtotime($first_day_of_month));
213
 
214
  $startOfWeek = get_option( 'start_of_week', 0 );
215
 
 
216
 
217
  self::get_daily_counts($first_day_of_month);
218
 
233
  $days = array();
234
 
235
  // setup counters
236
+ $rawOffset = date( 'w', strtotime($first_day_of_month) ) - $startOfWeek;
237
  $prev_month_offset = (int) ( ( $rawOffset < 0 ) ? $rawOffset + 7 : $rawOffset ); // month begins on day x
238
+ $days_in_month = (int) date( 't', strtotime($first_day_of_month) );
239
  $days_in_calendar = $days_in_month + $prev_month_offset;
240
  while ($days_in_calendar % 7 > 0) {
241
  $days_in_calendar++;
242
  }
243
+
244
  $cur_calendar_day = 0;
245
 
246
  // fill month with required days for previous month
423
  if ($day['events']->current_post + 1 == $day['events']->post_count) {
424
  $classes[] = 'tribe-events-last';
425
  }
426
+
427
  return $classes;
428
  }
429
  } // class Tribe_Events_Month_Template
lib/template-classes/month.php.orig DELETED
@@ -1,417 +0,0 @@
1
- <?php
2
- /**
3
- * @for Calendar Template
4
- * This file contains the hook logic required to create an effective calendar month view.
5
- *
6
- * @package TribeEventsCalendar
7
- * @since 2.1
8
- * @author Modern Tribe Inc.
9
- *
10
- */
11
-
12
- if ( !defined('ABSPATH') ) { die('-1'); }
13
-
14
- if( !class_exists('Tribe_Events_Month_Template')){
15
- /**
16
- * Grid view template class
17
- */
18
- class Tribe_Events_Month_Template extends Tribe_Template_Factory {
19
- private static $hide_upcoming_ids;
20
- private static $today;
21
- private static $current_month;
22
- private static $current_year;
23
- private static $event_daily_counts = array();
24
- private static $event_daily_ids = array();
25
- private static $first_day_of_month = null;
26
- private static $posts_per_page_limit = 3;
27
- private static $tribe_bar_args = array();
28
- private static $cache_expiration = 3600;
29
- private static $calendar_days = array();
30
- private static $current_day = -1;
31
- private static $current_week = -1;
32
- protected static $args;
33
- protected $body_class = 'events-gridview';
34
- protected $excerpt_length = 30;
35
- protected $asset_packages = array( 'ajax-calendar' );
36
-
37
- /**
38
- * Set the notices used on month view
39
- *
40
- * @param array $args Set of $wp_query params for the month view, if none passed then will default to $wp_query
41
- * @since 3.0
42
- */
43
- public function __construct( $args = null ) {
44
- if ( $args === null ) {
45
- global $wp_query;
46
- $args = $wp_query->query;
47
- }
48
-
49
- self::$args = $args;
50
- self::$posts_per_page_limit = apply_filters( 'tribe_events_month_day_limit', tribe_get_option( 'monthEventAmount', '3' ) );
51
-
52
- // don't enqueue scripts and js when we're not constructing month view,
53
- // they'll have to be enqueued separately
54
- if ( ! tribe_is_month() ) {
55
- $this->asset_packages = array();
56
- }
57
-
58
- parent::__construct();
59
- }
60
-
61
- /**
62
- * Add any special hooks for this view
63
- *
64
- * @return void
65
- * @author Jessica Yazbek
66
- * @since 3.0.2
67
- **/
68
- protected function hooks() {
69
- parent::hooks();
70
-
71
- // Since we set is_post_type_archive to true on month view, this prevents 'Events' from being added to the page title
72
- add_filter('post_type_archive_title', '__return_false', 10);
73
- }
74
-
75
- /**
76
- * Unhook all the hooks set up on this view
77
- *
78
- * @return void
79
- * @author
80
- **/
81
- protected function unhook() {
82
- parent::unhook();
83
- remove_filter('post_type_archive_title', '__return_false', 10);
84
- }
85
-
86
-
87
- /**
88
- * Set the notices used on month view
89
- *
90
- * @return void
91
- * @since 3.0
92
- **/
93
- public function set_notices() {
94
- global $wp_query;
95
- // setup a search term for query or via ajax
96
- if( !empty( $wp_query->query_vars['s'] )){
97
- $search_term = $wp_query->query_vars['s'];
98
- } else if( !empty($_POST['tribe-bar-search'])) {
99
- $search_term = $_POST['tribe-bar-search'];
100
- }
101
-
102
- $total_counts = array_unique(self::$event_daily_counts);
103
-
104
- if( count($total_counts) < 2 && !empty($search_term)) {
105
- TribeEvents::setNotice( 'event-search-no-results', sprintf( __( 'There were no results found for <strong>"%s"</strong> this month. Try searching next month.', 'tribe-events-calendar' ), esc_html( $search_term ) ) );
106
- }
107
- }
108
-
109
-
110
- /**
111
- * Get number of events per day
112
- *
113
- * @param int $date
114
- * @return array
115
- * @since 3.0
116
- */
117
- private static function get_daily_counts( $date ) {
118
- global $wp_query;
119
-
120
- $count_args = self::$args;
121
-
122
- $count_args['eventDisplay'] = 'month';
123
- $count_args['eventDate'] = date( 'Y-m', strtotime( $date ) );
124
- $count_args['start_date'] = tribe_event_beginning_of_day( $date );
125
- $count_args['end_date'] = tribe_event_end_of_day( date('Y-m-t', strtotime( $date ) ) );
126
- $count_args['hide_upcoming_ids'] = self::$hide_upcoming_ids;
127
- $count_args['post_status'] = is_user_logged_in() ? array( 'publish', 'private' ) : 'publish';
128
-
129
- $result = TribeEventsQuery::getEventCounts( $count_args );
130
-
131
- self::$event_daily_counts = $result['counts'];
132
- self::$event_daily_ids = $result['event_ids'];
133
- }
134
-
135
-
136
- /**
137
- * Get the view more link
138
- *
139
- * @param int $date
140
- * @param array $args
141
- * @return string
142
- * @since 3.0
143
- */
144
- private static function view_more_link( $date, $args ) {
145
- if( !empty(self::$event_daily_counts[$date]) && (int) self::$event_daily_counts[$date] > self::$posts_per_page_limit ) {
146
- $day_link = tribe_get_day_link($date);
147
- if ( !empty($args) ) {
148
- $day_link = add_query_arg($args, $day_link);
149
- }
150
- return $day_link;
151
- }
152
- return '';
153
- }
154
-
155
- /**
156
- * @param string $date
157
- * @return WP_Query
158
- */
159
- private function get_daily_events( $date ) {
160
- global $wp_query;
161
- $tribe_ecp = TribeEvents::instance();
162
-
163
- $post_status = is_user_logged_in() ? array( 'publish', 'private' ) : 'publish';
164
-
165
- $args = wp_parse_args( array(
166
- 'post__in' => self::$event_daily_ids[$date],
167
- 'post_type' => TribeEvents::POSTTYPE,
168
- 'eventDisplay' => 'custom',
169
- 'eventDate' => $date,
170
- 'start_date' => tribe_event_beginning_of_day( $date ),
171
- 'end_date' => tribe_event_end_of_day( $date ),
172
- // setup our own custom hide upcoming
173
- 'post__not_in' => self::$hide_upcoming_ids,
174
- 'hide_upcoming' => false,
175
- 'posts_per_page' => self::$posts_per_page_limit,
176
- ), self::$args );
177
-
178
- $result = TribeEventsQuery::getEvents( $args, true );
179
- return $result;
180
- }
181
-
182
- /**
183
- * Sets up an array of $days based on the current query, that can be used in the calendar loop
184
- *
185
- * @return void
186
- * @since 3.0
187
- **/
188
- public function setup_view() {
189
-
190
- $tribe_ecp = TribeEvents::instance();
191
- $tribe_ecp->date = isset( self::$args['eventDate'] ) ? self::$args['eventDate'] : tribe_get_month_view_date();
192
-
193
- do_action('log', 'eventDate', 'tribe-events-query', $tribe_ecp->date);
194
-
195
- // get all upcoming ids to hide so we're not querying 31 times
196
- self::$hide_upcoming_ids = TribeEventsQuery::getHideFromUpcomingEvents();
197
-
198
- list( $year, $month ) = explode( '-', $tribe_ecp->date );
199
-
200
- $startOfWeek = get_option( 'start_of_week', 0 );
201
-
202
- $first_day_of_month = date( 'Y-m-01', strtotime( $tribe_ecp->date ) );
203
-
204
- self::get_daily_counts($first_day_of_month);
205
-
206
- if ( empty(self::$tribe_bar_args) ) {
207
- foreach ( $_REQUEST as $key => $value ) {
208
- if ( $value && strpos($key, 'tribe-bar-') === 0 && $key != 'tribe-bar-date' ) {
209
- self::$tribe_bar_args[$key] = $value;
210
- }
211
- }
212
- }
213
-
214
- // Var'ng up days, months and years
215
- self::$today = date_i18n( 'd' );
216
- self::$current_month = date_i18n( 'm' );
217
- self::$current_year = date_i18n( 'Y' );
218
-
219
- // single dimensional array of days for the month
220
- $days = array();
221
-
222
- // setup counters
223
- $rawOffset = date( 'w', strtotime($tribe_ecp->date) ) - $startOfWeek;
224
- $prev_month_offset = (int) ( ( $rawOffset < 0 ) ? $rawOffset + 7 : $rawOffset ); // month begins on day x
225
- $days_in_month = (int) date( 't', strtotime($tribe_ecp->date) );
226
- $days_in_calendar = $days_in_month + $prev_month_offset;
227
- while ($days_in_calendar % 7 > 0) {
228
- $days_in_calendar++;
229
- }
230
- $week = 0;
231
- $cur_calendar_day = 0;
232
-
233
- // fill month with required days for previous month
234
- if ( $prev_month_offset > 0 )
235
- $days = array_fill( 0, $prev_month_offset, array( 'date' => 'previous' ) );
236
-
237
- // get $cur_calendar_day up to speed
238
- $cur_calendar_day += $prev_month_offset;
239
-
240
- // if (in_array(0, self::$event_daily_counts)) {
241
- $empty_query = new WP_Query();
242
- // }
243
-
244
- // add days for this month
245
- for ($i = 0; $i < $days_in_month; $i++) {
246
- $day = $i + 1;
247
- $date = date( 'Y-m-d', strtotime("$year-$month-$day"));
248
-
249
- $total_events = ! empty( self::$event_daily_counts[$date] ) ? self::$event_daily_counts[$date] : 0;
250
-
251
- $days[] = array(
252
- 'daynum' => $day,
253
- 'date' => $date,
254
- 'events' => $total_events ? self::get_daily_events( $date ) : $empty_query,
255
- 'total_events' => $total_events,
256
- 'view_more' => self::view_more_link( $date, self::$tribe_bar_args ),
257
- );
258
- }
259
-
260
- // get $cur_calendar_day up to speed
261
- $cur_calendar_day += $days_in_month;
262
-
263
- // check if $cur_calendar_day is less than $days_in_calendar, if so, add days for next month
264
- if ($cur_calendar_day < $days_in_calendar) {
265
- $days = array_merge($days, array_fill($cur_calendar_day, $days_in_calendar - $cur_calendar_day, array('date' => 'next')));
266
- }
267
-
268
- // store set of found days for use in calendar loop functions
269
- self::$calendar_days = $days;
270
- }
271
-
272
- /**
273
- * Checks whether there are more calendar days to display
274
- *
275
- * @return bool True if calendar days are available, false if not.
276
- * @since 3.0
277
- **/
278
- public static function have_days() {
279
- if ( self::$current_day + 1 < count( self::$calendar_days ) ) {
280
- return true;
281
- } elseif ( self::$current_day + 1 == count( self::$calendar_days ) && count( self::$calendar_days ) > 0 ) {
282
- do_action_ref_array('tribe_events_calendar_loop_end', array(&$this));
283
- // Do some cleaning up after the loop
284
- self::rewind_days();
285
- }
286
- return false;
287
- }
288
-
289
- /**
290
- * Advances the internal day counter (and week counter, if appropriate)
291
- *
292
- * @return void
293
- * @since 3.0
294
- **/
295
- public static function the_day() {
296
- if ( self::have_days() ) {
297
- self::$current_day++;
298
- if ( self::$current_day % 7 == 0 ) {
299
- self::$current_week++;
300
- }
301
- }
302
- }
303
-
304
- /**
305
- * Rewind the posts and reset post index.
306
- *
307
- * @since 1.5.0
308
- * @access public
309
- */
310
- public static function rewind_days() {
311
- self::$current_day = -1;
312
- self::$current_week = -1;
313
- }
314
-
315
- /**
316
- * Returns the current day according to self::$current_day
317
- *
318
- * @return int
319
- * @since 3.0
320
- **/
321
- public static function get_current_day() {
322
- if ( count( self::$calendar_days ) && self::$current_day < count( self::$calendar_days ) && isset( self::$calendar_days[self::$current_day] ) ) {
323
- return self::$calendar_days[self::$current_day];
324
- }
325
- return false;
326
- }
327
-
328
- /**
329
- * Generates and returns a set of classes for the current day
330
- *
331
- * @return string Classes
332
- * @since 3.0
333
- **/
334
- public static function day_classes() {
335
- $ppf = '';
336
- $calendar_day = self::$calendar_days[self::$current_day];
337
- // echo $calendar_day['date'];
338
- if ($calendar_day['date'] == 'previous' || $calendar_day['date'] == 'next') {
339
- $ppf = 'tribe-events-othermonth';
340
- } else {
341
- $ppf = 'tribe-events-thismonth';
342
- list ($year, $month, $day) = explode('-', $calendar_day['date']);
343
- if ( self::$current_month == $month && self::$current_year == $year) {
344
- // Past, Present, Future class
345
- if ( self::$today == $day ) {
346
- $ppf .= ' tribe-events-present';
347
- } else if ( self::$today > $day ) {
348
- $ppf .= ' tribe-events-past';
349
- } else if ( self::$today < $day ) {
350
- $ppf .= ' tribe-events-future';
351
- }
352
- } else if ( self::$current_month > $month && self::$current_year == $year || self::$current_year > $year ) {
353
- $ppf .= ' tribe-events-past';
354
- } else if ( self::$current_month < $month && self::$current_year == $year || self::$current_year < $year ) {
355
- $ppf .= ' tribe-events-future';
356
- }
357
- if ( $calendar_day['total_events'] > 0 ) {
358
- $ppf .= ' tribe-events-has-events';
359
- }
360
-
361
- }
362
-
363
- $column = (self::$current_day) - (self::$current_week * 7);
364
-
365
- if ( $column > 0 && ( $column % 4 == 0 || $column % 5 == 0 || $column % 6 == 0 ) ) {
366
- $ppf .= ' tribe-events-right';
367
- }
368
- return $ppf;
369
- }
370
-
371
- /**
372
- * Returns self::$current_week
373
- *
374
- * @return int $current_week
375
- * @since 3.0
376
- **/
377
- public static function get_current_week() {
378
- return self::$current_week;
379
- }
380
-
381
- /**
382
- * Generates and returns a set of classes for the current day
383
- *
384
- * @return string Classes
385
- * @since 3.0
386
- **/
387
- public function event_classes( $classes ) {
388
-
389
- $day = self::get_current_day();
390
-
391
- if ( !isset( $day['events'] ) )
392
- return $classes;
393
-
394
- $post = $day['events']->post;
395
-
396
- // Get our wrapper classes (for event categories, organizer, venue, and defaults)
397
- $classes = array('hentry', 'vevent');
398
- $tribe_cat_slugs = tribe_get_event_cat_slugs( $post->ID );
399
- foreach( $tribe_cat_slugs as $tribe_cat_slug ) {
400
- $classes[] = 'tribe-events-category-'. $tribe_cat_slug;
401
- }
402
- $classes = array_merge($classes, get_post_class('', $post->ID));
403
- if ( $venue_id = tribe_get_venue_id($post->ID) ) {
404
- $classes[] = 'tribe-events-venue-'. $venue_id;
405
- }
406
- if ( $organizer_id = tribe_get_organizer_id($post->ID) ) {
407
- $classes[] = 'tribe-events-organizer-'. $organizer_id;
408
- }
409
-
410
- if ($day['events']->current_post + 1 == $day['events']->post_count) {
411
- $classes[] = 'tribe-events-last';
412
- }
413
-
414
- return $classes;
415
- }
416
- } // class Tribe_Events_Month_Template
417
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/template-classes/single-event.php CHANGED
@@ -91,14 +91,15 @@ if( !class_exists('Tribe_Events_Single_Event_Template')){
91
 
92
  parent::set_notices();
93
 
 
 
94
  // Check if event has passed
95
  $gmt_offset = ( get_option( 'gmt_offset' ) >= '0' ) ? ' +' . get_option( 'gmt_offset' ) : " " . get_option( 'gmt_offset' );
96
  $gmt_offset = str_replace( array( '.25', '.5', '.75' ), array( ':15', ':30', ':45' ), $gmt_offset );
97
 
98
- if ( !tribe_is_showing_all() && strtotime( tribe_get_end_date( get_the_ID(), false, 'Y-m-d G:i' ) . $gmt_offset ) <= time() ) {
99
  TribeEvents::setNotice( 'event-past', __( 'This event has passed.', 'tribe-events-calendar' ) );
100
  }
101
  }
102
-
103
  }
104
  }
91
 
92
  parent::set_notices();
93
 
94
+ global $post;
95
+
96
  // Check if event has passed
97
  $gmt_offset = ( get_option( 'gmt_offset' ) >= '0' ) ? ' +' . get_option( 'gmt_offset' ) : " " . get_option( 'gmt_offset' );
98
  $gmt_offset = str_replace( array( '.25', '.5', '.75' ), array( ':15', ':30', ':45' ), $gmt_offset );
99
 
100
+ if ( !tribe_is_showing_all() && strtotime( tribe_get_end_date( $post, false, 'Y-m-d G:i' ) . $gmt_offset ) <= time() ) {
101
  TribeEvents::setNotice( 'event-past', __( 'This event has passed.', 'tribe-events-calendar' ) );
102
  }
103
  }
 
104
  }
105
  }
lib/the-events-calendar.class.php CHANGED
@@ -22,7 +22,7 @@ if ( !class_exists( 'TribeEvents' ) ) {
22
  const VENUE_POST_TYPE = 'tribe_venue';
23
  const ORGANIZER_POST_TYPE = 'tribe_organizer';
24
  const PLUGIN_DOMAIN = 'tribe-events-calendar';
25
- const VERSION = '3.1';
26
  const FEED_URL = 'http://tri.be/category/products/feed/';
27
  const INFO_API_URL = 'http://wpapi.org/api/plugin/the-events-calendar.php';
28
  const WP_PLUGIN_URL = 'http://wordpress.org/extend/plugins/the-events-calendar/';
@@ -180,6 +180,9 @@ if ( !class_exists( 'TribeEvents' ) ) {
180
  $this->pluginPath = trailingslashit( dirname( dirname(__FILE__) ) );
181
  $this->pluginDir = trailingslashit( basename( $this->pluginPath ) );
182
  $this->pluginUrl = plugins_url().'/'.$this->pluginDir;
 
 
 
183
  if (self::supportedVersion('wordpress') && self::supportedVersion('php')) {
184
 
185
  if ( is_admin() && ( !defined( 'DOING_AJAX' ) || !DOING_AJAX ) ) {
@@ -190,7 +193,6 @@ if ( !class_exists( 'TribeEvents' ) ) {
190
  $this->loadLibraries();
191
  } else {
192
  // Either PHP or WordPress version is inadequate so we simply return an error.
193
- add_action('init', array($this,'loadTextDomain'));
194
  add_action('admin_head', array($this,'notSupportedError'));
195
  }
196
  }
@@ -260,6 +262,9 @@ if ( !class_exists( 'TribeEvents' ) ) {
260
  require_once( 'tickets/tribe-tickets.php' );
261
  require_once( 'tickets/tribe-tickets-metabox.php' );
262
 
 
 
 
263
  // Load multisite defaults
264
  if ( is_multisite() ) {
265
  $tribe_events_mu_defaults = array();
@@ -374,7 +379,6 @@ if ( !class_exists( 'TribeEvents' ) ) {
374
  add_action( 'save_post', array( $this, 'save_organizer_data' ), 16, 2 );
375
  add_action( 'save_post', array( $this, 'addToPostAuditTrail' ), 10, 2 );
376
  add_action( 'publish_'.self::POSTTYPE, array( $this, 'publishAssociatedTypes'), 25, 2 );
377
- add_action( 'pre_get_posts', array( $this, 'setDate' ));
378
  add_action( 'parse_query', array( $this, 'setDisplay' ), 51, 0);
379
  add_action( 'tribe_events_post_errors', array( 'TribeEventsPostException', 'displayMessage' ) );
380
  add_action( 'tribe_settings_top', array( 'TribeEventsOptionsException', 'displayMessage') );
@@ -401,6 +405,7 @@ if ( !class_exists( 'TribeEvents' ) ) {
401
 
402
  // noindex grid view
403
  add_action('wp_head', array( $this, 'noindex_months' ) );
 
404
  add_action( 'plugin_row_meta', array( $this, 'addMetaLinks' ), 10, 2 );
405
  // organizer and venue
406
  if( !defined('TRIBE_HIDE_UPSELL') || !TRIBE_HIDE_UPSELL ) {
@@ -476,17 +481,30 @@ if ( !class_exists( 'TribeEvents' ) ) {
476
  * Add code to tell search engines not to index the grid view of the
477
  * calendar. Users were seeing 100s of months being indexed.
478
  */
479
- function noindex_months() {
480
  if (get_query_var('eventDisplay') == 'month') {
481
- echo " <meta name=\"robots\" content=\"noindex, follow\"/>\n";
 
 
 
 
 
 
 
 
 
482
  }
483
  }
484
 
 
 
 
 
 
485
  /**
486
  * Run on applied action init
487
  */
488
  public function init() {
489
- $this->loadTextDomain();
490
  $this->pluginName = __( 'The Events Calendar', 'tribe-events-calendar' );
491
  $this->rewriteSlug = $this->getRewriteSlug();
492
  $this->rewriteSlugSingular = $this->getRewriteSlugSingular();
@@ -1991,6 +2009,20 @@ if ( !class_exists( 'TribeEvents' ) ) {
1991
  ));
1992
  }
1993
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1994
  /**
1995
  * Save hidden tabs
1996
  *
@@ -2117,29 +2149,6 @@ if ( !class_exists( 'TribeEvents' ) ) {
2117
  }
2118
  }
2119
 
2120
- /**
2121
- * Set the date property of the main class instance.
2122
- *
2123
- * @param WP_Query $query The current query.
2124
- * @return void
2125
- */
2126
- public function setDate($query) {
2127
- if ($query->tribe_is_event_query) {
2128
- if ( $query->get('eventDisplay') == 'month' ) {
2129
- $this->date = $query->get('eventDate') . "-01";
2130
- } else if ( $query->get('eventDate') ) {
2131
- $this->date = $query->get('eventDate');
2132
- } else if ( $query->get('eventDisplay') == 'month' ) {
2133
- $date = date_i18n( TribeDateUtils::DBDATEFORMAT );
2134
- $this->date = substr_replace( $date, '01', -2 );
2135
- } else if (is_singular() && $query->get('eventDate') ) {
2136
- $this->date = $query->get('eventDate');
2137
- } else if (!is_singular()) { // don't set date for single event unless recurring
2138
- $this->date = date(TribeDateUtils::DBDATETIMEFORMAT);
2139
- }
2140
- }
2141
- }
2142
-
2143
  /**
2144
  * Set the displaying class property.
2145
  *
@@ -2174,7 +2183,7 @@ if ( !class_exists( 'TribeEvents' ) ) {
2174
  !tribe_is_month() &&
2175
  !tribe_is_by_date() ) {
2176
 
2177
- $startTime = get_post_meta($post->ID, '_EventStartDate', true);
2178
  $startTime = TribeDateUtils::timeOnly($startTime);
2179
  $post->EventStartDate = TribeDateUtils::addTimeToDate($post->EventStartDate, $startTime);
2180
  $post->EventEndDate = date( TribeDateUtils::DBDATETIMEFORMAT, strtotime($post->EventStartDate) + get_post_meta($post->ID, '_EventDuration', true) );
@@ -3455,10 +3464,16 @@ if ( !class_exists( 'TribeEvents' ) ) {
3455
  * Given a date (YYYY-MM-DD), returns the first of the next month
3456
  * hat tip to Dan Bernadict for method cleanup
3457
  *
3458
- * @param date
3459
- * @return date
 
3460
  */
3461
  public function nextMonth( $date ) {
 
 
 
 
 
3462
  return date( 'Y-m', strtotime( $date . ' +1 month' ) );
3463
  }
3464
 
@@ -3466,10 +3481,16 @@ if ( !class_exists( 'TribeEvents' ) ) {
3466
  * Given a date (YYYY-MM-DD), return the first of the previous month
3467
  * hat tip to Dan Bernadict for method cleanup
3468
  *
3469
- * @param date
3470
- * @return date
 
3471
  */
3472
  public function previousMonth( $date ) {
 
 
 
 
 
3473
  return date( 'Y-m', strtotime( $date . ' -1 month' ) );
3474
  }
3475
 
@@ -3937,7 +3958,7 @@ if ( !class_exists( 'TribeEvents' ) ) {
3937
  *
3938
  * @return void
3939
  */
3940
- public function resetActivationMessage() {
3941
  $tec = TribeEvents::instance();
3942
  $tec->setOption( 'welcome_notice', false );
3943
  }
22
  const VENUE_POST_TYPE = 'tribe_venue';
23
  const ORGANIZER_POST_TYPE = 'tribe_organizer';
24
  const PLUGIN_DOMAIN = 'tribe-events-calendar';
25
+ const VERSION = '3.2';
26
  const FEED_URL = 'http://tri.be/category/products/feed/';
27
  const INFO_API_URL = 'http://wpapi.org/api/plugin/the-events-calendar.php';
28
  const WP_PLUGIN_URL = 'http://wordpress.org/extend/plugins/the-events-calendar/';
180
  $this->pluginPath = trailingslashit( dirname( dirname(__FILE__) ) );
181
  $this->pluginDir = trailingslashit( basename( $this->pluginPath ) );
182
  $this->pluginUrl = plugins_url().'/'.$this->pluginDir;
183
+
184
+ add_action( 'init', array( $this, 'loadTextDomain' ), 1 );
185
+
186
  if (self::supportedVersion('wordpress') && self::supportedVersion('php')) {
187
 
188
  if ( is_admin() && ( !defined( 'DOING_AJAX' ) || !DOING_AJAX ) ) {
193
  $this->loadLibraries();
194
  } else {
195
  // Either PHP or WordPress version is inadequate so we simply return an error.
 
196
  add_action('admin_head', array($this,'notSupportedError'));
197
  }
198
  }
262
  require_once( 'tickets/tribe-tickets.php' );
263
  require_once( 'tickets/tribe-tickets-metabox.php' );
264
 
265
+ // CSV Importer
266
+ require_once( 'io/csv/ecp-events-importer.php' );
267
+
268
  // Load multisite defaults
269
  if ( is_multisite() ) {
270
  $tribe_events_mu_defaults = array();
379
  add_action( 'save_post', array( $this, 'save_organizer_data' ), 16, 2 );
380
  add_action( 'save_post', array( $this, 'addToPostAuditTrail' ), 10, 2 );
381
  add_action( 'publish_'.self::POSTTYPE, array( $this, 'publishAssociatedTypes'), 25, 2 );
 
382
  add_action( 'parse_query', array( $this, 'setDisplay' ), 51, 0);
383
  add_action( 'tribe_events_post_errors', array( 'TribeEventsPostException', 'displayMessage' ) );
384
  add_action( 'tribe_settings_top', array( 'TribeEventsOptionsException', 'displayMessage') );
405
 
406
  // noindex grid view
407
  add_action('wp_head', array( $this, 'noindex_months' ) );
408
+ add_action( 'wp', array( $this, 'issue_noindex_on_404' ), 10, 0 );
409
  add_action( 'plugin_row_meta', array( $this, 'addMetaLinks' ), 10, 2 );
410
  // organizer and venue
411
  if( !defined('TRIBE_HIDE_UPSELL') || !TRIBE_HIDE_UPSELL ) {
481
  * Add code to tell search engines not to index the grid view of the
482
  * calendar. Users were seeing 100s of months being indexed.
483
  */
484
+ public function noindex_months() {
485
  if (get_query_var('eventDisplay') == 'month') {
486
+ $this->print_noindex_meta();
487
+ }
488
+ }
489
+
490
+ public function issue_noindex_on_404() {
491
+ if ( is_404() ) {
492
+ global $wp_query;
493
+ if ( !empty($wp_query->tribe_is_event_query) ) {
494
+ add_action( 'wp_head', array( $this, 'print_noindex_meta' ), 10, 0 );
495
+ }
496
  }
497
  }
498
 
499
+
500
+ public function print_noindex_meta() {
501
+ echo ' <meta name="robots" content="noindex,follow" />'."\n";
502
+ }
503
+
504
  /**
505
  * Run on applied action init
506
  */
507
  public function init() {
 
508
  $this->pluginName = __( 'The Events Calendar', 'tribe-events-calendar' );
509
  $this->rewriteSlug = $this->getRewriteSlug();
510
  $this->rewriteSlugSingular = $this->getRewriteSlugSingular();
2009
  ));
2010
  }
2011
 
2012
+ /**
2013
+ * An event can have one or more start dates. This gives
2014
+ * the earliest of those.
2015
+ * @param int $post_id
2016
+ * @return string The date string for the earliest occurrence of the event
2017
+ */
2018
+ public static function get_series_start_date( $post_id ) {
2019
+ $start_dates = get_post_meta( $post_id, '_EventStartDate', false );
2020
+ if ( $start_dates ) {
2021
+ return min($start_dates);
2022
+ }
2023
+ return '';
2024
+ }
2025
+
2026
  /**
2027
  * Save hidden tabs
2028
  *
2149
  }
2150
  }
2151
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2152
  /**
2153
  * Set the displaying class property.
2154
  *
2183
  !tribe_is_month() &&
2184
  !tribe_is_by_date() ) {
2185
 
2186
+ $startTime = self::get_series_start_date($post->ID);
2187
  $startTime = TribeDateUtils::timeOnly($startTime);
2188
  $post->EventStartDate = TribeDateUtils::addTimeToDate($post->EventStartDate, $startTime);
2189
  $post->EventEndDate = date( TribeDateUtils::DBDATETIMEFORMAT, strtotime($post->EventStartDate) + get_post_meta($post->ID, '_EventDuration', true) );
3464
  * Given a date (YYYY-MM-DD), returns the first of the next month
3465
  * hat tip to Dan Bernadict for method cleanup
3466
  *
3467
+ * @param string $date
3468
+ * @return string Next month's date
3469
+ * @throws OverflowException
3470
  */
3471
  public function nextMonth( $date ) {
3472
+ if ( PHP_INT_SIZE <= 4 ) {
3473
+ if ( date('Y-m-d', strtotime($date)) > '2037-11-30' ) {
3474
+ throw new OverflowException(__('Date out of range.', 'the-events-calendar'));
3475
+ }
3476
+ }
3477
  return date( 'Y-m', strtotime( $date . ' +1 month' ) );
3478
  }
3479
 
3481
  * Given a date (YYYY-MM-DD), return the first of the previous month
3482
  * hat tip to Dan Bernadict for method cleanup
3483
  *
3484
+ * @param string $date
3485
+ * @return string Previous month's date
3486
+ * @throws OverflowException
3487
  */
3488
  public function previousMonth( $date ) {
3489
+ if ( PHP_INT_SIZE <= 4 ) {
3490
+ if ( date('Y-m-d', strtotime($date)) < '1902-02-01' ) {
3491
+ throw new OverflowException(__('Date out of range.', 'the-events-calendar'));
3492
+ }
3493
+ }
3494
  return date( 'Y-m', strtotime( $date . ' -1 month' ) );
3495
  }
3496
 
3958
  *
3959
  * @return void
3960
  */
3961
+ public static function resetActivationMessage() {
3962
  $tec = TribeEvents::instance();
3963
  $tec->setOption( 'welcome_notice', false );
3964
  }
lib/tickets/tribe-tickets.php CHANGED
@@ -201,7 +201,7 @@ if ( ! class_exists( 'TribeEventsTickets' ) ) {
201
  * @abstract
202
  * @return mixed
203
  */
204
- abstract static function get_instance();
205
 
206
  // end API Definitions
207
 
@@ -569,7 +569,8 @@ if ( ! class_exists( 'TribeEventsTickets' ) ) {
569
  */
570
  public function generate_tickets_email_content( $tickets ) {
571
  ob_start();
572
- include TribeEventsTemplates::getTemplateHierarchy( 'email.php', array('subfolder'=>'tickets') );
 
573
  return ob_get_clean();
574
  }
575
 
201
  * @abstract
202
  * @return mixed
203
  */
204
+ static function get_instance() {}
205
 
206
  // end API Definitions
207
 
569
  */
570
  public function generate_tickets_email_content( $tickets ) {
571
  ob_start();
572
+ include TribeEventsTemplates::getTemplateHierarchy( 'tickets/email.php', array( 'namespace' => 'tickets' ) );
573
+
574
  return ob_get_clean();
575
  }
576
 
lib/tribe-admin-events-list.class.php CHANGED
@@ -21,8 +21,8 @@ if (!class_exists('TribeEventsAdminList')) {
21
  public static function init() {
22
  if ( is_admin() && ! ( defined('DOING_AJAX') && DOING_AJAX ) ) {
23
  add_filter( 'posts_distinct', array( __CLASS__, 'events_search_distinct'));
24
- add_filter( 'posts_join', array( __CLASS__, 'events_search_join' ) );
25
- add_filter( 'posts_where', array( __CLASS__, 'events_search_where' ) );
26
  add_filter( 'posts_orderby', array( __CLASS__, 'events_search_orderby' ) );
27
  add_filter( 'posts_groupby', array( __CLASS__, 'events_search_groupby' ) );
28
  add_filter( 'posts_fields', array( __CLASS__, 'events_search_fields' ) );
@@ -110,31 +110,40 @@ if (!class_exists('TribeEventsAdminList')) {
110
  $fields .= ", {$wpdb->postmeta}.meta_value as EventStartDate, IFNULL(DATE_ADD(CAST({$wpdb->postmeta}.meta_value AS DATETIME), INTERVAL eventDuration.meta_value SECOND), eventEnd.meta_value) as EventEndDate ";
111
  return $fields;
112
  }
 
113
  /**
114
- * Join filter for admin quries
 
 
 
115
  *
116
- * @param string join clause
117
  * @return string modified join clause
118
  */
119
- public static function events_search_join( $join ) {
120
  global $wpdb;
121
- if ( get_query_var('post_type') != TribeEvents::POSTTYPE ) {
122
  return $join;
123
- }
 
 
 
124
  $join .= " LEFT JOIN {$wpdb->postmeta} as eventDuration ON( {$wpdb->posts}.ID = eventDuration.post_id AND eventDuration.meta_key = '_EventDuration') ";
125
  $join .= " LEFT JOIN {$wpdb->postmeta} as eventEnd ON( {$wpdb->posts}.ID = eventEnd.post_id AND eventEnd.meta_key = '_EventEndDate') ";
 
126
  return $join;
127
  }
128
  /**
129
  * Where filter for admin queries
130
  *
131
  * @param string where clause
 
132
  * @return string modified where clause
133
  */
134
- public static function events_search_where( $where ) {
135
- if ( get_query_var('post_type') != TribeEvents::POSTTYPE ) {
136
  return $where;
137
- }
 
138
 
139
  //$where .= ' AND ( eventStart.meta_key = "_EventStartDate" AND eventDuration.meta_key = "_EventDuration" ) ';
140
 
@@ -270,12 +279,19 @@ if (!class_exists('TribeEventsAdminList')) {
270
  echo ( $event_cats ) ? strip_tags( $event_cats ) : '—';
271
  }
272
  if ( $column_id == 'start-date' ) {
273
- echo tribe_event_format_date(strtotime(self::$events_list[0]->EventStartDate), false);
274
- if ( ! self::$end_col_active || ! self::$start_col_first ) self::advance_date();
 
 
 
 
275
  }
276
  if ( $column_id == 'end-date' ) {
277
- echo tribe_event_format_date(strtotime(self::$events_list[0]->EventEndDate), false);
278
- if ( self::$start_col_first) self::advance_date();
 
 
 
279
  }
280
 
281
  if ( $column_id == 'recurring' ) {
21
  public static function init() {
22
  if ( is_admin() && ! ( defined('DOING_AJAX') && DOING_AJAX ) ) {
23
  add_filter( 'posts_distinct', array( __CLASS__, 'events_search_distinct'));
24
+ add_filter( 'posts_join', array( __CLASS__, 'events_search_join' ), 10, 2 );
25
+ add_filter( 'posts_where', array( __CLASS__, 'events_search_where' ), 10, 2 );
26
  add_filter( 'posts_orderby', array( __CLASS__, 'events_search_orderby' ) );
27
  add_filter( 'posts_groupby', array( __CLASS__, 'events_search_groupby' ) );
28
  add_filter( 'posts_fields', array( __CLASS__, 'events_search_fields' ) );
110
  $fields .= ", {$wpdb->postmeta}.meta_value as EventStartDate, IFNULL(DATE_ADD(CAST({$wpdb->postmeta}.meta_value AS DATETIME), INTERVAL eventDuration.meta_value SECOND), eventEnd.meta_value) as EventEndDate ";
111
  return $fields;
112
  }
113
+
114
  /**
115
+ * Join filter for admin queries
116
+ *
117
+ * @param $join
118
+ * @param $query WP_Query
119
  *
 
120
  * @return string modified join clause
121
  */
122
+ public static function events_search_join( $join, $query ) {
123
  global $wpdb;
124
+ if ( get_query_var('post_type') != TribeEvents::POSTTYPE )
125
  return $join;
126
+
127
+ if ( $query->is_main_query() )
128
+ $join .= " LEFT JOIN {$wpdb->postmeta} ON {$wpdb->posts}.ID = {$wpdb->postmeta}.post_id AND ({$wpdb->postmeta}.meta_key = '_EventStartDate' or {$wpdb->postmeta}.meta_key is null) ";
129
+
130
  $join .= " LEFT JOIN {$wpdb->postmeta} as eventDuration ON( {$wpdb->posts}.ID = eventDuration.post_id AND eventDuration.meta_key = '_EventDuration') ";
131
  $join .= " LEFT JOIN {$wpdb->postmeta} as eventEnd ON( {$wpdb->posts}.ID = eventEnd.post_id AND eventEnd.meta_key = '_EventEndDate') ";
132
+
133
  return $join;
134
  }
135
  /**
136
  * Where filter for admin queries
137
  *
138
  * @param string where clause
139
+ * @param WP_Query query
140
  * @return string modified where clause
141
  */
142
+ public static function events_search_where( $where, $query ) {
143
+ if ( get_query_var('post_type') != TribeEvents::POSTTYPE )
144
  return $where;
145
+
146
+ global $wpdb;
147
 
148
  //$where .= ' AND ( eventStart.meta_key = "_EventStartDate" AND eventDuration.meta_key = "_EventDuration" ) ';
149
 
279
  echo ( $event_cats ) ? strip_tags( $event_cats ) : '—';
280
  }
281
  if ( $column_id == 'start-date' ) {
282
+
283
+ if ( ! empty( self::$events_list[0]->EventStartDate ) )
284
+ echo tribe_event_format_date( strtotime( self::$events_list[0]->EventStartDate ), false );
285
+
286
+ if ( ! self::$end_col_active || ! self::$start_col_first )
287
+ self::advance_date();
288
  }
289
  if ( $column_id == 'end-date' ) {
290
+ if ( ! empty( self::$events_list[0]->EventEndDate ) )
291
+ echo tribe_event_format_date( strtotime( self::$events_list[0]->EventEndDate ), false );
292
+
293
+ if ( self::$start_col_first )
294
+ self::advance_date();
295
  }
296
 
297
  if ( $column_id == 'recurring' ) {
lib/tribe-date-utils.class.php CHANGED
@@ -163,10 +163,35 @@ if(!class_exists('TribeDateUtils')) {
163
  *
164
  * @param int $curDate A timestamp.
165
  * @return bool If the timestamp is a weekend.
166
- */ public static function isWeekend($curdate) {
 
167
  return in_array(date('N', $curdate), array(6,7));
168
  }
169
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
170
  /**
171
  * Gets the last day of the week in a month (ie the last Tuesday). Passing in -1 gives you the last day in the month.
172
  *
@@ -214,5 +239,10 @@ if(!class_exists('TribeDateUtils')) {
214
  return $number.(((strlen($number)>1)&&(substr($number,-2,1)=='1'))?
215
  'th' : date("S",mktime(0,0,0,0,substr($number,-1),0)));
216
  }
 
 
 
 
 
217
  }
218
  }
163
  *
164
  * @param int $curDate A timestamp.
165
  * @return bool If the timestamp is a weekend.
166
+ */
167
+ public static function isWeekend($curdate) {
168
  return in_array(date('N', $curdate), array(6,7));
169
  }
170
 
171
+ /**
172
+ * Checks if the specified date format contains any time formatting characters. Useful to determine if a date
173
+ * format relates only to the date.
174
+ *
175
+ * @param $format
176
+ * @return bool
177
+ */
178
+ public static function formatContainsTime($format) {
179
+ $timeChars = array( 'a', 'A', 'B', 'g', 'G', 'h', 'H', 'i', 's', 'u', 'e', 'I', 'O', 'P', 'T', 'Z', 'c', 'r', 'U' );
180
+ $formatChars = str_split( $format );
181
+ $usesTime = array_intersect( $timeChars, $formatChars );
182
+ return 0 < count( $usesTime );
183
+ }
184
+
185
+ /**
186
+ * Checks if the specified date format contains any year-related formatting characters.
187
+ *
188
+ * @param $format
189
+ * @return bool
190
+ */
191
+ public static function formatContainsYear($format) {
192
+ return ( false !== strpos( $format, 'y' ) || false !== strpos( $format, 'Y' ) );
193
+ }
194
+
195
  /**
196
  * Gets the last day of the week in a month (ie the last Tuesday). Passing in -1 gives you the last day in the month.
197
  *
239
  return $number.(((strlen($number)>1)&&(substr($number,-2,1)=='1'))?
240
  'th' : date("S",mktime(0,0,0,0,substr($number,-1),0)));
241
  }
242
+
243
+ public static function numberToDay($number) {
244
+ $days = array(1 => "Monday", 2 => "Tuesday", 3 => "Wednesday", 4 => "Thursday", 5 => "Friday", 6 => "Saturday", 7 => "Sunday");
245
+ return $days[$number];
246
+ }
247
  }
248
  }
lib/tribe-event-api.class.php CHANGED
@@ -101,7 +101,7 @@ if (!class_exists('TribeEventsAPI')) {
101
 
102
  $data['EventDuration'] = strtotime($data['EventEndDate']) - $startTimestamp;
103
 
104
- $old_data['EventStartDate'] = get_post_meta( $event_id, '_EventStartDate', true );
105
 
106
  update_post_meta( $event_id, '_EventShowMapLink', isset( $data['venue']['EventShowMapLink'] ) );
107
  update_post_meta( $event_id, '_EventShowMap', isset( $data['venue']['EventShowMap'] ) );
@@ -130,7 +130,7 @@ if (!class_exists('TribeEventsAPI')) {
130
  $cost = ( isset( $data['EventCost'] ) ) ? $data['EventCost'] : '';
131
  $data['EventCost'] = $cost;
132
 
133
- $tribe_ecp->do_action('tribe_events_event_save', $event_id);
134
 
135
  $cost = ( isset( $data['EventCost'] ) ) ? $data['EventCost'] : '';
136
  $data['EventCost'] = $cost;
@@ -163,7 +163,7 @@ if (!class_exists('TribeEventsAPI')) {
163
  wp_update_post( $update_event );
164
  }
165
 
166
- $tribe_ecp->do_action('tribe_events_update_meta', $event_id, false, $data, $event);
167
  }
168
 
169
  /**
101
 
102
  $data['EventDuration'] = strtotime($data['EventEndDate']) - $startTimestamp;
103
 
104
+ $old_data['EventStartDate'] = TribeEvents::get_series_start_date($event_id);
105
 
106
  update_post_meta( $event_id, '_EventShowMapLink', isset( $data['venue']['EventShowMapLink'] ) );
107
  update_post_meta( $event_id, '_EventShowMap', isset( $data['venue']['EventShowMap'] ) );
130
  $cost = ( isset( $data['EventCost'] ) ) ? $data['EventCost'] : '';
131
  $data['EventCost'] = $cost;
132
 
133
+ do_action('tribe_events_event_save', $event_id);
134
 
135
  $cost = ( isset( $data['EventCost'] ) ) ? $data['EventCost'] : '';
136
  $data['EventCost'] = $cost;
163
  wp_update_post( $update_event );
164
  }
165
 
166
+ do_action( 'tribe_events_update_meta', $event_id, $data );
167
  }
168
 
169
  /**
lib/tribe-event-exception.class.php CHANGED
@@ -12,7 +12,7 @@ if( !class_exists( 'TribeEventsPostException' ) ) {
12
  * Display the exception message in the div #tribe-events-post-error
13
  * @param int $post->ID
14
  */
15
- public function displayMessage( $postId ) {
16
  if( $error = get_post_meta( $postId, TribeEvents::EVENTSERROROPT, true ) ) : ?>
17
  <script type="text/javascript">jQuery('#tribe-events-post-error').append('<h3><?php _e( 'Error', 'tribe-events-calendar' ); ?></h3><p>' + '<?php echo $error; ?>' + '</p>').show();</script>
18
  <?php endif;
@@ -28,7 +28,7 @@ if( !class_exists( 'TribeEventsOptionsException' ) ) {
28
  /**
29
  * Display the exception message in the div #tribe-events-options-error
30
  */
31
- public function displayMessage() {
32
  $eventsOptions = get_option(TribeEvents::OPTIONNAME, array() );
33
  if( isset($eventsOptions['error']) && $eventsOptions['error'] ) : ?>
34
  <script type="text/javascript">jQuery('#tribe-events-options-error').append('<h3><?php _e( 'Error', 'tribe-events-calendar' ); ?></h3><p>' + '<?php echo $eventsOptions['error']; ?>' + '</p>').show();</script>
12
  * Display the exception message in the div #tribe-events-post-error
13
  * @param int $post->ID
14
  */
15
+ public static function displayMessage( $postId ) {
16
  if( $error = get_post_meta( $postId, TribeEvents::EVENTSERROROPT, true ) ) : ?>
17
  <script type="text/javascript">jQuery('#tribe-events-post-error').append('<h3><?php _e( 'Error', 'tribe-events-calendar' ); ?></h3><p>' + '<?php echo $error; ?>' + '</p>').show();</script>
18
  <?php endif;
28
  /**
29
  * Display the exception message in the div #tribe-events-options-error
30
  */
31
+ public static function displayMessage() {
32
  $eventsOptions = get_option(TribeEvents::OPTIONNAME, array() );
33
  if( isset($eventsOptions['error']) && $eventsOptions['error'] ) : ?>
34
  <script type="text/javascript">jQuery('#tribe-events-options-error').append('<h3><?php _e( 'Error', 'tribe-events-calendar' ); ?></h3><p>' + '<?php echo $eventsOptions['error']; ?>' + '</p>').show();</script>
lib/tribe-event-query.class.php CHANGED
@@ -17,14 +17,6 @@ if ( !class_exists( 'TribeEventsQuery' ) ) {
17
  public static $is_event_organizer;
18
  public static $is_event_query;
19
 
20
- /**
21
- * Class Constructor
22
- *
23
- * @return void
24
- */
25
- function __construct() {
26
- add_action( 'tribe_events_init_pre_get_posts', array( __CLASS__, 'init' ) );
27
- }
28
 
29
  /**
30
  * Initialize The Events Calendar query filters and post processing.
@@ -34,7 +26,6 @@ if ( !class_exists( 'TribeEventsQuery' ) ) {
34
  public static function init() {
35
 
36
  // if tribe event query add filters
37
- add_action( 'parse_request', array( __CLASS__, 'parse_request' ), 50 );
38
  add_action( 'parse_query', array( __CLASS__, 'parse_query' ), 50 );
39
  add_action( 'pre_get_posts', array( __CLASS__, 'pre_get_posts' ), 50 );
40
 
@@ -46,26 +37,6 @@ if ( !class_exists( 'TribeEventsQuery' ) ) {
46
  }
47
  }
48
 
49
- /**
50
- * Add args to the main wordpress request
51
- *
52
- * @param $query_vars Array of args parsed from the main wp query
53
- * @return array
54
- * @author Jessica Yazbek
55
- **/
56
- public static function parse_request( $wpobj ) {
57
- $request_vars = $wpobj->query_vars;
58
- unset($request_vars['paged']);
59
- if ( empty( $request_vars ) ) { // this is the home page
60
- // check option for including events in the main wordpress loop, if true, add events post type
61
- if ( tribe_get_option( 'showEventsInMainLoop', false ) ) {
62
- $wpobj->query_vars['post_type'] = isset( $wpobj->query_vars['post_type'] ) ? (array) $wpobj->query_vars['post_type'] : array( 'post' );
63
- $wpobj->query_vars['post_type'][] = TribeEvents::POSTTYPE;
64
- }
65
- }
66
- // do_action( 'log', 'wpobj', 'default', $wpobj );
67
- }
68
-
69
  /**
70
  * Set any query flags
71
  *
@@ -75,16 +46,24 @@ if ( !class_exists( 'TribeEventsQuery' ) ) {
75
  **/
76
  public static function parse_query( $query ) {
77
 
 
 
 
 
78
  if ( $query->is_search && $query->get( 'post_type' ) == '' ) {
79
  $query->set( 'post_type', 'any' );
80
  }
81
 
82
  // Add tribe events post type to tag queries
83
- if ( $query->is_tag ) {
84
  $types = $query->get( 'post_type' );
85
  if ( is_array( $types ) ) {
86
  $types[] = TribeEvents::POSTTYPE;
87
- } else if ( $types != 'any' ) {
 
 
 
 
88
  $types = array( 'post', TribeEvents::POSTTYPE );
89
  }
90
  $query->set( 'post_type', $types );
@@ -95,11 +74,11 @@ if ( !class_exists( 'TribeEventsQuery' ) ) {
95
  // check if any possiblity of this being an event query
96
  $query->tribe_is_event = ( in_array( TribeEvents::POSTTYPE, $types ) && count( $types ) < 2 )
97
  ? true // it was an event query
98
- : false;
99
 
100
  $query->tribe_is_multi_posttype = ( in_array( TribeEvents::POSTTYPE, $types ) && count( $types ) >= 2 || in_array( 'any', $types ) )
101
  ? true // it's a query for multiple post types, events post type included
102
- : false;
103
 
104
  do_action( 'log', 'multi_posttype', 'default', var_export($query->tribe_is_multi_posttype, true) );
105
  do_action( 'log', 'types', 'default', $types );
@@ -108,27 +87,27 @@ if ( !class_exists( 'TribeEventsQuery' ) ) {
108
  // check if any possiblity of this being an event category
109
  $query->tribe_is_event_category = ( isset( $query->query_vars[TribeEvents::TAXONOMY] ) && $query->query_vars[TribeEvents::TAXONOMY] != '' )
110
  ? true // it was an event category
111
- : false;
112
 
113
  $query->tribe_is_event_venue = ( in_array( TribeEvents::VENUE_POST_TYPE, $types ) )
114
  ? true // it was an event venue
115
- : false;
116
 
117
  $query->tribe_is_event_organizer = ( in_array( TribeEvents::ORGANIZER_POST_TYPE, $types ) )
118
  ? true // it was an event organizer
119
- : false;
120
 
121
  $query->tribe_is_event_query = ( $query->tribe_is_event
122
  || $query->tribe_is_event_category
123
  || $query->tribe_is_event_venue
124
  || $query->tribe_is_event_organizer )
125
- ? true // this is an event query of some type
126
- : false; // move along, this is not the query you are looking for
127
 
128
  // is the query pulling posts from the past
129
  $query->tribe_is_past = ( ! empty( $query->query_vars['eventDisplay'] ) && $query->query_vars['eventDisplay'] == 'past' )
130
  ? true // query is requesting past posts
131
- : false;
132
  if ( ! empty( $_REQUEST['tribe_event_display'] ) && $_REQUEST['tribe_event_display'] == 'past' ) {
133
  $query->tribe_is_past = true;
134
  }
@@ -154,7 +133,7 @@ if ( !class_exists( 'TribeEventsQuery' ) ) {
154
  * @param object $query WP_Query object args supplied or default
155
  * @return object $query (modified)
156
  */
157
- public function pre_get_posts( $query ) {
158
 
159
  // setup static const to preserve query type through hooks
160
  self::$is_event = $query->tribe_is_event;
@@ -163,6 +142,15 @@ if ( !class_exists( 'TribeEventsQuery' ) ) {
163
  self::$is_event_organizer = $query->tribe_is_event_organizer;
164
  self::$is_event_query = $query->tribe_is_event_query;
165
 
 
 
 
 
 
 
 
 
 
166
  if ( $query->tribe_is_multi_posttype ) {
167
  do_action( 'log', 'multi_posttype', 'default', $query->tribe_is_multi_posttype );
168
  add_filter( 'posts_fields', array( __CLASS__, 'multi_type_posts_fields' ), 10, 2 );
@@ -193,6 +181,12 @@ if ( !class_exists( 'TribeEventsQuery' ) ) {
193
  $query->set( 'cache_results', false );
194
  $query->set( 'update_post_meta_cache', false );
195
  $query->set( 'update_post_term_cache', false );
 
 
 
 
 
 
196
  do_action( 'tribe_events_pre_get_posts', $query );
197
  return $query;
198
  }
@@ -256,6 +250,7 @@ if ( !class_exists( 'TribeEventsQuery' ) ) {
256
  $query->set( 'order', self::set_order() );
257
  self::$start_date = $query->get( 'start_date' );
258
  }
 
259
  // eventCat becomes a standard taxonomy query - will need to deprecate and update views eventually
260
  if ( ! in_array( $query->get( TribeEvents::TAXONOMY ), array( '', '-1' ) ) ) {
261
  $tax_query[] = array(
@@ -266,11 +261,18 @@ if ( !class_exists( 'TribeEventsQuery' ) ) {
266
  );
267
  }
268
 
269
- $meta_query[] = array(
270
- 'key' => '_EventStartDate',
271
- 'type' => 'DATETIME'
272
- );
273
 
 
 
 
 
 
 
 
 
274
  }
275
 
276
  // filter by Venue ID
@@ -396,7 +398,7 @@ if ( !class_exists( 'TribeEventsQuery' ) ) {
396
  $fields = array();
397
  $fields['event_start_date'] = "{$wpdb->postmeta}.meta_value as EventStartDate";
398
  $fields['event_end_date'] ="tribe_event_end_date.meta_value as EventEndDate";
399
- $fields = apply_filters( 'tribe_events_query_posts_fields', $fields );
400
  return $field_sql . ', '.implode(', ', $fields);
401
  } else {
402
  return $field_sql;
@@ -416,7 +418,7 @@ if ( !class_exists( 'TribeEventsQuery' ) ) {
416
  global $wpdb;
417
  $fields = array();
418
  $fields[] = "IF ({$wpdb->posts}.post_type = 'tribe_events', {$wpdb->postmeta}.meta_value, {$wpdb->posts}.post_date) AS post_date";
419
- $fields = apply_filters( 'tribe_events_query_posts_fields', $fields );
420
  return $field_sql . ', '.implode(', ', $fields);
421
  } else {
422
  return $field_sql;
@@ -519,7 +521,7 @@ if ( !class_exists( 'TribeEventsQuery' ) ) {
519
  * @param string $default
520
  * @return string
521
  */
522
- function set_orderby( $default = 'event_date' ) {
523
  $url_param = !empty( $_GET['orderby'] ) ? $_GET['orderby'] : null;
524
  $url_param = !empty( $_GET['tribe-orderby'] ) ? $_GET['tribe-orderby'] : $url_param;
525
  $url_param = strtolower( $url_param );
@@ -545,7 +547,7 @@ if ( !class_exists( 'TribeEventsQuery' ) ) {
545
  * @param string $default
546
  * @return string
547
  */
548
- function set_order( $default = 'ASC' ) {
549
  $url_param = !empty( $_GET['order'] ) ? $_GET['order'] : null;
550
  $url_param = !empty( $_GET['tribe-order'] ) ? $_GET['tribe-order'] : $url_param;
551
  $url_param = strtoupper( $url_param );
@@ -593,6 +595,7 @@ if ( !class_exists( 'TribeEventsQuery' ) ) {
593
  }
594
  }
595
 
 
596
  return $order_sql;
597
  }
598
 
@@ -673,32 +676,30 @@ if ( !class_exists( 'TribeEventsQuery' ) ) {
673
  case 'daily':
674
  default :
675
  global $wp_query;
676
-
677
  $output_date_format = '%Y-%m-%d %H:%i:%s';
678
- $raw_counts = $wpdb->get_results( sprintf( "
679
- SELECT tribe_event_start.post_id as ID,
680
- tribe_event_start.meta_value as EventStartDate,
681
- IF (tribe_event_duration.meta_value IS NULL, DATE_FORMAT( tribe_event_end_date.meta_value, '%1\$s'), DATE_FORMAT(DATE_ADD(CAST(tribe_event_start.meta_value AS DATETIME), INTERVAL tribe_event_duration.meta_value SECOND), '%1\$s')) as EventEndDate,
682
- {$wpdb->posts}.menu_order as menu_order
683
- FROM $wpdb->postmeta AS tribe_event_start
684
- LEFT JOIN $wpdb->posts ON (tribe_event_start.post_id = {$wpdb->posts}.ID)
685
- LEFT JOIN $wpdb->postmeta as tribe_event_duration ON ( tribe_event_start.post_id = tribe_event_duration.post_id AND tribe_event_duration.meta_key = '_EventDuration' )
686
- LEFT JOIN $wpdb->postmeta as tribe_event_end_date ON ( tribe_event_start.post_id = tribe_event_end_date.post_id AND tribe_event_end_date.meta_key = '_EventEndDate' )
687
- WHERE tribe_event_start.meta_key = '_EventStartDate'
688
- AND tribe_event_start.post_id IN ( %5\$s )
689
- AND ( (tribe_event_start.meta_value >= '%3\$s' AND tribe_event_start.meta_value <= '%4\$s')
690
- OR (tribe_event_start.meta_value <= '%3\$s' AND DATE_ADD(CAST( tribe_event_start.meta_value AS DATETIME), INTERVAL tribe_event_duration.meta_value SECOND) >= '%3\$s')
691
- OR (tribe_event_start.meta_value <= '%3\$s' AND tribe_event_end_date.meta_value >= '%3\$s')
692
- OR ( tribe_event_start.meta_value >= '%3\$s' AND tribe_event_start.meta_value <= '%4\$s')
693
- )
694
- ORDER BY menu_order ASC, DATE(tribe_event_start.meta_value) ASC, TIME(tribe_event_start.meta_value) ASC;",
695
- $output_date_format,
696
- $output_date_format,
697
- $args['start_date'],
698
- $args['end_date'],
699
- implode( ',', array_map( 'intval', $post_ids ) )
700
- ) );
701
- // echo $wpdb->last_query;
702
  $start_date = new DateTime( $args['start_date'] );
703
  $end_date = new DateTime( $args['end_date'] );
704
  $days = self::dateDiff( $start_date->format( 'Y-m-d' ), $end_date->format( 'Y-m-d' ) );
@@ -721,10 +722,14 @@ if ( !class_exists( 'TribeEventsQuery' ) ) {
721
  // event starts on this day (event start time is between start and end of day)
722
  // event ends on this day (event end time is between start and end of day)
723
  // event starts before start of day and ends after end of day (spans across this day)
724
- if (
725
- ( $record_start >= $start_of_day && $record_start < $end_of_day )
726
- || ( $record_end <= $end_of_day && $record_start >= $start_of_day )
 
 
 
727
  || ( $record_start <= $start_of_day && $record_end >= $end_of_day )
 
728
  ) {
729
  if ( isset( $term->term_id ) ) {
730
  $record_terms = get_the_terms( $record->ID, TribeEvents::TAXONOMY );
@@ -802,14 +807,14 @@ if ( !class_exists( 'TribeEventsQuery' ) ) {
802
  $cache = new TribeEventsCache();
803
  $cache_key = 'get_events_'.serialize($args);
804
 
805
- $result = $cache->get($cache_key, 'save_post');
806
  if ( $result && is_a($result, 'WP_Query') ) {
807
  do_action( 'log', 'cache hit', 'tribe-events-cache', $args );
808
  } else {
809
  do_action( 'log', 'no cache hit', 'tribe-events-cache', $args );
810
  // do_action( 'log', 'uncached query', 'tribe-events-query', $wpdb->last_query);
811
  $result = new WP_Query( $args );
812
- $cache->set($cache_key, $result, 0, 'save_post');
813
  }
814
 
815
  if ( ! empty( $result->posts ) ) {
17
  public static $is_event_organizer;
18
  public static $is_event_query;
19
 
 
 
 
 
 
 
 
 
20
 
21
  /**
22
  * Initialize The Events Calendar query filters and post processing.
26
  public static function init() {
27
 
28
  // if tribe event query add filters
 
29
  add_action( 'parse_query', array( __CLASS__, 'parse_query' ), 50 );
30
  add_action( 'pre_get_posts', array( __CLASS__, 'pre_get_posts' ), 50 );
31
 
37
  }
38
  }
39
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
40
  /**
41
  * Set any query flags
42
  *
46
  **/
47
  public static function parse_query( $query ) {
48
 
49
+ if ( ! $query->is_main_query() ) {
50
+ $query->is_home = false;
51
+ }
52
+
53
  if ( $query->is_search && $query->get( 'post_type' ) == '' ) {
54
  $query->set( 'post_type', 'any' );
55
  }
56
 
57
  // Add tribe events post type to tag queries
58
+ if ( $query->is_tag && (array) $query->get( 'post_type' ) != array( TribeEvents::POSTTYPE ) ) {
59
  $types = $query->get( 'post_type' );
60
  if ( is_array( $types ) ) {
61
  $types[] = TribeEvents::POSTTYPE;
62
+ }
63
+ else if ( is_string ( $types ) ) {
64
+ $types = array( $types, TribeEvents::POSTTYPE );
65
+ }
66
+ else if ( $types != 'any' ) {
67
  $types = array( 'post', TribeEvents::POSTTYPE );
68
  }
69
  $query->set( 'post_type', $types );
74
  // check if any possiblity of this being an event query
75
  $query->tribe_is_event = ( in_array( TribeEvents::POSTTYPE, $types ) && count( $types ) < 2 )
76
  ? true // it was an event query
77
+ : false;
78
 
79
  $query->tribe_is_multi_posttype = ( in_array( TribeEvents::POSTTYPE, $types ) && count( $types ) >= 2 || in_array( 'any', $types ) )
80
  ? true // it's a query for multiple post types, events post type included
81
+ : false;
82
 
83
  do_action( 'log', 'multi_posttype', 'default', var_export($query->tribe_is_multi_posttype, true) );
84
  do_action( 'log', 'types', 'default', $types );
87
  // check if any possiblity of this being an event category
88
  $query->tribe_is_event_category = ( isset( $query->query_vars[TribeEvents::TAXONOMY] ) && $query->query_vars[TribeEvents::TAXONOMY] != '' )
89
  ? true // it was an event category
90
+ : false;
91
 
92
  $query->tribe_is_event_venue = ( in_array( TribeEvents::VENUE_POST_TYPE, $types ) )
93
  ? true // it was an event venue
94
+ : false;
95
 
96
  $query->tribe_is_event_organizer = ( in_array( TribeEvents::ORGANIZER_POST_TYPE, $types ) )
97
  ? true // it was an event organizer
98
+ : false;
99
 
100
  $query->tribe_is_event_query = ( $query->tribe_is_event
101
  || $query->tribe_is_event_category
102
  || $query->tribe_is_event_venue
103
  || $query->tribe_is_event_organizer )
104
+ ? true // this is an event query of some type
105
+ : false; // move along, this is not the query you are looking for
106
 
107
  // is the query pulling posts from the past
108
  $query->tribe_is_past = ( ! empty( $query->query_vars['eventDisplay'] ) && $query->query_vars['eventDisplay'] == 'past' )
109
  ? true // query is requesting past posts
110
+ : false;
111
  if ( ! empty( $_REQUEST['tribe_event_display'] ) && $_REQUEST['tribe_event_display'] == 'past' ) {
112
  $query->tribe_is_past = true;
113
  }
133
  * @param object $query WP_Query object args supplied or default
134
  * @return object $query (modified)
135
  */
136
+ public static function pre_get_posts( $query ) {
137
 
138
  // setup static const to preserve query type through hooks
139
  self::$is_event = $query->tribe_is_event;
142
  self::$is_event_organizer = $query->tribe_is_event_organizer;
143
  self::$is_event_query = $query->tribe_is_event_query;
144
 
145
+ if ( $query->is_main_query() && is_home() ) {
146
+ // check option for including events in the main wordpress loop, if true, add events post type
147
+ if ( tribe_get_option( 'showEventsInMainLoop', false ) ) {
148
+ $query->query_vars['post_type'] = isset( $query->query_vars['post_type'] ) ? ( array ) $query->query_vars['post_type'] : array( 'post' );
149
+ $query->query_vars['post_type'][] = TribeEvents::POSTTYPE;
150
+ $query->tribe_is_multi_posttype = true;
151
+ }
152
+ }
153
+
154
  if ( $query->tribe_is_multi_posttype ) {
155
  do_action( 'log', 'multi_posttype', 'default', $query->tribe_is_multi_posttype );
156
  add_filter( 'posts_fields', array( __CLASS__, 'multi_type_posts_fields' ), 10, 2 );
181
  $query->set( 'cache_results', false );
182
  $query->set( 'update_post_meta_cache', false );
183
  $query->set( 'update_post_term_cache', false );
184
+ $query->set( 'meta_query', array(
185
+ array(
186
+ 'key' => '_EventStartDate',
187
+ 'type' => 'DATETIME'
188
+ )
189
+ ));
190
  do_action( 'tribe_events_pre_get_posts', $query );
191
  return $query;
192
  }
250
  $query->set( 'order', self::set_order() );
251
  self::$start_date = $query->get( 'start_date' );
252
  }
253
+
254
  // eventCat becomes a standard taxonomy query - will need to deprecate and update views eventually
255
  if ( ! in_array( $query->get( TribeEvents::TAXONOMY ), array( '', '-1' ) ) ) {
256
  $tax_query[] = array(
261
  );
262
  }
263
 
264
+ // Only add the postmeta hack if it's not the main admin events list
265
+ // Because this method filters out drafts without EventStartDate.
266
+ // For this screen we're doing the JOIN manually in TribeEventsAdminList
 
267
 
268
+ $screen = ! is_admin() || ( defined( 'DOING_AJAX' ) && DOING_AJAX ) ? null : get_current_screen();
269
+
270
+ if ( empty( $screen ) || $screen->id != 'edit-tribe_events' ) {
271
+ $meta_query[] = array(
272
+ 'key' => '_EventStartDate',
273
+ 'type' => 'DATETIME'
274
+ );
275
+ }
276
  }
277
 
278
  // filter by Venue ID
398
  $fields = array();
399
  $fields['event_start_date'] = "{$wpdb->postmeta}.meta_value as EventStartDate";
400
  $fields['event_end_date'] ="tribe_event_end_date.meta_value as EventEndDate";
401
+ $fields = apply_filters( 'tribe_events_query_posts_fields', $fields, $query );
402
  return $field_sql . ', '.implode(', ', $fields);
403
  } else {
404
  return $field_sql;
418
  global $wpdb;
419
  $fields = array();
420
  $fields[] = "IF ({$wpdb->posts}.post_type = 'tribe_events', {$wpdb->postmeta}.meta_value, {$wpdb->posts}.post_date) AS post_date";
421
+ $fields = apply_filters( 'tribe_events_query_posts_fields', $fields, $query );
422
  return $field_sql . ', '.implode(', ', $fields);
423
  } else {
424
  return $field_sql;
521
  * @param string $default
522
  * @return string
523
  */
524
+ public static function set_orderby( $default = 'event_date' ) {
525
  $url_param = !empty( $_GET['orderby'] ) ? $_GET['orderby'] : null;
526
  $url_param = !empty( $_GET['tribe-orderby'] ) ? $_GET['tribe-orderby'] : $url_param;
527
  $url_param = strtolower( $url_param );
547
  * @param string $default
548
  * @return string
549
  */
550
+ public static function set_order( $default = 'ASC' ) {
551
  $url_param = !empty( $_GET['order'] ) ? $_GET['order'] : null;
552
  $url_param = !empty( $_GET['tribe-order'] ) ? $_GET['tribe-order'] : $url_param;
553
  $url_param = strtoupper( $url_param );
595
  }
596
  }
597
 
598
+ $order_sql = apply_filters( 'tribe_events_query_posts_orderby', $order_sql, $query );
599
  return $order_sql;
600
  }
601
 
676
  case 'daily':
677
  default :
678
  global $wp_query;
 
679
  $output_date_format = '%Y-%m-%d %H:%i:%s';
680
+ $raw_counts = $wpdb->get_results( $wpdb->prepare( "
681
+ SELECT tribe_event_start.post_id as ID,
682
+ tribe_event_start.meta_value as EventStartDate,
683
+ IF (tribe_event_duration.meta_value IS NULL, DATE_FORMAT( tribe_event_end_date.meta_value, '%1\$s'), DATE_FORMAT(DATE_ADD(CAST(tribe_event_start.meta_value AS DATETIME), INTERVAL tribe_event_duration.meta_value SECOND), '%1\$s')) as EventEndDate,
684
+ {$wpdb->posts}.menu_order as menu_order
685
+ FROM $wpdb->postmeta AS tribe_event_start
686
+ LEFT JOIN $wpdb->posts ON (tribe_event_start.post_id = {$wpdb->posts}.ID)
687
+ LEFT JOIN $wpdb->postmeta as tribe_event_duration ON ( tribe_event_start.post_id = tribe_event_duration.post_id AND tribe_event_duration.meta_key = '_EventDuration' )
688
+ LEFT JOIN $wpdb->postmeta as tribe_event_end_date ON ( tribe_event_start.post_id = tribe_event_end_date.post_id AND tribe_event_end_date.meta_key = '_EventEndDate' )
689
+ WHERE tribe_event_start.meta_key = '_EventStartDate'
690
+ AND tribe_event_start.post_id IN ( %5\$s )
691
+ AND ( (tribe_event_start.meta_value >= '%3\$s' AND tribe_event_start.meta_value <= '%4\$s')
692
+ OR (tribe_event_start.meta_value <= '%3\$s' AND DATE_ADD(CAST( tribe_event_start.meta_value AS DATETIME), INTERVAL tribe_event_duration.meta_value SECOND) >= '%3\$s')
693
+ OR (tribe_event_start.meta_value <= '%3\$s' AND tribe_event_end_date.meta_value >= '%3\$s')
694
+ OR ( tribe_event_start.meta_value >= '%3\$s' AND tribe_event_start.meta_value <= '%4\$s')
695
+ )
696
+ ORDER BY menu_order ASC, DATE(tribe_event_start.meta_value) ASC, TIME(tribe_event_start.meta_value) ASC;",
697
+ $output_date_format,
698
+ $output_date_format,
699
+ $args['start_date'],
700
+ $args['end_date'],
701
+ implode( ',', array_map( 'intval', $post_ids ) )
702
+ ) );
 
703
  $start_date = new DateTime( $args['start_date'] );
704
  $end_date = new DateTime( $args['end_date'] );
705
  $days = self::dateDiff( $start_date->format( 'Y-m-d' ), $end_date->format( 'Y-m-d' ) );
722
  // event starts on this day (event start time is between start and end of day)
723
  // event ends on this day (event end time is between start and end of day)
724
  // event starts before start of day and ends after end of day (spans across this day)
725
+ if (
726
+ // event starts today
727
+ ( $record_start >= $start_of_day && $record_start <= $end_of_day )
728
+ // event ends today
729
+ || ( $record_end >= $start_of_day && $record_end <= $end_of_day )
730
+ // event spans across today
731
  || ( $record_start <= $start_of_day && $record_end >= $end_of_day )
732
+
733
  ) {
734
  if ( isset( $term->term_id ) ) {
735
  $record_terms = get_the_terms( $record->ID, TribeEvents::TAXONOMY );
807
  $cache = new TribeEventsCache();
808
  $cache_key = 'get_events_'.serialize($args);
809
 
810
+ $result = $cache->get( $cache_key, 'save_post' );
811
  if ( $result && is_a($result, 'WP_Query') ) {
812
  do_action( 'log', 'cache hit', 'tribe-events-cache', $args );
813
  } else {
814
  do_action( 'log', 'no cache hit', 'tribe-events-cache', $args );
815
  // do_action( 'log', 'uncached query', 'tribe-events-query', $wpdb->last_query);
816
  $result = new WP_Query( $args );
817
+ $cache->set( $cache_key, $result, 0, 'save_post' );
818
  }
819
 
820
  if ( ! empty( $result->posts ) ) {
lib/tribe-event-query.class.php.orig DELETED
@@ -1,840 +0,0 @@
1
- <?php
2
- /**
3
- * Controls the main event query. Allows for recurring events.
4
- */
5
-
6
- // Don't load directly
7
- if ( !defined( 'ABSPATH' ) ) { die( '-1' ); }
8
-
9
- if ( !class_exists( 'TribeEventsQuery' ) ) {
10
- class TribeEventsQuery {
11
-
12
- public static $start_date;
13
- public static $end_date;
14
- public static $is_event;
15
- public static $is_event_category;
16
- public static $is_event_venue;
17
- public static $is_event_organizer;
18
- public static $is_event_query;
19
-
20
- /**
21
- * Class Constructor
22
- *
23
- * @return void
24
- */
25
- function __construct() {
26
- add_action( 'tribe_events_init_pre_get_posts', array( __CLASS__, 'init' ) );
27
- }
28
-
29
- /**
30
- * Initialize The Events Calendar query filters and post processing.
31
- *
32
- * @return void
33
- */
34
- public static function init() {
35
-
36
- // if tribe event query add filters
37
- add_action( 'parse_request', array( __CLASS__, 'parse_request' ), 50 );
38
- add_action( 'parse_query', array( __CLASS__, 'parse_query' ), 50 );
39
- add_action( 'pre_get_posts', array( __CLASS__, 'pre_get_posts' ), 50 );
40
-
41
- if ( is_admin() ) {
42
- require_once 'tribe-recurring-event-cleanup.php';
43
- $cleanup = new TribeRecurringEventCleanup();
44
- $cleanup->toggle_recurring_events();
45
- unset( $cleanup );
46
- }
47
- }
48
-
49
- /**
50
- * Add args to the main wordpress request
51
- *
52
- * @param $query_vars Array of args parsed from the main wp query
53
- * @return array
54
- * @author Jessica Yazbek
55
- **/
56
- public static function parse_request( $wpobj ) {
57
- $request_vars = $wpobj->query_vars;
58
- unset($request_vars['paged']);
59
- if ( empty( $request_vars ) ) { // this is the home page
60
- // check option for including events in the main wordpress loop, if true, add events post type
61
- if ( tribe_get_option( 'showEventsInMainLoop', false ) ) {
62
- $wpobj->query_vars['post_type'] = isset( $wpobj->query_vars['post_type'] ) ? (array) $wpobj->query_vars['post_type'] : array( 'post' );
63
- $wpobj->query_vars['post_type'][] = TribeEvents::POSTTYPE;
64
- }
65
- }
66
- // do_action( 'log', 'wpobj', 'default', $wpobj );
67
- }
68
-
69
- /**
70
- * Set any query flags
71
- *
72
- * @return $query WP_Query
73
- * @author Jessica Yazbek
74
- * @since 3.0.3
75
- **/
76
- public static function parse_query( $query ) {
77
-
78
- if ( $query->is_search && $query->get( 'post_type' ) == '' ) {
79
- $query->set( 'post_type', 'any' );
80
- }
81
-
82
- $types = ( ! empty( $query->query_vars['post_type'] ) ? (array) $query->query_vars['post_type'] : array() );
83
-
84
- // check if any possiblity of this being an event query
85
- $query->tribe_is_event = ( in_array( TribeEvents::POSTTYPE, $types ) && count( $types ) < 2 )
86
- ? true // it was an event query
87
- : false;
88
-
89
- $query->tribe_is_multi_posttype = ( in_array( TribeEvents::POSTTYPE, $types ) && count( $types ) >= 2 || in_array( 'any', $types ) )
90
- ? true // it's a query for multiple post types, events post type included
91
- : false;
92
-
93
- do_action( 'log', 'multi_posttype', 'default', var_export($query->tribe_is_multi_posttype, true) );
94
- do_action( 'log', 'types', 'default', $types );
95
- do_action( 'log', 'request', 'default', $query->query_vars );
96
-
97
- // check if any possiblity of this being an event category
98
- $query->tribe_is_event_category = ( isset( $query->query_vars[TribeEvents::TAXONOMY] ) && $query->query_vars[TribeEvents::TAXONOMY] != '' )
99
- ? true // it was an event category
100
- : false;
101
-
102
- $query->tribe_is_event_venue = ( in_array( TribeEvents::VENUE_POST_TYPE, $types ) )
103
- ? true // it was an event venue
104
- : false;
105
-
106
- $query->tribe_is_event_organizer = ( in_array( TribeEvents::ORGANIZER_POST_TYPE, $types ) )
107
- ? true // it was an event organizer
108
- : false;
109
-
110
- $query->tribe_is_event_query = ( $query->tribe_is_event
111
- || $query->tribe_is_event_category
112
- || $query->tribe_is_event_venue
113
- || $query->tribe_is_event_organizer )
114
- ? true // this is an event query of some type
115
- : false; // move along, this is not the query you are looking for
116
-
117
- // is the query pulling posts from the past
118
- $query->tribe_is_past = ( ! empty( $query->query_vars['eventDisplay'] ) && $query->query_vars['eventDisplay'] == 'past' )
119
- ? true // query is requesting past posts
120
- : false;
121
- if ( ! empty( $_REQUEST['tribe_event_display'] ) && $_REQUEST['tribe_event_display'] == 'past' ) {
122
- $query->tribe_is_past = true;
123
- }
124
-
125
- // never allow 404 on month view
126
- if ( $query->get('eventDisplay') == 'month' ) {
127
- $query->is_post_type_archive = true;
128
- }
129
-
130
- // check if is_event_query === true and hook filter
131
- if ( $query->tribe_is_event_query ) {
132
- // fixing is_home param
133
- $query->is_home = !empty( $query->query_vars['is_home'] ) ? $query->query_vars['is_home'] : false;
134
- do_action( 'tribe_events_parse_query', $query );
135
- }
136
- }
137
-
138
- /**
139
- * Is hooked by init() filter to parse the WP_Query arguments for main and alt queries.
140
- *
141
- * @param object $query WP_Query object args supplied or default
142
- * @return object $query (modified)
143
- */
144
- public function pre_get_posts( $query ) {
145
-
146
- // setup static const to preserve query type through hooks
147
- self::$is_event = $query->tribe_is_event;
148
- self::$is_event_category = $query->tribe_is_event_category;
149
- self::$is_event_venue = $query->tribe_is_event_venue;
150
- self::$is_event_organizer = $query->tribe_is_event_organizer;
151
- self::$is_event_query = $query->tribe_is_event_query;
152
-
153
- if ( $query->tribe_is_multi_posttype ) {
154
- do_action( 'log', 'multi_posttype', 'default', $query->tribe_is_multi_posttype );
155
- add_filter( 'posts_join', array( __CLASS__, 'posts_join' ), 10, 2 );
156
- add_filter( 'posts_join', array( __CLASS__, 'posts_join_orderby' ), 10, 2 );
157
- add_filter( 'posts_fields', array( __CLASS__, 'multi_type_posts_fields' ), 10, 2 );
158
- add_filter( 'posts_distinct', array( __CLASS__, 'posts_distinct' ) );
159
- add_filter( 'posts_groupby', array( __CLASS__, 'posts_groupby' ), 10, 2 );
160
- add_filter( 'posts_orderby', array( __CLASS__, 'posts_orderby' ), 10, 2 );
161
- do_action( 'tribe_events_pre_get_posts', $query );
162
- return;
163
- }
164
-
165
- if ( $query->tribe_is_event || $query->tribe_is_event_category ) {
166
-
167
- self::$start_date = null;
168
- self::$end_date = null;
169
-
170
- if ( ! ( $query->is_main_query() && $query->get( 'eventDisplay' ) == 'month' ) ) {
171
- add_filter( 'posts_join', array( __CLASS__, 'posts_join' ), 10, 2 );
172
- add_filter( 'posts_join', array( __CLASS__, 'posts_join_orderby' ), 10, 2 );
173
- add_filter( 'posts_where', array( __CLASS__, 'posts_where' ), 10, 2 );
174
- add_filter( 'posts_fields', array( __CLASS__, 'posts_fields' ), 10, 2 );
175
- add_filter( 'posts_distinct', array( __CLASS__, 'posts_distinct' ) );
176
- add_filter( 'posts_groupby', array( __CLASS__, 'posts_groupby' ), 10, 2 );
177
- } else {
178
- // reduce number of queries triggered by main WP_Query on month view
179
- $query->set( 'posts_per_page', 1 );
180
- $query->set( 'no_found_rows', true );
181
- $query->set( 'cache_results', false );
182
- $query->set( 'update_post_meta_cache', false );
183
- $query->set( 'update_post_term_cache', false );
184
- apply_filters( 'tribe_events_pre_get_posts', $query );
185
- return $query;
186
- }
187
-
188
- // if a user selects a date in the event bar we want it to persist as long as possible
189
- if ( !empty( $_REQUEST['tribe-bar-date'] ) ) {
190
- $query->set( 'eventDate', $_REQUEST['tribe-bar-date'] );
191
- }
192
-
193
- // if a user provides a search term we want to use that in the search params
194
- if ( !empty( $_REQUEST['tribe-bar-search'] ) ) {
195
- $query->query_vars['s'] = $_REQUEST['tribe-bar-search'];
196
- }
197
-
198
- $query->query_vars['eventDisplay'] = !empty( $query->query_vars['eventDisplay'] ) ? $query->query_vars['eventDisplay'] : TribeEvents::instance()->displaying;
199
-
200
- if ( !empty( $query->query_vars['eventDisplay'] ) ) {
201
- switch ( $query->query_vars['eventDisplay'] ) {
202
- case 'custom':
203
- // if set this allows for a custom query to not be burdened with these settings
204
- break;
205
- case 'all':
206
- $query->set( 'orderby', self::set_orderby() );
207
- $query->set( 'order', self::set_order() );
208
- break;
209
- <<<<<<< Updated upstream
210
- =======
211
- case 'month':
212
- $start_date = substr_replace( date_i18n( TribeDateUtils::DBDATEFORMAT ), '01', -2 );
213
- $passed_date = $query->get( 'eventDate' ) ? substr_replace( date_i18n( TribeDateUtils::DBDATEFORMAT, strtotime( $query->get( 'eventDate' ) ) ), '01', -2 ) : false;
214
- $start_date = $passed_date ? $passed_date : $start_date;
215
- $query->set( 'start_date', $start_date );
216
- $query->set( 'eventDate', $start_date );
217
- $query->set( 'end_date', date( 'Y-m-d', strtotime( TribeEvents::instance()->nextMonth( $start_date ) ) -( 24*3600 ) ) );
218
- if ( $query->is_main_query() ) {
219
- $query->set( 'posts_per_page', 1 ); // we're going to do this day-by-day later, so limit the size of the query to reduce mysql time
220
- $query->set( 'no_found_rows', TRUE );
221
- } else {
222
- $query->set( 'orderby', self::set_orderby() );
223
- $query->set( 'order', self::set_order() );
224
- $query->set( 'posts_per_page', -1 ); // get all events for the month
225
- }
226
- self::$start_date = $query->get( 'start_date' );
227
- self::$end_date = $query->get( 'end_date' );
228
- break;
229
- >>>>>>> Stashed changes
230
- case 'single-event':
231
- if ( $query->get( 'eventDate' ) != '' ) {
232
- $query->set( 'start_date', $query->get( 'eventDate' ) );
233
- $query->set( 'eventDate', $query->get( 'eventDate' ) );
234
- self::$start_date = $query->get( 'start_date' );
235
- }
236
- break;
237
- case 'upcoming':
238
- case 'past' :
239
- default: // default display query
240
- $tribe_paged = ( ! empty( $_REQUEST['tribe_paged'] ) ) ? $_REQUEST['tribe_paged'] : $query->get('paged');
241
- $query->set( 'paged', $tribe_paged );
242
- $event_date = ( $query->get( 'eventDate' ) != '' )
243
- ? $query->get( 'eventDate' )
244
- : date_i18n( TribeDateUtils::DBDATETIMEFORMAT );
245
- if ( ! $query->tribe_is_past ) {
246
- $query->set( 'start_date', $event_date );
247
- $query->set( 'end_date', '' );
248
- $query->set( 'order', self::set_order() );
249
- } else {
250
- $query->set( 'start_date', '' );
251
- $query->set( 'end_date', $event_date );
252
- $query->set( 'order', self::set_order( 'DESC') );
253
- }
254
- $query->set( 'orderby', self::set_orderby() );
255
- $query->set( 'hide_upcoming', true );
256
- self::$start_date = $query->get( 'start_date' );
257
- self::$end_date = $query->get( 'end_date' );
258
- break;
259
- $query->set( 'eventDate', '' );
260
- }
261
- } else {
262
- $query->set( 'hide_upcoming', true );
263
- $query->set( 'start_date', date_i18n( TribeDateUtils::DBDATETIMEFORMAT ) );
264
- $query->set( 'orderby', self::set_orderby() );
265
- $query->set( 'order', self::set_order() );
266
- self::$start_date = $query->get( 'start_date' );
267
- }
268
- // eventCat becomes a standard taxonomy query - will need to deprecate and update views eventually
269
- if ( ! in_array( $query->get( TribeEvents::TAXONOMY ), array( '', '-1' ) ) ) {
270
- $tax_query[] = array(
271
- 'taxonomy' => TribeEvents::TAXONOMY,
272
- 'field' => is_numeric( $query->get( TribeEvents::TAXONOMY ) ) ? 'id' : 'slug',
273
- 'terms' => $query->get( TribeEvents::TAXONOMY ),
274
- 'include_children' => false,
275
- );
276
- }
277
-
278
- $meta_query[] = array(
279
- 'key' => '_EventStartDate',
280
- 'type' => 'DATETIME'
281
- );
282
-
283
- }
284
-
285
- // filter by Venue ID
286
- if ( $query->tribe_is_event_query && $query->get( 'venue' ) != '' ) {
287
- $meta_query[] = array(
288
- 'key' => '_EventVenueID',
289
- 'value' => $query->get( 'venue' )
290
- );
291
- }
292
-
293
- // filter by Organizer ID
294
- if ( $query->tribe_is_event_query && $query->get( 'organizer' ) != '' ) {
295
- $meta_query[] = array(
296
- 'key' => '_EventOrganizerID',
297
- 'value' => $query->get( 'organizer' )
298
- );
299
- }
300
-
301
- // proprietary metaKeys go to standard meta
302
- if ( $query->tribe_is_event_query && $query->get( 'metaKey' ) != '' ) {
303
- $meta_query[] = array(
304
- 'key' => $query->get( 'metaKey' ),
305
- 'value' => $query->get( 'metaValue' )
306
- );
307
- }
308
-
309
- // enable pagination setup
310
- if ( $query->tribe_is_event_query && $query->get( 'numResults' ) != '' ) {
311
- $query->set( 'posts_per_page', $query->get( 'numResults' ) );
312
- } elseif ( $query->tribe_is_event_query && $query->get( 'posts_per_page' ) == '' ) {
313
- $query->set( 'posts_per_page', (int) tribe_get_option( 'postsPerPage', 10 ) );
314
- }
315
-
316
- // hide upcoming events from query (only not in admin)
317
- if ( $query->tribe_is_event_query && $query->get( 'hide_upcoming' ) ) {
318
- $hide_upcoming_ids = self::getHideFromUpcomingEvents();
319
- if ( !empty( $hide_upcoming_ids ) )
320
- $query->set( 'post__not_in', $hide_upcoming_ids );
321
- }
322
-
323
- if ( $query->tribe_is_event_query && !empty( $meta_query ) ) {
324
- // setup default relation for meta queries
325
- $meta_query['relation'] = 'AND';
326
- $meta_query_combined = array_merge( (array) $meta_query, (array) $query->get( 'meta_query' ) );
327
- $query->set( 'meta_query', $meta_query_combined );
328
- }
329
-
330
- if ( $query->tribe_is_event_query && !empty( $tax_query ) ) {
331
- // setup default relation for tax queries
332
- $tax_query_combined = array_merge( (array) $tax_query, (array) $query->get( 'tax_query' ) );
333
- $query->set( 'tax_query', $tax_query_combined );
334
- }
335
-
336
- if ( $query->tribe_is_event_query ) {
337
- add_filter( 'posts_orderby', array( __CLASS__, 'posts_orderby' ), 10, 2 );
338
- }
339
-
340
- // if is in the admin remove the event date & upcoming filters, unless is an ajax call
341
- global $current_screen;
342
- if ( is_admin() && $query->tribe_is_event_query && !empty( $current_screen->id ) && $current_screen->id == 'edit-' . TribeEvents::POSTTYPE ) {
343
- if ( ( !defined( 'DOING_AJAX' ) ) || ( defined( 'DOING_AJAX' ) && !( DOING_AJAX ) ) ) {
344
-
345
- // remove_filter( 'posts_join', array( __CLASS__, 'posts_join' ), 10, 2 );
346
- remove_filter( 'posts_where', array( __CLASS__, 'posts_where' ), 10, 2 );
347
- remove_filter( 'posts_fields', array( __CLASS__, 'posts_fields' ) );
348
- remove_filter( 'posts_distinct', array( __CLASS__, 'posts_distinct' ) );
349
- remove_filter( 'posts_groupby', array( __CLASS__, 'posts_groupby' ) );
350
- $query->set( 'post__not_in', '' );
351
-
352
- // set the default order for posts within admin lists
353
- if ( !isset( $query->query['order'] ) ) {
354
- $query->set( 'order', 'DESC' );
355
- } else {
356
- // making sure we preserve the order supplied by the query string even if it is overwritten above
357
- $query->set( 'order', $query->query['order'] );
358
- }
359
- }
360
- }
361
-
362
- if ( $query->tribe_is_event_query ) {
363
- do_action( 'tribe_events_pre_get_posts', $query );
364
- }
365
-
366
- return $query;
367
- }
368
-
369
- /**
370
- * Modifies the GROUP BY statement for Tribe Events queries.
371
- *
372
- * @param string $groupby_sql The current GROUP BY statement.
373
- * @param WP_Query $query The current query.
374
- * @return string The modified GROUP BY content.
375
- */
376
- public static function posts_groupby( $groupby_sql, $query ) {
377
- global $wpdb;
378
- if ( self::$is_event_query ) {
379
- return apply_filters( 'tribe_events_query_posts_groupby', '', $query );
380
- } else {
381
- return $groupby_sql;
382
- }
383
- }
384
-
385
- /**
386
- * Adds DISTINCT to the query.
387
- *
388
- * @param string $distinct The current DISTINCT statement.
389
- * @return string The modified DISTINCT statement.
390
- */
391
- public static function posts_distinct( $distinct ) {
392
- return "DISTINCT";
393
- }
394
-
395
- /**
396
- * Adds the proper fields to the FIELDS statement in the query.
397
- *
398
- * @param string $fields The current/original FIELDS statement.
399
- * @param WP_Query $query The current query object.
400
- * @return string The modified FIELDS statement.
401
- */
402
- public static function posts_fields( $field_sql, $query ) {
403
- if ( self::$is_event ) {
404
- global $wpdb;
405
- $fields = array();
406
- $fields['event_start_date'] = "{$wpdb->postmeta}.meta_value as EventStartDate";
407
- $fields['event_end_date'] ="tribe_event_end_date.meta_value as EventEndDate";
408
- $fields = apply_filters( 'tribe_events_query_posts_fields', $fields );
409
- return $field_sql . ', '.implode(', ', $fields);
410
- } else {
411
- return $field_sql;
412
- }
413
- }
414
-
415
- /**
416
- * Adds the proper fields to the FIELDS statement in the query.
417
- *
418
- * @param string $fields The current/original FIELDS statement.
419
- * @param WP_Query $query The current query object.
420
- * @return string The modified FIELDS statement.
421
- */
422
- public static function multi_type_posts_fields( $field_sql, $query ) {
423
- global $wpdb;
424
- $fields = array();
425
- $fields[] = "IF ({$wpdb->posts}.post_type = 'tribe_events', {$wpdb->postmeta}.meta_value, {$wpdb->posts}.post_date) AS post_date";
426
- $fields = apply_filters( 'tribe_events_query_posts_fields', $fields );
427
- return $field_sql . ', '.implode(', ', $fields);
428
- }
429
-
430
- /**
431
- * Custom SQL join for event end date
432
- *
433
- * @param string $join_sql
434
- * @param wp_query $query
435
- * @return string
436
- */
437
- public static function posts_join( $join_sql, $query ) {
438
- global $wpdb;
439
- $joins = array();
440
-
441
- // if it's a true event query then we want create a join for where conditions
442
- if ( $query->tribe_is_event || $query->tribe_is_event_category || $query->tribe_is_multi_posttype ) {
443
- if ( $query->tribe_is_multi_posttype ) {
444
- $joins['event_start_date'] = " LEFT JOIN {$wpdb->postmeta} on {$wpdb->posts}.ID = {$wpdb->postmeta}.post_id AND {$wpdb->postmeta}.meta_key = '_EventStartDate'";
445
- } else {
446
- $joins['event_start_date'] = " AND {$wpdb->postmeta}.meta_key = '_EventStartDate'";
447
- $joins['event_end_date'] = " LEFT JOIN {$wpdb->postmeta} as tribe_event_end_date ON ( {$wpdb->posts}.ID = tribe_event_end_date.post_id AND tribe_event_end_date.meta_key = '_EventEndDate' ) ";
448
- }
449
- $joins = apply_filters( 'tribe_events_query_posts_joins', $joins );
450
- return $join_sql . implode('', $joins);
451
- }
452
- return $join_sql;
453
- }
454
-
455
- /**
456
- * Custom SQL join for orderby
457
- *
458
- * @param string $join_sql
459
- * @param wp_query $query
460
- * @return string
461
- */
462
- public static function posts_join_orderby( $join_sql, $query ) {
463
- global $wpdb;
464
- switch ($query->get( 'orderby' )) {
465
- case 'venue':
466
- $join_sql .= " LEFT JOIN {$wpdb->postmeta} tribe_order_by_venue_meta ON {$wpdb->posts}.ID = tribe_order_by_venue_meta.post_id AND tribe_order_by_venue_meta.meta_key='_EventVenueID' LEFT JOIN {$wpdb->posts} tribe_order_by_venue ON tribe_order_by_venue_meta.meta_value = tribe_order_by_venue.ID ";
467
- break;
468
- case 'organizer':
469
- $join_sql .= " LEFT JOIN {$wpdb->postmeta} tribe_order_by_organizer_meta ON {$wpdb->posts}.ID = tribe_order_by_organizer_meta.post_id AND tribe_order_by_organizer_meta.meta_key='_EventOrganizerID' LEFT JOIN {$wpdb->posts} tribe_order_by_organizer ON tribe_order_by_organizer_meta.meta_value = tribe_order_by_organizer.ID ";
470
- break;
471
- default: break;
472
- }
473
-
474
- return apply_filters( 'tribe_events_query_posts_join_orderby', $join_sql);
475
- }
476
-
477
- /**
478
- * Custom SQL conditional for event duration meta field
479
- *
480
- * @param string $where_sql
481
- * @param wp_query $query
482
- * @return string
483
- */
484
- public static function posts_where( $where_sql, $query ) {
485
- global $wpdb;
486
-
487
- // if it's a true event query then we to setup where conditions
488
- if ( $query->tribe_is_event || $query->tribe_is_event_category ) {
489
-
490
- $start_date = !empty( $query->start_date ) ? $query->start_date : $query->get( 'start_date' );
491
- $end_date = !empty( $query->end_date ) ? $query->end_date : $query->get( 'end_date' );
492
-
493
- // we can't store end date directly because it messes up the distinc clause
494
- $event_end_date = apply_filters('tribe_events_query_end_date_column', 'tribe_event_end_date.meta_value');
495
-
496
- // event start date
497
- $event_start_date = "{$wpdb->postmeta}.meta_value";
498
-
499
- // build where conditionals for events if date range params are set
500
- if ( $start_date != '' && $end_date != '' ) {
501
- $start_clause = $wpdb->prepare( "($event_start_date >= %s AND $event_start_date <= %s)", $start_date, $end_date );
502
- $end_clause = $wpdb->prepare( "($event_end_date >= %s AND $event_start_date <= %s )", $start_date, $end_date );
503
- $within_clause = $wpdb->prepare( "($event_start_date < %s AND $event_end_date >= %s )", $start_date, $end_date );
504
- $where_sql .= " AND ($start_clause OR $end_clause OR $within_clause)";
505
- } else if ( $start_date != '' ) {
506
- $start_clause = $wpdb->prepare( "{$wpdb->postmeta}.meta_value >= %s", $start_date );
507
- $within_clause = $wpdb->prepare( "({$wpdb->postmeta}.meta_value <= %s AND $event_end_date >= %s )", $start_date, $start_date );
508
- $where_sql .= " AND ($start_clause OR $within_clause)";
509
- if ( $query->is_singular() && $query->get( 'eventDate' ) ) {
510
- $tomorrow = date( 'Y-m-d', strtotime( $query->get( 'eventDate' ).' +1 day' ) );
511
- $tomorrow_clause = $wpdb->prepare( "{$wpdb->postmeta}.meta_value < %s", $tomorrow );
512
- $where_sql .= " AND $tomorrow_clause";
513
- }
514
- } else if ( $end_date != '' ) {
515
- $where_sql .= " AND " . $wpdb->prepare( "$event_end_date < %s", $end_date );
516
- }
517
- }
518
-
519
- return $where_sql;
520
- }
521
-
522
- /**
523
- * Internal method for properly setting a currated orderby value to $wp_query
524
- * @param string $default
525
- * @return string
526
- */
527
- function set_orderby( $default = 'event_date' ) {
528
- $url_param = !empty( $_GET['orderby'] ) ? $_GET['orderby'] : null;
529
- $url_param = !empty( $_GET['tribe-orderby'] ) ? $_GET['tribe-orderby'] : $url_param;
530
- $url_param = strtolower( $url_param );
531
- switch ( $url_param ) {
532
- case 'tribe_sort_ecp_venue_filter':
533
- $orderby = 'venue';
534
- break;
535
- case 'tribe_sort_ecp_organizer_filter':
536
- $orderby = 'organizer';
537
- break;
538
- case 'title':
539
- $orderby = $url_param;
540
- break;
541
- default:
542
- $orderby = $default;
543
- break;
544
- }
545
- return $orderby;
546
- }
547
-
548
- /**
549
- * Internal method for properly setting a currated order value to $wp_query
550
- * @param string $default
551
- * @return string
552
- */
553
- function set_order( $default = 'ASC' ) {
554
- $url_param = !empty( $_GET['order'] ) ? $_GET['order'] : null;
555
- $url_param = !empty( $_GET['tribe-order'] ) ? $_GET['tribe-order'] : $url_param;
556
- $url_param = strtoupper( $url_param );
557
- $order = in_array( $url_param, array( 'ASC', 'DESC' ) ) ? $url_param : $default;
558
- return $order;
559
- }
560
-
561
- /**
562
- * Custom SQL order by statement for Event Start Date result order.
563
- *
564
- * @param string $order_sql
565
- * @param wp_query $query
566
- * @return string
567
- */
568
- public static function posts_orderby( $order_sql, $query ) {
569
- global $wpdb;
570
- if ( $query->tribe_is_event || $query->tribe_is_event_category ) {
571
- $order = !empty( $query->order ) ? $query->order : $query->get( 'order' );
572
- $orderby = !empty( $query->orderby ) ? $query->orderby : $query->get( 'orderby' );
573
-
574
- $order_sql = "DATE({$wpdb->postmeta}.meta_value) {$order}, TIME({$wpdb->postmeta}.meta_value) {$order}";
575
-
576
- do_action('log', 'orderby', 'default', $orderby);
577
-
578
- switch ( $orderby ) {
579
- case 'venue':
580
- $order_sql = "tribe_order_by_venue.post_title {$order}, " . $order_sql;
581
- break;
582
- case 'organizer':
583
- $order_sql = "tribe_order_by_organizer.post_title {$order}, " . $order_sql;
584
- break;
585
- case 'title':
586
- $order_sql = "{$wpdb->posts}.post_title {$order}, " . $order_sql;
587
- break;
588
- case 'menu_order':
589
- $order_sql = "{$wpdb->posts}.menu_order ASC, " . $order_sql;
590
- break;
591
- case 'event_date':
592
- // we've already setup $order_sql
593
- break;
594
- }
595
- } else if ( $query->tribe_is_multi_posttype ) {
596
- if ( $query->get( 'orderby' ) == 'date' || $query->get('orderby') == '' ) {
597
- $order_sql = str_replace( "$wpdb->posts.post_date", 'post_date', $order_sql );
598
- }
599
- }
600
-
601
- return $order_sql;
602
- }
603
-
604
- /**
605
- * Custom SQL to retrieve post_id list of events marked to be hidden from upcoming lists.
606
- *
607
- * @return array
608
- */
609
- public static function getHideFromUpcomingEvents() {
610
- global $wpdb;
611
-
612
- $cache = new TribeEventsCache();
613
- $cache_key = 'tribe-hide-from-upcoming-events';
614
- $found = $cache->get( $cache_key, 'save_post' );
615
- if ( is_array( $found ) ) {
616
- return $found;
617
- }
618
-
619
- // custom sql to get ids of posts that hide_upcoming_ids
620
- $hide_upcoming_ids = $wpdb->get_col( "SELECT {$wpdb->postmeta}.post_id FROM {$wpdb->postmeta} WHERE {$wpdb->postmeta}.meta_key = '_EventHideFromUpcoming' AND {$wpdb->postmeta}.meta_value = 'yes'" );
621
- $hide_upcoming_ids = apply_filters( 'tribe_events_hide_from_upcoming_ids', $hide_upcoming_ids );
622
- $cache->set( $cache_key, $hide_upcoming_ids, 3600, 'save_post' );
623
- return $hide_upcoming_ids;
624
- }
625
-
626
- /**
627
- * Gets the event counts for individual days.
628
- *
629
- * @param array $args
630
- * @return array The counts array.
631
- */
632
- public static function getEventCounts( $args = array() ) {
633
- global $wpdb;
634
- do_action('log', 'getEventCounts() $args', 'tribe-events-query', $args);
635
- $date = date( 'Y-m-d' );
636
- $defaults = array(
637
- 'post_type' => TribeEvents::POSTTYPE,
638
- 'start_date' => tribe_event_beginning_of_day( $date ),
639
- 'end_date' => tribe_event_end_of_day( $date ),
640
- 'display_type' => 'daily',
641
- 'hide_upcoming_ids' => null,
642
- );
643
- $args = wp_parse_args( $args, $defaults );
644
-
645
- $args['posts_per_page'] = -1;
646
- $args['fields'] = 'ids';
647
-
648
- // remove empty args and sort by key, this increases chance of a cache hit
649
- $args = array_filter($args, array(__CLASS__, 'filter_args'));
650
- ksort($args);
651
-
652
- $cache = new TribeEventsCache();
653
- $cache_key = 'daily_counts_and_ids_'.serialize($args);
654
- $found = $cache->get( $cache_key, 'save_post' );
655
- if ( $found ) {
656
- do_action( 'log', 'cache hit '.__LINE__, 'tribe-events-cache', $args );
657
- return $found;
658
- }
659
- do_action( 'log', 'no cache hit '.__LINE__, 'tribe-events-cache', $args );
660
-
661
- $cache_key = 'month_post_ids_'.serialize( $args );
662
- $found = $cache->get( $cache_key, 'save_post' );
663
- if ( $found && is_array($found) ) {
664
- do_action( 'log', 'cache hit '.__LINE__, 'tribe-events-cache', $args );
665
- $post_ids = $found;
666
- } else {
667
- do_action( 'log', 'no cache hit '.__LINE__, 'tribe-events-cache', $args );
668
- $post_id_query = new WP_Query();
669
- $post_ids = $post_id_query->query( $args );
670
- $cache->set( $cache_key, $post_ids, 0, 'save_post' );
671
- }
672
-
673
- do_action('log', 'Month view post ids found', 'tribe-events-query', $post_ids);
674
- $counts = array();
675
- $event_ids = array();
676
- if ( ! empty( $post_ids ) ) {
677
-
678
- switch ( $args['display_type'] ) {
679
- case 'daily':
680
- default :
681
- global $wp_query;
682
-
683
- $output_date_format = '%Y-%m-%d';
684
- $raw_counts = $wpdb->get_results( sprintf( "
685
- SELECT tribe_event_start.post_id as ID,
686
- DATE_FORMAT( tribe_event_start.meta_value, '%1\$s') as EventStartDate,
687
- IF (tribe_event_duration.meta_value IS NULL, DATE_FORMAT( tribe_event_end_date.meta_value, '%1\$s'), DATE_FORMAT(DATE_ADD(CAST(tribe_event_start.meta_value AS DATETIME), INTERVAL tribe_event_duration.meta_value SECOND), '%1\$s')) as EventEndDate,
688
- {$wpdb->posts}.menu_order as menu_order
689
- FROM $wpdb->postmeta AS tribe_event_start
690
- LEFT JOIN $wpdb->posts ON (tribe_event_start.post_id = {$wpdb->posts}.ID)
691
- LEFT JOIN $wpdb->postmeta as tribe_event_duration ON ( tribe_event_start.post_id = tribe_event_duration.post_id AND tribe_event_duration.meta_key = '_EventDuration' )
692
- LEFT JOIN $wpdb->postmeta as tribe_event_end_date ON ( tribe_event_start.post_id = tribe_event_end_date.post_id AND tribe_event_end_date.meta_key = '_EventEndDate' )
693
- WHERE tribe_event_start.meta_key = '_EventStartDate'
694
- AND tribe_event_start.post_id IN ( %5\$s )
695
- AND ( (tribe_event_start.meta_value >= '%3\$s' AND tribe_event_start.meta_value <= '%4\$s')
696
- OR (tribe_event_start.meta_value <= '%3\$s' AND DATE_ADD(CAST( tribe_event_start.meta_value AS DATETIME), INTERVAL tribe_event_duration.meta_value SECOND) >= '%3\$s')
697
- OR (tribe_event_start.meta_value <= '%3\$s' AND tribe_event_end_date.meta_value >= '%3\$s')
698
- OR ( tribe_event_start.meta_value >= '%3\$s' AND tribe_event_start.meta_value <= '%4\$s')
699
- )
700
- ORDER BY menu_order ASC, DATE(tribe_event_start.meta_value) ASC, TIME(tribe_event_start.meta_value) ASC;",
701
- $output_date_format,
702
- $output_date_format,
703
- $args['start_date'],
704
- $args['end_date'],
705
- implode( ',', array_map( 'intval', $post_ids ) )
706
- ) );
707
- // echo $wpdb->last_query;
708
- $start_date = new DateTime( $args['start_date'] );
709
- $end_date = new DateTime( $args['end_date'] );
710
- $days = self::dateDiff( $start_date->format( 'Y-m-d' ), $end_date->format( 'Y-m-d' ) );
711
- $term_id = isset( $wp_query->query_vars[TribeEvents::TAXONOMY] ) ? $wp_query->query_vars[TribeEvents::TAXONOMY] : null;
712
- if ( is_int( $term_id ) ) {
713
- $term = get_term_by( 'id', $term_id, TribeEvents::TAXONOMY );
714
- } elseif ( is_string( $term_id ) ) {
715
- $term = get_term_by( 'slug', $term_id, TribeEvents::TAXONOMY );
716
- }
717
- for ( $i = 0, $date = $start_date; $i <= $days; $i++, $date->modify( '+1 day' ) ) {
718
- $formatted_date = $date->format( 'Y-m-d' );
719
- $count = 0;
720
- $_day_event_ids = array();
721
- foreach ( $raw_counts as $record ) {
722
- $record_start = $record->EventStartDate;
723
- $record_end = $record->EventEndDate;
724
- if ( $record_start <= $formatted_date && $record_end >= $formatted_date ) {
725
- if ( isset( $term->term_id ) ) {
726
- $record_terms = get_the_terms( $record->ID, TribeEvents::TAXONOMY );
727
- if ( !$record_terms || ( $record_terms && !in_array( $term, $record_terms ) ) ) {
728
- $count--;
729
- continue;
730
- }
731
- }
732
- if ( count( $_day_event_ids ) < apply_filters( 'tribe_events_month_day_limit', tribe_get_option( 'monthEventAmount', '3' ) ) ) {
733
- $_day_event_ids[] = $record->ID;
734
- }
735
- $count++;
736
- }
737
- }
738
- $event_ids[ $formatted_date ] = $_day_event_ids;
739
- $counts[ $formatted_date ] = $count;
740
- }
741
- break;
742
- }
743
-
744
- // get a unique list of the event IDs that will be displayed, and update all their postmeta and term caches at once
745
- $final_event_ids = array();
746
- $final_event_ids = call_user_func_array( 'array_merge', $event_ids );
747
- $final_event_ids = array_unique( $final_event_ids );
748
- do_action( 'log', 'updating term and postmeta caches for events', 'tribe-events-cache', $final_event_ids );
749
- update_object_term_cache( $final_event_ids, TribeEvents::POSTTYPE );
750
- update_postmeta_cache( $final_event_ids );
751
- }
752
- // return IDs per day and total counts per day
753
- $return = array( 'counts' => $counts, 'event_ids' => $event_ids );
754
- $cache = new TribeEventsCache;
755
- $cache_key = 'daily_counts_and_ids_'.serialize($args);
756
- $cache->set( $cache_key, $return, 0, 'save_post' );
757
- do_action( 'log', 'final event counts result', 'tribe-events-query', $return );
758
- return $return;
759
- }
760
-
761
- /**
762
- * The number of days between two arbitrary dates.
763
- *
764
- * @param string $date1 The first date.
765
- * @param string $date2 The second date.
766
- * @return int The number of days between two dates.
767
- */
768
- public static function dateDiff( $date1, $date2 ) {
769
- $current = $date1;
770
- $datetime2 = date_create( $date2 );
771
- $count = 0;
772
- while ( date_create( $current ) < $datetime2 ) {
773
- $current = gmdate( "Y-m-d", strtotime( "+1 day", strtotime( $current ) ) );
774
- $count++;
775
- }
776
- return $count;
777
- }
778
-
779
- /**
780
- * Customized WP_Query wrapper to setup event queries with default arguments.
781
- *
782
- * @param array $args
783
- * @return array|WP_Query
784
- */
785
- public static function getEvents( $args = array(), $full = false ) {
786
- $defaults = array(
787
- 'post_type' => TribeEvents::POSTTYPE,
788
- 'orderby' => 'event_date',
789
- 'order' => 'ASC',
790
- 'posts_per_page' => tribe_get_option( 'postsPerPage', 10 ),
791
- );
792
- $args = wp_parse_args( $args, $defaults );
793
-
794
- // remove empty args and sort by key, this increases chance of a cache hit
795
- $args = array_filter($args, array(__CLASS__, 'filter_args'));
796
- ksort($args);
797
-
798
- $cache = new TribeEventsCache();
799
- $cache_key = 'get_events_'.serialize($args);
800
-
801
- $result = $cache->get($cache_key, 'save_post');
802
- if ( $result && is_a($result, 'WP_Query') ) {
803
- do_action( 'log', 'cache hit', 'tribe-events-cache', $args );
804
- } else {
805
- do_action( 'log', 'no cache hit', 'tribe-events-cache', $args );
806
- // do_action( 'log', 'uncached query', 'tribe-events-query', $wpdb->last_query);
807
- $result = new WP_Query( $args );
808
- $cache->set($cache_key, $result, 0, 'save_post');
809
- }
810
-
811
- if ( ! empty( $result->posts ) ) {
812
- if ( $full ) {
813
- return $result;
814
- } else {
815
- $posts = $result->posts;
816
- return $posts;
817
- }
818
- } else {
819
- if ( $full ) {
820
- return $result;
821
- } else {
822
- return array();
823
- }
824
- }
825
- }
826
-
827
- /**
828
- * Remove empty values from the query args
829
- *
830
- * @return bool
831
- * @author Jessica Yazbek
832
- **/
833
- private static function filter_args($arg) {
834
- if (empty($arg) && $arg !== false)
835
- return false;
836
- return true;
837
- }
838
-
839
- }
840
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/tribe-field.class.php CHANGED
@@ -42,13 +42,13 @@ if ( !class_exists('TribeField') ) {
42
  * field defaults (static)
43
  * @var array
44
  */
45
- public static $defaults;
46
 
47
  /**
48
  * valid field types (static)
49
  * @var array
50
  */
51
- public static $valid_field_types;
52
 
53
 
54
  /**
42
  * field defaults (static)
43
  * @var array
44
  */
45
+ public $defaults;
46
 
47
  /**
48
  * valid field types (static)
49
  * @var array
50
  */
51
+ public $valid_field_types;
52
 
53
 
54
  /**
lib/tribe-settings-tab.class.php CHANGED
@@ -36,7 +36,7 @@ if ( !class_exists( 'TribeSettingsTab' ) ) {
36
  * Defaults for tabs
37
  * @var array
38
  */
39
- public static $defaults;
40
 
41
  /**
42
  * class constructor
@@ -89,7 +89,7 @@ if ( !class_exists( 'TribeSettingsTab' ) ) {
89
  * @return array $tabs the filtered tabs
90
  */
91
  public function addTab( $tabs ) {
92
- $hideSettingsTabs = TribeEvents::getNetworkOption( 'hideSettingsTabs', array( ) );
93
  if ( ( isset( $this->fields ) || has_action( 'tribe_settings_content_tab_' . $this->id ) ) && ( empty( $hideSettingsTabs ) || !in_array( $this->id, $hideSettingsTabs ) ) ) {
94
  if ( ( is_network_admin() && $this->args['network_admin'] ) || ( !is_network_admin() && !$this->args['network_admin'] ) ) {
95
  $tabs[$this->id] = $this->name;
36
  * Defaults for tabs
37
  * @var array
38
  */
39
+ public $defaults;
40
 
41
  /**
42
  * class constructor
89
  * @return array $tabs the filtered tabs
90
  */
91
  public function addTab( $tabs ) {
92
+ $hideSettingsTabs = TribeEvents::instance()->getNetworkOption( 'hideSettingsTabs', array( ) );
93
  if ( ( isset( $this->fields ) || has_action( 'tribe_settings_content_tab_' . $this->id ) ) && ( empty( $hideSettingsTabs ) || !in_array( $this->id, $hideSettingsTabs ) ) ) {
94
  if ( ( is_network_admin() && $this->args['network_admin'] ) || ( !is_network_admin() && !$this->args['network_admin'] ) ) {
95
  $tabs[$this->id] = $this->name;
lib/tribe-settings.class.php CHANGED
@@ -25,87 +25,87 @@ if ( !class_exists( 'TribeSettings' ) ) {
25
  * filtered on class construct
26
  * @var array
27
  */
28
- public static $tabs;
29
 
30
  /**
31
  * All the tabs registered, not just the ones that will appear
32
  * @var array
33
  */
34
- public static $allTabs;
35
 
36
  /**
37
  * multidimentional array of the fields that will be generated
38
  * for the entire settings panel, tabs are represented in the array keys
39
  * @var array
40
  */
41
- public static $fields;
42
 
43
  /**
44
  * the default tab for the settings panel
45
  * this should be a tab ID
46
  * @var string
47
  */
48
- public static $defaultTab;
49
 
50
  /**
51
  * the current tab being displayed
52
  * @var string
53
  */
54
- public static $currentTab;
55
 
56
  /**
57
  * tabs that shouldn't show the save button
58
  * @var array
59
  */
60
- public static $noSaveTabs;
61
 
62
  /**
63
  * the slug used in the admin to generate the settings page
64
  * @var string
65
  */
66
- public static $adminSlug;
67
 
68
  /**
69
  * the menu name used for the settings page
70
  * @var string
71
  */
72
- public static $menuName;
73
 
74
  /**
75
  * the required capability for the settings page
76
  * @var string
77
  */
78
- public static $requiredCap;
79
 
80
  /**
81
  * errors that occur after a save operation
82
  * @var mixed
83
  */
84
- public static $errors;
85
 
86
  /**
87
  * POST data before/after save
88
  * @var mixed
89
  */
90
- public static $sent_data;
91
 
92
  /**
93
  * the $current_screen name corresponding to the admin page
94
  * @var string
95
  */
96
- public static $admin_page;
97
 
98
  /**
99
  * true if a major error that prevents saving occurred
100
  * @var bool
101
  */
102
- public static $major_error;
103
 
104
  /**
105
  * holds validated fields
106
  * @var array
107
  */
108
- public static $validated;
109
 
110
  /**
111
  * Static Singleton Factory Method
@@ -433,9 +433,9 @@ if ( !class_exists( 'TribeSettings' ) ) {
433
 
434
  if ( $option_id == TribeEvents::OPTIONNAME ) {
435
  // save using the TribeEvents method
436
- TribeEvents::setOptions( $options );
437
  } elseif ( $option_id == TribeEvents::OPTIONNAMENETWORK ) {
438
- TribeEvents::setNetworkOptions( $options );
439
  } else {
440
  // save using regular WP method
441
  if ( is_network_admin() )
25
  * filtered on class construct
26
  * @var array
27
  */
28
+ public $tabs;
29
 
30
  /**
31
  * All the tabs registered, not just the ones that will appear
32
  * @var array
33
  */
34
+ public $allTabs;
35
 
36
  /**
37
  * multidimentional array of the fields that will be generated
38
  * for the entire settings panel, tabs are represented in the array keys
39
  * @var array
40
  */
41
+ public $fields;
42
 
43
  /**
44
  * the default tab for the settings panel
45
  * this should be a tab ID
46
  * @var string
47
  */
48
+ public $defaultTab;
49
 
50
  /**
51
  * the current tab being displayed
52
  * @var string
53
  */
54
+ public $currentTab;
55
 
56
  /**
57
  * tabs that shouldn't show the save button
58
  * @var array
59
  */
60
+ public $noSaveTabs;
61
 
62
  /**
63
  * the slug used in the admin to generate the settings page
64
  * @var string
65
  */
66
+ public $adminSlug;
67
 
68
  /**
69
  * the menu name used for the settings page
70
  * @var string
71
  */
72
+ public $menuName;
73
 
74
  /**
75
  * the required capability for the settings page
76
  * @var string
77
  */
78
+ public $requiredCap;
79
 
80
  /**
81
  * errors that occur after a save operation
82
  * @var mixed
83
  */
84
+ public $errors;
85
 
86
  /**
87
  * POST data before/after save
88
  * @var mixed
89
  */
90
+ public $sent_data;
91
 
92
  /**
93
  * the $current_screen name corresponding to the admin page
94
  * @var string
95
  */
96
+ public $admin_page;
97
 
98
  /**
99
  * true if a major error that prevents saving occurred
100
  * @var bool
101
  */
102
+ public $major_error;
103
 
104
  /**
105
  * holds validated fields
106
  * @var array
107
  */
108
+ public $validated;
109
 
110
  /**
111
  * Static Singleton Factory Method
433
 
434
  if ( $option_id == TribeEvents::OPTIONNAME ) {
435
  // save using the TribeEvents method
436
+ TribeEvents::instance()->setOptions( $options );
437
  } elseif ( $option_id == TribeEvents::OPTIONNAMENETWORK ) {
438
+ TribeEvents::instance()->setNetworkOptions( $options );
439
  } else {
440
  // save using regular WP method
441
  if ( is_network_admin() )
lib/tribe-template-factory.class.php CHANGED
@@ -80,20 +80,22 @@ if( !class_exists('Tribe_Template_Factory') ) {
80
  protected function hooks() {
81
 
82
  // set up queries, vars, etc that needs to be used in this view
83
- add_action( 'tribe_events_before_view', array( $this, 'setup_view') );
84
 
85
- // set notices
86
  add_action( 'tribe_events_before_view', array( $this, 'set_notices') );
87
 
88
  // Don't show the comments form inside the view (if comments are enabled,
89
  // they'll show on their own after the loop)
90
- add_filter('comments_template', array( $this, 'remove_comments_template' ) );
 
 
91
 
92
  // Remove the comments template entirely if needed
93
  add_filter('tribe_get_option', array( $this, 'comments_off' ), 10, 2 );
94
 
95
  // set up meta used in this view
96
- add_action( 'tribe_events_before_view', array( $this, 'setup_meta') );
97
 
98
  // cleanup after view (reset query, etc)
99
  add_action( 'tribe_events_after_view', array( $this, 'shutdown_view' ) );
@@ -227,43 +229,46 @@ if( !class_exists('Tribe_Template_Factory') ) {
227
  **/
228
  public function set_notices() {
229
  global $wp_query;
 
 
 
 
 
 
 
230
 
231
- // Look for a search query
232
- if ( ! empty( $wp_query->query_vars['s'] )) {
233
  $search_term = $wp_query->query_vars['s'];
234
- } else if ( !empty( $_POST['tribe-bar-search'] ) ) {
235
- $search_term = $_POST['tribe-bar-search'];
236
  }
237
-
238
- // Search term based notices
239
- if ( ! empty($search_term) && ! have_posts() ) {
240
- TribeEvents::setNotice( 'event-search-no-results', sprintf( __( 'There were no results found for <strong>"%s"</strong>.', 'tribe-events-calendar' ), esc_html($search_term) ) );
 
 
 
 
241
  }
242
 
243
- // Our various messages if there are no events for the query
244
- else if ( empty($search_term) && empty( $wp_query->query_vars['s'] ) && !have_posts() ) { // Messages if currently no events, and no search term
245
- $tribe_ecp = TribeEvents::instance();
246
- $is_cat_message = '';
247
- if ( is_tax( $tribe_ecp->get_event_taxonomy() ) ) {
248
- $cat = get_term_by( 'slug', get_query_var( 'term' ), $tribe_ecp->get_event_taxonomy() );
249
- if( tribe_is_upcoming() ) {
250
- $is_cat_message = sprintf( __( 'listed under %s. Check out past events for this category or view the full calendar.', 'tribe-events-calendar' ), esc_html($cat->name) );
251
- } else if( tribe_is_past() ) {
252
- $is_cat_message = sprintf( __( 'listed under %s. Check out upcoming events for this category or view the full calendar.', 'tribe-events-calendar' ), esc_html($cat->name) );
253
- }
254
- }
255
- if( tribe_is_day() ) {
256
- TribeEvents::setNotice( 'events-not-found', sprintf( __( 'No events scheduled for <strong>%s</strong>. Please try another day.', 'tribe-events-calendar' ), date_i18n( 'F d, Y', strtotime( get_query_var( 'eventDate' ) ) ) ) );
257
- } elseif( tribe_is_upcoming() ) {
258
- $date = date('Y-m-d', strtotime($tribe_ecp->date));
259
- if ( $date == date('Y-m-d') ) {
260
- TribeEvents::setNotice( 'events-not-found', __('No upcoming events ', 'tribe-events-calendar') . $is_cat_message );
261
- } else {
262
- TribeEvents::setNotice( 'events-not-found', __('No matching events ', 'tribe-events-calendar') . $is_cat_message );
263
- }
264
- } elseif( tribe_is_past() ) {
265
- TribeEvents::setNotice( 'events-past-not-found', __('No previous events ', 'tribe-events-calendar') . $is_cat_message );
266
- }
267
  }
268
  }
269
 
@@ -321,9 +326,7 @@ if( !class_exists('Tribe_Template_Factory') ) {
321
  * @since 3.0
322
  **/
323
  public function shutdown_view() {
324
-
325
  $this->unhook();
326
-
327
  }
328
 
329
  /**
@@ -349,7 +352,9 @@ if( !class_exists('Tribe_Template_Factory') ) {
349
  remove_action( 'tribe_events_before_view', array( $this, 'set_notices') );
350
 
351
  // Remove the comments template
352
- remove_filter('comments_template', array( $this, 'remove_comments_template' ) );
 
 
353
 
354
  // set up meta used in this view
355
  remove_action( 'tribe_events_before_view', array( $this, 'setup_meta') );
@@ -408,7 +413,6 @@ if( !class_exists('Tribe_Template_Factory') ) {
408
  * @since 3.0
409
  **/
410
  public function remove_comments_template( $template ) {
411
- remove_filter( 'comments_template', array( $this, 'remove_comments_template' ) );
412
  return TribeEvents::instance()->pluginPath . 'admin-views/no-comments.php';
413
  }
414
 
@@ -557,7 +561,7 @@ if( !class_exists('Tribe_Template_Factory') ) {
557
  self::$vendor_scripts[] = $placeholder_handle;
558
  break;
559
  case 'ajax-calendar':
560
- $deps = array_merge( $deps, array( 'jquery', $prefix . '-calendar-script' ) );
561
  $ajax_data = array( "ajaxurl" => admin_url( 'admin-ajax.php', ( is_ssl() ? 'https' : 'http' ) ) );
562
  $path = self::getMinFile( $resources_url . 'tribe-events-ajax-calendar.js', true );
563
  wp_enqueue_script( 'tribe-events-calendar', $path, $deps, apply_filters( 'tribe_events_js_version', TribeEvents::VERSION ), true );
80
  protected function hooks() {
81
 
82
  // set up queries, vars, etc that needs to be used in this view
83
+ add_action( 'tribe_events_before_view', array( $this, 'setup_view' ) );
84
 
85
+ // set notices
86
  add_action( 'tribe_events_before_view', array( $this, 'set_notices') );
87
 
88
  // Don't show the comments form inside the view (if comments are enabled,
89
  // they'll show on their own after the loop)
90
+ if ( ! ( tribe_get_option('tribeEventsTemplate', 'default') == '' ) ) {
91
+ add_filter('comments_template', array( $this, 'remove_comments_template' ) );
92
+ }
93
 
94
  // Remove the comments template entirely if needed
95
  add_filter('tribe_get_option', array( $this, 'comments_off' ), 10, 2 );
96
 
97
  // set up meta used in this view
98
+ add_action( 'tribe_events_before_view', array( $this, 'setup_meta' ) );
99
 
100
  // cleanup after view (reset query, etc)
101
  add_action( 'tribe_events_after_view', array( $this, 'shutdown_view' ) );
229
  **/
230
  public function set_notices() {
231
  global $wp_query;
232
+ $tribe = TribeEvents::instance();
233
+ $geographic_term = '';
234
+ $search_term = '';
235
+ $tax_term = '';
236
+
237
+ // By default we only display notices if no events could be found
238
+ if ( have_posts() ) return;
239
 
240
+ // Do we have a keyword or place name search?
241
+ if ( !empty( $wp_query->query_vars['s'] ) ) {
242
  $search_term = $wp_query->query_vars['s'];
 
 
243
  }
244
+ elseif ( !empty( $_REQUEST['tribe-bar-search'] ) ) {
245
+ $search_term = $_REQUEST['tribe-bar-search'];
246
+ }
247
+ elseif ( !empty( $_REQUEST['tribe-bar-geoloc']) ) {
248
+ $geographic_term = $_REQUEST['tribe-bar-geoloc'];
249
+ }
250
+ if ( is_tax( $tribe->get_event_taxonomy() ) ) {
251
+ $tax_term = get_term_by( 'slug', get_query_var( 'term' ), $tribe->get_event_taxonomy() );
252
  }
253
 
254
+ // Set an appropriate notice
255
+ if ( ! empty( $search_term ) ) {
256
+ TribeEvents::setNotice( 'event-search-no-results', sprintf( __( 'There were no results found for <strong>"%s"</strong>.', 'tribe-events-calendar' ), esc_html($search_term) ) );
257
+ }
258
+ elseif ( ! empty( $geographic_term ) ) {
259
+ TribeEvents::setNotice( 'event-search-no-results', sprintf( __( 'No results were found for events in or near <strong>"%s"</strong>.', 'tribe-events-calendar-pro' ), esc_html($geographic_term) ) );
260
+ }
261
+ elseif ( ! empty( $tax_term ) && tribe_is_upcoming() && ( date('Y-m-d') === date('Y-m-d', strtotime($tribe->date) ) ) ) {
262
+ TribeEvents::setNotice( 'events-not-found', sprintf( __('No upcoming events listed under %s. Check out upcoming events for this category or view the full calendar.', 'tribe-events-calendar') . $tax_term ) );
263
+ }
264
+ elseif ( ! empty( $tax_term ) && tribe_is_upcoming() ) {
265
+ TribeEvents::setNotice( 'events-not-found', sprintf( __('No matching events listed under %s. Check out upcoming events for this category or view the full calendar.', 'tribe-events-calendar') . $tax_term ) );
266
+ }
267
+ elseif ( ! empty( $tax_term ) &&tribe_is_past() ) {
268
+ TribeEvents::setNotice( 'events-past-not-found', __('No previous events ', 'tribe-events-calendar') . $tax_term );
269
+ }
270
+ else {
271
+ TribeEvents::setNotice( 'event-search-no-results', __( 'There were no results found.', 'tribe-events-calendar-pro' ) );
 
 
 
 
 
 
272
  }
273
  }
274
 
326
  * @since 3.0
327
  **/
328
  public function shutdown_view() {
 
329
  $this->unhook();
 
330
  }
331
 
332
  /**
352
  remove_action( 'tribe_events_before_view', array( $this, 'set_notices') );
353
 
354
  // Remove the comments template
355
+ if ( ! ( tribe_get_option('tribeEventsTemplate', 'default') == '' ) ) {
356
+ remove_filter('comments_template', array( $this, 'remove_comments_template' ) );
357
+ }
358
 
359
  // set up meta used in this view
360
  remove_action( 'tribe_events_before_view', array( $this, 'setup_meta') );
413
  * @since 3.0
414
  **/
415
  public function remove_comments_template( $template ) {
 
416
  return TribeEvents::instance()->pluginPath . 'admin-views/no-comments.php';
417
  }
418
 
561
  self::$vendor_scripts[] = $placeholder_handle;
562
  break;
563
  case 'ajax-calendar':
564
+ $deps = array_merge( $deps, array( 'jquery', $prefix . '-bootstrap-datepicker', $prefix . '-calendar-script' ) );
565
  $ajax_data = array( "ajaxurl" => admin_url( 'admin-ajax.php', ( is_ssl() ? 'https' : 'http' ) ) );
566
  $path = self::getMinFile( $resources_url . 'tribe-events-ajax-calendar.js', true );
567
  wp_enqueue_script( 'tribe-events-calendar', $path, $deps, apply_filters( 'tribe_events_js_version', TribeEvents::VERSION ), true );
lib/tribe-templates.class.php CHANGED
@@ -24,14 +24,21 @@ if (!class_exists('TribeEventsTemplates')) {
24
  */
25
  public static $isMainLoop = false;
26
 
 
 
 
 
 
 
 
27
 
28
  /**
29
  * Initialize the Template Yumminess!
30
  */
31
  public static function init() {
32
 
33
- // choose the wordpress theme template to use
34
- add_filter( 'template_include', array( __CLASS__, 'templateChooser') );
35
 
36
  // include our view class
37
  add_action( 'template_redirect', 'tribe_initialize_view' );
@@ -39,16 +46,19 @@ if (!class_exists('TribeEventsTemplates')) {
39
  // make sure we enter the loop by always having some posts in $wp_query
40
  add_action( 'template_redirect', array( __CLASS__, 'maybeSpoofQuery' ) );
41
 
 
 
 
42
  // don't query the database for the spoofed post
43
- wp_cache_set(self::spoofed_post()->ID, self::spoofed_post(), 'posts');
44
- wp_cache_set(self::spoofed_post()->ID, array(true), 'post_meta');
45
 
46
  // there's no template redirect on ajax, so we include the template class right before the view is included
47
- if (defined('DOING_AJAX') && DOING_AJAX) {
48
  add_action( 'tribe_pre_get_view', 'tribe_initialize_view' );
49
  }
50
 
51
- add_action( 'wp_head', array( __CLASS__, 'wpHeadFinished'), 999 );
52
 
53
  }
54
 
@@ -58,9 +68,9 @@ if (!class_exists('TribeEventsTemplates')) {
58
  *
59
  * @return string Path to template
60
  */
61
- public static function templateChooser($template) {
62
  $events = TribeEvents::instance();
63
- do_action('tribe_tec_template_chooser', $template);
64
 
65
  // hijack this method right up front if it's a 404
66
  if ( is_404() && $events->displaying == 'single-event' && apply_filters( 'tribe_events_templates_is_404', '__return_true' ) )
@@ -71,18 +81,18 @@ if (!class_exists('TribeEventsTemplates')) {
71
  return $template;
72
  }
73
 
74
- if( tribe_get_option('tribeEventsTemplate', 'default') == '' ) {
75
- return self::getTemplateHierarchy('default-template');
76
  } else {
77
 
78
- // add_filter( 'wp_title', array(__CLASS__, 'remove_default_title'), 1);
79
-
80
- if ( ! is_single() || ! post_password_required()) {
81
  add_action( 'loop_start', array(__CLASS__, 'setup_ecp_template' ) );
82
  }
83
 
84
- $template = locate_template( tribe_get_option('tribeEventsTemplate', 'default') == 'default' ? 'page.php' : tribe_get_option('tribeEventsTemplate', 'default') );
85
- if ($template == '') $template = get_index_template();
 
 
86
 
87
  // remove singular body class if sidebar-page.php
88
  if( $template == get_stylesheet_directory() . '/sidebar-page.php' ) {
@@ -102,7 +112,6 @@ if (!class_exists('TribeEventsTemplates')) {
102
  * @since 3.0
103
  **/
104
  public static function instantiate_template_class( $class = false ) {
105
-
106
  if ( tribe_is_event_query() ) {
107
  if ( ! $class ) {
108
  $class = self::get_current_template_class();
@@ -120,9 +129,9 @@ if (!class_exists('TribeEventsTemplates')) {
120
  * @return mixed
121
  */
122
  public function remove_singular_body_class( $classes ) {
123
- $key = array_search('singular', $classes);
124
  if( $key ) {
125
- unset($classes[ $key ]);
126
  }
127
  return $classes;
128
  }
@@ -133,7 +142,7 @@ if (!class_exists('TribeEventsTemplates')) {
133
  * @param array $classes List of classes to filter
134
  * @return array
135
  */
136
- public function add_singular_body_class( $classes ) {
137
  $classes[] = 'singular';
138
  return $classes;
139
  }
@@ -146,34 +155,6 @@ if (!class_exists('TribeEventsTemplates')) {
146
  self::$wpHeadComplete = true;
147
  }
148
 
149
- /**
150
- * Set up filter to get rid of the repeating title if the page template is not the default events template.
151
- */
152
- public function remove_title_from_page() {
153
- add_filter( 'the_title', array( __CLASS__, 'remove_default_title' ), 1 );
154
- }
155
-
156
-
157
- /**
158
- * Filter to get rid of the repeating title if the page template is not the default events template.
159
- *
160
- * @param string $title Title
161
- * @return string Title
162
- */
163
- public function remove_title_filter( $title ) {
164
- remove_filter( 'the_title', array( __CLASS__, 'remove_default_title' ), 1 );
165
- return $title;
166
- }
167
-
168
- /**
169
- * Filter to get rid of the default page title
170
- *
171
- * @param string $title Title
172
- * @return string Title
173
- */
174
- public function remove_default_title( $title ) {
175
- return '';
176
- }
177
 
178
  /**
179
  * This is where the magic happens where we run some ninja code that hooks the query to resolve to an events template.
@@ -184,19 +165,19 @@ if (!class_exists('TribeEventsTemplates')) {
184
 
185
  do_action( 'tribe_events_filter_the_page_title' );
186
 
187
- if( self::is_main_loop($query) && self::$wpHeadComplete) {
188
 
189
  // on loop start, unset the global post so that template tags don't work before the_content()
190
- add_action('the_post', array(__CLASS__, 'spoof_the_post'));
191
 
192
  // on the_content, load our events template
193
- add_filter('the_content', array(__CLASS__, 'load_ecp_into_page_template') );
194
 
195
  // remove the comments template
196
- add_filter('comments_template', array(__CLASS__, 'load_ecp_comments_page_template') );
197
 
198
  // only do this once
199
- remove_action( 'loop_start', array(__CLASS__, 'setup_ecp_template') );
200
  }
201
  }
202
 
@@ -208,7 +189,45 @@ if (!class_exists('TribeEventsTemplates')) {
208
  **/
209
  public static function spoof_the_post() {
210
  $GLOBALS['post'] = self::spoofed_post();
211
- remove_action('the_post', array(__CLASS__, 'spoof_the_post'));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
212
  }
213
 
214
 
@@ -218,8 +237,8 @@ if (!class_exists('TribeEventsTemplates')) {
218
  * @param WP_Query $query
219
  * @return bool
220
  */
221
- private static function is_main_loop($query) {
222
- if (method_exists($query, 'is_main_query')) // WP 3.3+
223
  return $query->is_main_query();
224
 
225
  global $wp_the_query;
@@ -237,21 +256,21 @@ if (!class_exists('TribeEventsTemplates')) {
237
 
238
  // list view
239
  if ( tribe_is_list_view() ) {
240
- $template = self::getTemplateHierarchy( 'list', array('disable_view_check' => true) );
241
  }
242
 
243
  // calendar view
244
  if ( tribe_is_month() ) {
245
- $template = self::getTemplateHierarchy( 'month', array('disable_view_check' => true) );
246
  }
247
 
248
  // single event view
249
- if ( is_singular( TribeEvents::POSTTYPE ) && !tribe_is_showing_all() ) {
250
- $template = self::getTemplateHierarchy( 'single-event', array('disable_view_check' => true) );
251
  }
252
 
253
  // apply filters
254
- return apply_filters('tribe_current_events_page_template', $template);
255
 
256
  }
257
 
@@ -281,7 +300,7 @@ if (!class_exists('TribeEventsTemplates')) {
281
  }
282
 
283
  // apply filters
284
- return apply_filters('tribe_current_events_template_class', $class);
285
 
286
  }
287
 
@@ -293,7 +312,7 @@ if (!class_exists('TribeEventsTemplates')) {
293
  */
294
  public static function load_ecp_into_page_template() {
295
  // only run once!!!
296
- remove_filter('the_content', array(__CLASS__, 'load_ecp_into_page_template') );
297
 
298
  self::restoreQuery();
299
 
@@ -317,36 +336,11 @@ if (!class_exists('TribeEventsTemplates')) {
317
  }
318
 
319
 
320
- /**
321
- * Loads the title into the page template
322
- *
323
- * @param string $title Title
324
- * @param int $post_id Id of the post
325
- *
326
- * @return string
327
- */
328
- public static function load_ecp_title_into_page_template($title, $post_id) {
329
- global $post;
330
-
331
- if ( !is_single() )
332
- return tribe_get_events_title();
333
-
334
- // if the helper class for single event template hasn't been loaded fix that
335
- if( !class_exists('Tribe_Events_Single_Event_Template') )
336
- self::getTemplateHierarchy('single-event');
337
-
338
- // single event title
339
- $before_title = apply_filters( 'tribe_events_single_event_before_the_title', '', $post_id );
340
- $the_title = apply_filters( 'tribe_events_single_event_the_title', $title, $title, $post_id );
341
- $after_title = apply_filters( 'tribe_events_single_event_after_the_title', '', $post_id );
342
- return $before_title . $the_title . $after_title;
343
- }
344
-
345
- public static function load_ecp_comments_page_template($template) {
346
  $tribe_ecp = TribeEvents::instance();
347
 
348
- remove_filter('comments_template', array(__CLASS__, 'load_ecp_comments_page_template') );
349
- if (!is_single() || tribe_is_showing_all() || (tribe_get_option('showComments',false) === false)) {
350
  return $tribe_ecp->pluginPath . 'admin-views/no-comments.php';
351
  }
352
  return $template;
@@ -359,16 +353,16 @@ if (!class_exists('TribeEventsTemplates')) {
359
  * @return WP_Query
360
  * @since 2.1
361
  */
362
- public static function showInLoops($query) {
363
 
364
- if (!is_admin() && tribe_get_option('showInLoops') && ($query->is_home() || $query->is_tag) && empty($query->query_vars['post_type']) && false == $query->query_vars['suppress_filters']) {
365
 
366
  // 3.3 know-how for main query check
367
  // if (method_exists($query, 'is_main_query')) {
368
- if (self::is_main_loop($query)) {
369
  self::$isMainLoop = true;
370
  $post_types = array('post', TribeEvents::POSTTYPE);
371
- $query->set('post_type', $post_types);
372
  }
373
 
374
  }
@@ -376,31 +370,6 @@ if (!class_exists('TribeEventsTemplates')) {
376
  return $query;
377
  }
378
 
379
- /**
380
- * Filters the_content to show the event when we are in the main loop and showing events
381
- *
382
- * @param string $content
383
- * @return string Filtered content
384
- * @since 2.1
385
- */
386
- public static function hijackContentInMainLoop($content) {
387
-
388
- // only run once!!!
389
- remove_filter('the_content', array(__CLASS__, 'hijackContentInMainLoop') );
390
-
391
- global $post;
392
- if (tribe_is_in_main_loop() && tribe_is_event($post->ID)) {
393
- ob_start();
394
- echo stripslashes(tribe_get_option('tribeEventsBeforeHTML'));
395
- include_once(self::getTemplateHierarchy('in-loop'));
396
- echo stripslashes(tribe_get_option('tribeEventsAfterHTML'));
397
- $content = ob_get_contents();
398
- ob_end_clean();
399
- }
400
-
401
- return $content;
402
- }
403
-
404
  /**
405
  * Loads theme files in appropriate hierarchy: 1) child theme,
406
  * 2) parent template, 3) plugin resources. will look in the events/
@@ -408,7 +377,6 @@ if (!class_exists('TribeEventsTemplates')) {
408
  *
409
  * @param string $template template file to search for
410
  * @param array $args additional arguments to affect the template path
411
- * - subfolder
412
  * - namespace
413
  * - plugin_path
414
  * - disable_view_check - bypass the check to see if the view is enabled
@@ -416,25 +384,23 @@ if (!class_exists('TribeEventsTemplates')) {
416
  * @author Matt Wiebe
417
  **/
418
  public static function getTemplateHierarchy( $template, $args = array() ) {
419
- if ( !is_array( $args ) ) {
420
  $args = array();
421
  $passed = func_get_args();
422
- $backwards_map = array( 'subfolder', 'namespace', 'plugin_path' );
423
  if ( count( $passed > 1 ) ) {
424
- for ( $i = 1 ; $i < count($passed) ; $i++ ) {
425
  $args[$backwards_map[$i-1]] = $passed[$i];
426
  }
427
  }
428
  }
429
 
430
  $args = wp_parse_args( $args, array(
431
- 'subfolder' => '',
432
  'namespace' => '/',
433
  'plugin_path' => '',
434
  'disable_view_check' => false,
435
- ));
436
  /**
437
- * @var string $subfolder
438
  * @var string $namespace
439
  * @var string $pluginpath
440
  * @var bool $disable_view_check
@@ -443,7 +409,8 @@ if (!class_exists('TribeEventsTemplates')) {
443
 
444
  $tec = TribeEvents::instance();
445
 
446
- if ( substr($template, -4) != '.php' ) {
 
447
  $template .= '.php';
448
  }
449
 
@@ -451,51 +418,104 @@ if (!class_exists('TribeEventsTemplates')) {
451
  require_once( $tec->pluginPath . 'public/advanced-functions/meta.php' );
452
 
453
  // Allow base path for templates to be filtered
454
- $template_base_paths = apply_filters( 'tribe_events_template_paths', (array) TribeEvents::instance()->pluginPath);
455
 
456
  // backwards compatibility if $plugin_path arg is used
457
- if ( $plugin_path && ! in_array($plugin_path, $template_base_paths) ) {
458
- $template_base_paths[] = $plugin_path;
459
  }
460
 
461
- // setup subfolder options
462
- $subfolder = !empty($subfolder) ? trailingslashit($subfolder) : $subfolder;
463
-
464
  // ensure that addon plugins look in the right override folder in theme
465
- $namespace = !empty($namespace) && $namespace[0] != '/' ? '/' . trailingslashit($namespace) : trailingslashit($namespace);
 
 
466
 
467
- // Support multiple namespaces for multiple add-ons
468
- $namespaces = apply_filters( 'tribe_events_template_path_namespaces', array( $namespace ) );
469
- foreach ( $namespaces as $n => $namespace ) {
470
- $namespaces[$n] = 'tribe-events' . trailingslashit( $namespace ) . $subfolder . $template;
471
  }
472
 
473
- $file = '';
474
- foreach ( $template_base_paths as $template_base_path ) {
475
 
476
- if ( $theme_file = locate_template( $namespaces, false, false) ) {
477
- $file = $theme_file;
478
- } else {
479
- // protect from concat folder with filename
480
- $subfolder = empty($subfolder) ? trailingslashit($subfolder) : $subfolder;
481
- $subfolder = $subfolder[0] != '/' ? '/' . $subfolder : $subfolder;
 
 
 
 
 
 
 
 
 
 
482
 
483
- $file = $template_base_path . 'views' . $subfolder . $template;
484
- // echo $file;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
485
  }
 
 
 
 
 
 
 
 
 
486
 
487
- if ( !$disable_view_check && in_array( $tec->displaying, tribe_events_disabled_views() ) ) {
488
- $file = get_404_template();
 
 
 
 
 
 
 
489
  }
 
490
 
491
- $file = apply_filters( 'tribe_events_template', $file, $template);
 
 
 
 
492
 
493
- // return the first one found
494
- if ( file_exists( $file ) )
495
- break;
 
 
 
 
 
 
 
 
 
 
 
496
  }
497
 
498
- return apply_filters( 'tribe_events_template_'.$template, $file);
499
  }
500
 
501
 
@@ -507,18 +527,18 @@ if (!class_exists('TribeEventsTemplates')) {
507
  * @return bool|string Path to stylesheet
508
  */
509
  public static function locate_stylesheet( $stylesheets, $fallback = false ) {
510
- if ( !is_array($stylesheets) ) {
511
  $stylesheets = array( $stylesheets );
512
  }
513
  if ( empty( $stylesheets ) ) {
514
  return $fallback;
515
  }
516
  foreach ( $stylesheets as $filename ) {
517
- if ( file_exists(STYLESHEETPATH . '/' . $filename)) {
518
- $located = trailingslashit(get_stylesheet_directory_uri()).$filename;
519
  break;
520
- } else if ( file_exists(TEMPLATEPATH . '/' . $filename) ) {
521
- $located = trailingslashit(get_template_directory_uri()).$filename;
522
  break;
523
  }
524
  }
@@ -576,7 +596,7 @@ if (!class_exists('TribeEventsTemplates')) {
576
  'is_archive' => false,
577
  'is_tax' => false,
578
  );
579
- return (object) $spoofed_post;
580
  }
581
 
582
 
@@ -586,7 +606,7 @@ if (!class_exists('TribeEventsTemplates')) {
586
  public static function maybeSpoofQuery() {
587
 
588
  // hijack this method right up front if it's a password protected post and the password isn't entered
589
- if (is_single() && post_password_required()) {
590
  return;
591
  }
592
 
@@ -600,7 +620,7 @@ if (!class_exists('TribeEventsTemplates')) {
600
 
601
  $GLOBALS['post'] = $spoofed_post;
602
  $wp_query->posts[] = $spoofed_post;
603
- $wp_query->post_count = count($wp_query->posts);
604
 
605
  $wp_query->spoofed = true;
606
  $wp_query->rewind_posts();
24
  */
25
  public static $isMainLoop = false;
26
 
27
+ /**
28
+ * If the global post title has to be modified the original is stored here.
29
+ *
30
+ * @var bool|string
31
+ */
32
+ protected static $original_post_title = false;
33
+
34
 
35
  /**
36
  * Initialize the Template Yumminess!
37
  */
38
  public static function init() {
39
 
40
+ // Choose the wordpress theme template to use
41
+ add_filter( 'template_include', array( __CLASS__, 'templateChooser' ) );
42
 
43
  // include our view class
44
  add_action( 'template_redirect', 'tribe_initialize_view' );
46
  // make sure we enter the loop by always having some posts in $wp_query
47
  add_action( 'template_redirect', array( __CLASS__, 'maybeSpoofQuery' ) );
48
 
49
+ // maybe modify the global post object to blank out the title
50
+ add_action( 'tribe_tec_template_chooser', array( __CLASS__, 'maybe_modify_global_post_title' ) );
51
+
52
  // don't query the database for the spoofed post
53
+ wp_cache_set( self::spoofed_post()->ID, self::spoofed_post(), 'posts' );
54
+ wp_cache_set( self::spoofed_post()->ID, array(true), 'post_meta');
55
 
56
  // there's no template redirect on ajax, so we include the template class right before the view is included
57
+ if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
58
  add_action( 'tribe_pre_get_view', 'tribe_initialize_view' );
59
  }
60
 
61
+ add_action( 'wp_head', array( __CLASS__, 'wpHeadFinished' ), 999 );
62
 
63
  }
64
 
68
  *
69
  * @return string Path to template
70
  */
71
+ public static function templateChooser( $template ) {
72
  $events = TribeEvents::instance();
73
+ do_action( 'tribe_tec_template_chooser', $template );
74
 
75
  // hijack this method right up front if it's a 404
76
  if ( is_404() && $events->displaying == 'single-event' && apply_filters( 'tribe_events_templates_is_404', '__return_true' ) )
81
  return $template;
82
  }
83
 
84
+ if ( tribe_get_option( 'tribeEventsTemplate', 'default' ) == '' ) {
85
+ return self::getTemplateHierarchy( 'default-template' );
86
  } else {
87
 
88
+ if ( ! is_single() || ! post_password_required() ) {
 
 
89
  add_action( 'loop_start', array(__CLASS__, 'setup_ecp_template' ) );
90
  }
91
 
92
+ $template = locate_template( tribe_get_option( 'tribeEventsTemplate', 'default' ) == 'default' ? 'page.php' : tribe_get_option( 'tribeEventsTemplate', 'default' ) );
93
+ if ( $template == '' ) {
94
+ $template = get_index_template();
95
+ }
96
 
97
  // remove singular body class if sidebar-page.php
98
  if( $template == get_stylesheet_directory() . '/sidebar-page.php' ) {
112
  * @since 3.0
113
  **/
114
  public static function instantiate_template_class( $class = false ) {
 
115
  if ( tribe_is_event_query() ) {
116
  if ( ! $class ) {
117
  $class = self::get_current_template_class();
129
  * @return mixed
130
  */
131
  public function remove_singular_body_class( $classes ) {
132
+ $key = array_search( 'singular', $classes );
133
  if( $key ) {
134
+ unset( $classes[ $key ] );
135
  }
136
  return $classes;
137
  }
142
  * @param array $classes List of classes to filter
143
  * @return array
144
  */
145
+ public static function add_singular_body_class( $classes ) {
146
  $classes[] = 'singular';
147
  return $classes;
148
  }
155
  self::$wpHeadComplete = true;
156
  }
157
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
158
 
159
  /**
160
  * This is where the magic happens where we run some ninja code that hooks the query to resolve to an events template.
165
 
166
  do_action( 'tribe_events_filter_the_page_title' );
167
 
168
+ if( self::is_main_loop( $query ) && self::$wpHeadComplete ) {
169
 
170
  // on loop start, unset the global post so that template tags don't work before the_content()
171
+ add_action( 'the_post', array(__CLASS__, 'spoof_the_post' ) );
172
 
173
  // on the_content, load our events template
174
+ add_filter( 'the_content', array( __CLASS__, 'load_ecp_into_page_template' ) );
175
 
176
  // remove the comments template
177
+ add_filter('comments_template', array( __CLASS__, 'load_ecp_comments_page_template' ) );
178
 
179
  // only do this once
180
+ remove_action( 'loop_start', array( __CLASS__, 'setup_ecp_template' ) );
181
  }
182
  }
183
 
189
  **/
190
  public static function spoof_the_post() {
191
  $GLOBALS['post'] = self::spoofed_post();
192
+ remove_action( 'the_post', array(__CLASS__, 'spoof_the_post' ) );
193
+ }
194
+
195
+
196
+ /**
197
+ * Fix issues where themes display the_title() before the main loop starts.
198
+ *
199
+ * With such themes the title of single events can be displayed twice and, more crucially, it may result in the
200
+ * event views such as month view prominently displaying the title of the most recent event post (which may
201
+ * not even be included in the event itself).
202
+ *
203
+ * There's no bulletproof solution to this, but in special cases where this workaround is undesirable it can
204
+ * in fact be turned off by adding the following to wp-config.php:
205
+ *
206
+ * define( 'TRIBE_MODIFY_GLOBAL_TITLE', false );
207
+ */
208
+ public static function maybe_modify_global_post_title() {
209
+ global $post;
210
+
211
+ // We will only interfere with event queries, where a post is set and this behaviour has not been turned off
212
+ if ( ! tribe_is_event_query() || ( defined('TRIBE_MODIFY_GLOBAL_TITLE') && ! TRIBE_MODIFY_GLOBAL_TITLE ) ) return;
213
+ if ( ! isset($post) || ! is_a( $post, 'WP_Post') ) return;
214
+
215
+ // Set the title to an empty string (but record the original)
216
+ self::$original_post_title = $post->post_title;
217
+ $post->post_title = apply_filters( 'tribe_set_global_post_title', '' );
218
+
219
+ // Restore as soon as we're ready to display one of our own views
220
+ add_action( 'tribe_pre_get_view', array( __CLASS__, 'restore_global_post_title' ) );
221
+ }
222
+
223
+
224
+ /**
225
+ * Restores the global $post title if it has previously been modified by self::maybe_modify_global_post_title().
226
+ */
227
+ public static function restore_global_post_title() {
228
+ global $post;
229
+ $post->post_title = self::$original_post_title;
230
+ remove_action( 'tribe_pre_get_view', array( __CLASS__, 'restore_global_post_title' ) );
231
  }
232
 
233
 
237
  * @param WP_Query $query
238
  * @return bool
239
  */
240
+ private static function is_main_loop( $query ) {
241
+ if ( method_exists( $query, 'is_main_query' ) ) // WP 3.3+
242
  return $query->is_main_query();
243
 
244
  global $wp_the_query;
256
 
257
  // list view
258
  if ( tribe_is_list_view() ) {
259
+ $template = self::getTemplateHierarchy( 'list', array( 'disable_view_check' => true ) );
260
  }
261
 
262
  // calendar view
263
  if ( tribe_is_month() ) {
264
+ $template = self::getTemplateHierarchy( 'month', array( 'disable_view_check' => true ) );
265
  }
266
 
267
  // single event view
268
+ if ( is_singular( TribeEvents::POSTTYPE ) && ! tribe_is_showing_all() ) {
269
+ $template = self::getTemplateHierarchy( 'single-event', array( 'disable_view_check' => true ) );
270
  }
271
 
272
  // apply filters
273
+ return apply_filters( 'tribe_current_events_page_template', $template );
274
 
275
  }
276
 
300
  }
301
 
302
  // apply filters
303
+ return apply_filters( 'tribe_current_events_template_class', $class );
304
 
305
  }
306
 
312
  */
313
  public static function load_ecp_into_page_template() {
314
  // only run once!!!
315
+ remove_filter( 'the_content', array(__CLASS__, 'load_ecp_into_page_template' ) );
316
 
317
  self::restoreQuery();
318
 
336
  }
337
 
338
 
339
+ public static function load_ecp_comments_page_template( $template ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
340
  $tribe_ecp = TribeEvents::instance();
341
 
342
+ remove_filter( 'comments_template', array( __CLASS__, 'load_ecp_comments_page_template' ) );
343
+ if ( ! is_single() || tribe_is_showing_all() || ( tribe_get_option('showComments',false ) === false ) ) {
344
  return $tribe_ecp->pluginPath . 'admin-views/no-comments.php';
345
  }
346
  return $template;
353
  * @return WP_Query
354
  * @since 2.1
355
  */
356
+ public static function showInLoops( $query ) {
357
 
358
+ if ( ! is_admin() && tribe_get_option( 'showInLoops' ) && ( $query->is_home() || $query->is_tag ) && empty( $query->query_vars['post_type'] ) && false == $query->query_vars['suppress_filters'] ) {
359
 
360
  // 3.3 know-how for main query check
361
  // if (method_exists($query, 'is_main_query')) {
362
+ if ( self::is_main_loop( $query ) ) {
363
  self::$isMainLoop = true;
364
  $post_types = array('post', TribeEvents::POSTTYPE);
365
+ $query->set( 'post_type', $post_types );
366
  }
367
 
368
  }
370
  return $query;
371
  }
372
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
373
  /**
374
  * Loads theme files in appropriate hierarchy: 1) child theme,
375
  * 2) parent template, 3) plugin resources. will look in the events/
377
  *
378
  * @param string $template template file to search for
379
  * @param array $args additional arguments to affect the template path
 
380
  * - namespace
381
  * - plugin_path
382
  * - disable_view_check - bypass the check to see if the view is enabled
384
  * @author Matt Wiebe
385
  **/
386
  public static function getTemplateHierarchy( $template, $args = array() ) {
387
+ if ( ! is_array( $args ) ) {
388
  $args = array();
389
  $passed = func_get_args();
390
+ $backwards_map = array( 'namespace', 'plugin_path' );
391
  if ( count( $passed > 1 ) ) {
392
+ for ( $i = 1 ; $i < count( $passed ) ; $i++ ) {
393
  $args[$backwards_map[$i-1]] = $passed[$i];
394
  }
395
  }
396
  }
397
 
398
  $args = wp_parse_args( $args, array(
 
399
  'namespace' => '/',
400
  'plugin_path' => '',
401
  'disable_view_check' => false,
402
+ ) );
403
  /**
 
404
  * @var string $namespace
405
  * @var string $pluginpath
406
  * @var bool $disable_view_check
409
 
410
  $tec = TribeEvents::instance();
411
 
412
+ // append .php to file name
413
+ if ( substr( $template, -4 ) != '.php' ) {
414
  $template .= '.php';
415
  }
416
 
418
  require_once( $tec->pluginPath . 'public/advanced-functions/meta.php' );
419
 
420
  // Allow base path for templates to be filtered
421
+ $template_base_paths = apply_filters( 'tribe_events_template_paths', ( array ) TribeEvents::instance()->pluginPath );
422
 
423
  // backwards compatibility if $plugin_path arg is used
424
+ if ( $plugin_path && ! in_array( $plugin_path, $template_base_paths ) ) {
425
+ array_unshift( $template_base_paths, $plugin_path );
426
  }
427
 
 
 
 
428
  // ensure that addon plugins look in the right override folder in theme
429
+ $namespace = ! empty( $namespace ) ? trailingslashit( $namespace ) : $namespace;
430
+
431
+ $file = false;
432
 
433
+ // return 404 if curent view is disabled
434
+ if ( ! $disable_view_check && in_array( $tec->displaying, tribe_events_disabled_views() ) ) {
435
+ $file = get_404_template();
 
436
  }
437
 
438
+ /* potential scenarios:
 
439
 
440
+ - the user has no template overrides
441
+ -> we can just look in our plugin dirs, for the specific path requested, don't need to worry about the namespace
442
+ - the user created template overrides without the namespace, which reference non-overrides without the namespace and, their own other overrides without the namespace
443
+ -> we need to look in their theme for the specific path requested
444
+ -> if not found, we need to look in our plugin views for the file by adding the namespace
445
+ - the user has template overrides using the namespace
446
+ -> we should look in the theme dir, then the plugin dir for the specific path requested, don't need to worry about the namespace
447
+
448
+ */
449
+
450
+ // check if there are overrides at all
451
+ if ( locate_template( array( 'tribe-events/' ) ) ) {
452
+ $overrides_exist = true;
453
+ } else {
454
+ $overrides_exist = false;
455
+ }
456
 
457
+ if ( $overrides_exist ) {
458
+ // check the theme for specific file requested
459
+ $file = locate_template( array( 'tribe-events/'.$template ), false, false );
460
+ if ( ! $file ) {
461
+ // if not found, it could be our plugin requesting the file with the namespace,
462
+ // so check the theme for the path without the namespace
463
+ $files = array();
464
+ foreach ( array_keys( $template_base_paths ) as $namespace ) {
465
+ if ( ! empty( $namespace ) && ! is_numeric( $namespace ) ) {
466
+ $files[] = 'tribe-events' . str_replace( $namespace, '', $template );
467
+ }
468
+ }
469
+ $file = locate_template( $files, false, false );
470
+ if ( $file ) {
471
+ _deprecated_function( sprintf( __( 'Template overrides should be moved to the correct subdirectory: %s', 'tribe-events' ), str_replace( get_stylesheet_directory() . '/tribe-events/', '', $file ) ) , '3.2', $template );
472
+ }
473
  }
474
+ }
475
+
476
+ // if the theme file wasn't found, check our plugins views dirs
477
+ if ( ! $file ) {
478
+
479
+ foreach ( $template_base_paths as $template_base_path ) {
480
+
481
+ // make sure directories are trailingslashed
482
+ $template_base_path = ! empty( $template_base_path ) ? trailingslashit( $template_base_path ) : $template_base_path;
483
 
484
+ $file = $template_base_path . 'views/' . $template;
485
+
486
+ $file = apply_filters( 'tribe_events_template', $file, $template );
487
+
488
+ // return the first one found
489
+ if ( file_exists( $file ) )
490
+ break;
491
+ else
492
+ $file = false;
493
  }
494
+ }
495
 
496
+ // file wasn't found anywhere in the theme or in our plugin at the specifically requested path,
497
+ // and there are overrides, so look in our plugin for the file with the namespace added
498
+ // since it might be an old override requesting the file without the namespace
499
+ if ( ! $file && $overrides_exist ) {
500
+ foreach ( $template_base_paths as $_namespace => $template_base_path ) {
501
 
502
+ // make sure directories are trailingslashed
503
+ $template_base_path = ! empty( $template_base_path ) ? trailingslashit( $template_base_path ) : $template_base_path;
504
+ $_namespace = ! empty( $_namespace ) ? trailingslashit( $_namespace ) : $_namespace;
505
+
506
+ $file = $template_base_path . 'views/' . $_namespace . $template;
507
+
508
+ $file = apply_filters( 'tribe_events_template', $file, $template );
509
+
510
+ // return the first one found
511
+ if ( file_exists( $file ) ) {
512
+ _deprecated_function( sprintf( __( 'Template overrides should be moved to the correct subdirectory: tribe_get_template_part(\'%s\')', 'tribe-events' ), $template ) , '3.2', 'tribe_get_template_part(\''.$_namespace.$template.'\')');
513
+ break;
514
+ }
515
+ }
516
  }
517
 
518
+ return apply_filters( 'tribe_events_template_'.$template, $file );
519
  }
520
 
521
 
527
  * @return bool|string Path to stylesheet
528
  */
529
  public static function locate_stylesheet( $stylesheets, $fallback = false ) {
530
+ if ( ! is_array( $stylesheets ) ) {
531
  $stylesheets = array( $stylesheets );
532
  }
533
  if ( empty( $stylesheets ) ) {
534
  return $fallback;
535
  }
536
  foreach ( $stylesheets as $filename ) {
537
+ if ( file_exists( STYLESHEETPATH . '/' . $filename ) ) {
538
+ $located = trailingslashit( get_stylesheet_directory_uri() ).$filename;
539
  break;
540
+ } else if ( file_exists(TEMPLATEPATH . '/' . $filename ) ) {
541
+ $located = trailingslashit( get_template_directory_uri() ).$filename;
542
  break;
543
  }
544
  }
596
  'is_archive' => false,
597
  'is_tax' => false,
598
  );
599
+ return ( object ) $spoofed_post;
600
  }
601
 
602
 
606
  public static function maybeSpoofQuery() {
607
 
608
  // hijack this method right up front if it's a password protected post and the password isn't entered
609
+ if ( is_single() && post_password_required() ) {
610
  return;
611
  }
612
 
620
 
621
  $GLOBALS['post'] = $spoofed_post;
622
  $wp_query->posts[] = $spoofed_post;
623
+ $wp_query->post_count = count( $wp_query->posts );
624
 
625
  $wp_query->spoofed = true;
626
  $wp_query->rewind_posts();
lib/widget-list.class.php CHANGED
@@ -48,7 +48,7 @@ if( !class_exists( 'TribeEventsListWidget' ) ) {
48
  * @param string $namespace The namespace for the widget template stuff.
49
  * @param string $pluginPath The pluginpath so we can locate the template stuff.
50
  */
51
- function widget_output( $args, $instance, $template_name='list-widget', $subfolder = 'widgets', $namespace = '/', $pluginPath = '' ) {
52
  global $wp_query, $tribe_ecp, $post;
53
  extract( $args, EXTR_SKIP );
54
  // The view expects all these $instance variables, which may not be set without pro
@@ -116,7 +116,7 @@ if( !class_exists( 'TribeEventsListWidget' ) ) {
116
  echo '<ol class="hfeed vcalendar">';
117
  foreach( $posts as $post ) :
118
  setup_postdata( $post );
119
- tribe_get_template_part( 'widgets/list-widget' );
120
  endforeach;
121
  echo "</ol><!-- .hfeed -->";
122
 
48
  * @param string $namespace The namespace for the widget template stuff.
49
  * @param string $pluginPath The pluginpath so we can locate the template stuff.
50
  */
51
+ function widget_output( $args, $instance, $template_name='widgets/list-widget') {
52
  global $wp_query, $tribe_ecp, $post;
53
  extract( $args, EXTR_SKIP );
54
  // The view expects all these $instance variables, which may not be set without pro
116
  echo '<ol class="hfeed vcalendar">';
117
  foreach( $posts as $post ) :
118
  setup_postdata( $post );
119
+ tribe_get_template_part( $template_name );
120
  endforeach;
121
  echo "</ol><!-- .hfeed -->";
122
 
public/advanced-functions/meta.php CHANGED
@@ -17,7 +17,7 @@ if ( class_exists( 'Tribe_Meta_Factory' ) ) {
17
  *
18
  * @return string title
19
  */
20
- function the_title() {
21
  return get_the_title( get_the_ID() );
22
  }
23
 
@@ -28,9 +28,13 @@ if ( class_exists( 'Tribe_Meta_Factory' ) ) {
28
  * @param int $meta_id
29
  * @return string
30
  */
31
- function event_date( $meta_id ) {
32
- if ( tribe_get_start_date() !== tribe_get_end_date() ) {
33
- // Start & end date
 
 
 
 
34
  $html = Tribe_Meta_Factory::template(
35
  __( 'Start:', 'tribe-events-calendar' ),
36
  sprintf( '<abbr class="tribe-events-abbr updated published dtstart" title="%s">%s</abbr>',
@@ -45,16 +49,49 @@ if ( class_exists( 'Tribe_Meta_Factory' ) ) {
45
  tribe_get_end_date()
46
  ),
47
  $meta_id );
48
- } else {
49
- // If all day event, show only start date
50
- $html = Tribe_Meta_Factory::template(
51
- __( 'Date:', 'tribe-events-calendar' ),
52
- sprintf( '<abbr class="tribe-events-abbr updated published dtstart" title="%s">%s</abbr>',
53
- tribe_get_start_date( null, false, TribeDateUtils::DBDATEFORMAT ),
54
- tribe_get_start_date()
55
- ),
56
- $meta_id );
57
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
58
  return apply_filters( 'tribe_event_meta_event_date', $html );
59
  }
60
 
@@ -65,7 +102,7 @@ if ( class_exists( 'Tribe_Meta_Factory' ) ) {
65
  * @param int $meta_id
66
  * @return array
67
  */
68
- function event_category( $meta_id ) {
69
  global $_tribe_meta_factory;
70
  $post_id = get_the_ID();
71
 
@@ -93,7 +130,7 @@ if ( class_exists( 'Tribe_Meta_Factory' ) ) {
93
  * @param int $meta_id
94
  * @return array
95
  */
96
- function event_tag( $meta_id ) {
97
  global $_tribe_meta_factory;
98
  return apply_filters( 'tribe_event_meta_event_tag', tribe_meta_event_tags( $_tribe_meta_factory->meta[$meta_id]['label'], ', ', false ) );
99
  }
@@ -105,7 +142,7 @@ if ( class_exists( 'Tribe_Meta_Factory' ) ) {
105
  * @param int $meta_id
106
  * @return string
107
  */
108
- function event_website( $meta_id ){
109
  global $_tribe_meta_factory;
110
  $link = tribe_get_event_website_link();
111
  $website_link = empty( $link ) ? '' : Tribe_Meta_Factory::template(
@@ -121,7 +158,7 @@ if ( class_exists( 'Tribe_Meta_Factory' ) ) {
121
  * @param int $meta_id
122
  * @return string
123
  */
124
- function event_origin( $meta_id ) {
125
  global $_tribe_meta_factory;
126
  $origin_to_display = apply_filters( 'tribe_events_display_event_origin', '', get_the_ID() );
127
  $origin = empty( $link ) ? '' : Tribe_Meta_Factory::template(
@@ -138,7 +175,7 @@ if ( class_exists( 'Tribe_Meta_Factory' ) ) {
138
  * @param int $meta_id
139
  * @return string
140
  */
141
- function organizer_name( $meta_id ){
142
  global $_tribe_meta_factory;
143
  $post_id = get_the_ID();
144
  $name = tribe_get_organizer( $post_id );
@@ -156,7 +193,7 @@ if ( class_exists( 'Tribe_Meta_Factory' ) ) {
156
  * @param int $meta_id
157
  * @return string
158
  */
159
- function organizer_email( $meta_id ){
160
  global $_tribe_meta_factory;
161
  $email = tribe_get_organizer_email();
162
  $organizer_email = empty( $email ) ? '' : Tribe_Meta_Factory::template(
@@ -172,7 +209,7 @@ if ( class_exists( 'Tribe_Meta_Factory' ) ) {
172
  * @param int $meta_id
173
  * @return string
174
  */
175
- function venue_name( $meta_id ){
176
  global $_tribe_meta_factory;
177
  $post_id = get_the_ID();
178
  $name = tribe_get_venue( $post_id );
@@ -189,7 +226,7 @@ if ( class_exists( 'Tribe_Meta_Factory' ) ) {
189
  * @param int $meta_id
190
  * @return string
191
  */
192
- function venue_address( $meta_id ){
193
  global $_tribe_meta_factory;
194
 
195
  $address = tribe_address_exists( get_the_ID() ) ? '<address class="tribe-events-address">' . tribe_get_full_address( get_the_ID() ) . '</address>' : '';
@@ -211,7 +248,7 @@ if ( class_exists( 'Tribe_Meta_Factory' ) ) {
211
  * @param int $meta_id
212
  * @return string
213
  */
214
- function venue_map( $meta_id ){
215
  global $_tribe_meta_factory;
216
  $post_id = get_the_ID();
217
  $map = tribe_get_embedded_map( $post_id );
@@ -227,7 +264,7 @@ if ( class_exists( 'Tribe_Meta_Factory' ) ) {
227
  *
228
  * @return string
229
  */
230
- function gmap_link() {
231
  $link = sprintf('<a class="tribe-events-gmap" href="%s" title="%s" target="_blank">%s</a>',
232
  tribe_get_map_link(),
233
  __( 'Click to view a Google Map', 'tribe-events-calendar' ),
17
  *
18
  * @return string title
19
  */
20
+ public static function the_title() {
21
  return get_the_title( get_the_ID() );
22
  }
23
 
28
  * @param int $meta_id
29
  * @return string
30
  */
31
+ public static function event_date( $meta_id ) {
32
+ $time_format = get_option( 'time_format', TribeDateUtils::TIMEFORMAT );
33
+ $start_time = tribe_get_start_date(null, false, $time_format );
34
+ $end_time = tribe_get_end_date(null, false, $time_format );
35
+
36
+ if ( tribe_event_is_multiday() ) {
37
+ // If multiday, show start date+time and end date+time
38
  $html = Tribe_Meta_Factory::template(
39
  __( 'Start:', 'tribe-events-calendar' ),
40
  sprintf( '<abbr class="tribe-events-abbr updated published dtstart" title="%s">%s</abbr>',
49
  tribe_get_end_date()
50
  ),
51
  $meta_id );
 
 
 
 
 
 
 
 
 
52
  }
53
+ elseif ( !tribe_event_is_multiday() ) {
54
+ if ( tribe_event_is_all_day() ) {
55
+ // If all day event, show only start date
56
+ $html = Tribe_Meta_Factory::template(
57
+ __( 'Date:', 'tribe-events-calendar' ),
58
+ sprintf( '<abbr class="tribe-events-abbr updated published dtstart" title="%s">%s</abbr>',
59
+ tribe_get_start_date( null, false, TribeDateUtils::DBDATEFORMAT ),
60
+ tribe_get_start_date()
61
+ ),
62
+ $meta_id );
63
+ }
64
+ else {
65
+ // show start date
66
+ $html = Tribe_Meta_Factory::template(
67
+ __( 'Date:', 'tribe-events-calendar' ),
68
+ sprintf( '<abbr class="tribe-events-abbr updated published dtstart" title="%s">%s</abbr>',
69
+ tribe_get_start_date( null, false, TribeDateUtils::DBDATEFORMAT ),
70
+ tribe_get_start_date(null, false)
71
+ ),
72
+ $meta_id );
73
+ if ( $start_time == $end_time ) {
74
+ // if start and end time are the same, just show the start time
75
+ $html .= Tribe_Meta_Factory::template(
76
+ __( 'Time:', 'tribe-events-calendar' ),
77
+ sprintf( '<abbr class="tribe-events-abbr dtend" title="%s">%s</abbr>',
78
+ tribe_get_end_date( null, false, TribeDateUtils::DBDATEFORMAT ),
79
+ $start_time
80
+ ),
81
+ $meta_id );
82
+ } else {
83
+ // show start and end time
84
+ $html .= Tribe_Meta_Factory::template(
85
+ __( 'Time:', 'tribe-events-calendar' ),
86
+ sprintf( '<abbr class="tribe-events-abbr dtend" title="%s">%s</abbr>',
87
+ tribe_get_end_date( null, false, TribeDateUtils::DBDATEFORMAT ),
88
+ $start_time .' - '. $end_time
89
+ ),
90
+ $meta_id );
91
+ }
92
+ }
93
+
94
+ }
95
  return apply_filters( 'tribe_event_meta_event_date', $html );
96
  }
97
 
102
  * @param int $meta_id
103
  * @return array
104
  */
105
+ public static function event_category( $meta_id ) {
106
  global $_tribe_meta_factory;
107
  $post_id = get_the_ID();
108
 
130
  * @param int $meta_id
131
  * @return array
132
  */
133
+ public static function event_tag( $meta_id ) {
134
  global $_tribe_meta_factory;
135
  return apply_filters( 'tribe_event_meta_event_tag', tribe_meta_event_tags( $_tribe_meta_factory->meta[$meta_id]['label'], ', ', false ) );
136
  }
142
  * @param int $meta_id
143
  * @return string
144
  */
145
+ public static function event_website( $meta_id ){
146
  global $_tribe_meta_factory;
147
  $link = tribe_get_event_website_link();
148
  $website_link = empty( $link ) ? '' : Tribe_Meta_Factory::template(
158
  * @param int $meta_id
159
  * @return string
160
  */
161
+ public static function event_origin( $meta_id ) {
162
  global $_tribe_meta_factory;
163
  $origin_to_display = apply_filters( 'tribe_events_display_event_origin', '', get_the_ID() );
164
  $origin = empty( $link ) ? '' : Tribe_Meta_Factory::template(
175
  * @param int $meta_id
176
  * @return string
177
  */
178
+ public static function organizer_name( $meta_id ){
179
  global $_tribe_meta_factory;
180
  $post_id = get_the_ID();
181
  $name = tribe_get_organizer( $post_id );
193
  * @param int $meta_id
194
  * @return string
195
  */
196
+ public static function organizer_email( $meta_id ){
197
  global $_tribe_meta_factory;
198
  $email = tribe_get_organizer_email();
199
  $organizer_email = empty( $email ) ? '' : Tribe_Meta_Factory::template(
209
  * @param int $meta_id
210
  * @return string
211
  */
212
+ public static function venue_name( $meta_id ){
213
  global $_tribe_meta_factory;
214
  $post_id = get_the_ID();
215
  $name = tribe_get_venue( $post_id );
226
  * @param int $meta_id
227
  * @return string
228
  */
229
+ public static function venue_address( $meta_id ){
230
  global $_tribe_meta_factory;
231
 
232
  $address = tribe_address_exists( get_the_ID() ) ? '<address class="tribe-events-address">' . tribe_get_full_address( get_the_ID() ) . '</address>' : '';
248
  * @param int $meta_id
249
  * @return string
250
  */
251
+ public static function venue_map( $meta_id ){
252
  global $_tribe_meta_factory;
253
  $post_id = get_the_ID();
254
  $map = tribe_get_embedded_map( $post_id );
264
  *
265
  * @return string
266
  */
267
+ public static function gmap_link() {
268
  $link = sprintf('<a class="tribe-events-gmap" href="%s" title="%s" target="_blank">%s</a>',
269
  tribe_get_map_link(),
270
  __( 'Click to view a Google Map', 'tribe-events-calendar' ),
public/template-tags/date.php CHANGED
@@ -62,14 +62,16 @@ if( class_exists( 'TribeEvents' ) ) {
62
  global $post;
63
  $event = $post;
64
  }
65
- if( is_numeric( $event ) )
66
- $event = get_post( $event );
 
67
 
68
  if( tribe_event_is_all_day( $event ) )
69
  $displayTime = false;
70
 
71
- if( empty($event->EventEndDate) && is_object( $event ) )
72
  $event->EventEndDate = tribe_get_event_meta( $event->ID, '_EventEndDate', true );
 
73
 
74
  if( isset($event->EventEndDate) ){
75
  $date = strtotime( $event->EventEndDate );
62
  global $post;
63
  $event = $post;
64
  }
65
+ if( is_numeric( $event ) ) {
66
+ $event = get_post( $event );
67
+ }
68
 
69
  if( tribe_event_is_all_day( $event ) )
70
  $displayTime = false;
71
 
72
+ if( empty($event->EventEndDate) && is_object( $event ) ) {
73
  $event->EventEndDate = tribe_get_event_meta( $event->ID, '_EventEndDate', true );
74
+ }
75
 
76
  if( isset($event->EventEndDate) ){
77
  $date = strtotime( $event->EventEndDate );
public/template-tags/general.php CHANGED
@@ -39,13 +39,13 @@ if ( class_exists( 'TribeEvents' ) ) {
39
  if ( ! $view ) {
40
  $template_file = tribe_get_current_template();
41
  } else {
42
- $template_file = TribeEventsTemplates::getTemplateHierarchy( $view, array('disable_view_check' => true) );
43
  }
44
 
45
  if (file_exists($template_file)) {
46
- do_action('tribe_events_before_view', $template_file);
47
  include( $template_file );
48
- do_action('tribe_events_after_view', $template_file);
49
  }
50
  }
51
 
@@ -733,8 +733,38 @@ if ( class_exists( 'TribeEvents' ) ) {
733
  return apply_filters( 'tribe_events_event_recurring_info_tooltip', $tooltip );
734
  }
735
 
736
- /**
737
- * Return the details of the start/end date/time
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
738
  *
739
  * @since 3.0
740
  * @param int|null $event
@@ -745,24 +775,35 @@ if ( class_exists( 'TribeEvents' ) ) {
745
  global $post;
746
  $event = $post;
747
  }
 
748
  if ( is_numeric( $event ) )
749
  $event = get_post( $event );
750
 
 
751
  $format = '';
752
- $timeFormat = get_option( 'time_format' );
 
753
  $microformatStartFormat = tribe_get_start_date( $event, false, 'Y-m-dTh:i' );
754
  $microformatEndFormat = tribe_get_end_date( $event, false, 'Y-m-dTh:i' );
755
 
756
- // If the WordPress date setting matches DATEONLYFORMAT, make the string more readable
757
- if ( get_option( 'date_format' ) == TribeDateUtils::DATEONLYFORMAT ) {
758
- /* If the event happens this year, no need to show the year, unless it ends on another year (multi-day) */
759
- if ( tribe_get_start_date( $event, false, 'Y' ) === date( 'Y' ) && tribe_get_end_date( $event, false, 'Y' ) === date( 'Y' ) ) {
760
- $format = 'F j';
761
- }
 
 
 
 
 
 
 
 
 
 
762
  }
763
 
764
- $schedule = '';
765
-
766
  if ( tribe_event_is_multiday( $event ) ) { // multi-date event
767
 
768
  $format2ndday = $format;
@@ -798,11 +839,11 @@ if ( class_exists( 'TribeEvents' ) ) {
798
  }
799
  } else {
800
  $schedule .= '<span class="date-start dtstart">';
801
- $schedule .= tribe_get_start_date( $event, false, $format ) . ' @ ' . tribe_get_start_date( $event, false, $timeFormat );
802
  $schedule .= '<span class="value-title" title="'. $microformatStartFormat .'"></span>';
803
  $schedule .= '</span> - ';
804
  $schedule .= '<span class="date-end dtend">';
805
- $schedule .= tribe_get_end_date( $event, false, $format2ndday ) . ' @ ' . tribe_get_end_date( $event, false, $timeFormat );
806
  $schedule .= '<span class="value-title" title="'. $microformatEndFormat .'"></span>';
807
  $schedule .= '</span>';
808
  }
@@ -816,16 +857,16 @@ if ( class_exists( 'TribeEvents' ) ) {
816
  } else { // single day event
817
  if ( tribe_get_start_date( $event, false, 'g:i A' ) === tribe_get_end_date( $event, false, 'g:i A' ) ) { // Same start/end time
818
  $schedule .= '<span class="date-start dtstart">';
819
- $schedule .= tribe_get_start_date( $event, false, $format ) . ' @ ' . tribe_get_start_date( $event, false, $timeFormat );
820
  $schedule .= '<span class="value-title" title="'. $microformatStartFormat .'"></span>';
821
  $schedule .= '</span>';
822
  } else { // defined start/end time
823
  $schedule .= '<span class="date-start dtstart">';
824
- $schedule .= tribe_get_start_date( $event, false, $format ) . ' @ ' . tribe_get_start_date( $event, false, $timeFormat );
825
  $schedule .= '<span class="value-title" title="'. $microformatStartFormat .'"></span>';
826
- $schedule .= '</span> - ';
827
  $schedule .= '<span class="end-time dtend">';
828
- $schedule .= tribe_get_end_date( $event, false, $timeFormat ) . '<span class="value-title" title="'. $microformatEndFormat .'"></span>';
829
  $schedule .= '</span>';
830
  }
831
  }
39
  if ( ! $view ) {
40
  $template_file = tribe_get_current_template();
41
  } else {
42
+ $template_file = TribeEventsTemplates::getTemplateHierarchy( $view, array( 'disable_view_check' => true ) );
43
  }
44
 
45
  if (file_exists($template_file)) {
46
+ do_action( 'tribe_events_before_view', $template_file );
47
  include( $template_file );
48
+ do_action( 'tribe_events_after_view', $template_file );
49
  }
50
  }
51
 
733
  return apply_filters( 'tribe_events_event_recurring_info_tooltip', $tooltip );
734
  }
735
 
736
+ /**
737
+ * Return the details of the start/end date/time.
738
+ *
739
+ * The highest level means of customizing this function's output is simply to adjust the WordPress date and time
740
+ * formats (via the General Settings admin screen). Beyond that however there are two filters which can be used to
741
+ * exercise further control here.
742
+ *
743
+ * The first is 'tribe_events_event_schedule_details_formatting' which allows an array of format settings to be
744
+ * altered - it's basic make-up is as a simple set of key:value pairs as follows.
745
+ *
746
+ * "datetime_separator": this is inserted between the date and the time and defaults to an ampersat @ character.
747
+ * Note that if you modify this you should ordinarily be careful to include leading and trailing spaces (an
748
+ * example might be ' at ').
749
+ *
750
+ * "same_year_format": if an event starts and ends in the same year it's assumed that including the year in the
751
+ * output is superfluous. That being the case the function changes the date format, by default, to 'F j'. This
752
+ * may not be ideal in all locales so an alternative can be provided here. Do note that this substitution is
753
+ * only ever made if A) the event starts and ends in the same year and B) the date format does not include any
754
+ * time formatting characters.
755
+ *
756
+ * This can also effectively be used to turn off the assumption that the year should be omitted, simply by
757
+ * setting it to the value of the 'date_format' option, for example.
758
+ *
759
+ * "show_end_time": for single day events only (not including all day events) it may not always be desirable to
760
+ * include the end time. In that situation, this setting can be set to false and the end time will not be
761
+ * displayed.
762
+ *
763
+ * "time": if it is undesirable to show times and only dates should be displayed then this setting can be set to
764
+ * false. If it is false it will by extension cause 'show_end_time' to be false.
765
+ *
766
+ * The resulting string can also be caught and manipulated, or completely overridden, using the
767
+ * 'tribe_events_event_schedule_details' filter, should none of the above settings be sufficient.
768
  *
769
  * @since 3.0
770
  * @param int|null $event
775
  global $post;
776
  $event = $post;
777
  }
778
+
779
  if ( is_numeric( $event ) )
780
  $event = get_post( $event );
781
 
782
+ $schedule = '';
783
  $format = '';
784
+ $date_format = get_option( 'date_format' );
785
+ $time_format = get_option( 'time_format' );
786
  $microformatStartFormat = tribe_get_start_date( $event, false, 'Y-m-dTh:i' );
787
  $microformatEndFormat = tribe_get_end_date( $event, false, 'Y-m-dTh:i' );
788
 
789
+ $settings = array(
790
+ 'datetime_separator' => ' @ ',
791
+ 'same_year_format' => 'F j',
792
+ 'show_end_time' => true,
793
+ 'time' => true,
794
+ );
795
+
796
+ $settings = wp_parse_args( apply_filters('tribe_events_event_schedule_details_formatting', $settings), $settings );
797
+ if ( ! $settings['time'] ) $settings['show_end_time'] = false;
798
+ extract($settings);
799
+
800
+ // If the date format will result in the year being shown but does *not* include any time formatting...
801
+ if ( TribeDateUtils::formatContainsYear( $date_format ) && ! TribeDateUtils::formatContainsTime( $date_format ) ) {
802
+ // ... and it starts and ends in the current year then there is no need to display the year
803
+ if ( tribe_get_start_date( $event, false, 'Y' ) === date( 'Y' ) && tribe_get_end_date( $event, false, 'Y' ) === date( 'Y' ) )
804
+ $format = $same_year_format;
805
  }
806
 
 
 
807
  if ( tribe_event_is_multiday( $event ) ) { // multi-date event
808
 
809
  $format2ndday = $format;
839
  }
840
  } else {
841
  $schedule .= '<span class="date-start dtstart">';
842
+ $schedule .= tribe_get_start_date( $event, false, $format ) . ( $time ? $datetime_separator . tribe_get_start_date( $event, false, $time_format ) : '' );
843
  $schedule .= '<span class="value-title" title="'. $microformatStartFormat .'"></span>';
844
  $schedule .= '</span> - ';
845
  $schedule .= '<span class="date-end dtend">';
846
+ $schedule .= tribe_get_end_date( $event, false, $format2ndday ) . ( $time ? $datetime_separator . tribe_get_end_date( $event, false, $time_format ) : '' );
847
  $schedule .= '<span class="value-title" title="'. $microformatEndFormat .'"></span>';
848
  $schedule .= '</span>';
849
  }
857
  } else { // single day event
858
  if ( tribe_get_start_date( $event, false, 'g:i A' ) === tribe_get_end_date( $event, false, 'g:i A' ) ) { // Same start/end time
859
  $schedule .= '<span class="date-start dtstart">';
860
+ $schedule .= tribe_get_start_date( $event, false, $format ) . ( $time ? $datetime_separator . tribe_get_start_date( $event, false, $time_format ) : '' );
861
  $schedule .= '<span class="value-title" title="'. $microformatStartFormat .'"></span>';
862
  $schedule .= '</span>';
863
  } else { // defined start/end time
864
  $schedule .= '<span class="date-start dtstart">';
865
+ $schedule .= tribe_get_start_date( $event, false, $format ) . ( $time ? $datetime_separator . tribe_get_start_date( $event, false, $time_format ) : '' );
866
  $schedule .= '<span class="value-title" title="'. $microformatStartFormat .'"></span>';
867
+ $schedule .= '</span>' . ( $show_end_time ? ' - ' : '' );
868
  $schedule .= '<span class="end-time dtend">';
869
+ $schedule .= ( $show_end_time ? tribe_get_end_date( $event, false, $time_format ) : '' ) . '<span class="value-title" title="'. $microformatEndFormat .'"></span>';
870
  $schedule .= '</span>';
871
  }
872
  }
public/template-tags/loop.php CHANGED
@@ -132,16 +132,19 @@ if( class_exists( 'TribeEvents' ) ) {
132
  * @since 2.0
133
  */
134
  function tribe_get_events_title( $depth = true ) {
 
135
  $tribe_ecp = TribeEvents::instance();
136
 
137
  $title = __('Upcoming Events', 'tribe-events-calendar');
138
 
 
 
139
  if ( tribe_is_upcoming() || isset( $_REQUEST['tribe-bar-date'] ) ) {
140
 
141
- // Use the displayed dates for the title
142
- $start_date = date('Y-m-d', strtotime($tribe_ecp->date));
143
- if ( $tribe_ecp->date && $start_date != date('Y-m-d') ) {
144
- global $wp_query;
145
  if ( get_query_var('paged') > 1 ) {
146
  // get the date of the first post
147
  $first_post = reset($wp_query->posts);
@@ -159,9 +162,9 @@ if( class_exists( 'TribeEvents' ) ) {
159
  $args[] = date_i18n( get_option( 'date_format', 'Y-m-d' ), strtotime($last_post_date) );
160
  }
161
  }
162
- $title = vsprintf($format, $args);
163
  }
164
- } else if ( tribe_is_past() ) {
165
  $title = __( 'Past Events', 'tribe-events-calendar' );
166
  }
167
 
132
  * @since 2.0
133
  */
134
  function tribe_get_events_title( $depth = true ) {
135
+ global $wp_query;
136
  $tribe_ecp = TribeEvents::instance();
137
 
138
  $title = __('Upcoming Events', 'tribe-events-calendar');
139
 
140
+ // TODO: Use the displayed dates for the title
141
+ /*
142
  if ( tribe_is_upcoming() || isset( $_REQUEST['tribe-bar-date'] ) ) {
143
 
144
+ $start_date = date( 'Y-m-d', strtotime( $wp_query->get( 'start_date' ) ) );
145
+
146
+ if ( $wp_query->get( 'start_date' ) && $start_date != date('Y-m-d') ) {
147
+
148
  if ( get_query_var('paged') > 1 ) {
149
  // get the date of the first post
150
  $first_post = reset($wp_query->posts);
162
  $args[] = date_i18n( get_option( 'date_format', 'Y-m-d' ), strtotime($last_post_date) );
163
  }
164
  }
165
+ $title = vsprintf($format, $args);
166
  }
167
+ } else */if ( tribe_is_past() ) {
168
  $title = __( 'Past Events', 'tribe-events-calendar' );
169
  }
170
 
public/template-tags/month.php CHANGED
@@ -38,10 +38,12 @@ if( class_exists( 'TribeEvents' ) ) {
38
  }
39
  }
40
 
 
 
 
41
  do_action('tribe_events_before_show_month');
42
 
43
- new Tribe_Events_Month_Template( $args );
44
- tribe_get_view( $template_path );
45
 
46
  do_action('tribe_events_after_show_month');
47
 
@@ -184,6 +186,18 @@ if( class_exists( 'TribeEvents' ) ) {
184
  function tribe_events_the_month_single_event_classes() {
185
  echo apply_filters( 'tribe_events_the_month_single_event_classes', Tribe_Events_Month_Template::event_classes() );
186
  }
 
 
 
 
 
 
 
 
 
 
 
 
187
 
188
 
189
  /**
@@ -211,7 +225,7 @@ if( class_exists( 'TribeEvents' ) ) {
211
  function tribe_get_month_view_date() {
212
  global $wp_query;
213
 
214
- $date = date_i18n( TribeDateUtils::DBDATEFORMAT );
215
  if ( isset( $_REQUEST["eventDate"] ) && $_REQUEST["eventDate"] ) {
216
  $date = $_REQUEST["eventDate"] . '-01';
217
  } else if ( !empty( $wp_query->query_vars['eventDate'] ) ) {
@@ -247,9 +261,13 @@ if( class_exists( 'TribeEvents' ) ) {
247
  **/
248
  function tribe_events_the_next_month_link() {
249
  $url = tribe_get_next_month_link();
250
- $date = TribeEvents::instance()->nextMonth( tribe_get_month_view_date() );
251
- $text = tribe_get_next_month_text();
252
- $html = '<a data-month="'. $date .'" href="' . $url . '" rel="pref">'. $text .' &raquo;</a>';
 
 
 
 
253
  echo apply_filters('tribe_events_the_next_month_link', $html);
254
  }
255
 
@@ -299,7 +317,11 @@ if( class_exists( 'TribeEvents' ) ) {
299
  $tribe_ecp = TribeEvents::instance();
300
  if ( isset( $wp_query->query_vars[TribeEvents::TAXONOMY] ) )
301
  $term = $wp_query->query_vars[TribeEvents::TAXONOMY];
302
- $output = $tribe_ecp->getLink( 'month', $tribe_ecp->nextMonth(tribe_get_month_view_date() ), $term );
 
 
 
 
303
  return apply_filters('tribe_get_next_month_link', $output);
304
  }
305
 
@@ -326,7 +348,11 @@ if( class_exists( 'TribeEvents' ) ) {
326
  */
327
  function tribe_get_next_month_text() {
328
  $tribe_ecp = TribeEvents::instance();
329
- $output = $tribe_ecp->getDateStringShortened( $tribe_ecp->nextMonth( tribe_get_month_view_date() ) );
 
 
 
 
330
  return apply_filters('tribe_get_next_month_text', $output);
331
  }
332
  }
38
  }
39
  }
40
 
41
+ $month_class = new Tribe_Events_Month_Template( $args );
42
+ $month_class->setup_view();
43
+
44
  do_action('tribe_events_before_show_month');
45
 
46
+ tribe_get_template_part( $template_path );
 
47
 
48
  do_action('tribe_events_after_show_month');
49
 
186
  function tribe_events_the_month_single_event_classes() {
187
  echo apply_filters( 'tribe_events_the_month_single_event_classes', Tribe_Events_Month_Template::event_classes() );
188
  }
189
+
190
+ /**
191
+ * Returns whether there are any events in the month
192
+ *
193
+ * @return bool
194
+ * @author Jessica Yazbek
195
+ * @see Tribe_Events_Month_Template::get_daily_counts()
196
+ * @since 3.1.1
197
+ **/
198
+ function tribe_events_month_has_events() {
199
+ return apply_filters( 'tribe_events_month_has_events', false );
200
+ }
201
 
202
 
203
  /**
225
  function tribe_get_month_view_date() {
226
  global $wp_query;
227
 
228
+ $date = date_i18n( TribeDateUtils::DBDATEFORMAT, strtotime(date('Y-m-01'), current_time('timestamp')) );
229
  if ( isset( $_REQUEST["eventDate"] ) && $_REQUEST["eventDate"] ) {
230
  $date = $_REQUEST["eventDate"] . '-01';
231
  } else if ( !empty( $wp_query->query_vars['eventDate'] ) ) {
261
  **/
262
  function tribe_events_the_next_month_link() {
263
  $url = tribe_get_next_month_link();
264
+ try {
265
+ $date = TribeEvents::instance()->nextMonth( tribe_get_month_view_date() );
266
+ $text = tribe_get_next_month_text();
267
+ $html = '<a data-month="'. $date .'" href="' . $url . '" rel="pref">'. $text .' &raquo;</a>';
268
+ } catch ( OverflowException $e ) {
269
+ $html = '';
270
+ }
271
  echo apply_filters('tribe_events_the_next_month_link', $html);
272
  }
273
 
317
  $tribe_ecp = TribeEvents::instance();
318
  if ( isset( $wp_query->query_vars[TribeEvents::TAXONOMY] ) )
319
  $term = $wp_query->query_vars[TribeEvents::TAXONOMY];
320
+ try {
321
+ $output = $tribe_ecp->getLink( 'month', $tribe_ecp->nextMonth(tribe_get_month_view_date() ), $term );
322
+ } catch ( OverflowException $e ) {
323
+ $output = '';
324
+ }
325
  return apply_filters('tribe_get_next_month_link', $output);
326
  }
327
 
348
  */
349
  function tribe_get_next_month_text() {
350
  $tribe_ecp = TribeEvents::instance();
351
+ try {
352
+ $output = $tribe_ecp->getDateStringShortened( $tribe_ecp->nextMonth( tribe_get_month_view_date() ) );
353
+ } catch ( OverflowException $e ) {
354
+ $output = '';
355
+ }
356
  return apply_filters('tribe_get_next_month_text', $output);
357
  }
358
  }
readme.txt CHANGED
@@ -1,11 +1,11 @@
1
  === The Events Calendar ===
2
 
3
- Contributors: ModernTribe, PaulHughes01, roblagatta, jonahcoyote, MZAWeb, codearachnid, ryancurban, faction23, jazbek, kyleunzicker, leahkoerper, WebsiteBakery, peterchester, reid.peifer, shane.pearlman
4
  Tags: events, calendar, event, venue, organizer, dates, date, google maps, conference, workshop, concert, meeting, seminar, summit, class, modern tribe, tribe, widget
5
  Donate link: http://m.tri.be/29
6
- Requires at least: 3.5
7
- Tested up to: 3.6.1
8
- Stable tag: 3.1
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
 
@@ -23,15 +23,15 @@ The Events Calendar is crafted the WordPress way.
23
 
24
  The Events Calendar has been audited by many of the industry's WordPress experts including core developer Mark Jaquith for security & plugin review team member Pippin Williamson for best practices and plugin compatibility.
25
 
26
- We've poured 100s of hours into QA by a dedicated support team, monthly usability tests to guarantee that it's easy to use, and numerous user interviews to make sure you get what you want. We care about quality and crafting products that thrive in the wild.
27
 
28
- The team at Modern Tribe stands by our work and offers light support once a week for free to the community via the WordPress.org support forums. Feel free to ask a question if you're having a problem with implementation or if you find bugs. Looking for help NOW or need a deeper level of support? Add the <a href="http://m.tri.be/2c">premium add-on plugin</a> and you get access to premium support forums with under 24hr response times on weekdays.
29
 
30
  = PLUG-N-PLAY & HIGHLY CUSTOMIZABLE =
31
 
32
- TEC is built to work out of the box. Just turn it on, configure the settings to match your needs and you'll be making events within less than 5 minutes.
33
 
34
- By devs for devs, it's ready to be the foundation for your wildest hack sessions. Complete with a skeleton stylesheet to theme fast and efficiently, loads of tools including partial template overrides, a host of template tags, hooks and filters, <a href="http://m.tri.be/2b">careful documentation</a>, as well as a <a href="https://github.com/moderntribe">library of code snippets</a> on GitHub. The Events Calendar is built FOR people who build websites.
35
 
36
  Whether your vision is big or small, we have you in mind.
37
 
@@ -41,7 +41,7 @@ We've scaled The Events Calendar to work on a network with over 25 million uniqu
41
 
42
  Whether you're operating a hyperlocal hub listing thousands of events, a university with many thousands of users, or you're a sole business owner listing your classes, The Events Calendar has your back.
43
 
44
- Just getting started? Definitely watch and read through the <a href="http://m.tri.be/2d">New User Primer</a>.
45
 
46
  * Rapidly create events
47
  * Saved venues & organizers
@@ -97,7 +97,7 @@ If you're unclear about the installation process or get stuck, check out our <a
97
  = Requirements =
98
 
99
  * PHP 5.2 or above
100
- * WordPress 3.3 or above
101
  * jQuery 1.7 or above
102
 
103
  == Screenshots ==
@@ -121,15 +121,15 @@ If you're unclear about the installation process or get stuck, check out our <a
121
 
122
  = Are there any troubleshooting steps you'd suggest I try that might resolve my issue before I post a new thread? =
123
 
124
- First, make sure that you're running the latest version of The Events Calendar (3.0.0 as of this release). If you're running Events Calendar PRO it needs to match the version number of The Events Calendar. And if you've got any other add-ons, make sure those are current / running the latest code as well.
125
 
126
- The most common issues we see are either plugin or theme conflicts. You can test if a plugin or theme is conflicting by manually deactivating other plugins until just The Events Calendar 3.0 is running on your site. If the issue persists from there, revert to the default Twenty Twelve theme. If the issue is resolved after deactivating a specific plugin or your theme, you'll know that is the source of the conflict.
127
 
128
  Note that we aren't going to say "tough luck" if you identify a plugin/theme conflict. While we can't guarantee 100% integration with any plugin or theme out there, we will do our best (and reach out the plugin/theme author as needed) to figure out a solution that benefits everyone.
129
 
130
  = I'm still stuck. Where do I go to file a bug or ask a question? =
131
 
132
- Users of the free The Events Calendar should post their questions in the plugin's <a href="http://wordpress.org/support/plugin/the-events-calendar/">WordPress.org forum</a>, which we hit about once a week. Please make sure to read <a href="http://wordpress.org/support/topic/welcome-the-events-calendar-users-read-this-first">our sticky post</a> providing an overview of the support we provide free users BEFORE posting. If you find you're not getting support in as timely a fashion as you wish, you might want to consider purchasing a PRO license.
133
 
134
  If you're already a PRO user, you're entitled access to our more actively-monitored <a href="http://m.tri.be/2r">PRO forums</a> at the tri.be website. We can provide a deeper level of support here and hit these forums on a daily basis during the work week. No post should go more than 24-hours during that time without a response.
135
 
@@ -150,8 +150,10 @@ Currently, the following add-ons are available for The Events Calendar/Events Ca
150
  * <a href="http://m.tri.be/2e">Eventbrite Tickets</a>, for selling tickets to your event directly through Eventbrite.
151
  * <a href="http://m.tri.be/2g">Community Events</a>, for allowing frontend event submission from your readers.
152
  * <a href="http://m.tri.be/2h">Facebook Events</a>, for importing events directly from an organization or page on Facebook.
153
- * <a href="http://m.tri.be/2f">Tickets: WooCommerce</a>, for harnessing the power of WooCommerce to sell event tickets directly on your site without being subject to fees or relying on a third-party service.
154
  * Filter Bar (COMING SOON) for adding advanced frontend filtering capabilities to your events calendar.
 
 
155
 
156
  = I have a feature idea. What's the best way to tell you about it? =
157
 
@@ -170,7 +172,7 @@ Some docs you may find particularly useful are:
170
  * <a href="http://m.tri.be/2l">The Events Calendar New User Primer</a>
171
  * <a href="http://m.tri.be/2m">The Themer's Guide to The Events Calendar</a>
172
  * <a href="http://m.tri.be/2n">The Events Calendar FAQ</a>
173
- * <a href="http://m.tri.be/2u" target="_blank">Tutorials</a>
174
 
175
  For template tags, open the plugin directory and visit /plugins/events/public/template-tags/ where you can find a list of those available.
176
 
@@ -184,17 +186,16 @@ The plugin is produced by <a href="http://m.tri.be/2s">Modern Tribe Inc</a>.
184
 
185
  = Current Contributors =
186
 
187
- * <a href="http://profiles.wordpress.org/users/paulhughes01">Paul Hughes</a>
188
  * <a href="http://profiles.wordpress.org/users/roblagatta">Rob La Gatta</a>
189
  * <a href="http://profiles.wordpress.org/users/MZAWeb">Daniel Dvorkin</a>
190
- * <a href="http://profiles.wordpress.org/users/codearachnid">Timothy Wood</a>
191
- * <a href="http://profiles.wordpress.org/users/jonahcoyote">Jonah West</a>
192
  * <a href="http://profiles.wordpress.org/users/barryhughes">Barry Hughes</a>
193
  * <a href="http://profiles.wordpress.org/users/ryancurban">Ryan Urban</a>
194
  * <a href="http://profiles.wordpress.org/users/kyleunzicker">Kyle Unzicker</a>
195
- * <a href="http://profiles.wordpress.org/users/jazbek">Jessica Yazbek</a>
196
  * <a href="http://profiles.wordpress.org/users/jbrinley">Jonathan Brinley</a>
197
  * <a href="http://profiles.wordpress.org/users/faction23">Samuel Estok</a>
 
 
198
  * <a href="http://profiles.wordpress.org/users/leahkoerper">Leah Koerper</a>
199
  * <a href="http://profiles.wordpress.org/users/peterchester">Peter Chester</a>
200
  * <a href="http://profiles.wordpress.org/users/reid.peifer">Reid Peifer</a>
@@ -202,6 +203,9 @@ The plugin is produced by <a href="http://m.tri.be/2s">Modern Tribe Inc</a>.
202
 
203
  = Past Contributors =
204
 
 
 
 
205
  * <a href="http://profiles.wordpress.org/users/jkudish">Joachim Kudish</a>
206
  * <a href="http://profiles.wordpress.org/users/nickciske">Nick Ciske</a>
207
  * <a href="http://profiles.wordpress.org/users/kelseydamas">Kelsey Damas</a>
@@ -221,10 +225,10 @@ The plugin is produced by <a href="http://m.tri.be/2s">Modern Tribe Inc</a>.
221
  * Danish from Anonymous
222
  * Dutch from Erik Massop
223
  * Finnish by Ari-Pekka Koponen
224
- * French from Benoît Burgener
225
  * German from Michael Sebel
226
  * Greek from Maria Tsilimidou
227
- * Icelandic by Baldvin Örn Berndsen
228
  * Italian from Roberto Scano
229
  * Norwegian from Andreas Lorentsen
230
  * Polish from Marek Kosina
@@ -255,7 +259,9 @@ Our Premium Plugins:
255
  * <a href="http://m.tri.be/2g" target="_blank">The Events Calendar: Community Events</a>
256
  * <a href="http://m.tri.be/2h" target="_blank">The Events Calendar: Facebook Events</a>
257
  * <a href="http://m.tri.be/2i" target="_blank">The Events Calendar: WooCommerce Tickets</a>
258
- * The Events Calendar: Filter Bar (coming summer 2013)
 
 
259
 
260
  == Versioning ==
261
 
@@ -283,9 +289,32 @@ At no point during the 3.0 lifecycle will the major version change. But you can
283
 
284
  3.x is a complete overhaul of the plugin, and as a result we're starting the changelog fresh. For release notes from the 2.x lifecycle, see <a href="http://m.tri.be/k">our 2.x release notes.</a>
285
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
286
  = 3.1 =
287
 
288
- * Significant performance improvements to month view (thanks to Grégory for the initial report!)
289
  * Improved compatibility with Canvas and other themes by WooThemes (thanks to Paul Pruneau for the heads up!)
290
  * Fixed several bugs relating to event cutoff times and month view (thanks jadonulrich for the report!)
291
  * The correct default view now applies to event category listings
@@ -362,6 +391,11 @@ Still not happy? Shoot us an email to pro@tri.be or tweet to @moderntribeinc and
362
 
363
  IMPORTANT NOTICE: 3.x upgrade is a HUGE upgrade from 2.x versions. If you are upgrading from an older version, please test thoroughly before updating on your live website.
364
 
 
 
 
 
 
365
  = 3.1 =
366
 
367
  There have been a number of architectural changes in 3.1. If you have a lot of customizations you may want to do some thorough testing before upgrading.
1
  === The Events Calendar ===
2
 
3
+ Contributors: ModernTribe, PaulHughes01, roblagatta, jonahcoyote, MZAWeb, codearachnid, ryancurban, faction23, jazbek, jbrinley, kyleunzicker, leahkoerper, WebsiteBakery, barry.hughes, kellykathryn, neillmcshea, peterchester, reid.peifer, shane.pearlman
4
  Tags: events, calendar, event, venue, organizer, dates, date, google maps, conference, workshop, concert, meeting, seminar, summit, class, modern tribe, tribe, widget
5
  Donate link: http://m.tri.be/29
6
+ Requires at least: 3.6
7
+ Tested up to: 3.7.1
8
+ Stable tag: 3.2
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
 
23
 
24
  The Events Calendar has been audited by many of the industry's WordPress experts including core developer Mark Jaquith for security & plugin review team member Pippin Williamson for best practices and plugin compatibility.
25
 
26
+ We've poured hundreds of hours into QA by a dedicated support team, monthly usability tests to guarantee that it's easy to use, and numerous user interviews to make sure you get what you want. We care about quality and crafting products that thrive in the wild.
27
 
28
+ The team at Modern Tribe stands by our work and offers light support every Wednesday to the community via the WordPress.org support forums. Feel free to ask a question if you're having a problem with implementation or if you find bugs. Looking for help NOW or need a deeper level of support? Add the <a href="http://m.tri.be/2c">premium add-on plugin</a> and you get access to premium support forums with under 24hr response times on weekdays.
29
 
30
  = PLUG-N-PLAY & HIGHLY CUSTOMIZABLE =
31
 
32
+ The Events Calendar is built to work out of the box. Just turn it on, configure the settings to match your needs and you'll be making events within less than 5 minutes.
33
 
34
+ By developers, for developers...it's ready to be the foundation for your wildest hack sessions. Complete with a skeleton stylesheet to theme fast and efficiently, loads of tools including partial template overrides, a host of template tags, hooks and filters, <a href="http://m.tri.be/2b">careful documentation</a>, as well as a <a href="https://github.com/moderntribe">library of code snippets</a> on GitHub. The Events Calendar is built FOR people who build websites.
35
 
36
  Whether your vision is big or small, we have you in mind.
37
 
41
 
42
  Whether you're operating a hyperlocal hub listing thousands of events, a university with many thousands of users, or you're a sole business owner listing your classes, The Events Calendar has your back.
43
 
44
+ Just getting started? Definitely watch and read through the <a href="http://m.tri.be/2d">New User Primer</a> before going much forther.
45
 
46
  * Rapidly create events
47
  * Saved venues & organizers
97
  = Requirements =
98
 
99
  * PHP 5.2 or above
100
+ * WordPress 3.6 or above
101
  * jQuery 1.7 or above
102
 
103
  == Screenshots ==
121
 
122
  = Are there any troubleshooting steps you'd suggest I try that might resolve my issue before I post a new thread? =
123
 
124
+ First, make sure that you're running the latest version of The Events Calendar (3.2 as of this release). If you're running Events Calendar PRO it needs to match the version number of The Events Calendar. And if you've got any other add-ons, make sure those are current / running the latest code as well.
125
 
126
+ The most common issues we see are either plugin or theme conflicts. You can test if a plugin or theme is conflicting by manually deactivating other plugins until just The Events Calendar 3.2 is running on your site. If the issue persists from there, revert to the default Twenty Thirteen theme. If the issue is resolved after deactivating a specific plugin or your theme, you'll know that is the source of the conflict.
127
 
128
  Note that we aren't going to say "tough luck" if you identify a plugin/theme conflict. While we can't guarantee 100% integration with any plugin or theme out there, we will do our best (and reach out the plugin/theme author as needed) to figure out a solution that benefits everyone.
129
 
130
  = I'm still stuck. Where do I go to file a bug or ask a question? =
131
 
132
+ Users of the free The Events Calendar should post their questions in the plugin's <a href="http://wordpress.org/support/plugin/the-events-calendar/">WordPress.org forum</a>, which we hit about once a week (on Wednesdays). Please make sure to read <a href="http://wordpress.org/support/topic/welcome-the-events-calendar-users-read-this-first">our sticky post</a> providing an overview of the support we provide free users BEFORE posting. If you find you're not getting support in as timely a fashion as you wish, you might want to consider purchasing a PRO license.
133
 
134
  If you're already a PRO user, you're entitled access to our more actively-monitored <a href="http://m.tri.be/2r">PRO forums</a> at the tri.be website. We can provide a deeper level of support here and hit these forums on a daily basis during the work week. No post should go more than 24-hours during that time without a response.
135
 
150
  * <a href="http://m.tri.be/2e">Eventbrite Tickets</a>, for selling tickets to your event directly through Eventbrite.
151
  * <a href="http://m.tri.be/2g">Community Events</a>, for allowing frontend event submission from your readers.
152
  * <a href="http://m.tri.be/2h">Facebook Events</a>, for importing events directly from an organization or page on Facebook.
153
+ * <a href="http://m.tri.be/2f">WooCommerce Tickets</a>, for harnessing the power of WooCommerce to sell event tickets directly on your site without being subject to fees or relying on a third-party service.
154
  * Filter Bar (COMING SOON) for adding advanced frontend filtering capabilities to your events calendar.
155
+ * EDD Tickets (COMING SOON), for using our ticketing framework to sell tickets on your events through The Events Calendar + Easy Digital Downloads.
156
+ * WPEC Tickets (COMING SOON), for using WP-eCommerce + The Events Calendar to sell event tickets directly from the frontend of your site.
157
 
158
  = I have a feature idea. What's the best way to tell you about it? =
159
 
172
  * <a href="http://m.tri.be/2l">The Events Calendar New User Primer</a>
173
  * <a href="http://m.tri.be/2m">The Themer's Guide to The Events Calendar</a>
174
  * <a href="http://m.tri.be/2n">The Events Calendar FAQ</a>
175
+ * <a href="http://m.tri.be/2u" target="_blank">The Events Calendar Tutorials</a>
176
 
177
  For template tags, open the plugin directory and visit /plugins/events/public/template-tags/ where you can find a list of those available.
178
 
186
 
187
  = Current Contributors =
188
 
189
+ * <a href="http://profiles.wordpress.org/users/jazbek">Jessica Yazbek</a>
190
  * <a href="http://profiles.wordpress.org/users/roblagatta">Rob La Gatta</a>
191
  * <a href="http://profiles.wordpress.org/users/MZAWeb">Daniel Dvorkin</a>
 
 
192
  * <a href="http://profiles.wordpress.org/users/barryhughes">Barry Hughes</a>
193
  * <a href="http://profiles.wordpress.org/users/ryancurban">Ryan Urban</a>
194
  * <a href="http://profiles.wordpress.org/users/kyleunzicker">Kyle Unzicker</a>
 
195
  * <a href="http://profiles.wordpress.org/users/jbrinley">Jonathan Brinley</a>
196
  * <a href="http://profiles.wordpress.org/users/faction23">Samuel Estok</a>
197
+ * <a href="http://profiles.wordpress.org/users/neillmcshea">Neill McShea</a>
198
+ * <a href="http://profiles.wordpress.org/users/kellykathryn">Kelly Groves</a>
199
  * <a href="http://profiles.wordpress.org/users/leahkoerper">Leah Koerper</a>
200
  * <a href="http://profiles.wordpress.org/users/peterchester">Peter Chester</a>
201
  * <a href="http://profiles.wordpress.org/users/reid.peifer">Reid Peifer</a>
203
 
204
  = Past Contributors =
205
 
206
+ * <a href="http://profiles.wordpress.org/users/paulhughes01">Paul Hughes</a>
207
+ * <a href="http://profiles.wordpress.org/users/codearachnid">Timothy Wood</a>
208
+ * <a href="http://profiles.wordpress.org/users/jonahcoyote">Jonah West</a>
209
  * <a href="http://profiles.wordpress.org/users/jkudish">Joachim Kudish</a>
210
  * <a href="http://profiles.wordpress.org/users/nickciske">Nick Ciske</a>
211
  * <a href="http://profiles.wordpress.org/users/kelseydamas">Kelsey Damas</a>
225
  * Danish from Anonymous
226
  * Dutch from Erik Massop
227
  * Finnish by Ari-Pekka Koponen
228
+ * French from Beno Burgener
229
  * German from Michael Sebel
230
  * Greek from Maria Tsilimidou
231
+ * Icelandic by Baldvin Berndsen
232
  * Italian from Roberto Scano
233
  * Norwegian from Andreas Lorentsen
234
  * Polish from Marek Kosina
259
  * <a href="http://m.tri.be/2g" target="_blank">The Events Calendar: Community Events</a>
260
  * <a href="http://m.tri.be/2h" target="_blank">The Events Calendar: Facebook Events</a>
261
  * <a href="http://m.tri.be/2i" target="_blank">The Events Calendar: WooCommerce Tickets</a>
262
+ * The Events Calendar: Filter Bar (coming late 2013)
263
+ * The Events Calendar: EDD Tickets (coming late 2013)
264
+ * The Events Calendar: WPEC Tickets (coming late 2013)
265
 
266
  == Versioning ==
267
 
289
 
290
  3.x is a complete overhaul of the plugin, and as a result we're starting the changelog fresh. For release notes from the 2.x lifecycle, see <a href="http://m.tri.be/k">our 2.x release notes.</a>
291
 
292
+ = 3.2 =
293
+
294
+ * Incorporated the much-fabled CSV importer! Import CSV files directly into your The Events Calendar/Events Calendar PRO site (for an overview on how to use it, read this: http://m.tri.be/9t)
295
+ * Implemented code requesting that search engines do not index calendar pages that have no events to display
296
+ * Addressed a number of Twenty Thirteen theme compatibility fixes
297
+ * Improved how date and time are displayed on single event entries for single day events (thanks to Robin for the heads up!)
298
+ * Added a suggestion by the Organizer email field to obfuscate email addresses published on your site (thanks, Thea, for requesting this on our UserVoice page!)
299
+ * Improved compliance with PHP strict standards (thanks to Bryan in the forums for making this request!)
300
+ * Added more flexible formatting options for event schedule details
301
+ * Incorporated a fix to improve behaviors of the tribe_is_month() template tag (thanks jhned at the WordPress.org forums for this report!)
302
+ * Added a fix for when "show events in main blog loop" option disrupts certain static home pages (thanks to yorkshiretots for reporting this on the forum!)
303
+ * Added a fix for when the "show events in main blog loop" option disrupts the product listing on WooCommerce storefront for certain users (thanks to forge for the first report on this!)
304
+ * Fixed an issue with broken commenting that appeared on some templates (thanks to Tom for first reporting this at the PRO forums!)
305
+ * Added ability to create recurring events that happen every 5th occurence of a day in the month; e.g., every 5th Sunday (thanks to gregwiley for the original report!)
306
+ * Fixed an issue where future recurring events displayed as having passed when object caching is enabled (a big thanks to Ray for first bringing this up on the forums!)
307
+ * Fixed the calculation used for determining all events in a month, which was causing the last day of multi-day events to be incorrectly left off (thanks to paracleteweb for first reporting this at the WordPress.org forums!)
308
+ * Added code to make sure tribe_show_month() won't break any event views that come after it (thanks to our friend Big on the forums for the first report of this!)
309
+ * Incorporated a number of enhancements to ease compatibility with Easy Digital Downloads (thanks for all your help, Pippin!)
310
+ * Removed a PHP notice that arose when querying from events and other post types at the same time
311
+ * Fixed an issue where inaccurate draft counts were appearing on the backend events list (thanks to Neil on the forums for the first report!)
312
+ * Incorporated updated Icelandic translation by Baldvin Berndsen
313
+
314
+
315
  = 3.1 =
316
 
317
+ * Significant performance improvements to month view (thanks to Grégory for the initial report!)
318
  * Improved compatibility with Canvas and other themes by WooThemes (thanks to Paul Pruneau for the heads up!)
319
  * Fixed several bugs relating to event cutoff times and month view (thanks jadonulrich for the report!)
320
  * The correct default view now applies to event category listings
391
 
392
  IMPORTANT NOTICE: 3.x upgrade is a HUGE upgrade from 2.x versions. If you are upgrading from an older version, please test thoroughly before updating on your live website.
393
 
394
+ = 3.2 =
395
+
396
+ There have been a number of architectural changes in 3.2. If you have a lot of customizations you may want to do some thorough testing before upgrading.
397
+
398
+
399
  = 3.1 =
400
 
401
  There have been a number of architectural changes in 3.1. If you have a lot of customizations you may want to do some thorough testing before upgrading.
resources/events-admin.css CHANGED
@@ -67,7 +67,8 @@ td.tribe_message {padding-bottom: 10px !important;}
67
  .tribe-events-multi-event-day {color: #0F81BB;}
68
 
69
  .ui-front {z-index: 1000000;}
70
- .ui-widget-overlay.ui-front {z-index: 90; }
 
71
 
72
 
73
 
@@ -185,6 +186,14 @@ td.tribe_message {padding-bottom: 10px !important;}
185
  margin: 7px 0;
186
  }
187
  .tribe-settings-form .tribe-settings-form-wrap fieldset .tribe-style-selection{margin-bottom:18px;}
 
 
 
 
 
 
 
 
188
 
189
  /* = Help Screen
190
  =============================================*/
67
  .tribe-events-multi-event-day {color: #0F81BB;}
68
 
69
  .ui-front {z-index: 1000000;}
70
+ .events-cal .ui-widget-overlay.ui-front {z-index: 90;
71
+ }
72
 
73
 
74
 
186
  margin: 7px 0;
187
  }
188
  .tribe-settings-form .tribe-settings-form-wrap fieldset .tribe-style-selection{margin-bottom:18px;}
189
+ .OrganizerInfo td small {
190
+ display: block;
191
+ max-width: 250px;
192
+ margin: 0;
193
+ }
194
+ .OrganizerInfo .organizer-email {
195
+ vertical-align: top;
196
+ }
197
 
198
  /* = Help Screen
199
  =============================================*/
resources/events-admin.js CHANGED
@@ -159,6 +159,34 @@ jQuery(document).ready(function($) {
159
 
160
  tribeShowHideCorrectStateProvinceInput( $("#EventCountry > option:selected").val() );
161
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
162
  $("#EventCountry").change(function() {
163
  var countryLabel = $(this).find('option:selected').val();
164
  tribeShowHideCorrectStateProvinceInput( countryLabel );
@@ -311,6 +339,8 @@ jQuery(document).ready(function($) {
311
  if (val == "On") {
312
  $('#rec-count').hide();
313
  $('#recurrence_end').show();
 
 
314
  } else {
315
  $('#recurrence_end').hide();
316
  $('#rec-count').show();
159
 
160
  tribeShowHideCorrectStateProvinceInput( $("#EventCountry > option:selected").val() );
161
 
162
+ var $hidesub = $('[name="hideSubsequentRecurrencesDefault"]'),
163
+ $userhide = $('[name="userToggleSubsequentRecurrences"]');
164
+
165
+ if($hidesub.length && $userhide.length){
166
+
167
+ var $userwrap = $('#tribe-field-userToggleSubsequentRecurrences');
168
+
169
+ if($hidesub.is(':checked')){
170
+ $userhide.prop('checked', false);
171
+ $userwrap.hide();
172
+ }
173
+
174
+ $hidesub
175
+ .on('click', function () {
176
+ var $this = $(this);
177
+
178
+ if(!$this.is(':checked')){
179
+ $userwrap.show();
180
+ } else {
181
+ $userhide.prop('checked', false);
182
+ $userwrap.hide();
183
+ }
184
+
185
+ });
186
+
187
+
188
+ }
189
+
190
  $("#EventCountry").change(function() {
191
  var countryLabel = $(this).find('option:selected').val();
192
  tribeShowHideCorrectStateProvinceInput( countryLabel );
339
  if (val == "On") {
340
  $('#rec-count').hide();
341
  $('#recurrence_end').show();
342
+ } else if ( val == "Never" ) {
343
+ $('#rec-count, #recurrence_end').hide();
344
  } else {
345
  $('#recurrence_end').hide();
346
  $('#rec-count').show();
resources/events-admin.min.css CHANGED
@@ -1 +1 @@
1
- .events-cal #icon-edit{background:url(images/events-screen-icon.png) no-repeat 6px 3px;-webkit-background-size:23px 25px;background-size:23px 25px}#adminmenu #menu-posts-tribe_events div.wp-menu-image{background:url(images/menu.png) no-repeat 0 -32px;-webkit-background-size:29px 64px;background-size:29px 64px}#adminmenu #menu-posts-tribe_events:hover div.wp-menu-image,#adminmenu #menu-posts-tribe_events.wp-has-current-submenu div.wp-menu-image{background-position:0 0}.invalid input{border:2px solid red !important}.valid input{border:1px solid green}.clearfix{zoom:1}.placeholder{cursor:text;padding:4px 4px 4px 4px;color:#999}input:placeholder,textarea:placeholder{color:#999}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#999}.events-cal .tablenav select[name=m],.events-cal #post-query-submit{display:none}.fixed .column-start-date,.fixed .column-end-date,.fixed .column-events-cats{width:14%}#additional-field-table input,#additional-field-table select,#additional-field-table textarea{width:200px}#additional-field-table tbody tr{height:72px}.view-calendar-link{display:inline-block;font-weight:normal;padding:0;height:14.5px}.view-calendar-link-div{display:inline-block;position:absolute;left:200px;margin-top:18px}.notice{background-color:#ffffe0;border:1px solid #e6db55;margin:5px 0 15px}.bubble{border-color:#dfdfdf;border-width:1px;border-style:solid;-moz-border-radius:3px;-khtml-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;padding:10px;border-style:solid;border-spacing:0;background-color:#f9f9f9}.eventForm{margin-top:-20px}.eventForm td{padding:0 6px 10px 0;font-size:12px;vertical-align:middle}.eventForm #event-meta td{vertical-align:top}.eventForm #event-meta td div{margin-bottom:10px}.eventForm #event-meta td div:last-child{margin-bottom:20px}.eventForm select,.eventForm input{font-size:11px}.eventForm h4{font-size:1.2em;margin:1em 0 1em}.eventForm h4.event-time{margin-top:0}.tribe-community-event-info{margin:10px;width:100%}.eventtable,#EventInfo{margin:0;padding-top:0;width:100%}#event_tickets,.eventtable.ticket_list.eventForm{table-layout:fixed}#ticket_start_date,#ticket_end_date{width:100px}.form-table form input{border:0}#submitLabel{display:block}#submitLabel input{display:block;padding:0}#EventBriteDetailDiv h4,.tribe-community-event-info h4,.eventForm .tribe_sectionheader h4{text-transform:uppercase;border-bottom:1px solid #e5e5e5;padding-bottom:6px}.eventForm .tribe_sectionheader{padding-bottom:5px !important}td.tribe_message{padding-bottom:10px !important}#tribe_thanks{float:left;width:200px;margin:5px 0 0 0}.tribe_brand{font-weight:normal;margin:8px 0;font-family:Georgia !important;font-size:17px !important}.eventForm p{margin:0 0 10px 0 !important}.tribe-events-error{display:none}.tribe-events-multi-event-day{color:#0f81bb}.ui-front{z-index:1000000}.ui-widget-overlay.ui-front{z-index:90}.tribe-community-event-info small,#EventBriteDetailDiv small{color:#a3a3a3;font-size:10px}#eventBriteTicketing,#mainDonateRow{background:url(images/bg_fade.png) repeat-x top left;background-color:#fff;padding:10px 15px;border:1px solid #e2e2e2;-moz-border-radius:3px;-khtml-border-radius:3px;-webkit-border-radius:3px;-moz-border-radius-topleft:0;-moz-border-radius-topright:0;-webkit-border-top-left-radius:0;-webkit-border-top-right-radius:0;border-radius:3px;margin:-11px 6px 0}#eventBriteTicketing h2{background:url(images/eb_press_little.gif) no-repeat top right;height:80px;margin:0}.tribe-community-event-info,table.eventForm{width:100%}#custom-recurrence-weeks label{width:45px;display:block;float:left;margin-bottom:3px}#custom-recurrence-frequency input{width:30px}#custom-recurrence-years label{width:50px;display:block;float:left;margin-bottom:3px}#recurrence-changed-row{color:red;display:none}#rec-end-error{color:red}#rec-days-error{color:red}.rec-error{display:none}#recurrence-pattern-description{font-style:italic}.recurrence-pattern-description-row{display:none}#tribe-upgrade{margin:20px 0 30px;border:1px solid #ccc;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;padding:0 20px 20px;background:#f6f6f6}#tribe-upgrade .message{border-style:solid;border-width:1px;padding:6px 12px;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;background-color:#ffffe0;border-color:#e6db55}.chosen,.tribe-chosen,.chzn-container{margin-right:10px !important}.venue-dropdown,.organizer-dropdown,.events-dropdown,#eventsDefaultState,#defaultCountry,#StateProvinceSelect{width:220px !important}.multi-day-cutoff-dropdown{width:100px !important}.widget-liquid-right .widget,.inactive-sidebar .widget,.widget-liquid-right .sidebar-description{overflow:visible !important}.tribe-settings-form{max-width:1000px}.tribe-settings-form fieldset{padding:10px 0;display:inline-block;clear:both}.tribe-settings-form legend{width:220px;margin-right:20px;float:left;font-weight:bold}.tribe-settings-form fieldset.tribe-field-license_key legend{width:auto}.tribe-settings-form .tribe-field-wrap{float:left;max-width:500px}.tribe-settings-form .tribe-field-radio label,.tribe-settings-form .tribe-field-checkbox_list label{display:block;margin:5px 0}.tribe-settings-form .tribe-field-radio label input,.tribe-settings-form .tribe-field-checkbox_list label input{margin-right:5px}.tribe-settings-form .tribe-settings-form-wrap fieldset,.tribe-settings-form .tribe-settings-form-wrap .description,.tribe-settings-form fieldset[id^="tribe-field-geoloc_"]{padding-left:12px}.tribe-settings-form .tribe-settings-form-wrap fieldset .description{padding-left:0;margin-left:0;max-width:450px}.tribe-settings-form .tribe-settings-form-wrap h3{margin-bottom:10px;background-color:#f9f9f9;padding:6px 0 6px 12px}.tribe-settings-form .tribe-settings-form-wrap h3 ~ h3{margin-top:2.25em}.tribe-settings-form .tribe-settings-form-wrap h3+p{margin:0 0 10px;padding-left:12px}.tribe_settings .tribe-field-indent{margin-left:245px}.tribe_settings #pu_dashboard_message{display:none}.tribe_settings .tribe-errors-list{margin-left:15px}.tribe_settings .expiring-license{color:red}.tribe_settings .tribe-error{border:1px solid #F00}.tribe_settings .tribe-field-description{position:relative;top:-12px;margin-bottom:0}.tribe_settings #ical-link{top:-14px}.tribe-settings-form #tribe-field-stylesheetOption label{margin-left:20px}.tribe-settings-form #tribe-field-stylesheetOption input{margin-left:-20px;margin-right:8px}.tribe-settings-form #tribe-field-stylesheetOption p.description{color:#999}#modern-tribe-info{margin:20px 0;background-color:#f9f9f9;padding:8px 20px 12px;border:1px solid #ccc;border-radius:4px;-moz-border-radius:4px;-webkit-border-radius:4px;-khtml-border-radius:4px;-o-border-radius:4px}#modern-tribe-info img{margin:10px 0;width:250px;height:18px}.tribe-field-textarea.tribe-size-small textarea{width:180px;height:60px}.tribe-field-textarea.tribe-size-medium textarea{width:300px;height:80px}.tribe-field-textarea.tribe-size-large textarea{width:450px;height:120px}.tribe-field-text.tribe-size-small input,.tribe-field-license_key.tribe-size-small input{width:50px}.tribe-field-text.tribe-size-medium input,.tribe-field-license_key.tribe-size-medium input{width:225px}.tribe-field-text.tribe-size-large input,.tribe-field-license_key.tribe-size-large input{width:450px}.tribe-field-dropdown.tribe-size-small select{width:100px}.tribe-field-dropdown.tribe-size-medium select{width:300px}.tribe-field-dropdown.tribe-size-large select{width:450px}.tribe-field-dropdown_chosen.tribe-size-small select{width:100px}.tribe-field-dropdown_chosen.tribe-size-medium select{width:200px}.tribe-field-dropdown_chosen.tribe-size-large select{width:300px}.ajax-loading-license,.valid-key,.invalid-key{display:none;margin:0 5px}.ajax-loading-license{position:relative;top:5px}.valid-key{color:green}.invalid-key{color:red}#additional-field-table{margin-bottom:20px}#tribe-help-general,#tribe-help-sidebar{float:left}#tribe-help-general{width:70%}#tribe-help-sidebar{width:25%;max-width:200px;margin:20px 0 0 5%}#tribe-help-plugin-info{border:1px solid #CCC;padding:0 12px}.tribe-admin-box-left{float:left;width:20%;margin:20px 0;background-color:#f9f9f9;padding:0 20px 15px;border:1px solid #ccc;border-radius:4px;-moz-border-radius:4px;-webkit-border-radius:4px;-khtml-border-radius:4px;-o-border-radius:4px}.tribe-admin-box-right{float:right;width:68%;margin:20px 0;background-color:#f9f9f9;padding:0 20px 15px;border:1px solid #ccc;border-radius:4px;-moz-border-radius:4px;-webkit-border-radius:4px;-khtml-border-radius:4px;-o-border-radius:4px}.ajax-loader{float:right;margin:10px}.tribe-arrangeable-item{border:1px solid lightGrey;-moz-border-radius:6px;border-radius:6px}.tribe-arrangeable-item .ui-state-default{border:0}.tribe-arrangeable-item-top{padding:6px}.tribe-arrangeable-item-top:hover{cursor:move}.tribe-arrangeable-action{float:right}.tribe-arrangeable-child{display:none;padding:25px;border-top:1px solid lightGrey;background-color:#f9f9f9}.tribe-arrangeable-child label{margin:0 0 7px 0;display:block}.tribe_events_active_filter_type_options{margin:10px 0}.tribe_events_active_filter_type_options label{margin:7px 0}.tribe-settings-form .tribe-settings-form-wrap fieldset .tribe-style-selection{margin-bottom:18px}.tribe-settings-form-wrap p,.tribe-settings-form-wrap ul{margin-left:15px}.tribe-settings-form-wrap ul{list-style-type:square;margin-left:35px}.ui-widget-overlay{background:#666 url(images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat;opacity:.50;filter:Alpha(Opacity=50)}.ui-widget-shadow{margin:-5px 0 0 -5px;padding:5px;background:#000 url(images/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x;opacity:.20;filter:Alpha(Opacity=20);-moz-border-radius:5px;-webkit-border-radius:5px}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:.1px;z-index:99999;display:block}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-dialog{position:relative;padding:.2em;width:375px}.ui-dialog .ui-dialog-titlebar{padding:.5em .3em .3em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0 .2em}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:19px;margin:-10px 0 0 0;padding:1px;height:18px}.ui-dialog .ui-dialog-titlebar-close span{display:block;margin-left:-8px;margin-top:-8px}.ui-dialog .ui-dialog-titlebar-close:hover,.ui-dialog .ui-dialog-titlebar-close:focus{padding:0}.ui-dialog .ui-dialog-content{border:0;padding:.5em 1em;background:0;overflow:auto;zoom:1}.ui-dialog .ui-dialog-buttonpane{text-align:right;border-width:1px 0 0 0;background-image:none;margin:.5em 0 0 0;padding:.3em 1em .5em !important}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em !important;cursor:pointer;padding:.2em .6em .3em;line-height:1.4em;width:auto;overflow:visible;text-shadow:none}.ui-dialog .ui-resizable-se{width:14px;height:14px;right:3px;bottom:3px}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:none !important;text-align:center}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button .ui-button-text{display:block;line-height:1.4}.ui-datepicker{font-size:8pt}#ui-datepicker-div{display:none}#tribe-loading{display:none;position:absolute;width:100%;height:100%;left:0;top:0;background:#fff;background:rgba(255,255,255,0.8);z-index:4;webkit-transition:all 1s linear;-moz-transition:all 1s linear;-o-transition:all 1s linear;-ms-transition:all 1s linear;transition:all 1s linear}#tribe-loading span{position:absolute;width:32px;height:32px;left:50%;top:50%;margin:-16px 0 0 -16px;background:url(images/tribe-loading.gif) 0 0 no-repeat;-webkit-background-size:32px 32px;background-size:32px 32px}@media only screen and (min--moz-device-pixel-ratio:2),only screen and (-o-min-device-pixel-ratio:2/1),only screen and (-webkit-min-device-pixel-ratio:2),only screen and (min-device-pixel-ratio:2){.events-cal #icon-edit{background-image:url(images/events-screen-icon@2x.png)}#adminmenu #menu-posts-tribe_events div.wp-menu-image{background-image:url(images/menu@2x.png)}#tribe-loading span{background-image:url(images/tribe-loading@2x.gif)}}
1
+ .events-cal #icon-edit{background:url(images/events-screen-icon.png) no-repeat 6px 3px;-webkit-background-size:23px 25px;background-size:23px 25px}#adminmenu #menu-posts-tribe_events div.wp-menu-image{background:url(images/menu.png) no-repeat 0 -32px;-webkit-background-size:29px 64px;background-size:29px 64px}#adminmenu #menu-posts-tribe_events:hover div.wp-menu-image,#adminmenu #menu-posts-tribe_events.wp-has-current-submenu div.wp-menu-image{background-position:0 0}.invalid input{border:2px solid red !important}.valid input{border:1px solid green}.clearfix{zoom:1}.placeholder{cursor:text;padding:4px 4px 4px 4px;color:#999}input:placeholder,textarea:placeholder{color:#999}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#999}.events-cal .tablenav select[name=m],.events-cal #post-query-submit{display:none}.fixed .column-start-date,.fixed .column-end-date,.fixed .column-events-cats{width:14%}#additional-field-table input,#additional-field-table select,#additional-field-table textarea{width:200px}#additional-field-table tbody tr{height:72px}.view-calendar-link{display:inline-block;font-weight:normal;padding:0;height:14.5px}.view-calendar-link-div{display:inline-block;position:absolute;left:200px;margin-top:18px}.notice{background-color:#ffffe0;border:1px solid #e6db55;margin:5px 0 15px}.bubble{border-color:#dfdfdf;border-width:1px;border-style:solid;-moz-border-radius:3px;-khtml-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;padding:10px;border-style:solid;border-spacing:0;background-color:#f9f9f9}.eventForm{margin-top:-20px}.eventForm td{padding:0 6px 10px 0;font-size:12px;vertical-align:middle}.eventForm #event-meta td{vertical-align:top}.eventForm #event-meta td div{margin-bottom:10px}.eventForm #event-meta td div:last-child{margin-bottom:20px}.eventForm select,.eventForm input{font-size:11px}.eventForm h4{font-size:1.2em;margin:1em 0 1em}.eventForm h4.event-time{margin-top:0}.tribe-community-event-info{margin:10px;width:100%}.eventtable,#EventInfo{margin:0;padding-top:0;width:100%}#event_tickets,.eventtable.ticket_list.eventForm{table-layout:fixed}#ticket_start_date,#ticket_end_date{width:100px}.form-table form input{border:0}#submitLabel{display:block}#submitLabel input{display:block;padding:0}#EventBriteDetailDiv h4,.tribe-community-event-info h4,.eventForm .tribe_sectionheader h4{text-transform:uppercase;border-bottom:1px solid #e5e5e5;padding-bottom:6px}.eventForm .tribe_sectionheader{padding-bottom:5px !important}td.tribe_message{padding-bottom:10px !important}#tribe_thanks{float:left;width:200px;margin:5px 0 0 0}.tribe_brand{font-weight:normal;margin:8px 0;font-family:Georgia !important;font-size:17px !important}.eventForm p{margin:0 0 10px 0 !important}.tribe-events-error{display:none}.tribe-events-multi-event-day{color:#0f81bb}.ui-front{z-index:1000000}.events-cal .ui-widget-overlay.ui-front{z-index:90}.tribe-community-event-info small,#EventBriteDetailDiv small{color:#a3a3a3;font-size:10px}#eventBriteTicketing,#mainDonateRow{background:url(images/bg_fade.png) repeat-x top left;background-color:#fff;padding:10px 15px;border:1px solid #e2e2e2;-moz-border-radius:3px;-khtml-border-radius:3px;-webkit-border-radius:3px;-moz-border-radius-topleft:0;-moz-border-radius-topright:0;-webkit-border-top-left-radius:0;-webkit-border-top-right-radius:0;border-radius:3px;margin:-11px 6px 0}#eventBriteTicketing h2{background:url(images/eb_press_little.gif) no-repeat top right;height:80px;margin:0}.tribe-community-event-info,table.eventForm{width:100%}#custom-recurrence-weeks label{width:45px;display:block;float:left;margin-bottom:3px}#custom-recurrence-frequency input{width:30px}#custom-recurrence-years label{width:50px;display:block;float:left;margin-bottom:3px}#recurrence-changed-row{color:red;display:none}#rec-end-error{color:red}#rec-days-error{color:red}.rec-error{display:none}#recurrence-pattern-description{font-style:italic}.recurrence-pattern-description-row{display:none}#tribe-upgrade{margin:20px 0 30px;border:1px solid #ccc;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;padding:0 20px 20px;background:#f6f6f6}#tribe-upgrade .message{border-style:solid;border-width:1px;padding:6px 12px;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;background-color:#ffffe0;border-color:#e6db55}.chosen,.tribe-chosen,.chzn-container{margin-right:10px !important}.venue-dropdown,.organizer-dropdown,.events-dropdown,#eventsDefaultState,#defaultCountry,#StateProvinceSelect{width:220px !important}.multi-day-cutoff-dropdown{width:100px !important}.widget-liquid-right .widget,.inactive-sidebar .widget,.widget-liquid-right .sidebar-description{overflow:visible !important}.tribe-settings-form{max-width:1000px}.tribe-settings-form fieldset{padding:10px 0;display:inline-block;clear:both}.tribe-settings-form legend{width:220px;margin-right:20px;float:left;font-weight:bold}.tribe-settings-form fieldset.tribe-field-license_key legend{width:auto}.tribe-settings-form .tribe-field-wrap{float:left;max-width:500px}.tribe-settings-form .tribe-field-radio label,.tribe-settings-form .tribe-field-checkbox_list label{display:block;margin:5px 0}.tribe-settings-form .tribe-field-radio label input,.tribe-settings-form .tribe-field-checkbox_list label input{margin-right:5px}.tribe-settings-form .tribe-settings-form-wrap fieldset,.tribe-settings-form .tribe-settings-form-wrap .description,.tribe-settings-form fieldset[id^="tribe-field-geoloc_"]{padding-left:12px}.tribe-settings-form .tribe-settings-form-wrap fieldset .description{padding-left:0;margin-left:0;max-width:450px}.tribe-settings-form .tribe-settings-form-wrap h3{margin-bottom:10px;background-color:#f9f9f9;padding:6px 0 6px 12px}.tribe-settings-form .tribe-settings-form-wrap h3 ~ h3{margin-top:2.25em}.tribe-settings-form .tribe-settings-form-wrap h3+p{margin:0 0 10px;padding-left:12px}.tribe_settings .tribe-field-indent{margin-left:245px}.tribe_settings #pu_dashboard_message{display:none}.tribe_settings .tribe-errors-list{margin-left:15px}.tribe_settings .expiring-license{color:red}.tribe_settings .tribe-error{border:1px solid #F00}.tribe_settings .tribe-field-description{position:relative;top:-12px;margin-bottom:0}.tribe_settings #ical-link{top:-14px}.tribe-settings-form #tribe-field-stylesheetOption label{margin-left:20px}.tribe-settings-form #tribe-field-stylesheetOption input{margin-left:-20px;margin-right:8px}.tribe-settings-form #tribe-field-stylesheetOption p.description{color:#999}#modern-tribe-info{margin:20px 0;background-color:#f9f9f9;padding:8px 20px 12px;border:1px solid #ccc;border-radius:4px;-moz-border-radius:4px;-webkit-border-radius:4px;-khtml-border-radius:4px;-o-border-radius:4px}#modern-tribe-info img{margin:10px 0;width:250px;height:18px}.tribe-field-textarea.tribe-size-small textarea{width:180px;height:60px}.tribe-field-textarea.tribe-size-medium textarea{width:300px;height:80px}.tribe-field-textarea.tribe-size-large textarea{width:450px;height:120px}.tribe-field-text.tribe-size-small input,.tribe-field-license_key.tribe-size-small input{width:50px}.tribe-field-text.tribe-size-medium input,.tribe-field-license_key.tribe-size-medium input{width:225px}.tribe-field-text.tribe-size-large input,.tribe-field-license_key.tribe-size-large input{width:450px}.tribe-field-dropdown.tribe-size-small select{width:100px}.tribe-field-dropdown.tribe-size-medium select{width:300px}.tribe-field-dropdown.tribe-size-large select{width:450px}.tribe-field-dropdown_chosen.tribe-size-small select{width:100px}.tribe-field-dropdown_chosen.tribe-size-medium select{width:200px}.tribe-field-dropdown_chosen.tribe-size-large select{width:300px}.ajax-loading-license,.valid-key,.invalid-key{display:none;margin:0 5px}.ajax-loading-license{position:relative;top:5px}.valid-key{color:green}.invalid-key{color:red}#additional-field-table{margin-bottom:20px}#tribe-help-general,#tribe-help-sidebar{float:left}#tribe-help-general{width:70%}#tribe-help-sidebar{width:25%;max-width:200px;margin:20px 0 0 5%}#tribe-help-plugin-info{border:1px solid #CCC;padding:0 12px}.tribe-admin-box-left{float:left;width:20%;margin:20px 0;background-color:#f9f9f9;padding:0 20px 15px;border:1px solid #ccc;border-radius:4px;-moz-border-radius:4px;-webkit-border-radius:4px;-khtml-border-radius:4px;-o-border-radius:4px}.tribe-admin-box-right{float:right;width:68%;margin:20px 0;background-color:#f9f9f9;padding:0 20px 15px;border:1px solid #ccc;border-radius:4px;-moz-border-radius:4px;-webkit-border-radius:4px;-khtml-border-radius:4px;-o-border-radius:4px}.ajax-loader{float:right;margin:10px}.tribe-arrangeable-item{border:1px solid lightGrey;-moz-border-radius:6px;border-radius:6px}.tribe-arrangeable-item .ui-state-default{border:0}.tribe-arrangeable-item-top{padding:6px}.tribe-arrangeable-item-top:hover{cursor:move}.tribe-arrangeable-action{float:right}.tribe-arrangeable-child{display:none;padding:25px;border-top:1px solid lightGrey;background-color:#f9f9f9}.tribe-arrangeable-child label{margin:0 0 7px 0;display:block}.tribe_events_active_filter_type_options{margin:10px 0}.tribe_events_active_filter_type_options label{margin:7px 0}.tribe-settings-form .tribe-settings-form-wrap fieldset .tribe-style-selection{margin-bottom:18px}.OrganizerInfo td small{display:block;max-width:250px;margin:0}.OrganizerInfo .organizer-email{vertical-align:top}.tribe-settings-form-wrap p,.tribe-settings-form-wrap ul{margin-left:15px}.tribe-settings-form-wrap ul{list-style-type:square;margin-left:35px}.ui-widget-overlay{background:#666 url(images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat;opacity:.50;filter:Alpha(Opacity=50)}.ui-widget-shadow{margin:-5px 0 0 -5px;padding:5px;background:#000 url(images/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x;opacity:.20;filter:Alpha(Opacity=20);-moz-border-radius:5px;-webkit-border-radius:5px}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:.1px;z-index:99999;display:block}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-dialog{position:relative;padding:.2em;width:375px}.ui-dialog .ui-dialog-titlebar{padding:.5em .3em .3em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0 .2em}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:19px;margin:-10px 0 0 0;padding:1px;height:18px}.ui-dialog .ui-dialog-titlebar-close span{display:block;margin-left:-8px;margin-top:-8px}.ui-dialog .ui-dialog-titlebar-close:hover,.ui-dialog .ui-dialog-titlebar-close:focus{padding:0}.ui-dialog .ui-dialog-content{border:0;padding:.5em 1em;background:0;overflow:auto;zoom:1}.ui-dialog .ui-dialog-buttonpane{text-align:right;border-width:1px 0 0 0;background-image:none;margin:.5em 0 0 0;padding:.3em 1em .5em !important}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em !important;cursor:pointer;padding:.2em .6em .3em;line-height:1.4em;width:auto;overflow:visible;text-shadow:none}.ui-dialog .ui-resizable-se{width:14px;height:14px;right:3px;bottom:3px}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:none !important;text-align:center}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button .ui-button-text{display:block;line-height:1.4}.ui-datepicker{font-size:8pt}#ui-datepicker-div{display:none}#tribe-loading{display:none;position:absolute;width:100%;height:100%;left:0;top:0;background:#fff;background:rgba(255,255,255,0.8);z-index:4;webkit-transition:all 1s linear;-moz-transition:all 1s linear;-o-transition:all 1s linear;-ms-transition:all 1s linear;transition:all 1s linear}#tribe-loading span{position:absolute;width:32px;height:32px;left:50%;top:50%;margin:-16px 0 0 -16px;background:url(images/tribe-loading.gif) 0 0 no-repeat;-webkit-background-size:32px 32px;background-size:32px 32px}@media only screen and (min--moz-device-pixel-ratio:2),only screen and (-o-min-device-pixel-ratio:2/1),only screen and (-webkit-min-device-pixel-ratio:2),only screen and (min-device-pixel-ratio:2){.events-cal #icon-edit{background-image:url(images/events-screen-icon@2x.png)}#adminmenu #menu-posts-tribe_events div.wp-menu-image{background-image:url(images/menu@2x.png)}#tribe-loading span{background-image:url(images/tribe-loading@2x.gif)}}
resources/events-admin.min.js CHANGED
@@ -1,17 +1,17 @@
1
  jQuery(document).ready(function(a){function g(b){"US"==b||"United States"==b?(a("#StateProvinceSelect_chzn").show(),a("#StateProvinceText").hide()):(""!=b?a("#StateProvinceText").show():a("#StateProvinceText").hide(),a("#StateProvinceSelect_chzn").hide())}function f(){return"true"==a('[name="is_recurring"]').val()&&!a('[name="recurrence_action"]').val()&&!a('[name="recurrence_action"]').val()}a(".chosen, .tribe-field-dropdown_chosen select").chosen();a(".select2, .tribe-field-dropdown_select2 select").select2({width:"250px"});
2
  if(a('select[name="tribeEventsTemplate"]').length&&""===a('select[name="tribeEventsTemplate"]').val()){$templates=a('select[name="tribeEventsTemplate"]');var d=$templates.find("option:selected").text();$templates.prev(".select2-container").children().children("span").text(d)}a(".hide-if-js").hide();if("undefined"!=typeof TEC){d={dateFormat:"yy-mm-dd",showAnim:"fadeIn",changeMonth:!0,changeYear:!0,numberOfMonths:3,showButtonPanel:!0,onSelect:function(b){var c="EventStartDate"==this.id?"minDate":"maxDate",
3
- d=a(this).data("datepicker");b=a.datepicker.parseDate(d.settings.dateFormat||a.datepicker._defaults.dateFormat,b,d.settings);n.not(this).not("#recurrence_end").datepicker("option",c,b)}};a.extend(d,TEC);var n=a("#EventStartDate, #EventEndDate, .datepicker").datepicker(d),l=function(){!0===a("#allDayCheckbox").prop("checked")?(a(".timeofdayoptions").hide(),a("#EventTimeFormatDiv").hide()):(a(".timeofdayoptions").show(),a("#EventTimeFormatDiv").show())};a("#allDayCheckbox").click(function(){l()});l();
4
- var m=[29,31,28,31,30,31,30,31,31,30,31,30,31],p=[a("#28StartDays"),a("#29StartDays"),a("#30StartDays"),a("#31StartDays")],q=[a("#28EndDays"),a("#29EndDays"),a("#30EndDays"),a("#31EndDays")];a("select[name='EventStartMonth'], select[name='EventEndMonth']").change(function(){var b=a(this),c=b.attr("name"),c="EventStartMonth"==c?"Start":"End",b=b.attr("value");"0"==b.charAt(0)&&(b=b.replace("0",""));var d=a("select[name='Event"+c+"Year']").attr("value")%4;2==b&&0==d&&(b=0);d=a("select[name='Event"+
5
- c+"Day']");a(".event"+c+"DateField").remove();"Start"==c?(c=p[m[b]-28],c.val(d.val()),a("select[name='EventStartMonth']").after(c)):(c=q[m[b]-28],c.val(d.val()),a('select[name="EventEndMonth"]').after(c))});a("select[name='EventStartMonth'], select[name='EventEndMonth']").change();a("select[name='EventStartYear']").change(function(){a("select[name='EventStartMonth']").change()});a("select[name='EventEndYear']").change(function(){a("select[name='EventEndMonth']").change()});a("form[name='post']").submit(function(){!0===
6
  a("#isEventNo").attr("checked")||a("#isEventNo").attr("checked");return!0});var k=a(".venue"),d=a("#saved_venue");0<d.length&&"0"!=d.val()&&(k.hide(),a('[name="venue[Venue]"]').val(""));d.change(function(){"0"==a(this).val()?(k.fadeIn(),a("#EventCountry").val(0).trigger("liszt:updated"),a("#StateProvinceSelect").val(0).trigger("liszt:updated"),g("")):k.fadeOut()});var h=a(".organizer"),d=a("#saved_organizer");0<d.length&&"0"!=d.val()&&(h.hide(),a("input",h).val(""));d.change(function(){"0"==a(this).val()?
7
- h.fadeIn():h.fadeOut()})}g(a("#EventCountry > option:selected").val());a("#EventCountry").change(function(){var b=a(this).find("option:selected").val();g(b)});"true"==a('[name="is_recurring"]').val()&&!a('[name="recurrence_action"]').val()&&(d=function(){a("#recurrence-changed-row").show();a('[name="recurrence_action"]').val(2)},a(".recurrence-row input, .custom-recurrence-row input,.recurrence-row select, .custom-recurrence-row select").change(d),a('[name="recurrence[end]"]').datepicker("option",
8
- "onSelect",d));a('[name="recurrence[end]"]').datepicker("option","onSelect",function(){a('[name="recurrence[end]"]').removeClass("placeholder")});a(".wp-admin.events-cal.edit-php #doaction").click(function(b){if("trash"==a("[name='action'] option:selected").val())if(confirm("Are you sure you want to trash all occurrences of these events? All recurrence data will be lost.")){var c=[];a('[name="post[]"]:checked').each(function(){var b=a(this).val();c[b]&&a(this).prop("checked",!1);c[b]=!0})}else b.preventDefault()});
9
- a("#EventInfo input, #EventInfo select").change(function(){a(".rec-error").hide()});var e=a('.wp-admin.events-cal #post #publishing-action input[type="submit"]');e.click(function(b){a(this).data("clicked",!0)});a(".wp-admin.events-cal #post").submit(function(b){var c=a(this);f()&&(b.preventDefault(),a("#recurring-dialog").dialog({modal:!0,buttons:[{text:"Only This Event",click:function(){a('[name="recurrence_action"]').val(3);e.data("clicked")&&a('<input type="hidden" name="'+e.attr("name")+'" value="'+
10
- e.val()+'"/>').appendTo(c);a(this).dialog("close");c.submit()}},{text:"All Events",click:function(){a('[name="recurrence_action"]').val(2);e.data("clicked")&&a('<input type="hidden" name="'+e.attr("name")+'" value="'+e.val()+'"/>').appendTo(c);a(this).dialog("close");c.submit()}}],close:function(){e.data("clicked",null)}}))});a(".wp-admin.events-cal .submitdelete").click(function(b){var c=a(this);f()&&(b.preventDefault(),a("#deletion-dialog").dialog({modal:!0,buttons:[{text:"Only This Event",click:function(){document.location=
11
- c.attr("href")+"&event_start="+a(this).data("start")}},{text:"All Events",click:function(){document.location=c.attr("href")+"&deleteAll"}}]}))});a('[name="recurrence[type]"]').change(function(){var b=a(this).find("option:selected").val();a(".custom-recurrence-row").hide();"Custom"==b?(a("#recurrence-end").show(),a("#custom-recurrence-frequency").show(),a('[name="recurrence[custom-type]"]').change()):("None"==b?a("#recurrence-end").hide():a("#recurrence-end").show(),a("#custom-recurrence-frequency").hide())});
12
- a('[name="recurrence[end-type]"]').change(function(){"On"==a(this).find("option:selected").val()?(a("#rec-count").hide(),a("#recurrence_end").show()):(a("#recurrence_end").hide(),a("#rec-count").show())});a('[name="recurrence[custom-type]"]').change(function(){a(".custom-recurrence-row").hide();var b=a(this).find("option:selected"),c=b.data("tablerow");a(c).show();a("#recurrence-interval-type").text(b.data("plural"));a('[name="recurrence[custom-type-text]"]').val(b.data("plural"))});a("#recurrence_end_count").change(function(){a('[name="recurrence[type]"]').change()});
13
- a('[name="recurrence[type]"]').change(function(){var b=a(this).find("option:selected"),c=a("#recurrence_end_count").val();a("#occurence-count-text").text(1==c?b.data("single"):b.data("plural"));a('[name="recurrence[occurrence-count-text]"]').val(a("#occurence-count-text").text())});a('[name="recurrence[custom-month-number]"]').change(function(){var b=a(this).find("option:selected"),c=a('[name="recurrence[custom-month-day]"]');isNaN(b.val())?c.show():c.hide()});a("#icon-edit").hasClass("icon32-posts-tribe_venue")&&
14
- a("#menu-posts-tribe_events, #menu-posts-tribe_events a.wp-has-submenu").addClass("wp-menu-open wp-has-current-submenu").removeClass("wp-not-current-submenu").find("li:contains('Venues')").addClass("current");a("#icon-edit").hasClass("icon32-posts-tribe_organizer")&&a("#menu-posts-tribe_events, #menu-posts-tribe_events a.wp-has-submenu").addClass("wp-menu-open wp-has-current-submenu").removeClass("wp-not-current-submenu").find("li:contains('Organizers')").addClass("current");if(a("#tribe-field-tribeEnableViews").length)a("#tribe-field-tribeEnableViews").on("change",
15
- "input:checkbox",function(){reset_val=!1;1>jQuery('[name="tribeEnableViews[]"]:checked').size()?(a(this).attr("checked",!0),a("#tribe-field-tribeEnableViews .tribe-field-wrap p.description").css("color","red")):a("#tribe-field-tribeEnableViews .tribe-field-wrap p.description").removeAttr("style");a('select[name="viewOption"] option').each(function(b,c){option_val=a(this).val();a("#tribe-field-tribeEnableViews input[value="+option_val+"]").is(":checked")?a(this).prop("disabled",!1):(a(this).removeProp("selected"),
16
- a(this).prop("disabled",!0))});views=[];a('[name="tribeEnableViews[]"]:checked').each(function(){views.push(a(this).val())});("undefined"==typeof a('select[name="viewOption"] option:selected').first().val()||!a.inArray(a('select[name="viewOption"] option:selected').first().val(),views))&&a('select[name="viewOption"] option').not(":disabled").first().attr("selected","selected");a('select[name="viewOption"]').trigger("change")})});
17
- jQuery(document).ajaxSuccess(function(a,g,f){"undefined"!==typeof f&&("undefined"!==typeof f.data&&-1!=f.data.search("action=save-widget"))&&jQuery("#widgets-right .chosen").chosen()});
1
  jQuery(document).ready(function(a){function g(b){"US"==b||"United States"==b?(a("#StateProvinceSelect_chzn").show(),a("#StateProvinceText").hide()):(""!=b?a("#StateProvinceText").show():a("#StateProvinceText").hide(),a("#StateProvinceSelect_chzn").hide())}function f(){return"true"==a('[name="is_recurring"]').val()&&!a('[name="recurrence_action"]').val()&&!a('[name="recurrence_action"]').val()}a(".chosen, .tribe-field-dropdown_chosen select").chosen();a(".select2, .tribe-field-dropdown_select2 select").select2({width:"250px"});
2
  if(a('select[name="tribeEventsTemplate"]').length&&""===a('select[name="tribeEventsTemplate"]').val()){$templates=a('select[name="tribeEventsTemplate"]');var d=$templates.find("option:selected").text();$templates.prev(".select2-container").children().children("span").text(d)}a(".hide-if-js").hide();if("undefined"!=typeof TEC){d={dateFormat:"yy-mm-dd",showAnim:"fadeIn",changeMonth:!0,changeYear:!0,numberOfMonths:3,showButtonPanel:!0,onSelect:function(b){var c="EventStartDate"==this.id?"minDate":"maxDate",
3
+ d=a(this).data("datepicker");b=a.datepicker.parseDate(d.settings.dateFormat||a.datepicker._defaults.dateFormat,b,d.settings);q.not(this).not("#recurrence_end").datepicker("option",c,b)}};a.extend(d,TEC);var q=a("#EventStartDate, #EventEndDate, .datepicker").datepicker(d),n=function(){!0===a("#allDayCheckbox").prop("checked")?(a(".timeofdayoptions").hide(),a("#EventTimeFormatDiv").hide()):(a(".timeofdayoptions").show(),a("#EventTimeFormatDiv").show())};a("#allDayCheckbox").click(function(){n()});n();
4
+ var p=[29,31,28,31,30,31,30,31,31,30,31,30,31],r=[a("#28StartDays"),a("#29StartDays"),a("#30StartDays"),a("#31StartDays")],s=[a("#28EndDays"),a("#29EndDays"),a("#30EndDays"),a("#31EndDays")];a("select[name='EventStartMonth'], select[name='EventEndMonth']").change(function(){var b=a(this),c=b.attr("name"),c="EventStartMonth"==c?"Start":"End",b=b.attr("value");"0"==b.charAt(0)&&(b=b.replace("0",""));var d=a("select[name='Event"+c+"Year']").attr("value")%4;2==b&&0==d&&(b=0);d=a("select[name='Event"+
5
+ c+"Day']");a(".event"+c+"DateField").remove();"Start"==c?(c=r[p[b]-28],c.val(d.val()),a("select[name='EventStartMonth']").after(c)):(c=s[p[b]-28],c.val(d.val()),a('select[name="EventEndMonth"]').after(c))});a("select[name='EventStartMonth'], select[name='EventEndMonth']").change();a("select[name='EventStartYear']").change(function(){a("select[name='EventStartMonth']").change()});a("select[name='EventEndYear']").change(function(){a("select[name='EventEndMonth']").change()});a("form[name='post']").submit(function(){!0===
6
  a("#isEventNo").attr("checked")||a("#isEventNo").attr("checked");return!0});var k=a(".venue"),d=a("#saved_venue");0<d.length&&"0"!=d.val()&&(k.hide(),a('[name="venue[Venue]"]').val(""));d.change(function(){"0"==a(this).val()?(k.fadeIn(),a("#EventCountry").val(0).trigger("liszt:updated"),a("#StateProvinceSelect").val(0).trigger("liszt:updated"),g("")):k.fadeOut()});var h=a(".organizer"),d=a("#saved_organizer");0<d.length&&"0"!=d.val()&&(h.hide(),a("input",h).val(""));d.change(function(){"0"==a(this).val()?
7
+ h.fadeIn():h.fadeOut()})}g(a("#EventCountry > option:selected").val());var d=a('[name="hideSubsequentRecurrencesDefault"]'),l=a('[name="userToggleSubsequentRecurrences"]');if(d.length&&l.length){var m=a("#tribe-field-userToggleSubsequentRecurrences");d.is(":checked")&&(l.prop("checked",!1),m.hide());d.on("click",function(){a(this).is(":checked")?(l.prop("checked",!1),m.hide()):m.show()})}a("#EventCountry").change(function(){var b=a(this).find("option:selected").val();g(b)});"true"==a('[name="is_recurring"]').val()&&
8
+ !a('[name="recurrence_action"]').val()&&(d=function(){a("#recurrence-changed-row").show();a('[name="recurrence_action"]').val(2)},a(".recurrence-row input, .custom-recurrence-row input,.recurrence-row select, .custom-recurrence-row select").change(d),a('[name="recurrence[end]"]').datepicker("option","onSelect",d));a('[name="recurrence[end]"]').datepicker("option","onSelect",function(){a('[name="recurrence[end]"]').removeClass("placeholder")});a(".wp-admin.events-cal.edit-php #doaction").click(function(b){if("trash"==
9
+ a("[name='action'] option:selected").val())if(confirm("Are you sure you want to trash all occurrences of these events? All recurrence data will be lost.")){var c=[];a('[name="post[]"]:checked').each(function(){var b=a(this).val();c[b]&&a(this).prop("checked",!1);c[b]=!0})}else b.preventDefault()});a("#EventInfo input, #EventInfo select").change(function(){a(".rec-error").hide()});var e=a('.wp-admin.events-cal #post #publishing-action input[type="submit"]');e.click(function(b){a(this).data("clicked",
10
+ !0)});a(".wp-admin.events-cal #post").submit(function(b){var c=a(this);f()&&(b.preventDefault(),a("#recurring-dialog").dialog({modal:!0,buttons:[{text:"Only This Event",click:function(){a('[name="recurrence_action"]').val(3);e.data("clicked")&&a('<input type="hidden" name="'+e.attr("name")+'" value="'+e.val()+'"/>').appendTo(c);a(this).dialog("close");c.submit()}},{text:"All Events",click:function(){a('[name="recurrence_action"]').val(2);e.data("clicked")&&a('<input type="hidden" name="'+e.attr("name")+
11
+ '" value="'+e.val()+'"/>').appendTo(c);a(this).dialog("close");c.submit()}}],close:function(){e.data("clicked",null)}}))});a(".wp-admin.events-cal .submitdelete").click(function(b){var c=a(this);f()&&(b.preventDefault(),a("#deletion-dialog").dialog({modal:!0,buttons:[{text:"Only This Event",click:function(){document.location=c.attr("href")+"&event_start="+a(this).data("start")}},{text:"All Events",click:function(){document.location=c.attr("href")+"&deleteAll"}}]}))});a('[name="recurrence[type]"]').change(function(){var b=
12
+ a(this).find("option:selected").val();a(".custom-recurrence-row").hide();"Custom"==b?(a("#recurrence-end").show(),a("#custom-recurrence-frequency").show(),a('[name="recurrence[custom-type]"]').change()):("None"==b?a("#recurrence-end").hide():a("#recurrence-end").show(),a("#custom-recurrence-frequency").hide())});a('[name="recurrence[end-type]"]').change(function(){var b=a(this).find("option:selected").val();"On"==b?(a("#rec-count").hide(),a("#recurrence_end").show()):"Never"==b?a("#rec-count, #recurrence_end").hide():
13
+ (a("#recurrence_end").hide(),a("#rec-count").show())});a('[name="recurrence[custom-type]"]').change(function(){a(".custom-recurrence-row").hide();var b=a(this).find("option:selected"),c=b.data("tablerow");a(c).show();a("#recurrence-interval-type").text(b.data("plural"));a('[name="recurrence[custom-type-text]"]').val(b.data("plural"))});a("#recurrence_end_count").change(function(){a('[name="recurrence[type]"]').change()});a('[name="recurrence[type]"]').change(function(){var b=a(this).find("option:selected"),
14
+ c=a("#recurrence_end_count").val();a("#occurence-count-text").text(1==c?b.data("single"):b.data("plural"));a('[name="recurrence[occurrence-count-text]"]').val(a("#occurence-count-text").text())});a('[name="recurrence[custom-month-number]"]').change(function(){var b=a(this).find("option:selected"),c=a('[name="recurrence[custom-month-day]"]');isNaN(b.val())?c.show():c.hide()});a("#icon-edit").hasClass("icon32-posts-tribe_venue")&&a("#menu-posts-tribe_events, #menu-posts-tribe_events a.wp-has-submenu").addClass("wp-menu-open wp-has-current-submenu").removeClass("wp-not-current-submenu").find("li:contains('Venues')").addClass("current");
15
+ a("#icon-edit").hasClass("icon32-posts-tribe_organizer")&&a("#menu-posts-tribe_events, #menu-posts-tribe_events a.wp-has-submenu").addClass("wp-menu-open wp-has-current-submenu").removeClass("wp-not-current-submenu").find("li:contains('Organizers')").addClass("current");if(a("#tribe-field-tribeEnableViews").length)a("#tribe-field-tribeEnableViews").on("change","input:checkbox",function(){reset_val=!1;1>jQuery('[name="tribeEnableViews[]"]:checked').size()?(a(this).attr("checked",!0),a("#tribe-field-tribeEnableViews .tribe-field-wrap p.description").css("color",
16
+ "red")):a("#tribe-field-tribeEnableViews .tribe-field-wrap p.description").removeAttr("style");a('select[name="viewOption"] option').each(function(b,c){option_val=a(this).val();a("#tribe-field-tribeEnableViews input[value="+option_val+"]").is(":checked")?a(this).prop("disabled",!1):(a(this).removeProp("selected"),a(this).prop("disabled",!0))});views=[];a('[name="tribeEnableViews[]"]:checked').each(function(){views.push(a(this).val())});("undefined"==typeof a('select[name="viewOption"] option:selected').first().val()||
17
+ !a.inArray(a('select[name="viewOption"] option:selected').first().val(),views))&&a('select[name="viewOption"] option').not(":disabled").first().attr("selected","selected");a('select[name="viewOption"]').trigger("change")})});jQuery(document).ajaxSuccess(function(a,g,f){"undefined"!==typeof f&&("undefined"!==typeof f.data&&-1!=f.data.search("action=save-widget"))&&jQuery("#widgets-right .chosen").chosen()});
resources/tribe-events-ajax-calendar.js CHANGED
@@ -65,6 +65,8 @@
65
  }
66
  }).data('datepicker');
67
 
 
 
68
  if (tt.pushstate && !tt.map_view()) {
69
 
70
  var params = 'action=tribe_calendar&eventDate=' + $('#tribe-events-header').data('date');
@@ -72,10 +74,15 @@
72
  if (td.params.length)
73
  params = params + '&' + td.params;
74
 
 
 
 
75
  history.replaceState({
76
  "tribe_params": params
77
  }, ts.page_title, location.href);
78
 
 
 
79
  $(window).on('popstate', function (event) {
80
 
81
  var state = event.originalEvent.state;
65
  }
66
  }).data('datepicker');
67
 
68
+
69
+
70
  if (tt.pushstate && !tt.map_view()) {
71
 
72
  var params = 'action=tribe_calendar&eventDate=' + $('#tribe-events-header').data('date');
74
  if (td.params.length)
75
  params = params + '&' + td.params;
76
 
77
+ if (ts.category)
78
+ params = params + '&tribe_event_category=' + ts.category;
79
+
80
  history.replaceState({
81
  "tribe_params": params
82
  }, ts.page_title, location.href);
83
 
84
+
85
+
86
  $(window).on('popstate', function (event) {
87
 
88
  var state = event.originalEvent.state;
resources/tribe-events-ajax-calendar.min.js CHANGED
@@ -1,9 +1,9 @@
1
- (function(n,q,b,d,g,f,a,h,k){b(q).ready(function(){function s(c){"change_view"!=tribe_events_bar_action&&(c.preventDefault(),a.ajax_running||(m.val().length?a.date=m.val():r||(a.date=d.cur_date.slice(0,-3)),d.cur_url=a.filter_cats?b("#tribe-events-header").data("baseurl")+a.date+"/":p+a.date+"/",a.popping=!1,f.pre_ajax(function(){l()})))}function l(){b(".tribe-events-calendar").tribe_spin();a.pushcount=0;a.ajax_running=!0;a.popping||(a.params={action:"tribe_calendar",eventDate:a.date},a.category&&
2
  (a.params.tribe_event_category=a.category),a.url_params={},b(g).trigger("tribe_ev_serializeBar"),a.params=b.param(a.params),a.url_params=b.param(a.url_params),b(g).trigger("tribe_ev_collectParams"),0<a.pushcount||a.filters?(a.do_string=!0,a.pushstate=!1):(a.do_string=!1,a.pushstate=!0));h.pushstate&&!a.filter_cats?(k&&debug.time("Month View Ajax Timer"),b(g).trigger("tribe_ev_ajaxStart").trigger("tribe_ev_monthView_AjaxStart"),b.post(TribeCalendar.ajaxurl,a.params,function(c){a.initial_load=!1;f.enable_inputs("#tribe_events_filters_form",
3
- "input, select");if(c.success){a.ajax_running=!1;d.ajax_response={total_count:"",view:c.view,max_pages:"",tribe_paged:"",timestamp:(new Date).getTime()};k&&0===c.html&&debug.warn("Month view ajax had an error in the query and returned 0.");var e="",e=b.isFunction(b.fn.parseHTML)?b.parseHTML(c.html):c.html;b("#tribe-events-content").replaceWith(e);a.page_title=b("#tribe-events-header").data("title");q.title=a.page_title;a.do_string&&(d.cur_url=d.cur_url+"?"+a.url_params,history.pushState({tribe_date:a.date,
4
- tribe_params:a.params},a.page_title,d.cur_url));a.pushstate&&history.pushState({tribe_date:a.date,tribe_params:a.params},a.page_title,d.cur_url);b(g).trigger("tribe_ev_ajaxSuccess").trigger("tribe_ev_monthView_ajaxSuccess");k&&debug.timeEnd("Month View Ajax Timer")}})):n.location=a.do_string?d.cur_url+"?"+a.url_params:d.cur_url}var p=b("#tribe-events-header .tribe-events-nav-next a").attr("href").slice(0,-8),e=f.get_url_param("tribe-bar-date"),m=b("#tribe-bar-date"),r=!1;b(".tribe-events-calendar").length&&
5
- b("#tribe-events-bar").length&&(e&&7<e.length)&&(b("#tribe-bar-date-day").val(e.slice(-3)),m.val(e.substring(0,7)));var t=m.bootstrapDatepicker({format:"yyyy-mm",showAnim:"fadeIn",viewMode:"months"}).on("changeDate",function(c){var e=c.date.getFullYear(),g=("0"+(c.date.getMonth()+1)).slice(-2);t.hide();r=!0;f.update_picker(c.date);a.date=e+"-"+g;if((h.no_bar()||h.live_ajax()&&h.pushstate)&&!a.ajax_running)d.cur_url=a.filter_cats?b("#tribe-events-header").data("baseurl")+a.date+"/":p+a.date+"/",a.popping=
6
- !1,f.pre_ajax(function(){l()})}).data("datepicker");h.pushstate&&!h.map_view()&&(e="action=tribe_calendar&eventDate="+b("#tribe-events-header").data("date"),d.params.length&&(e=e+"&"+d.params),history.replaceState({tribe_params:e},a.page_title,location.href),b(n).on("popstate",function(b){if(b=b.originalEvent.state)a.do_string=!1,a.pushstate=!1,a.popping=!0,a.params=b.tribe_params,f.pre_ajax(function(){l()}),f.set_form(a.params)}));b("#tribe-events").on("click",".tribe-events-sub-nav a",function(c){c.preventDefault();
7
- a.ajax_running||(c=b(this),a.date=c.data("month"),f.update_picker(a.date),d.cur_url=a.filter_cats?b("#tribe-events-header").data("baseurl"):c.attr("href"),a.popping=!1,f.pre_ajax(function(){l()}))}).on("click","td.tribe-events-thismonth",function(a){a.preventDefault();a=b(this).find('[id^="tribe-events-daynum"] a').attr("href");"undefined"!==typeof a&&(n.location=a)}).on("click","td.tribe-events-thismonth a",function(a){a.stopPropagation()});f.snap("#tribe-bar-form","body","#tribe-events-footer .tribe-events-nav-previous a, #tribe-events-footer .tribe-events-nav-next a");
8
- b("form#tribe-bar-form").on("submit",function(a){s(a)});b(g).on("tribe_ev_runAjax",function(){l()});b(g).on("tribe_ev_updatingRecurrence",function(){a.date=b("#tribe-events-header").data("date");d.cur_url=a.filter_cats?b("#tribe-events-header").data("baseurl")+a.date+"/":p+a.date+"/";a.popping=!1});k&&debug.info("TEC Debug: tribe-events-ajax-calendar.js successfully loaded, Tribe Events Init finished");k&&debug.timeEnd("Tribe JS Init Timer")})})(window,document,jQuery,tribe_ev.data,tribe_ev.events,
9
- tribe_ev.fn,tribe_ev.state,tribe_ev.tests,tribe_debug);
1
+ (function(n,q,b,e,g,f,a,h,k){b(q).ready(function(){function s(c){"change_view"!=tribe_events_bar_action&&(c.preventDefault(),a.ajax_running||(m.val().length?a.date=m.val():r||(a.date=e.cur_date.slice(0,-3)),e.cur_url=a.filter_cats?b("#tribe-events-header").data("baseurl")+a.date+"/":p+a.date+"/",a.popping=!1,f.pre_ajax(function(){l()})))}function l(){b(".tribe-events-calendar").tribe_spin();a.pushcount=0;a.ajax_running=!0;a.popping||(a.params={action:"tribe_calendar",eventDate:a.date},a.category&&
2
  (a.params.tribe_event_category=a.category),a.url_params={},b(g).trigger("tribe_ev_serializeBar"),a.params=b.param(a.params),a.url_params=b.param(a.url_params),b(g).trigger("tribe_ev_collectParams"),0<a.pushcount||a.filters?(a.do_string=!0,a.pushstate=!1):(a.do_string=!1,a.pushstate=!0));h.pushstate&&!a.filter_cats?(k&&debug.time("Month View Ajax Timer"),b(g).trigger("tribe_ev_ajaxStart").trigger("tribe_ev_monthView_AjaxStart"),b.post(TribeCalendar.ajaxurl,a.params,function(c){a.initial_load=!1;f.enable_inputs("#tribe_events_filters_form",
3
+ "input, select");if(c.success){a.ajax_running=!1;e.ajax_response={total_count:"",view:c.view,max_pages:"",tribe_paged:"",timestamp:(new Date).getTime()};k&&0===c.html&&debug.warn("Month view ajax had an error in the query and returned 0.");var d="",d=b.isFunction(b.fn.parseHTML)?b.parseHTML(c.html):c.html;b("#tribe-events-content").replaceWith(d);a.page_title=b("#tribe-events-header").data("title");q.title=a.page_title;a.do_string&&(e.cur_url=e.cur_url+"?"+a.url_params,history.pushState({tribe_date:a.date,
4
+ tribe_params:a.params},a.page_title,e.cur_url));a.pushstate&&history.pushState({tribe_date:a.date,tribe_params:a.params},a.page_title,e.cur_url);b(g).trigger("tribe_ev_ajaxSuccess").trigger("tribe_ev_monthView_ajaxSuccess");k&&debug.timeEnd("Month View Ajax Timer")}})):n.location=a.do_string?e.cur_url+"?"+a.url_params:e.cur_url}var p=b("#tribe-events-header .tribe-events-nav-next a").attr("href").slice(0,-8),d=f.get_url_param("tribe-bar-date"),m=b("#tribe-bar-date"),r=!1;b(".tribe-events-calendar").length&&
5
+ b("#tribe-events-bar").length&&(d&&7<d.length)&&(b("#tribe-bar-date-day").val(d.slice(-3)),m.val(d.substring(0,7)));var t=m.bootstrapDatepicker({format:"yyyy-mm",showAnim:"fadeIn",viewMode:"months"}).on("changeDate",function(c){var d=c.date.getFullYear(),g=("0"+(c.date.getMonth()+1)).slice(-2);t.hide();r=!0;f.update_picker(c.date);a.date=d+"-"+g;if((h.no_bar()||h.live_ajax()&&h.pushstate)&&!a.ajax_running)e.cur_url=a.filter_cats?b("#tribe-events-header").data("baseurl")+a.date+"/":p+a.date+"/",a.popping=
6
+ !1,f.pre_ajax(function(){l()})}).data("datepicker");h.pushstate&&!h.map_view()&&(d="action=tribe_calendar&eventDate="+b("#tribe-events-header").data("date"),e.params.length&&(d=d+"&"+e.params),a.category&&(d=d+"&tribe_event_category="+a.category),history.replaceState({tribe_params:d},a.page_title,location.href),b(n).on("popstate",function(b){if(b=b.originalEvent.state)a.do_string=!1,a.pushstate=!1,a.popping=!0,a.params=b.tribe_params,f.pre_ajax(function(){l()}),f.set_form(a.params)}));b("#tribe-events").on("click",
7
+ ".tribe-events-sub-nav a",function(c){c.preventDefault();a.ajax_running||(c=b(this),a.date=c.data("month"),f.update_picker(a.date),e.cur_url=a.filter_cats?b("#tribe-events-header").data("baseurl"):c.attr("href"),a.popping=!1,f.pre_ajax(function(){l()}))}).on("click","td.tribe-events-thismonth",function(a){a.preventDefault();a=b(this).find('[id^="tribe-events-daynum"] a').attr("href");"undefined"!==typeof a&&(n.location=a)}).on("click","td.tribe-events-thismonth a",function(a){a.stopPropagation()});
8
+ f.snap("#tribe-bar-form","body","#tribe-events-footer .tribe-events-nav-previous a, #tribe-events-footer .tribe-events-nav-next a");b("form#tribe-bar-form").on("submit",function(a){s(a)});b(g).on("tribe_ev_runAjax",function(){l()});b(g).on("tribe_ev_updatingRecurrence",function(){a.date=b("#tribe-events-header").data("date");e.cur_url=a.filter_cats?b("#tribe-events-header").data("baseurl")+a.date+"/":p+a.date+"/";a.popping=!1});k&&debug.info("TEC Debug: tribe-events-ajax-calendar.js successfully loaded, Tribe Events Init finished");
9
+ k&&debug.timeEnd("Tribe JS Init Timer")})})(window,document,jQuery,tribe_ev.data,tribe_ev.events,tribe_ev.fn,tribe_ev.state,tribe_ev.tests,tribe_debug);
resources/tribe-events-ajax-list.js CHANGED
@@ -31,6 +31,9 @@
31
  if (td.params.length)
32
  params = params + '&' + td.params;
33
 
 
 
 
34
  history.replaceState({
35
  "tribe_params": params,
36
  "tribe_url_params": td.params
31
  if (td.params.length)
32
  params = params + '&' + td.params;
33
 
34
+ if (ts.category)
35
+ params = params + '&tribe_event_category=' + ts.category;
36
+
37
  history.replaceState({
38
  "tribe_params": params,
39
  "tribe_url_params": td.params
resources/tribe-events-ajax-list.min.js CHANGED
@@ -1,8 +1,8 @@
1
- (function(n,m,b,d,h,e,a,f,l){b(m).ready(function(){function p(b){"change_view"!=tribe_events_bar_action&&(b.preventDefault(),a.ajax_running||(a.paged=1,a.view="list",a.popping=!1,e.pre_ajax(function(){k()})))}function k(){b("#tribe-events-content .tribe-events-loop").tribe_spin();a.ajax_running=!0;if(!a.popping){a.filter_cats&&(d.cur_url=b("#tribe-events-header").data("baseurl"));var c=b("#tribe-events-list-hash").val();a.params={action:"tribe_list",tribe_paged:a.paged,tribe_event_display:a.view};
2
- a.url_params={action:"tribe_list",tribe_paged:a.paged};c.length&&(a.params.hash=c);a.category&&(a.params.tribe_event_category=a.category);b(h).trigger("tribe_ev_serializeBar");a.params=b.param(a.params);a.url_params=b.param(a.url_params);b(h).trigger("tribe_ev_collectParams");a.pushstate=!1;a.do_string=!0}f.pushstate&&!a.filter_cats?(l&&debug.time("List View Ajax Timer"),b(h).trigger("tribe_ev_ajaxStart").trigger("tribe_ev_listView_AjaxStart"),b.post(TribeList.ajaxurl,a.params,function(c){a.initial_load=
3
- !1;e.enable_inputs("#tribe_events_filters_form","input, select");if(c.success){a.ajax_running=!1;d.ajax_response={total_count:parseInt(c.total_count),view:c.view,max_pages:c.max_pages,tribe_paged:c.tribe_paged,timestamp:(new Date).getTime()};b("#tribe-events-list-hash").val(c.hash);var f="",f=b.isFunction(b.fn.parseHTML)?b.parseHTML(c.html):c.html;b("#tribe-events-content").replaceWith(f);0===c.total_count&&b("#tribe-events-header .tribe-events-sub-nav").empty();a.page_title=b("#tribe-events-header").data("title");
4
- m.title=a.page_title;a.do_string&&history.pushState({tribe_params:a.params,tribe_url_params:a.url_params},a.page_title,d.cur_url+"?"+a.url_params);a.pushstate&&history.pushState({tribe_params:a.params,tribe_url_params:a.url_params},a.page_title,d.cur_url);b(h).trigger("tribe_ev_ajaxSuccess").trigger("tribe_ev_listView_AjaxSuccess");l&&debug.timeEnd("List View Ajax Timer")}})):n.location=a.do_string?d.cur_url+"?"+a.url_params:d.cur_url}var g=e.get_url_param("tribe_paged");g&&(a.paged=g);f.pushstate&&
5
- !f.map_view()&&(g="action=tribe_list&tribe_paged="+a.paged,d.params.length&&(g=g+"&"+d.params),history.replaceState({tribe_params:g,tribe_url_params:d.params},m.title,location.href),b(n).on("popstate",function(b){if(b=b.originalEvent.state)a.do_string=!1,a.pushstate=!1,a.popping=!0,a.params=b.tribe_params,a.url_params=b.tribe_url_params,e.pre_ajax(function(){k()}),e.set_form(a.params)}));b("#tribe-events-content-wrapper").on("click","li.tribe-events-nav-next a",function(c){c.preventDefault();a.ajax_running||
6
- (b(this).parent().is(".tribe-events-past")?a.view="past":a.view="list",d.cur_url=e.url_path(b(this).attr("href")),a.paged++,a.popping=!1,e.pre_ajax(function(){k()}))}).on("click","li.tribe-events-nav-previous a",function(c){c.preventDefault();a.ajax_running||(b(this).parent().is(".tribe-events-past")?a.view="past":a.view="list",d.cur_url=e.url_path(b(this).attr("href")),1<a.paged&&a.paged--,a.popping=!1,e.pre_ajax(function(){k()}))});e.snap("#tribe-events-content-wrapper","#tribe-events-content-wrapper",
7
- "#tribe-events-footer .tribe-events-nav-previous a, #tribe-events-footer .tribe-events-nav-next a");if(f.no_bar()||f.live_ajax()&&f.pushstate)b("#tribe-events-bar").on("changeDate","#tribe-bar-date",function(b){f.reset_on()||(a.popping=!1,p(b))});b("form#tribe-bar-form").on("submit",function(b){a.popping=!1;p(b)});b(h).on("tribe_ev_runAjax",function(){k()});l&&debug.info("TEC Debug: tribe-events-ajax-list.js successfully loaded");a.view&&l&&debug.timeEnd("Tribe JS Init Timer")})})(window,document,
8
- jQuery,tribe_ev.data,tribe_ev.events,tribe_ev.fn,tribe_ev.state,tribe_ev.tests,tribe_debug);
1
+ (function(n,m,b,d,h,f,a,g,l){b(m).ready(function(){function p(b){"change_view"!=tribe_events_bar_action&&(b.preventDefault(),a.ajax_running||(a.paged=1,a.view="list",a.popping=!1,f.pre_ajax(function(){k()})))}function k(){b("#tribe-events-content .tribe-events-loop").tribe_spin();a.ajax_running=!0;if(!a.popping){a.filter_cats&&(d.cur_url=b("#tribe-events-header").data("baseurl"));var c=b("#tribe-events-list-hash").val();a.params={action:"tribe_list",tribe_paged:a.paged,tribe_event_display:a.view};
2
+ a.url_params={action:"tribe_list",tribe_paged:a.paged};c.length&&(a.params.hash=c);a.category&&(a.params.tribe_event_category=a.category);b(h).trigger("tribe_ev_serializeBar");a.params=b.param(a.params);a.url_params=b.param(a.url_params);b(h).trigger("tribe_ev_collectParams");a.pushstate=!1;a.do_string=!0}g.pushstate&&!a.filter_cats?(l&&debug.time("List View Ajax Timer"),b(h).trigger("tribe_ev_ajaxStart").trigger("tribe_ev_listView_AjaxStart"),b.post(TribeList.ajaxurl,a.params,function(c){a.initial_load=
3
+ !1;f.enable_inputs("#tribe_events_filters_form","input, select");if(c.success){a.ajax_running=!1;d.ajax_response={total_count:parseInt(c.total_count),view:c.view,max_pages:c.max_pages,tribe_paged:c.tribe_paged,timestamp:(new Date).getTime()};b("#tribe-events-list-hash").val(c.hash);var e="",e=b.isFunction(b.fn.parseHTML)?b.parseHTML(c.html):c.html;b("#tribe-events-content").replaceWith(e);0===c.total_count&&b("#tribe-events-header .tribe-events-sub-nav").empty();a.page_title=b("#tribe-events-header").data("title");
4
+ m.title=a.page_title;a.do_string&&history.pushState({tribe_params:a.params,tribe_url_params:a.url_params},a.page_title,d.cur_url+"?"+a.url_params);a.pushstate&&history.pushState({tribe_params:a.params,tribe_url_params:a.url_params},a.page_title,d.cur_url);b(h).trigger("tribe_ev_ajaxSuccess").trigger("tribe_ev_listView_AjaxSuccess");l&&debug.timeEnd("List View Ajax Timer")}})):n.location=a.do_string?d.cur_url+"?"+a.url_params:d.cur_url}var e=f.get_url_param("tribe_paged");e&&(a.paged=e);g.pushstate&&
5
+ !g.map_view()&&(e="action=tribe_list&tribe_paged="+a.paged,d.params.length&&(e=e+"&"+d.params),a.category&&(e=e+"&tribe_event_category="+a.category),history.replaceState({tribe_params:e,tribe_url_params:d.params},m.title,location.href),b(n).on("popstate",function(b){if(b=b.originalEvent.state)a.do_string=!1,a.pushstate=!1,a.popping=!0,a.params=b.tribe_params,a.url_params=b.tribe_url_params,f.pre_ajax(function(){k()}),f.set_form(a.params)}));b("#tribe-events-content-wrapper").on("click","li.tribe-events-nav-next a",
6
+ function(c){c.preventDefault();a.ajax_running||(b(this).parent().is(".tribe-events-past")?a.view="past":a.view="list",d.cur_url=f.url_path(b(this).attr("href")),a.paged++,a.popping=!1,f.pre_ajax(function(){k()}))}).on("click","li.tribe-events-nav-previous a",function(c){c.preventDefault();a.ajax_running||(b(this).parent().is(".tribe-events-past")?a.view="past":a.view="list",d.cur_url=f.url_path(b(this).attr("href")),1<a.paged&&a.paged--,a.popping=!1,f.pre_ajax(function(){k()}))});f.snap("#tribe-events-content-wrapper",
7
+ "#tribe-events-content-wrapper","#tribe-events-footer .tribe-events-nav-previous a, #tribe-events-footer .tribe-events-nav-next a");if(g.no_bar()||g.live_ajax()&&g.pushstate)b("#tribe-events-bar").on("changeDate","#tribe-bar-date",function(b){g.reset_on()||(a.popping=!1,p(b))});b("form#tribe-bar-form").on("submit",function(b){a.popping=!1;p(b)});b(h).on("tribe_ev_runAjax",function(){k()});l&&debug.info("TEC Debug: tribe-events-ajax-list.js successfully loaded");a.view&&l&&debug.timeEnd("Tribe JS Init Timer")})})(window,
8
+ document,jQuery,tribe_ev.data,tribe_ev.events,tribe_ev.fn,tribe_ev.state,tribe_ev.tests,tribe_debug);
resources/tribe-events-bar.js CHANGED
@@ -115,15 +115,16 @@ var tribe_events_bar_action;
115
  // Create list from select options
116
  $tribebarselect.find('option').each(function(i){
117
  var $view = $(this);
 
118
  // build list items and append them
119
  var unique_c = 'tribe-bar-views-option-' + $view.data('view');
120
  $('<li></li>', {
121
  'class': 'tribe-bar-views-option ' + unique_c,
122
  'data-tribe-bar-order': i,
123
- 'data-view': $view.data('view')
124
  }).html([
125
  ' <a href="#">',
126
- ' <span class="tribe-icon-' + $.trim($view.text().toLowerCase()) + '">' + $view.text() + '</span>',
127
  '</a>'].join("")
128
  ).appendTo( '.tribe-bar-views-list' );
129
 
115
  // Create list from select options
116
  $tribebarselect.find('option').each(function(i){
117
  var $view = $(this);
118
+ displaying = $view.data('view');
119
  // build list items and append them
120
  var unique_c = 'tribe-bar-views-option-' + $view.data('view');
121
  $('<li></li>', {
122
  'class': 'tribe-bar-views-option ' + unique_c,
123
  'data-tribe-bar-order': i,
124
+ 'data-view': displaying
125
  }).html([
126
  ' <a href="#">',
127
+ ' <span class="tribe-icon-' + displaying + '">' + $view.text() + '</span>',
128
  '</a>'].join("")
129
  ).appendTo( '.tribe-bar-views-list' );
130
 
resources/tribe-events-bar.min.js CHANGED
@@ -3,8 +3,8 @@ var tribe_events_bar_action;
3
  670>b?a.removeClass("tribe-bar-mini").addClass("tribe-bar-collapse"):a.removeClass("tribe-bar-collapse")}}function u(){tribe_events_bar_action="change_view";if("month"===c.view&&d.length){var a=d.val();7===a.length&&d.val(a+t.get_day())}c.url_params={};b(h).trigger("tribe_ev_preCollectBarParams");b("#tribe-bar-form input").each(function(){var a=b(this);a.val().length&&!a.hasClass("tribe-no-param")&&(a.is(":checkbox")?a.is(":checked")&&(c.url_params[a.attr("name")]=a.val()):c.url_params[a.attr("name")]=
4
  a.val())});c.url_params=b.param(c.url_params);b(h).trigger("tribe_ev_postCollectBarParams");c.url_params.length&&(c.cur_url+=k.starting_delim()+c.url_params);s.location.href=c.cur_url}var e=b("#tribe-bar-form"),d=b("#tribe-bar-date"),f=b("select[name=tribe-bar-view]");p(e);e.resize(function(){p(e)});if(!b(".tribe-events-week-grid").length&&(!b(".events-gridview").length||k.map_view())){m&&debug.info('TEC Debug: bootstrapDatepicker was just initialized in "tribe-events-bar.js" on:',d);var v=d.bootstrapDatepicker({format:"yyyy-mm-dd",
5
  showAnim:"fadeIn"}).on("changeDate",function(){v.hide()}).data("datepicker")}d.blur(function(){""===d.val()&&(b(".datepicker.dropdown-menu").is(":hidden")&&k.live_ajax()&&k.pushstate)&&(c.date=g.cur_date,g.cur_url=g.base_url,b(h).trigger("tribe_ev_runAjax"))});b(".tribe-bar-settings").length&&b("#tribe-events-bar").addClass("tribe-has-settings");b("#tribe-events-bar .hasDatepicker").length&&b("#tribe-events-bar").addClass("tribe-has-datepicker");b('input[name*="tribe-bar-"]').placeholder();b('<ul class="tribe-bar-views-list" />').insertAfter(f);
6
- var q=b(".tribe-bar-views-list");f.find("option").each(function(a){var c=b(this),d="tribe-bar-views-option-"+c.data("view");b("<li></li>",{"class":"tribe-bar-views-option "+d,"data-tribe-bar-order":a,"data-view":c.data("view")}).html([' <a href="#">',' <span class="tribe-icon-'+b.trim(c.text().toLowerCase())+'">'+c.text()+"</span>","</a>"].join("")).appendTo(".tribe-bar-views-list")});f=f.find(":selected").data("view");q.find("li[data-view="+f+"]").prependTo(q).addClass("tribe-bar-active");e.on("click",
7
- "#tribe-bar-views",function(a){a.stopPropagation();b(this).toggleClass("tribe-bar-views-open")});e.on("click",".tribe-bar-views-option",function(a){a.preventDefault();a=b(this);a.is(".tribe-bar-active")||(a=a.data("view"),c.cur_url=b("option[data-view="+a+"]").val(),c.view_target=b('select[name=tribe-bar-view] option[value="'+c.cur_url+'"]').data("view"),tribe_events_bar_action="change_view",u())});e.on("click","#tribe-bar-collapse-toggle",function(){b(this).toggleClass("tribe-bar-filters-open");
8
  b(".tribe-bar-filters").slideToggle("fast")});b('label[for="tribe-bar-date"], input[name="tribe-bar-date"]').wrapAll('<div id="tribe-bar-dates" />');b("#tribe-bar-filters").before(b("#tribe-bar-dates"));b(h).on("tribe_ev_serializeBar",function(){b("form#tribe-bar-form input, #tribeHideRecurrence").each(function(){var a=b(this);a.is("#tribe-bar-date")&&(a.val().length?(c.params[a.attr("name")]=a.val(),c.url_params[a.attr("name")]=a.val()):a.is(".placeholder")&&a.is(".bd-updated")?c.url_params[a.attr("name")]=
9
  a.attr("data-oldDate"):c.date=g.cur_date);a.val().length&&(!a.hasClass("tribe-no-param")&&!a.is("#tribe-bar-date"))&&(a.is(":checkbox")?a.is(":checked")&&(c.params[a.attr("name")]=a.val(),"map"!==c.view&&(c.url_params[a.attr("name")]=a.val()),("month"===c.view||"day"===c.view||"week"===c.view||c.recurrence)&&c.pushcount++):(c.params[a.attr("name")]=a.val(),"map"!==c.view&&(c.url_params[a.attr("name")]=a.val()),("month"===c.view||"day"===c.view||"week"===c.view)&&c.pushcount++))})});var l=b('#tribe-events-bar [class^="tribe-bar-button-"]'),
10
  r=l.next(".tribe-bar-drop-content");l.click(function(){var a=b(this);a.toggleClass("open");a.next(".tribe-bar-drop-content").toggle();return!1});b(n).click(function(){b("#tribe-bar-views").removeClass("tribe-bar-views-open");l.hasClass("open")&&(l.removeClass("open"),r.hide())});r.click(function(a){a.stopPropagation()});m&&debug.info("TEC Debug: tribe-events-bar.js successfully loaded")})})(window,document,jQuery,tribe_ev.data,tribe_ev.events,tribe_ev.fn,tribe_ev.state,tribe_ev.tests,tribe_debug);
3
  670>b?a.removeClass("tribe-bar-mini").addClass("tribe-bar-collapse"):a.removeClass("tribe-bar-collapse")}}function u(){tribe_events_bar_action="change_view";if("month"===c.view&&d.length){var a=d.val();7===a.length&&d.val(a+t.get_day())}c.url_params={};b(h).trigger("tribe_ev_preCollectBarParams");b("#tribe-bar-form input").each(function(){var a=b(this);a.val().length&&!a.hasClass("tribe-no-param")&&(a.is(":checkbox")?a.is(":checked")&&(c.url_params[a.attr("name")]=a.val()):c.url_params[a.attr("name")]=
4
  a.val())});c.url_params=b.param(c.url_params);b(h).trigger("tribe_ev_postCollectBarParams");c.url_params.length&&(c.cur_url+=k.starting_delim()+c.url_params);s.location.href=c.cur_url}var e=b("#tribe-bar-form"),d=b("#tribe-bar-date"),f=b("select[name=tribe-bar-view]");p(e);e.resize(function(){p(e)});if(!b(".tribe-events-week-grid").length&&(!b(".events-gridview").length||k.map_view())){m&&debug.info('TEC Debug: bootstrapDatepicker was just initialized in "tribe-events-bar.js" on:',d);var v=d.bootstrapDatepicker({format:"yyyy-mm-dd",
5
  showAnim:"fadeIn"}).on("changeDate",function(){v.hide()}).data("datepicker")}d.blur(function(){""===d.val()&&(b(".datepicker.dropdown-menu").is(":hidden")&&k.live_ajax()&&k.pushstate)&&(c.date=g.cur_date,g.cur_url=g.base_url,b(h).trigger("tribe_ev_runAjax"))});b(".tribe-bar-settings").length&&b("#tribe-events-bar").addClass("tribe-has-settings");b("#tribe-events-bar .hasDatepicker").length&&b("#tribe-events-bar").addClass("tribe-has-datepicker");b('input[name*="tribe-bar-"]').placeholder();b('<ul class="tribe-bar-views-list" />').insertAfter(f);
6
+ var q=b(".tribe-bar-views-list");f.find("option").each(function(a){var c=b(this);displaying=c.data("view");var d="tribe-bar-views-option-"+c.data("view");b("<li></li>",{"class":"tribe-bar-views-option "+d,"data-tribe-bar-order":a,"data-view":displaying}).html([' <a href="#">',' <span class="tribe-icon-'+displaying+'">'+c.text()+"</span>","</a>"].join("")).appendTo(".tribe-bar-views-list")});f=f.find(":selected").data("view");q.find("li[data-view="+f+"]").prependTo(q).addClass("tribe-bar-active");
7
+ e.on("click","#tribe-bar-views",function(a){a.stopPropagation();b(this).toggleClass("tribe-bar-views-open")});e.on("click",".tribe-bar-views-option",function(a){a.preventDefault();a=b(this);a.is(".tribe-bar-active")||(a=a.data("view"),c.cur_url=b("option[data-view="+a+"]").val(),c.view_target=b('select[name=tribe-bar-view] option[value="'+c.cur_url+'"]').data("view"),tribe_events_bar_action="change_view",u())});e.on("click","#tribe-bar-collapse-toggle",function(){b(this).toggleClass("tribe-bar-filters-open");
8
  b(".tribe-bar-filters").slideToggle("fast")});b('label[for="tribe-bar-date"], input[name="tribe-bar-date"]').wrapAll('<div id="tribe-bar-dates" />');b("#tribe-bar-filters").before(b("#tribe-bar-dates"));b(h).on("tribe_ev_serializeBar",function(){b("form#tribe-bar-form input, #tribeHideRecurrence").each(function(){var a=b(this);a.is("#tribe-bar-date")&&(a.val().length?(c.params[a.attr("name")]=a.val(),c.url_params[a.attr("name")]=a.val()):a.is(".placeholder")&&a.is(".bd-updated")?c.url_params[a.attr("name")]=
9
  a.attr("data-oldDate"):c.date=g.cur_date);a.val().length&&(!a.hasClass("tribe-no-param")&&!a.is("#tribe-bar-date"))&&(a.is(":checkbox")?a.is(":checked")&&(c.params[a.attr("name")]=a.val(),"map"!==c.view&&(c.url_params[a.attr("name")]=a.val()),("month"===c.view||"day"===c.view||"week"===c.view||c.recurrence)&&c.pushcount++):(c.params[a.attr("name")]=a.val(),"map"!==c.view&&(c.url_params[a.attr("name")]=a.val()),("month"===c.view||"day"===c.view||"week"===c.view)&&c.pushcount++))})});var l=b('#tribe-events-bar [class^="tribe-bar-button-"]'),
10
  r=l.next(".tribe-bar-drop-content");l.click(function(){var a=b(this);a.toggleClass("open");a.next(".tribe-bar-drop-content").toggle();return!1});b(n).click(function(){b("#tribe-bar-views").removeClass("tribe-bar-views-open");l.hasClass("open")&&(l.removeClass("open"),r.hide())});r.click(function(a){a.stopPropagation()});m&&debug.info("TEC Debug: tribe-events-bar.js successfully loaded")})})(window,document,jQuery,tribe_ev.data,tribe_ev.events,tribe_ev.fn,tribe_ev.state,tribe_ev.tests,tribe_debug);
resources/tribe-events-full.css CHANGED
@@ -153,7 +153,7 @@ ul.tribe-events-sub-nav a:hover,
153
  }
154
 
155
  /* Global Main Button Style */
156
- .tribe-events-button {
157
  background-color: #666;
158
  color: #fff;
159
  background-image: none;
@@ -180,6 +180,7 @@ ul.tribe-events-sub-nav a:hover,
180
 
181
  .tribe-events-button.tribe-inactive,
182
  .tribe-events-button:hover,
 
183
  .tribe-events-button.tribe-active:hover {
184
  background-color: #ddd;
185
  color:#444;
@@ -371,6 +372,7 @@ h2.tribe-events-page-title a:focus {
371
  #tribe-events-footer .tribe-events-sub-nav {
372
  list-style-type: none;
373
  margin: 0;
 
374
  overflow: hidden;
375
  line-height: normal;
376
  text-align: center;
@@ -859,7 +861,7 @@ select.tribe-events-dropdown {
859
 
860
  /* Event Meta */
861
  .single-tribe_events .tribe-events-event-meta {
862
- font-size: 12px;
863
  }
864
  .tribe-events-event-meta .tribe-events-meta-group,
865
  .tribe-events-event-meta .column {
@@ -901,7 +903,12 @@ select.tribe-events-dropdown {
901
  }
902
  /* Content */
903
  .single-tribe_events .tribe-events-content {
904
- width: auto;
 
 
 
 
 
905
  padding: 0;
906
  }
907
  @media only screen and (max-width: 767px) {
@@ -1154,7 +1161,8 @@ td.tickets_name {
1154
  font-size: 13px;
1155
  }
1156
 
1157
- .single-tribe_events #tribe-events-content form.cart {
 
1158
  background: #fafafa;
1159
  border: 1px solid #eee;
1160
  margin: 30px 0;
@@ -1164,14 +1172,34 @@ td.tickets_name {
1164
  table.tribe-events-tickets {
1165
  margin: 0;
1166
  width: 100%;
 
1167
  }
1168
 
1169
  table.tribe-events-tickets td {
1170
  border-top: 1px solid #ddd;
 
1171
  padding: 8px 10px 8px 0;
1172
  vertical-align: middle;
1173
  }
1174
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1175
  table.tribe-events-tickets .tickets_nostock {
1176
  display: inline-block;
1177
  text-align: center;
153
  }
154
 
155
  /* Global Main Button Style */
156
+ .tribe-events-button, .entry-content .tribe-events-button {
157
  background-color: #666;
158
  color: #fff;
159
  background-image: none;
180
 
181
  .tribe-events-button.tribe-inactive,
182
  .tribe-events-button:hover,
183
+ .entry-content .tribe-events-button:hover,
184
  .tribe-events-button.tribe-active:hover {
185
  background-color: #ddd;
186
  color:#444;
372
  #tribe-events-footer .tribe-events-sub-nav {
373
  list-style-type: none;
374
  margin: 0;
375
+ padding: 0;
376
  overflow: hidden;
377
  line-height: normal;
378
  text-align: center;
861
 
862
  /* Event Meta */
863
  .single-tribe_events .tribe-events-event-meta {
864
+ font-size: 13px;
865
  }
866
  .tribe-events-event-meta .tribe-events-meta-group,
867
  .tribe-events-event-meta .column {
903
  }
904
  /* Content */
905
  .single-tribe_events .tribe-events-content {
906
+ width: 100%;
907
+ max-width: 100%;
908
+ padding: 0;
909
+ }
910
+ /* Twenty Thirteen Conflict */
911
+ .sidebar.single-tribe_events .tribe-events-content {
912
  padding: 0;
913
  }
914
  @media only screen and (max-width: 767px) {
1161
  font-size: 13px;
1162
  }
1163
 
1164
+ .single-tribe_events #tribe-events-content form.cart,
1165
+ .single-tribe_events #tribe-events-content div.cart {
1166
  background: #fafafa;
1167
  border: 1px solid #eee;
1168
  margin: 30px 0;
1172
  table.tribe-events-tickets {
1173
  margin: 0;
1174
  width: 100%;
1175
+ border-bottom: 0;
1176
  }
1177
 
1178
  table.tribe-events-tickets td {
1179
  border-top: 1px solid #ddd;
1180
+ border-bottom: 1px solid #ddd;
1181
  padding: 8px 10px 8px 0;
1182
  vertical-align: middle;
1183
  }
1184
 
1185
+ table.tribe-events-tickets td.wpec {
1186
+ line-height: 0;
1187
+ }
1188
+
1189
+ table.tribe-events-tickets td.woocommerce {
1190
+ border-bottom: 0;
1191
+ }
1192
+
1193
+ table.tribe-events-tickets td.wpec img {
1194
+ display: none;
1195
+ }
1196
+
1197
+ table.tribe-events-tickets td fieldset {
1198
+ padding: 14px 0.625em 4px;
1199
+ border: 0;
1200
+ margin-top: 8px;
1201
+ }
1202
+
1203
  table.tribe-events-tickets .tickets_nostock {
1204
  display: inline-block;
1205
  text-align: center;
resources/tribe-events-full.min.css CHANGED
@@ -1 +1 @@
1
- #tribe-events-pg-template{max-width:1000px;margin:0 auto}.tribe-events-after-html{clear:both}#tribe-events-pg-template .tribe-events-content p,.tribe-events-before-html p,.tribe-events-after-html p{margin:0 0 10px;line-height:1.7}#tribe-events-pg-template .tribe-events-content h1,.tribe-events-before-html h1,.tribe-events-after-html h1,#tribe-events-pg-template .tribe-events-content h2,.tribe-events-before-html h2,.tribe-events-after-html h2,#tribe-events-pg-template .tribe-events-content h3,.tribe-events-before-html h3,.tribe-events-after-html h3,#tribe-events-pg-template .tribe-events-content h4,.tribe-events-before-html h4,.tribe-events-after-html h4,#tribe-events-pg-template .tribe-events-content h5,.tribe-events-before-html h5,.tribe-events-after-html h5,#tribe-events-pg-template .tribe-events-content h6,.tribe-events-before-html h6,.tribe-events-after-html h6{margin:24px 0;margin:20px 0;line-height:1.7}.tribe-events-before-html h1,.tribe-events-after-html h1,#tribe-events-pg-template .tribe-events-content h1{font-size:21px;line-height:1.5}.tribe-events-before-html h2,.tribe-events-after-html h2,#tribe-events-pg-template .tribe-events-content h2{font-size:18px;line-height:1.6}.tribe-events-before-html h3,.tribe-events-after-html h3,#tribe-events-pg-template .tribe-events-content h3{font-size:16px;line-height:1.8}.tribe-events-before-html h4,.tribe-events-after-html h4,#tribe-events-pg-template .tribe-events-content h4{font-size:14px;line-height:1.8}.tribe-events-before-html h5,.tribe-events-after-html h5,#tribe-events-pg-template .tribe-events-content h5{font-size:13px;line-height:1.8}.tribe-events-before-html h6,.tribe-events-after-html h6,#tribe-events-pg-template .tribe-events-content h6{font-size:12px;line-height:1.8}.tribe-events-before-html ul,.tribe-events-after-html ul,#tribe-events-pg-template .tribe-events-content ul{list-style:disc outside}.tribe-events-before-html ol,.tribe-events-after-html ol,#tribe-events-pg-template .tribe-events-content ol{list-style:decimal outside}.tribe-events-before-html ul li,.tribe-events-after-html ul li,.tribe-events-before-html ol li,.tribe-events-after-html ol li,#tribe-events-pg-template .tribe-events-content ul li,#tribe-events-pg-template .tribe-events-content ol li{margin:0 0 20px;line-height:1.7}.tribe-events-back{margin:0 0 20px 0}#tribe-events-content a,.tribe-events-event-meta a{text-decoration:none}.tribe-events-read-more{display:block}ul.tribe-events-sub-nav a,.tribe-events-back a,.tribe-events-list-widget .tribe-events-widget-link a,.tribe-events-adv-list-widget .tribe-events-widget-link a{text-decoration:none}ul.tribe-events-sub-nav a:hover,.tribe-events-back a:hover,.tribe-events-list-widget .tribe-events-widget-link a:hover,.tribe-events-adv-list-widget .tribe-events-widget-link a:hover{text-decoration:none}.tribe-events-day.page .hentry,.tribe-events-week.page .hentry{margin:0;padding:0 0 15px 0}.tribe-events-button{background-color:#666;color:#fff;background-image:none;font-size:11px;font-weight:bold;padding:6px 9px;text-align:center;text-transform:uppercase;letter-spacing:1px;-webkit-border-radius:3px;border-radius:3px;border:0;line-height:normal;cursor:pointer;-webkit-box-shadow:none;box-shadow:none;text-decoration:none}.tribe-events-button.tribe-active{background-color:#666;color:#fff}.tribe-events-button.tribe-inactive,.tribe-events-button:hover,.tribe-events-button.tribe-active:hover{background-color:#ddd;color:#444;text-decoration:none}a.tribe-events-ical,a.tribe-events-gcal{font-size:10px;font-weight:normal;padding:0 6px;float:right;text-decoration:none;line-height:18px;margin-top:21px;color:#fff;clear:both}.tribe-events-gcal{margin-right:9px}.single-tribe_events a.tribe-events-ical,.single-tribe_events a.tribe-events-gcal{float:none}.tribe-events-event-meta .tribe-events-gmap,.tribe-events-event-meta-desc .tribe-events-gmap{white-space:nowrap}.event .entry-title{color:inherit;font-size:inherit;font-weight:inherit;line-height:inherit;padding:inherit}.updated-info{text-indent:-9999px;height:0}.tribe-events-event-image{margin:0 0 20px 0;text-align:center}.tribe-events-event-image img{max-width:100%;height:auto}.tribe-events-schedule h2{font-style:normal;font-weight:bold}.tribe-events-event-schedule-details{display:inline}.tribe-events-divider{padding:0 10px;font-weight:bold}.events-archive .entry-content,.events-archive .entry-header{width:98%}.events-archive span.edit-link{display:none}.tribe-events-notices{background:#d9edf7;border:1px solid #bce8f1;color:#3a87ad;margin:10px 0 18px;padding:8px 35px 8px 14px;text-shadow:0 1px 0 #fff;-webkit-border-radius:4px;border-radius:4px}div.tribe-events-notices>ul,div.tribe-events-notices>ul>li{margin:0;padding:0;list-style:none}#tribe-events-content p.tribe-events-promo{font-size:12px;color:#999}#tribe-events-content p.tribe-events-promo a{color:#666}.clearfix:before,.tribe-clearfix:before,.clearfix:after,.tribe-clearfix:after{content:"";display:table}.clearfix:after,.tribe-clearfix:after{clear:both}.clearfix,.tribe-clearfix{zoom:1}.tribe-clear{clear:both}.tribe-events-visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.tribe-hide-text{text-indent:100%;white-space:nowrap;overflow:hidden}.tribe-events-error{display:none}.tribe-events-multi-event-day{color:#0f81bb}#tribe-events-content .tribe-events-abbr{border-bottom:0;cursor:default}.tribe-events-spinner{width:32px;height:32px;margin-left:-16px}.tribe-events-spinner-medium{width:24px;height:24px}.tribe-events-spinner-small{width:16px;height:16px;margin-left:-8px}*+html .events-archive h2.tribe-events-page-title{padding-bottom:30px}*+html .events-archive .tribe-events-list h2.tribe-events-page-title{padding-bottom:0}*+html #tribe-events-header{margin-bottom:30px}h2.tribe-events-page-title{font-size:24px;font-weight:normal;position:relative;z-index:0;margin-bottom:.5em;text-align:center;clear:none}.tribe-events-filter-view .tribe-events-list h2.tribe-events-page-title{width:100%;float:none}h2.tribe-events-page-title a{color:#000}h2.tribe-events-page-title a:hover,h2.tribe-events-page-title a:focus{color:#333;text-decoration:underline}#tribe-events-header,#tribe-events-footer{margin-bottom:.5em;clear:both}#tribe-events-header .tribe-events-sub-nav,#tribe-events-footer .tribe-events-sub-nav{list-style-type:none;margin:0;overflow:hidden;line-height:normal;text-align:center}#tribe-events-header .tribe-events-sub-nav li,#tribe-events-footer .tribe-events-sub-nav li{display:inline-block;zoom:1;*display:inline;margin:0;vertical-align:middle}#tribe-events-header .tribe-events-sub-nav li,#tribe-events-footer .tribe-events-sub-nav .tribe-events-nav-previous{float:left;margin-right:5px;text-align:left;white-space:nowrap}#tribe-events-header .tribe-events-sub-nav .tribe-events-nav-next,#tribe-events-footer .tribe-events-sub-nav .tribe-events-nav-next{float:right;margin-left:5px;text-align:right;white-space:nowrap}#tribe-events-header .tribe-events-sub-nav .tribe-events-nav-left,#tribe-events-footer .tribe-events-sub-nav .tribe-events-nav-left{float:left;text-align:left;white-space:nowrap}#tribe-events-header .tribe-events-sub-nav .tribe-events-nav-right,#tribe-events-footer .tribe-events-sub-nav .tribe-events-nav-right{float:right;text-align:right;white-space:nowrap}.tribe-events-ajax-loading{display:none;position:absolute;left:50%;margin-left:-27px;top:150px;padding:15px;background:#666;z-index:10;border-radius:5px;-webkit-box-shadow:none !important;box-shadow:none !important;-moz-box-shadow:none !important}.tribe-events-loading .tribe-events-ajax-loading{display:block}.tribe-events-ajax-loading.tribe-events-active-spinner,.tribe-events-ajax-loading.tribe-events-active-spinner img{display:block}#tribe-events-header{position:relative}#tribe-events-footer{margin-bottom:1em}.events-list #tribe-events-footer,.tribe-events-day #tribe-events-footer,.tribe-events-map #tribe-events-footer{margin:1.25em 0 18px;clear:both}.tribe-events-map #tribe-events-header{margin:1em 0}.single-tribe_events #tribe-events-header{margin:1em 0 20px}.single-tribe_events #tribe-events-header li,.single-tribe_events #tribe-events-footer li{width:48%}#tribe-events-content .tribe-events-nav-date{padding-top:16px}select.tribe-events-dropdown{width:auto;font-size:11px;margin:33px 9px 0 0}#tribe-events-events-picker,#tribe-events-picker{display:inline}@media only screen and (max-width:767px){#tribe-events-header .tribe-events-sub-nav .tribe-events-nav-next,#tribe-events-header .tribe-events-sub-nav .tribe-events-nav-previous,#tribe-events-footer .tribe-events-sub-nav .tribe-events-nav-next,#tribe-events-footer .tribe-events-sub-nav .tribe-events-nav-previous{display:block;width:50%;margin:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.tribe-events-sub-nav li a{display:block;padding:10px 15px;background:#666;color:#fff;white-space:normal}.tribe-events-sub-nav .tribe-events-nav-previous,.tribe-events-sub-nav .tribe-events-nav-left{padding:0 1px}.tribe-events-sub-nav .tribe-events-nav-next,.tribe-events-sub-nav .tribe-events-nav-right{padding:0 0 0 1px}}#tribe-events-content{position:relative;margin-bottom:48px;padding:2px 0}#tribe-events-content.tribe-events-list{padding:0}.tribe-events-list h2.tribe-events-page-title{margin-bottom:15px}#tribe-events-content.tribe-events-list{margin-bottom:60px}.tribe-events-list .vevent.hentry{border-bottom:1px solid #ddd;padding:2.25em 0;margin:0}.tribe-events-list .vevent.hentry.tribe-events-first{padding-top:0}.tribe-events-list h2.tribe-events-list-event-title{margin:0;padding:0;font-size:1.4em;line-height:1.4em;text-transform:none;letter-spacing:0;display:block;border:0}.tribe-events-list h2.tribe-events-list-event-title{float:none;display:inline}.tribe-events-event-details .tribe-events-event-meta address.tribe-events-address{font-style:normal;font-family:inherit;font-size:inherit;line-height:inherit}.tribe-events-list .tribe-events-event-image{float:left;width:30%;margin:0 3% 0 0}.tribe-events-list .tribe-events-event-image img{width:100%;height:auto;margin:0;padding:0}.tribe-events-list .tribe-events-event-image+div.tribe-events-content{float:left;width:67%;position:relative}.tribe-events-loop .tribe-events-event-meta{float:none;clear:both;border:0;margin:5px 0 15px 0;line-height:1.5;font-size:14px;font-weight:bold;overflow:visible}.tribe-events-list .tribe-events-loop .tribe-events-event-meta .recurringinfo{display:inline-block;zoom:1;*display:inline}.tribe-events-event-meta address.tribe-events-address{display:inline;font-style:normal;font-family:inherit;font-size:inherit;line-height:inherit;margin-right:10px}.tribe-events-list .tribe-events-loop .tribe-events-event-meta .event-is-recurring{position:relative}.tribe-events-list .time-details,.tribe-events-list .tribe-events-venue-details{line-height:1.2;margin:0;display:block}.tribe-events-list .time-details{margin:0 0 8px 0}.tribe-events-list .tribe-events-event-cost{float:right;margin:0 0 5px 5px}.tribe-events-list .tribe-events-event-cost span{font-weight:bold;background:#eee;border:1px solid #ddd;display:block;padding:5px 10px;text-align:center;line-height:1.3;font-style:normal;text-overflow:ellipsis}.tribe-events-list .tribe-events-loop .tribe-events-content{width:100%;padding:0}.tribe-events-list .tribe-events-loop .tribe-events-content p{margin:0}.tribe-events-list-separator-year{display:block;text-align:center;font-size:38px;color:#ccc;padding:1em 2.25em 0;font-weight:bold}.tribe-events-list-separator-month{display:block;text-transform:uppercase;font-weight:bold;font-size:14px;margin:2.5em 0 0;background-color:#EEE;padding:6px 10px}.tribe-events-list-separator-month+.vevent.hentry.tribe-events-first{padding-top:2.25em}.tribe-events-list .vevent.hentry.tribe-event-end-month{border-bottom:0;padding-bottom:0}@media only screen and (max-width:767px){.tribe-events-list .tribe-events-event-image{float:none;width:100%;margin:0 0 20px 0}.tribe-events-list .tribe-events-event-image+div.tribe-events-content{float:none;width:100%}.tribe-events-list .tribe-events-loop .tribe-events-event-meta .recurringinfo{display:block;margin:8px 0 0}.tribe-events-list .tribe-events-loop .tribe-events-event-meta .recurringinfo .tribe-events-divider{display:none}}.tribe-events-loop{clear:both}.tribe-events-loop .vevent.tribe-events-last{border-bottom:0}.tribe-events-loop .tribe-events-content{width:60%;float:left;padding:0 5% 0 0}.events-archive .tribe-events-content p,.single-tribe_venue .tribe-events-loop .tribe-events-content p{margin:0}.events-archive h3 .published,.single-tribe_venue h3 .published{font-size:18px;margin-top:0;font-style:italic;text-transform:none}.tribe-events-event-meta-desc,.tribe-events-event-day{color:#333}.single-tribe_events h2.tribe-events-single-event-title{font-size:1.7em;line-height:1;margin:0;padding:0}#tribe-events-content .tribe-events-single-event-description img.attachment-post-thumbnail{margin-left:auto;margin-right:auto;display:block;text-align:center}.tribe-events-meta-group .tribe-events-single-section-title{margin:20px 0 10px;font-size:1.4em;font-weight:bold}.tribe-events-meta-group+.tribe-events-single-section-title{margin-top:0}.tribe-events-event-meta .tribe-events-meta-group address.tribe-events-address{margin:0;display:block}#eventbrite-embed{width:100%;min-height:225px;margin:24px 0}.eventbrite-ticket-embed{margin:0 0 30px 0}.tribe-events-schedule{margin:20px 0 0}.single-tribe_events .tribe-events-schedule .tribe-events-divider,.single-tribe_events .tribe-events-schedule .recurringinfo,.single-tribe_events .tribe-events-schedule .tribe-events-cost{font-size:1.2em}.single-tribe_events .tribe-events-schedule h3{font-size:1.2em;display:inline-block;zoom:1;*display:inline;margin:0;padding:0;vertical-align:middle;white-space:nowrap}.single-tribe_events .tribe-events-schedule .tribe-events-cost{vertical-align:middle}.single-tribe_events .tribe-events-cal-links{display:inline-block;zoom:1;*display:inline;margin:0 0 20px 0;vertical-align:middle}.single-tribe_events a.tribe-events-ical,.single-tribe_events a.tribe-events-gcal{margin-bottom:0}.single-tribe_events .tribe-events-event-image{clear:both;text-align:center;margin-bottom:30px}.single-tribe_events .tribe-events-event-meta{background:#fafafa;border:1px solid #eee;margin:30px 0}.single-tribe_events .tribe-events-venue-map{width:58%;margin:20px 4% 2% 0;padding:5px;float:right;background:#eee;border:1px solid #ddd;border-radius:3px;display:inline-block;zoom:1;*display:inline;vertical-align:top}.single-tribe_events #tribe-events-gmap{height:0 !important;padding-top:50%;width:100% !important;margin:0 !important}.single-tribe_events .tribe-events-meta-group .tribe-events-venue-map{float:none;margin:20px 0 0;width:100%}.single-tribe_events .tribe-events-meta-group #tribe-events-gmap{height:0 !important;padding-top:100%;width:100% !important;margin-top:50px}.single-tribe_events .tribe-events-event-meta{font-size:12px}.tribe-events-event-meta .tribe-events-meta-group,.tribe-events-event-meta .column{float:left;width:33.3333%;padding:0 4%;text-align:left;margin:0 0 20px 0;display:inline-block;zoom:1;*display:inline;vertical-align:top;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.single-tribe_events .tribe-events-event-meta dl{margin:0}.single-tribe_events #tribe-events-content .tribe-events-event-meta dt{clear:left;font-weight:bold;line-height:1;list-style:none}.single-tribe_events #tribe-events-content .tribe-events-event-meta dd{padding:0;margin:0 0 10px 0;line-height:1.5;list-style:none;float:none}#tribe-events-content .tribe-events-event-meta dd span.adr{display:block}.single-tribe_events .tribe-events-content{width:auto;padding:0}@media only screen and (max-width:767px){.single-tribe_events .tribe-events-schedule h3{display:block;margin-bottom:10px}.single-tribe_events .tribe-events-schedule .recurringinfo .tribe-events-divider{display:none}.tribe-events-event-meta .tribe-events-meta-group,.tribe-events-event-meta .column{float:none;width:100%}}#tribe-events-content table.tribe-events-calendar{margin:12px 0 .6em;clear:both;font-size:12px;border-collapse:collapse}#tribe-events-content table.tribe-events-calendar,#tribe-events-content .tribe-events-calendar td{border:1px solid #bbb}.tribe-events-calendar div[id*="tribe-events-daynum-"],.tribe-events-calendar div[id*="tribe-events-daynum-"] a{background-color:#f5f5f5;color:#333;font-size:11px;font-weight:bold}.tribe-events-calendar td.tribe-events-present div[id*="tribe-events-daynum-"],.tribe-events-calendar td.tribe-events-present div[id*="tribe-events-daynum-"]>a{background-color:#666;color:#fff}.tribe-events-calendar td.tribe-events-past div[id*="tribe-events-daynum-"],.tribe-events-calendar td.tribe-events-past div[id*="tribe-events-daynum-"]>a{color:#999}#tribe-events-content .tribe-events-calendar td{height:110px;width:14.28%;color:#114b7d;vertical-align:top;padding:0 0 .5em;font-size:12px}.vevent.viewmore{font-weight:bold}.tribe-events-calendar .tribe-events-tooltip,.tribe-events-week .tribe-events-tooltip,.recurring-info-tooltip{border:1px solid #666;position:absolute;z-index:1001;bottom:30px;left:3px;width:320px;background-color:#f9f9f9;color:#333;line-height:1.4;display:none}.tribe-events-tooltip .tribe-events-arrow{width:18px;height:11px;background-image:url(images/tribe-tooltips.png);background-repeat:no-repeat;background-position:0 0;-webkit-background-size:44px 19px;background-size:44px 19px;display:block;position:absolute;bottom:-11px;left:20px}.tribe-events-calendar .tribe-events-right .tribe-events-tooltip,.tribe-events-week .tribe-events-right .tribe-events-tooltip,.recurring-info-tooltip{left:auto;right:3px}.tribe-events-right .tribe-events-tooltip .tribe-events-arrow{left:auto;right:30px}.recurringinfo{display:inline-block;vertical-align:middle;zoom:1;*display:inline;position:relative}.event-is-recurring{position:relative;font-style:normal;font-weight:500;color:rgba(0,0,0,.7)}.event-is-recurring:hover{color:#000}.recurring-info-tooltip.tribe-events-tooltip{left:10px;width:200px;padding-bottom:.8em}.events-archive.events-gridview #tribe-events-content table .vevent{margin:0 5%;padding:6px 8px;border-bottom:1px solid #e7e7e7}.events-archive.events-gridview #tribe-events-content table .tribe-events-last{border-bottom:0}.tribe-events-viewmore{margin:0 5%;padding:9px 8px;font-weight:bold;line-height:1;border-top:1px solid #e7e7e7}.tribe-events-calendar td .tribe-events-viewmore a{font-size:100%}.tribe-events-calendar th{width:250px;height:10px;background-color:#ddd;color:#333;padding:4px 0;text-align:center;text-transform:uppercase;letter-spacing:1px}.tribe-events-calendar td div[id*="tribe-events-daynum-"]{padding:6px 9px;line-height:1.2}.tribe-events-calendar td a{font-size:91.7%}.tribe-events-calendar div[id*="tribe-events-event-"],.tribe-events-calendar div[id*="tribe-events-daynum-"]{position:relative;margin:0}#tribe-events-content .tribe-events-calendar div[id*="tribe-events-event-"] h3.tribe-events-month-event-title{line-height:1.25;font-size:13px;font-weight:normal;font-family:sans-serif;font-weight:bold;text-transform:none;margin:0;padding:0;letter-spacing:0}.tribe-events-calendar div[id*="tribe-events-event-"] h3.tribe-events-month-event-title a{font-size:100%}#tribe-events-content .tribe-events-tooltip h4{margin:0;color:#fff;background-color:#666;font-size:12px;padding:0 6px;min-height:24px;line-height:24px;letter-spacing:1px;font-weight:normal}.tribe-events-tooltip .tribe-events-event-body{font-size:11px;padding:3px 6px 6px;font-weight:normal}.tribe-events-tooltip .duration{font-style:italic;margin:3px 0}.tribe-events-tooltip .tribe-events-event-thumb{float:left;padding:5px 5px 5px 0}.tribe-events-tooltip .tribe-events-event-thumb img{-webkit-box-shadow:none;box-shadow:none}.tribe-events-tooltip p.entry-summary{padding:0;font-size:11px;line-height:1.5}.tribe-events-list-widget ol li{margin-bottom:30px;list-style:none}.tribe-events-list-widget .duration{font-weight:bold}table.tribe-events-tickets .tickets_price{font-style:italic;color:#000;font-weight:bold}td.tickets_name{color:#777;font-size:13px}.single-tribe_events #tribe-events-content form.cart{background:#fafafa;border:1px solid #eee;margin:30px 0;padding:0 4% 3%}table.tribe-events-tickets{margin:0;width:100%}table.tribe-events-tickets td{border-top:1px solid #ddd;padding:8px 10px 8px 0;vertical-align:middle}table.tribe-events-tickets .tickets_nostock{display:inline-block;text-align:center}h2.tribe-events-tickets-title{margin:20px 0 25px;font-size:1.4em;font-weight:bold}#tribe-events-bar{width:100%;min-width:220px;margin-bottom:30px;height:auto;position:relative;clear:none}#tribe-events-bar *{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#tribe-bar-form{background:#f5f5f5;position:relative;margin:0;width:100%}#tribe-bar-form input{font-size:15px;margin:0 4px 0 0}#tribe-bar-form input[type="text"]{width:100%;padding:0 0 5px 0;background:0;border:0;border-bottom:1px dashed #b9b9b9;line-height:1;height:auto;font-weight:bold;border-radius:0;box-shadow:none;-moz-box-shadow:none;-webkit-box-shadow:none}#tribe-bar-form input[type=text]:focus{outline:0}input[name*="tribe-bar-"]::-webkit-input-placeholder{color:#5f5f5f;font-weight:normal;font-style:italic;line-height:1.3}input[name*="tribe-bar-"]:-moz-placeholder{color:#5f5f5f;font-weight:normal;font-style:italic;line-height:1.3}.placeholder{color:#5f5f5f;font-weight:normal;font-style:italic;line-height:1.3}#tribe-bar-form .tribe-bar-submit input[type=submit]{font-size:13px;line-height:20px;letter-spacing:0;width:100%;height:auto;padding:10px;background-image:none;background:#666;color:#fff;border:0;border-radius:0;-moz-border-radius:0;-webkit-border-radius:0;-webkit-appearance:button}.tribe-bar-submit input[type=submit]:hover{background:#999;color:#fff}#tribe-bar-form label{display:block;font-size:11px;line-height:1;text-transform:uppercase;font-weight:bold;margin:0 0 5px 0;padding:0}#tribe-bar-dates .select2-choice{border-bottom:1px dashed #b9b9b9}#tribe-bar-form .tribe-bar-filters{position:relative;float:left;width:100%;margin:0}#tribe-bar-form #tribe-bar-views+.tribe-bar-filters{right:16.66667%;left:auto;width:83.3333%}#tribe-bar-form .tribe-bar-filters-inner{margin:0}#tribe-bar-form.tribe-bar-full .tribe-bar-filters{display:block !important}.tribe-bar-date-filter{float:left;width:25%;margin-bottom:0;padding:15px}.tribe-bar-search-filter{float:left;width:33.3333%;margin-bottom:0;padding:15px}.tribe-bar-submit{float:left;width:25%;margin-bottom:0;margin-left:16.6667%;padding:15px}#tribe-bar-form #tribe-bar-views{position:relative;left:83.3333%;right:auto;float:left;width:16.66667%;padding:0 0 0 5px;background:transparent;margin:0}#tribe-bar-views:hover,#tribe-bar-views label:hover{cursor:pointer}.tribe-bar-views-inner{padding:15px 0 45px 0;background:#e0e0e0;margin:0}#tribe-bar-form .tribe-bar-views-inner label{padding:0 15px;text-align:left}.tribe-bar-views-inner .select2-container{padding:0 15px}.tribe-select2-results-views.select2-drop{background:#dbdbdb;border:0;z-index:10001;box-shadow:none;-moz-box-shadow:none;-webkit-box-shadow:none}#tribe-bar-form.tribe-bar-mini #tribe-bar-views{width:16.66667%}#tribe-bar-views .tribe-bar-views-list{list-style-type:none;margin:0 0 0 5px;padding:0;position:absolute;left:0;top:auto;z-index:99;border-radius:0 0 3px 3px}#tribe-bar-views li.tribe-bar-views-option{line-height:14px;margin:0 5px 0 0;padding:0;list-style:none;background:0;filter:"progid:DXImageTransform.Microsoft.gradient(enabled=false)";list-style:none;border:0;padding:0;display:none;box-shadow:none;-moz-box-shadow:none;-webkit-box-shadow:none}#tribe-bar-views .tribe-bar-views-option:first-child,#tribe-bar-views .tribe-bar-views-option.tribe-bar-active,#tribe-bar-views.tribe-bar-views-open .tribe-bar-views-option{display:list-item}#tribe-bar-views .tribe-bar-views-list .tribe-bar-views-option a{color:#444;text-align:left;display:block;text-decoration:none;padding:6px 15px;background:#e0e0e0}#tribe-bar-views .tribe-bar-views-list .tribe-bar-views-option a:hover{background:#cacaca;color:inherit}#tribe-bar-views .tribe-bar-views-list .tribe-bar-views-option.tribe-bar-active a:hover{background:#e0e0e0}#tribe-bar-views .tribe-bar-views-option:last-child a{border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;-moz-border-radius:0 0 3px 3px}.tribe-no-js #tribe-bar-views [name="tribe-bar-view"]{display:block}#tribe-bar-views [name="tribe-bar-view"]{display:none}#tribe-bar-views .tribe-bar-views-list{width:100%;float:left}#tribe-bar-views .tribe-bar-settings{display:none}#tribe-bar-form.tribe-bar-mini *{font-size:12px}#tribe-bar-form.tribe-bar-mini label{font-size:11px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tribe-bar-mini .tribe-bar-filters{display:block !important;float:left;width:83.3333%}.tribe-bar-mini .tribe-bar-date-filter{padding:10px}.tribe-bar-mini .tribe-bar-search-filter{width:45%;padding:10px}.tribe-bar-mini .tribe-bar-submit{width:25%;margin-left:5%;padding:10px}#tribe-bar-form.tribe-bar-mini .tribe-bar-submit input[type=submit]{font-size:11px;padding:10px 5px;-webkit-appearance:button}.tribe-bar-mini #tribe-bar-views{width:16.66667%}.tribe-bar-mini .tribe-bar-views-inner{padding:10px 0 35px 0}.tribe-bar-mini .tribe-bar-views-inner label{padding:0 10px}.tribe-bar-mini #tribe-bar-views .tribe-bar-views-list .tribe-bar-views-option a{padding:4px 10px}#tribe-bar-collapse-toggle{display:none;float:left;padding:15px;position:relative;font-size:13px;line-height:28px;font-weight:bold;text-transform:uppercase;background:#f5f5f5}#tribe-bar-collapse-toggle:hover{cursor:pointer}#tribe-bar-collapse-toggle span.tribe-bar-toggle-arrow{display:inline-block;margin:0 4px;position:absolute;right:10px}#tribe-bar-collapse-toggle span.tribe-bar-toggle-arrow:after{top:10px;right:0;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none;border-color:rgba(136,183,213,0);border-top-color:inherit;border-width:8px}#tribe-bar-collapse-toggle.tribe-bar-filters-open span.tribe-bar-toggle-arrow:after{top:0;border-top-color:transparent;border-bottom-color:inherit}#tribe-bar-form.tribe-bar-collapse #tribe-bar-views+.tribe-bar-filters{display:none;margin-top:5px;overflow:hidden;clear:both;left:auto;right:auto;width:100%}.tribe-bar-collapse .tribe-bar-filters-inner>div,.tribe-bar-collapse #tribe-bar-views{width:100%;height:auto;margin:0}.tribe-bar-collapse #tribe-bar-collapse-toggle{display:block;width:70%}.tribe-bar-collapse #tribe-bar-collapse-toggle.tribe-bar-collapse-toggle-full-width{width:100%}#tribe-bar-form.tribe-bar-collapse #tribe-bar-views{float:left;left:auto;width:30%}#tribe-bar-form.tribe-bar-collapse .tribe-bar-views-inner{padding:10px 0 40px 0}#tribe-bar-form.tribe-bar-collapse .tribe-bar-views-inner label{margin:0}@media only screen and (max-width:767px){.tribe-bar-collapse #tribe-bar-collapse-toggle{width:60%}#tribe-bar-form.tribe-bar-collapse #tribe-bar-views{width:40%}}.tribe-bar-is-disabled .tribe-events-page-title{line-height:45px;text-align:left;clear:none;margin:0}.tribe-bar-disabled{float:right;position:relative;z-index:101}.tribe-bar-disabled #tribe-events-bar{width:auto;min-width:0;float:none}.tribe-bar-disabled #tribe-bar-form{width:auto;border-radius:3px}.tribe-bar-disabled .tribe-bar-filters{float:left}.tribe-bar-disabled .tribe-bar-filters .tribe-bar-date-filter{padding:5px 10px}.tribe-bar-disabled #tribe-bar-form label{font-size:10px}.tribe-bar-disabled #tribe-bar-form .tribe-bar-filters input[type="text"]{border:0;display:block;width:85px;margin:0;padding:0;font-size:13px;line-height:15px}.tribe-bar-disabled #tribe-bar-form #tribe-bar-views+.tribe-bar-filters{left:auto;right:50%;width:50%}.tribe-bar-disabled .tribe-bar-date-filter,.tribe-events-uses-geolocation .tribe-bar-disabled .tribe-bar-date-filter{width:auto}.tribe-bar-disabled #tribe-bar-form #tribe-bar-views{width:50%;float:left;left:50%;right:auto;padding:0}.tribe-bar-disabled .tribe-bar-views-inner{min-width:100px;padding:5px 0 25px 0;border-radius:0 3px 3px 0}.tribe-bar-disabled #tribe-bar-form .tribe-bar-views-inner label{padding:0 10px}.tribe-bar-disabled #tribe-bar-views .tribe-bar-views-list,.tribe-bar-disabled #tribe-bar-views .tribe-bar-views-list .tribe-bar-views-option{margin:0}.tribe-bar-disabled #tribe-bar-views .tribe-bar-views-list .tribe-bar-views-option a{padding:4px 10px;margin:0}.tribe-bar-disabled #tribe-bar-views .select2-container .select2-choice{line-height:18px;height:auto;font-size:13px}.tribe-bar-is-disabled .tribe-select2-results-views.select2-drop .select2-results li{padding:0 10px}.tribe-bar-disabled #tribe-bar-collapse-toggle,.tribe-bar-disabled .tribe-bar-submit{display:none}.tribe-select2-results-views span[class^="tribe-icon-"],.tribe-bar-views-list span[class^="tribe-icon-"],.tribe-bar-view-list a[class*="tribe-icon-"]{padding-left:24px;background-repeat:no-repeat;background-position:0 50%;min-height:16px;display:block}.tribe-select2-results-views span[class^="tribe-icon-"]{min-height:16px;display:inline-block}.tribe-select2-results-views span[class^="tribe-icon-"],.tribe-bar-views-list span[class^="tribe-icon-"],.tribe-bar-view-list a[class^="tribe-icon-"]{background-image:url(images/events-bar/icon-month.png);-webkit-background-size:15px 16px;background-size:15px 16px}.tribe-select2-results-views span.tribe-icon-list,.tribe-bar-views-list span.tribe-icon-list,.tribe-bar-view-list a.tribe-icon-list{background-image:url(images/events-bar/icon-list.png);-webkit-background-size:15px 10px;background-size:15px 10px}.tribe-bar-view-list a.tribe-icon-upcoming,.tribe-bar-view-list a.tribe-icon-month{padding-left:30px;background-position:10px 50%}.tribe-select2-results-views .tribe-icon-month,.tribe-bar-views-list span.tribe-icon-month,.tribe-bar-view-list a.tribe-icon-month{background-image:url(images/events-bar/icon-month.png);-webkit-background-size:15px 16px;background-size:15px 16px}.tribe-select2-results-views span.tribe-icon-week,.tribe-bar-views-list span.tribe-icon-week{background-image:url(images/events-bar/icon-week.png);-webkit-background-size:15px 16px;background-size:15px 16px}.tribe-select2-results-views span.tribe-icon-day,.tribe-bar-views-list span.tribe-icon-day{background-image:url(images/events-bar/icon-day.png);-webkit-background-size:15px 16px;background-size:15px 16px}.tribe-select2-results-views span.tribe-icon-photo,.tribe-bar-views-list span.tribe-icon-photo{background-image:url(images/events-bar/icon-photo.png);-webkit-background-size:15px 14px;background-size:15px 14px}.tribe-select2-results-views span.tribe-icon-map,.tribe-bar-views-list span.tribe-icon-map{background-image:url(images/events-bar/icon-map.png);-webkit-background-size:12px 16px;background-size:12px 16px;background-position:2px 50%}@media only screen and (min--moz-device-pixel-ratio:2),only screen and (-o-min-device-pixel-ratio:2/1),only screen and (-webkit-min-device-pixel-ratio:2),only screen and (min-device-pixel-ratio:2){.tribe-events-tooltip .tribe-events-arrow{background-image:url(images/tribe-tooltips@2x.png)}#tribe-bar-filters .tribe-bar-button-search .tribe-bar-btn-small{background-image:url(images/events-bar/icon-search@2x.png)}#tribe-events-bar .tribe-bar-button-settings span{background-image:url(images/events-bar/icon-gear@2x.png)}#tribe-events-bar [class^="tribe-bar-button-"]:after{background-image:url(../vendor/select2/select2x2.png)}.tribe-select2-results-views span[class^="tribe-icon-"],.tribe-bar-views-list span[class^="tribe-icon-"],.tribe-bar-view-list a[class^="tribe-icon-"]{background-image:url(images/events-bar/icon-month@2x.png)}.tribe-select2-results-views span.tribe-icon-list,.tribe-bar-views-list span.tribe-icon-list,.tribe-bar-view-list a.tribe-icon-upcoming{background-image:url(images/events-bar/icon-list@2x.png)}.tribe-select2-results-views span.tribe-icon-month,.tribe-bar-views-list span.tribe-icon-month,.tribe-bar-view-list a.tribe-icon-month{background-image:url(images/events-bar/icon-month@2x.png)}.tribe-select2-results-views span.tribe-icon-week,.tribe-bar-views-list span.tribe-icon-week{background-image:url(images/events-bar/icon-week@2x.png)}.tribe-select2-results-views span.tribe-icon-day,.tribe-bar-views-list span.tribe-icon-day{background-image:url(images/events-bar/icon-day@2x.png)}.tribe-select2-results-views span.tribe-icon-photo,.tribe-bar-views-list span.tribe-icon-photo{background-image:url(images/events-bar/icon-photo@2x.png)}.tribe-select2-results-views span.tribe-icon-map,.tribe-bar-views-list span.tribe-icon-map{background-image:url(images/events-bar/icon-map@2x.png)}}
1
+ #tribe-events-pg-template{max-width:1000px;margin:0 auto}.tribe-events-after-html{clear:both}#tribe-events-pg-template .tribe-events-content p,.tribe-events-before-html p,.tribe-events-after-html p{margin:0 0 10px;line-height:1.7}#tribe-events-pg-template .tribe-events-content h1,.tribe-events-before-html h1,.tribe-events-after-html h1,#tribe-events-pg-template .tribe-events-content h2,.tribe-events-before-html h2,.tribe-events-after-html h2,#tribe-events-pg-template .tribe-events-content h3,.tribe-events-before-html h3,.tribe-events-after-html h3,#tribe-events-pg-template .tribe-events-content h4,.tribe-events-before-html h4,.tribe-events-after-html h4,#tribe-events-pg-template .tribe-events-content h5,.tribe-events-before-html h5,.tribe-events-after-html h5,#tribe-events-pg-template .tribe-events-content h6,.tribe-events-before-html h6,.tribe-events-after-html h6{margin:24px 0;margin:20px 0;line-height:1.7}.tribe-events-before-html h1,.tribe-events-after-html h1,#tribe-events-pg-template .tribe-events-content h1{font-size:21px;line-height:1.5}.tribe-events-before-html h2,.tribe-events-after-html h2,#tribe-events-pg-template .tribe-events-content h2{font-size:18px;line-height:1.6}.tribe-events-before-html h3,.tribe-events-after-html h3,#tribe-events-pg-template .tribe-events-content h3{font-size:16px;line-height:1.8}.tribe-events-before-html h4,.tribe-events-after-html h4,#tribe-events-pg-template .tribe-events-content h4{font-size:14px;line-height:1.8}.tribe-events-before-html h5,.tribe-events-after-html h5,#tribe-events-pg-template .tribe-events-content h5{font-size:13px;line-height:1.8}.tribe-events-before-html h6,.tribe-events-after-html h6,#tribe-events-pg-template .tribe-events-content h6{font-size:12px;line-height:1.8}.tribe-events-before-html ul,.tribe-events-after-html ul,#tribe-events-pg-template .tribe-events-content ul{list-style:disc outside}.tribe-events-before-html ol,.tribe-events-after-html ol,#tribe-events-pg-template .tribe-events-content ol{list-style:decimal outside}.tribe-events-before-html ul li,.tribe-events-after-html ul li,.tribe-events-before-html ol li,.tribe-events-after-html ol li,#tribe-events-pg-template .tribe-events-content ul li,#tribe-events-pg-template .tribe-events-content ol li{margin:0 0 20px;line-height:1.7}.tribe-events-back{margin:0 0 20px 0}#tribe-events-content a,.tribe-events-event-meta a{text-decoration:none}.tribe-events-read-more{display:block}ul.tribe-events-sub-nav a,.tribe-events-back a,.tribe-events-list-widget .tribe-events-widget-link a,.tribe-events-adv-list-widget .tribe-events-widget-link a{text-decoration:none}ul.tribe-events-sub-nav a:hover,.tribe-events-back a:hover,.tribe-events-list-widget .tribe-events-widget-link a:hover,.tribe-events-adv-list-widget .tribe-events-widget-link a:hover{text-decoration:none}.tribe-events-day.page .hentry,.tribe-events-week.page .hentry{margin:0;padding:0 0 15px 0}.tribe-events-button,.entry-content .tribe-events-button{background-color:#666;color:#fff;background-image:none;font-size:11px;font-weight:bold;padding:6px 9px;text-align:center;text-transform:uppercase;letter-spacing:1px;-webkit-border-radius:3px;border-radius:3px;border:0;line-height:normal;cursor:pointer;-webkit-box-shadow:none;box-shadow:none;text-decoration:none}.tribe-events-button.tribe-active{background-color:#666;color:#fff}.tribe-events-button.tribe-inactive,.tribe-events-button:hover,.entry-content .tribe-events-button:hover,.tribe-events-button.tribe-active:hover{background-color:#ddd;color:#444;text-decoration:none}a.tribe-events-ical,a.tribe-events-gcal{font-size:10px;font-weight:normal;padding:0 6px;float:right;text-decoration:none;line-height:18px;margin-top:21px;color:#fff;clear:both}.tribe-events-gcal{margin-right:9px}.single-tribe_events a.tribe-events-ical,.single-tribe_events a.tribe-events-gcal{float:none}.tribe-events-event-meta .tribe-events-gmap,.tribe-events-event-meta-desc .tribe-events-gmap{white-space:nowrap}.event .entry-title{color:inherit;font-size:inherit;font-weight:inherit;line-height:inherit;padding:inherit}.updated-info{text-indent:-9999px;height:0}.tribe-events-event-image{margin:0 0 20px 0;text-align:center}.tribe-events-event-image img{max-width:100%;height:auto}.tribe-events-schedule h2{font-style:normal;font-weight:bold}.tribe-events-event-schedule-details{display:inline}.tribe-events-divider{padding:0 10px;font-weight:bold}.events-archive .entry-content,.events-archive .entry-header{width:98%}.events-archive span.edit-link{display:none}.tribe-events-notices{background:#d9edf7;border:1px solid #bce8f1;color:#3a87ad;margin:10px 0 18px;padding:8px 35px 8px 14px;text-shadow:0 1px 0 #fff;-webkit-border-radius:4px;border-radius:4px}div.tribe-events-notices>ul,div.tribe-events-notices>ul>li{margin:0;padding:0;list-style:none}#tribe-events-content p.tribe-events-promo{font-size:12px;color:#999}#tribe-events-content p.tribe-events-promo a{color:#666}.clearfix:before,.tribe-clearfix:before,.clearfix:after,.tribe-clearfix:after{content:"";display:table}.clearfix:after,.tribe-clearfix:after{clear:both}.clearfix,.tribe-clearfix{zoom:1}.tribe-clear{clear:both}.tribe-events-visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.tribe-hide-text{text-indent:100%;white-space:nowrap;overflow:hidden}.tribe-events-error{display:none}.tribe-events-multi-event-day{color:#0f81bb}#tribe-events-content .tribe-events-abbr{border-bottom:0;cursor:default}.tribe-events-spinner{width:32px;height:32px;margin-left:-16px}.tribe-events-spinner-medium{width:24px;height:24px}.tribe-events-spinner-small{width:16px;height:16px;margin-left:-8px}*+html .events-archive h2.tribe-events-page-title{padding-bottom:30px}*+html .events-archive .tribe-events-list h2.tribe-events-page-title{padding-bottom:0}*+html #tribe-events-header{margin-bottom:30px}h2.tribe-events-page-title{font-size:24px;font-weight:normal;position:relative;z-index:0;margin-bottom:.5em;text-align:center;clear:none}.tribe-events-filter-view .tribe-events-list h2.tribe-events-page-title{width:100%;float:none}h2.tribe-events-page-title a{color:#000}h2.tribe-events-page-title a:hover,h2.tribe-events-page-title a:focus{color:#333;text-decoration:underline}#tribe-events-header,#tribe-events-footer{margin-bottom:.5em;clear:both}#tribe-events-header .tribe-events-sub-nav,#tribe-events-footer .tribe-events-sub-nav{list-style-type:none;margin:0;padding:0;overflow:hidden;line-height:normal;text-align:center}#tribe-events-header .tribe-events-sub-nav li,#tribe-events-footer .tribe-events-sub-nav li{display:inline-block;zoom:1;*display:inline;margin:0;vertical-align:middle}#tribe-events-header .tribe-events-sub-nav li,#tribe-events-footer .tribe-events-sub-nav .tribe-events-nav-previous{float:left;margin-right:5px;text-align:left;white-space:nowrap}#tribe-events-header .tribe-events-sub-nav .tribe-events-nav-next,#tribe-events-footer .tribe-events-sub-nav .tribe-events-nav-next{float:right;margin-left:5px;text-align:right;white-space:nowrap}#tribe-events-header .tribe-events-sub-nav .tribe-events-nav-left,#tribe-events-footer .tribe-events-sub-nav .tribe-events-nav-left{float:left;text-align:left;white-space:nowrap}#tribe-events-header .tribe-events-sub-nav .tribe-events-nav-right,#tribe-events-footer .tribe-events-sub-nav .tribe-events-nav-right{float:right;text-align:right;white-space:nowrap}.tribe-events-ajax-loading{display:none;position:absolute;left:50%;margin-left:-27px;top:150px;padding:15px;background:#666;z-index:10;border-radius:5px;-webkit-box-shadow:none !important;box-shadow:none !important;-moz-box-shadow:none !important}.tribe-events-loading .tribe-events-ajax-loading{display:block}.tribe-events-ajax-loading.tribe-events-active-spinner,.tribe-events-ajax-loading.tribe-events-active-spinner img{display:block}#tribe-events-header{position:relative}#tribe-events-footer{margin-bottom:1em}.events-list #tribe-events-footer,.tribe-events-day #tribe-events-footer,.tribe-events-map #tribe-events-footer{margin:1.25em 0 18px;clear:both}.tribe-events-map #tribe-events-header{margin:1em 0}.single-tribe_events #tribe-events-header{margin:1em 0 20px}.single-tribe_events #tribe-events-header li,.single-tribe_events #tribe-events-footer li{width:48%}#tribe-events-content .tribe-events-nav-date{padding-top:16px}select.tribe-events-dropdown{width:auto;font-size:11px;margin:33px 9px 0 0}#tribe-events-events-picker,#tribe-events-picker{display:inline}@media only screen and (max-width:767px){#tribe-events-header .tribe-events-sub-nav .tribe-events-nav-next,#tribe-events-header .tribe-events-sub-nav .tribe-events-nav-previous,#tribe-events-footer .tribe-events-sub-nav .tribe-events-nav-next,#tribe-events-footer .tribe-events-sub-nav .tribe-events-nav-previous{display:block;width:50%;margin:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.tribe-events-sub-nav li a{display:block;padding:10px 15px;background:#666;color:#fff;white-space:normal}.tribe-events-sub-nav .tribe-events-nav-previous,.tribe-events-sub-nav .tribe-events-nav-left{padding:0 1px}.tribe-events-sub-nav .tribe-events-nav-next,.tribe-events-sub-nav .tribe-events-nav-right{padding:0 0 0 1px}}#tribe-events-content{position:relative;margin-bottom:48px;padding:2px 0}#tribe-events-content.tribe-events-list{padding:0}.tribe-events-list h2.tribe-events-page-title{margin-bottom:15px}#tribe-events-content.tribe-events-list{margin-bottom:60px}.tribe-events-list .vevent.hentry{border-bottom:1px solid #ddd;padding:2.25em 0;margin:0}.tribe-events-list .vevent.hentry.tribe-events-first{padding-top:0}.tribe-events-list h2.tribe-events-list-event-title{margin:0;padding:0;font-size:1.4em;line-height:1.4em;text-transform:none;letter-spacing:0;display:block;border:0}.tribe-events-list h2.tribe-events-list-event-title{float:none;display:inline}.tribe-events-event-details .tribe-events-event-meta address.tribe-events-address{font-style:normal;font-family:inherit;font-size:inherit;line-height:inherit}.tribe-events-list .tribe-events-event-image{float:left;width:30%;margin:0 3% 0 0}.tribe-events-list .tribe-events-event-image img{width:100%;height:auto;margin:0;padding:0}.tribe-events-list .tribe-events-event-image+div.tribe-events-content{float:left;width:67%;position:relative}.tribe-events-loop .tribe-events-event-meta{float:none;clear:both;border:0;margin:5px 0 15px 0;line-height:1.5;font-size:14px;font-weight:bold;overflow:visible}.tribe-events-list .tribe-events-loop .tribe-events-event-meta .recurringinfo{display:inline-block;zoom:1;*display:inline}.tribe-events-event-meta address.tribe-events-address{display:inline;font-style:normal;font-family:inherit;font-size:inherit;line-height:inherit;margin-right:10px}.tribe-events-list .tribe-events-loop .tribe-events-event-meta .event-is-recurring{position:relative}.tribe-events-list .time-details,.tribe-events-list .tribe-events-venue-details{line-height:1.2;margin:0;display:block}.tribe-events-list .time-details{margin:0 0 8px 0}.tribe-events-list .tribe-events-event-cost{float:right;margin:0 0 5px 5px}.tribe-events-list .tribe-events-event-cost span{font-weight:bold;background:#eee;border:1px solid #ddd;display:block;padding:5px 10px;text-align:center;line-height:1.3;font-style:normal;text-overflow:ellipsis}.tribe-events-list .tribe-events-loop .tribe-events-content{width:100%;padding:0}.tribe-events-list .tribe-events-loop .tribe-events-content p{margin:0}.tribe-events-list-separator-year{display:block;text-align:center;font-size:38px;color:#ccc;padding:1em 2.25em 0;font-weight:bold}.tribe-events-list-separator-month{display:block;text-transform:uppercase;font-weight:bold;font-size:14px;margin:2.5em 0 0;background-color:#EEE;padding:6px 10px}.tribe-events-list-separator-month+.vevent.hentry.tribe-events-first{padding-top:2.25em}.tribe-events-list .vevent.hentry.tribe-event-end-month{border-bottom:0;padding-bottom:0}@media only screen and (max-width:767px){.tribe-events-list .tribe-events-event-image{float:none;width:100%;margin:0 0 20px 0}.tribe-events-list .tribe-events-event-image+div.tribe-events-content{float:none;width:100%}.tribe-events-list .tribe-events-loop .tribe-events-event-meta .recurringinfo{display:block;margin:8px 0 0}.tribe-events-list .tribe-events-loop .tribe-events-event-meta .recurringinfo .tribe-events-divider{display:none}}.tribe-events-loop{clear:both}.tribe-events-loop .vevent.tribe-events-last{border-bottom:0}.tribe-events-loop .tribe-events-content{width:60%;float:left;padding:0 5% 0 0}.events-archive .tribe-events-content p,.single-tribe_venue .tribe-events-loop .tribe-events-content p{margin:0}.events-archive h3 .published,.single-tribe_venue h3 .published{font-size:18px;margin-top:0;font-style:italic;text-transform:none}.tribe-events-event-meta-desc,.tribe-events-event-day{color:#333}.single-tribe_events h2.tribe-events-single-event-title{font-size:1.7em;line-height:1;margin:0;padding:0}#tribe-events-content .tribe-events-single-event-description img.attachment-post-thumbnail{margin-left:auto;margin-right:auto;display:block;text-align:center}.tribe-events-meta-group .tribe-events-single-section-title{margin:20px 0 10px;font-size:1.4em;font-weight:bold}.tribe-events-meta-group+.tribe-events-single-section-title{margin-top:0}.tribe-events-event-meta .tribe-events-meta-group address.tribe-events-address{margin:0;display:block}#eventbrite-embed{width:100%;min-height:225px;margin:24px 0}.eventbrite-ticket-embed{margin:0 0 30px 0}.tribe-events-schedule{margin:20px 0 0}.single-tribe_events .tribe-events-schedule .tribe-events-divider,.single-tribe_events .tribe-events-schedule .recurringinfo,.single-tribe_events .tribe-events-schedule .tribe-events-cost{font-size:1.2em}.single-tribe_events .tribe-events-schedule h3{font-size:1.2em;display:inline-block;zoom:1;*display:inline;margin:0;padding:0;vertical-align:middle;white-space:nowrap}.single-tribe_events .tribe-events-schedule .tribe-events-cost{vertical-align:middle}.single-tribe_events .tribe-events-cal-links{display:inline-block;zoom:1;*display:inline;margin:0 0 20px 0;vertical-align:middle}.single-tribe_events a.tribe-events-ical,.single-tribe_events a.tribe-events-gcal{margin-bottom:0}.single-tribe_events .tribe-events-event-image{clear:both;text-align:center;margin-bottom:30px}.single-tribe_events .tribe-events-event-meta{background:#fafafa;border:1px solid #eee;margin:30px 0}.single-tribe_events .tribe-events-venue-map{width:58%;margin:20px 4% 2% 0;padding:5px;float:right;background:#eee;border:1px solid #ddd;border-radius:3px;display:inline-block;zoom:1;*display:inline;vertical-align:top}.single-tribe_events #tribe-events-gmap{height:0 !important;padding-top:50%;width:100% !important;margin:0 !important}.single-tribe_events .tribe-events-meta-group .tribe-events-venue-map{float:none;margin:20px 0 0;width:100%}.single-tribe_events .tribe-events-meta-group #tribe-events-gmap{height:0 !important;padding-top:100%;width:100% !important;margin-top:50px}.single-tribe_events .tribe-events-event-meta{font-size:13px}.tribe-events-event-meta .tribe-events-meta-group,.tribe-events-event-meta .column{float:left;width:33.3333%;padding:0 4%;text-align:left;margin:0 0 20px 0;display:inline-block;zoom:1;*display:inline;vertical-align:top;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.single-tribe_events .tribe-events-event-meta dl{margin:0}.single-tribe_events #tribe-events-content .tribe-events-event-meta dt{clear:left;font-weight:bold;line-height:1;list-style:none}.single-tribe_events #tribe-events-content .tribe-events-event-meta dd{padding:0;margin:0 0 10px 0;line-height:1.5;list-style:none;float:none}#tribe-events-content .tribe-events-event-meta dd span.adr{display:block}.single-tribe_events .tribe-events-content{width:100%;max-width:100%;padding:0}.sidebar.single-tribe_events .tribe-events-content{padding:0}@media only screen and (max-width:767px){.single-tribe_events .tribe-events-schedule h3{display:block;margin-bottom:10px}.single-tribe_events .tribe-events-schedule .recurringinfo .tribe-events-divider{display:none}.tribe-events-event-meta .tribe-events-meta-group,.tribe-events-event-meta .column{float:none;width:100%}}#tribe-events-content table.tribe-events-calendar{margin:12px 0 .6em;clear:both;font-size:12px;border-collapse:collapse}#tribe-events-content table.tribe-events-calendar,#tribe-events-content .tribe-events-calendar td{border:1px solid #bbb}.tribe-events-calendar div[id*="tribe-events-daynum-"],.tribe-events-calendar div[id*="tribe-events-daynum-"] a{background-color:#f5f5f5;color:#333;font-size:11px;font-weight:bold}.tribe-events-calendar td.tribe-events-present div[id*="tribe-events-daynum-"],.tribe-events-calendar td.tribe-events-present div[id*="tribe-events-daynum-"]>a{background-color:#666;color:#fff}.tribe-events-calendar td.tribe-events-past div[id*="tribe-events-daynum-"],.tribe-events-calendar td.tribe-events-past div[id*="tribe-events-daynum-"]>a{color:#999}#tribe-events-content .tribe-events-calendar td{height:110px;width:14.28%;color:#114b7d;vertical-align:top;padding:0 0 .5em;font-size:12px}.vevent.viewmore{font-weight:bold}.tribe-events-calendar .tribe-events-tooltip,.tribe-events-week .tribe-events-tooltip,.recurring-info-tooltip{border:1px solid #666;position:absolute;z-index:1001;bottom:30px;left:3px;width:320px;background-color:#f9f9f9;color:#333;line-height:1.4;display:none}.tribe-events-tooltip .tribe-events-arrow{width:18px;height:11px;background-image:url(images/tribe-tooltips.png);background-repeat:no-repeat;background-position:0 0;-webkit-background-size:44px 19px;background-size:44px 19px;display:block;position:absolute;bottom:-11px;left:20px}.tribe-events-calendar .tribe-events-right .tribe-events-tooltip,.tribe-events-week .tribe-events-right .tribe-events-tooltip,.recurring-info-tooltip{left:auto;right:3px}.tribe-events-right .tribe-events-tooltip .tribe-events-arrow{left:auto;right:30px}.recurringinfo{display:inline-block;vertical-align:middle;zoom:1;*display:inline;position:relative}.event-is-recurring{position:relative;font-style:normal;font-weight:500;color:rgba(0,0,0,.7)}.event-is-recurring:hover{color:#000}.recurring-info-tooltip.tribe-events-tooltip{left:10px;width:200px;padding-bottom:.8em}.events-archive.events-gridview #tribe-events-content table .vevent{margin:0 5%;padding:6px 8px;border-bottom:1px solid #e7e7e7}.events-archive.events-gridview #tribe-events-content table .tribe-events-last{border-bottom:0}.tribe-events-viewmore{margin:0 5%;padding:9px 8px;font-weight:bold;line-height:1;border-top:1px solid #e7e7e7}.tribe-events-calendar td .tribe-events-viewmore a{font-size:100%}.tribe-events-calendar th{width:250px;height:10px;background-color:#ddd;color:#333;padding:4px 0;text-align:center;text-transform:uppercase;letter-spacing:1px}.tribe-events-calendar td div[id*="tribe-events-daynum-"]{padding:6px 9px;line-height:1.2}.tribe-events-calendar td a{font-size:91.7%}.tribe-events-calendar div[id*="tribe-events-event-"],.tribe-events-calendar div[id*="tribe-events-daynum-"]{position:relative;margin:0}#tribe-events-content .tribe-events-calendar div[id*="tribe-events-event-"] h3.tribe-events-month-event-title{line-height:1.25;font-size:13px;font-weight:normal;font-family:sans-serif;font-weight:bold;text-transform:none;margin:0;padding:0;letter-spacing:0}.tribe-events-calendar div[id*="tribe-events-event-"] h3.tribe-events-month-event-title a{font-size:100%}#tribe-events-content .tribe-events-tooltip h4{margin:0;color:#fff;background-color:#666;font-size:12px;padding:0 6px;min-height:24px;line-height:24px;letter-spacing:1px;font-weight:normal}.tribe-events-tooltip .tribe-events-event-body{font-size:11px;padding:3px 6px 6px;font-weight:normal}.tribe-events-tooltip .duration{font-style:italic;margin:3px 0}.tribe-events-tooltip .tribe-events-event-thumb{float:left;padding:5px 5px 5px 0}.tribe-events-tooltip .tribe-events-event-thumb img{-webkit-box-shadow:none;box-shadow:none}.tribe-events-tooltip p.entry-summary{padding:0;font-size:11px;line-height:1.5}.tribe-events-list-widget ol li{margin-bottom:30px;list-style:none}.tribe-events-list-widget .duration{font-weight:bold}table.tribe-events-tickets .tickets_price{font-style:italic;color:#000;font-weight:bold}td.tickets_name{color:#777;font-size:13px}.single-tribe_events #tribe-events-content form.cart,.single-tribe_events #tribe-events-content div.cart{background:#fafafa;border:1px solid #eee;margin:30px 0;padding:0 4% 3%}table.tribe-events-tickets{margin:0;width:100%;border-bottom:0}table.tribe-events-tickets td{border-top:1px solid #ddd;border-bottom:1px solid #ddd;padding:8px 10px 8px 0;vertical-align:middle}table.tribe-events-tickets td.wpec{line-height:0}table.tribe-events-tickets td.woocommerce{border-bottom:0}table.tribe-events-tickets td.wpec img{display:none}table.tribe-events-tickets td fieldset{padding:14px .625em 4px;border:0;margin-top:8px}table.tribe-events-tickets .tickets_nostock{display:inline-block;text-align:center}h2.tribe-events-tickets-title{margin:20px 0 25px;font-size:1.4em;font-weight:bold}#tribe-events-bar{width:100%;min-width:220px;margin-bottom:30px;height:auto;position:relative;clear:none}#tribe-events-bar *{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#tribe-bar-form{background:#f5f5f5;position:relative;margin:0;width:100%}#tribe-bar-form input{font-size:15px;margin:0 4px 0 0}#tribe-bar-form input[type="text"]{width:100%;padding:0 0 5px 0;background:0;border:0;border-bottom:1px dashed #b9b9b9;line-height:1;height:auto;font-weight:bold;border-radius:0;box-shadow:none;-moz-box-shadow:none;-webkit-box-shadow:none}#tribe-bar-form input[type=text]:focus{outline:0}input[name*="tribe-bar-"]::-webkit-input-placeholder{color:#5f5f5f;font-weight:normal;font-style:italic;line-height:1.3}input[name*="tribe-bar-"]:-moz-placeholder{color:#5f5f5f;font-weight:normal;font-style:italic;line-height:1.3}.placeholder{color:#5f5f5f;font-weight:normal;font-style:italic;line-height:1.3}#tribe-bar-form .tribe-bar-submit input[type=submit]{font-size:13px;line-height:20px;letter-spacing:0;width:100%;height:auto;padding:10px;background-image:none;background:#666;color:#fff;border:0;border-radius:0;-moz-border-radius:0;-webkit-border-radius:0;-webkit-appearance:button}.tribe-bar-submit input[type=submit]:hover{background:#999;color:#fff}#tribe-bar-form label{display:block;font-size:11px;line-height:1;text-transform:uppercase;font-weight:bold;margin:0 0 5px 0;padding:0}#tribe-bar-dates .select2-choice{border-bottom:1px dashed #b9b9b9}#tribe-bar-form .tribe-bar-filters{position:relative;float:left;width:100%;margin:0}#tribe-bar-form #tribe-bar-views+.tribe-bar-filters{right:16.66667%;left:auto;width:83.3333%}#tribe-bar-form .tribe-bar-filters-inner{margin:0}#tribe-bar-form.tribe-bar-full .tribe-bar-filters{display:block !important}.tribe-bar-date-filter{float:left;width:25%;margin-bottom:0;padding:15px}.tribe-bar-search-filter{float:left;width:33.3333%;margin-bottom:0;padding:15px}.tribe-bar-submit{float:left;width:25%;margin-bottom:0;margin-left:16.6667%;padding:15px}#tribe-bar-form #tribe-bar-views{position:relative;left:83.3333%;right:auto;float:left;width:16.66667%;padding:0 0 0 5px;background:transparent;margin:0}#tribe-bar-views:hover,#tribe-bar-views label:hover{cursor:pointer}.tribe-bar-views-inner{padding:15px 0 45px 0;background:#e0e0e0;margin:0}#tribe-bar-form .tribe-bar-views-inner label{padding:0 15px;text-align:left}.tribe-bar-views-inner .select2-container{padding:0 15px}.tribe-select2-results-views.select2-drop{background:#dbdbdb;border:0;z-index:10001;box-shadow:none;-moz-box-shadow:none;-webkit-box-shadow:none}#tribe-bar-form.tribe-bar-mini #tribe-bar-views{width:16.66667%}#tribe-bar-views .tribe-bar-views-list{list-style-type:none;margin:0 0 0 5px;padding:0;position:absolute;left:0;top:auto;z-index:99;border-radius:0 0 3px 3px}#tribe-bar-views li.tribe-bar-views-option{line-height:14px;margin:0 5px 0 0;padding:0;list-style:none;background:0;filter:"progid:DXImageTransform.Microsoft.gradient(enabled=false)";list-style:none;border:0;padding:0;display:none;box-shadow:none;-moz-box-shadow:none;-webkit-box-shadow:none}#tribe-bar-views .tribe-bar-views-option:first-child,#tribe-bar-views .tribe-bar-views-option.tribe-bar-active,#tribe-bar-views.tribe-bar-views-open .tribe-bar-views-option{display:list-item}#tribe-bar-views .tribe-bar-views-list .tribe-bar-views-option a{color:#444;text-align:left;display:block;text-decoration:none;padding:6px 15px;background:#e0e0e0}#tribe-bar-views .tribe-bar-views-list .tribe-bar-views-option a:hover{background:#cacaca;color:inherit}#tribe-bar-views .tribe-bar-views-list .tribe-bar-views-option.tribe-bar-active a:hover{background:#e0e0e0}#tribe-bar-views .tribe-bar-views-option:last-child a{border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;-moz-border-radius:0 0 3px 3px}.tribe-no-js #tribe-bar-views [name="tribe-bar-view"]{display:block}#tribe-bar-views [name="tribe-bar-view"]{display:none}#tribe-bar-views .tribe-bar-views-list{width:100%;float:left}#tribe-bar-views .tribe-bar-settings{display:none}#tribe-bar-form.tribe-bar-mini *{font-size:12px}#tribe-bar-form.tribe-bar-mini label{font-size:11px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tribe-bar-mini .tribe-bar-filters{display:block !important;float:left;width:83.3333%}.tribe-bar-mini .tribe-bar-date-filter{padding:10px}.tribe-bar-mini .tribe-bar-search-filter{width:45%;padding:10px}.tribe-bar-mini .tribe-bar-submit{width:25%;margin-left:5%;padding:10px}#tribe-bar-form.tribe-bar-mini .tribe-bar-submit input[type=submit]{font-size:11px;padding:10px 5px;-webkit-appearance:button}.tribe-bar-mini #tribe-bar-views{width:16.66667%}.tribe-bar-mini .tribe-bar-views-inner{padding:10px 0 35px 0}.tribe-bar-mini .tribe-bar-views-inner label{padding:0 10px}.tribe-bar-mini #tribe-bar-views .tribe-bar-views-list .tribe-bar-views-option a{padding:4px 10px}#tribe-bar-collapse-toggle{display:none;float:left;padding:15px;position:relative;font-size:13px;line-height:28px;font-weight:bold;text-transform:uppercase;background:#f5f5f5}#tribe-bar-collapse-toggle:hover{cursor:pointer}#tribe-bar-collapse-toggle span.tribe-bar-toggle-arrow{display:inline-block;margin:0 4px;position:absolute;right:10px}#tribe-bar-collapse-toggle span.tribe-bar-toggle-arrow:after{top:10px;right:0;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none;border-color:rgba(136,183,213,0);border-top-color:inherit;border-width:8px}#tribe-bar-collapse-toggle.tribe-bar-filters-open span.tribe-bar-toggle-arrow:after{top:0;border-top-color:transparent;border-bottom-color:inherit}#tribe-bar-form.tribe-bar-collapse #tribe-bar-views+.tribe-bar-filters{display:none;margin-top:5px;overflow:hidden;clear:both;left:auto;right:auto;width:100%}.tribe-bar-collapse .tribe-bar-filters-inner>div,.tribe-bar-collapse #tribe-bar-views{width:100%;height:auto;margin:0}.tribe-bar-collapse #tribe-bar-collapse-toggle{display:block;width:70%}.tribe-bar-collapse #tribe-bar-collapse-toggle.tribe-bar-collapse-toggle-full-width{width:100%}#tribe-bar-form.tribe-bar-collapse #tribe-bar-views{float:left;left:auto;width:30%}#tribe-bar-form.tribe-bar-collapse .tribe-bar-views-inner{padding:10px 0 40px 0}#tribe-bar-form.tribe-bar-collapse .tribe-bar-views-inner label{margin:0}@media only screen and (max-width:767px){.tribe-bar-collapse #tribe-bar-collapse-toggle{width:60%}#tribe-bar-form.tribe-bar-collapse #tribe-bar-views{width:40%}}.tribe-bar-is-disabled .tribe-events-page-title{line-height:45px;text-align:left;clear:none;margin:0}.tribe-bar-disabled{float:right;position:relative;z-index:101}.tribe-bar-disabled #tribe-events-bar{width:auto;min-width:0;float:none}.tribe-bar-disabled #tribe-bar-form{width:auto;border-radius:3px}.tribe-bar-disabled .tribe-bar-filters{float:left}.tribe-bar-disabled .tribe-bar-filters .tribe-bar-date-filter{padding:5px 10px}.tribe-bar-disabled #tribe-bar-form label{font-size:10px}.tribe-bar-disabled #tribe-bar-form .tribe-bar-filters input[type="text"]{border:0;display:block;width:85px;margin:0;padding:0;font-size:13px;line-height:15px}.tribe-bar-disabled #tribe-bar-form #tribe-bar-views+.tribe-bar-filters{left:auto;right:50%;width:50%}.tribe-bar-disabled .tribe-bar-date-filter,.tribe-events-uses-geolocation .tribe-bar-disabled .tribe-bar-date-filter{width:auto}.tribe-bar-disabled #tribe-bar-form #tribe-bar-views{width:50%;float:left;left:50%;right:auto;padding:0}.tribe-bar-disabled .tribe-bar-views-inner{min-width:100px;padding:5px 0 25px 0;border-radius:0 3px 3px 0}.tribe-bar-disabled #tribe-bar-form .tribe-bar-views-inner label{padding:0 10px}.tribe-bar-disabled #tribe-bar-views .tribe-bar-views-list,.tribe-bar-disabled #tribe-bar-views .tribe-bar-views-list .tribe-bar-views-option{margin:0}.tribe-bar-disabled #tribe-bar-views .tribe-bar-views-list .tribe-bar-views-option a{padding:4px 10px;margin:0}.tribe-bar-disabled #tribe-bar-views .select2-container .select2-choice{line-height:18px;height:auto;font-size:13px}.tribe-bar-is-disabled .tribe-select2-results-views.select2-drop .select2-results li{padding:0 10px}.tribe-bar-disabled #tribe-bar-collapse-toggle,.tribe-bar-disabled .tribe-bar-submit{display:none}.tribe-select2-results-views span[class^="tribe-icon-"],.tribe-bar-views-list span[class^="tribe-icon-"],.tribe-bar-view-list a[class*="tribe-icon-"]{padding-left:24px;background-repeat:no-repeat;background-position:0 50%;min-height:16px;display:block}.tribe-select2-results-views span[class^="tribe-icon-"]{min-height:16px;display:inline-block}.tribe-select2-results-views span[class^="tribe-icon-"],.tribe-bar-views-list span[class^="tribe-icon-"],.tribe-bar-view-list a[class^="tribe-icon-"]{background-image:url(images/events-bar/icon-month.png);-webkit-background-size:15px 16px;background-size:15px 16px}.tribe-select2-results-views span.tribe-icon-list,.tribe-bar-views-list span.tribe-icon-list,.tribe-bar-view-list a.tribe-icon-list{background-image:url(images/events-bar/icon-list.png);-webkit-background-size:15px 10px;background-size:15px 10px}.tribe-bar-view-list a.tribe-icon-upcoming,.tribe-bar-view-list a.tribe-icon-month{padding-left:30px;background-position:10px 50%}.tribe-select2-results-views .tribe-icon-month,.tribe-bar-views-list span.tribe-icon-month,.tribe-bar-view-list a.tribe-icon-month{background-image:url(images/events-bar/icon-month.png);-webkit-background-size:15px 16px;background-size:15px 16px}.tribe-select2-results-views span.tribe-icon-week,.tribe-bar-views-list span.tribe-icon-week{background-image:url(images/events-bar/icon-week.png);-webkit-background-size:15px 16px;background-size:15px 16px}.tribe-select2-results-views span.tribe-icon-day,.tribe-bar-views-list span.tribe-icon-day{background-image:url(images/events-bar/icon-day.png);-webkit-background-size:15px 16px;background-size:15px 16px}.tribe-select2-results-views span.tribe-icon-photo,.tribe-bar-views-list span.tribe-icon-photo{background-image:url(images/events-bar/icon-photo.png);-webkit-background-size:15px 14px;background-size:15px 14px}.tribe-select2-results-views span.tribe-icon-map,.tribe-bar-views-list span.tribe-icon-map{background-image:url(images/events-bar/icon-map.png);-webkit-background-size:12px 16px;background-size:12px 16px;background-position:2px 50%}@media only screen and (min--moz-device-pixel-ratio:2),only screen and (-o-min-device-pixel-ratio:2/1),only screen and (-webkit-min-device-pixel-ratio:2),only screen and (min-device-pixel-ratio:2){.tribe-events-tooltip .tribe-events-arrow{background-image:url(images/tribe-tooltips@2x.png)}#tribe-bar-filters .tribe-bar-button-search .tribe-bar-btn-small{background-image:url(images/events-bar/icon-search@2x.png)}#tribe-events-bar .tribe-bar-button-settings span{background-image:url(images/events-bar/icon-gear@2x.png)}#tribe-events-bar [class^="tribe-bar-button-"]:after{background-image:url(../vendor/select2/select2x2.png)}.tribe-select2-results-views span[class^="tribe-icon-"],.tribe-bar-views-list span[class^="tribe-icon-"],.tribe-bar-view-list a[class^="tribe-icon-"]{background-image:url(images/events-bar/icon-month@2x.png)}.tribe-select2-results-views span.tribe-icon-list,.tribe-bar-views-list span.tribe-icon-list,.tribe-bar-view-list a.tribe-icon-upcoming{background-image:url(images/events-bar/icon-list@2x.png)}.tribe-select2-results-views span.tribe-icon-month,.tribe-bar-views-list span.tribe-icon-month,.tribe-bar-view-list a.tribe-icon-month{background-image:url(images/events-bar/icon-month@2x.png)}.tribe-select2-results-views span.tribe-icon-week,.tribe-bar-views-list span.tribe-icon-week{background-image:url(images/events-bar/icon-week@2x.png)}.tribe-select2-results-views span.tribe-icon-day,.tribe-bar-views-list span.tribe-icon-day{background-image:url(images/events-bar/icon-day@2x.png)}.tribe-select2-results-views span.tribe-icon-photo,.tribe-bar-views-list span.tribe-icon-photo{background-image:url(images/events-bar/icon-photo@2x.png)}.tribe-select2-results-views span.tribe-icon-map,.tribe-bar-views-list span.tribe-icon-map{background-image:url(images/events-bar/icon-map@2x.png)}}
resources/tribe-events-skeleton.css CHANGED
@@ -693,13 +693,15 @@ td.tickets_name {
693
  font-size: 13px;
694
  }
695
 
696
- .single-tribe_events #tribe-events-content form.cart {
 
697
  margin: 30px 0;
698
  }
699
 
700
  table.tribe-events-tickets {
701
  margin: 0;
702
  width: 100%;
 
703
  }
704
 
705
  table.tribe-events-tickets td {
@@ -708,6 +710,18 @@ table.tribe-events-tickets td {
708
  vertical-align: middle;
709
  }
710
 
 
 
 
 
 
 
 
 
 
 
 
 
711
  table.tribe-events-tickets .tickets_nostock {
712
  display: inline-block;
713
  text-align: center;
@@ -723,8 +737,6 @@ h2.tribe-events-tickets-title {
723
  @ Template: /modules/bar.php
724
  =============================================*/
725
 
726
-
727
-
728
  /* Views Select */
729
  #tribe-bar-views .tribe-bar-view-select,
730
  #tribe-bar-views .tribe-bar-view-select ~ .tribe-select2 {
693
  font-size: 13px;
694
  }
695
 
696
+ .single-tribe_events #tribe-events-content form.cart,
697
+ .single-tribe_events #tribe-events-content div.cart {
698
  margin: 30px 0;
699
  }
700
 
701
  table.tribe-events-tickets {
702
  margin: 0;
703
  width: 100%;
704
+ border-bottom: 0;
705
  }
706
 
707
  table.tribe-events-tickets td {
710
  vertical-align: middle;
711
  }
712
 
713
+ table.tribe-events-tickets td.wpec {
714
+ line-height: 0;
715
+ }
716
+
717
+ table.tribe-events-tickets td.woocommerce {
718
+ border-bottom: 0;
719
+ }
720
+
721
+ table.tribe-events-tickets td.wpec img {
722
+ display: none;
723
+ }
724
+
725
  table.tribe-events-tickets .tickets_nostock {
726
  display: inline-block;
727
  text-align: center;
737
  @ Template: /modules/bar.php
738
  =============================================*/
739
 
 
 
740
  /* Views Select */
741
  #tribe-bar-views .tribe-bar-view-select,
742
  #tribe-bar-views .tribe-bar-view-select ~ .tribe-select2 {
resources/tribe-events-skeleton.min.css CHANGED
@@ -1 +1 @@
1
- .tribe-events-back{margin:0 0 20px 0}.tribe-events-read-more{display:block}.tribe-events-day.page .hentry,.tribe-events-week.page .hentry{margin:0;padding:0 0 15px 0}.event .entry-title{line-height:inherit;padding:inherit}.updated-info{text-indent:-9999px;height:0}.tribe-events-event-schedule-details{display:inline}.events-archive .entry-content,.events-archive .entry-header{width:98%}.events-archive span.edit-link{display:none}.tribe-events-notices{background:#d9edf7;border:1px solid #bce8f1;color:#3a87ad;margin:10px 0 18px;padding:8px 35px 8px 14px;text-shadow:0 1px 0 #fff;-webkit-border-radius:4px;border-radius:4px}div.tribe-events-notices>ul,div.tribe-events-notices>ul>li{margin:0;padding:0;list-style:none}.clearfix:before,.tribe-clearfix:before,.clearfix:after,.tribe-clearfix:after{content:"";display:table}.clearfix:after,.tribe-clearfix:after{clear:both}.clearfix,.tribe-clearfix{zoom:1}.tribe-clear{clear:both}.tribe-events-visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.tribe-hide-text{text-indent:100%;white-space:nowrap;overflow:hidden}.tribe-events-error{display:none}.tribe-events-multi-event-day{color:#0f81bb}#tribe-events-content .tribe-events-abbr{border-bottom:0;cursor:default}.tribe-events-spinner{width:32px;height:32px;margin-left:-16px}.tribe-events-spinner-medium{width:24px;height:24px;margin-left:-12px}.tribe-events-spinner-small{width:16px;height:16px;margin-left:-8px}*+html .events-archive h2.tribe-events-page-title{padding-bottom:30px}*+html .events-archive .tribe-events-list h2.tribe-events-page-title{padding-bottom:0}*+html #tribe-events-header{margin-bottom:30px}h2.tribe-events-page-title{position:relative;z-index:0;text-align:center}.tribe-events-filter-view .tribe-events-list h2.tribe-events-page-title{width:100%;float:none}h2.tribe-events-page-title a{color:#000}h2.tribe-events-page-title a:hover,h2.tribe-events-page-title a:focus{color:#333;text-decoration:underline}#tribe-events-header,#tribe-events-footer{margin-bottom:.5em;overflow:hidden}#tribe-events-header .tribe-events-sub-nav,#tribe-events-footer .tribe-events-sub-nav{list-style-type:none;margin:0;overflow:hidden;line-height:normal;text-align:center}#tribe-events-header .tribe-events-sub-nav li,#tribe-events-footer .tribe-events-sub-nav li{display:inline-block;zoom:1;*display:inline;margin:0;vertical-align:middle}#tribe-events-header .tribe-events-sub-nav .tribe-events-nav-previous,#tribe-events-footer .tribe-events-sub-nav .tribe-events-nav-previous{margin-right:5px}#tribe-events-header .tribe-events-sub-nav .tribe-events-nav-next,#tribe-events-footer .tribe-events-sub-nav .tribe-events-nav-next{margin-left:5px}#tribe-events-header .tribe-events-sub-nav .tribe-events-nav-left,#tribe-events-footer .tribe-events-sub-nav .tribe-events-nav-left{text-align:left}#tribe-events-header .tribe-events-sub-nav .tribe-events-nav-right,#tribe-events-footer .tribe-events-sub-nav .tribe-events-nav-right{text-align:right}.tribe-events-ajax-loading{display:none;position:absolute;left:50%;-webkit-box-shadow:none;box-shadow:none}.tribe-events-loading .tribe-events-ajax-loading{display:block}#tribe-events-footer{margin-bottom:1em}.events-list #tribe-events-footer,.tribe-events-day #tribe-events-footer,.tribe-events-map #tribe-events-footer{margin:1.25em 0 18px}.single-tribe_events #tribe-events-header,.tribe-events-map #tribe-events-header{margin:24px 0 14px}.single-tribe_events #tribe-events-header li,.single-tribe_events #tribe-events-footer li{width:48%;padding-bottom:10px}#tribe-events-content ul.tribe-events-sub-nav{list-style-type:none;margin:0;overflow:hidden;text-align:center}#tribe-events-content ul.tribe-events-sub-nav li{display:inline-block;zoom:1;*display:inline;margin:0;vertical-align:middle}#tribe-events-content ul.tribe-events-sub-nav li.tribe-events-nav-prev{margin-right:5px}#tribe-events-content ul.tribe-events-sub-nav li.tribe-events-nav-next{margin-left:5px}#tribe-events-content li.tribe-events-nav-date{padding-top:16px}select.tribe-events-dropdown{width:auto;font-size:11px;margin:33px 9px 0 0}#tribe-events-events-picker,#tribe-events-picker{display:inline}#tribe-events-content{position:relative;margin-bottom:48px;padding:2px 0}#tribe-events-content.tribe-events-list{padding:0}.tribe-events-list h2.tribe-events-page-title{margin-bottom:15px}#tribe-events-content.tribe-events-list{margin-bottom:60px}.tribe-events-list .vevent.hentry.tribe-events-first{padding-top:0}.tribe-events-list .vevent.hentry h2{padding:0;line-height:1.2}.tribe-events-loop .tribe-events-event-meta{float:none;clear:both;border:0;margin:0 0 15px 0;padding:0;line-height:1.5;font-weight:normal;font-size:1.2em;overflow:visible}.tribe-events-list .tribe-events-loop .tribe-events-event-meta .recurringinfo{display:inline-block;zoom:1;*display:inline;white-space:pre}.tribe-events-event-meta address.tribe-events-address{display:inline}.tribe-events-list .tribe-events-loop .tribe-events-event-meta .event-is-recurring{position:relative}.tribe-events-list .time-details,.tribe-events-list .tribe-events-venue-details{line-height:1.2;margin:0;display:block}.tribe-events-list .time-details{margin:0 0 8px 0}.tribe-events-loop{clear:both}.tribe-events-loop .vevent.tribe-events-last{border-bottom:0}.tribe-events-list .tribe-events-loop .tribe-events-content{clear:both;width:100%;padding:0}.events-archive h3 .published,.single-tribe_venue h3 .published{margin-top:0;font-style:italic;text-transform:none}.tribe-events-loop .tribe-events-event-meta dl{margin:0}.tribe-events-loop .tribe-events-event-meta dt{font-weight:bold;padding-right:12px;width:auto}.tribe-events-loop .tribe-events-event-meta dd{margin-bottom:.25em;margin-left:6.5em}.single-tribe_events #tribe-events-content{padding:0}.single-tribe_events .tribe-events-schedule .tribe-events-divider{margin-right:10px}.single-tribe_events .tribe-events-schedule .recurringinfo{margin-right:10px}.single-tribe_events .tribe-events-schedule .tribe-events-cost{margin-right:10px}#tribe-events-content .tribe-events-single-event-description img.attachment-post-thumbnail{margin-left:auto;margin-right:auto;display:block;text-align:center}.tribe-events-meta-group+.tribe-events-single-section-title{margin-top:0}#eventbrite-embed{width:100%;min-height:225px;margin:24px 0}.eventbrite-ticket-embed{margin:0 0 30px 0}.tribe-events-list .vevent.hentry.tribe-event-end-month{border-bottom:0;padding-bottom:0}.single-tribe_events .tribe-events-schedule h2{display:inline-block;zoom:1;*display:inline;vertical-align:middle}.single-tribe_events .tribe-events-cal-links{display:inline-block;zoom:1;*display:inline;margin:0 0 20px 0;vertical-align:middle}.single-tribe_events .tribe-events-event-image{clear:both;text-align:center;margin-bottom:30px}.single-tribe_events .tribe-events-event-meta{width:100%;margin:30px -4% 30px 0}.single-tribe_events .tribe-events-venue-map{width:63%;float:right}.single-tribe_events #tribe-events-gmap{height:0 !important;padding-top:50%;width:100% !important;margin:0 !important}.single-tribe_events .tribe-events-meta-group .tribe-events-venue-map{float:none;margin:0;width:100%}.single-tribe_events .tribe-events-meta-group #tribe-events-gmap{height:0 !important;padding-top:100%;width:100% !important;margin-top:50px}.tribe-events-event-meta:first-child{border-top:1px solid #bbb}.single-tribe_events .tribe-events-event-meta dl{margin:0}.tribe-events-event-meta dt{clear:left;font-weight:bold}#tribe-events-content .tribe-events-event-meta dd span.adr{display:block}.single-tribe_events .tribe-events-single-event-description{width:auto;padding:0;margin-bottom:30px}#tribe-events-content table.tribe-events-calendar{margin:0 0 .6em;clear:both;font-size:12px;border-collapse:collapse}#tribe-events-content table.tribe-events-calendar,#tribe-events-content .tribe-events-calendar td{border:1px solid #bbb}.tribe-events-calendar div[id*="tribe-events-daynum-"],.tribe-events-calendar div[id*="tribe-events-daynum-"] a{font-size:11px;font-weight:bold}#tribe-events-content .tribe-events-calendar td{height:110px;width:14.28%;vertical-align:top;padding:0 0 .5em;font-size:12px;position:relative}.tribe-events-calendar .tribe-events-tooltip,.tribe-events-week .tribe-events-tooltip,.recurring-info-tooltip{border:1px solid #666;position:absolute;z-index:1001;bottom:30px;left:3px;width:320px;background-color:#f9f9f9;color:#333;line-height:1.4;display:none}.tribe-events-tooltip .tribe-events-arrow{width:18px;height:11px;background-image:url(images/tribe-tooltips.png);background-repeat:no-repeat;background-position:0 0;-webkit-background-size:44px 19px;background-size:44px 19px;display:block;position:absolute;bottom:-11px;left:20px}.tribe-events-calendar .tribe-events-right .tribe-events-tooltip,.tribe-events-week .tribe-events-right .tribe-events-tooltip,.recurring-info-tooltip{left:auto;right:3px}.tribe-events-right .tribe-events-tooltip .tribe-events-arrow{left:auto;right:30px}.recurringinfo{display:inline-block;zoom:1;*display:inline;position:relative}.event-is-recurring{position:relative}.recurring-info-tooltip.tribe-events-tooltip{left:10px;width:200px;max-width:320px;padding-bottom:.8em}.events-archive.events-gridview #tribe-events-content table .vevent{margin:0 5%;padding:6px 8px;border-bottom:1px solid #e7e7e7}.events-archive.events-gridview #tribe-events-content table .tribe-events-last{border-bottom:0}.tribe-events-viewmore{margin:0 5%;padding:6px 8px;font-weight:bold;line-height:1}.tribe-events-calendar th{width:250px;height:10px;padding:4px 0;text-align:center;text-transform:uppercase;letter-spacing:1px}.tribe-events-calendar td div[id*="tribe-events-daynum-"]{padding:6px 9px;line-height:1.2}.tribe-events-calendar td a{font-size:91.7%}.tribe-events-calendar div[id*="tribe-events-event-"],.tribe-events-calendar div[id*="tribe-events-daynum-"]{position:relative;margin:0}#tribe-events-content .tribe-events-calendar div[id*="tribe-events-event-"] h3.entry-title{line-height:1.5;font-size:91.7%;font-weight:normal;text-transform:none;margin:0;padding:0;letter-spacing:0}.tribe-events-calendar div[id*="tribe-events-event-"] h3.entry-title a{font-size:100%}#tribe-events-content .tribe-events-tooltip h4.entry-title{margin:0;font-size:12px;padding:0 6px;min-height:24px;line-height:24px;letter-spacing:1px;font-weight:normal}.tribe-events-tooltip .tribe-events-event-body{font-size:11px;padding:3px 6px 6px;font-weight:normal}.tribe-events-tooltip .duration{font-style:italic;margin:3px 0}.tribe-events-tooltip .tribe-events-event-thumb{float:left;padding:5px 5px 5px 0}.tribe-events-tooltip p.entry-summary{padding:0;font-size:11px;line-height:1.5}.tribe-events-list-widget ol,.tribe-events-adv-list-widget ol{list-style-type:square;margin-left:0;margin-bottom:0}.tribe-events-list-widget li,.singular.page li.hentry,.tribe-events-adv-list-widget li,.singular.page li.hentry{margin:6px 0;padding:0 0 10px 0}.tribe-events-list-widget li p.entry-title.summary,.tribe-events-adv-list-widget li p.entry-title.summary{margin-bottom:0;padding:0;font-size:100%}table.tribe-events-tickets .tickets_price{font-style:italic;color:#000;font-weight:bold}td.tickets_name{color:#777;font-size:13px}.single-tribe_events #tribe-events-content form.cart{margin:30px 0}table.tribe-events-tickets{margin:0;width:100%}table.tribe-events-tickets td{border-top:1px solid #ddd;padding:8px 10px 8px 0;vertical-align:middle}table.tribe-events-tickets .tickets_nostock{display:inline-block;text-align:center}h2.tribe-events-tickets-title{margin:20px 0 15px;font-size:1.4em;font-weight:bold}#tribe-bar-views .tribe-bar-view-select,#tribe-bar-views .tribe-bar-view-select ~ .tribe-select2{display:none}#tribe-bar-views .tribe-select2{width:108px !important;float:left}.tribe-select2-results .select2-results{margin:4px 0;padding:0}.tribe-select2-results .select2-results .select2-result-label{padding:6px 8px;color:#444;line-height:14px}.tribe-select2-results .select2-results .select2-highlighted{background:#ddd;color:#444}#tribe-bar-views .select2-container .select2-choice div{width:18px}#tribe-bar-views .select2-container .select2-choice span{margin-right:18px}#tribe-bar-views .select2-container .select2-choice span span{margin-right:0}.tribe-has-settings #tribe-bar-dates{margin-left:-331px}.tribe-has-settings #tribe-bar-views{width:142px;margin-left:-142px}.tribe-has-settings #tribe-bar-views .select2-container .select2-choice{-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-webkit-border-top-right-radius:0;border-top-right-radius:0}.tribe-has-settings #tribe-bar-views .select2-container .select2-choice div{-webkit-border-radius:0;border-radius:0;background:transparent;background-image:none;filter:none;border-left:0}#tribe-events-bar .tribe-bar-settings{overflow:hidden}#tribe-events-bar .tribe-bar-button-settings span{background-image:url(images/events-bar/icon-gear.png);background-repeat:no-repeat;background-position:50% 50%;-webkit-background-size:14px 14px;background-size:14px 14px;height:100%;float:left;width:14px;display:inline-block;position:relative}#tribe-bar-views .tribe-bar-drop-content button{width:100%}#tribe-events-bar .tribe-bar-button-settings{border-left-color:transparent;-webkit-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;float:left;margin-left:-1px}.tribe-bar-settings .tribe-bar-drop-content{width:285px;right:-5px;padding:10px 12px 4px}.tribe-bar-full #tribe-bar-views .tribe-bar-view-select,.tribe-bar-full #tribe-bar-views .tribe-bar-view-select ~ .tribe-select2{display:none}.tribe-bar-mini #tribe-bar-views .tribe-bar-view-select,.tribe-bar-mini #tribe-bar-views .tribe-bar-view-select ~ .tribe-select2{display:block}.tribe-bar-full #tribe-bar-views ul.tribe-bar-view-list{display:block}.tribe-bar-mini #tribe-bar-views ul.tribe-bar-view-list{display:none}@media screen and (max-width:845px){#tribe-bar-views ul.tribe-bar-view-list{display:none}#tribe-bar-views .tribe-bar-view-select,#tribe-bar-views .tribe-bar-view-select ~ .tribe-select2{display:block}}@media screen and (min-width:676px){.tribe-bar-full #tribe-bar-filters .tribe-bar-drop-content{display:inline !important}}
1
+ .tribe-events-back{margin:0 0 20px 0}.tribe-events-read-more{display:block}.tribe-events-day.page .hentry,.tribe-events-week.page .hentry{margin:0;padding:0 0 15px 0}.event .entry-title{line-height:inherit;padding:inherit}.updated-info{text-indent:-9999px;height:0}.tribe-events-event-schedule-details{display:inline}.events-archive .entry-content,.events-archive .entry-header{width:98%}.events-archive span.edit-link{display:none}.tribe-events-notices{background:#d9edf7;border:1px solid #bce8f1;color:#3a87ad;margin:10px 0 18px;padding:8px 35px 8px 14px;text-shadow:0 1px 0 #fff;-webkit-border-radius:4px;border-radius:4px}div.tribe-events-notices>ul,div.tribe-events-notices>ul>li{margin:0;padding:0;list-style:none}.clearfix:before,.tribe-clearfix:before,.clearfix:after,.tribe-clearfix:after{content:"";display:table}.clearfix:after,.tribe-clearfix:after{clear:both}.clearfix,.tribe-clearfix{zoom:1}.tribe-clear{clear:both}.tribe-events-visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.tribe-hide-text{text-indent:100%;white-space:nowrap;overflow:hidden}.tribe-events-error{display:none}.tribe-events-multi-event-day{color:#0f81bb}#tribe-events-content .tribe-events-abbr{border-bottom:0;cursor:default}.tribe-events-spinner{width:32px;height:32px;margin-left:-16px}.tribe-events-spinner-medium{width:24px;height:24px;margin-left:-12px}.tribe-events-spinner-small{width:16px;height:16px;margin-left:-8px}*+html .events-archive h2.tribe-events-page-title{padding-bottom:30px}*+html .events-archive .tribe-events-list h2.tribe-events-page-title{padding-bottom:0}*+html #tribe-events-header{margin-bottom:30px}h2.tribe-events-page-title{position:relative;z-index:0;text-align:center}.tribe-events-filter-view .tribe-events-list h2.tribe-events-page-title{width:100%;float:none}h2.tribe-events-page-title a{color:#000}h2.tribe-events-page-title a:hover,h2.tribe-events-page-title a:focus{color:#333;text-decoration:underline}#tribe-events-header,#tribe-events-footer{margin-bottom:.5em;overflow:hidden}#tribe-events-header .tribe-events-sub-nav,#tribe-events-footer .tribe-events-sub-nav{list-style-type:none;margin:0;overflow:hidden;line-height:normal;text-align:center}#tribe-events-header .tribe-events-sub-nav li,#tribe-events-footer .tribe-events-sub-nav li{display:inline-block;zoom:1;*display:inline;margin:0;vertical-align:middle}#tribe-events-header .tribe-events-sub-nav .tribe-events-nav-previous,#tribe-events-footer .tribe-events-sub-nav .tribe-events-nav-previous{margin-right:5px}#tribe-events-header .tribe-events-sub-nav .tribe-events-nav-next,#tribe-events-footer .tribe-events-sub-nav .tribe-events-nav-next{margin-left:5px}#tribe-events-header .tribe-events-sub-nav .tribe-events-nav-left,#tribe-events-footer .tribe-events-sub-nav .tribe-events-nav-left{text-align:left}#tribe-events-header .tribe-events-sub-nav .tribe-events-nav-right,#tribe-events-footer .tribe-events-sub-nav .tribe-events-nav-right{text-align:right}.tribe-events-ajax-loading{display:none;position:absolute;left:50%;-webkit-box-shadow:none;box-shadow:none}.tribe-events-loading .tribe-events-ajax-loading{display:block}#tribe-events-footer{margin-bottom:1em}.events-list #tribe-events-footer,.tribe-events-day #tribe-events-footer,.tribe-events-map #tribe-events-footer{margin:1.25em 0 18px}.single-tribe_events #tribe-events-header,.tribe-events-map #tribe-events-header{margin:24px 0 14px}.single-tribe_events #tribe-events-header li,.single-tribe_events #tribe-events-footer li{width:48%;padding-bottom:10px}#tribe-events-content ul.tribe-events-sub-nav{list-style-type:none;margin:0;overflow:hidden;text-align:center}#tribe-events-content ul.tribe-events-sub-nav li{display:inline-block;zoom:1;*display:inline;margin:0;vertical-align:middle}#tribe-events-content ul.tribe-events-sub-nav li.tribe-events-nav-prev{margin-right:5px}#tribe-events-content ul.tribe-events-sub-nav li.tribe-events-nav-next{margin-left:5px}#tribe-events-content li.tribe-events-nav-date{padding-top:16px}select.tribe-events-dropdown{width:auto;font-size:11px;margin:33px 9px 0 0}#tribe-events-events-picker,#tribe-events-picker{display:inline}#tribe-events-content{position:relative;margin-bottom:48px;padding:2px 0}#tribe-events-content.tribe-events-list{padding:0}.tribe-events-list h2.tribe-events-page-title{margin-bottom:15px}#tribe-events-content.tribe-events-list{margin-bottom:60px}.tribe-events-list .vevent.hentry.tribe-events-first{padding-top:0}.tribe-events-list .vevent.hentry h2{padding:0;line-height:1.2}.tribe-events-loop .tribe-events-event-meta{float:none;clear:both;border:0;margin:0 0 15px 0;padding:0;line-height:1.5;font-weight:normal;font-size:1.2em;overflow:visible}.tribe-events-list .tribe-events-loop .tribe-events-event-meta .recurringinfo{display:inline-block;zoom:1;*display:inline;white-space:pre}.tribe-events-event-meta address.tribe-events-address{display:inline}.tribe-events-list .tribe-events-loop .tribe-events-event-meta .event-is-recurring{position:relative}.tribe-events-list .time-details,.tribe-events-list .tribe-events-venue-details{line-height:1.2;margin:0;display:block}.tribe-events-list .time-details{margin:0 0 8px 0}.tribe-events-loop{clear:both}.tribe-events-loop .vevent.tribe-events-last{border-bottom:0}.tribe-events-list .tribe-events-loop .tribe-events-content{clear:both;width:100%;padding:0}.events-archive h3 .published,.single-tribe_venue h3 .published{margin-top:0;font-style:italic;text-transform:none}.tribe-events-loop .tribe-events-event-meta dl{margin:0}.tribe-events-loop .tribe-events-event-meta dt{font-weight:bold;padding-right:12px;width:auto}.tribe-events-loop .tribe-events-event-meta dd{margin-bottom:.25em;margin-left:6.5em}.single-tribe_events #tribe-events-content{padding:0}.single-tribe_events .tribe-events-schedule .tribe-events-divider{margin-right:10px}.single-tribe_events .tribe-events-schedule .recurringinfo{margin-right:10px}.single-tribe_events .tribe-events-schedule .tribe-events-cost{margin-right:10px}#tribe-events-content .tribe-events-single-event-description img.attachment-post-thumbnail{margin-left:auto;margin-right:auto;display:block;text-align:center}.tribe-events-meta-group+.tribe-events-single-section-title{margin-top:0}#eventbrite-embed{width:100%;min-height:225px;margin:24px 0}.eventbrite-ticket-embed{margin:0 0 30px 0}.tribe-events-list .vevent.hentry.tribe-event-end-month{border-bottom:0;padding-bottom:0}.single-tribe_events .tribe-events-schedule h2{display:inline-block;zoom:1;*display:inline;vertical-align:middle}.single-tribe_events .tribe-events-cal-links{display:inline-block;zoom:1;*display:inline;margin:0 0 20px 0;vertical-align:middle}.single-tribe_events .tribe-events-event-image{clear:both;text-align:center;margin-bottom:30px}.single-tribe_events .tribe-events-event-meta{width:100%;margin:30px -4% 30px 0}.single-tribe_events .tribe-events-venue-map{width:63%;float:right}.single-tribe_events #tribe-events-gmap{height:0 !important;padding-top:50%;width:100% !important;margin:0 !important}.single-tribe_events .tribe-events-meta-group .tribe-events-venue-map{float:none;margin:0;width:100%}.single-tribe_events .tribe-events-meta-group #tribe-events-gmap{height:0 !important;padding-top:100%;width:100% !important;margin-top:50px}.tribe-events-event-meta:first-child{border-top:1px solid #bbb}.single-tribe_events .tribe-events-event-meta dl{margin:0}.tribe-events-event-meta dt{clear:left;font-weight:bold}#tribe-events-content .tribe-events-event-meta dd span.adr{display:block}.single-tribe_events .tribe-events-single-event-description{width:auto;padding:0;margin-bottom:30px}#tribe-events-content table.tribe-events-calendar{margin:0 0 .6em;clear:both;font-size:12px;border-collapse:collapse}#tribe-events-content table.tribe-events-calendar,#tribe-events-content .tribe-events-calendar td{border:1px solid #bbb}.tribe-events-calendar div[id*="tribe-events-daynum-"],.tribe-events-calendar div[id*="tribe-events-daynum-"] a{font-size:11px;font-weight:bold}#tribe-events-content .tribe-events-calendar td{height:110px;width:14.28%;vertical-align:top;padding:0 0 .5em;font-size:12px;position:relative}.tribe-events-calendar .tribe-events-tooltip,.tribe-events-week .tribe-events-tooltip,.recurring-info-tooltip{border:1px solid #666;position:absolute;z-index:1001;bottom:30px;left:3px;width:320px;background-color:#f9f9f9;color:#333;line-height:1.4;display:none}.tribe-events-tooltip .tribe-events-arrow{width:18px;height:11px;background-image:url(images/tribe-tooltips.png);background-repeat:no-repeat;background-position:0 0;-webkit-background-size:44px 19px;background-size:44px 19px;display:block;position:absolute;bottom:-11px;left:20px}.tribe-events-calendar .tribe-events-right .tribe-events-tooltip,.tribe-events-week .tribe-events-right .tribe-events-tooltip,.recurring-info-tooltip{left:auto;right:3px}.tribe-events-right .tribe-events-tooltip .tribe-events-arrow{left:auto;right:30px}.recurringinfo{display:inline-block;zoom:1;*display:inline;position:relative}.event-is-recurring{position:relative}.recurring-info-tooltip.tribe-events-tooltip{left:10px;width:200px;max-width:320px;padding-bottom:.8em}.events-archive.events-gridview #tribe-events-content table .vevent{margin:0 5%;padding:6px 8px;border-bottom:1px solid #e7e7e7}.events-archive.events-gridview #tribe-events-content table .tribe-events-last{border-bottom:0}.tribe-events-viewmore{margin:0 5%;padding:6px 8px;font-weight:bold;line-height:1}.tribe-events-calendar th{width:250px;height:10px;padding:4px 0;text-align:center;text-transform:uppercase;letter-spacing:1px}.tribe-events-calendar td div[id*="tribe-events-daynum-"]{padding:6px 9px;line-height:1.2}.tribe-events-calendar td a{font-size:91.7%}.tribe-events-calendar div[id*="tribe-events-event-"],.tribe-events-calendar div[id*="tribe-events-daynum-"]{position:relative;margin:0}#tribe-events-content .tribe-events-calendar div[id*="tribe-events-event-"] h3.entry-title{line-height:1.5;font-size:91.7%;font-weight:normal;text-transform:none;margin:0;padding:0;letter-spacing:0}.tribe-events-calendar div[id*="tribe-events-event-"] h3.entry-title a{font-size:100%}#tribe-events-content .tribe-events-tooltip h4.entry-title{margin:0;font-size:12px;padding:0 6px;min-height:24px;line-height:24px;letter-spacing:1px;font-weight:normal}.tribe-events-tooltip .tribe-events-event-body{font-size:11px;padding:3px 6px 6px;font-weight:normal}.tribe-events-tooltip .duration{font-style:italic;margin:3px 0}.tribe-events-tooltip .tribe-events-event-thumb{float:left;padding:5px 5px 5px 0}.tribe-events-tooltip p.entry-summary{padding:0;font-size:11px;line-height:1.5}.tribe-events-list-widget ol,.tribe-events-adv-list-widget ol{list-style-type:square;margin-left:0;margin-bottom:0}.tribe-events-list-widget li,.singular.page li.hentry,.tribe-events-adv-list-widget li,.singular.page li.hentry{margin:6px 0;padding:0 0 10px 0}.tribe-events-list-widget li p.entry-title.summary,.tribe-events-adv-list-widget li p.entry-title.summary{margin-bottom:0;padding:0;font-size:100%}table.tribe-events-tickets .tickets_price{font-style:italic;color:#000;font-weight:bold}td.tickets_name{color:#777;font-size:13px}.single-tribe_events #tribe-events-content form.cart,.single-tribe_events #tribe-events-content div.cart{margin:30px 0}table.tribe-events-tickets{margin:0;width:100%;border-bottom:0}table.tribe-events-tickets td{border-top:1px solid #ddd;padding:8px 10px 8px 0;vertical-align:middle}table.tribe-events-tickets td.wpec{line-height:0}table.tribe-events-tickets td.woocommerce{border-bottom:0}table.tribe-events-tickets td.wpec img{display:none}table.tribe-events-tickets .tickets_nostock{display:inline-block;text-align:center}h2.tribe-events-tickets-title{margin:20px 0 15px;font-size:1.4em;font-weight:bold}#tribe-bar-views .tribe-bar-view-select,#tribe-bar-views .tribe-bar-view-select ~ .tribe-select2{display:none}#tribe-bar-views .tribe-select2{width:108px !important;float:left}.tribe-select2-results .select2-results{margin:4px 0;padding:0}.tribe-select2-results .select2-results .select2-result-label{padding:6px 8px;color:#444;line-height:14px}.tribe-select2-results .select2-results .select2-highlighted{background:#ddd;color:#444}#tribe-bar-views .select2-container .select2-choice div{width:18px}#tribe-bar-views .select2-container .select2-choice span{margin-right:18px}#tribe-bar-views .select2-container .select2-choice span span{margin-right:0}.tribe-has-settings #tribe-bar-dates{margin-left:-331px}.tribe-has-settings #tribe-bar-views{width:142px;margin-left:-142px}.tribe-has-settings #tribe-bar-views .select2-container .select2-choice{-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-webkit-border-top-right-radius:0;border-top-right-radius:0}.tribe-has-settings #tribe-bar-views .select2-container .select2-choice div{-webkit-border-radius:0;border-radius:0;background:transparent;background-image:none;filter:none;border-left:0}#tribe-events-bar .tribe-bar-settings{overflow:hidden}#tribe-events-bar .tribe-bar-button-settings span{background-image:url(images/events-bar/icon-gear.png);background-repeat:no-repeat;background-position:50% 50%;-webkit-background-size:14px 14px;background-size:14px 14px;height:100%;float:left;width:14px;display:inline-block;position:relative}#tribe-bar-views .tribe-bar-drop-content button{width:100%}#tribe-events-bar .tribe-bar-button-settings{border-left-color:transparent;-webkit-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;float:left;margin-left:-1px}.tribe-bar-settings .tribe-bar-drop-content{width:285px;right:-5px;padding:10px 12px 4px}.tribe-bar-full #tribe-bar-views .tribe-bar-view-select,.tribe-bar-full #tribe-bar-views .tribe-bar-view-select ~ .tribe-select2{display:none}.tribe-bar-mini #tribe-bar-views .tribe-bar-view-select,.tribe-bar-mini #tribe-bar-views .tribe-bar-view-select ~ .tribe-select2{display:block}.tribe-bar-full #tribe-bar-views ul.tribe-bar-view-list{display:block}.tribe-bar-mini #tribe-bar-views ul.tribe-bar-view-list{display:none}@media screen and (max-width:845px){#tribe-bar-views ul.tribe-bar-view-list{display:none}#tribe-bar-views .tribe-bar-view-select,#tribe-bar-views .tribe-bar-view-select ~ .tribe-select2{display:block}}@media screen and (min-width:676px){.tribe-bar-full #tribe-bar-filters .tribe-bar-drop-content{display:inline !important}}
resources/tribe-events-theme.css CHANGED
@@ -28,7 +28,9 @@
28
  .tribe-events-calendar td.tribe-events-present div[id*="tribe-events-daynum-"] > a,
29
  #tribe_events_filters_wrapper input[type=submit],
30
  .tribe-events-button,
 
31
  .tribe-events-button.tribe-inactive,
 
32
  .tribe-events-button:hover,
33
  .tribe-events-button.tribe-active:hover {
34
  background-color: #21759b;
@@ -41,6 +43,7 @@
41
 
42
  .tribe-events-button.tribe-inactive,
43
  .tribe-events-button:hover,
 
44
  .tribe-events-button.tribe-active:hover {
45
  color:#fff;
46
  }
@@ -253,7 +256,9 @@ h2.tribe-events-page-title,
253
  }
254
 
255
  .single-tribe_events a.tribe-events-ical,
256
- .single-tribe_events a.tribe-events-gcal {
 
 
257
  background-color: transparent;
258
  text-transform: none;
259
  font-size: 14px;
@@ -261,6 +266,7 @@ h2.tribe-events-page-title,
261
  letter-spacing: 0;
262
  padding: 0;
263
  float: none;
 
264
  }
265
 
266
  /* Featured Image */
@@ -463,15 +469,14 @@ h2.tribe-events-page-title,
463
  border-top-color: transparent;
464
  }
465
 
466
-
467
  /* = WooTickets
468
  =============================================*/
469
  h2.tribe-events-tickets-title {
470
  font-size: 17px;
471
  }
472
 
473
-
474
- /* Events Retina Bits */
475
  @media
476
  only screen and (min--moz-device-pixel-ratio: 2),
477
  only screen and (-o-min-device-pixel-ratio: 2/1),
28
  .tribe-events-calendar td.tribe-events-present div[id*="tribe-events-daynum-"] > a,
29
  #tribe_events_filters_wrapper input[type=submit],
30
  .tribe-events-button,
31
+ .entry-content .tribe-events-button,
32
  .tribe-events-button.tribe-inactive,
33
+ .entry-content .tribe-events-button:hover,
34
  .tribe-events-button:hover,
35
  .tribe-events-button.tribe-active:hover {
36
  background-color: #21759b;
43
 
44
  .tribe-events-button.tribe-inactive,
45
  .tribe-events-button:hover,
46
+ .entry-content .tribe-events-button:hover,
47
  .tribe-events-button.tribe-active:hover {
48
  color:#fff;
49
  }
256
  }
257
 
258
  .single-tribe_events a.tribe-events-ical,
259
+ .single-tribe_events a.tribe-events-ical:hover,
260
+ .single-tribe_events a.tribe-events-gcal,
261
+ .single-tribe_events a.tribe-events-gcal:hover {
262
  background-color: transparent;
263
  text-transform: none;
264
  font-size: 14px;
266
  letter-spacing: 0;
267
  padding: 0;
268
  float: none;
269
+ color: #21759B;
270
  }
271
 
272
  /* Featured Image */
469
  border-top-color: transparent;
470
  }
471
 
 
472
  /* = WooTickets
473
  =============================================*/
474
  h2.tribe-events-tickets-title {
475
  font-size: 17px;
476
  }
477
 
478
+ /* = Retina
479
+ =============================================*/
480
  @media
481
  only screen and (min--moz-device-pixel-ratio: 2),
482
  only screen and (-o-min-device-pixel-ratio: 2/1),
resources/tribe-events-theme.min.css CHANGED
@@ -1 +1 @@
1
- #tribe-events-content .tribe-events-tooltip h4,#tribe_events_filters_wrapper .tribe_events_slider_val,.single-tribe_events a.tribe-events-ical,.single-tribe_events a.tribe-events-gcal{color:#21759b}.tribe-events-calendar td.tribe-events-present div[id*="tribe-events-daynum-"],.tribe-events-calendar td.tribe-events-present div[id*="tribe-events-daynum-"]>a,#tribe_events_filters_wrapper input[type=submit],.tribe-events-button,.tribe-events-button.tribe-inactive,.tribe-events-button:hover,.tribe-events-button.tribe-active:hover{background-color:#21759b}#tribe_events_filters_wrapper input[type=submit]:hover,.tribe-events-button.tribe-active:hover{background-color:#0f3647}.tribe-events-button.tribe-inactive,.tribe-events-button:hover,.tribe-events-button.tribe-active:hover{color:#fff}#tribe_events_filters_wrapper h3 span:after{border-top-color:#21759b}#tribe_events_filters_wrapper .tribe_events_filter_item.closed h3 span:after{border-left-color:#21759b}ul.tribe-events-sub-nav a,.tribe-events-back a,.tribe-events-list-widget .tribe-events-widget-link a,.tribe-events-adv-list-widget .tribe-events-widget-link a{font-size:15px;font-weight:bold}.tribe-events-gcal{margin-right:1.25em}.tribe-events-divider{display:none}.tribe-events-event-image{margin-bottom:1.25em;text-align:left}h2.tribe-events-page-title,#tribe-geo-results h2.tribe-events-page-title{font-size:30px;font-weight:bold}#tribe-events-header .tribe-events-sub-nav li,#tribe-events-header .tribe-events-sub-nav .tribe-events-nav-next a{display:none}#tribe-events-header .tribe-events-sub-nav .tribe-events-nav-next{display:block}.single-tribe_events #tribe-events-footer,.tribe-events-day #tribe-events-footer,.events-list #tribe-events-footer,.tribe-events-map #tribe-events-footer,.tribe-events-photo #tribe-events-footer{border-top:1px solid #e5e5e5;padding-top:2em}.single-tribe_events #tribe-events-header{display:none}@media only screen and (max-width:767px){#tribe-events-header .tribe-events-sub-nav li a{display:none}}.tribe-events-list .vevent.hentry{border-bottom:0;padding:1.75em 0;position:relative}.tribe-events-list .vevent.hentry h2{font-size:1.6em}.tribe-events-list-separator-year{font-size:28px;padding-top:1.25em}.tribe-events-list-separator-year+.tribe-events-list-separator-month{margin-top:.25em}.tribe-events-list-separator-month{text-transform:none;font-size:24px;margin:1.25em auto;text-align:center;position:relative;background-color:transparent;z-index:1}.tribe-events-list-separator-month:after{content:'';border-bottom:1px solid #c2c2c2;height:1px;width:100%;display:block;position:absolute;top:50%;left:0;z-index:-1}.tribe-events-list-separator-month span{background-color:#fff;padding:0 7.5%}.tribe-events-list-separator-month+.vevent.hentry.tribe-events-first{padding-top:1.5em}.tribe-events-list .vevent.hentry.tribe-event-end-month{padding-bottom:1.5em}.tribe-events-loop .tribe-events-event-meta{margin-bottom:1em;font-size:13px}.tribe-events-list .tribe-events-loop .tribe-events-event-meta .recurringinfo{padding-left:0;font-weight:normal;vertical-align:top}.tribe-events-list .time-details,.tribe-events-list .tribe-events-venue-details{line-height:1.2}.tribe-events-list .tribe-events-venue-details,.tribe-events-event-meta address.tribe-events-address{font-weight:normal;font-style:italic}.tribe-events-event-meta address.tribe-events-address{padding-right:3px}@media only screen and (max-width:767px){.tribe-events-list .tribe-events-loop .tribe-events-event-meta .recurringinfo{display:block;padding:0}}.events-list .tribe-events-loop,.tribe-events-day .tribe-events-loop,.single-tribe_venue .tribe-events-loop,.single-tribe_organizer .tribe-events-loop{max-width:700px;margin:0 auto}.single-tribe_events h2.tribe-events-single-event-title{font-size:33px}.tribe-events-schedule{margin:1em 0 1.5em}.single-tribe_events .tribe-events-schedule .tribe-events-divider{display:inline-block;zoom:1;*display:inline;font-weight:normal}.single-tribe_events .tribe-events-schedule .recurringinfo{margin-right:.5em}.single-tribe_events .tribe-events-schedule h3{font-size:18px;margin:0}.single-tribe_events .tribe-events-cal-links{margin-bottom:1.75em;display:block;overflow:hidden}.single-tribe_events a.tribe-events-ical,.single-tribe_events a.tribe-events-gcal{background-color:transparent;text-transform:none;font-size:14px;font-weight:bold;letter-spacing:0;padding:0;float:none}.single-tribe_events .tribe-events-event-image{text-align:left;margin-bottom:1.25em}.tribe-events-event-schedule-details{margin-right:.5em}.tribe-events-meta-group .tribe-events-single-section-title{font-size:17px}.single-tribe_events .tribe-events-event-meta{font-size:14px}@media only screen and (max-width:767px){.single-tribe_events .tribe-events-schedule .recurringinfo{display:block;margin:1em 0 0}.single-tribe_events .tribe-events-schedule .recurringinfo .tribe-events-divider{display:none}}#tribe-events-content .tribe-events-calendar td{border:1px solid #d2d2d2;border-top:0;-webkit-transition:all .2s cubic-bezier(0.550,0.085,0.680,0.530);-moz-transition:all .2s cubic-bezier(0.550,0.085,0.680,0.530);-ms-transition:all .2s cubic-bezier(0.550,0.085,0.680,0.530);-o-transition:all .2s cubic-bezier(0.550,0.085,0.680,0.530);transition:all .2s cubic-bezier(0.550,0.085,0.680,0.530)}#tribe-events-content .tribe-events-calendar td:hover{background:#f7f7f7;-webkit-box-shadow:rgba(0,0,0,0.2) 0 0 10px;box-shadow:rgba(0,0,0,0.2) 0 0 10px}.tribe-events-othermonth{background:#f9f9f9}#tribe-events-content .tribe-events-calendar .tribe-events-othermonth:hover{-webkit-box-shadow:none;box-shadow:none}#tribe-events-content table.tribe-events-calendar{border-bottom:1px solid #d2d2d2;border-top:0}.tribe-events-calendar div[id*="tribe-events-daynum-"],.tribe-events-calendar div[id*="tribe-events-daynum-"] a{background-color:#b2b2b2;color:#fff;font-size:12px;font-weight:bold}.tribe-events-calendar div[id*="tribe-events-daynum-"] a:hover{color:#666}.tribe-events-calendar td.tribe-events-past div[id*="tribe-events-daynum-"],.tribe-events-calendar td.tribe-events-past div[id*="tribe-events-daynum-"]>a{background-color:#e0e0e0;color:#fff}.tribe-events-calendar td.tribe-events-past .tribe-events-month-event-title a,.tribe-events-calendar td.tribe-events-past .tribe-events-viewmore a{opacity:.5;filter:Alpha(opacity=50)}.tribe-events-calendar .tribe-events-tooltip,.tribe-events-week .tribe-events-tooltip,.recurring-info-tooltip{border:0;background-color:#fff;color:#606060;padding:.75em 1em 1.15em;-webkit-box-shadow:3px 4px 21px rgba(0,0,0,.38);-moz-box-shadow:3px 4px 21px rgba(0,0,0,.38);box-shadow:3px 4px 21px rgba(0,0,0,.38)}.tribe-events-tooltip .tribe-events-arrow{width:20px;height:7px;background-image:url(images/tribe-theme/tribe-theme-tooltips.png);-webkit-background-size:37px 20px;background-size:37px 20px;bottom:-7px}.events-archive.events-gridview #tribe-events-content table .vevent{border-bottom:1px solid #e0e0e0}.events-archive.events-gridview #tribe-events-content table .tribe-events-last{border-bottom:0}.tribe-events-calendar thead th{background-color:#666;color:#fff;font-weight:bold;letter-spacing:0;padding:1em 0;border-left:1px solid #666;border-right:1px solid #666}.tribe-events-calendar td div[id*="tribe-events-daynum-"]{padding:4px 9px 6px}#tribe-events-content .tribe-events-tooltip h4{margin:0;background-color:transparent;font-size:18px;padding:0;letter-spacing:0;font-weight:bold}.tribe-events-tooltip .tribe-events-event-body{font-size:11px;padding:0}.tribe-events-tooltip .duration{font-style:normal;font-weight:bold;margin:0;padding:.4em 0 .5em}.tribe-events-tooltip .tribe-events-event-thumb{padding:.85em 1em 0 0}.tribe-events-tooltip p.entry-summary{font-size:13px;padding-top:.5em}.events-list.tribe-bar-is-disabled #tribe-events-content-wrapper{max-width:700px;margin:0 auto}.tribe-events-map.tribe-bar-is-disabled #tribe-events-content-wrapper{max-width:none}.tribe-events-filter-view #tribe_events_filters_wrapper{width:26.6%;padding:0 5.32% 15px 0}.tribe-events-filter-view #tribe-events-content{width:68.08%}.tribe-events-filter-view .tribe-events-filter_content{background-color:#f6f6f6;padding:2em 1.5em}.tribe_events_filter_item{padding-bottom:.4em;border-bottom:0}#tribe_events_filters_wrapper h3{margin-bottom:1em;text-transform:uppercase;color:#b2b2b2}#tribe_events_filters_wrapper .tribe_events_filter_item.closed h3 span:after{border-top-color:transparent}h2.tribe-events-tickets-title{font-size:17px}@media only screen and (min--moz-device-pixel-ratio:2),only screen and (-o-min-device-pixel-ratio:2/1),only screen and (-webkit-min-device-pixel-ratio:2),only screen and (min-device-pixel-ratio:2){.tribe-events-tooltip .tribe-events-arrow{background-image:url(images/tribe-theme/tribe-theme-tooltips@2x.png)}}
1
+ #tribe-events-content .tribe-events-tooltip h4,#tribe_events_filters_wrapper .tribe_events_slider_val,.single-tribe_events a.tribe-events-ical,.single-tribe_events a.tribe-events-gcal{color:#21759b}.tribe-events-calendar td.tribe-events-present div[id*="tribe-events-daynum-"],.tribe-events-calendar td.tribe-events-present div[id*="tribe-events-daynum-"]>a,#tribe_events_filters_wrapper input[type=submit],.tribe-events-button,.entry-content .tribe-events-button,.tribe-events-button.tribe-inactive,.entry-content .tribe-events-button:hover,.tribe-events-button:hover,.tribe-events-button.tribe-active:hover{background-color:#21759b}#tribe_events_filters_wrapper input[type=submit]:hover,.tribe-events-button.tribe-active:hover{background-color:#0f3647}.tribe-events-button.tribe-inactive,.tribe-events-button:hover,.entry-content .tribe-events-button:hover,.tribe-events-button.tribe-active:hover{color:#fff}#tribe_events_filters_wrapper h3 span:after{border-top-color:#21759b}#tribe_events_filters_wrapper .tribe_events_filter_item.closed h3 span:after{border-left-color:#21759b}ul.tribe-events-sub-nav a,.tribe-events-back a,.tribe-events-list-widget .tribe-events-widget-link a,.tribe-events-adv-list-widget .tribe-events-widget-link a{font-size:15px;font-weight:bold}.tribe-events-gcal{margin-right:1.25em}.tribe-events-divider{display:none}.tribe-events-event-image{margin-bottom:1.25em;text-align:left}h2.tribe-events-page-title,#tribe-geo-results h2.tribe-events-page-title{font-size:30px;font-weight:bold}#tribe-events-header .tribe-events-sub-nav li,#tribe-events-header .tribe-events-sub-nav .tribe-events-nav-next a{display:none}#tribe-events-header .tribe-events-sub-nav .tribe-events-nav-next{display:block}.single-tribe_events #tribe-events-footer,.tribe-events-day #tribe-events-footer,.events-list #tribe-events-footer,.tribe-events-map #tribe-events-footer,.tribe-events-photo #tribe-events-footer{border-top:1px solid #e5e5e5;padding-top:2em}.single-tribe_events #tribe-events-header{display:none}@media only screen and (max-width:767px){#tribe-events-header .tribe-events-sub-nav li a{display:none}}.tribe-events-list .vevent.hentry{border-bottom:0;padding:1.75em 0;position:relative}.tribe-events-list .vevent.hentry h2{font-size:1.6em}.tribe-events-list-separator-year{font-size:28px;padding-top:1.25em}.tribe-events-list-separator-year+.tribe-events-list-separator-month{margin-top:.25em}.tribe-events-list-separator-month{text-transform:none;font-size:24px;margin:1.25em auto;text-align:center;position:relative;background-color:transparent;z-index:1}.tribe-events-list-separator-month:after{content:'';border-bottom:1px solid #c2c2c2;height:1px;width:100%;display:block;position:absolute;top:50%;left:0;z-index:-1}.tribe-events-list-separator-month span{background-color:#fff;padding:0 7.5%}.tribe-events-list-separator-month+.vevent.hentry.tribe-events-first{padding-top:1.5em}.tribe-events-list .vevent.hentry.tribe-event-end-month{padding-bottom:1.5em}.tribe-events-loop .tribe-events-event-meta{margin-bottom:1em;font-size:13px}.tribe-events-list .tribe-events-loop .tribe-events-event-meta .recurringinfo{padding-left:0;font-weight:normal;vertical-align:top}.tribe-events-list .time-details,.tribe-events-list .tribe-events-venue-details{line-height:1.2}.tribe-events-list .tribe-events-venue-details,.tribe-events-event-meta address.tribe-events-address{font-weight:normal;font-style:italic}.tribe-events-event-meta address.tribe-events-address{padding-right:3px}@media only screen and (max-width:767px){.tribe-events-list .tribe-events-loop .tribe-events-event-meta .recurringinfo{display:block;padding:0}}.events-list .tribe-events-loop,.tribe-events-day .tribe-events-loop,.single-tribe_venue .tribe-events-loop,.single-tribe_organizer .tribe-events-loop{max-width:700px;margin:0 auto}.single-tribe_events h2.tribe-events-single-event-title{font-size:33px}.tribe-events-schedule{margin:1em 0 1.5em}.single-tribe_events .tribe-events-schedule .tribe-events-divider{display:inline-block;zoom:1;*display:inline;font-weight:normal}.single-tribe_events .tribe-events-schedule .recurringinfo{margin-right:.5em}.single-tribe_events .tribe-events-schedule h3{font-size:18px;margin:0}.single-tribe_events .tribe-events-cal-links{margin-bottom:1.75em;display:block;overflow:hidden}.single-tribe_events a.tribe-events-ical,.single-tribe_events a.tribe-events-ical:hover,.single-tribe_events a.tribe-events-gcal,.single-tribe_events a.tribe-events-gcal:hover{background-color:transparent;text-transform:none;font-size:14px;font-weight:bold;letter-spacing:0;padding:0;float:none;color:#21759b}.single-tribe_events .tribe-events-event-image{text-align:left;margin-bottom:1.25em}.tribe-events-event-schedule-details{margin-right:.5em}.tribe-events-meta-group .tribe-events-single-section-title{font-size:17px}.single-tribe_events .tribe-events-event-meta{font-size:14px}@media only screen and (max-width:767px){.single-tribe_events .tribe-events-schedule .recurringinfo{display:block;margin:1em 0 0}.single-tribe_events .tribe-events-schedule .recurringinfo .tribe-events-divider{display:none}}#tribe-events-content .tribe-events-calendar td{border:1px solid #d2d2d2;border-top:0;-webkit-transition:all .2s cubic-bezier(0.550,0.085,0.680,0.530);-moz-transition:all .2s cubic-bezier(0.550,0.085,0.680,0.530);-ms-transition:all .2s cubic-bezier(0.550,0.085,0.680,0.530);-o-transition:all .2s cubic-bezier(0.550,0.085,0.680,0.530);transition:all .2s cubic-bezier(0.550,0.085,0.680,0.530)}#tribe-events-content .tribe-events-calendar td:hover{background:#f7f7f7;-webkit-box-shadow:rgba(0,0,0,0.2) 0 0 10px;box-shadow:rgba(0,0,0,0.2) 0 0 10px}.tribe-events-othermonth{background:#f9f9f9}#tribe-events-content .tribe-events-calendar .tribe-events-othermonth:hover{-webkit-box-shadow:none;box-shadow:none}#tribe-events-content table.tribe-events-calendar{border-bottom:1px solid #d2d2d2;border-top:0}.tribe-events-calendar div[id*="tribe-events-daynum-"],.tribe-events-calendar div[id*="tribe-events-daynum-"] a{background-color:#b2b2b2;color:#fff;font-size:12px;font-weight:bold}.tribe-events-calendar div[id*="tribe-events-daynum-"] a:hover{color:#666}.tribe-events-calendar td.tribe-events-past div[id*="tribe-events-daynum-"],.tribe-events-calendar td.tribe-events-past div[id*="tribe-events-daynum-"]>a{background-color:#e0e0e0;color:#fff}.tribe-events-calendar td.tribe-events-past .tribe-events-month-event-title a,.tribe-events-calendar td.tribe-events-past .tribe-events-viewmore a{opacity:.5;filter:Alpha(opacity=50)}.tribe-events-calendar .tribe-events-tooltip,.tribe-events-week .tribe-events-tooltip,.recurring-info-tooltip{border:0;background-color:#fff;color:#606060;padding:.75em 1em 1.15em;-webkit-box-shadow:3px 4px 21px rgba(0,0,0,.38);-moz-box-shadow:3px 4px 21px rgba(0,0,0,.38);box-shadow:3px 4px 21px rgba(0,0,0,.38)}.tribe-events-tooltip .tribe-events-arrow{width:20px;height:7px;background-image:url(images/tribe-theme/tribe-theme-tooltips.png);-webkit-background-size:37px 20px;background-size:37px 20px;bottom:-7px}.events-archive.events-gridview #tribe-events-content table .vevent{border-bottom:1px solid #e0e0e0}.events-archive.events-gridview #tribe-events-content table .tribe-events-last{border-bottom:0}.tribe-events-calendar thead th{background-color:#666;color:#fff;font-weight:bold;letter-spacing:0;padding:1em 0;border-left:1px solid #666;border-right:1px solid #666}.tribe-events-calendar td div[id*="tribe-events-daynum-"]{padding:4px 9px 6px}#tribe-events-content .tribe-events-tooltip h4{margin:0;background-color:transparent;font-size:18px;padding:0;letter-spacing:0;font-weight:bold}.tribe-events-tooltip .tribe-events-event-body{font-size:11px;padding:0}.tribe-events-tooltip .duration{font-style:normal;font-weight:bold;margin:0;padding:.4em 0 .5em}.tribe-events-tooltip .tribe-events-event-thumb{padding:.85em 1em 0 0}.tribe-events-tooltip p.entry-summary{font-size:13px;padding-top:.5em}.events-list.tribe-bar-is-disabled #tribe-events-content-wrapper{max-width:700px;margin:0 auto}.tribe-events-map.tribe-bar-is-disabled #tribe-events-content-wrapper{max-width:none}.tribe-events-filter-view #tribe_events_filters_wrapper{width:26.6%;padding:0 5.32% 15px 0}.tribe-events-filter-view #tribe-events-content{width:68.08%}.tribe-events-filter-view .tribe-events-filter_content{background-color:#f6f6f6;padding:2em 1.5em}.tribe_events_filter_item{padding-bottom:.4em;border-bottom:0}#tribe_events_filters_wrapper h3{margin-bottom:1em;text-transform:uppercase;color:#b2b2b2}#tribe_events_filters_wrapper .tribe_events_filter_item.closed h3 span:after{border-top-color:transparent}h2.tribe-events-tickets-title{font-size:17px}@media only screen and (min--moz-device-pixel-ratio:2),only screen and (-o-min-device-pixel-ratio:2/1),only screen and (-webkit-min-device-pixel-ratio:2),only screen and (min-device-pixel-ratio:2){.tribe-events-tooltip .tribe-events-arrow{background-image:url(images/tribe-theme/tribe-theme-tooltips@2x.png)}}
the-events-calendar.php CHANGED
@@ -2,7 +2,7 @@
2
  /*
3
  Plugin Name: The Events Calendar
4
  Description: The Events Calendar is a carefully crafted, extensible plugin that lets you easily share your events. Beautiful. Solid. Awesome.
5
- Version: 3.1
6
  Author: Modern Tribe, Inc.
7
  Author URI: http://m.tri.be/1x
8
  Text Domain: tribe-events-calendar
2
  /*
3
  Plugin Name: The Events Calendar
4
  Description: The Events Calendar is a carefully crafted, extensible plugin that lets you easily share your events. Beautiful. Solid. Awesome.
5
+ Version: 3.2
6
  Author: Modern Tribe, Inc.
7
  Author URI: http://m.tri.be/1x
8
  Text Domain: tribe-events-calendar
views/default-template.php CHANGED
@@ -12,9 +12,9 @@
12
  *
13
  */
14
 
15
- if ( !defined('ABSPATH') ) { die('-1'); } ?>
16
 
17
- <?php get_header(); ?>
18
  <div id="tribe-events-pg-template">
19
  <?php tribe_events_before_html(); ?>
20
  <?php tribe_get_view(); ?>
12
  *
13
  */
14
 
15
+ if ( !defined('ABSPATH') ) { die('-1'); }
16
 
17
+ get_header(); ?>
18
  <div id="tribe-events-pg-template">
19
  <?php tribe_events_before_html(); ?>
20
  <?php tribe_get_view(); ?>